Пример #1
0
 def __getattr__(self, key):
     if (key == 'track_number'):
         try:
             return int(re.findall('\d+',
                                   unicode(self.get("Track", u"0")))[0])
         except IndexError:
             return 0
     elif (key == 'track_total'):
         try:
             return int(re.findall('\d+/(\d+)',
                                   unicode(self.get("Track", u"0")))[0])
         except IndexError:
             return 0
     elif (key == 'album_number'):
         try:
             return int(re.findall('\d+',
                                   unicode(self.get("Media", u"0")))[0])
         except IndexError:
             return 0
     elif (key == 'album_total'):
         try:
             return int(re.findall('\d+/(\d+)',
                                   unicode(self.get("Media", u"0")))[0])
         except IndexError:
             return 0
     elif (key in self.ATTRIBUTE_MAP):
         return unicode(self.get(self.ATTRIBUTE_MAP[key], u''))
     elif (key in MetaData.FIELDS):
         return u''
     else:
         try:
             return self.__dict__[key]
         except KeyError:
             raise AttributeError(key)
Пример #2
0
    def read_data(cls, data):
        if (not data.startswith(u"# xmcd")):
            raise XMCDException("")

        disc_length = re.search(r'# Disc length: (\d+)', data)
        if (disc_length is not None):
            disc_length = int(disc_length.group(1))

        track_lengths = re.compile(r'# Track frame offsets:\s+[#\s\d]+',
                                   re.DOTALL).search(data)
        if (track_lengths is not None):
            track_lengths = map(int, re.findall(r'\d+',
                                                track_lengths.group(0)))

        fields = {}

        for line in re.findall(r'.+=.*[\r\n]', data):
            (field, value) = line.split(u'=', 1)
            field = field.encode('ascii')
            value = value.rstrip('\r\n')
            if (field in fields.keys()):
                fields[field] += value
            else:
                fields[field] = value

        return XMCD(values=fields, offsets=track_lengths, length=disc_length)
Пример #3
0
    def clean(self, fixes_applied):
        tag_items = []
        for tag in self.tags:
            if (tag.type == 0):
                text = unicode(tag)

                #check trailing whitespace
                fix1 = text.rstrip()
                if (fix1 != text):
                    fixes_applied.append(
                        _(u"removed trailing whitespace from %(field)s") %
                        {"field": tag.key.decode('ascii')})

                #check leading whitespace
                fix2 = fix1.lstrip()
                if (fix2 != fix1):
                    fixes_applied.append(
                        _(u"removed leading whitespace from %(field)s") %
                        {"field": tag.key.decode('ascii')})

                if (tag.key in self.INTEGER_ITEMS):
                    try:
                        current = int(re.findall('\d+', fix2)[0])
                    except IndexError:
                        current = 0
                    try:
                        total = int(re.findall('\d+/(\d+)', fix2)[0])
                    except IndexError:
                        total = 0
                    if (total != 0):
                        fix3 = u"%d/%d" % (current, total)
                    else:
                        fix3 = unicode(current)
                    if (fix3 != fix2):
                        fixes_applied.append(
                            _(u"removed leading zeroes from %(field)s") %
                            {"field": tag.key.decode('ascii')})
                else:
                    fix3 = fix2

                if (len(fix3) > 0):
                    tag_items.append(ApeTagItem.string(tag.key, fix3))
                else:
                    fixes_applied.append(
                        _("removed empty field %(field)s") %
                        {"field": tag.key.decode('ascii')})
            else:
                tag_items.append(tag)

        return self.__class__(tag_items,
                              self.contains_header,
                              self.contains_footer)
Пример #4
0
 def __getattr__(self, key):
     if (key == 'track_number'):
         try:
             return int(
                 re.findall('\d+', unicode(self.get("Track", u"0")))[0])
         except IndexError:
             return 0
     elif (key == 'track_total'):
         try:
             return int(
                 re.findall('\d+/(\d+)', unicode(self.get("Track",
                                                          u"0")))[0])
         except IndexError:
             return 0
     elif (key == 'album_number'):
         try:
             return int(
                 re.findall('\d+', unicode(self.get("Media", u"0")))[0])
         except IndexError:
             return 0
     elif (key == 'album_total'):
         try:
             return int(
                 re.findall('\d+/(\d+)', unicode(self.get("Media",
                                                          u"0")))[0])
         except IndexError:
             return 0
     elif (key in self.ATTRIBUTE_MAP):
         return unicode(self.get(self.ATTRIBUTE_MAP[key], u''))
     elif (key in MetaData.__FIELDS__):
         return u''
     else:
         try:
             return self.__dict__[key]
         except KeyError:
             raise AttributeError(key)