buildz 0.6.35__tar.gz → 0.6.37__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 (224) hide show
  1. {buildz-0.6.35/buildz.egg-info → buildz-0.6.37}/PKG-INFO +3 -1
  2. {buildz-0.6.35 → buildz-0.6.37}/README.md +2 -0
  3. buildz-0.6.37/buildz/auto/__init__.py +7 -0
  4. buildz-0.6.37/buildz/cachez/__init__.py +8 -0
  5. buildz-0.6.37/buildz/cachez/cache.py +201 -0
  6. buildz-0.6.37/buildz/confz.py +0 -0
  7. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/basez.py +40 -25
  8. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/orm.py +56 -9
  9. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/sqlite3z.py +19 -0
  10. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc/base.py +4 -3
  11. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc/conf.py +8 -1
  12. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc/confs.py +10 -1
  13. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc/decorator.py +18 -8
  14. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc/single.py +2 -0
  15. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/branch.py +1 -1
  16. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/call.py +1 -1
  17. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/calls.py +1 -1
  18. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/ref_lists.js +12 -1
  19. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/refs_lists.js +12 -1
  20. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/deal.py +1 -1
  21. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/ioc.py +1 -1
  22. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/iocf.py +1 -1
  23. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/join.py +1 -1
  24. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/list.py +1 -1
  25. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/map.py +1 -1
  26. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/mcall.py +1 -1
  27. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/obj.py +7 -3
  28. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/ovar.py +1 -1
  29. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/ref.py +3 -1
  30. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/refs.py +3 -2
  31. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/val.py +1 -1
  32. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/var.py +1 -1
  33. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/xfile.py +1 -1
  34. {buildz-0.6.35 → buildz-0.6.37}/buildz/logz.py +19 -2
  35. buildz-0.6.37/buildz/pathz.py +33 -0
  36. buildz-0.6.37/buildz/tools.py +5 -0
  37. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/mapz.py +2 -0
  38. {buildz-0.6.35 → buildz-0.6.37/buildz.egg-info}/PKG-INFO +3 -1
  39. {buildz-0.6.35 → buildz-0.6.37}/buildz.egg-info/SOURCES.txt +4 -0
  40. {buildz-0.6.35 → buildz-0.6.37}/setup.py +1 -1
  41. buildz-0.6.35/buildz/auto/__init__.py +0 -1
  42. buildz-0.6.35/buildz/tools.py +0 -4
  43. {buildz-0.6.35 → buildz-0.6.37}/LICENSE +0 -0
  44. {buildz-0.6.35 → buildz-0.6.37}/MANIFEST.in +0 -0
  45. {buildz-0.6.35 → buildz-0.6.37}/buildz/__init__.py +0 -0
  46. {buildz-0.6.35 → buildz-0.6.37}/buildz/__main__.py +0 -0
  47. {buildz-0.6.35 → buildz-0.6.37}/buildz/argx.py +0 -0
  48. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/cache.py +0 -0
  49. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/config.py +0 -0
  50. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/dbs.py +0 -0
  51. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/deal.py +0 -0
  52. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/deal_list.py +0 -0
  53. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/deal_type.py +0 -0
  54. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/defs.py +0 -0
  55. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/factory.py +0 -0
  56. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/init.py +0 -0
  57. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/log.py +0 -0
  58. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/request.py +0 -0
  59. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/run.py +0 -0
  60. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/save.py +0 -0
  61. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/test/res/cache/cache.js +0 -0
  62. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/test/res/config/base.js +0 -0
  63. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/test/res/config/config.js +0 -0
  64. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/test/res/data/fp.js +0 -0
  65. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/test/res/data/item1.js +0 -0
  66. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/test/res/data/item2.js +0 -0
  67. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/test/res/data/test.js +0 -0
  68. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/test/test.py +0 -0
  69. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/test/xtest.py +0 -0
  70. {buildz-0.6.35 → buildz-0.6.37}/buildz/auto/verify.py +0 -0
  71. {buildz-0.6.35 → buildz-0.6.37}/buildz/base.py +0 -0
  72. {buildz-0.6.35 → buildz-0.6.37}/buildz/cmd.py +0 -0
  73. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/__init__.py +0 -0
  74. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/__main__.py +0 -0
  75. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/__init__.py +0 -0
  76. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/clickhousez.py +0 -0
  77. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/lib/readme +0 -0
  78. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/mysqlz.py +0 -0
  79. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/oraclez.py +0 -0
  80. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/postgresqlz.py +0 -0
  81. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/dv/structz.py +0 -0
  82. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/install.txt +0 -0
  83. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/run.conf +0 -0
  84. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/runz.py +0 -0
  85. {buildz-0.6.35 → buildz-0.6.37}/buildz/db/tls.py +0 -0
  86. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/ioc/deal.py +0 -0
  87. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/ioc/help.py +0 -0
  88. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/myers/deal.py +0 -0
  89. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/myers/help.py +0 -0
  90. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/conf/ioc.js +0 -0
  91. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/conf/main.js +0 -0
  92. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/conf/myers.js +0 -0
  93. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/conf/search.js +0 -0
  94. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/conf/xf.js +0 -0
  95. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/help/default.js +0 -0
  96. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/help/ioc.js +0 -0
  97. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/help/myers.js +0 -0
  98. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/help/search.js +0 -0
  99. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/help/xf.js +0 -0
  100. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/res/test.js +0 -0
  101. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/search/deal.py +0 -0
  102. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/search/help.py +0 -0
  103. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/test.py +0 -0
  104. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/xf/deal.py +0 -0
  105. {buildz-0.6.35 → buildz-0.6.37}/buildz/demo/xf/help.py +0 -0
  106. {buildz-0.6.35 → buildz-0.6.37}/buildz/fz/__init__.py +0 -0
  107. {buildz-0.6.35 → buildz-0.6.37}/buildz/fz/dirz.py +0 -0
  108. {buildz-0.6.35 → buildz-0.6.37}/buildz/fz/fhs.py +0 -0
  109. {buildz-0.6.35 → buildz-0.6.37}/buildz/fz/fio.py +0 -0
  110. {buildz-0.6.35 → buildz-0.6.37}/buildz/fz/lsf.py +0 -0
  111. {buildz-0.6.35 → buildz-0.6.37}/buildz/html/__init__.py +0 -0
  112. {buildz-0.6.35 → buildz-0.6.37}/buildz/html/test/demo.html +0 -0
  113. {buildz-0.6.35 → buildz-0.6.37}/buildz/html/test/test.py +0 -0
  114. {buildz-0.6.35 → buildz-0.6.37}/buildz/html/xml.py +0 -0
  115. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/__init__.py +0 -0
  116. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/base.py +0 -0
  117. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/init.py +0 -0
  118. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/base.py +0 -0
  119. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
  120. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  121. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  122. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  123. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  124. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
  125. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
  126. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  127. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  128. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
  129. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  130. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  131. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  132. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  133. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  134. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  135. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  136. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  137. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  138. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  139. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  140. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
  141. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
  142. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/demo.py +0 -0
  143. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/env.py +0 -0
  144. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/ioc_deal/init.py +0 -0
  145. {buildz-0.6.35 → buildz-0.6.37}/buildz/ioc/wrap.py +0 -0
  146. {buildz-0.6.35 → buildz-0.6.37}/buildz/pyz.py +0 -0
  147. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/__init__.py +0 -0
  148. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/myers_diff.py +0 -0
  149. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/test_xfind.py +0 -0
  150. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/time/__init__.py +0 -0
  151. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/time/timez.py +0 -0
  152. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/tio/__init__.py +0 -0
  153. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/tio/base.py +0 -0
  154. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/tio/getch.py +0 -0
  155. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/tio/lx.py +0 -0
  156. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/tio/test.py +0 -0
  157. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/tio/win.py +0 -0
  158. {buildz-0.6.35 → buildz-0.6.37}/buildz/tz/xfind.py +0 -0
  159. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/__init__.py +0 -0
  160. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/__main__.py +0 -0
  161. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/code.py +0 -0
  162. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/code_modify.py +0 -0
  163. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/copy_old.py +0 -0
  164. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/file.py +0 -0
  165. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/base.py +0 -0
  166. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/buffer.py +0 -0
  167. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/listz.py +0 -0
  168. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/lr.py +0 -0
  169. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/lrval.py +0 -0
  170. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/mapz.py +0 -0
  171. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/nextz.py +0 -0
  172. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/reval.py +0 -0
  173. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/setz.py +0 -0
  174. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/spc.py +0 -0
  175. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/spt.py +0 -0
  176. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/deal/strz.py +0 -0
  177. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/exp.py +0 -0
  178. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/item.py +0 -0
  179. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/mg.py +0 -0
  180. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loader/pos.py +0 -0
  181. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/base.py +0 -0
  182. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/buffer.py +0 -0
  183. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/listmapz.py +0 -0
  184. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/listz.py +0 -0
  185. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/lr.py +0 -0
  186. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/lrval.py +0 -0
  187. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/nextz.py +0 -0
  188. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/reval.py +0 -0
  189. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/setz.py +0 -0
  190. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/spc.py +0 -0
  191. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/spt.py +0 -0
  192. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/strz.py +0 -0
  193. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/strz_new.py +0 -0
  194. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/deal/strz_old.py +0 -0
  195. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/exp.py +0 -0
  196. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/item.py +0 -0
  197. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/mg.py +0 -0
  198. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/pos.py +0 -0
  199. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/test.py +0 -0
  200. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/loaderz/test1.py +0 -0
  201. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/mapz.py +0 -0
  202. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/read.py +0 -0
  203. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/readz.py +0 -0
  204. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/stack.py +0 -0
  205. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/write.py +0 -0
  206. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/base.py +0 -0
  207. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/conf.py +0 -0
  208. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/deal/jsonval.py +0 -0
  209. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/deal/listmapz.py +0 -0
  210. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/deal/listz.py +0 -0
  211. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/deal/mapz.py +0 -0
  212. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/deal/reval.py +0 -0
  213. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/deal/strz.py +0 -0
  214. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/itemz.py +0 -0
  215. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/writer/mg.py +0 -0
  216. {buildz-0.6.35 → buildz-0.6.37}/buildz/xf/xargs.py +0 -0
  217. {buildz-0.6.35 → buildz-0.6.37}/buildz/xz/__init__.py +0 -0
  218. {buildz-0.6.35 → buildz-0.6.37}/buildz/xz/conf.js +0 -0
  219. {buildz-0.6.35 → buildz-0.6.37}/buildz/xz/data.js +0 -0
  220. {buildz-0.6.35 → buildz-0.6.37}/buildz/xz/test.py +0 -0
  221. {buildz-0.6.35 → buildz-0.6.37}/buildz/xz/trs.py +0 -0
  222. {buildz-0.6.35 → buildz-0.6.37}/buildz.egg-info/dependency_links.txt +0 -0
  223. {buildz-0.6.35 → buildz-0.6.37}/buildz.egg-info/top_level.txt +0 -0
  224. {buildz-0.6.35 → buildz-0.6.37}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.35
