fixed a major bug in base module. made Registry class subscriptable. added stats in weeklyXXXChart classes.
This commit is contained in:
parent
7683ad87c2
commit
9795b1f18f
@ -102,6 +102,7 @@ class Album(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Tag(
|
Tag(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
url = t.findtext('url')
|
url = t.findtext('url')
|
||||||
)
|
)
|
||||||
@ -143,6 +144,7 @@ class Album(LastfmBase):
|
|||||||
self.__topTags = [
|
self.__topTags = [
|
||||||
Tag(
|
Tag(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
url = t.findtext('url')
|
url = t.findtext('url')
|
||||||
)
|
)
|
||||||
@ -160,6 +162,7 @@ class Album(LastfmBase):
|
|||||||
name = data.findtext('name'),
|
name = data.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
api,
|
api,
|
||||||
|
subject = self,
|
||||||
name = data.findtext('artist'),
|
name = data.findtext('artist'),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
@ -92,6 +92,7 @@ class Artist(LastfmBase):
|
|||||||
self.__similar = [
|
self.__similar = [
|
||||||
Artist(
|
Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
mbid = a.findtext('mbid'),
|
mbid = a.findtext('mbid'),
|
||||||
stats = Stats(
|
stats = Stats(
|
||||||
@ -129,6 +130,7 @@ class Artist(LastfmBase):
|
|||||||
self.__topTags = [
|
self.__topTags = [
|
||||||
Tag(
|
Tag(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
url = t.findtext('url')
|
url = t.findtext('url')
|
||||||
)
|
)
|
||||||
@ -168,6 +170,7 @@ class Artist(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Album(
|
Album(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
artist = self,
|
artist = self,
|
||||||
mbid = a.findtext('mbid'),
|
mbid = a.findtext('mbid'),
|
||||||
@ -195,6 +198,7 @@ class Artist(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
User(
|
User(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = u.findtext('name'),
|
name = u.findtext('name'),
|
||||||
url = u.findtext('url'),
|
url = u.findtext('url'),
|
||||||
image = dict([(i.get('size'), i.text) for i in u.findall('image')]),
|
image = dict([(i.get('size'), i.text) for i in u.findall('image')]),
|
||||||
@ -219,6 +223,7 @@ class Artist(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Track(
|
Track(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
artist = self,
|
artist = self,
|
||||||
mbid = t.findtext('mbid'),
|
mbid = t.findtext('mbid'),
|
||||||
@ -303,6 +308,7 @@ class Artist(LastfmBase):
|
|||||||
self.__similar = [
|
self.__similar = [
|
||||||
Artist(
|
Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
url = a.findtext('url'),
|
url = a.findtext('url'),
|
||||||
image = dict([(i.get('size'), i.text) for i in a.findall('image')])
|
image = dict([(i.get('size'), i.text) for i in a.findall('image')])
|
||||||
@ -312,6 +318,7 @@ class Artist(LastfmBase):
|
|||||||
self.__topTags = [
|
self.__topTags = [
|
||||||
Tag(
|
Tag(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
url = t.findtext('url')
|
url = t.findtext('url')
|
||||||
)
|
)
|
||||||
|
@ -16,6 +16,11 @@ class LastfmBase(object):
|
|||||||
_lock = Lock()
|
_lock = Lock()
|
||||||
|
|
||||||
def __new__(cls, *args, **kwds):
|
def __new__(cls, *args, **kwds):
|
||||||
|
subject = None
|
||||||
|
if 'subject' in kwds and not cls.__name__.startswith('Weekly'):
|
||||||
|
subject = kwds['subject']
|
||||||
|
del kwds['subject']
|
||||||
|
|
||||||
if 'bypassRegistry' in kwds:
|
if 'bypassRegistry' in kwds:
|
||||||
del kwds['bypassRegistry']
|
del kwds['bypassRegistry']
|
||||||
inst = object.__new__(cls)
|
inst = object.__new__(cls)
|
||||||
@ -23,6 +28,9 @@ class LastfmBase(object):
|
|||||||
return inst
|
return inst
|
||||||
|
|
||||||
key = cls.hashFunc(*args, **kwds)
|
key = cls.hashFunc(*args, **kwds)
|
||||||
|
if subject is not None:
|
||||||
|
key = (hash(subject), key)
|
||||||
|
|
||||||
LastfmBase._lock.acquire()
|
LastfmBase._lock.acquire()
|
||||||
try:
|
try:
|
||||||
inst, alreadyRegistered = LastfmBase.register(object.__new__(cls), key)
|
inst, alreadyRegistered = LastfmBase.register(object.__new__(cls), key)
|
||||||
|
@ -19,15 +19,15 @@ from weeklychart import WeeklyAlbumChart, WeeklyArtistChart, WeeklyTrackChart
|
|||||||
|
|
||||||
class Registry(object):
|
class Registry(object):
|
||||||
"""The registry to contain all the entities"""
|
"""The registry to contain all the entities"""
|
||||||
keys = [Album, Artist, Event, Location, Country, Group,
|
keys = [c.__name__ for c in [Album, Artist, Event, Location, Country, Group,
|
||||||
Playlist, Tag, Track, User, WeeklyAlbumChart, WeeklyArtistChart, WeeklyTrackChart]
|
Playlist, Tag, Track, User, WeeklyAlbumChart, WeeklyArtistChart, WeeklyTrackChart]]
|
||||||
|
|
||||||
def get(self, name):
|
def __getitem__(self, name):
|
||||||
if name not in Registry.keys:
|
if name not in Registry.keys:
|
||||||
raise LastfmError("Key does not correspond to a valid class")
|
raise LastfmError("Key does not correspond to a valid class")
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
vals = LastfmBase.registry[name].values()
|
vals = LastfmBase.registry[eval(name)].values()
|
||||||
vals.sort()
|
vals.sort()
|
||||||
return vals
|
return vals
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
@ -53,6 +53,7 @@ class Tag(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Tag(
|
Tag(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
url = t.findtext('url'),
|
url = t.findtext('url'),
|
||||||
streamable = (t.findtext('streamable') == "1"),
|
streamable = (t.findtext('streamable') == "1"),
|
||||||
@ -73,9 +74,11 @@ class Tag(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Album(
|
Album(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('artist/name'),
|
name = a.findtext('artist/name'),
|
||||||
mbid = a.findtext('artist/mbid'),
|
mbid = a.findtext('artist/mbid'),
|
||||||
url = a.findtext('artist/url'),
|
url = a.findtext('artist/url'),
|
||||||
@ -105,6 +108,7 @@ class Tag(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Artist(
|
Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
mbid = a.findtext('mbid'),
|
mbid = a.findtext('mbid'),
|
||||||
stats = Stats(
|
stats = Stats(
|
||||||
@ -132,9 +136,11 @@ class Tag(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Track(
|
Track(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('artist/name'),
|
name = t.findtext('artist/name'),
|
||||||
mbid = t.findtext('artist/mbid'),
|
mbid = t.findtext('artist/mbid'),
|
||||||
url = t.findtext('artist/url'),
|
url = t.findtext('artist/url'),
|
||||||
|
@ -125,9 +125,11 @@ class Track(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Track(
|
Track(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('artist/name'),
|
name = t.findtext('artist/name'),
|
||||||
mbid = t.findtext('artist/mbid'),
|
mbid = t.findtext('artist/mbid'),
|
||||||
url = t.findtext('artist/url')
|
url = t.findtext('artist/url')
|
||||||
@ -162,6 +164,7 @@ class Track(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
User(
|
User(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = u.findtext('name'),
|
name = u.findtext('name'),
|
||||||
url = u.findtext('url'),
|
url = u.findtext('url'),
|
||||||
image = dict([(i.get('size'), i.text) for i in u.findall('image')]),
|
image = dict([(i.get('size'), i.text) for i in u.findall('image')]),
|
||||||
@ -191,6 +194,7 @@ class Track(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Tag(
|
Tag(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
url = t.findtext('url'),
|
url = t.findtext('url'),
|
||||||
stats = Stats(
|
stats = Stats(
|
||||||
|
33
src/user.py
33
src/user.py
@ -97,6 +97,7 @@ class User(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
User(
|
User(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = u.findtext('name'),
|
name = u.findtext('name'),
|
||||||
image = dict([(i.get('size'), i.text) for i in u.findall('image')]),
|
image = dict([(i.get('size'), i.text) for i in u.findall('image')]),
|
||||||
url = u.findtext('url'),
|
url = u.findtext('url'),
|
||||||
@ -118,6 +119,7 @@ class User(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
User(
|
User(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = u.findtext('name'),
|
name = u.findtext('name'),
|
||||||
image = {'medium': u.findtext('image')},
|
image = {'medium': u.findtext('image')},
|
||||||
url = u.findtext('url'),
|
url = u.findtext('url'),
|
||||||
@ -151,9 +153,11 @@ class User(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Track(
|
Track(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('artist/name'),
|
name = t.findtext('artist/name'),
|
||||||
mbid = t.findtext('artist/mbid'),
|
mbid = t.findtext('artist/mbid'),
|
||||||
url = t.findtext('artist/url'),
|
url = t.findtext('artist/url'),
|
||||||
@ -176,17 +180,21 @@ class User(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Track(
|
Track(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('artist'),
|
name = t.findtext('artist'),
|
||||||
mbid = t.find('artist').attrib['mbid'],
|
mbid = t.find('artist').attrib['mbid'],
|
||||||
),
|
),
|
||||||
album = Album(
|
album = Album(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('album'),
|
name = t.findtext('album'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('artist'),
|
name = t.findtext('artist'),
|
||||||
mbid = t.find('artist').attrib['mbid'],
|
mbid = t.find('artist').attrib['mbid'],
|
||||||
),
|
),
|
||||||
@ -225,9 +233,11 @@ class User(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Album(
|
Album(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('artist/name'),
|
name = a.findtext('artist/name'),
|
||||||
mbid = a.findtext('artist/mbid'),
|
mbid = a.findtext('artist/mbid'),
|
||||||
url = a.findtext('artist/url'),
|
url = a.findtext('artist/url'),
|
||||||
@ -263,6 +273,7 @@ class User(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Artist(
|
Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
mbid = a.findtext('mbid'),
|
mbid = a.findtext('mbid'),
|
||||||
stats = Stats(
|
stats = Stats(
|
||||||
@ -295,9 +306,11 @@ class User(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Track(
|
Track(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('artist/name'),
|
name = t.findtext('artist/name'),
|
||||||
mbid = t.findtext('artist/mbid'),
|
mbid = t.findtext('artist/mbid'),
|
||||||
url = t.findtext('artist/url'),
|
url = t.findtext('artist/url'),
|
||||||
@ -333,6 +346,7 @@ class User(LastfmBase):
|
|||||||
return [
|
return [
|
||||||
Tag(
|
Tag(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
url = t.findtext('url'),
|
url = t.findtext('url'),
|
||||||
stats = Stats(
|
stats = Stats(
|
||||||
@ -486,9 +500,11 @@ class User(LastfmBase):
|
|||||||
for a in data.findall('album'):
|
for a in data.findall('album'):
|
||||||
yield Album(
|
yield Album(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('artist/name'),
|
name = a.findtext('artist/name'),
|
||||||
mbid = a.findtext('artist/mbid'),
|
mbid = a.findtext('artist/mbid'),
|
||||||
url = a.findtext('artist/url'),
|
url = a.findtext('artist/url'),
|
||||||
@ -533,6 +549,7 @@ class User(LastfmBase):
|
|||||||
for a in data.findall('artist'):
|
for a in data.findall('artist'):
|
||||||
yield Artist(
|
yield Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
mbid = a.findtext('mbid'),
|
mbid = a.findtext('mbid'),
|
||||||
stats = Stats(
|
stats = Stats(
|
||||||
@ -575,9 +592,11 @@ class User(LastfmBase):
|
|||||||
for t in data.findall('track'):
|
for t in data.findall('track'):
|
||||||
yield Track(
|
yield Track(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
self.__api,
|
self.__api,
|
||||||
|
subject = self,
|
||||||
name = t.findtext('artist/name'),
|
name = t.findtext('artist/name'),
|
||||||
mbid = t.findtext('artist/mbid'),
|
mbid = t.findtext('artist/mbid'),
|
||||||
url = t.findtext('artist/url'),
|
url = t.findtext('artist/url'),
|
||||||
@ -606,6 +625,16 @@ class User(LastfmBase):
|
|||||||
@LastfmBase.cachedProperty
|
@LastfmBase.cachedProperty
|
||||||
def tracks(self):
|
def tracks(self):
|
||||||
return self.getTracks()
|
return self.getTracks()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def hashFunc(*args, **kwds):
|
||||||
|
try:
|
||||||
|
return hash(kwds['user'])
|
||||||
|
except KeyError:
|
||||||
|
raise LastfmError("user has to be provided for hashing")
|
||||||
|
|
||||||
|
def __hash__(self):
|
||||||
|
return self.__class__.hashFunc(user = self.user)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return "<lastfm.User.Library: for user '%s'>" % self.user.name
|
return "<lastfm.User.Library: for user '%s'>" % self.user.name
|
||||||
@ -626,7 +655,5 @@ from weeklychart import WeeklyChart, WeeklyAlbumChart, WeeklyArtistChart, Weekly
|
|||||||
#TODO
|
#TODO
|
||||||
#write exceptions
|
#write exceptions
|
||||||
#argument type checking
|
#argument type checking
|
||||||
#extra methods in weeklycharts
|
|
||||||
#setup.py
|
|
||||||
#cross check with website
|
#cross check with website
|
||||||
#registry issue
|
#parse xml in chunks
|
@ -9,22 +9,28 @@ from base import LastfmBase
|
|||||||
class WeeklyChart(LastfmBase):
|
class WeeklyChart(LastfmBase):
|
||||||
"""A class for representing the weekly charts"""
|
"""A class for representing the weekly charts"""
|
||||||
|
|
||||||
def init(self, subject, start, end):
|
def init(self, subject, start, end,
|
||||||
self._subject = subject
|
stats = None):
|
||||||
self._start = start
|
self.__subject = subject
|
||||||
self._end = end
|
self.__start = start
|
||||||
|
self.__end = end
|
||||||
|
self.__stats = stats
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def subject(self):
|
def subject(self):
|
||||||
return self._subject
|
return self.__subject
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def start(self):
|
def start(self):
|
||||||
return self._start
|
return self.__start
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def end(self):
|
def end(self):
|
||||||
return self._end
|
return self.__end
|
||||||
|
|
||||||
|
@property
|
||||||
|
def stats(self):
|
||||||
|
return self.__stats
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def createFromData(api, subject, data):
|
def createFromData(api, subject, data):
|
||||||
@ -52,12 +58,12 @@ class WeeklyChart(LastfmBase):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def hashFunc(*args, **kwds):
|
def hashFunc(*args, **kwds):
|
||||||
try:
|
try:
|
||||||
return "%s%s%s%s" % (
|
return hash("%s%s%s%s" % (
|
||||||
hash(kwds['subject'].__class__.__name__),
|
kwds['subject'].__class__.__name__,
|
||||||
hash(kwds['subject'].name),
|
kwds['subject'].name,
|
||||||
hash(kwds['start']),
|
kwds['start'],
|
||||||
hash(kwds['end'])
|
kwds['end']
|
||||||
)
|
))
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise LastfmError("subject, start and end have to be provided for hashing")
|
raise LastfmError("subject, start and end have to be provided for hashing")
|
||||||
|
|
||||||
@ -94,10 +100,8 @@ class WeeklyChart(LastfmBase):
|
|||||||
|
|
||||||
class WeeklyAlbumChart(WeeklyChart):
|
class WeeklyAlbumChart(WeeklyChart):
|
||||||
"""A class for representing the weekly album charts"""
|
"""A class for representing the weekly album charts"""
|
||||||
def init(self, subject, start, end, albums):
|
def init(self, subject, start, end, stats, albums):
|
||||||
self._subject = subject
|
super(WeeklyAlbumChart, self).init(subject, start, end, stats)
|
||||||
self._start = start
|
|
||||||
self._end = end
|
|
||||||
self.__albums = albums
|
self.__albums = albums
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -106,17 +110,34 @@ class WeeklyAlbumChart(WeeklyChart):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def createFromData(api, subject, data):
|
def createFromData(api, subject, data):
|
||||||
|
w = WeeklyChart(
|
||||||
|
subject = subject,
|
||||||
|
start = datetime.utcfromtimestamp(int(data.attrib['from'])),
|
||||||
|
end = datetime.utcfromtimestamp(int(data.attrib['to'])),
|
||||||
|
)
|
||||||
return WeeklyAlbumChart(
|
return WeeklyAlbumChart(
|
||||||
subject = subject,
|
subject = subject,
|
||||||
start = datetime.utcfromtimestamp(int(data.attrib['from'])),
|
start = datetime.utcfromtimestamp(int(data.attrib['from'])),
|
||||||
end = datetime.utcfromtimestamp(int(data.attrib['to'])),
|
end = datetime.utcfromtimestamp(int(data.attrib['to'])),
|
||||||
|
stats = Stats(
|
||||||
|
subject = subject,
|
||||||
|
playcount = reduce(
|
||||||
|
lambda x,y:(
|
||||||
|
x + int(y.findtext('playcount'))
|
||||||
|
),
|
||||||
|
data.findall('album'),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
),
|
||||||
albums = [
|
albums = [
|
||||||
Album(
|
Album(
|
||||||
api,
|
api,
|
||||||
|
subject = w,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
mbid = a.findtext('mbid'),
|
mbid = a.findtext('mbid'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
api,
|
api,
|
||||||
|
subject = w,
|
||||||
name = a.findtext('artist'),
|
name = a.findtext('artist'),
|
||||||
mbid = a.find('artist').attrib['mbid'],
|
mbid = a.find('artist').attrib['mbid'],
|
||||||
),
|
),
|
||||||
@ -133,10 +154,8 @@ class WeeklyAlbumChart(WeeklyChart):
|
|||||||
|
|
||||||
class WeeklyArtistChart(WeeklyChart):
|
class WeeklyArtistChart(WeeklyChart):
|
||||||
"""A class for representing the weekly artist charts"""
|
"""A class for representing the weekly artist charts"""
|
||||||
def init(self, subject, start, end, artists):
|
def init(self, subject, start, end, stats, artists):
|
||||||
self._subject = subject
|
super(WeeklyArtistChart, self).init(subject, start, end, stats)
|
||||||
self._start = start
|
|
||||||
self._end = end
|
|
||||||
self.__artists = artists
|
self.__artists = artists
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -145,13 +164,29 @@ class WeeklyArtistChart(WeeklyChart):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def createFromData(api, subject, data):
|
def createFromData(api, subject, data):
|
||||||
|
w = WeeklyChart(
|
||||||
|
subject = subject,
|
||||||
|
start = datetime.utcfromtimestamp(int(data.attrib['from'])),
|
||||||
|
end = datetime.utcfromtimestamp(int(data.attrib['to'])),
|
||||||
|
)
|
||||||
return WeeklyArtistChart(
|
return WeeklyArtistChart(
|
||||||
subject = subject,
|
subject = subject,
|
||||||
start = datetime.utcfromtimestamp(int(data.attrib['from'])),
|
start = datetime.utcfromtimestamp(int(data.attrib['from'])),
|
||||||
end = datetime.utcfromtimestamp(int(data.attrib['to'])),
|
end = datetime.utcfromtimestamp(int(data.attrib['to'])),
|
||||||
|
stats = Stats(
|
||||||
|
subject = subject,
|
||||||
|
playcount = reduce(
|
||||||
|
lambda x,y:(
|
||||||
|
x + int(y.findtext('playcount'))
|
||||||
|
),
|
||||||
|
data.findall('artist'),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
),
|
||||||
artists = [
|
artists = [
|
||||||
Artist(
|
Artist(
|
||||||
api,
|
api,
|
||||||
|
subject = w,
|
||||||
name = a.findtext('name'),
|
name = a.findtext('name'),
|
||||||
mbid = a.findtext('mbid'),
|
mbid = a.findtext('mbid'),
|
||||||
stats = Stats(
|
stats = Stats(
|
||||||
@ -167,10 +202,8 @@ class WeeklyArtistChart(WeeklyChart):
|
|||||||
|
|
||||||
class WeeklyTrackChart(WeeklyChart):
|
class WeeklyTrackChart(WeeklyChart):
|
||||||
"""A class for representing the weekly track charts"""
|
"""A class for representing the weekly track charts"""
|
||||||
def init(self, subject, start, end, tracks):
|
def init(self, subject, start, end, tracks, stats):
|
||||||
self._subject = subject
|
super(WeeklyTrackChart, self).init(subject, start, end, stats)
|
||||||
self._start = start
|
|
||||||
self._end = end
|
|
||||||
self.__tracks = tracks
|
self.__tracks = tracks
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -179,13 +212,29 @@ class WeeklyTrackChart(WeeklyChart):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def createFromData(api, subject, data):
|
def createFromData(api, subject, data):
|
||||||
|
w = WeeklyChart(
|
||||||
|
subject = subject,
|
||||||
|
start = datetime.utcfromtimestamp(int(data.attrib['from'])),
|
||||||
|
end = datetime.utcfromtimestamp(int(data.attrib['to'])),
|
||||||
|
)
|
||||||
return WeeklyTrackChart(
|
return WeeklyTrackChart(
|
||||||
subject = subject,
|
subject = subject,
|
||||||
start = datetime.utcfromtimestamp(int(data.attrib['from'])),
|
start = datetime.utcfromtimestamp(int(data.attrib['from'])),
|
||||||
end = datetime.utcfromtimestamp(int(data.attrib['to'])),
|
end = datetime.utcfromtimestamp(int(data.attrib['to'])),
|
||||||
|
stats = Stats(
|
||||||
|
subject = subject,
|
||||||
|
playcount = reduce(
|
||||||
|
lambda x,y:(
|
||||||
|
x + int(y.findtext('playcount'))
|
||||||
|
),
|
||||||
|
data.findall('track'),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
),
|
||||||
tracks = [
|
tracks = [
|
||||||
Track(
|
Track(
|
||||||
api,
|
api,
|
||||||
|
subject = w,
|
||||||
name = t.findtext('name'),
|
name = t.findtext('name'),
|
||||||
mbid = t.findtext('mbid'),
|
mbid = t.findtext('mbid'),
|
||||||
artist = Artist(
|
artist = Artist(
|
||||||
|
Loading…
Reference in New Issue
Block a user