Exemple #1
0
    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()
Exemple #2
0
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)
Exemple #3
0
 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'])