Ejemplo n.º 1
0
    def __getattr__(self, attr):
        # returns the first matching key for the given attribute
        # in our list of comment strings

        if ((attr == "track_number") or (attr == "album_number")):
            try:
                # get the TRACKNUMBER/DISCNUMBER values
                # return the first value that contains an integer
                for value in self[self.ATTRIBUTE_MAP[attr]]:
                    integer = re.search(r'\d+', value)
                    if (integer is not None):
                        return int(integer.group(0))
                else:
                    # otherwise, return None
                    return None
            except KeyError:
                # if no TRACKNUMBER/DISCNUMBER, return None
                return None
        elif ((attr == "track_total") or (attr == "album_total")):
            try:
                # get the TRACKTOTAL/DISCTOTAL values
                # return the first value that contains an integer
                for value in self[self.ATTRIBUTE_MAP[attr]]:
                    integer = re.search(r'\d+', value)
                    if (integer is not None):
                        return int(integer.group(0))
            except KeyError:
                pass

            # if no TRACKTOTAL/DISCTOTAL,
            # or none of them contain an integer,
            # look for slashed TRACKNUMBER/DISCNUMBER values
            try:
                for value in self[{
                        "track_total": u"TRACKNUMBER",
                        "album_total": u"DISCNUMBER"
                }[attr]]:
                    integer = re.search(r'/\D*(\d+)', value)
                    if (integer is not None):
                        return int(integer.group(1))
            except KeyError:
                # no slashed TRACKNUMBER/DISCNUMBER values either
                # so return None
                return None
        elif (attr in self.ATTRIBUTE_MAP):
            # attribute is supported by VorbisComment
            try:
                # if present, return the first value
                return self[self.ATTRIBUTE_MAP[attr]][0]
            except KeyError:
                # if not present, return None
                return None
        elif (attr in self.FIELDS):
            # attribute is supported by MetaData
            # but not supported by VorbisComment
            return None
        else:
            # attribute is not MetaData-specific
            return MetaData.__getattribute__(self, attr)
Ejemplo n.º 2
0
 def __getattr__(self, attr):
     if attr in self.ATTRIBUTE_MAP:
         try:
             if attr in {'track_number', 'album_number'}:
                 return self[self.ATTRIBUTE_MAP[attr]].number()
             elif attr in {'track_total', 'album_total'}:
                 return self[self.ATTRIBUTE_MAP[attr]].total()
             else:
                 return self[self.ATTRIBUTE_MAP[attr]].__unicode__()
         except KeyError:
             return None
     elif attr in MetaData.FIELDS:
         return None
     else:
         return MetaData.__getattribute__(self, attr)
Ejemplo n.º 3
0
 def __getattr__(self, attr):
     if attr == "track_number":
         number = self.__track_number__
         if number > 0:
             return number
         else:
             return None
     elif attr in self.ID3v1_FIELDS:
         value = getattr(self, self.ID3v1_FIELDS[attr])
         if len(value) > 0:
             return value
         else:
             return None
     elif attr in self.FIELDS:
         return None
     else:
         return MetaData.__getattribute__(self, attr)
Ejemplo n.º 4
0
 def __getattr__(self, attr):
     if attr == "track_number":
         number = self.__track_number__
         if number > 0:
             return number
         else:
             return None
     elif attr in self.ID3v1_FIELDS:
         value = getattr(self, self.ID3v1_FIELDS[attr])
         if len(value) > 0:
             return value
         else:
             return None
     elif attr in self.FIELDS:
         return None
     else:
         return MetaData.__getattribute__(self, attr)
Ejemplo n.º 5
0
 def __getattr__(self, attr):
     if attr in self.ATTRIBUTE_MAP:
         try:
             if attr in {'track_number', 'album_number'}:
                 return self[self.ATTRIBUTE_MAP[attr]].number()
             elif attr in {'track_total', 'album_total'}:
                 return self[self.ATTRIBUTE_MAP[attr]].total()
             elif attr == 'compilation':
                 return self[self.ATTRIBUTE_MAP[attr]].__unicode__() == u"1"
             else:
                 return self[self.ATTRIBUTE_MAP[attr]].__unicode__()
         except KeyError:
             return None
     elif attr in MetaData.FIELDS:
         return None
     else:
         return MetaData.__getattribute__(self, attr)
Ejemplo n.º 6
0
 def __getattr__(self, attr):
     if (attr == "track_number"):
         number = ord(self.__track_number__)
         if (number > 0):
             return number
         else:
             return None
     elif (attr in self.ID3v1_FIELDS):
         value = getattr(self,
                         self.ID3v1_FIELDS[attr]).rstrip(chr(0)).decode(
                             'ascii', 'replace')
         if (len(value) > 0):
             return value
         else:
             return None
     elif (attr in self.FIELDS):
         return None
     else:
         return MetaData.__getattribute__(self, attr)
