diff options
author | Michaël Ball <michael.ball@gmail.com> | 2014-12-24 17:52:19 +0000 |
---|---|---|
committer | Michaël Ball <michael.ball@gmail.com> | 2014-12-24 17:52:19 +0000 |
commit | 2e1901470834da315a1d5a80345277a80283a3ba (patch) | |
tree | 3e01bf15b8154ef96f24edf6ebe5f5dbc7930c8a | |
parent | 601198884d58c0f3825e7108a9adb4dc4353ff5c (diff) |
Better searching, plus serve files
-rw-r--r-- | mach2.py | 57 |
1 files changed, 44 insertions, 13 deletions
@@ -1,7 +1,9 @@ import configparser import json +import mimetypes from flask import Flask +from flask import Response from models.album import Album from models.artist import Artist @@ -17,28 +19,31 @@ def hello(): return "Hello world!" -@app.route("/search/album/<albumname>") -def album_search(albumname): +@app.route("/search/album/<album_name>") +def album_search(album_name): albums = [] - for album in Album.search(name=albumname): + for album in Album.search(name={'data': album_name, 'operator': 'LIKE'}): albums.append(album.__dict__) return json.dumps(albums) -@app.route("/search/artist/<artistname>") -def artist_search(artistname): +@app.route("/search/artist/<artist_name>") +def artist_search(artist_name): artists = [] - for artist in Artist.search(name=artistname): + for artist in Artist.search(name={ + 'data': artist_name, + 'operator': 'LIKE' + }): artists.append(artist.__dict__) return json.dumps(artists) -@app.route("/search/track/<trackname>") -def track_search(trackname): +@app.route("/search/track/<track_name>") +def track_search(track_name): tracks = [] - for track in Track.search(name=trackname): + for track in Track.search(name={'data': track_name, 'operator': 'LIKE'}): tracks.append(track.__dict__) return json.dumps(tracks) @@ -47,7 +52,7 @@ def track_search(trackname): @app.route("/artist/<int:artist_id>/tracks") def artist_tracks(artist_id): tracks = [] - artist = Artist(artist_id) + artist = Artist(id=artist_id) for track in artist.tracks: tracks.append(track.__dict__) @@ -58,7 +63,7 @@ def artist_tracks(artist_id): @app.route("/artist/<int:artist_id>/albums") def artist_albums(artist_id): albums = [] - artist = Artist(artist_id) + artist = Artist(id=artist_id) for album in artist.albums: albums.append(album.__dict__) @@ -69,7 +74,7 @@ def artist_albums(artist_id): @app.route("/album/<int:album_id>/tracks") def album_tracks(album_id): tracks = [] - album = Album(album_id) + album = Album(id=album_id) for track in album.tracks: tracks.append(track.__dict__) @@ -80,7 +85,7 @@ def album_tracks(album_id): @app.route("/album/<int:album_id>/artists") def album_artists(album_id): artists = [] - album = Album(album_id) + album = Album(id=album_id) for artist in album.artists: artists.append(artist.__dict__) @@ -88,6 +93,32 @@ def album_artists(album_id): return json.dumps(artists) +@app.route("/track/<int:track_id>") +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") |