Add put_object operation

This commit is contained in:
Ivan Vazhenin
2023-09-19 20:23:13 +03:00
parent e0fdd25ca4
commit 87cb86a7f9
2 changed files with 58 additions and 4 deletions

59
main.py
View File

@@ -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')

View File

@@ -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