3
+ Version: 0.6.37
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
@@ -34,6 +34,8 @@ License-File: LICENSE
34
34
  运行python -m buildz查看帮助
35
35
 
36
36
  持续更新中。。。
37
+ 2024/12/22:
38
+ 增加pathz模块,方便处理路径,修改ioc和db
37
39
  2024/12/18:
38
40
  增加数据映射xz,数据库db增加类似orm功能以及表和索引结构查询功能(目前只写了mysql,oracle,sqlite3的查询),配置文件读写xf的输出增加对ListMap的支持(dumpx, dumpxf)
39
41
  2024/11/11:
@@ -21,6 +21,8 @@
21
21
  运行python -m buildz查看帮助
22
22
 
23
23
  持续更新中。。。
24
+ 2024/12/22:
25
+ 增加pathz模块,方便处理路径,修改ioc和db
24
26
  2024/12/18:
25
27
  增加数据映射xz,数据库db增加类似orm功能以及表和索引结构查询功能(目前只写了mysql,oracle,sqlite3的查询),配置文件读写xf的输出增加对ListMap的支持(dumpx, dumpxf)
26
28
  2024/11/11:
@@ -0,0 +1,7 @@
1
+ from .run import Run
2
+
3
+ def imports():
4
+ from . import deal, deal_type, factory, cache, log, config, dbs
5
+ from . import verify, save, request, defs, deal_list
6
+
7
+ pass
@@ -0,0 +1,8 @@
1
+ #
2
+
3
+ from .cache import *
4
+
5
+ def imports():
6
+ pass
7
+
8
+ pass
@@ -0,0 +1,201 @@
1
+ #
2
+
3
+ from .. import xf, fz
4
+ from .. import ioc
5
+ from ..base import Base
6
+ from ..ioc import wrap
7
+ from .. import logz
8
+ ns = wrap.ns("buildz.cache")
9
+ import os,re
10
+
11
+
12
+ @ns.obj(id="cache.save")
13
+ @ns.obj_args("ref, cache.file", "ref, log")
14
+ class Save(Base):
15
+ def init(self, cache, log, fkey = "cache.save", fp = None):
16
+ self.fkey = fkey
17
+ self.cache = cache
18
+ self.log = log.tag("Cache.Save")
19
+ self.fp = fp
20
+ def save(self):
21
+ fp = self.fp
22
+ if fp is None:
23
+ self.log.warn(f"cache not save cause 'cache.save' is None")
24
+ return False
25
+ fz.makefdir(fp)
26
+ rst = self.cache.data
27
+ rs = xf.dumps(rst, format=True).encode("utf-8")
28
+ fz.write(rs, fp, 'wb')
29
+ return True
30
+ def call(self, maps, fp):
31
+ fp = xf.get(maps, self.fkey, None)
32
+ fp = self.cache.rfp(fp)
33
+ self.fp = fp
34
+ return self.save()
35
+
36
+ pass
37
+ class CacheKey(Base):
38
+ def init(self, cache, key):
39
+ self.cache = cache
40
+ self.key = key
41
+ def has(self):
42
+ return self.cache.has(self.key)
43
+ def set(self, val):
44
+ return self.cache.set(self.key, val)
45
+ def get(self):
46
+ return self.cache.get(self.key)
47
+ def call(self, *args):
48
+ if len(args)==0:
49
+ return self.get()
50
+ elif len(args)==1:
51
+ return self.set(args[0])
52
+ else:
53
+ assert 0
54
+ @ns.obj(id="cache.file")
55
+ @ns.obj_args("ref, fps, cache.js","ref, log, null", "ref, rfp.current.first, false", "ref, split, .", "ref, key.currents, buildz.cache.path.currents", "ref, key.basedir, buildz.cache.path.basedir", "ref, save.index, -1", "ref, save.auto, false")
56
+ class Cache(Base):
57
+ def clean(self):
58
+ self.data = {}
59
+ def bind(self, key):
60
+ return CacheKey(self, key)
61
+ def has(self, key):
62
+ ks = key.split(self.spt)
63
+ return xf.has(self.data, ks)
64
+ def get(self, key):
65
+ ks = key.split(self.spt)
66
+ return xf.gets(self.data, ks)
67
+ def set(self, key, val):
68
+ xf.sets(self.data, key.split(self.spt), val)
69
+ if self.auto_save:
70
+ self.save()
71
+ def remove(self, key):
72
+ xf.removes(self.data, key.split(self.spt))
73
+ def init(self, fps="cache.js", log=None, current_first=False, spt = ".", key_currents = "buildz.cache.path.currents", key_basedir = "buildz.cache.path.basedir", save_index = -1, auto_save = False):
74
+ if type(fps) not in (tuple, list):
75
+ fps = [fps]
76
+ self.fps = fps
77
+ self.spt = spt
78
+ self.current_first = current_first
79
+ self.log = logz.make(log)(self)
80
+ self.key_currents = key_currents
81
+ self.key_basedir = key_basedir
82
+ self.save_index = save_index
83
+ self.data = {}
84
+ self.auto_save = auto_save
85
+ def set_currents(self, dp):
86
+ if type(dp)!=list:
87
+ dp = [dp]
88
+ self.set(self.key_currents, dp)
89
+ def add_currents(self, dp):
90
+ dps = self.get_currents()
91
+ if dps is None:
92
+ dps = []
93
+ if dp in dps:
94
+ return
95
+ dps.append(dp)
96
+ self.set_currents(dps)
97
+ def get_currents(self):
98
+ dps = self.get(self.key_currents)
99
+ if dps is None:
100
+ dps = []
101
+ if type(dps)!=list:
102
+ dps = [dps]
103
+ return dps
104
+ def set_basedir(self, dp):
105
+ self.set(self.key_basedir, dp)
106
+ def get_basedir(self):
107
+ return self.get(self.key_basedir)
108
+ def rfp(self, fp):
109
+ if fz.is_abs(fp):
110
+ return fp
111
+ dps = [None,"."]
112
+ cfps = self.get_currents()
113
+ if cfps is not None:
114
+ if self.current_first:
115
+ dps = cfps+dps
116
+ else:
117
+ dps = dps+cfps
118
+ basedir = self.get_basedir()
119
+ if basedir is not None:
120
+ dps = [basedir]+dps
121
+ for dp in dps:
122
+ _fp = fp
123
+ if dp is not None:
124
+ _fp = os.path.join(dp, fp)
125
+ if os.path.isfile(_fp):
126
+ return _fp
127
+ if basedir is not None:
128
+ fp = os.path.join(basedir, fp)
129
+ return fp
130
+ def save(self, fp = None):
131
+ if fp is None:
132
+ fp = self.fps[self.save_index]
133
+ fp = self.rfp(fp)
134
+ fz.makefdir(fp)
135
+ rst = self.data
136
+ rs = xf.dumps(rst, format=True).encode("utf-8")
137
+ fz.write(rs, fp, 'wb')
138
+ def load(self, fps = None):
139
+ if fps is None:
140
+ fps = self.fps
141
+ data = {}
142
+ for fp in fps:
143
+ fp = self.rfp(fp)
144
+ if os.path.isfile(fp):
145
+ self.log.info(f"load cache from {fp}")
146
+ xdata = xf.flush_maps(xf.loadf(fp),visit_list=True)
147
+ xf.fill(xdata, data, replace=1)
148
+ xf.fill(data, self.data, replace=0)
149
+
150
+ pass
151
+
152
+ @ns.obj(id="cache.mem")
153
+ @ns.obj_args("ref, log, null")
154
+ class Mem(Cache):
155
+ def init(self, log=None):
156
+ super().init(None, log)
157
+
158
+ pass
159
+ @ns.obj(id="cache")
160
+ @ns.obj_args("ref, cache.file", "ref, cache.mem")
161
+ class Caches(Base):
162
+ def init(self, cache, mem):
163
+ self.cache = cache
164
+ self.mem = mem
165
+ self.caches = [cache, mem]
166
+ self.set = cache.set
167
+ self.remove = cache.remove
168
+ self.call=cache.call
169
+ self.rfp = cache.rfp
170
+ self.get_currents = cache.get_currents
171
+ self.add_currents = cache.add_currents
172
+ self.set_currents = cache.set_currents
173
+ self.set_basedir = cache.set_basedir
174
+ self.get_basedir = cache.get_basedir
175
+ self.has_file = cache.has
176
+ self.has_mem = mem.has
177
+ def get_file(self, key):
178
+ return self.cache.get(key)
179
+ def get_mem(self, key):
180
+ return self.mem.get(key)
181
+ def set_file(self, key, val):
182
+ self.cache.set(key,val)
183
+ def set_mem(self, key, val):
184
+ self.mem.set(key, val)
185
+ def remove_file(self, key):
186
+ self.cache.remove(key)
187
+ def remove_mem(self, key):
188
+ self.mem.remove(key)
189
+ def get(self, key):
190
+ for cache in self.caches:
191
+ v = cache.get(key)
192
+ if v is not None:
193
+ return v
194
+ return None
195
+ def has(self, key):
196
+ for cache in self.caches:
197
+ if cache.has(key):
198
+ return True
199
+ return False
200
+
201
+ pass
File without changes
@@ -117,39 +117,54 @@ class SimpleDv(ItDv):
117
117
  if commit:
