diff --git a/Dockerfile b/Dockerfile index 85b80b6..8bf9823 100755 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,8 @@ RUN pip install realog RUN pip install python-magic +RUN pip install pymediainfo + EXPOSE 80 ADD src /application/ diff --git a/src/api/data.py b/src/api/data.py index f21486c..9ae41ea 100644 --- a/src/api/data.py +++ b/src/api/data.py @@ -16,11 +16,16 @@ import datetime import time, threading import realog.debug as debug +from aiofiles import os as async_os + +from pymediainfo import MediaInfo + from sanic import Sanic from sanic import response from sanic import views from sanic import Blueprint from sanic.exceptions import ServerError +from sanic.response import file_stream from sanic_simple_swagger import swagger_blueprint, openapi_blueprint from sanic_simple_swagger import doc @@ -86,15 +91,19 @@ def add(_app, _name_api): 'mime-type': _request.headers["mime-type"], "already_exist": True, } - await _response.write(json.dumps(answer_data, sort_keys=True, indent=4)) return + # move the file shutil.move(temporary_file, destination_filename) + + # collect media info ... + media_info = MediaInfo.parse(destination_filename) data_metafile = { "sha512": str(sha1.hexdigest()), "size": total_size, 'filename': _request.headers["filename"], 'mime-type': _request.headers["mime-type"], + 'media-info': json.loads(media_info.to_json()) } tools.file_write_data(destination_filename + ".meta", json.dumps(data_metafile, sort_keys=True, indent=4)) answer_data = { @@ -107,17 +116,22 @@ def add(_app, _name_api): await _response.write(json.dumps(answer_data, sort_keys=True, indent=4)) return response.stream(streaming, content_type='application/json') - """ - @elem_blueprint.get('/' + _name_api + '/', strict_slashes=True) + @elem_blueprint.get('/' + _name_api + '/', strict_slashes=True) @doc.summary("Show resources") @doc.description("Display a listing of the resource.") @doc.produces(content_type='application/json') async def retrive(request, id): - value = data_global_elements.get_interface(_name_api).get(id) - if value != None: - return response.json(value) + filename = os.path.join(_app.config['REST_MEDIA_DATA'], id) + if os.path.isfile(filename) == True: + file_stat = await async_os.stat(filename) + headers = {"Content-Length": str(file_stat.st_size)} + return await file_stream( + filename, + headers=headers, + chunked=False, + ) raise ServerError("No data found", status_code=404) - """ - _app.blueprint(elem_blueprint) + + diff --git a/src/data_interface.py b/src/data_interface.py index 8bda366..64f4820 100644 --- a/src/data_interface.py +++ b/src/data_interface.py @@ -11,7 +11,7 @@ import tools import json from realog import debug - +import random from sanic.exceptions import ServerError ## ## @breif Generic interface to access to the BDD (no BDD, direct file IO) @@ -26,6 +26,7 @@ class DataInterface(): self.last_id = 0 if tools.exist(self.file) == False: self.mark_to_store() + self.last_id = random.randint(20, 100) else: data = tools.file_read_data(self.file) self.bdd = json.loads(data)