nodes: 0, module; 1, function_definition; 2, function_name:get_cached_filename; 3, parameters; 4, block; 5, identifier:self; 6, identifier:filename; 7, identifier:extention; 8, default_parameter; 9, expression_statement; 10, expression_statement; 11, return_statement; 12, identifier:settings_list; 13, None; 14, comment:"""Creates a filename with md5 cache string based on settings list
  
          Args:
              filename (str): the filename without extention
              extention (str): the file extention without dot. (i.e. 'pkl')
              settings_list (dict|list): the settings list as list (optional)
                  NB! The dictionaries have to be sorted or hash id will change
                  arbitrarely.
          """; 15, assignment; 16, call; 17, identifier:cached_name; 18, call; 19, attribute; 20, argument_list; 21, attribute; 22, argument_list; 23, string:"."; 24, identifier:join; 25, list; 26, string:"_"; 27, identifier:join; 28, list; 29, identifier:cached_name; 30, identifier:extention; 31, identifier:filename; 32, call; 33, attribute; 34, argument_list; 35, identifier:self; 36, identifier:get_hash
code: def get_cached_filename(self, filename, extention, settings_list=None):
          """Creates a filename with md5 cache string based on settings list
  
          Args:
              filename (str): the filename without extention
              extention (str): the file extention without dot. (i.e. 'pkl')
              settings_list (dict|list): the settings list as list (optional)
                  NB! The dictionaries have to be sorted or hash id will change
                  arbitrarely.
          """
          cached_name = "_".join([filename, self.get_hash()])
          return ".".join([cached_name, extention])