Ejemplo n.º 7
0
 def __getattr__(self, attr):
     if (attr == "track_number"):
         number = ord(self.__track_number__)
         if (number > 0):
             return number
         else:
             return None
     elif (attr in self.ID3v1_FIELDS):
         value = getattr(
             self,
             self.ID3v1_FIELDS[attr]).rstrip(chr(0)).decode('ascii',
                                                            'replace')
         if (len(value) > 0):
             return value
         else:
             return None
     elif (attr in self.FIELDS):
         return None
     else:
         return MetaData.__getattribute__(self, attr)
Ejemplo n.º 8
0
    def __getattr__(self, attr):
        # returns the first matching key for the given attribute
        # in our list of comment strings

        if attr in self.ATTRIBUTE_MAP:
            key = self.ATTRIBUTE_MAP[attr]

            if attr in {'track_number', 'album_number'}:
                try:
                    # get the TRACKNUMBER/DISCNUMBER values
                    # return the first value that contains an integer
                    for value in self[key]:
                        integer = re.search(r'\d+', value)
                        if integer is not None:
                            return int(integer.group(0))
                    else:
                        # otherwise, return None
                        return None
                except KeyError:
                    # if no TRACKNUMBER/DISCNUMBER, return None
                    return None
            elif attr in {'track_total', 'album_total'}:
                try:
                    # get the TRACKTOTAL/DISCTOTAL values
                    # return the first value that contains an integer
                    for value in self[key]:
                        integer = re.search(r'\d+', value)
                        if integer is not None:
                            return int(integer.group(0))
                except KeyError:
                    pass

                # if no TRACKTOTAL/DISCTOTAL,
                # or none of them contain an integer,
                # look for slashed TRACKNUMBER/DISCNUMBER values
                try:
                    for value in self[{
                            "track_total": u"TRACKNUMBER",
                            "album_total": u"DISCNUMBER"
                    }[attr]]:
                        if u"/" in value:
                            integer = re.search(r'\d+',
                                                value.split(u"/", 1)[1])
                            if integer is not None:
                                return int(integer.group(0))
                    else:
                        return None
                except KeyError:
                    # no slashed TRACKNUMBER/DISCNUMBER values either
                    # so return None
                    return None
            elif attr == "compilation":
                try:
                    # if present, return True if the first value is "1"
                    return self[key][0] == u"1"
                except KeyError:
                    # if not present, return None
                    return None
            else:
                # attribute is supported by VorbisComment
                try:
                    # if present, return the first value
                    return self[key][0]
                except KeyError:
                    # if not present, return None
                    return None
        elif attr in self.FIELDS:
            # attribute is supported by MetaData
            # but not supported by VorbisComment
            return None
        else:
            # attribute is not MetaData-specific
            return MetaData.__getattribute__(self, attr)
    def __getattr__(self, attr):
        # returns the first matching key for the given attribute
        # in our list of comment strings

        if attr in self.ATTRIBUTE_MAP:
            key = self.ATTRIBUTE_MAP[attr]

            if attr in {'track_number', 'album_number'}:
                try:
                    # get the TRACKNUMBER/DISCNUMBER values
                    # return the first value that contains an integer
                    for value in self[key]:
                        integer = re.search(r'\d+', value)
                        if integer is not None:
                            return int(integer.group(0))
                    else:
                        # otherwise, return None
                        return None
                except KeyError:
                    # if no TRACKNUMBER/DISCNUMBER, return None
                    return None
            elif attr in {'track_total', 'album_total'}:
                try:
                    # get the TRACKTOTAL/DISCTOTAL values
                    # return the first value that contains an integer
                    for value in self[key]:
                        integer = re.search(r'\d+', value)
                        if integer is not None:
                            return int(integer.group(0))
                except KeyError:
                    pass

                # if no TRACKTOTAL/DISCTOTAL,
                # or none of them contain an integer,
                # look for slashed TRACKNUMBER/DISCNUMBER values
                try:
                    for value in self[{"track_total": u"TRACKNUMBER",
                                       "album_total": u"DISCNUMBER"}[attr]]:
                        if u"/" in value:
                            integer = re.search(r'\d+',
                                                value.split(u"/", 1)[1])
                            if integer is not None:
                                return int(integer.group(0))
                    else:
                        return None
                except KeyError:
                    # no slashed TRACKNUMBER/DISCNUMBER values either
                    # so return None
                    return None
            elif attr == "compilation":
                try:
                    # if present, return True if the first value is "1"
                    return self[key][0] == u"1"
                except KeyError:
                    # if not present, return None
                    return None
            else:
                # attribute is supported by VorbisComment
                try:
                    # if present, return the first value
                    return self[key][0]
                except KeyError:
                    # if not present, return None
                    return None
        elif attr in self.FIELDS:
            # attribute is supported by MetaData
            # but not supported by VorbisComment
            return None
        else:
            # attribute is not MetaData-specific
            return MetaData.__getattribute__(self, attr)