118
118
  self.execute("commit;")
119
119
  def execute(self, sql, vals=(), commit=False):
120
+ #print(f"[TESTZ] sql: {sql}")
120
121
  tmp = self.cursor.execute(sql, vals)
121
122
  if commit:
122
123
  self.cursor.execute("commit;")
123
124
  return tmp
124
- def insert_or_update(self, maps, table, keys = None):
125
+ def iou_sql(self, table, ks, vs, sets):
126
+ sql = f"insert into {table}({ks}) values({vs}) on duplicate key update {sets}"
127
+ return sql
128
+ def insert_or_update(self, maps, table, keys = None, update_keys = None):
129
+ if type(update_keys)==str:
130
+ update_keys = [update_keys]
125
131
  if type(maps)!=dict:
126
132
  maps = maps.__dict__
127
133
  if keys is None:
128
134
  keys = []
129
135
  if type(keys) not in (list, tuple):
130
136
  keys = [keys]
131
- update = False
132
- conds = ""
133
- if len(keys)>0:
134
- need_query = True
135
- conds = []
136
- for k in keys:
137
- if k not in maps:
138
- need_query = False
139
- break
140
- v = maps[k]
141
- if type(v)==str:
142
- v = f"'{v}'"
143
- if v is not None:
144
- cond = f"{k} = {v}"
145
- else:
146
- cond = f"{k} is null"
147
- conds.append(cond)
148
- if need_query:
149
- conds = " and ".join(conds)
150
- sql_search = f"select count(*) from {table} where {conds}"
151
- rst = self.query(sql_search, as_map = False)[1][0]
152
- update = rst>0
137
+ # update = False
138
+ # conds = ""
139
+ # if len(keys)>0:
140
+ # need_query = True
141
+ # conds = []
142
+ # for k in keys:
143
+ # if k not in maps:
144
+ # need_query = False
145
+ # break
146
+ # v = maps[k]
147
+ # if type(v)==str:
148
+ # v = f"'{v}'"
149
+ # if v is not None:
150
+ # cond = f"{k} = {v}"
151
+ # else:
152
+ # cond = f"{k} is null"
153
+ # conds.append(cond)
154
+ # if need_query:
155
+ # conds = " and ".join(conds)
156
+ # sql_search = f"select count(*) from {table} where {conds}"
157
+ # rst = self.query(sql_search, as_map = False)[1][0]
158
+ # update = rst>0
159
+ kvs = [[k,tls.py2sql(v)] for k,v in maps.items()]
160
+ #print(f"[TESTZ] save kvs: {kvs}, update_keys: {update_keys}")
161
+ sets = [f"{k}={v}" for k,v in kvs if update_keys is None or k in update_keys]
162
+ sets = ",".join(sets)
163
+ ks = ",".join([kv[0] for kv in kvs])
164
+ vs = ",".join([str(kv[1]) for kv in kvs])
165
+ sql = self.iou_sql(table, ks, vs, sets)
166
+ #sql = f"insert into {table}({ks}) values({vs}) on duplicate key update {sets}"
167
+ return self.execute(sql)
153
168
  if update:
