diff options
| author | Michaël Ball <michael.ball@gmail.com> | 2014-12-13 16:41:35 +0000 | 
|---|---|---|
| committer | Michaël Ball <michael.ball@gmail.com> | 2014-12-13 16:41:35 +0000 | 
| commit | cd630834a985be4b39a673d022e180de3ff20517 (patch) | |
| tree | 0cfdcba2570ca7925e3777104448e83501fa328c /models/artist.py | |
| parent | 86e68485b0848e25ef6d5b579c7d80f286d094a1 (diff) | |
Initial commit
Diffstat (limited to 'models/artist.py')
| -rw-r--r-- | models/artist.py | 115 | 
1 files changed, 115 insertions, 0 deletions
| diff --git a/models/artist.py b/models/artist.py new file mode 100644 index 0000000..eaae27e --- /dev/null +++ b/models/artist.py @@ -0,0 +1,115 @@ +from common import utils +from db.db_manager import DbManager + + +class Artist: +    def __init__(self, id=None, **kwargs): +        if id is not None: +            db = DbManager() +            for row in db.execute("""SELECT * FROM artist WHERE id = ?""", +                                  (id,)): +                setattr(self, "id", id) +                setattr(self, "name", row[1]) +                setattr(self, "sortname", row[2]) +                setattr(self, "musicbrainz_artistid", row[3]) +        else: +            for (key, value) in kwargs.items(): +                setattr(self, key, value) + +    def delete(self): +        db = DbManager() + +        for album in self.albums: +            album.delete() + +        delete_sql = "DELETE FROM artist WHERE id = ?" +        db.execute(delete_sql, (self.id,)) + +        delete_track_rel_sql = "DELETE FROM artist_track WHERE artist_id = ?" +        db.execute(delete_track_rel_sql, (self.id,)) + +        delete_album_rel_sql = "DELETE FROM album_artist WHERE artist_id = ?" +        db.execute(delete_album_rel_sql, (self.id,)) + +        db.commit() + +        return True + +    @property +    def tracks(self): +        from models.track import Track + +        if not hasattr(self, "_tracks"): +            setattr(self, "_tracks", []) + +            db = DbManager() + +            for row in db.execute("""SELECT track.* FROM track +                                  INNER JOIN artist_track ON track.id = +                                  artist_track.track_id WHERE artist_id = ? +                                  ORDER BY name ASC""", (self.id,)): + +                track = Track(id=row[0], tracknumber=row[1], name=row[2], +                              grouping=row[3], filename=row[4]) +                self._tracks.append(track) + +        return self._tracks + +    @property +    def albums(self): +        from models.album import Album + +        if not hasattr(self, "_albums"): +            setattr(self, "_albums", []) + +            db = DbManager() + +            for row in db.execute("""SELECT album.* FROM album +                                  INNER JOIN album_artist ON album.id = +                                  album_artist.album_id WHERE artist_id = ? +                                  ORDER BY date ASC""", (self.id,)): +                album = Album(id=row[0], name=row[1], date=row[2]) +                self._albums.append(album) + +        return self._albums + +    def save(self): +        dirty_attributes = {} + +        # check if the internal dict has been modified +        for (attr, value) in self.__dict__.items(): +            if self.__data[attr] != getattr(self, attr): +                dirty_attributes[attr] = value + +        if len(dirty_attributes) > 0: +            db = DbManager() + +            set_clause = utils.update_clause_from_dict(dirty_attributes) + +            dirty_attributes[id] = self.id +             +            sql = " ".join(("UPDATE artist"), set_clause, "WHERE id = :id") +            db.execute(sql, dirty_attributes) +            db.commit() + +    def search(**search_params): +        artists = [] + +        db = DbManager() + +        where_clause = utils.make_where_clause(search_params) + +        result = [] +        if where_clause: +            statement = " ".join(("SELECT * FROM artist", where_clause)) +            result = db.execute(statement, search_params) +        else: +            result = db.execute("SELECT * FROM artist") + +        for row in result: +            artists.append( +                Artist(id=row[0], name=row[1], sortname=row[2], +                       musicbrainz_artistid=row[3]) +            ) + +        return artists | 
