diff --git a/main.py b/main.py index d48a663..8ed7a46 100644 --- a/main.py +++ b/main.py @@ -25,6 +25,9 @@ from zip import Zip import boto3 import db from sqlalchemy.orm import Session +from fastapi import FastAPI, Response, Form, UploadFile, File +import uvicorn +from typing import Annotated NEW_REPLICATION_REQUEST = 99 @@ -341,6 +344,10 @@ def get_metadata(params, files, url): proxy.send(response_params, response_files, Config.ret_path) +def put_object(params, files, url): + pass + + def apply_commits(params, files, url): logger.warning(params, files, url) assert len(files) == 1 @@ -376,6 +383,8 @@ def run_task(query_type, params, files, url): tasks.put(lambda: get_objects(params, files, url)) if query_type == 24: tasks.put(lambda: get_metadata(params, files, url)) + if query_type == 6: + tasks.put(lambda: put_object(params, files, url)) if query_type == NEW_REPLICATION_REQUEST: tasks.put(lambda: apply_commits(params, files, url)) @@ -407,9 +416,7 @@ def bnd_disconnected(bnd_name: str): connected.remove(bnd_name) -def main(): - logger.setLevel(logging.INFO) - logger.warning('Use Control-C to exit') +def xmlrpc_task(): server = SimpleXMLRPCServer(('0.0.0.0', 9000), logRequests=False, allow_none=True) server.register_function(list_contents) server.register_function(aud_add) @@ -420,6 +427,50 @@ def main(): server.register_function(onDelivered) server.register_function(bnd_connected) server.register_function(bnd_disconnected) + server.serve_forever() + + +app = FastAPI() + + +@app.get("/") +async def fa_root(): + return {"message": "Hello World"} + + +@app.post("/login") +async def fa_login(response: Response): + response.set_cookie(key='sessionid', value='87654321') + response.set_cookie(key='csrftoken', value='12345678') + return {"login": "Ok"} + + +@app.post("/api/easo/PutObject") +async def fa_put_object(response: Response, + object_attrs: Annotated[str, Form()], + object_file: Annotated[UploadFile, File()] +): + date = datetime.datetime.now() + files = [{'name': object_file.filename, 'url': object_file.file.name, 'size': os.path.getsize(object_file.size)}] + request_params = { + 'from': '', + 'to': '', + 'ts_added': date.timestamp(), + 'user_id': '0', + 'user_id_to': '0', + 'query_type': 6, + 'query_data': object_attrs, + } + put_object(request_params, files, None) + return {"Upload": "Ok"} + + +def main(): + logger.setLevel(logging.INFO) + logger.warning('Use Control-C to exit') + + xmlrpc_thread = threading.Thread(target=xmlrpc_task) + xmlrpc_thread.start() thread = threading.Thread(target=run_tasks) thread.start() @@ -432,7 +483,7 @@ def main(): try: logger.warning('Start server') - server.serve_forever() + uvicorn.run(app, host="0.0.0.0", port=9001) except KeyboardInterrupt: logger.warning('Exiting') diff --git a/requirements.txt b/requirements.txt index 9cc9ed8..1ecd2b9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,3 +23,6 @@ typing_extensions==4.7.1 urllib3==2.0.4 yarl==1.9.2 SQLAlchemy~=2.0.20 +fastapi=~0.103.1 +uvicorn=~0.23.2 +python-multipart=~0.0.6