From 84a75d9e70d246294aff53a9a627fdb24cd7b6d7 Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Mon, 1 Jun 2020 13:01:31 +0300 Subject: [PATCH] Add server uid to server.info response in API v2.8 --- server/apimodels/__init__.py | 9 --------- server/bll/event/scalar_key.py | 2 +- server/database/model/settings.py | 6 +++++- server/mongo/initialize/util.py | 4 ++-- server/schema/services/server.conf | 11 +++++++++++ server/services/server/__init__.py | 7 +++++++ server/utilities/stringenum.py | 10 ++++++++++ 7 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 server/utilities/stringenum.py diff --git a/server/apimodels/__init__.py b/server/apimodels/__init__.py index e4fac44..1d6e030 100644 --- a/server/apimodels/__init__.py +++ b/server/apimodels/__init__.py @@ -207,15 +207,6 @@ class DomainField(fields.StringField): raise errors.bad_request.InvalidDomainName() -class StringEnum(Enum): - def __str__(self): - return self.value - - # noinspection PyMethodParameters - def _generate_next_value_(name, start, count, last_values): - return name - - class JsonSerializableMixin: def to_json(self: ModelBase): return dumps(self.to_struct()) diff --git a/server/bll/event/scalar_key.py b/server/bll/event/scalar_key.py index c74792c..18fe1b1 100644 --- a/server/bll/event/scalar_key.py +++ b/server/bll/event/scalar_key.py @@ -4,7 +4,7 @@ Module for polymorphism over different types of X axes in scalar aggregations from abc import ABC, abstractmethod from enum import auto -from apimodels import StringEnum +from utilities.stringenum import StringEnum from bll.util import extract_properties_to_lists from config import config diff --git a/server/database/model/settings.py b/server/database/model/settings.py index fd46cb3..3424350 100644 --- a/server/database/model/settings.py +++ b/server/database/model/settings.py @@ -7,6 +7,10 @@ from database import Database, strict from database.model import DbModelMixin +class SettingKeys: + server__uuid = "server.uuid" + + class Settings(DbModelMixin, Document): meta = { "db_alias": Database.backend, @@ -47,7 +51,7 @@ class Settings(DbModelMixin, Document): """ Adds a new key/value settings. Fails if key already exists. """ key = key.strip(sep) try: - res = Settings(key=key, value=value).save(force_insert=True) + res = cls(key=key, value=value).save(force_insert=True) return bool(res) except NotUniqueError: return False diff --git a/server/mongo/initialize/util.py b/server/mongo/initialize/util.py index b5586e3..087176d 100644 --- a/server/mongo/initialize/util.py +++ b/server/mongo/initialize/util.py @@ -6,7 +6,7 @@ from config import config from config.info import get_default_company from database.model.company import Company from database.model.queue import Queue -from database.model.settings import Settings +from database.model.settings import Settings, SettingKeys log = config.logger(__file__) @@ -37,4 +37,4 @@ def _ensure_default_queue(company): def _ensure_uuid(): - Settings.add_value("server.uuid", str(uuid4())) + Settings.add_value(SettingKeys.server__uuid, str(uuid4())) diff --git a/server/schema/services/server.conf b/server/schema/services/server.conf index 6de7c22..b39c279 100644 --- a/server/schema/services/server.conf +++ b/server/schema/services/server.conf @@ -69,6 +69,17 @@ info { } } } + "2.8": ${info."2.1"} { + response { + type: object + properties { + uid { + description: "Server UID" + type: string + } + } + } + } } endpoints { "2.1" { diff --git a/server/services/server/__init__.py b/server/services/server/__init__.py index e4f7e58..6d7919b 100644 --- a/server/services/server/__init__.py +++ b/server/services/server/__init__.py @@ -10,6 +10,7 @@ from config.info import get_version, get_build_number, get_commit_number from database.errors import translate_errors_context from database.model import Company from database.model.company import ReportStatsOption +from database.model.settings import Settings, SettingKeys from service_repo import ServiceRepo, APICall, endpoint @@ -60,6 +61,12 @@ def info(call: APICall): } +@endpoint("server.info", min_version="2.8") +def info_2_8(call: APICall): + info(call) + call.result.data["uid"] = Settings.get_by_key(SettingKeys.server__uuid) + + @endpoint( "server.report_stats_option", request_data_model=ReportStatsOptionRequest, diff --git a/server/utilities/stringenum.py b/server/utilities/stringenum.py new file mode 100644 index 0000000..8eee1cd --- /dev/null +++ b/server/utilities/stringenum.py @@ -0,0 +1,10 @@ +from enum import Enum + + +class StringEnum(Enum): + def __str__(self): + return self.value + + # noinspection PyMethodParameters + def _generate_next_value_(name, start, count, last_values): + return name \ No newline at end of file