deepfos 1.1.60__py3-none-any.whl → 1.1.78__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- deepfos/_version.py +3 -3
- deepfos/api/V1_1/models/business_model.py +322 -322
- deepfos/api/V1_1/models/dimension.py +1075 -1075
- deepfos/api/V1_2/models/dimension.py +1119 -1116
- deepfos/api/account.py +1 -0
- deepfos/api/app.py +1 -0
- deepfos/api/base.py +70 -71
- deepfos/api/deep_pipeline.py +1 -1
- deepfos/api/deepconnector.py +3 -3
- deepfos/api/financial_model.py +12 -0
- deepfos/api/models/account.py +130 -130
- deepfos/api/models/accounting_engines.py +250 -250
- deepfos/api/models/app.py +355 -355
- deepfos/api/models/approval_process.py +231 -231
- deepfos/api/models/base.py +49 -209
- deepfos/api/models/business_model.py +239 -239
- deepfos/api/models/consolidation.py +196 -196
- deepfos/api/models/consolidation_process.py +31 -31
- deepfos/api/models/datatable_mysql.py +78 -78
- deepfos/api/models/deep_pipeline.py +20 -9
- deepfos/api/models/deepconnector.py +9 -8
- deepfos/api/models/deepfos_task.py +118 -118
- deepfos/api/models/deepmodel.py +120 -120
- deepfos/api/models/dimension.py +613 -610
- deepfos/api/models/financial_model.py +691 -663
- deepfos/api/models/journal_model.py +120 -120
- deepfos/api/models/journal_template.py +185 -185
- deepfos/api/models/memory_financial_model.py +131 -131
- deepfos/api/models/platform.py +16 -16
- deepfos/api/models/python.py +32 -32
- deepfos/api/models/reconciliation_engine.py +104 -104
- deepfos/api/models/reconciliation_report.py +29 -29
- deepfos/api/models/role_strategy.py +213 -213
- deepfos/api/models/smartlist.py +86 -86
- deepfos/api/models/space.py +312 -312
- deepfos/api/models/system.py +299 -297
- deepfos/api/models/variable.py +131 -131
- deepfos/api/models/workflow.py +290 -270
- deepfos/api/platform.py +3 -1
- deepfos/api/space.py +1 -0
- deepfos/api/system.py +1 -0
- deepfos/api/workflow.py +8 -0
- deepfos/cache.py +50 -4
- deepfos/element/bizmodel.py +2 -2
- deepfos/element/deep_pipeline.py +29 -16
- deepfos/element/deepconnector.py +36 -1
- deepfos/element/deepmodel.py +591 -332
- deepfos/element/dimension.py +30 -17
- deepfos/element/finmodel.py +542 -101
- deepfos/element/journal.py +20 -10
- deepfos/element/rolestrategy.py +4 -4
- deepfos/element/variable.py +23 -17
- deepfos/element/workflow.py +60 -3
- deepfos/exceptions/__init__.py +1 -1
- deepfos/lib/deepchart.py +14 -13
- deepfos/lib/deepux.py +11 -11
- deepfos/lib/discovery.py +3 -0
- deepfos/lib/filterparser.py +2 -2
- deepfos/lib/k8s.py +101 -0
- deepfos/lib/msg.py +34 -8
- deepfos/lib/serutils.py +34 -9
- deepfos/lib/sysutils.py +37 -18
- deepfos/lib/utils.py +62 -2
- deepfos/options.py +39 -8
- {deepfos-1.1.60.dist-info → deepfos-1.1.78.dist-info}/METADATA +7 -7
- {deepfos-1.1.60.dist-info → deepfos-1.1.78.dist-info}/RECORD +68 -67
- {deepfos-1.1.60.dist-info → deepfos-1.1.78.dist-info}/WHEEL +0 -0
- {deepfos-1.1.60.dist-info → deepfos-1.1.78.dist-info}/top_level.txt +0 -0
deepfos/api/account.py
CHANGED
|
@@ -120,6 +120,7 @@ class UserImport(ChildAPI):
|
|
|
120
120
|
class AccountAPI(RootAPI):
|
|
121
121
|
"""账户中心"""
|
|
122
122
|
prefix = lambda: OPTION.server.account
|
|
123
|
+
server_name = "seepln-account"
|
|
123
124
|
|
|
124
125
|
def __init__(self, *args, **kwargs):
|
|
125
126
|
super(self.__class__.__base__, self).__init__(*args, **kwargs)
|
deepfos/api/app.py
CHANGED
deepfos/api/base.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import enum
|
|
2
2
|
import json
|
|
3
3
|
import re
|
|
4
|
-
import weakref
|
|
5
4
|
from importlib import import_module
|
|
6
5
|
from shlex import quote
|
|
7
6
|
from typing import (
|
|
@@ -14,11 +13,12 @@ from urllib.parse import urlencode
|
|
|
14
13
|
from reprlib import repr
|
|
15
14
|
|
|
16
15
|
from requests.utils import CaseInsensitiveDict, to_key_val_list
|
|
17
|
-
from pydantic import
|
|
16
|
+
from pydantic import BaseModel as PydanticBaseModel
|
|
18
17
|
from cachetools import TTLCache
|
|
19
18
|
from loguru import logger
|
|
20
19
|
|
|
21
20
|
from deepfos.cache import Manager, AppSeperatedLRUCache
|
|
21
|
+
from deepfos.api.models import compat_parse_obj_as as parse_obj_as
|
|
22
22
|
from deepfos.lib.httpcli import AioHttpCli
|
|
23
23
|
from deepfos.lib.utils import concat_url, retry, to_version_tuple, repr_version, trim_text
|
|
24
24
|
from deepfos.lib.asynchronous import evloop
|
|
@@ -365,7 +365,8 @@ class Route:
|
|
|
365
365
|
|
|
366
366
|
# ---------------------------------------------------------------------
|
|
367
367
|
# get request info
|
|
368
|
-
|
|
368
|
+
base_url = await ins.get_base_url()
|
|
369
|
+
req = RequestInfo(url=concat_url(base_url, endpoint), method=method)
|
|
369
370
|
req.update_default(func(ins, *args, **kwargs))
|
|
370
371
|
url, body, ext_header = req.url, req.body, req.header
|
|
371
372
|
raw_result = model is None
|
|
@@ -532,6 +533,7 @@ post = DummyDeco(method='post')
|
|
|
532
533
|
|
|
533
534
|
class APIBase:
|
|
534
535
|
endpoint = '/'
|
|
536
|
+
server_name: str = None
|
|
535
537
|
|
|
536
538
|
def __init__(
|
|
537
539
|
self,
|
|
@@ -552,14 +554,27 @@ class APIBase:
|
|
|
552
554
|
else:
|
|
553
555
|
self.header = header
|
|
554
556
|
|
|
555
|
-
|
|
556
|
-
self.base_url = concat_url(OPTION.server.base, mat.group(1), self.endpoint)
|
|
557
|
-
else:
|
|
558
|
-
self.base_url = concat_url(prefix, self.endpoint)
|
|
557
|
+
self.prefix = prefix
|
|
559
558
|
self.header.update({
|
|
560
559
|
"Content-Type": "application/json;charset=UTF8",
|
|
561
560
|
"Connection": "close",
|
|
562
561
|
})
|
|
562
|
+
self.base_url = None
|
|
563
|
+
|
|
564
|
+
async def get_base_url(self):
|
|
565
|
+
if self.base_url is None:
|
|
566
|
+
if (
|
|
567
|
+
OPTION.discovery.enabled
|
|
568
|
+
and OPTION.discovery.take_over
|
|
569
|
+
and self.server_name is not None
|
|
570
|
+
):
|
|
571
|
+
discovery = ServiceDiscovery.instantiate()
|
|
572
|
+
self.base_url = await discovery.get_url(self.server_name)
|
|
573
|
+
elif mat := RE_SYS_SERVER_PARSER.match(self.prefix):
|
|
574
|
+
self.base_url = concat_url(OPTION.server.base, mat.group(1))
|
|
575
|
+
else:
|
|
576
|
+
self.base_url = self.prefix
|
|
577
|
+
return self.base_url
|
|
563
578
|
|
|
564
579
|
|
|
565
580
|
class APIMeta(type):
|
|
@@ -595,9 +610,11 @@ class SyncAPIBase(APIBase, metaclass=APIMeta):
|
|
|
595
610
|
|
|
596
611
|
# noinspection PyUnresolvedReferences
|
|
597
612
|
class _DynamicAPIMixin:
|
|
613
|
+
module_id: str
|
|
598
614
|
server_cache = TTLCache(maxsize=128, ttl=3600)
|
|
599
615
|
module_type: str = UNSET
|
|
600
|
-
|
|
616
|
+
server_name: str = None
|
|
617
|
+
base_url: str = None
|
|
601
618
|
version = None
|
|
602
619
|
|
|
603
620
|
def get_module_id(self, version: Union[float, str], module_id: str):
|
|
@@ -618,16 +635,30 @@ class _DynamicAPIMixin:
|
|
|
618
635
|
self.server_cache[self.module_id] = server_name
|
|
619
636
|
return server_name
|
|
620
637
|
|
|
621
|
-
def get_server_name(self):
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
638
|
+
async def get_server_name(self):
|
|
639
|
+
if self.server_name is None:
|
|
640
|
+
if self.module_id in self.server_cache:
|
|
641
|
+
self.server_name = self.server_cache[self.module_id]
|
|
642
|
+
else:
|
|
643
|
+
from .space import SpaceAPI
|
|
644
|
+
api = SpaceAPI(self.header, sync=False)
|
|
645
|
+
server_meta = await api.module.detail(self.module_id) # noqa
|
|
646
|
+
self.server_name = self._add_to_memo(server_meta)
|
|
647
|
+
return self.server_name
|
|
648
|
+
|
|
649
|
+
async def get_base_url(self):
|
|
650
|
+
if self.base_url is None:
|
|
651
|
+
server_name = await self.get_server_name()
|
|
652
|
+
if OPTION.discovery.enabled: # pragma: no cover
|
|
653
|
+
discovery = ServiceDiscovery.instantiate()
|
|
654
|
+
base_url = await discovery.get_url(server_name)
|
|
655
|
+
self.base_url = concat_url(base_url)
|
|
656
|
+
else:
|
|
657
|
+
self.base_url = concat_url(OPTION.server.base, server_name)
|
|
658
|
+
return self.base_url
|
|
628
659
|
|
|
629
660
|
|
|
630
|
-
class DynamicAPIBase(
|
|
661
|
+
class DynamicAPIBase(_DynamicAPIMixin, SyncAPIBase):
|
|
631
662
|
def __init__(
|
|
632
663
|
self,
|
|
633
664
|
version: Union[float, str] = None,
|
|
@@ -636,33 +667,16 @@ class DynamicAPIBase(SyncAPIBase, _DynamicAPIMixin):
|
|
|
636
667
|
lazy: bool = False
|
|
637
668
|
):
|
|
638
669
|
super().__init__(header)
|
|
639
|
-
self.module_id =
|
|
640
|
-
# lazy = True means called from element/base, will be set url in ElementBase
|
|
641
|
-
if module_id is not None and not lazy:
|
|
642
|
-
if module_id in self.server_cache:
|
|
643
|
-
logger.debug(f'Find server name for module: {module_id} from cache.')
|
|
644
|
-
server_name = self.server_cache[module_id]
|
|
645
|
-
else:
|
|
646
|
-
server_name = self.get_server_name()
|
|
647
|
-
self.set_url(server_name)
|
|
648
|
-
|
|
649
|
-
def get_server_name(self):
|
|
650
|
-
from .space import SpaceAPI
|
|
651
|
-
api = SpaceAPI(self.header, sync=True)
|
|
652
|
-
server_meta = api.module.detail(self.module_id)
|
|
653
|
-
return self._add_to_memo(server_meta)
|
|
654
|
-
|
|
655
|
-
def set_url(self, server_name):
|
|
656
|
-
if OPTION.discovery.enabled: # pragma: no cover
|
|
657
|
-
discovery = ServiceDiscovery.instantiate()
|
|
658
|
-
base_url = discovery.sync_get_url(server_name)
|
|
659
|
-
self.base_url = concat_url(base_url, self.endpoint)
|
|
660
|
-
self.server_known = True
|
|
661
|
-
else:
|
|
662
|
-
super().set_url(server_name)
|
|
670
|
+
self.module_id = self.get_module_id(version, module_id)
|
|
663
671
|
|
|
672
|
+
def set_server_name(self, server_name):
|
|
673
|
+
self.server_name = server_name
|
|
664
674
|
|
|
665
|
-
|
|
675
|
+
# backward compatibility
|
|
676
|
+
set_url = set_server_name
|
|
677
|
+
|
|
678
|
+
|
|
679
|
+
class ADynamicAPIBase(_DynamicAPIMixin, AsyncAPIBase):
|
|
666
680
|
def __init__(
|
|
667
681
|
self,
|
|
668
682
|
version: Union[float, str] = None,
|
|
@@ -677,32 +691,14 @@ class ADynamicAPIBase(AsyncAPIBase, _DynamicAPIMixin):
|
|
|
677
691
|
def __await__(self):
|
|
678
692
|
return self.init().__await__()
|
|
679
693
|
|
|
680
|
-
async def get_server_name(self):
|
|
681
|
-
from .space import SpaceAPI
|
|
682
|
-
api = SpaceAPI(self.header, sync=False)
|
|
683
|
-
server_meta = await api.module.detail(self.module_id) # noqa
|
|
684
|
-
return self._add_to_memo(server_meta)
|
|
685
|
-
|
|
686
694
|
async def init(self):
|
|
687
|
-
if self.module_id is None:
|
|
688
|
-
return self
|
|
689
|
-
# lazy = True means called from element/base, will be set url in ElementBase
|
|
690
|
-
if not self.lazy:
|
|
691
|
-
if self.module_id in self.server_cache:
|
|
692
|
-
server_name = self.server_cache[self.module_id]
|
|
693
|
-
else:
|
|
694
|
-
server_name = await self.get_server_name()
|
|
695
|
-
await self.set_url(server_name)
|
|
696
695
|
return self
|
|
697
696
|
|
|
698
|
-
async def
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
self.server_known = True
|
|
704
|
-
else:
|
|
705
|
-
super().set_url(server_name)
|
|
697
|
+
async def set_server_name(self, server_name):
|
|
698
|
+
self.server_name = server_name
|
|
699
|
+
|
|
700
|
+
# backward compatibility
|
|
701
|
+
set_url = set_server_name
|
|
706
702
|
|
|
707
703
|
|
|
708
704
|
class RootAPI:
|
|
@@ -721,6 +717,7 @@ class RootAPI:
|
|
|
721
717
|
api_version = None
|
|
722
718
|
cls_name = None
|
|
723
719
|
module_name = None
|
|
720
|
+
server_name = None
|
|
724
721
|
builtin = True
|
|
725
722
|
|
|
726
723
|
if TYPE_CHECKING: # pragma: no cover
|
|
@@ -880,17 +877,19 @@ class ChildAPI(RootAPI):
|
|
|
880
877
|
def __new__(cls, root: RootAPI):
|
|
881
878
|
clz = cls.resolve_cls(
|
|
882
879
|
root.sync, (SyncAPIBase, _ChildAPI), (AsyncAPIBase, _ChildAPI),
|
|
883
|
-
extra={'
|
|
880
|
+
extra={'get_base_url': cls.get_base_url}
|
|
884
881
|
)
|
|
885
|
-
ins = clz(header=root.header, prefix=root.
|
|
882
|
+
ins = clz(header=root.header, prefix=root.prefix)
|
|
886
883
|
if root.url_need_format:
|
|
887
|
-
ins.
|
|
888
|
-
ins.
|
|
884
|
+
ins.endpoint = ins.endpoint.format(**root.header)
|
|
885
|
+
ins.root = root
|
|
889
886
|
return ins
|
|
890
887
|
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
888
|
+
async def get_base_url(self):
|
|
889
|
+
if self.base_url is None:
|
|
890
|
+
base_url = await self.root.get_base_url()
|
|
891
|
+
self.base_url = concat_url(base_url, self.endpoint)
|
|
892
|
+
return self.base_url
|
|
894
893
|
|
|
895
894
|
|
|
896
895
|
class DynamicRootAPI(RootAPI):
|
deepfos/api/deep_pipeline.py
CHANGED
|
@@ -12,7 +12,7 @@ class RunAPI(ChildAPI):
|
|
|
12
12
|
endpoint = '/'
|
|
13
13
|
|
|
14
14
|
@post('run')
|
|
15
|
-
def run_async(self, run_info: RunInfo) -> Union[str, Awaitable[str]]:
|
|
15
|
+
def run_async(self, run_info: Union[RunInfo, RunInfoWithParam]) -> Union[str, Awaitable[str]]:
|
|
16
16
|
"""
|
|
17
17
|
异步执行数据流
|
|
18
18
|
异步执行数据流,返回任务id
|
deepfos/api/deepconnector.py
CHANGED
|
@@ -3,7 +3,7 @@ from typing import Union, Awaitable
|
|
|
3
3
|
from deepfos.element.base import T_ElementInfoWithServer
|
|
4
4
|
from deepfos.lib.decorator import cached_property
|
|
5
5
|
|
|
6
|
-
from .base import ChildAPI,
|
|
6
|
+
from .base import ChildAPI, RootAPI, post
|
|
7
7
|
from .models.deepconnector import *
|
|
8
8
|
|
|
9
9
|
|
|
@@ -14,10 +14,10 @@ class DataSourceAPI(ChildAPI):
|
|
|
14
14
|
"""连接信息相关接口"""
|
|
15
15
|
endpoint = '/apis/v3/ds/spaces/{space}/apps/{app}'
|
|
16
16
|
|
|
17
|
-
@
|
|
17
|
+
@post('connection-info/query', data_wrapped=False)
|
|
18
18
|
def connection_info(self, element_info: T_ElementInfoWithServer) -> Union[ConnectionInfoVo, Awaitable[ConnectionInfoVo]]:
|
|
19
19
|
return {
|
|
20
|
-
'
|
|
20
|
+
'body': {
|
|
21
21
|
'elementName': element_info.elementName,
|
|
22
22
|
'folderId': element_info.folderId
|
|
23
23
|
}
|
deepfos/api/financial_model.py
CHANGED
|
@@ -53,6 +53,10 @@ class Extra(ChildAPI):
|
|
|
53
53
|
"""
|
|
54
54
|
return {'body': calculateDTO}
|
|
55
55
|
|
|
56
|
+
@get('git-version')
|
|
57
|
+
def git_version(self) -> Union[str, Awaitable[str]]:
|
|
58
|
+
return {}
|
|
59
|
+
|
|
56
60
|
|
|
57
61
|
class CubeDataAPI(ChildAPI):
|
|
58
62
|
endpoint = '/cube-data'
|
|
@@ -163,6 +167,14 @@ class CubeCalculateAPI(ChildAPI):
|
|
|
163
167
|
"""
|
|
164
168
|
return {'body': clearDataDTO}
|
|
165
169
|
|
|
170
|
+
@post('/sync/clearData')
|
|
171
|
+
def clear_data_ex(self, clearDataDTO: SyncClearDataDto) -> Union[Any, Awaitable[Any]]:
|
|
172
|
+
"""
|
|
173
|
+
根据财务数据模型名称 所在文件夹Id 维度表达式 清除相关的数据
|
|
174
|
+
|
|
175
|
+
"""
|
|
176
|
+
return {'body': clearDataDTO}
|
|
177
|
+
|
|
166
178
|
|
|
167
179
|
class ReactSpreadsheet(ChildAPI):
|
|
168
180
|
endpoint = '/react/spreadsheet'
|