From 2c49a03494ec2cebf2c820efb257c950f170face Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Tue, 23 Aug 2011 13:54:59 +0200 Subject: Read tracks and directories from the database. --- db.py | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) (limited to 'db.py') diff --git a/db.py b/db.py index 4819159..1f68711 100644 --- a/db.py +++ b/db.py @@ -1,3 +1,4 @@ +import os from config import config from sqlalchemy import create_engine engine = create_engine(config.get('db_path')) @@ -18,20 +19,22 @@ class Directory(Base): path = Column(String, nullable = False, index = True) parent_id = Column(Integer, ForeignKey('directories.id')) - parent = relationship('Directory') + parent = relationship('Directory', backref = backref('children'), remote_side = [id]) + #children = relationship('Directory', lazy = 'joined', join_depth = 2) - def __init__(self, path): + def __init__(self, path, parent_id = None): self.path = path + self.parent_id = parent_id def __repr__(self): - return ''.format(self.path) + return ''.format(self.path.encode('utf-8')) @staticmethod - def get(session, path): + def get(session, path, parent_id = None): try: directory = session.query(Directory).filter(Directory.path == path).one() except NoResultFound: - directory = Directory(path) + directory = Directory(path, parent_id) session.add(directory) session.commit() return directory @@ -97,6 +100,8 @@ class Track(Base): album_id = Column(Integer, ForeignKey('albums.id')) directory = relationship(Directory, backref = backref('tracks', order_by = filename)) + artist = relationship(Artist, backref = backref('artists')) + album = relationship(Album, backref = backref('tracks')) def __init__(self, name, num, filename, file_index, directory_id, artist_id, album_id): self.name = name @@ -108,7 +113,7 @@ class Track(Base): self.album_id = album_id def __repr__(self): - return u''.format(self.name) + return ''.format(self.filename.encode('utf-8')) @staticmethod def get(session, name, num, filename, file_index, directory_id, artist_id, album_id): @@ -119,6 +124,27 @@ class Track(Base): session.add(track) return track + @staticmethod + def find(session, path, track = None): + directory, filename = os.path.split(path) + return session.query(Track).filter(and_(Track.filename == filename, Directory.path == directory, Track.file_index == track)).one() + + def get_path(self): + return os.path.join(self.directory.path, self.filename) + + def get_relpath(self): + return os.path.relpath(self.get_path(), config.get('music_root')) + + def get_metadata(self): + metadata = {} + if self.name: + metadata['title'] = self.name + if self.artist: + metadata['artist'] = self.artist.name + if self.album: + metadata['album'] = self.album.name + return metadata + Base.metadata.create_all(engine) from sqlalchemy.orm import sessionmaker -- cgit v1.2.3