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.
Files changed (166) hide show
  1. {deepfos-1.1.6 → deepfos-1.1.8}/PKG-INFO +1 -1
  2. {deepfos-1.1.6 → deepfos-1.1.8}/README.md +1 -1
  3. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/base.py +2 -16
  4. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/deepchart.py +10 -0
  5. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/deepux.py +52 -7
  6. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/PKG-INFO +1 -1
  7. {deepfos-1.1.6 → deepfos-1.1.8}/setup.py +1 -1
  8. {deepfos-1.1.6 → deepfos-1.1.8}/MANIFEST.in +0 -0
  9. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/__init__.py +0 -0
  10. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/_version.py +0 -0
  11. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/algo/__init__.py +0 -0
  12. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/algo/graph.py +0 -0
  13. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/__init__.py +0 -0
  14. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/business_model.py +0 -0
  15. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/dimension.py +0 -0
  16. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/models/__init__.py +0 -0
  17. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/models/business_model.py +0 -0
  18. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_1/models/dimension.py +0 -0
  19. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_2/__init__.py +0 -0
  20. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_2/dimension.py +0 -0
  21. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_2/models/__init__.py +0 -0
  22. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/V1_2/models/dimension.py +0 -0
  23. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/__init__.py +0 -0
  24. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/account.py +0 -0
  25. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/accounting_engines.py +0 -0
  26. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/app.py +0 -0
  27. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/approval_process.py +0 -0
  28. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/business_model.py +0 -0
  29. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/consolidation.py +0 -0
  30. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/datatable.py +0 -0
  31. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/deepfos_task.py +0 -0
  32. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/dimension.py +0 -0
  33. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/financial_model.py +0 -0
  34. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/journal_template.py +0 -0
  35. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/memory_financial_model.py +0 -0
  36. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/__init__.py +0 -0
  37. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/account.py +0 -0
  38. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/accounting_engines.py +0 -0
  39. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/app.py +0 -0
  40. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/approval_process.py +0 -0
  41. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/base.py +0 -0
  42. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/business_model.py +0 -0
  43. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/consolidation.py +0 -0
  44. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/datatable_mysql.py +0 -0
  45. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/deepfos_task.py +0 -0
  46. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/dimension.py +0 -0
  47. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/financial_model.py +0 -0
  48. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/journal_template.py +0 -0
  49. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/memory_financial_model.py +0 -0
  50. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/platform.py +0 -0
  51. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/python.py +0 -0
  52. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/reconciliation_engine.py +0 -0
  53. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/reconciliation_report.py +0 -0
  54. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/role_strategy.py +0 -0
  55. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/smartlist.py +0 -0
  56. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/space.py +0 -0
  57. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/system.py +0 -0
  58. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/variable.py +0 -0
  59. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/models/workflow.py +0 -0
  60. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/platform.py +0 -0
  61. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/python.py +0 -0
  62. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/reconciliation_engine.py +0 -0
  63. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/reconciliation_report.py +0 -0
  64. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/role_strategy.py +0 -0
  65. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/smartlist.py +0 -0
  66. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/space.py +0 -0
  67. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/system.py +0 -0
  68. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/variable.py +0 -0
  69. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/api/workflow.py +0 -0
  70. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/__init__.py +0 -0
  71. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/jstream.c +0 -0
  72. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/jstream.pyx +0 -0
  73. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/pandas.c +0 -0
  74. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/pandas.pyx +0 -0
  75. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/py_jstream.py +0 -0
  76. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/boost/py_pandas.py +0 -0
  77. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/cache.py +0 -0
  78. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/config.py +0 -0
  79. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/__init__.py +0 -0
  80. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/__init__.py +0 -0
  81. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/_base.py +0 -0
  82. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/constants.py +0 -0
  83. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/cube.py +0 -0
  84. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/formula.py +0 -0
  85. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/syscube.py +0 -0
  86. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/typing.py +0 -0
  87. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/cube/utils.py +0 -0
  88. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/__init__.py +0 -0
  89. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/_base.py +0 -0
  90. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/dimcreator.py +0 -0
  91. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/dimension.py +0 -0
  92. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/dimexpr.py +0 -0
  93. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/dimmember.py +0 -0
  94. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/eledimension.py +0 -0
  95. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/filters.py +0 -0
  96. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/dimension/sysdimension.py +0 -0
  97. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/__init__.py +0 -0
  98. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/_cache.py +0 -0
  99. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/_operator.py +0 -0
  100. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/nodemixin.py +0 -0
  101. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/sqlcondition.py +0 -0
  102. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/core/logictable/tablemodel.py +0 -0
  103. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/__init__.py +0 -0
  104. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/cipher.py +0 -0
  105. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/clickhouse.py +0 -0
  106. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/connector.py +0 -0
  107. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/daclickhouse.py +0 -0
  108. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/dameng.py +0 -0
  109. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/damysql.py +0 -0
  110. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/dbkits.py +0 -0
  111. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/deepengine.py +0 -0
  112. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/gauss.py +0 -0
  113. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/kingbase.py +0 -0
  114. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/mysql.py +0 -0
  115. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/oracle.py +0 -0
  116. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/postgresql.py +0 -0
  117. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/sqlserver.py +0 -0
  118. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/db/utils.py +0 -0
  119. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/__init__.py +0 -0
  120. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/accounting.py +0 -0
  121. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/apvlprocess.py +0 -0
  122. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/base.py +0 -0
  123. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/bizmodel.py +0 -0
  124. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/datatable.py +0 -0
  125. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/dimension.py +0 -0
  126. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/fact_table.py +0 -0
  127. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/finmodel.py +0 -0
  128. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/journal_template.py +0 -0
  129. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/pyscript.py +0 -0
  130. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/reconciliation.py +0 -0
  131. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/rolestrategy.py +0 -0
  132. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/smartlist.py +0 -0
  133. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/variable.py +0 -0
  134. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/element/workflow.py +0 -0
  135. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/exceptions/__init__.py +0 -0
  136. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/exceptions/hook.py +0 -0
  137. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lazy.py +0 -0
  138. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/__init__.py +0 -0
  139. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/_javaobj.py +0 -0
  140. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/asynchronous.py +0 -0
  141. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/concurrency.py +0 -0
  142. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/constant.py +0 -0
  143. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/decorator.py +0 -0
  144. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/discovery.py +0 -0
  145. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/eureka.py +0 -0
  146. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/filterparser.py +0 -0
  147. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/httpcli.py +0 -0
  148. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/jsonstreamer.py +0 -0
  149. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/nacos.py +0 -0
  150. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/patch.py +0 -0
  151. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/redis.py +0 -0
  152. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/stopwatch.py +0 -0
  153. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/subtask.py +0 -0
  154. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/sysutils.py +0 -0
  155. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/lib/utils.py +0 -0
  156. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/local.py +0 -0
  157. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/options.py +0 -0
  158. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos/translation.py +0 -0
  159. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/SOURCES.txt +0 -0
  160. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/dependency_links.txt +0 -0
  161. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/not-zip-safe +0 -0
  162. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/requires.txt +0 -0
  163. {deepfos-1.1.6 → deepfos-1.1.8}/deepfos.egg-info/top_level.txt +0 -0
  164. {deepfos-1.1.6 → deepfos-1.1.8}/setup.cfg +0 -0
  165. {deepfos-1.1.6 → deepfos-1.1.8}/tests/__init__.py +0 -0
  166. {deepfos-1.1.6 → deepfos-1.1.8}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.6
3
+ Version: 1.1.8
4
4
  Summary: Collecions of useful and handy tools for deepfos platform
5
5
  Home-page: http://py.deepfos.com
6
6
  Author: deepfos-python-team
@@ -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
- [@李扬](https://e.gitee.com/proinnova/members/trend/ryan_li1384)
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
- self.on_success, self.on_failure, base_url = discovery.sync_get_url(server_name, include_cb=True)
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
- self.on_success, self.on_failure, base_url = await discovery.get_url(server_name, include_cb=True)
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("Bad signature for main function.")
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 DataFramemain方法
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
- df = await func(*args)
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
- df = func(*args)
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deepfos
3
- Version: 1.1.6
3
+ Version: 1.1.8
4
4
  Summary: Collecions of useful and handy tools for deepfos platform
5
5
  Home-page: http://py.deepfos.com
6
6
  Author: deepfos-python-team
@@ -52,7 +52,7 @@ def resolve_extensions():
52
52
 
53
53
 
54
54
  setup(
55
- version="1.1.6",
55
+ version="1.1.8",
56
56
  # cmdclass=versioneer.get_cmdclass(),
57
57
  ext_modules=resolve_extensions()
58
58
  )
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