buildz 0.6.12__tar.gz → 0.6.14__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 (199) hide show
  1. {buildz-0.6.12/buildz.egg-info → buildz-0.6.14}/PKG-INFO +3 -1
  2. {buildz-0.6.12 → buildz-0.6.14}/README.md +2 -0
  3. {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/cache.py +7 -4
  4. buildz-0.6.14/buildz/auto/config.py +34 -0
  5. {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/deal_type.py +2 -1
  6. {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/init.py +1 -1
  7. {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/log.py +2 -0
  8. buildz-0.6.14/buildz/auto/request.py +131 -0
  9. {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/run.py +4 -0
  10. buildz-0.6.14/buildz/auto/save.py +33 -0
  11. buildz-0.6.14/buildz/auto/test/cache.js +16 -0
  12. buildz-0.6.14/buildz/auto/test/config.js +10 -0
  13. buildz-0.6.14/buildz/auto/test/item1.js +16 -0
  14. buildz-0.6.14/buildz/auto/test/item2.js +15 -0
  15. buildz-0.6.14/buildz/auto/test/test.js +27 -0
  16. {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/test/test.py +1 -1
  17. buildz-0.6.14/buildz/auto/verify.py +78 -0
  18. buildz-0.6.14/buildz/html/test/test.py +15 -0
  19. {buildz-0.6.12 → buildz-0.6.14}/buildz/html/xml.py +65 -17
  20. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/mapz.py +30 -5
  21. {buildz-0.6.12 → buildz-0.6.14/buildz.egg-info}/PKG-INFO +3 -1
  22. {buildz-0.6.12 → buildz-0.6.14}/buildz.egg-info/SOURCES.txt +7 -2
  23. {buildz-0.6.12 → buildz-0.6.14}/setup.py +1 -1
  24. buildz-0.6.12/buildz/auto/save.py +0 -21
  25. buildz-0.6.12/buildz/auto/test/test.js +0 -27
  26. buildz-0.6.12/buildz/auto/test/tmp.js +0 -5
  27. buildz-0.6.12/buildz/auto/verify.py +0 -72
  28. buildz-0.6.12/buildz/html/test.py +0 -8
  29. {buildz-0.6.12 → buildz-0.6.14}/LICENSE +0 -0
  30. {buildz-0.6.12 → buildz-0.6.14}/MANIFEST.in +0 -0
  31. {buildz-0.6.12 → buildz-0.6.14}/buildz/__init__.py +0 -0
  32. {buildz-0.6.12 → buildz-0.6.14}/buildz/__main__.py +0 -0
  33. {buildz-0.6.12 → buildz-0.6.14}/buildz/argx.py +0 -0
  34. {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/__init__.py +0 -0
  35. {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/deal.py +0 -0
  36. {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/factory.py +0 -0
  37. {buildz-0.6.12 → buildz-0.6.14}/buildz/base.py +0 -0
  38. {buildz-0.6.12 → buildz-0.6.14}/buildz/cmd.py +0 -0
  39. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/__main__.py +0 -0
  40. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/basez.py +0 -0
  41. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/clickhousez.py +0 -0
  42. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/lib/readme +0 -0
  43. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/mysqlz.py +0 -0
  44. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/oraclez.py +0 -0
  45. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/structz.py +0 -0
  46. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/install.txt +0 -0
  47. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/run.conf +0 -0
  48. {buildz-0.6.12 → buildz-0.6.14}/buildz/db/runz.py +0 -0
  49. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/ioc/deal.py +0 -0
  50. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/ioc/help.py +0 -0
  51. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/myers/deal.py +0 -0
  52. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/myers/help.py +0 -0
  53. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/ioc.js +0 -0
  54. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/main.js +0 -0
  55. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/myers.js +0 -0
  56. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/search.js +0 -0
  57. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/xf.js +0 -0
  58. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/default.js +0 -0
  59. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/ioc.js +0 -0
  60. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/myers.js +0 -0
  61. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/search.js +0 -0
  62. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/xf.js +0 -0
  63. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/test.js +0 -0
  64. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/search/deal.py +0 -0
  65. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/search/help.py +0 -0
  66. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/test.py +0 -0
  67. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/xf/deal.py +0 -0
  68. {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/xf/help.py +0 -0
  69. {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/__init__.py +0 -0
  70. {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/dirz.py +0 -0
  71. {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/fhs.py +0 -0
  72. {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/fio.py +0 -0
  73. {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/lsf.py +0 -0
  74. {buildz-0.6.12 → buildz-0.6.14}/buildz/html/__init__.py +0 -0
  75. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/__init__.py +0 -0
  76. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/base.py +0 -0
  77. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/init.py +0 -0
  78. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/base.py +0 -0
  79. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/conf.py +0 -0
  80. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/confs.py +0 -0
  81. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/decorator.py +0 -0
  82. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/single.py +0 -0
  83. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/base.py +0 -0
  84. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/branch.py +0 -0
  85. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/call.py +0 -0
  86. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/calls.py +0 -0
  87. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
  88. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  89. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  90. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  91. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  92. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
  93. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
  94. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  95. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  96. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
  97. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  98. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  99. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  100. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  101. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  102. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  103. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  104. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  105. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  106. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  107. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
  108. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
  109. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  110. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
  111. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
  112. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/deal.py +0 -0
  113. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/demo.py +0 -0
  114. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/env.py +0 -0
  115. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/init.py +0 -0
  116. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/ioc.py +0 -0
  117. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/iocf.py +0 -0
  118. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/join.py +0 -0
  119. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/list.py +0 -0
  120. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/map.py +0 -0
  121. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/mcall.py +0 -0
  122. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/obj.py +0 -0
  123. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/ovar.py +0 -0
  124. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/ref.py +0 -0
  125. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/refs.py +0 -0
  126. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/val.py +0 -0
  127. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/var.py +0 -0
  128. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/xfile.py +0 -0
  129. {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/wrap.py +0 -0
  130. {buildz-0.6.12 → buildz-0.6.14}/buildz/pyz.py +0 -0
  131. {buildz-0.6.12 → buildz-0.6.14}/buildz/tools.py +0 -0
  132. {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/__init__.py +0 -0
  133. {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/myers_diff.py +0 -0
  134. {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/__init__.py +0 -0
  135. {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/base.py +0 -0
  136. {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/getch.py +0 -0
  137. {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/lx.py +0 -0
  138. {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/test.py +0 -0
  139. {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/win.py +0 -0
  140. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/__init__.py +0 -0
  141. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/__main__.py +0 -0
  142. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/code.py +0 -0
  143. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/code_modify.py +0 -0
  144. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/copy_old.py +0 -0
  145. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/file.py +0 -0
  146. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/base.py +0 -0
  147. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/buffer.py +0 -0
  148. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/listz.py +0 -0
  149. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/lr.py +0 -0
  150. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/lrval.py +0 -0
  151. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/mapz.py +0 -0
  152. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/nextz.py +0 -0
  153. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/reval.py +0 -0
  154. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/setz.py +0 -0
  155. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/spc.py +0 -0
  156. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/spt.py +0 -0
  157. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/strz.py +0 -0
  158. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/exp.py +0 -0
  159. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/item.py +0 -0
  160. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/mg.py +0 -0
  161. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/pos.py +0 -0
  162. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/base.py +0 -0
  163. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/buffer.py +0 -0
  164. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/listmapz.py +0 -0
  165. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/listz.py +0 -0
  166. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/lr.py +0 -0
  167. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/lrval.py +0 -0
  168. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/mapz.py +0 -0
  169. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/nextz.py +0 -0
  170. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/reval.py +0 -0
  171. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/setz.py +0 -0
  172. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/spc.py +0 -0
  173. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/spt.py +0 -0
  174. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/strz.py +0 -0
  175. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/strz_new.py +0 -0
  176. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/strz_old.py +0 -0
  177. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/exp.py +0 -0
  178. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/item.py +0 -0
  179. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/mg.py +0 -0
  180. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/pos.py +0 -0
  181. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/test.py +0 -0
  182. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/test1.py +0 -0
  183. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/read.py +0 -0
  184. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/readz.py +0 -0
  185. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/stack.py +0 -0
  186. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/write.py +0 -0
  187. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/base.py +0 -0
  188. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/conf.py +0 -0
  189. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/jsonval.py +0 -0
  190. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/listz.py +0 -0
  191. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/mapz.py +0 -0
  192. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/reval.py +0 -0
  193. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/strz.py +0 -0
  194. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/itemz.py +0 -0
  195. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/mg.py +0 -0
  196. {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/xargs.py +0 -0
  197. {buildz-0.6.12 → buildz-0.6.14}/buildz.egg-info/dependency_links.txt +0 -0
  198. {buildz-0.6.12 → buildz-0.6.14}/buildz.egg-info/top_level.txt +0 -0
  199. {buildz-0.6.12 → buildz-0.6.14}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.12
3
+ Version: 0.6.14
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,8 @@ License-File: LICENSE
31
31
  运行python -m buildz查看帮助
32
32
 
33
33
  持续更新中。。。
34
+ 2024/09/25:
35
+ 修复bug,增强html的搜索功能,增强auto配置功能
34
36
  2024/09/24:
35
37
  增加模块html:html页面解析
36
38
  增加模块auto:自动化调用
@@ -18,6 +18,8 @@
18
18
  运行python -m buildz查看帮助
19
19
 
20
20
  持续更新中。。。
21
+ 2024/09/25:
22
+ 修复bug,增强html的搜索功能,增强auto配置功能
21
23
  2024/09/24:
22
24
  增加模块html:html页面解析
23
25
  增加模块auto:自动化调用
@@ -6,7 +6,7 @@ from ..base import Base
6
6
  from ..ioc import wrap
7
7
  import os,re
8
8
 
9
- @wrap.obj(id="cache_modify")
9
+ @wrap.obj(id="cache.modify")
10
10
  @wrap.obj_args("ref, cache", "ref, log")
11
11
  class Update(Base):
12
12
  """
@@ -38,7 +38,10 @@ class Update(Base):
38
38
  err = f"'{key}' not found in cache"
39
39
  self.log.error(err)
40
40
  raise Exception(err)
41
- s = s.replace(match, val)
41
+ if s == match:
42
+ s = val
43
+ else:
44
+ s = s.replace(match, str(val))
42
45
  return s
43
46
 
44
47
  pass
@@ -53,8 +56,8 @@ class Save(Base):
53
56
  self.log = log
54
57
  def call(self, maps, fp):
55
58
  fp = xf.get(maps, "cache.save", None)
56
- self.log.debug(f"try save cache to '{fp}'")
57
59
  if fp is None:
60
+ self.log.warn(f"cache not save cause 'cache.save' is None")
58
61
  return
59
62
  fz.makefdir(fp)
60
63
  rst = self.cache.data
@@ -81,7 +84,7 @@ class Cache(Base):
81
84
  data = {}
82
85
  if os.path.isfile(fp):
83
86
  self.log.info(f"load cache from {fp}")
84
- data = xf.loadf(fp)
87
+ data = xf.flush_maps(xf.loadf(fp),visit_list=False)
85
88
  self.data.update(data)
86
89
  return True
87
90
 
@@ -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
+
@@ -5,9 +5,10 @@ from ..base import Base
5
5
  from ..ioc import wrap
6
6
  class DealType(Base):
7
7
  def init(self, deals = {}):
8
- print(f"deals: {deals}")
9
8
  self.deals = deals
10
9
  def call(self, data):
10
+ if type(data)==str:
11
+ data = xf.loadf(data)
11
12
  _type = xf.g(data, type = None)
12
13
  return self.deals[_type](data)
13
14
 
@@ -9,4 +9,4 @@
9
9
 
10
10
 
11
11
 
12
- from . import deal, deal_type, factory, cache, verify, log, save
12
+ from . import deal, deal_type, factory, cache, verify, log, save, config,request
@@ -23,6 +23,8 @@ class Log(Base):
23
23
  fz.write(msg.encode("utf-8"), fp, 'ab')
24
24
  def info(self, *args):
25
25
  self.log("INFO", *args)
26
+ def warn(self, *args):
27
+ self.log("WARN", *args)
26
28
  def debug(self, *args):
27
29
  self.log("DEBUG", *args)
28
30
  def error(self, *args):
@@ -0,0 +1,131 @@
1
+ #
2
+
3
+ from ..tools import *
4
+ from buildz.ioc import wrap
5
+ import json
6
+
7
+ try:
8
+ import requests as rq
9
+ session = rq.session()
10
+ except:
11
+ rq = None
12
+ session = None
13
+
14
+ pass
15
+ class Request(Base):
16
+ def init(self, http_type, use_session, log, upd):
17
+ self.type = http_type
18
+ self.use_session = use_session
19
+ self.log = log
20
+ self.upd = upd
21
+ self.fc = None
22
+ self.fcs = None
23
+ self.key_data = None
24
+ self.build()
25
+ def build(self):
26
+ fcs = {}
27
+ global rq, session
28
+ if rq is None:
29
+ return
30
+ obj = rq
31
+ if self.use_session:
32
+ obj = session
33
+ fcs['get'] = [obj.get, "params"]
34
+ fcs['post'] = [obj.post, "data"]
35
+ fcs['json'] = [obj.post, "json"]
36
+ fcs['put'] = [obj.put, "json"]
37
+ fcs['delete'] = [obj.delete, 'json']
38
+ self.fcs = fcs
39
+ self.fc = self.fcs[self.type][0]
40
+ self.key_data = self.fcs[self.type][1]
41
+ def get_set(self, data, kd, maps, km):
42
+ v = xf.get(data, kd)
43
+ if v is not None:
44
+ maps[km] = v
45
+ def req(self, data):
46
+ url = xf.g(data, url=None)
47
+ maps = {}
48
+ self.get_set(data, "data", maps, self.key_data)
49
+ self.get_set(data, "cookies", maps, "cookies")
50
+ self.get_set(data, "headers", maps, "headers")
51
+ self.get_set(data, "proxies", maps, "proxies")
52
+ return self.fc(url, **maps)
53
+ def rsp(self, rp, data):
54
+ url = xf.g(data, url=None)
55
+ xf.s(data, status_code = rp.status_code)
56
+ xf.s(data, result_code = rp.status_code)
57
+ try:
58
+ xf.s(data, result_content=rp.content)
59
+ s = xf.decode(rp.content, "utf-8")
60
+ xf.s(data, result_text=s)
61
+ except Exception as exp:
62
+ self.log.warn(f"exp in deal response on '{url}': {exp}")
63
+ try:
64
+ obj = json.loads(s)
65
+ xf.s(data, result=obj)
66
+ except Exception as exp:
67
+ #self.log.warn(f"exp in deal response on '{url}': {exp}")
68
+ pass
69
+ try:
70
+ xf.s(data, result_cookies=dict(rp.cookies))
71
+ except Exception as exp:
72
+ self.log.warn(f"exp in deal response on '{url}': {exp}")
73
+ try:
74
+ xf.s(data, result_headers = dict(rp.headers))
75
+ except Exception as exp:
76
+ self.log.warn(f"exp in deal response on '{url}': {exp}")
77
+ return True
78
+ def call(self, data, fc=None):
79
+ if self.fc is None:
80
+ self.log.error("install requests to use this(pip install requests)")
81
+ return False
82
+ if self.upd is not None:
83
+ data = self.upd(data)
84
+ url = xf.g(data, url=None)
85
+ try:
86
+ rp = self.req(data)
87
+ except Exception as exp:
88
+ self.log.error("error in request '{url}' with method {self.type}: {exp}")
89
+ return False
90
+ self.rsp(rp, data)
91
+ if fc is None:
92
+ return True
93
+ return fc(data)
94
+
95
+ pass
96
+
97
+
98
+ @wrap.obj(id="request.post")
99
+ @wrap.obj_args("post", "env, request.session, false", "ref, log", "ref, cache.modify")
100
+ class Post(Request):
101
+ pass
102
+
103
+ pass
104
+
105
+ @wrap.obj(id="request.json")
106
+ @wrap.obj_args("json", "env, request.session, false", "ref, log", "ref, cache.modify")
107
+ class Json(Request):
108
+ pass
109
+
110
+ pass
111
+
112
+ @wrap.obj(id="request.get")
113
+ @wrap.obj_args("get", "env, request.session, false", "ref, log", "ref, cache.modify")
114
+ class Get(Request):
115
+ pass
116
+
117
+ pass
118
+
119
+ @wrap.obj(id="request.put")
120
+ @wrap.obj_args("put", "env, request.session, false", "ref, log", "ref, cache.modify")
121
+ class Put(Request):
122
+ pass
123
+
124
+ pass
125
+
126
+ @wrap.obj(id="request.delete")
127
+ @wrap.obj_args("delete", "env, request.session, false", "ref, log", "ref, cache.modify")
128
+ class Delete(Request):
129
+ pass
130
+
131
+ pass
@@ -2,6 +2,7 @@ from .. import xf
2
2
  from .. import ioc
3
3
  from ..base import Base
4
4
  from . import init
5
+ import os
5
6
  class Run(Base):
6
7
  def init(self, fps=None):
7
8
  mg = ioc.build()
@@ -10,6 +11,9 @@ class Run(Base):
10
11
  self.mg = mg
11
12
  def call(self, fp):
12
13
  maps = xf.loadf(fp)
14
+ config = self.mg.get("buildz.auto.config.load")
15
+ if not config(maps, fp):
16
+ return
13
17
  calls = xf.g(maps, calls = [])
14
18
  for deal in calls:
15
19
  fc = self.mg.get(deal)
@@ -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,16 @@
1
+ {
2
+ host: www.baidu.com,
3
+ test: {
4
+ url: tmpurl,
5
+ val: 1,
6
+ code: 1.99
7
+ },
8
+ result: {
9
+ code: 1.99
10
+ },
11
+ test2: {
12
+ headers: {
13
+ content_type: "text/html"
14
+ }
15
+ }
16
+ }
@@ -0,0 +1,10 @@
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
+ get: [request.get, verify, save]
9
+ }
10
+ }
@@ -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,15 @@
1
+ note: test2
2
+ url: "https://#{host}/"
3
+ type: get
4
+ headers: {
5
+ User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
6
+ }
7
+ data: {
8
+ }
9
+ verify: [
10
+ "status_code, 200"
11
+ "result_headers.Content-Type, text/html"
12
+ ]
13
+ save: {
14
+ test2.headers.content_type: result_headers.Content-Type
15
+ }
@@ -0,0 +1,27 @@
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
+ item2.js
27
+ ]
@@ -2,7 +2,7 @@
2
2
  from buildz.tools import *
3
3
  from buildz.ioc import wrap
4
4
  @wrap.obj(id="request")
5
- @wrap.obj_args("ref, log", "ref, cache_modify")
5
+ @wrap.obj_args("ref, log", "ref, cache.modify")
6
6
  class Req(Base):
7
7
  def init(self, log, upd):
8
8
  self.upd = upd
@@ -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,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}")
@@ -1,16 +1,47 @@
1
1
  from html.parser import HTMLParser
2
2
  from .. import xf
3
+ from ..base import Base
3
4
  import re
5
+ class SearchResult(Base):
6
+ def str(self):
7
+ return str(self.arr)
8
+ def init(self, arr):
9
+ self.arr = arr
10
+ self.size = len(arr)
11
+ def run(self, fc_name, *a, **b):
12
+ rst = []
13
+ for it in self.arr:
14
+ fc = getattr(it, fc_name)
15
+ rst+=fc(*a,**b).data()
16
+ return SearchResult(rst)
17
+ def searchs(self, *args, **maps):
18
+ return self.run("searchs", *args, **maps)
19
+ def finds(self, s):
20
+ return self.run("finds", s)
21
+ def tags(self, _tag):
22
+ return self.searchs(tag=_tag)
23
+ def call(self):
24
+ return self.data()
25
+ def data(self):
26
+ return self.arr
27
+
28
+ pass
4
29
  class HtmlTag:
30
+ def data(self):
31
+ return self.to_maps()
5
32
  def to_maps(self):
6
33
  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}
34
+ rst = {'tag': self.tag, 'attrs': self.attrs, 'texts': self.texts, 'text': self.text, 'nodes': nodes}
8
35
  return rst
9
36
  def __str__(self):
10
37
  return xf.dumps(self.to_maps())
11
38
  def __repr__(self):
12
39
  return self.__str__()
13
40
  def match(self, val, pt):
41
+ tag = self.tag
42
+ text = self.text
43
+ texts = self.texts
44
+ attrs = self.attrs
14
45
  if type(pt)==list:
15
46
  tp = pt[0]
16
47
  v = pt[1]
@@ -28,20 +59,24 @@ class HtmlTag:
28
59
  elif tp=="<=":
29
60
  return val<=v
30
61
  elif tp == "re":
31
- return (re.findall(v, val))>0
32
- elif tp == 'sh':
33
- #v.replace("${it}", val)
62
+ return len(re.findall(v, val))>0
63
+ elif tp == 'eval':
34
64
  return eval(v)
35
65
  else:
36
66
  raise Exception(f"not impl match type: '{tp}'")
37
- def check(self, maps):
67
+ def check(self, args, maps):
38
68
  #print(f"[TESTZ] check: {maps}, attrs: {self.attrs}")
39
- for k,v in maps.items():
69
+ arr = args+list(maps.items())
70
+ for k,v in arr:
40
71
  if k == 'tag':
41
72
  if not self.match(self.tag, v):
42
73
  return False
74
+ elif k == 'text':
75
+ if not self.match(self.text, v):
76
+ return False
43
77
  elif k == "$":
44
- return self.match(None, ["sh", v])
78
+ if not self.match(None, ["eval", v]):
79
+ return False
45
80
  else:
46
81
  if k not in self.attrs or not self.match(self.attrs[k], v):
47
82
  return False
@@ -54,22 +89,35 @@ class HtmlTag:
54
89
  self.nodes = []
55
90
  self.text = None
56
91
  self.texts = []
57
- def _search(self, rst, maps):
58
- if self.check(maps):
92
+ def _search(self, rst, args, maps):
93
+ if self.check(args, maps):
59
94
  rst.append(self)
60
95
  for n in self.nodes:
61
- n._search(rst, maps)
62
- def searchs(self, **maps):
96
+ n._search(rst, args, maps)
97
+ def searchs(self, *args, **maps):
98
+ tmp = []
99
+ for k in args:
100
+ if type(k)!=list:
101
+ k = xf.loads(k)
102
+ tmp.append(k)
63
103
  rst = []
64
- self._search(rst, maps)
65
- return rst
104
+ self._search(rst, tmp, maps)
105
+ return SearchResult(rst)
66
106
  def tags(self, _tag):
67
- return self.searchs(tag = _tag)
107
+ return SearchResult(self.searchs(tag = _tag))
68
108
  def finds(self, s):
69
109
  rst = []
70
- maps = xf.loads(s)
71
- self._search(rst, maps)
72
- return rst
110
+ args = []
111
+ maps = {}
112
+ dt = xf.loads(s)
113
+ if type(dt)==list:
114
+ args = dt
115
+ else:
116
+ maps = dt
117
+ if len(args)==2 and type(args[0])!=list:
118
+ args = [args]
119
+ self._search(rst, args, maps)
120
+ return SearchResult(rst)
73
121
  def add_node(self, node):
74
122
  self.nodes.append(node)
75
123
  def add_text(self, text):
@@ -126,8 +126,11 @@ def sets(maps, keys, val):
126
126
  if type(keys) != list:
127
127
  keys = [keys]
128
128
  for key in keys[:-1]:
129
- if key not in maps:
130
- maps[key] = {}
129
+ if type(maps)==dict:
130
+ if key not in maps:
131
+ maps[key] = {}
132
+ else:
133
+ key = int(key)
131
134
  maps = maps[key]
132
135
  maps[keys[-1]] = val
133
136
 
@@ -136,8 +139,13 @@ def gets(maps, keys, default = None):
136
139
  if type(keys) != list:
137
140
  keys = [keys]
138
141
  for key in keys:
139
- if key not in maps:
140
- return default
142
+ if type(maps)==dict:
143
+ if key not in maps:
144
+ return default
145
+ else:
146
+ key = int(key)
147
+ if key>=len(maps):
148
+ return default
141
149
  maps = maps[key]
142
150
  return maps
143
151
 
@@ -203,4 +211,21 @@ fill=deep_fill
203
211
  def maps(**kv):
204
212
  return kv
205
213
 
206
- pass
214
+ pass
215
+
216
+ def flush_maps(maps, fc_key = lambda x:x.split(".") if type(x)==str else [x], visit_list=False):
217
+ if type(maps)==list:
218
+ if not visit_list:
219
+ return maps
220
+ rst = [flush_maps(it, fc_key, visit_list) for it in maps]
221
+ return rst
222
+ if type(maps)!=dict:
223
+ return maps
224
+ rst = {}
225
+ for k,v in maps.items():
226
+ ks = fc_key(k)
227
+ v = flush_maps(v, fc_key, visit_list)
228
+ sets(rst, ks, v)
229
+ return rst
230
+
231
+ pass