buildz 0.6.10__tar.gz → 0.6.12__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 (189) hide show
  1. {buildz-0.6.10/buildz.egg-info → buildz-0.6.12}/PKG-INFO +9 -1
  2. {buildz-0.6.10 → buildz-0.6.12}/README.md +8 -0
  3. buildz-0.6.12/buildz/auto/__init__.py +1 -0
  4. buildz-0.6.12/buildz/auto/cache.py +88 -0
  5. buildz-0.6.12/buildz/auto/deal.py +40 -0
  6. buildz-0.6.12/buildz/auto/deal_type.py +33 -0
  7. buildz-0.6.12/buildz/auto/factory.py +28 -0
  8. buildz-0.6.12/buildz/auto/init.py +12 -0
  9. buildz-0.6.12/buildz/auto/log.py +35 -0
  10. buildz-0.6.12/buildz/auto/run.py +20 -0
  11. buildz-0.6.12/buildz/auto/save.py +21 -0
  12. buildz-0.6.12/buildz/auto/test/test.js +27 -0
  13. buildz-0.6.12/buildz/auto/test/test.py +24 -0
  14. buildz-0.6.12/buildz/auto/test/tmp.js +5 -0
  15. buildz-0.6.12/buildz/auto/verify.py +72 -0
  16. buildz-0.6.12/buildz/html/__init__.py +1 -0
  17. buildz-0.6.12/buildz/html/test.py +8 -0
  18. buildz-0.6.12/buildz/html/xml.py +119 -0
  19. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/__init__.py +1 -1
  20. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/base.py +2 -1
  21. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/init.py +5 -2
  22. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc/base.py +2 -0
  23. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc/conf.py +13 -0
  24. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc/confs.py +51 -4
  25. buildz-0.6.12/buildz/ioc/ioc/decorator.py +44 -0
  26. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc/single.py +3 -1
  27. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/base.py +20 -4
  28. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/deals.js +5 -0
  29. buildz-0.6.12/buildz/ioc/ioc_deal/conf/refs_lists.js +31 -0
  30. buildz-0.6.12/buildz/ioc/ioc_deal/init.py +4 -0
  31. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/obj.py +147 -0
  32. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/ref.py +5 -2
  33. buildz-0.6.12/buildz/ioc/ioc_deal/refs.py +62 -0
  34. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/var.py +17 -0
  35. buildz-0.6.12/buildz/ioc/wrap.py +34 -0
  36. {buildz-0.6.10 → buildz-0.6.12}/buildz/pyz.py +4 -1
  37. {buildz-0.6.10 → buildz-0.6.12}/buildz/tools.py +1 -1
  38. {buildz-0.6.10 → buildz-0.6.12/buildz.egg-info}/PKG-INFO +9 -1
  39. {buildz-0.6.10 → buildz-0.6.12}/buildz.egg-info/SOURCES.txt +21 -0
  40. {buildz-0.6.10 → buildz-0.6.12}/setup.py +1 -1
  41. {buildz-0.6.10 → buildz-0.6.12}/LICENSE +0 -0
  42. {buildz-0.6.10 → buildz-0.6.12}/MANIFEST.in +0 -0
  43. {buildz-0.6.10 → buildz-0.6.12}/buildz/__init__.py +0 -0
  44. {buildz-0.6.10 → buildz-0.6.12}/buildz/__main__.py +0 -0
  45. {buildz-0.6.10 → buildz-0.6.12}/buildz/argx.py +0 -0
  46. {buildz-0.6.10 → buildz-0.6.12}/buildz/base.py +0 -0
  47. {buildz-0.6.10 → buildz-0.6.12}/buildz/cmd.py +0 -0
  48. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/__main__.py +0 -0
  49. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/basez.py +0 -0
  50. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/clickhousez.py +0 -0
  51. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/lib/readme +0 -0
  52. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/mysqlz.py +0 -0
  53. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/oraclez.py +0 -0
  54. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/structz.py +0 -0
  55. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/install.txt +0 -0
  56. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/run.conf +0 -0
  57. {buildz-0.6.10 → buildz-0.6.12}/buildz/db/runz.py +0 -0
  58. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/ioc/deal.py +0 -0
  59. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/ioc/help.py +0 -0
  60. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/myers/deal.py +0 -0
  61. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/myers/help.py +0 -0
  62. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/ioc.js +0 -0
  63. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/main.js +0 -0
  64. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/myers.js +0 -0
  65. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/search.js +0 -0
  66. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/xf.js +0 -0
  67. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/default.js +0 -0
  68. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/ioc.js +0 -0
  69. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/myers.js +0 -0
  70. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/search.js +0 -0
  71. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/xf.js +0 -0
  72. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/test.js +0 -0
  73. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/search/deal.py +0 -0
  74. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/search/help.py +0 -0
  75. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/test.py +0 -0
  76. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/xf/deal.py +0 -0
  77. {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/xf/help.py +0 -0
  78. {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/__init__.py +0 -0
  79. {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/dirz.py +0 -0
  80. {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/fhs.py +0 -0
  81. {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/fio.py +0 -0
  82. {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/lsf.py +0 -0
  83. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/branch.py +0 -0
  84. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/call.py +0 -0
  85. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/calls.py +0 -0
  86. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
  87. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  88. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  89. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  90. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  91. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
  92. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  93. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  94. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
  95. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  96. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  97. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  98. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  99. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  100. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  101. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  102. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  103. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  104. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  105. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
  106. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  107. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
  108. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
  109. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/deal.py +0 -0
  110. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/demo.py +0 -0
  111. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/env.py +0 -0
  112. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/ioc.py +0 -0
  113. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/iocf.py +0 -0
  114. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/join.py +0 -0
  115. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/list.py +0 -0
  116. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/map.py +0 -0
  117. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/mcall.py +0 -0
  118. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/ovar.py +0 -0
  119. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/val.py +0 -0
  120. {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/xfile.py +0 -0
  121. {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/__init__.py +0 -0
  122. {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/myers_diff.py +0 -0
  123. {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/__init__.py +0 -0
  124. {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/base.py +0 -0
  125. {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/getch.py +0 -0
  126. {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/lx.py +0 -0
  127. {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/test.py +0 -0
  128. {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/win.py +0 -0
  129. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/__init__.py +0 -0
  130. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/__main__.py +0 -0
  131. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/code.py +0 -0
  132. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/code_modify.py +0 -0
  133. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/copy_old.py +0 -0
  134. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/file.py +0 -0
  135. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/base.py +0 -0
  136. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/buffer.py +0 -0
  137. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/listz.py +0 -0
  138. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/lr.py +0 -0
  139. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/lrval.py +0 -0
  140. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/mapz.py +0 -0
  141. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/nextz.py +0 -0
  142. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/reval.py +0 -0
  143. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/setz.py +0 -0
  144. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/spc.py +0 -0
  145. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/spt.py +0 -0
  146. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/strz.py +0 -0
  147. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/exp.py +0 -0
  148. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/item.py +0 -0
  149. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/mg.py +0 -0
  150. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/pos.py +0 -0
  151. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/base.py +0 -0
  152. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/buffer.py +0 -0
  153. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/listmapz.py +0 -0
  154. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/listz.py +0 -0
  155. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/lr.py +0 -0
  156. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/lrval.py +0 -0
  157. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/mapz.py +0 -0
  158. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/nextz.py +0 -0
  159. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/reval.py +0 -0
  160. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/setz.py +0 -0
  161. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/spc.py +0 -0
  162. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/spt.py +0 -0
  163. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz.py +0 -0
  164. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz_new.py +0 -0
  165. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz_old.py +0 -0
  166. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/exp.py +0 -0
  167. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/item.py +0 -0
  168. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/mg.py +0 -0
  169. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/pos.py +0 -0
  170. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/test.py +0 -0
  171. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/test1.py +0 -0
  172. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/mapz.py +0 -0
  173. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/read.py +0 -0
  174. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/readz.py +0 -0
  175. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/stack.py +0 -0
  176. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/write.py +0 -0
  177. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/base.py +0 -0
  178. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/conf.py +0 -0
  179. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/jsonval.py +0 -0
  180. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/listz.py +0 -0
  181. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/mapz.py +0 -0
  182. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/reval.py +0 -0
  183. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/strz.py +0 -0
  184. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/itemz.py +0 -0
  185. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/mg.py +0 -0
  186. {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/xargs.py +0 -0
  187. {buildz-0.6.10 → buildz-0.6.12}/buildz.egg-info/dependency_links.txt +0 -0
  188. {buildz-0.6.10 → buildz-0.6.12}/buildz.egg-info/top_level.txt +0 -0
  189. {buildz-0.6.10 → buildz-0.6.12}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.10
3
+ Version: 0.6.12
4
4
  Summary: 配置读写(基于json格式进行简化)、ioc、以及其他工具代码。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(ioc), and other tool codes
5
5
  Home-page: https://github.com/buildCodeZ/buildz
6
6
  Author: Zzz
@@ -31,6 +31,14 @@ License-File: LICENSE
31
31
  运行python -m buildz查看帮助
32
32
 
33
33
  持续更新中。。。
34
+ 2024/09/24:
35
+ 增加模块html:html页面解析
36
+ 增加模块auto:自动化调用
37
+
38
+ 2024/09/09
39
+ ioc:
40
+ 加修饰器
41
+ 加配置refs
34
42
 
35
43
  PS: 对比了下json.loads(修改了下json的scanner.py,让它在纯python下运行,不然json.loads会更快)和目前的xf.loads(buildz.xf.readz.loads)的速度,xf.loads比json.loads慢7倍,可能是读字符串更频繁,方法调用更多(为了代码更结构化和容易修改),其实有一版更慢(buildz.xf.read.loads,废弃代码,后面看情况删掉),慢100倍,因为只考虑结构化,没考虑列表增减开销
36
44
 
@@ -18,6 +18,14 @@
18
18
  运行python -m buildz查看帮助
19
19
 
20
20
  持续更新中。。。
21
+ 2024/09/24:
22
+ 增加模块html:html页面解析
23
+ 增加模块auto:自动化调用
24
+
25
+ 2024/09/09
26
+ ioc:
27
+ 加修饰器
28
+ 加配置refs
21
29
 
22
30
  PS: 对比了下json.loads(修改了下json的scanner.py,让它在纯python下运行,不然json.loads会更快)和目前的xf.loads(buildz.xf.readz.loads)的速度,xf.loads比json.loads慢7倍,可能是读字符串更频繁,方法调用更多(为了代码更结构化和容易修改),其实有一版更慢(buildz.xf.read.loads,废弃代码,后面看情况删掉),慢100倍,因为只考虑结构化,没考虑列表增减开销
23
31
 
@@ -0,0 +1 @@
1
+ from .run import Run
@@ -0,0 +1,88 @@
1
+ #
2
+
3
+ from .. import xf, fz
4
+ from .. import ioc
5
+ from ..base import Base
6
+ from ..ioc import wrap
7
+ import os,re
8
+
9
+ @wrap.obj(id="cache_modify")
10
+ @wrap.obj_args("ref, cache", "ref, log")
11
+ class Update(Base):
12
+ """
13
+ #{}
14
+ """
15
+ def init(self, cache, log, pt = "(#\{([^\{\}]*)\})"):
16
+ self.cache = cache
17
+ self.log = log
18
+ self.pt = pt
19
+ def call(self, s):
20
+ if type(s)==dict:
21
+ rst = {}
22
+ for k,v in s.items():
23
+ k,v = self(k), self(v)
24
+ rst[k] = v
25
+ return rst
26
+ elif type(s)==list:
27
+ rst = []
28
+ for v in s:
29
+ v = self(v)
30
+ rst.append(v)
31
+ return rst
32
+ elif type(s)!=str:
33
+ return s
34
+ rst = re.findall(self.pt, s)
35
+ for match, key in rst:
36
+ val = self.cache.get(key)
37
+ if val is None:
38
+ err = f"'{key}' not found in cache"
39
+ self.log.error(err)
40
+ raise Exception(err)
41
+ s = s.replace(match, val)
42
+ return s
43
+
44
+ pass
45
+
46
+
47
+
48
+ @wrap.obj(id="cache.save")
49
+ @wrap.obj_args("ref, cache", "ref, log")
50
+ class Save(Base):
51
+ def init(self, cache, log):
52
+ self.cache = cache
53
+ self.log = log
54
+ def call(self, maps, fp):
55
+ fp = xf.get(maps, "cache.save", None)
56
+ self.log.debug(f"try save cache to '{fp}'")
57
+ if fp is None:
58
+ return
59
+ fz.makefdir(fp)
60
+ rst = self.cache.data
61
+ rs = xf.dumps(rst, format=True)
62
+ fz.write(rs, fp, 'w')
63
+ return True
64
+
65
+ pass
66
+ @wrap.obj(id="cache")
67
+ @wrap.obj_args("ref, log")
68
+ class Cache(Base):
69
+ def get(self, key):
70
+ ks = key.split(".")
71
+ return xf.gets(self.data, ks)
72
+ def set(self, key, val):
73
+ xf.sets(self.data, key.split("."), val)
74
+ def remove(self, key):
75
+ xf.removes(self.data, key.split("."))
76
+ def init(self, log):
77
+ self.log = log
78
+ self.data = {}
79
+ def call(self, maps, fp):
80
+ fp = xf.g(maps, cache="cache.js")
81
+ data = {}
82
+ if os.path.isfile(fp):
83
+ self.log.info(f"load cache from {fp}")
84
+ data = xf.loadf(fp)
85
+ self.data.update(data)
86
+ return True
87
+
88
+ pass
@@ -0,0 +1,40 @@
1
+ #
2
+ from .. import xf
3
+ from .. import ioc
4
+ from ..base import Base
5
+ from ..ioc import wrap
6
+
7
+ @wrap.obj(id="list")
8
+ @wrap.obj_args("[ref, [env, buildz.auto.deal, auto.deal], [ref, autoz.deal]]", "[ioc, confs]")
9
+ class List(Base):
10
+ def init(self, deal, mg):
11
+ self.deal = deal
12
+ self.mg = mg
13
+ def call(self, maps, fp):
14
+ datas = xf.g(maps, datas = [])
15
+ sdeal = xf.g(maps, deal = None)
16
+ deal_obj = xf.g(maps, deal_obj = None)
17
+ deal = self.deal
18
+ if deal_obj is not None:
19
+ deal = deal_obj
20
+ elif sdeal is not None:
21
+ deal = self.mg.get(sdeal)
22
+ for data in datas:
23
+ if not deal(data):
24
+ return False
25
+ return True
26
+
27
+ pass
28
+ #wrap.add_datas("[(env, env.buildz.auto.deal), buildz.auto.deal, auto.deal]")
29
+ @wrap.obj_args("[env, buildz.auto.deal, auto.deal]")
30
+ @wrap.obj(id="autoz.deal")
31
+ class DfDeal(Base):
32
+ def init(self, id):
33
+ self.id = id
34
+ def call(self, data):
35
+ print(f"[ERROR] implement obj with id '{self.id}' by yourself")
36
+
37
+ pass
38
+
39
+
40
+
@@ -0,0 +1,33 @@
1
+
2
+ from .. import xf
3
+ from .. import ioc
4
+ from ..base import Base
5
+ from ..ioc import wrap
6
+ class DealType(Base):
7
+ def init(self, deals = {}):
8
+ print(f"deals: {deals}")
9
+ self.deals = deals
10
+ def call(self, data):
11
+ _type = xf.g(data, type = None)
12
+ return self.deals[_type](data)
13
+
14
+ pass
15
+
16
+ @wrap.obj(id = "def.deal.type")
17
+ @wrap.obj_args("ioc, confs")
18
+ class DefDeal(Base):
19
+ def init(self, mg):
20
+ self.mg = mg
21
+ def call(self, maps, fp):
22
+ conf = xf.get(maps, "def.deal", None)
23
+ factory_id = xf.g(conf, factory="buildz.auto.deal.fill")
24
+ factory = self.mg.get(factory_id)
25
+ data = xf.g(conf, types={})
26
+ rst = {}
27
+ for _type, calls in data.items():
28
+ rst[_type] = factory(calls)
29
+ obj = DealType(rst)
30
+ maps['deal_obj'] = obj
31
+ return True
32
+
33
+ pass
@@ -0,0 +1,28 @@
1
+ #
2
+
3
+ from .. import xf
4
+ from .. import ioc
5
+ from ..base import Base
6
+ from ..ioc import wrap
7
+
8
+ class DeepFc(Base):
9
+ def init(self, fcs):
10
+ self.fc = fcs[0]
11
+ if len(fcs)>1:
12
+ self.next = DeepFc(fcs[1:])
13
+ else:
14
+ self.next = None
15
+ def call(self, data):
16
+ return self.fc(data, self.next)
17
+
18
+ pass
19
+ @wrap.obj(id = "buildz.auto.deal.fill")
20
+ @wrap.obj_args("ioc, confs")
21
+ class Fill(Base):
22
+ def init(self, mg):
23
+ self.mg = mg
24
+ def call(self, orders):
25
+ fcs = [self.mg.get(id) for id in orders]
26
+ return DeepFc(fcs)
27
+
28
+ pass
@@ -0,0 +1,12 @@
1
+ #
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+ from . import deal, deal_type, factory, cache, verify, log, save
@@ -0,0 +1,35 @@
1
+ #
2
+
3
+
4
+ from .. import xf
5
+ from .. import ioc
6
+ from ..base import Base
7
+ from ..ioc import wrap
8
+ from ..tools import *
9
+ import time, sys
10
+ @wrap.obj(id="log")
11
+ class Log(Base):
12
+ def init(self):
13
+ self.fp = None
14
+ def log(self, level, *args):
15
+ args = [str(k) for k in args]
16
+ msg = " ".join(args)
17
+ date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
18
+ msg = f"[{level}] {date} {msg}\n"
19
+ sys.stdout.write(msg)
20
+ if self.fp is not None:
21
+ fp = time.strftime(self.fp)
22
+ fz.makefdir(fp)
23
+ fz.write(msg.encode("utf-8"), fp, 'ab')
24
+ def info(self, *args):
25
+ self.log("INFO", *args)
26
+ def debug(self, *args):
27
+ self.log("DEBUG", *args)
28
+ def error(self, *args):
29
+ self.log("ERROR", *args)
30
+ def call(self, maps, fp):
31
+ fp = xf.g(maps, log = None)
32
+ self.fp = fp
33
+ return True
34
+
35
+ pass
@@ -0,0 +1,20 @@
1
+ from .. import xf
2
+ from .. import ioc
3
+ from ..base import Base
4
+ from . import init
5
+ class Run(Base):
6
+ def init(self, fps=None):
7
+ mg = ioc.build()
8
+ if fps is not None:
9
+ mg.add_fps(fps)
10
+ self.mg = mg
11
+ def call(self, fp):
12
+ maps = xf.loadf(fp)
13
+ calls = xf.g(maps, calls = [])
14
+ for deal in calls:
15
+ fc = self.mg.get(deal)
16
+ if not fc(maps, fp):
17
+ break
18
+
19
+ pass
20
+
@@ -0,0 +1,21 @@
1
+ #
2
+ from ..tools import *
3
+ from buildz.ioc import wrap
4
+ @wrap.obj(id="save")
5
+ @wrap.obj_args("ref, cache", "ref, log", "ref, cache_modify")
6
+ class Save(Base):
7
+ def init(self, cache, log, upd):
8
+ self.cache = cache
9
+ self.log = log
10
+ self.upd = upd
11
+ def call(self, data, fc=None):
12
+ data = self.upd(data)
13
+ save = xf.g(data, save={})
14
+ for k, v in save.items():
15
+ val = xf.gets(data, v.split("."))
16
+ self.cache.set(k, val)
17
+ return True
18
+
19
+ pass
20
+
21
+
@@ -0,0 +1,27 @@
1
+ calls: [log, cache, def.deal.type, list, cache.save]
2
+ cache: tmp.js
3
+ cache.save: tmp.js
4
+ log: log.txt
5
+ def.deal: {
6
+ types: {
7
+ http.get: [request, verify, save]
8
+ }
9
+ }
10
+ datas: [
11
+ {
12
+ url: test
13
+ type: http.get
14
+ data: {
15
+ url: "#{test.url}"
16
+ }
17
+ save: {
18
+ test.url: data.url
19
+ }
20
+ result: {
21
+ code: 0.99
22
+ }
23
+ verify: [
24
+ [code, [">", 1]]
25
+ ]
26
+ }
27
+ ]
@@ -0,0 +1,24 @@
1
+ #coding=utf-8
2
+ from buildz.tools import *
3
+ from buildz.ioc import wrap
4
+ @wrap.obj(id="request")
5
+ @wrap.obj_args("ref, log", "ref, cache_modify")
6
+ class Req(Base):
7
+ def init(self, log, upd):
8
+ self.upd = upd
9
+ self.log = log
10
+ def call(self, data, fc=None):
11
+ data = self.upd(data)
12
+ self.log.debug(f"test data: {data}")
13
+ if fc is not None:
14
+ return fc(data)
15
+ return True
16
+
17
+ pass
18
+ from buildz.auto import Run
19
+ def test():
20
+ Run()("test.js")
21
+
22
+ pass
23
+ pyz.lc(locals(), test)
24
+
@@ -0,0 +1,5 @@
1
+ {
2
+ test: {
3
+ url: tmpurl
4
+ }
5
+ }
@@ -0,0 +1,72 @@
1
+ #
2
+
3
+ from ..tools import *
4
+ from buildz.ioc import wrap
5
+ @wrap.obj(id="verify")
6
+ @wrap.obj_args("ref, log", "ref, cache_modify")
7
+ class Verify(Base):
8
+ def init(self, log, upd):
9
+ self.log = log
10
+ self.upd = upd
11
+ def match(self, v, val, result, data):
12
+ tp,v = v
13
+ if tp=="=":
14
+ if type(val)!=type(v):
15
+ if type(v)==str:
16
+ val = str(val)
17
+ elif type(val)==str:
18
+ v = str(v)
19
+ return val==v
20
+ elif tp == ">":
21
+ if val is None:
22
+ return False
23
+ if type(val)==str:
24
+ val = float(val)
25
+ return val>v
26
+ elif tp=="<":
27
+ if val is None:
28
+ return False
29
+ if type(val)==str:
30
+ val = float(val)
31
+ return val<v
32
+ elif tp==">=":
33
+ if val is None:
34
+ return False
35
+ if type(val)==str:
36
+ val = float(val)
37
+ return val>=v
38
+ elif tp=="<=":
39
+ if val is None:
40
+ return False
41
+ if type(val)==str:
42
+ val = float(val)
43
+ return val<=v
44
+ elif tp=="sh":
45
+ return eval(v)
46
+ else:
47
+ err = f"not impl match type: {tp}"
48
+ self.log.error(err)
49
+ raise Exception(err)
50
+ def call(self, data, fc=None):
51
+ result = self.upd(xf.g(data, result = {}))
52
+ vs = self.upd(xf.g(data, verify=[]))
53
+ for k,v in vs:
54
+ bak = v
55
+ if k == "$":
56
+ if type(v)!=list:
57
+ v = ["sh", v]
58
+ val = None
59
+ else:
60
+ val = xf.gets(result, k.split("."))
61
+ if type(v)!=list:
62
+ v = ["=", v]
63
+ jg = self.match(v, val, result, data)
64
+ if not jg:
65
+ self.log.error(f"verify failed in {data}, key: '{k}', match: {bak}, val: {val}")
66
+ return False
67
+ if fc is None:
68
+ return True
69
+ return fc(data)
70
+
71
+ pass
72
+
@@ -0,0 +1 @@
1
+ from .xml import parse
@@ -0,0 +1,8 @@
1
+ #coding=utf-8
2
+ from ..base import Base
3
+ class Test(Base):
4
+ def call(self, map):
5
+ result = map
6
+ def init(self):
7
+ pass
8
+ pass
@@ -0,0 +1,119 @@
1
+ from html.parser import HTMLParser
2
+ from .. import xf
3
+ import re
4
+ class HtmlTag:
5
+ def to_maps(self):
6
+ nodes = [n.to_maps() for n in self.nodes]
7
+ rst = {'tag': self.tag, 'attrs': self.attrs, 'texts': self.texts, 'text': self.text, 'childs': nodes}
8
+ return rst
9
+ def __str__(self):
10
+ return xf.dumps(self.to_maps())
11
+ def __repr__(self):
12
+ return self.__str__()
13
+ def match(self, val, pt):
14
+ if type(pt)==list:
15
+ tp = pt[0]
16
+ v = pt[1]
17
+ else:
18
+ tp = "="
19
+ v = pt
20
+ if tp == '>':
21
+ return val>v
22
+ elif tp == "<":
23
+ return val<v
24
+ elif tp == "=":
25
+ return val == v
26
+ elif tp == ">=":
27
+ return val>=v
28
+ elif tp=="<=":
29
+ return val<=v
30
+ elif tp == "re":
31
+ return (re.findall(v, val))>0
32
+ elif tp == 'sh':
33
+ #v.replace("${it}", val)
34
+ return eval(v)
35
+ else:
36
+ raise Exception(f"not impl match type: '{tp}'")
37
+ def check(self, maps):
38
+ #print(f"[TESTZ] check: {maps}, attrs: {self.attrs}")
39
+ for k,v in maps.items():
40
+ if k == 'tag':
41
+ if not self.match(self.tag, v):
42
+ return False
43
+ elif k == "$":
44
+ return self.match(None, ["sh", v])
45
+ else:
46
+ if k not in self.attrs or not self.match(self.attrs[k], v):
47
+ return False
48
+ return True
49
+ def __init__(self, tag, attrs=None):
50
+ self.tag = tag
51
+ if attrs is None:
52
+ attrs = {}
53
+ self.attrs = attrs
54
+ self.nodes = []
55
+ self.text = None
56
+ self.texts = []
57
+ def _search(self, rst, maps):
58
+ if self.check(maps):
59
+ rst.append(self)
60
+ for n in self.nodes:
61
+ n._search(rst, maps)
62
+ def searchs(self, **maps):
63
+ rst = []
64
+ self._search(rst, maps)
65
+ return rst
66
+ def tags(self, _tag):
67
+ return self.searchs(tag = _tag)
68
+ def finds(self, s):
69
+ rst = []
70
+ maps = xf.loads(s)
71
+ self._search(rst, maps)
72
+ return rst
73
+ def add_node(self, node):
74
+ self.nodes.append(node)
75
+ def add_text(self, text):
76
+ self.text = text
77
+ self.texts.append(text)
78
+
79
+ pass
80
+
81
+ class MyHTMLParser(HTMLParser):
82
+ def __init__(self):
83
+ super().__init__()
84
+ self.data = HtmlTag("document")
85
+ self.stacks = [self.data]
86
+ def handle_comment(self, data):
87
+ "处理注释,< !-- -->之间的文本"
88
+ pass
89
+ def handle_startendtag(self, tag, attrs):
90
+ "处理自己结束的标签,如< img />"
91
+ self.handle_starttag(tag, attrs)
92
+ self.handle_endtag(tag)
93
+ pass
94
+ def handle_starttag(self, tag, attrs):
95
+ "处理开始标签,比如< div>;这里的attrs获取到的是属性列表,属性以元组的方式展示"
96
+ attrs = {k:v for k,v in attrs}
97
+ tag = HtmlTag(tag, attrs)
98
+ self.stacks[-1].add_node(tag)
99
+ self.stacks.append(tag)
100
+ #print(f"Encountered a {tag} start tag")
101
+ #for attr, value in attrs:
102
+ # print(f" {attr} = {value}")
103
+ def handle_data(self, data):
104
+ self.stacks[-1].add_text(data)
105
+ "处理数据,标签之间的文本"
106
+ #print(f"----handle data in tags: {data}")
107
+ def handle_endtag(self, tag):
108
+ self.stacks.pop(-1)
109
+ "处理结束标签,比如< /div>"
110
+ #print(f"Encountered a {tag} end tag")
111
+
112
+ pass
113
+
114
+ def parse(text):
115
+ obj = MyHTMLParser()
116
+ obj.feed(text)
117
+ return obj.data
118
+
119
+ pass
@@ -1,5 +1,5 @@
1
1
  #coding=utf-8
2
2
 
3
- from .init import build,default_deals
3
+ from .init import *
4
4
 
5
5
  __author__ = "Zzz, emails: 1174534295@qq.com, 1309458652@qq.com"
@@ -2,4 +2,5 @@
2
2
 
3
3
  from .ioc.base import *
4
4
  from .ioc_deal.base import BaseDeal, FormatDeal
5
- from .ioc.single import Single
5
+ from .ioc.single import Single
6
+ from . import wrap
@@ -1,9 +1,10 @@
1
1
  #
2
2
 
3
3
  from .ioc import confs
4
+ from .ioc.confs import ConfsList, Confs
4
5
  from .ioc_deal.base import default_deals
5
-
6
- def build(fp_init = None, add_default_deals = True):
6
+ from . import wrap
7
+ def build(fp_init = None, add_default_deals = True, add_wrap = True):
7
8
  obj = confs.Confs()
8
9
  if (fp_init is not None):
9
10
  if type(fp_init)==dict:
@@ -12,6 +13,8 @@ def build(fp_init = None, add_default_deals = True):
12
13
  obj.init_fp(fp_init)
13
14
  if add_default_deals:
14
15
  obj.add_fp(default_deals)
16
+ if add_wrap:
17
+ obj.add_decorator()
15
18
  return obj
16
19
 
17
20
  pass
@@ -64,6 +64,8 @@ class EncapeData(Base):
64
64
  type = conf.confs.get_data_type(data, 0, conf.default_type())
65
65
  if confs is None:
66
66
  confs = conf.confs
67
+ else:
68
+ self.sid = None
67
69
  self.src = src
68
70
  self.conf = conf
69
71
  self.confs = confs
@@ -174,6 +174,17 @@ class Conf(Base):
174
174
  return obj
175
175
  obj = self.confs.get_data(id, self.id, src=src, info = info)
176
176
  return obj
177
+ def full_ids(self, local = True):
178
+ rst = []
179
+ arr = [self.datas]
180
+ if local:
181
+ arr.append(self.locals)
182
+ for datas in arr:
183
+ for id in datas:
184
+ gid = self.confs.gid(self.namespace, id)
185
+ item = [gid, id, self]
186
+ rst.append(item)
187
+ return rst
177
188
  def get(self, *args, **maps):
178
189
  return self.get_obj(*args, **maps)
179
190
  def default_type(self):
@@ -182,6 +193,8 @@ class Conf(Base):
182
193
  return self._default_type
183
194
  def get_var(self, key, i = -1):
184
195
  return self.confs.get_var(key, i)
196
+ def var_keys(self):
197
+ return self.confs.var_keys()
185
198
  def push_var(self, key, val):
186
199
  return self.confs.push_var(key,val)
187
200
  def has_var(self, key):