def get_tracks(filters={}): session = data.session() tracks = session.query(data.Track).join(data.Track.album).join(data.Album.artist) for f in filters: if f == "id": tracks = tracks.filter(data.Track.id == filters[f]) elif f == "artist": tracks = tracks.filter(data.Artist.name.like("%%%s%%" % filters[f])) elif f == "artist_id": tracks = tracks.filter(data.Artist.id == filters[f]) elif f == "album": tracks = tracks.filter(data.Album.name.like("%%%s%%" % filters[f])) elif f == "album_id": tracks = tracks.filter(data.Album.id == filters[f]) elif f == "number": tracks = tracks.filter(data.Track.number == filters[f]) elif f == "name": tracks = tracks.filter(data.Track.name.like("%%%s%%" % filters[f])) else: log.debug("Unknown filter: %s" % f) tracks = tracks.order_by(data.Track.number) session.close() return tracks
def scan(): outcome = { "orphans" : list(), "discoveries" : { "artists" : list(), "albums" : list(), "tracks" : list() } } scanner = MediaScanner(CONFIG['media_paths']) scanner.files = scanner.find_files(CONFIG['media_paths']) scanner.scan_files() # Connect to the database session = data.session(CONFIG['sqlite_db']) # Are there any entries in the database that don't exist on disk anymore? tracks = session.query(data.Track) for track in tracks: try: os.stat(track.filename) except OSError, e: session.delete(track) outcome['orphans'].append({ "id" : track.id, "number" : track.number, "name" : track.name, "album" : track.album.name, "artist" : track.album.artist.name, "filename" : track.filename }) log.debug("Found an orphaned reference to %s" % track.filename)
def do_purge_tokens(): session = data.session() to_delete = session.query(data.Token) count = to_delete.count() to_delete.delete() session.commit() return count
def do_tidy_tokens(): session = data.session() expired_tokens = session.query(data.Token).filter( data.Token.expiry < int(time())) count = expired_tokens.count() expired_tokens.delete() session.commit() return count
def do_revoke_token(token_id): session = data.session() tokens = session.query(data.Token).filter_by(id=token_id) if tokens.count() >= 1: token = tokens.first() log.debug("Found token: %s" % token) session.delete(token) session.commit() return True else: log.debug("Cannot revoke token because it doesn't exist: %s" % token_id) return False
def get_artists(filters={}): session = data.session() artists = session.query(data.Artist) for f in filters: if f == "id": artists = artists.filter_by(id=filters[f]) elif f == "name": artists = artists.filter(data.Artist.name.like("%%%s%%" % filters[f])) else: log.debug("Unknown filter: %s" % f) artists = artists.order_by(data.Artist.name) session.close() return artists
def get_albums(filters={}): session = data.session() albums = session.query(data.Album).join(data.Album.artist) for f in filters: if f == "id": albums = albums.filter(data.Album.id == filters[f]) elif f == "name": albums = albums.filter(data.Album.name.like("%%%s%%" % filters[f])) elif f == "artist": albums = albums.filter(data.Artist.name.like("%%%s%%" % filters[f])) else: log.debug("Unknown filter: %s" % f) albums = albums.order_by(data.Album.name) session.close() return albums
def do_validate_token(token_id): ''' Performs token validation. Returns different values under different circumstances: CAUSE RETURNS - The token is valid - A JSON object describing the token - The token is expired - False - The token doesn't exist - None ''' token_data = dict() session = data.session() tokens = session.query(data.Token).filter_by(id=token_id) if tokens.count() >= 1: token = tokens.first() log.debug("Token: %s" % token) log.debug("Current time: %i" % time()) if token.expiry > int(time()): token_data['id'] = token.id token_data['expiry'] = token.expiry token_data['user'] = { 'username' : token.user.username } memberships = session.query(data.RoleMembership).filter_by( user_id=token.user.id) token_data['user']['roles'] = [ role.role.name for role in memberships ] log.debug("Token validated: %s" % token_id) return token_data else: log.debug("Token is expired; deleting: %s" % token_id) do_revoke_token(token_id) return False else: log.debug("Could not find token %s; it is invalid" % token_id) return None
def main(): # Read input opts = create_parser().parse_args() # Construct the basic DB framework data.construct(opts.dbstring) # Get a session sesh = data.session(opts.dbstring) # Create default roles roles = [ data.Role(name="disabled", description="Auth always fails for user"), data.Role(name="listener", description="Can listen to music and manipulate user-specific settings only`" ), data.Role(name="contributor", description="Can add music to the library"), data.Role(name="administrator", description="Can administer the system") ] sesh.add_all(roles) # Create default user root_user = data.User( pwhash="35a444966b5be265dee3aad408b3bf92569f097721c253e58229fb69e487df5d1b6b910aa15527071dd2e3c8ae8956f5483ae5627dd0e3f7d3a68cd4a511cbc2", salt="/j40+PanDFDLH#xOX4cF4;Hm", username="******" ) sesh.add(root_user) # Create default role memberships memberships = [ data.RoleMembership(user_id=1, role_id=2), data.RoleMembership(user_id=1, role_id=3), data.RoleMembership(user_id=1, role_id=4) ] sesh.add_all(memberships) sesh.commit()