Ejemplo n.º 10
0
    def __getattr__(self, attr):
        import re

        if (attr == 'track_number'):
            try:
                track_text = unicode(self["Track"])
                track = re.search(r'\d+', track_text)
                if (track is not None):
                    track_number = int(track.group(0))
                    if ((track_number == 0) and
                        (re.search(r'/.*?(\d+)',
                                   track_text) is not None)):
                        # if track_total is nonzero and track_number is 0
                        # track_number is a placeholder
                        # so treat track_number as None
                        return None
                    else:
                        return track_number
                else:
                    # "Track" isn't an integer
                    return None
            except KeyError:
                # no "Track" in list of items
                return None
        elif (attr == 'track_total'):
            try:
                track = re.search(r'/.*?(\d+)', unicode(self["Track"]))
                if (track is not None):
                    return int(track.group(1))
                else:
                    # no slashed integer field in "Track"
                    return None
            except KeyError:
                # no "Track" in list of items
                return None
        elif (attr == 'album_number'):
            try:
                media_text = unicode(self["Media"])
                media = re.search(r'\d+', media_text)
                if (media is not None):
                    album_number = int(media.group(0))
                    if ((album_number == 0) and
                        (re.search(r'/.*?(\d+)',
                                   media_text) is not None)):
                        # if album_total is nonzero and album_number is 0
                        # album_number is a placeholder
                        # so treat album_number as None
                        return None
                    else:
                        return album_number
                else:
                    # "Media" isn't an integer
                    return None
            except KeyError:
                # no "Media" in list of items
                return None
        elif (attr == 'album_total'):
            try:
                media = re.search(r'/.*?(\d+)', unicode(self["Media"]))
                if (media is not None):
                    return int(media.group(1))
                else:
                    # no slashed integer field in "Media"
                    return None
            except KeyError:
                # no "Media" in list of items
                return None
        elif (attr in self.ATTRIBUTE_MAP):
            try:
                return unicode(self[self.ATTRIBUTE_MAP[attr]])
            except KeyError:
                return None
        elif (attr in MetaData.FIELDS):
            return None
        else:
            return MetaData.__getattribute__(self, attr)
Ejemplo n.º 11
0
    def __getattr__(self, attr):
        import re

        if (attr == 'track_number'):
            try:
                track_text = unicode(self["Track"])
                track = re.search(r'\d+', track_text)
                if (track is not None):
                    track_number = int(track.group(0))
                    if ((track_number == 0) and
                        (re.search(r'/.*?(\d+)', track_text) is not None)):
                        # if track_total is nonzero and track_number is 0
                        # track_number is a placeholder
                        # so treat track_number as None
                        return None
                    else:
                        return track_number
                else:
                    # "Track" isn't an integer
                    return None
            except KeyError:
                # no "Track" in list of items
                return None
        elif (attr == 'track_total'):
            try:
                track = re.search(r'/.*?(\d+)', unicode(self["Track"]))
                if (track is not None):
                    return int(track.group(1))
                else:
                    # no slashed integer field in "Track"
                    return None
            except KeyError:
                # no "Track" in list of items
                return None
        elif (attr == 'album_number'):
            try:
                media_text = unicode(self["Media"])
                media = re.search(r'\d+', media_text)
                if (media is not None):
                    album_number = int(media.group(0))
                    if ((album_number == 0) and
                        (re.search(r'/.*?(\d+)', media_text) is not None)):
                        # if album_total is nonzero and album_number is 0
                        # album_number is a placeholder
                        # so treat album_number as None
                        return None
                    else:
                        return album_number
                else:
                    # "Media" isn't an integer
                    return None
            except KeyError:
                # no "Media" in list of items
                return None
        elif (attr == 'album_total'):
            try:
                media = re.search(r'/.*?(\d+)', unicode(self["Media"]))
                if (media is not None):
                    return int(media.group(1))
                else:
                    # no slashed integer field in "Media"
                    return None
            except KeyError:
                # no "Media" in list of items
                return None
        elif (attr in self.ATTRIBUTE_MAP):
            try:
                return unicode(self[self.ATTRIBUTE_MAP[attr]])
            except KeyError:
                return None
        elif (attr in MetaData.FIELDS):
            return None
        else:
            return MetaData.__getattribute__(self, attr)