154
169
  keys = set(keys)
155
170
  kvs = [[k,tls.py2sql(v)] for k,v in maps.items() if k not in keys]
@@ -157,10 +172,10 @@ class SimpleDv(ItDv):
157
172
  sets = ",".join(sets)
158
173
  sql = f"update {table} set {sets} where {conds}"
159
174
  else:
160
- kvs = [[k, tls.py2sql(v)] for k,v in maps.items()]
175
+ kvs = [[k,tls.py2sql(v)] for k,v in maps.items()]
161
176
  ks = ",".join([kv[0] for kv in kvs])
162
177
  vs = ",".join([str(kv[1]) for kv in kvs])
163
- sql = f"insert into {table}({ks}) values({vs});"
178
+ sql = f"insert into {table}({ks}) values({vs})"
164
179
  return self.execute(sql)
165
180
 
166
181
  pass
@@ -20,8 +20,10 @@ def deal_item(item, conf):
20
20
  def deal_key(it, conf):
21
21
  data_keys = xf.g(conf, data_keys=[])
22
22
  tmp = {}
23
+ #print(f"[TESTZ] conf: {conf}, it: {it}")
23
24
  for i in range(min(len(it), len(data_keys))):
24
25
  tmp[data_keys[i]] = it[i]
26
+ #print(f"[TESTZ] tmp: {tmp}")
25
27
  sql_key = tmp['sql_key']
