buildz 0.4.91__tar.gz → 0.5.1__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 (136) hide show
  1. {buildz-0.4.91/buildz.egg-info → buildz-0.5.1}/PKG-INFO +1 -1
  2. buildz-0.5.1/buildz/ioc/ioc/base.py +61 -0
  3. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc/conf.py +22 -2
  4. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc/confs.py +11 -1
  5. buildz-0.5.1/buildz/ioc/ioc_deal/conf/deal_lists.js +22 -0
  6. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/deals.js +13 -1
  7. buildz-0.5.1/buildz/ioc/ioc_deal/conf/xfile_defaults.js +2 -0
  8. buildz-0.5.1/buildz/ioc/ioc_deal/conf/xfile_lists.js +22 -0
  9. buildz-0.5.1/buildz/ioc/ioc_deal/deal.py +40 -0
  10. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/obj.py +19 -3
  11. buildz-0.5.1/buildz/ioc/ioc_deal/xfile.py +41 -0
  12. {buildz-0.4.91 → buildz-0.5.1}/buildz/pyz.py +1 -1
  13. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/mapz.py +1 -1
  14. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/readz.py +5 -5
  15. {buildz-0.4.91 → buildz-0.5.1/buildz.egg-info}/PKG-INFO +1 -1
  16. {buildz-0.4.91 → buildz-0.5.1}/buildz.egg-info/SOURCES.txt +5 -0
  17. {buildz-0.4.91 → buildz-0.5.1}/setup.py +1 -1
  18. buildz-0.4.91/buildz/ioc/ioc/base.py +0 -35
  19. {buildz-0.4.91 → buildz-0.5.1}/LICENSE +0 -0
  20. {buildz-0.4.91 → buildz-0.5.1}/MANIFEST.in +0 -0
  21. {buildz-0.4.91 → buildz-0.5.1}/README.md +0 -0
  22. {buildz-0.4.91 → buildz-0.5.1}/buildz/__init__.py +0 -0
  23. {buildz-0.4.91 → buildz-0.5.1}/buildz/__main__.py +0 -0
  24. {buildz-0.4.91 → buildz-0.5.1}/buildz/argx.py +0 -0
  25. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/ioc/deal.py +0 -0
  26. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/ioc/help.py +0 -0
  27. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/myers/deal.py +0 -0
  28. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/myers/help.py +0 -0
  29. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/conf/ioc.js +0 -0
  30. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/conf/main.js +0 -0
  31. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/conf/myers.js +0 -0
  32. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/conf/search.js +0 -0
  33. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/conf/xf.js +0 -0
  34. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/help/default.js +0 -0
  35. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/help/ioc.js +0 -0
  36. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/help/myers.js +0 -0
  37. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/help/search.js +0 -0
  38. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/help/xf.js +0 -0
  39. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/res/test.js +0 -0
  40. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/search/deal.py +0 -0
  41. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/search/help.py +0 -0
  42. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/test.py +0 -0
  43. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/xf/deal.py +0 -0
  44. {buildz-0.4.91 → buildz-0.5.1}/buildz/demo/xf/help.py +0 -0
  45. {buildz-0.4.91 → buildz-0.5.1}/buildz/fz/__init__.py +0 -0
  46. {buildz-0.4.91 → buildz-0.5.1}/buildz/fz/dirz.py +0 -0
  47. {buildz-0.4.91 → buildz-0.5.1}/buildz/fz/fio.py +0 -0
  48. {buildz-0.4.91 → buildz-0.5.1}/buildz/fz/lsf.py +0 -0
  49. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/__init__.py +0 -0
  50. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/init.py +0 -0
  51. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/base.py +0 -0
  52. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/call.py +0 -0
  53. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/calls.py +0 -0
  54. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  55. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  56. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  57. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  58. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  59. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  60. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  61. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  62. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  63. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  64. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  65. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  66. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  67. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  68. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  69. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  70. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
  71. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  72. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/demo.py +0 -0
  73. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/env.py +0 -0
  74. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/ioc.py +0 -0
  75. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/join.py +0 -0
  76. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/list.py +0 -0
  77. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/map.py +0 -0
  78. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/mcall.py +0 -0
  79. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/ovar.py +0 -0
  80. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/ref.py +0 -0
  81. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/val.py +0 -0
  82. {buildz-0.4.91 → buildz-0.5.1}/buildz/ioc/ioc_deal/var.py +0 -0
  83. {buildz-0.4.91 → buildz-0.5.1}/buildz/tz/__init__.py +0 -0
  84. {buildz-0.4.91 → buildz-0.5.1}/buildz/tz/myers_diff.py +0 -0
  85. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/__init__.py +0 -0
  86. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/__main__.py +0 -0
  87. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/file.py +0 -0
  88. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/base.py +0 -0
  89. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/buffer.py +0 -0
  90. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/listz.py +0 -0
  91. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/lr.py +0 -0
  92. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/lrval.py +0 -0
  93. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/mapz.py +0 -0
  94. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/nextz.py +0 -0
  95. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/reval.py +0 -0
  96. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/setz.py +0 -0
  97. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/spc.py +0 -0
  98. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/spt.py +0 -0
  99. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/deal/strz.py +0 -0
  100. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/exp.py +0 -0
  101. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/item.py +0 -0
  102. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/mg.py +0 -0
  103. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loader/pos.py +0 -0
  104. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/base.py +0 -0
  105. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/buffer.py +0 -0
  106. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/listz.py +0 -0
  107. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/lr.py +0 -0
  108. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/lrval.py +0 -0
  109. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/mapz.py +0 -0
  110. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/nextz.py +0 -0
  111. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/reval.py +0 -0
  112. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/setz.py +0 -0
  113. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/spc.py +0 -0
  114. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/spt.py +0 -0
  115. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/deal/strz.py +0 -0
  116. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/exp.py +0 -0
  117. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/item.py +0 -0
  118. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/mg.py +0 -0
  119. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/pos.py +0 -0
  120. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/loaderz/test.py +0 -0
  121. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/read.py +0 -0
  122. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/stack.py +0 -0
  123. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/write.py +0 -0
  124. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/writer/base.py +0 -0
  125. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/writer/conf.py +0 -0
  126. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/writer/deal/jsonval.py +0 -0
  127. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/writer/deal/listz.py +0 -0
  128. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/writer/deal/mapz.py +0 -0
  129. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/writer/deal/reval.py +0 -0
  130. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/writer/deal/strz.py +0 -0
  131. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/writer/itemz.py +0 -0
  132. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/writer/mg.py +0 -0
  133. {buildz-0.4.91 → buildz-0.5.1}/buildz/xf/xargs.py +0 -0
  134. {buildz-0.4.91 → buildz-0.5.1}/buildz.egg-info/dependency_links.txt +0 -0
  135. {buildz-0.4.91 → buildz-0.5.1}/buildz.egg-info/top_level.txt +0 -0
  136. {buildz-0.4.91 → buildz-0.5.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.4.91
3
+ Version: 0.5.1
4
4
  Summary: a json-base file format's read and write code by python, and codes to read and product object from configure file in such format
5
5
  Home-page: https://github.com/buildCodeZ/buildz
6
6
  Author: Zzz
@@ -0,0 +1,61 @@
1
+ #coding=utf-8
2
+ from buildz import xf, pyz
3
+ from buildz.xf import g as xg
4
+ import json
5
+ import builtins
6
+ typez = builtins.type
7
+ class IOCError(Exception):
8
+ def __init__(self, msg):
9
+ super().__init__(msg)
10
+
11
+ pass
12
+ class Base:
13
+ def update_maps(self, maps, src, replace=1):
14
+ xf.deep_update(maps, src, replace)
15
+ def __init__(self, *args, **maps):
16
+ self.init(*args, **maps)
17
+ def init(self, *args, **maps):
18
+ pass
19
+ def __call__(self, *args, **maps):
20
+ return self.deal(*args, **maps)
21
+ def deal(self, *args, **maps):
22
+ return None
23
+
24
+ pass
25
+ class EncapeData(Base):
26
+ """
27
+ 包含data id对应的配置,配置文件id,配置文件对象
28
+ [object.test, call, ]
29
+ """
30
+ def __init__(self, data, conf, local = False, type = None, src = None, info = None):
31
+ """
32
+ data: 配置数据
33
+ conf: 配置数据对应的配置文件的管理器
34
+ local: 是否是locals的数据(配置文件局部数据)
35
+ type: 配置数据的type字段
36
+ src: 源对象,配置数据生成的对象调用conf获取对象,会有这个字段,目前只有object会放这个字段,其他要么透传要么不传
37
+ info: 额外的调用信息,目前只有object会用到里面的id字段,作为单例额外输入
38
+ """
39
+ if typez(data)==dict:
40
+ pid = xf.g(data, parent=None)
41
+ if pid is not None:
42
+ pedt = conf.get_data(pid, local=True, search_confs = True,src = src, info = info)
43
+ if pedt is None:
44
+ raise IOCError("unfind parend: "+pid)
45
+ pdt = pedt.data
46
+ if typez(pdt)!=dict:
47
+ raise IOCError("only dict can be a parent: "+pid)
48
+ data = dict(data)
49
+ self.update_maps(data, pdt, replace=0)
50
+ self.data = data
51
+ self.sid = conf.id
52
+ self.src = src
53
+ self.conf = conf
54
+ self.confs = conf.confs
55
+ self.local = local
56
+ if type is None:
57
+ type = conf.confs.get_data_type(data, 0, conf.default_type())
58
+ self.type = type
59
+ self.info = info
60
+
61
+ pass
@@ -2,7 +2,7 @@
2
2
  from buildz import xf, pyz
3
3
  from buildz.xf import g as xg
4
4
  import json
5
- from .base import Base, EncapeData
5
+ from .base import Base, EncapeData,IOCError
6
6
  class Conf(Base):
7
7
  """
8
8
  配置文件格式:
@@ -33,6 +33,12 @@ class Conf(Base):
33
33
  item_conf,
34
34
  ...
35
35
  ]
36
+ // 初始化,会一个一个get(id)
37
+ // 其他地方调用该conf.get的时候,会先判断有没有进行init,没有就先调init里的get
38
+ inits: [
39
+ id,
40
+ ...
41
+ ]
36
42
  }
37
43
  如果只有全局数据配置项,可以只写datas里的东西:
38
44
  [
@@ -63,7 +69,7 @@ class Conf(Base):
63
69
  }
64
70
  """
65
71
  if type(conf)!=dict:
66
- conf = {'data':conf}
72
+ conf = {'datas':conf}
67
73
  id = xf.g(conf, id=None)
68
74
  if id is None:
69
75
  id = confs.conf_id()
@@ -74,6 +80,7 @@ class Conf(Base):
74
80
  self.locals = self.map(xf.g(conf, locals=[]), self.confs.get_data_id)
75
81
  self.datas = self.map(xf.g(conf, datas=[]), self.confs.get_data_id)
76
82
  self.deals = self.map(xf.g(conf, deals = []), self.confs.get_deal_type)
83
+ self.inits = xf.g(conf, inits = [])
77
84
  self._default_type = xf.g(conf, default_type = None)
78
85
  self.envs = xf.g(conf, envs = {})
79
86
  self.confs.flush_env(self.envs)
@@ -97,6 +104,13 @@ class Conf(Base):
97
104
  aliases = xf.g(conf, aliases = [])
98
105
  for alias in aliases:
99
106
  self.deals[alias] = deal
107
+ self.mark_init = False
108
+ def do_init(self):
109
+ if self.mark_init:
110
+ return
111
+ self.mark_init = True
112
+ for id in self.inits:
113
+ self.get(id)
100
114
  def get_env(self, id, search_confs = True):
101
115
  if self.confs.global_env and search_confs:
102
116
  return self.confs.get_env(id, self.id)
@@ -116,6 +130,9 @@ class Conf(Base):
116
130
  if not search_confs:
117
131
  return None
118
132
  return self.confs.get_env(id, self.id)
133
+ def set_deal(self, type, fc):
134
+ self.deals[type] = fc
135
+ self.confs.set_deal(type, fc)
119
136
  def get_deal(self, type, search_confs = True):
120
137
  if self.confs.global_deal and search_confs:
121
138
  return self.confs.get_deal(type, self.id)
@@ -125,6 +142,7 @@ class Conf(Base):
125
142
  return None
126
143
  return self.confs.get_deal(type, self.id)
127
144
  def get_data(self, id, local = True, search_confs = True, src = None, info = None):
145
+ self.do_init()
128
146
  if id in self.datas:
129
147
  obj = self.datas[id]
130
148
  return EncapeData(obj, self, local = False, src=src, info = info)
@@ -148,9 +166,11 @@ class Conf(Base):
148
166
  """
149
167
  conf = self.get_data(id, src = src, info = info)
150
168
  if conf is None:
169
+ raise IOCError(f"can't find conf of {id}")
151
170
  return None
152
171
  deal = self.get_deal(conf.type)
153
172
  if deal is None:
173
+ raise IOCError(f"can't find deal of {id}, type = {conf.type}")
154
174
  return None
155
175
  if not remove:
156
176
  obj = deal(conf)
@@ -3,7 +3,7 @@ from buildz import xf, pyz
3
3
  from buildz.xf import g as xg
4
4
  from buildz import argx
5
5
  import json
6
- from .base import Base, EncapeData
6
+ from .base import Base, EncapeData,IOCError
7
7
  from .conf import Conf
8
8
  import os
9
9
  class ConfsNode(Base):
@@ -220,6 +220,13 @@ class Confs(Base):
220
220
  self.deals = {}
221
221
  self.envs = {}
222
222
  self.envs_args = None
223
+ self.mark_init = False
224
+ def do_init(self):
225
+ if self.mark_init:
226
+ return
227
+ self.mark_init = True
228
+ for id in self.confs:
229
+ self.confs[id].do_init()
223
230
  def get_deal_type(self, obj):
224
231
  if type(obj)==dict:
225
232
  return obj[self.deal_key_type]
@@ -306,11 +313,14 @@ class Confs(Base):
306
313
  """
307
314
  根据data id获取data对象,处理逻辑:根据data id查配置,根据配置的type查deal,返回deal处理过的配置
308
315
  """
316
+ self.do_init()
309
317
  conf = self.get_data(id, sid, src=src, info = info)
310
318
  if conf is None:
319
+ raise IOCError(f"confs: can't find conf of {id}")
311
320
  return None
312
321
  deal = self.get_deal(conf.type, sid)
313
322
  if deal is None:
323
+ raise IOCError(f"confs: can't find deal of {id}, type = {conf.type}")
314
324
  return None
315
325
  #print(f"get_obj: {id}({sid}), conf: {conf}, deal: {deal}, type: {conf.type}")
316
326
  if not remove:
@@ -0,0 +1,22 @@
1
+ // [[id, type, single], source, construct=[args, maps], sets=[]]
2
+ [
3
+ {
4
+ nullable: 0,
5
+ out: 1,
6
+ conf: {
7
+ sort: -1,
8
+ data:[
9
+ {key: id, default: null},
10
+ {key: type, default: null}
11
+ ]
12
+ }
13
+ },
14
+ {
15
+ nullable: 0,
16
+ key: target
17
+ },
18
+ {
19
+ nullable: 0,
20
+ key: source
21
+ }
22
+ ]
@@ -9,7 +9,8 @@
9
9
  {
10
10
  type: object,
11
11
  note: 对象,
12
- build: buildz.ioc.ioc_deal.obj.ObjectDeal
12
+ build: buildz.ioc.ioc_deal.obj.ObjectDeal,
13
+ aliases: [obj]
13
14
  },
14
15
  {
15
16
  type: env,
@@ -65,6 +66,17 @@
65
66
  type: join,
66
67
  note: 文件路径拼接,
67
68
  build: buildz.ioc.ioc_deal.join.JoinDeal
69
+ },
70
+ {
71
+ type: xfile,
72
+ note: xf配置文件读取,
73
+ build: buildz.ioc.ioc_deal.xfile.XfileDeal,
74
+ aliases: [xf]
75
+ },
76
+ {
77
+ type: deal,
78
+ note: 扩展的自定义deal方法,
79
+ build: buildz.ioc.ioc_deal.deal.DealDeal
68
80
  }
69
81
  ]
70
82
  }
@@ -0,0 +1,22 @@
1
+ // [[id, type, single], source, construct=[args, maps], sets=[]]
2
+ [
3
+ {
4
+ nullable: 0,
5
+ out: 1,
6
+ conf: {
7
+ sort: -1,
8
+ data:[
9
+ {key: id, default: null},
10
+ {key: type, default: null}
11
+ ]
12
+ }
13
+ },
14
+ {
15
+ nullable: 1,
16
+ key: filepath
17
+ },
18
+ {
19
+ nullable: 1,
20
+ key: fp
21
+ }
22
+ ]
@@ -0,0 +1,40 @@
1
+ #coding=utf-8
2
+ from ..ioc.base import Base, EncapeData,IOCError
3
+ from .base import FormatData,BaseDeal
4
+ from buildz import xf, pyz
5
+ import os
6
+ dp = os.path.dirname(__file__)
7
+ join = os.path.join
8
+ class DealDeal(BaseDeal):
9
+ """
10
+ // 调用后会注册到conf的deal上,用于扩展deals配置
11
+ deal字段deal:
12
+ {
13
+ id:id
14
+ type: deal
15
+ target: type
16
+ source: id # 要求source实现了方法__call__(self, edata:EncapeData)
17
+ }
18
+ 简写:
19
+ [[id, deal], target, source]
20
+ [deal, target, source]
21
+ 例:
22
+ [deal, target, source] //
23
+ """
24
+ def init(self, fp_lists=None, fp_defaults=None):
25
+ super().init("DealDeal", fp_lists, fp_defaults, join(dp, "conf", "deal_lists.js"), None)
26
+ def deal(self, edata:EncapeData):
27
+ data = edata.data
28
+ source = xf.g(data, source=None)
29
+ if source is None:
30
+ raise IOCError("not source in dealdeal")
31
+ target = xf.g(data, target=None)
32
+ if target is None:
33
+ raise IOCError("not target in dealdeal")
34
+ obj = edata.conf.get(source)
35
+ if obj is None:
36
+ raise IOCError("source object not found in dealdeal")
37
+ edata.conf.set_deal(target, obj)
38
+ return None
39
+
40
+ pass
@@ -1,5 +1,5 @@
1
1
  #
2
- from ..ioc.base import Base, EncapeData
2
+ from ..ioc.base import Base, EncapeData,IOCError
3
3
  from .base import FormatData,BaseDeal
4
4
  from buildz import xf, pyz
5
5
  import os
@@ -12,7 +12,9 @@ class ObjectDeal(BaseDeal):
12
12
  id: id
13
13
  type: object
14
14
  source: 导入路径+调用方法/类
15
- single: 1 //是否单例,默认是
15
+ single: 1 //是否单例,默认是,
16
+ //这里的单例是一个id对应一个实例,
17
+ //如果两个id用的同一个source,就是同一个source的两个对象
16
18
  // 构造函数
17
19
  construct:{
18
20
  args: [
@@ -24,6 +26,15 @@ class ObjectDeal(BaseDeal):
24
26
  ...
25
27
  }
26
28
  }
29
+ //construct和args+maps,不能同时存在
30
+ args: [
31
+ item_conf,
32
+ ...
33
+ ]
34
+ maps: {
35
+ key1: item_conf,
36
+ ...
37
+ }
27
38
  // sets之前调用方法
28
39
  prev_call: item_conf
29
40
  // 对象变量设置属性
@@ -98,13 +109,18 @@ class ObjectDeal(BaseDeal):
98
109
  if ids is not None:
99
110
  obj = xf.gets(self.singles, ids)
100
111
  if obj is not None:
112
+ #raise IOCError(f"null for {ids}")
101
113
  return obj
102
114
  source = xf.g(data, source=0)
103
115
  fc = xf.get(self.sources, source, None)
104
116
  if fc is None:
105
117
  fc = pyz.load(source)
106
118
  self.sources[source]=fc
107
- cst = xf.g(data, construct = [])
119
+ cst = xf.g(data, construct = None)
120
+ if cst is None:
121
+ _args = xf.g(data, args = [])
122
+ _maps = xf.g(data, maps = {})
123
+ cst = [_args, _maps]
108
124
  cst = self.fmt_cst(cst)
109
125
  args = xf.g(cst, args=[])
110
126
  maps = xf.g(cst, maps={})
@@ -0,0 +1,41 @@
1
+ #
2
+ from ..ioc.base import Base, EncapeData
3
+ from .base import FormatData,BaseDeal
4
+ from buildz import xf, pyz
5
+ import os
6
+ dp = os.path.dirname(__file__)
7
+ join = os.path.join
8
+ class XfileDeal(BaseDeal):
9
+ """
10
+ 配置文件载入xfile/xf:
11
+ {
12
+ id:id
13
+ type:xfile
14
+ filepath: fp
15
+ # or fp: fp
16
+ }
17
+ 简写:
18
+ [[id, xfile], fp]
19
+ [xfile, fp]
20
+ [xf, fp]
21
+ 例:
22
+ [xfile, test.js]
23
+ """
24
+ def init(self, fp_lists = None, fp_defaults = None):
25
+ self.singles = {}
26
+ self.sources = {}
27
+ super().init("XfileDeal", fp_lists, fp_defaults,
28
+ join(dp, "conf", "xfile_lists.js"),
29
+ join(dp, "conf", "xfile_defaults.js"))
30
+ def deal(self, edata:EncapeData):
31
+ sid = edata.sid
32
+ data = edata.data
33
+ conf = edata.conf
34
+ data = self.format(data)
35
+ fp = xf.g(data, filepath=None)
36
+ if fp is None:
37
+ fp = xf.g(data, fp = fp)
38
+ rst = xf.loads(xf.fread(fp))
39
+ return rst
40
+
41
+ pass
@@ -15,7 +15,7 @@ def load(md, fc = None):
15
15
  try:
16
16
  md = __import__(".".join(mds))
17
17
  break
18
- except:
18
+ except ModuleNotFoundError as exp:
19
19
  mds = mds[:-1]
20
20
  if len(mds)==0:
21
21
  raise Exception("can't import package from "+md)
@@ -88,7 +88,7 @@ def deep_update(target, src, replace=1):
88
88
  continue
89
89
  mval = target[k]
90
90
  if type(mval) == dict and type(val)==dict:
91
- update_maps(mval, val, replace)
91
+ deep_update(mval, val, replace)
92
92
  else:
93
93
  if replace:
94
94
  target[k] = val
@@ -43,8 +43,8 @@ def build_val(mgs):
43
43
  mgs.add(reval.ValDeal("false", lambda x:False))
44
44
 
45
45
  pass
46
- def build():
47
- mgs = mg.Manager()
46
+ def build(as_bytes=False):
47
+ mgs = mg.Manager(as_bytes)
48
48
  build_val(mgs)
49
49
  mgs.add(strz.PrevStrDeal("r'''","'''",0,0,0))
50
50
  mgs.add(strz.PrevStrDeal('r"""','"""',0,0,0))
@@ -71,11 +71,11 @@ def build():
71
71
  return mgs
72
72
 
73
73
  pass
74
- def load(read):
75
- mgs = build()
74
+ def load(read, as_bytes = False):
75
+ mgs = build(as_bytes)
76
76
  return msg.loads(read)
77
77
  def loads(s):
78
- mgs = build()
78
+ mgs = build(type(s)==bytes)
79
79
  input = buffer.BufferInput(s)
80
80
  return mgs.loads(s)
81
81
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.4.91
3
+ Version: 0.5.1
4
4
  Summary: a json-base file format's read and write code by python, and codes to read and product object from configure file in such format
5
5
  Home-page: https://github.com/buildCodeZ/buildz
6
6
  Author: Zzz
@@ -42,6 +42,7 @@ buildz/ioc/ioc/confs.py
42
42
  buildz/ioc/ioc_deal/base.py
43
43
  buildz/ioc/ioc_deal/call.py
44
44
  buildz/ioc/ioc_deal/calls.py
45
+ buildz/ioc/ioc_deal/deal.py
45
46
  buildz/ioc/ioc_deal/demo.py
46
47
  buildz/ioc/ioc_deal/env.py
47
48
  buildz/ioc/ioc_deal/ioc.py
@@ -54,10 +55,12 @@ buildz/ioc/ioc_deal/ovar.py
54
55
  buildz/ioc/ioc_deal/ref.py
55
56
  buildz/ioc/ioc_deal/val.py
56
57
  buildz/ioc/ioc_deal/var.py
58
+ buildz/ioc/ioc_deal/xfile.py
57
59
  buildz/ioc/ioc_deal/conf/call_defaults.js
58
60
  buildz/ioc/ioc_deal/conf/call_lists.js
59
61
  buildz/ioc/ioc_deal/conf/calls_defaults.js
60
62
  buildz/ioc/ioc_deal/conf/calls_lists.js
63
+ buildz/ioc/ioc_deal/conf/deal_lists.js
61
64
  buildz/ioc/ioc_deal/conf/deals.js
62
65
  buildz/ioc/ioc_deal/conf/env_lists.js
63
66
  buildz/ioc/ioc_deal/conf/ioc_lists.js
@@ -73,6 +76,8 @@ buildz/ioc/ioc_deal/conf/obj_set_lists.js
73
76
  buildz/ioc/ioc_deal/conf/ovar_lists.js
74
77
  buildz/ioc/ioc_deal/conf/ref_lists.js
75
78
  buildz/ioc/ioc_deal/conf/var_lists.js
79
+ buildz/ioc/ioc_deal/conf/xfile_defaults.js
80
+ buildz/ioc/ioc_deal/conf/xfile_lists.js
76
81
  buildz/tz/__init__.py
77
82
  buildz/tz/myers_diff.py
78
83
  buildz/xf/__init__.py
@@ -7,7 +7,7 @@ from setuptools import setup, find_packages
7
7
 
8
8
  setup(
9
9
  name = 'buildz',
10
- version = '0.4.91',
10
+ version = '0.5.1',
11
11
  keywords='buildz',
12
12
  long_description=open('README.md', 'r', encoding="utf-8").read(),
13
13
  long_description_content_type='text/markdown',
@@ -1,35 +0,0 @@
1
- #coding=utf-8
2
- from buildz import xf, pyz
3
- from buildz.xf import g as xg
4
- import json
5
- class Base:
6
- def update_maps(self, maps, src):
7
- xf.deep_update(maps, src)
8
- def __init__(self, *args, **maps):
9
- self.init(*args, **maps)
10
- def init(self, *args, **maps):
11
- pass
12
- def __call__(self, *args, **maps):
13
- return self.deal(*args, **maps)
14
- def deal(self, *args, **maps):
15
- return None
16
-
17
- pass
18
- class EncapeData(Base):
19
- """
20
- 包含data id对应的配置,配置文件id,配置文件对象
21
- [object.test, call, ]
22
- """
23
- def __init__(self, data, conf, local = False, type = None, src = None, info = None):
24
- self.data = data
25
- self.sid = conf.id
26
- self.src = src
27
- self.conf = conf
28
- self.confs = conf.confs
29
- self.local = local
30
- if type is None:
31
- type = conf.confs.get_data_type(data, 0, conf.default_type())
32
- self.type = type
33
- self.info = info
34
-
35
- pass
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