def register_tracks(self): """Retrieves json metadata, including filenames, from archive.org for a concert (one which is already registered with our database) and inserts the concert's tracks (files) with our db. >>> from api.music import Concert >>> a = Artist.get(tag="ExplosionsintheSky") >>> [c.register_tracks() for c in a.concerts] """ for track in Crawler.tracks(self.tag): print(track['name']) try: t = Track( artist_id=self.artist_id, concert_id=self.id, item_id=self.tag, file_id=track['name'], number=track['track'], name=track['title'], length=time2sec(track['length']) ) t.create() self.tracks.append(t) self.save() except (IntegrityError, InvalidRequestError) as e: print(e)
def register(cls, artist=None, concerts=False, tracks=False, start=0): """Retrieves a json list of all artists from the Live Music collection from Internet Archive (archive.org) and then creates an Artist entry within the databse for each artist. If specified within params, additionally registers their concerts (items) and the concert's tracks (files). params: artist - register a single artist (by [collection] name) concerts - register artists' concerts? tracks - register concerts tracks? Requires concerts=True usage: >>> from api.music import Artist >>> Artist.register() """ artists = [artist] if artist else Crawler.artists() for a in artists[start:]: tag = a['identifier'] name = a['title'] try: cls(tag=tag, name=name).create() except: pass if concerts: cls.register_concerts(artist=a, tracks=tracks)
def register_concerts(self, tracks=False): """Retrieves a json list of concerts from archive.org for a given Artist (one which is already registered with our database) and registers the artist's concerts with our db. Additionally registers the tracks of each of these concerts if tracks=True. usage: >>> from api.music import Artist >>> a = Artist.get(tag="ExplosionsintheSky") >>> a.register_concerts() """ concerts = Crawler.concerts(self.tag) for concert in concerts: name = concert['title'] tag = concert['identifier'] print(concert) try: c = Concert(tag=tag, name=name, artist_id=self.id) c.create() self.concerts.append(c) self.save() except: pass if tracks: c.register_tracks()
def dict(self, metadata=False): concert = super(Concert, self).dict() concert['artist'] = self.artist.name concert['tracks'] = sorted([track.dict() for track in self.tracks], key=lambda x: x['number']) if metadata: try: concert['metadata'] = Crawler.metadata(artist=self.artist.name) except Exception as e: concert['metadata'] = {"error": str(e)} return concert