Skip to content

Commit 4fcfe15

Browse files
authored
Merge pull request #11 from whdalsrnt/master
Refactor File Manager
2 parents 2598a32 + 55c76ed commit 4fcfe15

19 files changed

+299
-391
lines changed

pkg/pip_requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
spaceone-api
2+
python-multipart

src/setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@
2626
author_email="[email protected]",
2727
license="Apache License 2.0",
2828
packages=find_packages(),
29-
install_requires=["spaceone-core", "spaceone-api"],
29+
install_requires=["spaceone-core", "spaceone-api", "python-multipart"],
3030
zip_safe=False,
3131
)

src/spaceone/file_manager/conf/global_conf.py

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
REST_TITLE = "REST API for File Manager"
2+
13
DATABASE_AUTO_CREATE_INDEX = True
24
DATABASES = {
35
"default": {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
ROUTER = [
2+
{
3+
"router_path": "spaceone.file_manager.interface.rest.files:router",
4+
"router_options": {
5+
"prefix": "/files",
6+
},
7+
},
8+
]

src/spaceone/file_manager/error/custom.py

-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,3 @@
33

44
class ERROR_NOT_DEFINED_FILE_BACKEND(ERROR_BASE):
55
_message = "File backend not defined. (backend = {backend})"
6-
7-
8-
class ERROR_FILE_UPLOAD_STATE(ERROR_INVALID_ARGUMENT):
9-
_message = "The file has not been uploaded yet. (state = PENDING)"

src/spaceone/file_manager/handler/encrypt_mutation_handler.py

-98
This file was deleted.

src/spaceone/file_manager/info/__init__.py

-2
This file was deleted.

src/spaceone/file_manager/info/common_info.py

-12
This file was deleted.

src/spaceone/file_manager/info/file_info.py

-68
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,38 @@
11
from spaceone.api.file_manager.v1 import file_pb2, file_pb2_grpc
22
from spaceone.core.pygrpc import BaseAPI
33
from spaceone.file_manager.service.file_service import FileService
4-
from spaceone.file_manager.info.file_info import *
5-
from spaceone.file_manager.info.common_info import *
64

75

86
class File(BaseAPI, file_pb2_grpc.FileServicer):
97
pb2 = file_pb2
108
pb2_grpc = file_pb2_grpc
119

12-
def add(self, request, context):
13-
params, metadata = self.parse_request(request, context)
14-
15-
with self.locator.get_service(FileService, metadata) as file_service:
16-
file_vo, upload_url, upload_options = file_service.add(params)
17-
return self.locator.get_info(
18-
FileInfo, file_vo, upload_url=upload_url, upload_options=upload_options
19-
)
20-
2110
def update(self, request, context):
2211
params, metadata = self.parse_request(request, context)
23-
24-
with self.locator.get_service(FileService, metadata) as file_service:
25-
return self.locator.get_info(FileInfo, file_service.update(params))
12+
file_svc = FileService(metadata)
13+
response: dict = file_svc.update(params)
14+
return self.dict_to_message(response)
2615

2716
def delete(self, request, context):
2817
params, metadata = self.parse_request(request, context)
29-
30-
with self.locator.get_service(FileService, metadata) as file_service:
31-
file_service.delete(params)
32-
return self.locator.get_info(EmptyInfo)
33-
34-
def get_download_url(self, request, context):
35-
params, metadata = self.parse_request(request, context)
36-
37-
with self.locator.get_service(FileService, metadata) as file_service:
38-
file_vo, download_url = file_service.get_download_url(params)
39-
return self.locator.get_info(FileInfo, file_vo, download_url=download_url)
18+
file_svc = FileService(metadata)
19+
file_svc.delete(params)
20+
return self.empty()
4021

4122
def get(self, request, context):
4223
params, metadata = self.parse_request(request, context)
43-
44-
with self.locator.get_service(FileService, metadata) as file_service:
45-
return self.locator.get_info(FileInfo, file_service.get(params))
24+
file_svc = FileService(metadata)
25+
response: dict = file_svc.get(params)
26+
return self.dict_to_message(response)
4627

4728
def list(self, request, context):
4829
params, metadata = self.parse_request(request, context)
49-
50-
with self.locator.get_service(FileService, metadata) as file_service:
51-
file_vos, total_count = file_service.list(params)
52-
return self.locator.get_info(
53-
FilesInfo, file_vos, total_count, minimal=self.get_minimal(params)
54-
)
30+
file_svc = FileService(metadata)
31+
response: dict = file_svc.list(params)
32+
return self.dict_to_message(response)
5533

5634
def stat(self, request, context):
5735
params, metadata = self.parse_request(request, context)
58-
59-
with self.locator.get_service(FileService, metadata) as file_service:
60-
return self.locator.get_info(StatisticsInfo, file_service.stat(params))
36+
file_svc = FileService(metadata)
37+
response: dict = file_svc.stat(params)
38+
return self.dict_to_message(response)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import logging
2+
3+
from fastapi import Request, Depends, File, UploadFile
4+
from fastapi.concurrency import run_in_threadpool
5+
from fastapi_utils.cbv import cbv
6+
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
7+
from fastapi_utils.inferring_router import InferringRouter
8+
from spaceone.core.fastapi.api import BaseAPI, exception_handler
9+
from spaceone.file_manager.manager.file_connector_manager import FileConnectorManager
10+
11+
from spaceone.file_manager.service.file_service import FileService
12+
13+
_LOGGER = logging.getLogger(__name__)
14+
_AUTH_SCHEME = HTTPBearer(auto_error=False)
15+
16+
router = InferringRouter(include_in_schema=False)
17+
18+
19+
@cbv(router)
20+
class Files(BaseAPI):
21+
token: HTTPAuthorizationCredentials = Depends(_AUTH_SCHEME)
22+
service = "file-manager"
23+
24+
@router.post("/public/upload")
25+
@exception_handler
26+
async def upload_public_file(self, request: Request, file: UploadFile = File(...)):
27+
metadata = {
28+
"token": self.token.credentials,
29+
}
30+
31+
params = {
32+
"name": file.filename,
33+
"resource_group": "SYSTEM",
34+
}
35+
36+
file_svc = FileService(metadata)
37+
response: dict = await run_in_threadpool(file_svc.add, params)
38+
39+
file_id = response.get("file_id")
40+
41+
file_conn_mgr = FileConnectorManager()
42+
# Update File
43+
# file_id = file_vo.file_id
44+
45+
return response
46+
47+
@router.get("/public/{file_id}")
48+
@exception_handler
49+
async def download_public_file(self, request: Request, file_id: str):
50+
metadata = {
51+
"token": self.token.credentials,
52+
}
53+
54+
params = {
55+
"file_id": file_id,
56+
}
57+
58+
file_svc = FileService(metadata)
59+
response: dict = await run_in_threadpool(file_svc.get, params)
60+
61+
file_id = response.get("file_id")
62+
63+
file_conn_mgr = FileConnectorManager()
64+
# Update File
65+
# file_id = file_vo.file_id
66+
67+
return response

0 commit comments

Comments
 (0)