26
28
  sql_def = tmp['sql_def']
27
29
  py_key = xf.g(tmp, py_key=None)
@@ -31,11 +33,12 @@ def deal_key(it, conf):
31
33
  xf.g(conf, vars=[]).append(sql_key+" "+sql_def)
32
34
  def makes(datas, data_keys = "sql_key,sql_def,py_key".split(",")):
33
35
  if type(datas)==dict:
34
- rst = [make(v, k) for k,v in datas.items()]
36
+ rst = [make(v, k, py_name = k) for k,v in datas.items()]
35
37
  else:
36
38
  rst = [make(it) for it in datas]
37
39
  return rst
38
- def make(data, table=None, data_keys = "sql_key,sql_def,py_key".split(",")):
40
+ def make(data, table=None, data_keys = "sql_key,sql_def,py_key".split(","), py_name=None):
41
+ #print(f"[TESTZ] MARK: {data}")
39
42
  """
40
43
  从配置中生成建表语句,删表语句和orm对象
41
44
  输入:
@@ -75,13 +78,16 @@ def make(data, table=None, data_keys = "sql_key,sql_def,py_key".split(",")):
75
78
  elif type(data) == dict:
76
79
  data = dict2list(data)
77
80
  conf = {}
78
- xf.s(conf, sql_before = [], sql_after = [], sql_delete_before=[], sql_delete_after=[],auto_translate=True,table=table,keys=[],py2sqls={},query_keys=None, data_keys = data_keys, vars=[])
81
+ xf.s(conf, sql_before = [], sql_after = [], sql_delete_before=[], sql_delete_after=[],auto_translate=True,table=table,keys=[],py2sqls={},query_keys=None, data_keys = data_keys, vars=[], py_name = py_name)
79
82
  for it in data:
80
83
  if len(it)==1 and type(it[0]) in (list, tuple):
81
84
  deal_item(it[0], conf)
82
85
  else:
83
86
  deal_key(it, conf)
84
87
  table = xf.g(conf, table=table)
88
+ py_name = xf.g(conf, py_name = py_name)
89
+ if py_name is None:
90
+ py_name = table
85
91
  vars = xf.g(conf, vars = [])
86
92
  vars = ",".join(vars)
87
93
  assert table is not None
@@ -93,12 +99,17 @@ def make(data, table=None, data_keys = "sql_key,sql_def,py_key".split(",")):
93
99
  sqls_del = sqls[2]+[sql_del]+sqls[3]
94
100
  sqls = [sqls_crt, sqls_del]
95
101
  sqls = [(";\n".join(k)+";").replace(";;",";") for k in sqls]
96
- obj = TableObject(*xf.g(conf, keys=[], table=table, py2sqls = None, query_keys=None,auto_translate=True), sql_create = sqls[0], sql_delete = sqls[1])
102
+ obj = TableObject(*xf.g(conf, keys=[], table=table, py2sqls = None, query_keys=None,auto_translate=True), sql_create = sqls[0], sql_delete = sqls[1], py_name = py_name)
97
103
  return sqls, obj
98
104
 
99
105
  pass
100
106
 
101
107
  class TableObject(Base):
108
+ def clone(self, table_name, py_name = None):
109
+ sql_create = self.sql_create.replace("<table>", table_name)
110
+ sql_delete = self.sql_delete.replace("<table>", table_name)
111
+ obj = TableObject(self.keys, table_name, self.src_py2sqls, self.query_keys, self.auto_translate, self.dv, sql_create, sql_delete, py_name)
112
+ return obj
102
113
  """
