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 boto3
import db import db
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from fastapi import FastAPI, Response, Form, UploadFile, File
import uvicorn
from typing import Annotated
NEW_REPLICATION_REQUEST = 99 NEW_REPLICATION_REQUEST = 99
@@ -341,6 +344,10 @@ def get_metadata(params, files, url):
proxy.send(response_params, response_files, Config.ret_path) proxy.send(response_params, response_files, Config.ret_path)
def put_object(params, files, url):
pass
def apply_commits(params, files, url): def apply_commits(params, files, url):
logger.warning(params, files, url) logger.warning(params, files, url)
assert len(files) == 1 assert len(files) == 1
@@ -376,6 +383,8 @@ def run_task(query_type, params, files, url):
tasks.put(lambda: get_objects(params, files, url)) tasks.put(lambda: get_objects(params, files, url))
if query_type == 24: if query_type == 24:
tasks.put(lambda: get_metadata(params, files, url)) 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: if query_type == NEW_REPLICATION_REQUEST:
tasks.put(lambda: apply_commits(params, files, url)) tasks.put(lambda: apply_commits(params, files, url))
@@ -407,9 +416,7 @@ def bnd_disconnected(bnd_name: str):
connected.remove(bnd_name) connected.remove(bnd_name)
def main(): def xmlrpc_task():
logger.setLevel(logging.INFO)
logger.warning('Use Control-C to exit')
server = SimpleXMLRPCServer(('0.0.0.0', 9000), logRequests=False, allow_none=True) server = SimpleXMLRPCServer(('0.0.0.0', 9000), logRequests=False, allow_none=True)
server.register_function(list_contents) server.register_function(list_contents)
server.register_function(aud_add) server.register_function(aud_add)
@@ -420,6 +427,50 @@ def main():
server.register_function(onDelivered) server.register_function(onDelivered)
server.register_function(bnd_connected) server.register_function(bnd_connected)
server.register_function(bnd_disconnected) 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 = threading.Thread(target=run_tasks)
thread.start() thread.start()
@@ -432,7 +483,7 @@ def main():
try: try:
logger.warning('Start server') logger.warning('Start server')
server.serve_forever() uvicorn.run(app, host="0.0.0.0", port=9001)
except KeyboardInterrupt: except KeyboardInterrupt:
logger.warning('Exiting') logger.warning('Exiting')

View File

@@ -23,3 +23,6 @@ typing_extensions==4.7.1
urllib3==2.0.4 urllib3==2.0.4
yarl==1.9.2 yarl==1.9.2
SQLAlchemy~=2.0.20 SQLAlchemy~=2.0.20
fastapi=~0.103.1
uvicorn=~0.23.2
python-multipart=~0.0.6