buildz 0.6.11__tar.gz → 0.6.13__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 (193) hide show
  1. {buildz-0.6.11/buildz.egg-info → buildz-0.6.13}/PKG-INFO +6 -1
  2. {buildz-0.6.11 → buildz-0.6.13}/README.md +5 -0
  3. buildz-0.6.13/buildz/auto/__init__.py +1 -0
  4. buildz-0.6.13/buildz/auto/cache.py +91 -0
  5. buildz-0.6.13/buildz/auto/config.py +34 -0
  6. buildz-0.6.13/buildz/auto/deal.py +40 -0
  7. buildz-0.6.13/buildz/auto/deal_type.py +34 -0
  8. buildz-0.6.13/buildz/auto/factory.py +28 -0
  9. buildz-0.6.13/buildz/auto/init.py +12 -0
  10. buildz-0.6.13/buildz/auto/log.py +37 -0
  11. buildz-0.6.13/buildz/auto/run.py +24 -0
  12. buildz-0.6.13/buildz/auto/save.py +33 -0
  13. buildz-0.6.13/buildz/auto/test/cache.js +10 -0
  14. buildz-0.6.13/buildz/auto/test/config.js +9 -0
  15. buildz-0.6.13/buildz/auto/test/item1.js +16 -0
  16. buildz-0.6.13/buildz/auto/test/test.js +26 -0
  17. buildz-0.6.13/buildz/auto/test/test.py +24 -0
  18. buildz-0.6.13/buildz/auto/verify.py +78 -0
  19. buildz-0.6.13/buildz/html/__init__.py +1 -0
  20. buildz-0.6.13/buildz/html/test/test.py +15 -0
  21. buildz-0.6.13/buildz/html/xml.py +167 -0
  22. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/base.py +2 -1
  23. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/init.py +4 -1
  24. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc/confs.py +22 -0
  25. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc/decorator.py +14 -0
  26. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc/single.py +3 -1
  27. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/base.py +4 -3
  28. buildz-0.6.13/buildz/ioc/ioc_deal/init.py +4 -0
  29. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/obj.py +2 -1
  30. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/ref.py +3 -1
  31. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/var.py +17 -0
  32. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/wrap.py +8 -0
  33. {buildz-0.6.11 → buildz-0.6.13}/buildz/pyz.py +2 -0
  34. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/mapz.py +30 -5
  35. {buildz-0.6.11 → buildz-0.6.13/buildz.egg-info}/PKG-INFO +6 -1
  36. {buildz-0.6.11 → buildz-0.6.13}/buildz.egg-info/SOURCES.txt +19 -0
  37. {buildz-0.6.11 → buildz-0.6.13}/setup.py +1 -1
  38. buildz-0.6.11/buildz/ioc/ioc_deal/init.py +0 -3
  39. {buildz-0.6.11 → buildz-0.6.13}/LICENSE +0 -0
  40. {buildz-0.6.11 → buildz-0.6.13}/MANIFEST.in +0 -0
  41. {buildz-0.6.11 → buildz-0.6.13}/buildz/__init__.py +0 -0
  42. {buildz-0.6.11 → buildz-0.6.13}/buildz/__main__.py +0 -0
  43. {buildz-0.6.11 → buildz-0.6.13}/buildz/argx.py +0 -0
  44. {buildz-0.6.11 → buildz-0.6.13}/buildz/base.py +0 -0
  45. {buildz-0.6.11 → buildz-0.6.13}/buildz/cmd.py +0 -0
  46. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/__main__.py +0 -0
  47. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/dv/basez.py +0 -0
  48. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/dv/clickhousez.py +0 -0
  49. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/dv/lib/readme +0 -0
  50. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/dv/mysqlz.py +0 -0
  51. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/dv/oraclez.py +0 -0
  52. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/dv/structz.py +0 -0
  53. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/install.txt +0 -0
  54. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/run.conf +0 -0
  55. {buildz-0.6.11 → buildz-0.6.13}/buildz/db/runz.py +0 -0
  56. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/ioc/deal.py +0 -0
  57. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/ioc/help.py +0 -0
  58. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/myers/deal.py +0 -0
  59. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/myers/help.py +0 -0
  60. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/conf/ioc.js +0 -0
  61. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/conf/main.js +0 -0
  62. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/conf/myers.js +0 -0
  63. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/conf/search.js +0 -0
  64. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/conf/xf.js +0 -0
  65. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/help/default.js +0 -0
  66. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/help/ioc.js +0 -0
  67. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/help/myers.js +0 -0
  68. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/help/search.js +0 -0
  69. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/help/xf.js +0 -0
  70. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/res/test.js +0 -0
  71. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/search/deal.py +0 -0
  72. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/search/help.py +0 -0
  73. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/test.py +0 -0
  74. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/xf/deal.py +0 -0
  75. {buildz-0.6.11 → buildz-0.6.13}/buildz/demo/xf/help.py +0 -0
  76. {buildz-0.6.11 → buildz-0.6.13}/buildz/fz/__init__.py +0 -0
  77. {buildz-0.6.11 → buildz-0.6.13}/buildz/fz/dirz.py +0 -0
  78. {buildz-0.6.11 → buildz-0.6.13}/buildz/fz/fhs.py +0 -0
  79. {buildz-0.6.11 → buildz-0.6.13}/buildz/fz/fio.py +0 -0
  80. {buildz-0.6.11 → buildz-0.6.13}/buildz/fz/lsf.py +0 -0
  81. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/__init__.py +0 -0
  82. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc/base.py +0 -0
  83. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc/conf.py +0 -0
  84. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/branch.py +0 -0
  85. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/call.py +0 -0
  86. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/calls.py +0 -0
  87. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
  88. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  89. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  90. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  91. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  92. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
  93. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
  94. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  95. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  96. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
  97. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  98. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  99. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  100. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  101. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  102. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  103. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  104. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  105. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  106. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  107. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
  108. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
  109. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  110. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
  111. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
  112. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/deal.py +0 -0
  113. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/demo.py +0 -0
  114. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/env.py +0 -0
  115. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/ioc.py +0 -0
  116. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/iocf.py +0 -0
  117. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/join.py +0 -0
  118. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/list.py +0 -0
  119. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/map.py +0 -0
  120. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/mcall.py +0 -0
  121. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/ovar.py +0 -0
  122. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/refs.py +0 -0
  123. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/val.py +0 -0
  124. {buildz-0.6.11 → buildz-0.6.13}/buildz/ioc/ioc_deal/xfile.py +0 -0
  125. {buildz-0.6.11 → buildz-0.6.13}/buildz/tools.py +0 -0
  126. {buildz-0.6.11 → buildz-0.6.13}/buildz/tz/__init__.py +0 -0
  127. {buildz-0.6.11 → buildz-0.6.13}/buildz/tz/myers_diff.py +0 -0
  128. {buildz-0.6.11 → buildz-0.6.13}/buildz/tz/tio/__init__.py +0 -0
  129. {buildz-0.6.11 → buildz-0.6.13}/buildz/tz/tio/base.py +0 -0
  130. {buildz-0.6.11 → buildz-0.6.13}/buildz/tz/tio/getch.py +0 -0
  131. {buildz-0.6.11 → buildz-0.6.13}/buildz/tz/tio/lx.py +0 -0
  132. {buildz-0.6.11 → buildz-0.6.13}/buildz/tz/tio/test.py +0 -0
  133. {buildz-0.6.11 → buildz-0.6.13}/buildz/tz/tio/win.py +0 -0
  134. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/__init__.py +0 -0
  135. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/__main__.py +0 -0
  136. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/code.py +0 -0
  137. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/code_modify.py +0 -0
  138. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/copy_old.py +0 -0
  139. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/file.py +0 -0
  140. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/base.py +0 -0
  141. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/buffer.py +0 -0
  142. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/listz.py +0 -0
  143. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/lr.py +0 -0
  144. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/lrval.py +0 -0
  145. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/mapz.py +0 -0
  146. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/nextz.py +0 -0
  147. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/reval.py +0 -0
  148. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/setz.py +0 -0
  149. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/spc.py +0 -0
  150. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/spt.py +0 -0
  151. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/deal/strz.py +0 -0
  152. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/exp.py +0 -0
  153. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/item.py +0 -0
  154. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/mg.py +0 -0
  155. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loader/pos.py +0 -0
  156. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/base.py +0 -0
  157. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/buffer.py +0 -0
  158. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/listmapz.py +0 -0
  159. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/listz.py +0 -0
  160. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/lr.py +0 -0
  161. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/lrval.py +0 -0
  162. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/mapz.py +0 -0
  163. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/nextz.py +0 -0
  164. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/reval.py +0 -0
  165. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/setz.py +0 -0
  166. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/spc.py +0 -0
  167. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/spt.py +0 -0
  168. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/strz.py +0 -0
  169. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/strz_new.py +0 -0
  170. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/deal/strz_old.py +0 -0
  171. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/exp.py +0 -0
  172. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/item.py +0 -0
  173. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/mg.py +0 -0
  174. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/pos.py +0 -0
  175. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/test.py +0 -0
  176. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/loaderz/test1.py +0 -0
  177. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/read.py +0 -0
  178. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/readz.py +0 -0
  179. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/stack.py +0 -0
  180. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/write.py +0 -0
  181. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/writer/base.py +0 -0
  182. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/writer/conf.py +0 -0
  183. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/writer/deal/jsonval.py +0 -0
  184. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/writer/deal/listz.py +0 -0
  185. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/writer/deal/mapz.py +0 -0
  186. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/writer/deal/reval.py +0 -0
  187. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/writer/deal/strz.py +0 -0
  188. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/writer/itemz.py +0 -0
  189. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/writer/mg.py +0 -0
  190. {buildz-0.6.11 → buildz-0.6.13}/buildz/xf/xargs.py +0 -0
  191. {buildz-0.6.11 → buildz-0.6.13}/buildz.egg-info/dependency_links.txt +0 -0
  192. {buildz-0.6.11 → buildz-0.6.13}/buildz.egg-info/top_level.txt +0 -0
  193. {buildz-0.6.11 → buildz-0.6.13}/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.13
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,11 @@ License-File: LICENSE
31
31
  运行python -m buildz查看帮助
