buildz 0.6.11__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 (190) hide show
  1. {buildz-0.6.11/buildz.egg-info → buildz-0.6.12}/PKG-INFO +4 -1
  2. {buildz-0.6.11 → buildz-0.6.12}/README.md +3 -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.11 → buildz-0.6.12}/buildz/ioc/base.py +2 -1
  20. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/init.py +4 -1
  21. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/confs.py +22 -0
  22. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/decorator.py +14 -0
  23. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/single.py +3 -1
  24. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/base.py +4 -3
  25. buildz-0.6.12/buildz/ioc/ioc_deal/init.py +4 -0
  26. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/obj.py +2 -1
  27. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/ref.py +3 -1
  28. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/var.py +17 -0
  29. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/wrap.py +8 -0
  30. {buildz-0.6.11 → buildz-0.6.12}/buildz/pyz.py +2 -0
  31. {buildz-0.6.11 → buildz-0.6.12/buildz.egg-info}/PKG-INFO +4 -1
  32. {buildz-0.6.11 → buildz-0.6.12}/buildz.egg-info/SOURCES.txt +16 -0
  33. {buildz-0.6.11 → buildz-0.6.12}/setup.py +1 -1
  34. buildz-0.6.11/buildz/ioc/ioc_deal/init.py +0 -3
  35. {buildz-0.6.11 → buildz-0.6.12}/LICENSE +0 -0
  36. {buildz-0.6.11 → buildz-0.6.12}/MANIFEST.in +0 -0
  37. {buildz-0.6.11 → buildz-0.6.12}/buildz/__init__.py +0 -0
  38. {buildz-0.6.11 → buildz-0.6.12}/buildz/__main__.py +0 -0
  39. {buildz-0.6.11 → buildz-0.6.12}/buildz/argx.py +0 -0
  40. {buildz-0.6.11 → buildz-0.6.12}/buildz/base.py +0 -0
  41. {buildz-0.6.11 → buildz-0.6.12}/buildz/cmd.py +0 -0
  42. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/__main__.py +0 -0
  43. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/basez.py +0 -0
  44. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/clickhousez.py +0 -0
  45. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/lib/readme +0 -0
  46. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/mysqlz.py +0 -0
  47. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/oraclez.py +0 -0
  48. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/structz.py +0 -0
  49. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/install.txt +0 -0
  50. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/run.conf +0 -0
  51. {buildz-0.6.11 → buildz-0.6.12}/buildz/db/runz.py +0 -0
  52. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/ioc/deal.py +0 -0
  53. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/ioc/help.py +0 -0
  54. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/myers/deal.py +0 -0
  55. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/myers/help.py +0 -0
  56. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/ioc.js +0 -0
  57. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/main.js +0 -0
  58. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/myers.js +0 -0
  59. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/search.js +0 -0
  60. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/xf.js +0 -0
  61. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/default.js +0 -0
  62. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/ioc.js +0 -0
  63. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/myers.js +0 -0
  64. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/search.js +0 -0
  65. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/xf.js +0 -0
  66. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/test.js +0 -0
  67. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/search/deal.py +0 -0
  68. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/search/help.py +0 -0
  69. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/test.py +0 -0
  70. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/xf/deal.py +0 -0
  71. {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/xf/help.py +0 -0
  72. {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/__init__.py +0 -0
  73. {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/dirz.py +0 -0
  74. {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/fhs.py +0 -0
  75. {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/fio.py +0 -0
  76. {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/lsf.py +0 -0
  77. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/__init__.py +0 -0
  78. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/base.py +0 -0
  79. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/conf.py +0 -0
  80. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/branch.py +0 -0
  81. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/call.py +0 -0
  82. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/calls.py +0 -0
  83. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
  84. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  85. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  86. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  87. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  88. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
  89. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
  90. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  91. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  92. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
  93. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  94. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  95. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  96. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  97. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  98. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  99. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  100. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  101. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  102. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  103. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
  104. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
  105. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  106. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
  107. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
  108. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/deal.py +0 -0
  109. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/demo.py +0 -0
  110. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/env.py +0 -0
  111. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/ioc.py +0 -0
  112. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/iocf.py +0 -0
  113. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/join.py +0 -0
  114. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/list.py +0 -0
  115. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/map.py +0 -0
  116. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/mcall.py +0 -0
  117. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/ovar.py +0 -0
  118. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/refs.py +0 -0
  119. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/val.py +0 -0
  120. {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/xfile.py +0 -0
  121. {buildz-0.6.11 → buildz-0.6.12}/buildz/tools.py +0 -0
  122. {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/__init__.py +0 -0
  123. {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/myers_diff.py +0 -0
  124. {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/__init__.py +0 -0
  125. {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/base.py +0 -0
  126. {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/getch.py +0 -0
  127. {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/lx.py +0 -0
  128. {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/test.py +0 -0
  129. {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/win.py +0 -0
  130. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/__init__.py +0 -0
  131. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/__main__.py +0 -0
  132. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/code.py +0 -0
  133. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/code_modify.py +0 -0
  134. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/copy_old.py +0 -0
  135. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/file.py +0 -0
  136. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/base.py +0 -0
  137. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/buffer.py +0 -0
  138. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/listz.py +0 -0
  139. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/lr.py +0 -0
  140. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/lrval.py +0 -0
  141. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/mapz.py +0 -0
  142. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/nextz.py +0 -0
  143. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/reval.py +0 -0
  144. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/setz.py +0 -0
  145. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/spc.py +0 -0
  146. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/spt.py +0 -0
  147. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/strz.py +0 -0
  148. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/exp.py +0 -0
  149. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/item.py +0 -0
  150. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/mg.py +0 -0
  151. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/pos.py +0 -0
  152. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/base.py +0 -0
  153. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/buffer.py +0 -0
  154. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/listmapz.py +0 -0
  155. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/listz.py +0 -0
  156. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/lr.py +0 -0
  157. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/lrval.py +0 -0
  158. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/mapz.py +0 -0
  159. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/nextz.py +0 -0
  160. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/reval.py +0 -0
  161. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/setz.py +0 -0
  162. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/spc.py +0 -0
  163. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/spt.py +0 -0
  164. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz.py +0 -0
  165. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz_new.py +0 -0
  166. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz_old.py +0 -0
  167. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/exp.py +0 -0
  168. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/item.py +0 -0
  169. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/mg.py +0 -0
  170. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/pos.py +0 -0
  171. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/test.py +0 -0
  172. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/test1.py +0 -0
  173. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/mapz.py +0 -0
  174. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/read.py +0 -0
  175. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/readz.py +0 -0
  176. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/stack.py +0 -0
  177. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/write.py +0 -0
  178. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/base.py +0 -0
  179. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/conf.py +0 -0
  180. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/jsonval.py +0 -0
  181. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/listz.py +0 -0
  182. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/mapz.py +0 -0
  183. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/reval.py +0 -0
  184. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/strz.py +0 -0
  185. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/itemz.py +0 -0
  186. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/mg.py +0 -0
  187. {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/xargs.py +0 -0
  188. {buildz-0.6.11 → buildz-0.6.12}/buildz.egg-info/dependency_links.txt +0 -0
  189. {buildz-0.6.11 → buildz-0.6.12}/buildz.egg-info/top_level.txt +0 -0
  190. {buildz-0.6.11 → 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.11
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,9 @@ License-File: LICENSE
31
31
  运行python -m buildz查看帮助
32
32
 
33
33
  持续更新中。。。
34
+ 2024/09/24:
35
+ 增加模块html:html页面解析
36
+ 增加模块auto:自动化调用
34
37
 
35
38
  2024/09/09
36
39
  ioc:
@@ -18,6 +18,9 @@
18
18
  运行python -m buildz查看帮助
19
19
 
20
20
  持续更新中。。。
21
+ 2024/09/24:
22
+ 增加模块html:html页面解析
23
+ 增加模块auto:自动化调用
21
24
 
22
25
  2024/09/09
23
26
  ioc:
@@ -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
@@ -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
  from . import wrap
6
- def build(fp_init = None, add_default_deals = True):
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
@@ -478,3 +478,25 @@ class Confs(Base):
478
478
  return EncapeData(fc, confs=self)
479
479
 
480
480
  pass
481
+
482
+ class ConfsList(Base):
483
+ def init(self, mgs):
484
+ self.mgs = mgs
485
+ def get(self, conf):
486
+ _exp = None
487
+ for mg in self.mgs:
488
+ try:
489
+ obj = mg.get(conf)
490
+ return obj
491
+ except IdNotFoundError as exp:
492
+ _exp = exp
493
+ raise _exp
494
+ def push_vars(self, vars):
495
+ [mg.push_vars(vars) for mg in self.mgs]
496
+ return pyz.with_out(lambda :self.pop_vars(vars))
497
+ def pop_vars(self, vars):
498
+ [mg.pop_vars(vars) for mg in self.mgs]
499
+
500
+ pass
501
+
502
+
@@ -1,21 +1,35 @@
1
1
  #coding=utf-8
2
2
  from buildz.base import Base
3
+ from buildz import xf
3
4
  class Decorator(Base):
4
5
  def init(self):
5
6
  self.conf = {}
6
7
  self.fcs = {}
8
+ self.regist("add_datas", self.add_datas)
7
9
  def regist(self, key, fc):
8
10
  self.fcs[key] = fc
11
+ def get(self, tag, index):
12
+ if tag not in self.conf:
13
+ self.conf[tag]=[]
14
+ return self.conf[tag][index]
9
15
  def add(self, tag, data):
10
16
  if tag not in self.conf:
11
17
  self.conf[tag]=[]
18
+ id = len(self.conf[tag])
12
19
  self.conf[tag].append(data)
20
+ return id
13
21
  def set(self, tag, key, val):
14
22
  if tag not in self.conf:
15
23
  self.conf[tag]={}
16
24
  self.conf[tag][key]=val
17
25
  def add_datas(self, item):
26
+ if type(item)==str:
27
+ item = xf.loads(item)
18
28
  return self.add("datas", item)
29
+ def get_datas(self, id):
30
+ return self.get("datas", id)
31
+ def set_datas(self, id, val):
32
+ return self.set("datas", id, val)
19
33
  def set_envs(self, key, val):
20
34
  return self.set("env", key, val)
21
35
  def add_inits(self, val):
@@ -53,7 +53,9 @@ class Single(Base):
53
53
  if ids is None:
54
54
  return
55
55
  xf.sets(self.singles, ids, obj)
56
- def set(self, obj, edata:EncapeData):
56
+ def set(self, edata:EncapeData, obj):
57
+ if not isinstance(edata, EncapeData) and isinstance(obj, EncapeData):
58
+ edata, obj = obj, edata
57
59
  ids = self.get_ids(edata)
58
60
  self.set_by_ids(ids, obj)
59
61
  def rm_by_ids(self, idsj):