diff --git a/src/spaceone/core/command.py b/src/spaceone/core/command.py index 4ac08a7..6f7311f 100644 --- a/src/spaceone/core/command.py +++ b/src/spaceone/core/command.py @@ -107,11 +107,6 @@ def test(config_file=None, dir=None, failfast=False, scenario: str = None, param RichTestRunner(verbosity=verbose, failfast=failfast).run(full_suite) -def _set_file_config(conf_file): - if conf_file: - config.set_file_conf(conf_file) - - def _set_python_path(package, module_path): current_path = os.getcwd() @@ -147,7 +142,8 @@ def _set_server_config(package, module_path=None, port=None, config_file=None): config.set_service_config() # 4. Merge file conf - _set_file_config(config_file) + if config_file: + config.set_file_conf(config_file) def init_project_file(path, text): diff --git a/src/spaceone/core/config/__init__.py b/src/spaceone/core/config/__init__.py index b7429b5..6a55bae 100644 --- a/src/spaceone/core/config/__init__.py +++ b/src/spaceone/core/config/__init__.py @@ -37,10 +37,6 @@ def get_service(): return _GLOBAL['SERVICE'] -def get_extension_apis(): - return _GLOBAL.get('EXTENSION_APIS', {}) - - def get_handler(name): return _GLOBAL.get('HANDLERS', {}).get(name, {}) diff --git a/src/spaceone/core/config/default_conf.py b/src/spaceone/core/config/default_conf.py index 0dda8e9..09816ad 100644 --- a/src/spaceone/core/config/default_conf.py +++ b/src/spaceone/core/config/default_conf.py @@ -1,9 +1,3 @@ -# Service Description -TITLE = '' -DESCRIPTION = '' -CONTACT = { -} - # Service Configuration PACKAGE = None SERVICE = None @@ -18,31 +12,36 @@ # Unit Test Configuration MOCK_MODE = False +# gRPC Configuration # gRPC Extension APIs -EXTENSION_APIS = { +GRPC_EXTENSION_APIS = { 'spaceone.core.extension.grpc_health': ['GRPCHealth'], 'spaceone.core.extension.server_info': ['ServerInfo'] } -# Uvicorn Options for Rest Server -UVICORN_OPTIONS = { - 'factory': True -} +# REST Configuration +# REST Application Options +REST_TITLE = '' +REST_DESCRIPTION = '' +REST_CONTACT = {} -# Rest Middlewares +# REST Middlewares REST_MIDDLEWARES = [] +# REST Extension Routers REST_EXTENSION_ROUTERS = [ { 'router_path': 'spaceone.core.fastapi.extension.health:router', 'router_options': {} - }, - { - 'router_path': 'spaceone.core.fastapi.extension.reflection:router', - 'router_options': {} } ] +# REST Uvicorn Options +UVICORN_OPTIONS = { + 'factory': True +} + + # Handler Configuration HANDLERS = { 'authentication': [], diff --git a/src/spaceone/core/connector/space_connector.py b/src/spaceone/core/connector/space_connector.py index a44b14f..8015bba 100644 --- a/src/spaceone/core/connector/space_connector.py +++ b/src/spaceone/core/connector/space_connector.py @@ -39,13 +39,15 @@ def dispatch(self, method: str, params: dict = None, **kwargs): return self._call_api(method, params, **kwargs) def _call_api(self, method: str, params: dict = None, **kwargs): + token = kwargs.get('token') + self._check_mock_mode(method) resource, verb = self._parse_method(method) self._check_method(resource, verb) params = params or {} - kwargs['metadata'] = self._get_connection_metadata() + kwargs['metadata'] = self._get_connection_metadata(token) response_or_iterator = getattr(getattr(self._client, resource), verb)(params, **kwargs) @@ -89,11 +91,13 @@ def _generate_response(self, response_iterator): for response in response_iterator: yield self._change_message(response) - def _get_connection_metadata(self): + def _get_connection_metadata(self, token=None): metadata = [] - if self._token: - metadata.append(('token', self._token)) + if token: + metadata.append(('token', token)) + elif self._token: + metadata.append(('token', self._token)) elif token := self.transaction.meta.get('token'): metadata.append(('token', token)) diff --git a/src/spaceone/core/fastapi/server.py b/src/spaceone/core/fastapi/server.py index 7066161..d41c203 100644 --- a/src/spaceone/core/fastapi/server.py +++ b/src/spaceone/core/fastapi/server.py @@ -1,10 +1,10 @@ import logging -import uvicorn -from fastapi import FastAPI, Request +import uvicorn +from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware -from spaceone.core import config +from spaceone.core import config, utils from spaceone.core.logger import set_logger from spaceone.core.opentelemetry import set_tracer, set_metric from spaceone.core.extension.server_info import ServerInfoManager @@ -123,10 +123,10 @@ def _init_fast_api(): server_info = ServerInfoManager() return FastAPI( - title=global_conf.get('TITLE', 'Document'), + title=global_conf.get('REST_TITLE', 'Document'), version=server_info.get_version(), - contact=global_conf.get('CONTACT', {}), - description=global_conf.get('DESCRIPTION', ''), + contact=global_conf.get('REST_CONTACT', {}), + description=global_conf.get('REST_DESCRIPTION', ''), ) diff --git a/src/spaceone/core/model/mongo_model/__init__.py b/src/spaceone/core/model/mongo_model/__init__.py index 0062009..e8c5a1b 100644 --- a/src/spaceone/core/model/mongo_model/__init__.py +++ b/src/spaceone/core/model/mongo_model/__init__.py @@ -1309,7 +1309,8 @@ def _convert_date_value(cls, date_value, date_field_format): @classmethod def analyze(cls, *args, granularity=None, fields=None, select=None, group_by=None, field_group=None, filter=None, filter_or=None, page=None, sort=None, start=None, end=None, - date_field='date', date_field_format='%Y-%m-%d', target='SECONDARY_PREFERRED', **kwargs): + date_field='date', date_field_format='%Y-%m-%d', target='SECONDARY_PREFERRED', + allow_disk_use=False, **kwargs): if fields is None: raise ERROR_REQUIRED_PARAMETER(key='fields') @@ -1348,7 +1349,8 @@ def analyze(cls, *args, granularity=None, fields=None, select=None, group_by=Non } } ], - 'target': target + 'target': target, + 'allow_disk_use': allow_disk_use } if select: diff --git a/src/spaceone/core/pygrpc/server.py b/src/spaceone/core/pygrpc/server.py index d2d0408..2f7dcfb 100644 --- a/src/spaceone/core/pygrpc/server.py +++ b/src/spaceone/core/pygrpc/server.py @@ -51,7 +51,7 @@ def _init_services(server): server, service_names = _add_services(server, service_names, proto_conf) # Set Extension Services - proto_conf = config.get_extension_apis() + proto_conf = config.get_global('GRPC_EXTENSION_APIS', {}) server, service_names = _add_services(server, service_names, proto_conf) return server, service_names diff --git a/src/spaceone/core/utils.py b/src/spaceone/core/utils.py index ffc0081..b5e8bd9 100644 --- a/src/spaceone/core/utils.py +++ b/src/spaceone/core/utils.py @@ -1,14 +1,18 @@ +import os import re import time import random import string import secrets +import sys import datetime -from urllib.parse import urlparse import yaml import json import hashlib import urllib +import pkg_resources + +from urllib.parse import urlparse from dateutil.parser import isoparse from typing import Tuple from pathlib import Path