32
32
 
33
33
  持续更新中。。。
34
+ 2024/09/25:
35
+ 修复bug,增强html的搜索功能,增强auto配置功能
36
+ 2024/09/24:
37
+ 增加模块html:html页面解析
38
+ 增加模块auto:自动化调用
34
39
 
35
40
  2024/09/09
36
41
  ioc:
@@ -18,6 +18,11 @@
18
18
  运行python -m buildz查看帮助
19
19
 
20
20
  持续更新中。。。
21
+ 2024/09/25:
22
+ 修复bug,增强html的搜索功能,增强auto配置功能
23
+ 2024/09/24:
24
+ 增加模块html:html页面解析
25
+ 增加模块auto:自动化调用
21
26
 
22
27
  2024/09/09
23
28
  ioc:
@@ -0,0 +1 @@
1
+ from .run import Run
@@ -0,0 +1,91 @@
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
+ if s == match:
42
+ s = val
43
+ else:
44
+ s = s.replace(match, str(val))
45
+ return s
46
+
47
+ pass
48
+
49
+
50
+
51
+ @wrap.obj(id="cache.save")
52
+ @wrap.obj_args("ref, cache", "ref, log")
53
+ class Save(Base):
54
+ def init(self, cache, log):
55
+ self.cache = cache
56
+ self.log = log
57
+ def call(self, maps, fp):
58
+ fp = xf.get(maps, "cache.save", None)
59
+ self.log.debug(f"try save cache to '{fp}'")
60
+ if fp is None:
61
+ return
62
+ fz.makefdir(fp)
63
+ rst = self.cache.data
64
+ rs = xf.dumps(rst, format=True)
65
+ fz.write(rs, fp, 'w')
66
+ return True
67
+
68
+ pass
69
+ @wrap.obj(id="cache")
70
+ @wrap.obj_args("ref, log")
71
+ class Cache(Base):
72
+ def get(self, key):
73
+ ks = key.split(".")
74
+ return xf.gets(self.data, ks)
75
+ def set(self, key, val):
76
+ xf.sets(self.data, key.split("."), val)
77
+ def remove(self, key):
78
+ xf.removes(self.data, key.split("."))
79
+ def init(self, log):
80
+ self.log = log
81
+ self.data = {}
82
+ def call(self, maps, fp):
83
+ fp = xf.g(maps, cache="cache.js")
84
+ data = {}
85
+ if os.path.isfile(fp):
86
+ self.log.info(f"load cache from {fp}")
87
+ data = xf.flush_maps(xf.loadf(fp),visit_list=False)
88
+ self.data.update(data)
89
+ return True
90
+
91
+ pass
@@ -0,0 +1,34 @@
1
+ #
2
+ from .. import xf
3
+ from .. import ioc
4
+ from ..base import Base
5
+ from ..ioc import wrap
6
+ import os
7
+ @wrap.obj(id="buildz.auto.config.load")
8
+ class Config(Base):
9
+ def call(self, maps, fp):
10
+ configs = xf.g(maps, configs=[])
11
+ if type(configs)!=list:
12
+ configs = [configs]
13
+ for cfp in configs:
14
+ if not os.path.isfile(cfp):
15
+ self.log.error(f"config file not exist: {cfp}")
16
+ return False
17
+ dt = xf.loadf(cfp)
18
+ xf.fill(dt, maps, replace=0)
19
+ return True
20
+
21
+ pass
22
+ #wrap.add_datas("[(env, env.buildz.auto.deal), buildz.auto.deal, auto.deal]")
23
+ @wrap.obj_args("[env, buildz.auto.deal, auto.deal]")
24
+ @wrap.obj(id="autoz.deal")
25
+ class DfDeal(Base):
26
+ def init(self, id):
27
+ self.id = id
28
+ def call(self, data):
29
+ print(f"[ERROR] implement obj with id '{self.id}' by yourself")
30
+
31
+ pass
32
+
33
+
34
+
@@ -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,34 @@
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
+ self.deals = deals
9
+ def call(self, data):
10
+ if type(data)==str:
11
+ data = xf.loadf(data)
12
+ _type = xf.g(data, type = None)
13
+ return self.deals[_type](data)
14
+
15
+ pass
16
+
17
+ @wrap.obj(id = "def.deal.type")
18
+ @wrap.obj_args("ioc, confs")
19
+ class DefDeal(Base):
20
+ def init(self, mg):
21
+ self.mg = mg
22
+ def call(self, maps, fp):
23
+ conf = xf.get(maps, "def.deal", None)
24
+ factory_id = xf.g(conf, factory="buildz.auto.deal.fill")
25
+ factory = self.mg.get(factory_id)
26
+ data = xf.g(conf, types={})
27
+ rst = {}
28
+ for _type, calls in data.items():
29
+ rst[_type] = factory(calls)
30
+ obj = DealType(rst)
31
+ maps['deal_obj'] = obj
32
+ return True
33
+
34
+ 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, config
@@ -0,0 +1,37 @@
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 warn(self, *args):
27
+ self.log("WARN", *args)
28
+ def debug(self, *args):
29
+ self.log("DEBUG", *args)
30
+ def error(self, *args):
31
+ self.log("ERROR", *args)
32
+ def call(self, maps, fp):
33
+ fp = xf.g(maps, log = None)
34
+ self.fp = fp
35
+ return True
36
+
37
+ pass
@@ -0,0 +1,24 @@
1
+ from .. import xf
2
+ from .. import ioc
3
+ from ..base import Base
4
+ from . import init
5
+ import os
6
+ class Run(Base):
7
+ def init(self, fps=None):
8
+ mg = ioc.build()
9
+ if fps is not None:
10
+ mg.add_fps(fps)
11
+ self.mg = mg
12
+ def call(self, fp):
13
+ maps = xf.loadf(fp)
14
+ config = self.mg.get("buildz.auto.config.load")
15
+ if not config(maps, fp):
16
+ return
17
+ calls = xf.g(maps, calls = [])
18
+ for deal in calls:
19
+ fc = self.mg.get(deal)
20
+ if not fc(maps, fp):
21
+ break
22
+
23
+ pass
24
+
@@ -0,0 +1,33 @@
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
+ if type(v)==str:
16
+ v = ["key"]+v.split(".")
17
+ if type(v)!=list:
18
+ v = ["key", v]
19
+ tp = v[0]
20
+ v = v[1:]
21
+ if tp=="eval":
22
+ val = eval(v[0])
23
+ elif tp == "exec":
24
+ exec(v[0])
25
+ val = self.val
26
+ else:
27
+ val = xf.gets(data, v)
28
+ self.cache.set(k, val)
29
+ return True
30
+
31
+ pass
32
+
33
+
@@ -0,0 +1,10 @@
1
+ {
2
+ test: {
3
+ url: tmpurl,
4
+ val: 1,
5
+ code: 1.99
6
+ },
7
+ result: {
8
+ code: 1.99
9
+ }
10
+ }
@@ -0,0 +1,9 @@
1
+ calls: [log, cache, def.deal.type, list, cache.save]
2
+ cache: cache.js
3
+ cache.save: cache.js
4
+ log: %Y%m%d_log.txt
5
+ def.deal: {
6
+ types: {
7
+ http.get: [request, verify, save]
8
+ }
9
+ }
@@ -0,0 +1,16 @@
1
+ note: test1
2
+ url: test
3
+ type: http.get
4
+ data: {
5
+ url: "#{test.url}"
6
+ val: "#{test.val}"
7
+ }
8
+ save: {
9
+ test.url: data.url
10
+ }
11
+ result: {
12
+ code: 1.99
13
+ }
14
+ verify: [
15
+ "result.code, [>, 1]"
16
+ ]
@@ -0,0 +1,26 @@
1
+ configs: config.js
2
+ datas: [
3
+ //写一个配置
4
+ {
5
+ note: test
6
+ url: test
7
+ type: http.get
8
+ data: {
9
+ url: "#{test.url}"
10
+ }
11
+ save: {
12
+ test.url: data.url
13
+ }
14
+ result: {
15
+ code: 1.99
16
+ }
17
+ verify: [
18
+ "result.code, [>, 1]"
19
+ ]
20
+ save: {
21
+ result.code: result.code
22
+ }
23
+ }
24
+ // 或者配置所在的文件
25
+ item1.js
26
+ ]
@@ -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,78 @@
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
+ self.opts = {}
12
+ self.opts[">"] = self.make_val_cmp(lambda val,v:val>v)
13
+ self.opts["<"] = self.make_val_cmp(lambda val,v:val<v)
14
+ self.opts[">="] = self.make_val_cmp(lambda val,v:val>=v)
15
+ self.opts["<="] = self.make_val_cmp(lambda val,v:val<=v)
16
+ self.opts["="] = self.eq
17
+ self.opts["!="] = self.neq
18
+ def eq(self, val, v):
19
+ if type(val)!=type(v):
20
+ if type(val)==str or type(v)==str:
21
+ return str(val)==str(v)
22
+ return val==v
23
+ def neq(self, val, v):
24
+ if type(val)!=type(v):
25
+ if type(val)==str or type(v)==str:
26
+ return str(val)!=str(v)
27
+ return val!=v
28
+ def make_val_cmp(self, opt):
29
+ def fc(val, v):
30
+ if val is None:
31
+ return False
32
+ if type(val)==str:
33
+ val = float(val)
34
+ if type(v)==str:
35
+ v = float(v)
36
+ return opt(val, v)
37
+ return fc
38
+ def match(self, v, val, result, data):
39
+ tp,v = v
40
+ if tp in self.opts:
41
+ return self.opts[tp](val,v)
42
+ if tp=="eval":
43
+ return eval(v)
44
+ elif tp == "exec":
45
+ exec(v)
46
+ return self.val
47
+ else:
48
+ err = f"not impl match type: {tp}"
49
+ self.log.error(err)
50
+ raise Exception(err)
51
+ def call(self, data, fc=None):
52
+ data = self.upd(data)
53
+ note = xf.g(data, note=data)
54
+ result = xf.g(data, result = {})
55
+ vs = xf.g(data, verify=[])
56
+ for it in vs:
57
+ if type(it)==str:
58
+ it = xf.loads(it)
59
+ k,v=it
60
+ bak = v
61
+ if k == "$":
62
+ if type(v)!=list:
63
+ v = ["eval", v]
64
+ val = None
65
+ else:
66
+ val = xf.gets(data, k.split("."))
67
+ if type(v)!=list:
68
+ v = ["=", v]
69
+ jg = self.match(v, val, result, data)
70
+ if not jg:
71
+ self.log.error(f"verify failed in {note}, key: '{k}', match: {bak}, val: {val}")
72
+ return False
73
+ if fc is None:
74
+ return True
75
+ return fc(data)
76
+
77
+ pass
78
+
@@ -0,0 +1 @@
1
+ from .xml import parse
@@ -0,0 +1,15 @@
1
+
2
+ from buildz.html import parse
3
+ from buildz.tools import *
4
+ #demo.html太大,已经删除
5
+ fp = "demo.html"
6
+ s = fz.read(fp, "rb").decode("utf-8")
7
+
8
+ obj = parse(s)
9
+
10
+ # 可以进行多次查询调用,后一次查询在前一次的结果集里做查询
11
+ rst = obj.finds("(class,toplist1-tr_1MWDu)").finds("tag=a,target=_blank").data()
12
+ rst = obj.searchs("class,toplist1-tr_1MWDu").finds("(tag,a),(tag,a),(target,_blank)").data()
13
+ rst = obj.searchs("class,toplist1-tr_1MWDu").searchs("tag,a", "tag, a", "target, _blank").data()
14
+
15
+ print(f"search rst: {rst}")