def __init__(self, libclass, libtags): MockTag.__init__(self) self.__tags = CaselessDict() tags = self.__tags tags.update(self.load(libtags['~filename'])[0]) tags['__tag_read'] = u'QuodLibet' self.library = libclass self.remove = partial(libclass.delete, track=libtags) self._libtags = libtags for key, value in libtags.items(): if not value and not isinstance(value, (int, long)): continue if key in mapping: tags.update(mapping[key](value)) else: if not isinstance(value, unicode): #Strings try: value = unicode(value, 'utf8', 'replace') except (TypeError, ValueError): try: value = unicode(value) #Usually numbers except: traceback.print_exc() continue tags[key] = [value] del (tags['~filename']) self.filepath = libtags['~filename'] self.set_attrs(ATTRIBUTES, self.__tags) self.update_tag_list()
def parse_album_page(page, album_source, url=None): cursor = Cursor(page, album_source) if url: cursor.output = CaselessDict({'CurrentUrl': url}) cursor.album = CaselessDict({'CurrentUrl': url}) cursor.parse_page() info = convert_dict(cursor.album) if hasattr(cursor.tracks, 'items'): tracks = [] for field, values in cursor.tracks.items(): values = convert_value(values) if tracks: for d, v in zip(tracks, values): d[field] = v else: tracks = [{field: v} for v in values] else: tracks = [_f for _f in map(convert_dict, cursor.tracks) if _f] return (info, tracks)
def __init__(self, text, source_lines): self.text = text self.all_lines = [z + ' ' for z in text.split('\n')] + [' '] self.all_lowered = [z.lower() for z in self.all_lines] self.lineno = 0 self.charno = 0 self.cache = '' self.source = source_lines self.debug = False self._field = '' self.tracks = [] self.album = CaselessDict() self.num_loop = 0 self.output = self.album self.stop = False self.track_fields = set(['track'])