103
114
  字段映射
104
115
  keys: 表字段
@@ -108,10 +119,14 @@ class TableObject(Base):
108
119
  auto_translate:
109
120
  对于没有在py2sqls自定义映射的表字段,是否自动转换(py|autoTran<=>auto_tran|sql)
110
121
  """
111
- def init(self, keys, table=None, py2sqls=None, query_keys=None, auto_translate=True, dv = None, sql_create=None, sql_delete=None):
122
+ def init(self, keys, table=None, py2sqls=None, query_keys=None, auto_translate=True, dv = None, sql_create=None, sql_delete=None, py_name = None):
123
+ self.src_py2sqls = py2sqls
112
124
  if table is None:
113
125
  table = tls.lower(self.__class__.__name__)
114
126
  self.table = table
127
+ if py_name is None:
128
+ py_name = table
129
+ self.py_name = py_name
115
130
  if py2sqls is None:
116
131
  py2sqls = {}
117
132
  if type(py2sqls) in (list, tuple):
@@ -139,10 +154,17 @@ class TableObject(Base):
139
154
  self.sql_delete = sql_delete
140
155
  def create(self, dv=None):
141
156
  assert self.sql_create is not None
157
+ if self.sql_create.find("<table>")>=0:
158
+ print(f"[WARN] not create template table by {self.sql_create}")
159
+ return
160
+ #print(f"[TESTZ] sql_create: {self.sql_create}")
142
161
  dv = self.rdv(dv)
143
162
  dv.executes(self.sql_create)
144
163
  def delete(self, dv=None):
145
164
  assert self.sql_delete is not None
165
+ if self.sql_delete.find("<table>")>=0:
166
+ print(f"[WARN] not delete template table by {self.sql_delete}")
167
+ return
146
168
  self.rdv(dv).execute(self.sql_delete)
147
169
  def bind(self, dv):
148
170
  self.dv = dv
@@ -153,7 +175,10 @@ class TableObject(Base):
153
175
  if hasattr(obj, k):
154
176
  tmp[k] = getattr(obj, k)
155
177
  obj = tmp
156
- obj = {self.py2sqls[k]:v for k,v in obj.items()}
178
+ obj = {self.py2sqls[k]:v for k,v in obj.items() if k in self.py2sqls}
179
+ return obj
180
+ def toSqlKeys(self, keys):
181
+ obj = [k for k in keys if k in self.py2sqls]
157
182
  return obj
158
183
  def toPy(self, obj):
159
184
  if type(obj)!=dict:
@@ -178,17 +203,39 @@ class TableObject(Base):
178
203
  def queryAll(self, dv=None, sql2py=True):
179
204
  sql = f"select * from {self.table};"
180
205
  return self.query(sql, dv, sql2py)
181
- def save(self, obj, dv=None, py2sql = True, commit=False, check = True):
206
+ def filterSql(self, obj):
207
+ if type(obj)!=dict:
208
+ tmp = {}
209
+ for k in self.sql2py:
210
+ if hasattr(obj, k):
211
+ tmp[k] = getattr(obj, k)
212
+ obj = tmp
213
+ obj = {k:v for k,v in obj.items() if k in self.keys}
214
+ return obj
215
+ def save(self, obj, dv=None, py2sql = True, commit=False, check = True, update_keys = None):
182
216
  dv = self.rdv(dv)
217
+ if type(update_keys)==str:
218
+ update_keys = [update_keys]
183
219
  if type(obj) not in [list, tuple]:
184
220
  obj = [obj]
185
221
  if py2sql:
186
222
  obj = [self.toSql(k) for k in obj]
223
+ if update_keys is not None:
224
+ update_keys = self.toSqlKeys(update_keys)#[self.toSqlKeys(k) for k in update_keys]
225
+ else:
226
+ obj = [self.filterSql(k) for k in obj]
187
227
  query_keys = self.query_keys
188
228
  if not check:
189
229
  query_keys = None
190
- _ = [dv.insert_or_update(k, self.table, query_keys) for k in obj]
230
+ _ = [dv.insert_or_update(k, self.table, query_keys, update_keys) for k in obj]
191
231
  if commit:
192
- dv.execute("commit;")
232
+ dv.execute("commit")
193
233
  return _
234
+ def clean(self, dv=None,commit = False):
235
+ dv = self.rdv(dv)
236
+ dv.execute(f"delete from {self.table}")
237
+ if commit:
238
+ dv.execute("commit")
239
+
240
+
194
241
 
@@ -4,6 +4,7 @@ import sys,os
4
4
  from .basez import SimpleDv, fetch
5
5
  from .structz import CMD
6
6
  from buildz import xf,fz
7
+ from buildz.db import tls
7
8
  class Db(SimpleDv):
8
9
  # func to impl:
9
10
  def to_list(self, rst):
@@ -89,6 +90,24 @@ class Db(SimpleDv):
89
90
  rst = rst[1:]
90
91
  rst = [{k:v for k,v in zip(keys, dt)} for dt in rst]
91
92
  return rst
93
+ def iou_sql(self, table, ks, vs, sets):
94
+ sql = f"insert into {table}({ks}) values({vs}) ON CONFLICT DO UPDATE SET {sets}"
95
+ return sql
96
+ def insert_or_updatexxx(self, maps, table, keys = None, update_keys = None):
97
+ if type(maps)!=dict:
98
+ maps = maps.__dict__
99
+ if keys is None:
100
+ keys = []
101
+ if type(keys) not in (list, tuple):
102
+ keys = [keys]
103
+ kvs = [[k,tls.py2sql(v)] for k,v in maps.items()]
104
+ sets = [f"{k}={v}" for k,v in kvs if update_keys is None or k in update_keys]
105
+ sets = ",".join(sets)
106
+ ks = ",".join([kv[0] for kv in kvs])
107
+ vs = ",".join([str(kv[1]) for kv in kvs])
108
+ sql = f"insert into {table}({ks}) values({vs}) ON CONFLICT DO UPDATE SET {sets}"
109
+ #print(f"[TESTZ] sql: {sql}")
110
+ return self.execute(sql)
92
111
 
93
112
  pass
94
113
  def build(argv, conf):
@@ -33,7 +33,7 @@ class EncapeData(Base):
33
33
  包含data id对应的配置,配置文件id,配置文件对象
34
34
  [object.test, call, ]
35
35
  """
