import configparser import json import mimetypes from flask import Flask from flask import Response from models.album import Album from models.artist import Artist from models.track import Track app = Flask(__name__) app.config.from_object(__name__) @app.route("/") def hello(): return "Hello world!" @app.route("/search/album/") def album_search(album_name): albums = [] for album in Album.search(name={'data': album_name, 'operator': 'LIKE'}): albums.append(album.__dict__) return json.dumps(albums) @app.route("/search/artist/") def artist_search(artist_name): artists = [] for artist in Artist.search(name={ 'data': artist_name, 'operator': 'LIKE' }): artists.append(artist.__dict__) return json.dumps(artists) @app.route("/search/track/") def track_search(track_name): tracks = [] for track in Track.search(name={'data': track_name, 'operator': 'LIKE'}): tracks.append(track.__dict__) return json.dumps(tracks) @app.route("/artist//tracks") def artist_tracks(artist_id): tracks = [] artist = Artist(id=artist_id) for track in artist.tracks: tracks.append(track.__dict__) return json.dumps(tracks) @app.route("/artist//albums") def artist_albums(artist_id): albums = [] artist = Artist(id=artist_id) for album in artist.albums: albums.append(album.__dict__) return json.dumps(albums) @app.route("/album//tracks") def album_tracks(album_id): tracks = [] album = Album(id=album_id) for track in album.tracks: tracks.append(track.__dict__) return json.dumps(tracks) @app.route("/album//artists") def album_artists(album_id): artists = [] album = Album(id=album_id) for artist in album.artists: artists.append(artist.__dict__) return json.dumps(artists) @app.route("/track/") def track(track_id): def stream_file(filename, chunksize=8192): with open(filename, "rb") as f: while True: chunk = f.read(chunksize) if chunk: yield chunk else: break local_track = Track(track_id) mime_string = "application/octet-stream" mime = mimetypes.guess_type(local_track.filename) if mime[0]: mime_string = mime[0] resp = Response(stream_file(local_track.filename), mimetype=mime_string) if mime[1]: resp.headers["Content-Encoding"] = mime[1] return resp if __name__ == "__main__": config = configparser.ConfigParser() config.read("mach2.ini") app.run(debug=config["DEFAULT"]["debug"])