modular_api/helpers/constants.py (103 lines of code) (raw):
import os
from enum import Enum
from pathlib import Path
# from http import HTTPMethod # python3.11+
class HTTPMethod(str, Enum):
HEAD = 'HEAD'
GET = 'GET'
POST = 'POST'
PATCH = 'PATCH'
DELETE = 'DELETE'
PUT = 'PUT'
class ServiceMode(str, Enum):
SAAS = 'saas'
ONPREM = 'onprem'
PRIVATE = 'private'
_SENTINEL = object()
class Env(str, Enum):
default: str | None
def __new__(cls, value: str, default: str | None = None):
"""
All environment variables and optionally their default values.
Since envs always have string type the default value also should be
of string type and then converted to the necessary type in code.
There is no default value if not specified (default equal to None)
"""
obj = str.__new__(cls, value)
obj._value_ = value
obj.default = default
return obj
# in case want to remove the default value: adjust environment service
# after that
SECRET_KEY = 'MODULAR_API_SECRET_KEY'
MODE = 'MODULAR_API_MODE', ServiceMode.SAAS.value
API_CALLS_PER_SECOND_LIMIT = 'MODULAR_API_CALLS_PER_SECOND_LIMIT', '10'
MIN_CLI_VERSION = 'MODULAR_API_MIN_CLI_VERSION', '1.2.0'
ENABLE_PRIVATE_MODE = 'MODULAR_API_ENABLE_PRIVATE_MODE', 'false'
DISABLE_RATE_LIMITER = 'MODULAR_API_DISABLE_RATE_LIMITER'
# logs
SERVER_LOG_LEVEL = 'MODULAR_API_SERVER_LOG_LEVEL', 'INFO'
CLI_LOG_LEVEL = 'MODULAR_API_CLI_LOG_LEVEL', 'INFO'
LOG_PATH = ('MODULAR_API_LOG_PATH',
str((Path.home() / '.modular_api/log').resolve()))
MONGO_URI = 'MODULAR_API_MONGO_URI'
MONGO_DATABASE = 'MODULAR_API_MONGO_DATABASE'
MONGO_RATE_LIMITS_DATABASE = ('MODULAR_API_RATE_LIMITS_MONGO_DATABASE',
'modular-api-rate-limits')
AWS_REGION = 'AWS_REGION', 'us-east-1'
def get(self, default=_SENTINEL) -> str | None:
if default is _SENTINEL:
default = self.default
if default is not None:
default = str(default)
return os.environ.get(self.value, default)
def set(self, val: str | None):
if val is None:
os.environ.pop(self.value, None)
else:
os.environ[self.value] = str(val)
ACTIVATED_STATE = 'activated'
API_MODULE_FILE = 'api_module.json'
BLOCKED_STATE = 'blocked'
CLI_PATH_KEY = 'cli_path'
CLI_VIEW = 'cli'
COMMAND = 'command'
COMMANDS_BASE_FILE_NAME = 'web_service/commands_base.json'
DATE = 'date'
DATE_FORMAT = '%d-%m-%Y'
DEPENDENCIES = 'dependencies'
EVENT_TYPE = 'event_type'
EVENT_TYPE_API = 'api'
GROUP = 'group'
ID = 'id'
JOB_ID = 'job_id'
KEY = 'key'
LINUX = 'posix'
API_LOG_FILE_NAME = 'modular_api.log'
CLI_LOG_FILE_NAME = 'modular_api_cli.log'
LOGS_FORMAT = '[%(asctime)s] [%(levelname)s] [%(dd.trace_id)s] [%(name)s.%(funcName)s:%(lineno)d] %(message)s'
LOG_FOLDER = '.modular_api'
MAX_COLUMNS_WIDTH = 30
META = 'meta'
MIN_VER = 'min_version'
MODULAR_API_CODE = 'Code'
MODULAR_API_ITEMS = 'items'
MODULAR_API_JSON_CODE = 'code'
MODULAR_API_JSON_MESSAGE = 'message'
MODULAR_API_JSON_WARNINGS = 'warnings'
MODULAR_API_MESSAGE = 'Message'
MODULAR_API_RESPONSE = 'Response'
MODULAR_API_TABLE_TITLE = 'table_title'
MODULAR_API_USERNAME = 'modular_admin_username'
MODULAR_API_WARNINGS = 'Warnings'
MODULES_DIR = 'modules'
MODULES_PATH = 'modules'
MODULE_NAME_KEY = 'module_name'
MOUNT_POINT_KEY = 'mount_point'
M_POINT = 'mount_point'
MODULE_NAME = 'module_name'
PRODUCT = 'product'
REMOVED_STATE = 'removed'
STATS_DB_NAME = 'ModularStats.json'
STATUS = 'status'
TABLE_VIEW = 'table'
JSON_VIEW = 'json'
TIMESTAMP = 'timestamp'
TOOL_VERSION_MAPPING = """\n{tool} {version}"""
WINDOWS = 'nt'
SWAGGER_HTML = \
"""
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="SwaggerUI" />
<title>SwaggerUI</title>
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@{version}/swagger-ui.css" />
</head>
<body>
<div id="swagger-ui"></div>
<script src="https://unpkg.com/swagger-ui-dist@{version}/swagger-ui-bundle.js" crossorigin></script>
<script src="https://unpkg.com/swagger-ui-dist@{version}/swagger-ui-standalone-preset.js" crossorigin></script>
<script>
window.onload = () => {{
window.ui = SwaggerUIBundle({{
url: '{url}',
dom_id: '#swagger-ui',
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
layout: "StandaloneLayout",
}});
}};
</script>
</body>
</html>
"""
SERVICE_NAME = 'service_name'
SERVICE_DISPLAY_NAME = 'service_display_name'
ALLOWED_VALUES = 'allowed_values'
AUX_DATA = 'aux_data'
MODULAR_USER_META_TYPES = (ALLOWED_VALUES, AUX_DATA)