deepfos 1.1.6__tar.gz → 1.1.8__tar.gz
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-1.1.6 → deepfos-1.1.8}/PKG-INFO +1 -1
- {deepfos-1.1.6 → deepfos-1.1.8}/README.md +1 -1
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/base.py +2 -16
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/deepchart.py +10 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/deepux.py +52 -7
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/PKG-INFO +1 -1
- {deepfos-1.1.6 → deepfos-1.1.8}/setup.py +1 -1
- {deepfos-1.1.6 → deepfos-1.1.8}/MANIFEST.in +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/_version.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/algo/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/algo/graph.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/business_model.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/dimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/models/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/models/business_model.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/models/dimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_2/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_2/dimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_2/models/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_2/models/dimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/account.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/accounting_engines.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/app.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/approval_process.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/business_model.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/consolidation.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/datatable.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/deepfos_task.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/dimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/financial_model.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/journal_template.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/memory_financial_model.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/account.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/accounting_engines.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/app.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/approval_process.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/base.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/business_model.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/consolidation.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/datatable_mysql.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/deepfos_task.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/dimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/financial_model.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/journal_template.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/memory_financial_model.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/platform.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/python.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/reconciliation_engine.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/reconciliation_report.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/role_strategy.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/smartlist.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/space.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/system.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/variable.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/workflow.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/platform.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/python.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/reconciliation_engine.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/reconciliation_report.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/role_strategy.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/smartlist.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/space.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/system.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/variable.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/workflow.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/jstream.c +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/jstream.pyx +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/pandas.c +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/pandas.pyx +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/py_jstream.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/py_pandas.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/cache.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/config.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/_base.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/constants.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/cube.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/formula.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/syscube.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/typing.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/utils.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/_base.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/dimcreator.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/dimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/dimexpr.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/dimmember.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/eledimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/filters.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/sysdimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/_cache.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/_operator.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/nodemixin.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/sqlcondition.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/tablemodel.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/cipher.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/clickhouse.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/connector.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/daclickhouse.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/dameng.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/damysql.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/dbkits.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/deepengine.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/gauss.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/kingbase.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/mysql.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/oracle.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/postgresql.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/sqlserver.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/utils.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/accounting.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/apvlprocess.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/base.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/bizmodel.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/datatable.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/dimension.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/fact_table.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/finmodel.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/journal_template.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/pyscript.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/reconciliation.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/rolestrategy.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/smartlist.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/variable.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/workflow.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/exceptions/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/exceptions/hook.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lazy.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/_javaobj.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/asynchronous.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/concurrency.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/constant.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/decorator.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/discovery.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/eureka.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/filterparser.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/httpcli.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/jsonstreamer.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/nacos.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/patch.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/redis.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/stopwatch.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/subtask.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/sysutils.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/utils.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/local.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/options.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/translation.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/SOURCES.txt +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/dependency_links.txt +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/not-zip-safe +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/requires.txt +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/top_level.txt +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/setup.cfg +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/tests/__init__.py +0 -0
- {deepfos-1.1.6 → deepfos-1.1.8}/versioneer.py +0 -0
|
@@ -34,5 +34,5 @@ DeepFOS SDK for Python
|
|
|
34
34
|
[@陈熙](https://e.gitee.com/proinnova/members/trend/axisarsae)
|
|
35
35
|
[@陈思聪](https://e.gitee.com/proinnova/members/trend/proinnova_sicong_chen)
|
|
36
36
|
[@杨璟](https://e.gitee.com/proinnova/members/trend/jyang-0506)
|
|
37
|
-
[
|
|
37
|
+
[@李杨](https://e.gitee.com/proinnova/members/trend/ryan_li1384)
|
|
38
38
|
[@陈文雍](https://e.gitee.com/proinnova/members/trend/calvinstk)
|
|
@@ -352,11 +352,6 @@ class Route:
|
|
|
352
352
|
req.update_default(func(ins, *args, **kwargs))
|
|
353
353
|
url, body, ext_header = req.url, req.body, req.header
|
|
354
354
|
raw_result = model is None
|
|
355
|
-
has_req_callback = (
|
|
356
|
-
isinstance(ins.root, _DynamicAPIMixin)
|
|
357
|
-
and ins.root.on_success is not None
|
|
358
|
-
and ins.root.on_failure is not None
|
|
359
|
-
)
|
|
360
355
|
|
|
361
356
|
if ext_header is None:
|
|
362
357
|
header = ins.header
|
|
@@ -422,8 +417,6 @@ class Route:
|
|
|
422
417
|
if not OPTION.api.dump_always and OPTION.api.dump_on_failure:
|
|
423
418
|
req.to_curl(header)
|
|
424
419
|
|
|
425
|
-
if has_req_callback:
|
|
426
|
-
ins.root.on_failure()
|
|
427
420
|
raise APIRequestError(e) from None
|
|
428
421
|
|
|
429
422
|
# -----------------------------------------------------------------------------
|
|
@@ -441,12 +434,7 @@ class Route:
|
|
|
441
434
|
)
|
|
442
435
|
flag, obj, err = False, None, f"[code: {status_code}] ErrMsg from server: {text}"
|
|
443
436
|
|
|
444
|
-
if has_req_callback:
|
|
445
|
-
ins.root.on_failure()
|
|
446
|
-
|
|
447
437
|
else:
|
|
448
|
-
if has_req_callback:
|
|
449
|
-
ins.root.on_success()
|
|
450
438
|
try:
|
|
451
439
|
resp = json.loads(text)
|
|
452
440
|
if 'status' not in resp:
|
|
@@ -585,8 +573,6 @@ class _DynamicAPIMixin:
|
|
|
585
573
|
module_type: str = UNSET
|
|
586
574
|
server_known = False
|
|
587
575
|
version = None
|
|
588
|
-
on_success = None
|
|
589
|
-
on_failure = None
|
|
590
576
|
|
|
591
577
|
def get_module_id(self, version: Union[float, str], module_id: str):
|
|
592
578
|
if (module_type := self.module_type) is UNSET:
|
|
@@ -643,7 +629,7 @@ class DynamicAPIBase(SyncAPIBase, _DynamicAPIMixin):
|
|
|
643
629
|
def set_url(self, server_name):
|
|
644
630
|
if OPTION.discovery.enabled: # pragma: no cover
|
|
645
631
|
discovery = ServiceDiscovery.instantiate()
|
|
646
|
-
|
|
632
|
+
base_url = discovery.sync_get_url(server_name)
|
|
647
633
|
self.base_url = concat_url(base_url, self.endpoint)
|
|
648
634
|
self.server_known = True
|
|
649
635
|
else:
|
|
@@ -686,7 +672,7 @@ class ADynamicAPIBase(AsyncAPIBase, _DynamicAPIMixin):
|
|
|
686
672
|
async def set_url(self, server_name):
|
|
687
673
|
if OPTION.discovery.enabled: # pragma: no cover
|
|
688
674
|
discovery = ServiceDiscovery.instantiate()
|
|
689
|
-
|
|
675
|
+
base_url = await discovery.get_url(server_name)
|
|
690
676
|
self.base_url = concat_url(base_url, self.endpoint)
|
|
691
677
|
self.server_known = True
|
|
692
678
|
else:
|
|
@@ -113,6 +113,16 @@ class BaseField(BaseModel):
|
|
|
113
113
|
result.update({LOGIC_INFO: self.logic_info.as_dict()})
|
|
114
114
|
return result
|
|
115
115
|
|
|
116
|
+
@property
|
|
117
|
+
def name(self):
|
|
118
|
+
return self.columnName
|
|
119
|
+
|
|
120
|
+
def __setattr__(self, name, value):
|
|
121
|
+
if name == 'name':
|
|
122
|
+
self.columnName = value
|
|
123
|
+
else:
|
|
124
|
+
super().__setattr__(name, value)
|
|
125
|
+
|
|
116
126
|
|
|
117
127
|
class Text(BaseField):
|
|
118
128
|
code = 1
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"""DeepUX组件数据源"""
|
|
2
2
|
import asyncio
|
|
3
3
|
import functools
|
|
4
|
-
from typing import Dict, Type
|
|
4
|
+
from typing import Dict, Type, List
|
|
5
5
|
|
|
6
6
|
import pandas as pd
|
|
7
7
|
|
|
8
8
|
from deepfos import OPTION
|
|
9
9
|
from deepfos.api.models import BaseModel
|
|
10
|
+
from deepfos.api.models.dimension import DimensionMemberBean
|
|
10
11
|
|
|
11
12
|
__all__ = [
|
|
12
13
|
'BaseField',
|
|
@@ -19,6 +20,7 @@ __all__ = [
|
|
|
19
20
|
'UUID',
|
|
20
21
|
'as_datasource',
|
|
21
22
|
'Struct',
|
|
23
|
+
'to_desc'
|
|
22
24
|
]
|
|
23
25
|
|
|
24
26
|
FLAG_FOR_META = 'describe'
|
|
@@ -26,6 +28,7 @@ FIELDS = "fields"
|
|
|
26
28
|
STRUCT_FIELD = "objectInfos"
|
|
27
29
|
ELE_INFO_FIELD = "elementInfo"
|
|
28
30
|
DATA_FIELD = "json"
|
|
31
|
+
DESC_FIELD = "description"
|
|
29
32
|
|
|
30
33
|
|
|
31
34
|
class BaseField(BaseModel):
|
|
@@ -130,12 +133,50 @@ class Struct(metaclass=StructMeta):
|
|
|
130
133
|
}
|
|
131
134
|
|
|
132
135
|
|
|
136
|
+
def to_desc(data: List[DimensionMemberBean]):
|
|
137
|
+
desc = {}
|
|
138
|
+
for dim in data:
|
|
139
|
+
desc[dim.name] = dim.multilingual.get(OPTION.api.header.get('language', 'en'), dim.name)
|
|
140
|
+
return desc
|
|
141
|
+
|
|
142
|
+
|
|
133
143
|
def _resolve_param(args: tuple):
|
|
134
144
|
if len(args) == 2:
|
|
135
145
|
return args[1]
|
|
136
146
|
if len(args) == 1:
|
|
137
147
|
return args[0]
|
|
138
|
-
raise ValueError("
|
|
148
|
+
raise ValueError("main函数入参数非法")
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def _check_str_dict(data: Dict[str, Dict], value_type):
|
|
152
|
+
if any(not isinstance(k, str) for k in data):
|
|
153
|
+
raise ValueError("字段描述格式非法")
|
|
154
|
+
|
|
155
|
+
if any(not isinstance(v, value_type) for v in data.values()):
|
|
156
|
+
raise ValueError("字段描述格式非法")
|
|
157
|
+
|
|
158
|
+
if value_type == str:
|
|
159
|
+
return
|
|
160
|
+
|
|
161
|
+
for v in data.values():
|
|
162
|
+
_check_str_dict(v, str)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def _resolve_return_value(return_value):
|
|
166
|
+
if isinstance(return_value, tuple) and len(return_value) == 2:
|
|
167
|
+
df, desc = return_value
|
|
168
|
+
if not isinstance(desc, dict):
|
|
169
|
+
raise TypeError("预期字段描述为字典")
|
|
170
|
+
|
|
171
|
+
_check_str_dict(desc, dict)
|
|
172
|
+
|
|
173
|
+
elif isinstance(return_value, pd.DataFrame):
|
|
174
|
+
df = return_value
|
|
175
|
+
desc = {}
|
|
176
|
+
else:
|
|
177
|
+
raise ValueError("预期main函数返回值为pandas DataFrame或pandas DataFrame与字段描述的元组")
|
|
178
|
+
|
|
179
|
+
return df, desc
|
|
139
180
|
|
|
140
181
|
|
|
141
182
|
def as_datasource(
|
|
@@ -145,7 +186,7 @@ def as_datasource(
|
|
|
145
186
|
"""用作DeepUX数据源的main函数装饰器
|
|
146
187
|
|
|
147
188
|
Args:
|
|
148
|
-
func: 返回pandas DataFrame
|
|
189
|
+
func: 返回pandas DataFrame和字段描述(可选)的main方法
|
|
149
190
|
struct: 定义字段及其字段类型的类名称,必填
|
|
150
191
|
|
|
151
192
|
.. admonition:: 用法示例
|
|
@@ -182,11 +223,13 @@ def as_datasource(
|
|
|
182
223
|
if param == FLAG_FOR_META:
|
|
183
224
|
return struct.to_dict()
|
|
184
225
|
|
|
185
|
-
|
|
226
|
+
maybe_df_desc = await func(*args)
|
|
227
|
+
|
|
228
|
+
df, desc = _resolve_return_value(maybe_df_desc)
|
|
186
229
|
|
|
187
230
|
assert isinstance(df, pd.DataFrame), '预期main函数返回值为pandas DataFrame'
|
|
188
231
|
|
|
189
|
-
return {DATA_FIELD: df.to_dict('records')}
|
|
232
|
+
return {DATA_FIELD: df.to_dict('records'), DESC_FIELD: desc}
|
|
190
233
|
else:
|
|
191
234
|
def wrapper(*args):
|
|
192
235
|
param = _resolve_param(args)
|
|
@@ -194,10 +237,12 @@ def as_datasource(
|
|
|
194
237
|
if param == FLAG_FOR_META:
|
|
195
238
|
return struct.to_dict()
|
|
196
239
|
|
|
197
|
-
|
|
240
|
+
maybe_df_desc = func(*args)
|
|
241
|
+
|
|
242
|
+
df, desc = _resolve_return_value(maybe_df_desc)
|
|
198
243
|
|
|
199
244
|
assert isinstance(df, pd.DataFrame), '预期main函数返回值为pandas DataFrame'
|
|
200
245
|
|
|
201
|
-
return {DATA_FIELD: df.to_dict('records')}
|
|
246
|
+
return {DATA_FIELD: df.to_dict('records'), DESC_FIELD: desc}
|
|
202
247
|
|
|
203
248
|
return functools.wraps(func)(wrapper)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|