36
- def __init__(self, data, conf=None, local = False, type = None, src = None, info = None, confs = None):
36
+ def __init__(self, data, conf=None, local = False, type = None, src = None, info = None, confs = None, force_new = False):
37
37
  """
38
38
  data: 配置数据
39
39
  conf: 配置数据对应的配置文件的管理器
@@ -42,6 +42,7 @@ class EncapeData(Base):
42
42
  src: 源对象,配置数据生成的对象调用conf获取对象,会有这个字段,目前只有object会放这个字段,其他要么透传要么不传
43
43
  info: 额外的调用信息,目前只有object会用到里面的id字段,作为单例额外输入
44
44
  """
45
+ self.force_new = force_new
45
46
  if typez(data)==dict:
46
47
  pid = xf.g1(data, parent=None, template=None, temp=None)
47
48
  if pid is not None:
@@ -77,8 +78,8 @@ class EncapeData(Base):
77
78
  self.info = info
78
79
  def deal(self, remove = False):
79
80
  if self.conf is None:
80
- return self.confs.get(self, src = self.src, info=self.info, remove = remove)
81
- return self.conf.get(self, src = self.src, info=self.info, remove = remove)
81
+ return self.confs.get(self, src = self.src, info=self.info, remove = remove, force_new = self.force_new)
82
+ return self.conf.get(self, src = self.src, info=self.info, remove = remove, force_new = self.force_new)
82
83
 
83
84
 
84
85
  pass
@@ -193,6 +193,10 @@ class Conf(Base):
193
193
  return self._default_type
194
194
  def get_var(self, key, i = -1):
195
195
  return self.confs.get_var(key, i)
196
+ def set_var(self, key, val):
197
+ return self.confs.set_var(key, val)
198
+ def unset_var(self, key):
199
+ return self.confs.unset_var(key)
196
200
  def var_keys(self):
197
201
  return self.confs.var_keys()
198
202
  def push_var(self, key, val):
@@ -201,7 +205,7 @@ class Conf(Base):
201
205
  return self.confs.has_var(key)
202
206
  def pop_var(self, key):
203
207
  self.confs.pop_var(key)
204
- def get_obj(self, id, src = None, info=None, remove = False):
208
+ def get_obj(self, id, src = None, info=None, remove = False, force_new = False):
205
209
  """
206
210
  根据data id获取data对象,处理逻辑:根据data id查配置,根据配置的type查deal,返回deal处理过的配置
207
211
  """
@@ -213,9 +217,12 @@ class Conf(Base):
213
217
  if conf is None:
214
218
  raise IdNotFoundError(f"can't find conf of {id}")
215
219
  return None
220
+ conf.force_new = force_new
216
221
  if conf.conf is None:
217
222
  if remove:
218
223
  return None
224
+ # 不太记得了,应该是错误代码
225
+ print(f"[TESTZ] error code: {conf.conf}")
219
226
  return conf.data()
220
227
  deal = self.get_deal(conf.type)
221
228
  if deal is None:
@@ -281,6 +281,14 @@ class Confs(Base):
281
281
  def pop_vars(self, vars):
282
282
  if vars is not None:
283
283
  [self.pop_var(key) for key in vars]
284
+ def set_var(self, key, val):
285
+ """
286
+ will remove push datas
287
+ """
288
+ self.vars[key] = [val]
289
+ def unset_var(self, key):
290
+ if key in self.vars:
291
+ del self.vars[key]
284
292
  def push_var(self, key, val):
285
293
  if key not in self.vars:
286
294
  self.vars[key] = []
@@ -405,7 +413,7 @@ class Confs(Base):
405
413
  return self.get_obj(*args, **maps)
406
414
  def remove(self, *a,**b):
407
415
  return self.get_obj(*a, **b, remove=True)
408
- def get_obj(self, id, sid = None, src = None, info = None, remove = False):
416
+ def get_obj(self, id, sid = None, src = None, info = None, remove = False, force_new = False):
409
417
  """
410
418
  根据data id获取data对象,处理逻辑:根据data id查配置,根据配置的type查deal,返回deal处理过的配置
411
419
  """
@@ -429,6 +437,7 @@ class Confs(Base):
429
437
  raise IOCError(f"confs: can't find deal of {id}, type = {conf.type}")
430
438
  return None
431
439
  #print(f"get_obj: {id}({sid}), conf: {conf}, deal: {deal}, type: {conf.type}")
440
+ conf.force_new = force_new
432
441
  if not remove:
433
442
  obj = deal(conf)
434
443
  else:
@@ -19,8 +19,9 @@ class Decorator(Base):
19
19
  return self.namespace
20
20
  def regist(self, key, fc):
21
21
  self.fcs[key] = fc
22
- def get_conf(self, src):
23
- ns = self.namespace
22
+ def get_conf(self, src, ns = None):
23
+ if ns is None:
24
+ ns = self.namespace
24
25
  if src in self._ns:
25
26
  ns = self._ns[src]
26
27
  if ns not in self.confs:
@@ -33,8 +34,8 @@ class Decorator(Base):
33
34
  if tag not in conf:
34
35
  conf[tag]=[]
35
36
  return conf[tag][index]
36
- def add(self, tag, data, src = None):
37
- conf = self.get_conf(src)
37
+ def add(self, tag, data, src = None, ns = None):
38
+ conf = self.get_conf(src, ns)
38
39
  if tag not in conf:
39
40
  conf[tag]=[]
40
41
  id = len(conf[tag])
@@ -45,12 +46,12 @@ class Decorator(Base):
45
46
  if tag not in conf:
46
47
  conf[tag]={}
47
48
  conf[tag][key]=val
48
- def add_datas(self, item, key):
49
+ def add_datas(self, item, key=None, ns = None):
49
50
  if type(item)==str:
50
51
  item = xf.loads(item)
51
- return self.add("datas", item, key)
52
- def get_datas(self, id):
53
- return self.get("datas", id)
52
+ return self.add("datas", item, key, ns)
53
+ def get_datas(self, id, key=None):
54
+ return self.get("datas", id, key)
54
55
  def set_datas(self, id, val):
55
56
  return self.set("datas", id, val)
56
57
  def set_envs(self, key, val):
@@ -91,6 +92,15 @@ class NameSpace(Base):
91
92
  obj = Fcs()
92
93
  for k,f in fcs.items():
93
94
  setattr(obj, k, self.fc(namespace, f))
95
+ def wfc(rfc, *a, **b):
96
+ with self.lock:
97
+ ns = self.decorator.curr_ns()
98
+ self.decorator.ns(namespace)
99
+ rst = rfc(*a,**b)
100
+ self.decorator.fcns(namespace, rst)
101
+ self.decorator.ns(ns)
102
+ return rst
103
+ setattr(obj, "wrap", wfc)
94
104
  return obj
95
105
 
96
106
  pass
@@ -21,6 +21,8 @@ class Single(Base):
21
21
  self.default = default
22
22
  self.singles = {}
23
23
  def get_ids(self, edata: EncapeData):
24
+ if edata.force_new:
25
+ return None
24
26
  sid = edata.sid
25
27
  data = edata.data
26
28
  info = edata.info