buildz 0.6.34__tar.gz → 0.6.36__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.34/buildz.egg-info → buildz-0.6.36}/PKG-INFO +3 -1
  2. {buildz-0.6.34 → buildz-0.6.36}/README.md +2 -0
  3. buildz-0.6.36/buildz/auto/__init__.py +7 -0
  4. buildz-0.6.36/buildz/cachez/__init__.py +8 -0
  5. buildz-0.6.36/buildz/cachez/cache.py +199 -0
  6. buildz-0.6.36/buildz/confz.py +0 -0
  7. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/basez.py +36 -29
  8. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/mysqlz.py +6 -4
  9. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/oraclez.py +11 -9
  10. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/orm.py +41 -10
  11. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/sqlite3z.py +23 -5
  12. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/structz.py +2 -4
  13. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/base.py +4 -3
  14. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/conf.py +4 -1
  15. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/confs.py +2 -1
  16. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/decorator.py +18 -8
  17. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/single.py +2 -0
  18. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/branch.py +1 -1
  19. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/call.py +1 -1
  20. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/calls.py +1 -1
  21. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/ref_lists.js +12 -1
  22. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/refs_lists.js +12 -1
  23. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/deal.py +1 -1
  24. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/ioc.py +1 -1
  25. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/iocf.py +1 -1
  26. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/join.py +1 -1
  27. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/list.py +1 -1
  28. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/map.py +1 -1
  29. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/mcall.py +1 -1
  30. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/obj.py +2 -2
  31. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/ovar.py +1 -1
  32. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/ref.py +3 -1
  33. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/refs.py +3 -2
  34. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/val.py +1 -1
  35. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/var.py +1 -1
  36. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/xfile.py +1 -1
  37. {buildz-0.6.34 → buildz-0.6.36}/buildz/logz.py +19 -2
  38. buildz-0.6.36/buildz/pathz.py +33 -0
  39. buildz-0.6.36/buildz/tools.py +5 -0
  40. {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/trs.py +1 -0
  41. {buildz-0.6.34 → buildz-0.6.36/buildz.egg-info}/PKG-INFO +3 -1
  42. {buildz-0.6.34 → buildz-0.6.36}/buildz.egg-info/SOURCES.txt +4 -0
  43. {buildz-0.6.34 → buildz-0.6.36}/setup.py +1 -1
  44. buildz-0.6.34/buildz/auto/__init__.py +0 -1
  45. buildz-0.6.34/buildz/tools.py +0 -4
  46. {buildz-0.6.34 → buildz-0.6.36}/LICENSE +0 -0
  47. {buildz-0.6.34 → buildz-0.6.36}/MANIFEST.in +0 -0
  48. {buildz-0.6.34 → buildz-0.6.36}/buildz/__init__.py +0 -0
  49. {buildz-0.6.34 → buildz-0.6.36}/buildz/__main__.py +0 -0
  50. {buildz-0.6.34 → buildz-0.6.36}/buildz/argx.py +0 -0
  51. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/cache.py +0 -0
  52. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/config.py +0 -0
  53. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/dbs.py +0 -0
  54. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/deal.py +0 -0
  55. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/deal_list.py +0 -0
  56. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/deal_type.py +0 -0
  57. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/defs.py +0 -0
  58. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/factory.py +0 -0
  59. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/init.py +0 -0
  60. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/log.py +0 -0
  61. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/request.py +0 -0
  62. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/run.py +0 -0
  63. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/save.py +0 -0
  64. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/cache/cache.js +0 -0
  65. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/config/base.js +0 -0
  66. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/config/config.js +0 -0
  67. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/data/fp.js +0 -0
  68. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/data/item1.js +0 -0
  69. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/data/item2.js +0 -0
  70. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/data/test.js +0 -0
  71. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/test.py +0 -0
  72. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/xtest.py +0 -0
  73. {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/verify.py +0 -0
  74. {buildz-0.6.34 → buildz-0.6.36}/buildz/base.py +0 -0
  75. {buildz-0.6.34 → buildz-0.6.36}/buildz/cmd.py +0 -0
  76. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/__init__.py +0 -0
  77. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/__main__.py +0 -0
  78. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/__init__.py +0 -0
  79. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/clickhousez.py +0 -0
  80. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/lib/readme +0 -0
  81. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/postgresqlz.py +0 -0
  82. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/install.txt +0 -0
  83. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/run.conf +0 -0
  84. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/runz.py +0 -0
  85. {buildz-0.6.34 → buildz-0.6.36}/buildz/db/tls.py +0 -0
  86. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/ioc/deal.py +0 -0
  87. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/ioc/help.py +0 -0
  88. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/myers/deal.py +0 -0
  89. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/myers/help.py +0 -0
  90. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/ioc.js +0 -0
  91. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/main.js +0 -0
  92. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/myers.js +0 -0
  93. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/search.js +0 -0
  94. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/xf.js +0 -0
  95. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/default.js +0 -0
  96. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/ioc.js +0 -0
  97. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/myers.js +0 -0
  98. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/search.js +0 -0
  99. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/xf.js +0 -0
  100. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/test.js +0 -0
  101. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/search/deal.py +0 -0
  102. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/search/help.py +0 -0
  103. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/test.py +0 -0
  104. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/xf/deal.py +0 -0
  105. {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/xf/help.py +0 -0
  106. {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/__init__.py +0 -0
  107. {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/dirz.py +0 -0
  108. {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/fhs.py +0 -0
  109. {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/fio.py +0 -0
  110. {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/lsf.py +0 -0
  111. {buildz-0.6.34 → buildz-0.6.36}/buildz/html/__init__.py +0 -0
  112. {buildz-0.6.34 → buildz-0.6.36}/buildz/html/test/demo.html +0 -0
  113. {buildz-0.6.34 → buildz-0.6.36}/buildz/html/test/test.py +0 -0
  114. {buildz-0.6.34 → buildz-0.6.36}/buildz/html/xml.py +0 -0
  115. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/__init__.py +0 -0
  116. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/base.py +0 -0
  117. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/init.py +0 -0
  118. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/base.py +0 -0
  119. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
  120. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  121. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  122. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  123. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  124. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
  125. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
  126. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  127. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  128. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
  129. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  130. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  131. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  132. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  133. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  134. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  135. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  136. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  137. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  138. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  139. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  140. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
  141. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
  142. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/demo.py +0 -0
  143. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/env.py +0 -0
  144. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/init.py +0 -0
  145. {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/wrap.py +0 -0
  146. {buildz-0.6.34 → buildz-0.6.36}/buildz/pyz.py +0 -0
  147. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/__init__.py +0 -0
  148. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/myers_diff.py +0 -0
  149. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/test_xfind.py +0 -0
  150. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/time/__init__.py +0 -0
  151. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/time/timez.py +0 -0
  152. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/__init__.py +0 -0
  153. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/base.py +0 -0
  154. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/getch.py +0 -0
  155. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/lx.py +0 -0
  156. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/test.py +0 -0
  157. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/win.py +0 -0
  158. {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/xfind.py +0 -0
  159. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/__init__.py +0 -0
  160. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/__main__.py +0 -0
  161. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/code.py +0 -0
  162. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/code_modify.py +0 -0
  163. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/copy_old.py +0 -0
  164. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/file.py +0 -0
  165. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/base.py +0 -0
  166. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/buffer.py +0 -0
  167. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/listz.py +0 -0
  168. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/lr.py +0 -0
  169. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/lrval.py +0 -0
  170. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/mapz.py +0 -0
  171. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/nextz.py +0 -0
  172. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/reval.py +0 -0
  173. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/setz.py +0 -0
  174. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/spc.py +0 -0
  175. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/spt.py +0 -0
  176. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/strz.py +0 -0
  177. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/exp.py +0 -0
  178. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/item.py +0 -0
  179. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/mg.py +0 -0
  180. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/pos.py +0 -0
  181. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/base.py +0 -0
  182. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/buffer.py +0 -0
  183. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/listmapz.py +0 -0
  184. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/listz.py +0 -0
  185. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/lr.py +0 -0
  186. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/lrval.py +0 -0
  187. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/mapz.py +0 -0
  188. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/nextz.py +0 -0
  189. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/reval.py +0 -0
  190. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/setz.py +0 -0
  191. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/spc.py +0 -0
  192. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/spt.py +0 -0
  193. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/strz.py +0 -0
  194. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/strz_new.py +0 -0
  195. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/strz_old.py +0 -0
  196. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/exp.py +0 -0
  197. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/item.py +0 -0
  198. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/mg.py +0 -0
  199. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/pos.py +0 -0
  200. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/test.py +0 -0
  201. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/test1.py +0 -0
  202. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/mapz.py +0 -0
  203. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/read.py +0 -0
  204. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/readz.py +0 -0
  205. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/stack.py +0 -0
  206. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/write.py +0 -0
  207. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/base.py +0 -0
  208. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/conf.py +0 -0
  209. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/jsonval.py +0 -0
  210. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/listmapz.py +0 -0
  211. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/listz.py +0 -0
  212. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/mapz.py +0 -0
  213. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/reval.py +0 -0
  214. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/strz.py +0 -0
  215. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/itemz.py +0 -0
  216. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/mg.py +0 -0
  217. {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/xargs.py +0 -0
  218. {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/__init__.py +0 -0
  219. {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/conf.js +0 -0
  220. {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/data.js +0 -0
  221. {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/test.py +0 -0
  222. {buildz-0.6.34 → buildz-0.6.36}/buildz.egg-info/dependency_links.txt +0 -0
  223. {buildz-0.6.34 → buildz-0.6.36}/buildz.egg-info/top_level.txt +0 -0
  224. {buildz-0.6.34 → buildz-0.6.36}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.34
3
+ Version: 0.6.36
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,199 @@
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, 0", "ref, save.auto, false")
56
+ class Cache(Base):
57
+ def bind(self, key):
58
+ return CacheKey(self, key)
59
+ def has(self, key):
60
+ ks = key.split(self.spt)
61
+ return xf.has(self.data, ks)
62
+ def get(self, key):
63
+ ks = key.split(self.spt)
64
+ return xf.gets(self.data, ks)
65
+ def set(self, key, val):
66
+ xf.sets(self.data, key.split(self.spt), val)
67
+ if self.auto_save:
68
+ self.save()
69
+ def remove(self, key):
70
+ xf.removes(self.data, key.split(self.spt))
71
+ 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 = 0, auto_save = False):
72
+ if type(fps) not in (tuple, list):
73
+ fps = [fps]
74
+ self.fps = fps
75
+ self.spt = spt
76
+ self.current_first = current_first
77
+ self.log = logz.make(log)(self)
78
+ self.key_currents = key_currents
79
+ self.key_basedir = key_basedir
80
+ self.save_index = save_index
81
+ self.data = {}
82
+ self.auto_save = auto_save
83
+ def set_currents(self, dp):
84
+ if type(dp)!=list:
85
+ dp = [dp]
86
+ self.set(self.key_currents, dp)
87
+ def add_currents(self, dp):
88
+ dps = self.get_currents()
89
+ if dps is None:
90
+ dps = []
91
+ if dp in dps:
92
+ return
93
+ dps.append(dp)
94
+ self.set_currents(dps)
95
+ def get_currents(self):
96
+ dps = self.get(self.key_currents)
97
+ if dps is None:
98
+ dps = []
99
+ if type(dps)!=list:
100
+ dps = [dps]
101
+ return dps
102
+ def set_basedir(self, dp):
103
+ self.set(self.key_basedir, dp)
104
+ def get_basedir(self):
105
+ return self.get(self.key_basedir)
106
+ def rfp(self, fp):
107
+ if fz.is_abs(fp):
108
+ return fp
109
+ dps = [None,"."]
110
+ cfps = self.get_currents()
111
+ if cfps is not None:
112
+ if self.current_first:
113
+ dps = cfps+dps
114
+ else:
115
+ dps = dps+cfps
116
+ basedir = self.get_basedir()
117
+ if basedir is not None:
118
+ dps = [basedir]+dps
119
+ for dp in dps:
120
+ _fp = fp
121
+ if dp is not None:
122
+ _fp = os.path.join(dp, fp)
123
+ if os.path.isfile(_fp):
124
+ return _fp
125
+ if basedir is not None:
126
+ fp = os.path.join(basedir, fp)
127
+ return fp
128
+ def save(self, fp = None):
129
+ if fp is None:
130
+ fp = self.fps[self.save_index]
131
+ fp = self.rfp(fp)
132
+ fz.makefdir(fp)
133
+ rst = self.data
134
+ rs = xf.dumps(rst, format=True).encode("utf-8")
135
+ fz.write(rs, fp, 'wb')
136
+ def load(self, fps = None):
137
+ if fps is None:
138
+ fps = self.fps
139
+ data = {}
140
+ for fp in fps:
141
+ fp = self.rfp(fp)
142
+ if os.path.isfile(fp):
143
+ self.log.info(f"load cache from {fp}")
144
+ xdata = xf.flush_maps(xf.loadf(fp),visit_list=True)
145
+ xf.fill(xdata, data, replace=1)
146
+ xf.fill(data, self.data, replace=0)
147
+
148
+ pass
149
+
150
+ @ns.obj(id="cache.mem")
151
+ @ns.obj_args("ref, log, null")
152
+ class Mem(Cache):
153
+ def init(self, log=None):
154
+ super().init(None, log)
155
+
156
+ pass
157
+ @ns.obj(id="cache")
158
+ @ns.obj_args("ref, cache.file", "ref, cache.mem")
159
+ class Caches(Base):
160
+ def init(self, cache, mem):
161
+ self.cache = cache
162
+ self.mem = mem
163
+ self.caches = [cache, mem]
164
+ self.set = cache.set
165
+ self.remove = cache.remove
166
+ self.call=cache.call
167
+ self.rfp = cache.rfp
168
+ self.get_currents = cache.get_currents
169
+ self.add_currents = cache.add_currents
170
+ self.set_currents = cache.set_currents
171
+ self.set_basedir = cache.set_basedir
172
+ self.get_basedir = cache.get_basedir
173
+ self.has_file = cache.has
174
+ self.has_mem = mem.has
175
+ def get_file(self, key):
176
+ return self.cache.get(key)
177
+ def get_mem(self, key):
178
+ return self.mem.get(key)
179
+ def set_file(self, key, val):
180
+ self.cache.set(key,val)
181
+ def set_mem(self, key, val):
182
+ self.mem.set(key, val)
183
+ def remove_file(self, key):
184
+ self.cache.remove(key)
185
+ def remove_mem(self, key):
186
+ self.mem.remove(key)
187
+ def get(self, key):
188
+ for cache in self.caches:
189
+ v = cache.get(key)
190
+ if v is not None:
191
+ return v
192
+ return None
193
+ def has(self, key):
194
+ for cache in self.caches:
195
+ if cache.has(key):
196
+ return True
197
+ return False
198
+
199
+ pass
File without changes
@@ -32,10 +32,10 @@ class SimpleDv(ItDv):
32
32
  """
33
33
  raise Exception("unimplement")
34
34
  return None
35
- def sql_index_keys(self, index):
35
+ def sql_index_keys(self, table, index):
36
36
  """
37
37
  require:
38
- index_name, column_name, index_offset, column_note
38
+ table_name, index_name, column_name, index_offset, column_note
39
39
  """
40
40
  raise Exception("unimplement")
41
41
  return None
@@ -51,17 +51,17 @@ class SimpleDv(ItDv):
51
51
  def columns(self, table, as_map=None):
52
52
  sql = self.sql_columns(table)
53
53
  return self.query(sql, as_map=as_map)
54
- def indexes(self, table=None, as_map=None):
55
- sql = self.sql_indexes(table)
54
+ def indexes(self, table=None, index=None, as_map=None):
55
+ sql = self.sql_indexes(table, index)
56
56
  return self.query(sql, as_map=as_map)
57
- def index_keys(self, index, as_map=None):
58
- sql = self.sql_index_keys(table)
57
+ def index_keys(self, table, index, as_map=None):
58
+ sql = self.sql_index_keys(table, index)
59
59
  return self.query(sql, as_map=as_map)
60
60
  # func already impl
61
61
  def check_query(self, s):
62
62
  arr = s.split(" ")
63
63
  k = arr[0].strip().lower()
64
- rst = k not in "delete,insert,update,create,drop,commit".split(",")
64
+ rst = k not in "delete,insert,update,create,drop,commit,alter".split(",")
65
65
  return rst
66
66
  def out_list(self, query_result, as_map=None):
67
67
  if as_map is None:
@@ -130,26 +130,33 @@ class SimpleDv(ItDv):
130
130
  keys = [keys]
131
131
  update = False
132
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
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
153
+ kvs = [[k,tls.py2sql(v)] for k,v in maps.items()]
154
+ sets = [f"{k}={v}" for k,v in kvs]
155
+ sets = ",".join(sets)
156
+ ks = ",".join([kv[0] for kv in kvs])
157
+ vs = ",".join([str(kv[1]) for kv in kvs])
158
+ sql = f"insert into {table}({ks}) values({vs}) on duplicate key update {sets}"
159
+ return self.execute(sql)
153
160
  if update:
154
161
  keys = set(keys)
155
162
  kvs = [[k,tls.py2sql(v)] for k,v in maps.items() if k not in keys]
@@ -157,10 +164,10 @@ class SimpleDv(ItDv):
157
164
  sets = ",".join(sets)
158
165
  sql = f"update {table} set {sets} where {conds}"
159
166
  else:
160
- kvs = [[k, tls.py2sql(v)] for k,v in maps.items()]
167
+ kvs = [[k,tls.py2sql(v)] for k,v in maps.items()]
161
168
  ks = ",".join([kv[0] for kv in kvs])
162
169
  vs = ",".join([str(kv[1]) for kv in kvs])
163
- sql = f"insert into {table}({ks}) values({vs});"
170
+ sql = f"insert into {table}({ks}) values({vs})"
164
171
  return self.execute(sql)
165
172
 
166
173
  pass
@@ -45,7 +45,7 @@ class Db(SimpleDv):
45
45
  table_name, column_name, column_type, column_default, nullable, column_offset, column_note
46
46
  """
47
47
  return f"select table_name, column_name, column_type, column_default, is_nullable as nullable, ordinal_position as column_offset, column_comment as column_note from information_schema.columns where table_schema='{self.db}' and table_name = '{table}' order by ordinal_position asc;"
48
- def sql_indexes(self, table=None):
48
+ def sql_indexes(self, table=None, index=None):
49
49
  """
50
50
  require:
51
51
  table_name, index_name, is_unique, index_type, index_note
@@ -53,13 +53,15 @@ class Db(SimpleDv):
53
53
  query_table = ""
54
54
  if table is not None:
55
55
  query_table = f" and table_name = '{table}'"
56
+ if index is not None:
57
+ query_table+= f" and index_name='{index}'"
56
58
  return f"select table_name, index_name, 1-any_value(non_unique) as is_unique, any_value(index_type) as index_type, any_value(index_comment) as index_note from information_schema.statistics where table_schema='{self.db}' {query_table} group by index_name;"
57
- def sql_index_keys(self, index):
59
+ def sql_index_keys(self, table, index):
58
60
  """
59
61
  require:
60
- index_name, column_name, index_offset, column_note
62
+ table_name, index_name, column_name, index_offset, column_note
61
63
  """
62
- return f"select index_name, column_name, seq_in_index as index_offset, comment as column_note from information_schema.statistics where table_name='flow_review' and table_schema='{self.db}' and index_name = '{index}' order by seq_in_index asc;"
64
+ return f"select table_name, index_name, column_name, seq_in_index as index_offset, comment as column_note from information_schema.statistics where table_name='{table}' and table_schema='{self.db}' and index_name = '{index}' order by seq_in_index asc;"
63
65
 
64
66
  pass
65
67
  def build(argv, conf):
@@ -52,29 +52,31 @@ class Db(SimpleDv):
52
52
  """
53
53
  query_table = ""
54
54
  if table is not None:
55
- query_table = f" and t.table_name = '{table}'"
56
- return f"select t.table_name as table_name, tc.comments as table_note from all_tables t inner join all_tab_comments tc on t.table_name=tc.table_name where t.owner='{self.user.upper()}' {query_table};"
55
+ query_table = f" and t.table_name = '{table.upper()}'"
56
+ return f"select t.table_name as table_name, tc.comments as table_note from all_tables t inner join all_tab_comments tc on t.table_name=tc.table_name where t.owner='{self.user.upper()}' {query_table}"
57
57
  def sql_columns(self, table):
58
58
  """
59
59
  require:
60
60
  table_name, column_name, column_type, column_default, nullable, column_offset, column_note
61
61
  """
62
- return f"select c.table_name as table_name, c.column_name as column_name, c.data_type|| '(' ||c.data_length||','||c.data_precision||','||c.data_scale||')' as column_type, c.data_default as column_default, c.nullable as nullable, c.column_id as column_offset, cc.comments as column_note from all_tab_columns c inner join all_col_comments cc on c.column_name=cc.column_name and c.table_name=cc.table_name where c.table_name='{table}' order by c.column_id asc;"
63
- def sql_indexes(self, table=None):
62
+ return f"select c.table_name as table_name, c.column_name as column_name, c.data_type|| '(' ||c.data_length||','||c.data_precision||','||c.data_scale||')' as column_type, c.data_default as column_default, c.nullable as nullable, c.column_id as column_offset, cc.comments as column_note from all_tab_columns c inner join all_col_comments cc on c.column_name=cc.column_name and c.table_name=cc.table_name where c.table_name='{table.upper()}' order by c.column_id asc"
63
+ def sql_indexes(self, table=None, index=None):
64
64
  """
65
65
  require:
66
66
  table_name, index_name, is_unique, index_type, index_note
67
67
  """
68
68
  query_table = ""
69
69
  if table is not None:
70
- query_table = f" and table_name = '{table}'"
71
- return f"select table_name, index_name, case uniqueness when 'UNIQUE' then 1 else 0 end as is_unique, index_type, '' as index_note from all_indexes where owner = '{self.user.upper()}'{query_table};"
72
- def sql_index_keys(self, index):
70
+ query_table = f" and table_name = '{table.upper()}'"
71
+ if index is not None:
72
+ query_table+= f" and index_name='{index.upper()}'"
73
+ return f"select table_name, index_name, case uniqueness when 'UNIQUE' then 1 else 0 end as is_unique, index_type, '' as index_note from all_indexes where owner = '{self.user.upper()}'{query_table}"
74
+ def sql_index_keys(self, table, index):
73
75
  """
74
76
  require:
75
- index_name, column_name, index_offset, column_note
77
+ table_name, index_name, column_name, index_offset, column_note
76
78
  """
77
- return f"select index_name, column_name, column_position as index_offset, '' as note from all_ind_columns where index_name='{index}' order by column_position asc;"
79
+ return f"select table_name, index_name, column_name, column_position as index_offset, '' as note from all_ind_columns where index_name='{index.upper()}' and table_name='{table.upper()}' order by column_position asc"
78
80
 
79
81
  pass
80
82
  def build(argv, conf):
@@ -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,7 +99,7 @@ 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
@@ -108,10 +114,13 @@ class TableObject(Base):
108
114
  auto_translate:
109
115
  对于没有在py2sqls自定义映射的表字段,是否自动转换(py|autoTran<=>auto_tran|sql)
110
116
  """
111
- def init(self, keys, table=None, py2sqls=None, query_keys=None, auto_translate=True, dv = None, sql_create=None, sql_delete=None):
117
+ 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):
112
118
  if table is None:
113
119
  table = tls.lower(self.__class__.__name__)
114
120
  self.table = table
121
+ if py_name is None:
122
+ py_name = table
123
+ self.py_name = py_name
115
124
  if py2sqls is None:
116
125
  py2sqls = {}
117
126
  if type(py2sqls) in (list, tuple):
@@ -139,6 +148,7 @@ class TableObject(Base):
139
148
  self.sql_delete = sql_delete
140
149
  def create(self, dv=None):
141
150
  assert self.sql_create is not None
151
+ #print(f"[TESTZ] sql_create: {self.sql_create}")
142
152
  dv = self.rdv(dv)
143
153
  dv.executes(self.sql_create)
144
154
  def delete(self, dv=None):
@@ -153,7 +163,7 @@ class TableObject(Base):
153
163
  if hasattr(obj, k):
154
164
  tmp[k] = getattr(obj, k)
155
165
  obj = tmp
156
- obj = {self.py2sqls[k]:v for k,v in obj.items()}
166
+ obj = {self.py2sqls[k]:v for k,v in obj.items() if k in self.py2sqls}
157
167
  return obj
158
168
  def toPy(self, obj):
159
169
  if type(obj)!=dict:
@@ -171,21 +181,42 @@ class TableObject(Base):
171
181
  return dv
172
182
  def query(self, sql, dv=None, sql2py=True):
173
183
  dv=self.rdv(dv)
174
- rst = dv.query(sql)
184
+ rst = dv.query(sql, as_map=1)
175
185
  if sql2py:
176
186
  rst = [self.sql2py(it) for it in rst]
177
187
  return rst
178
188
  def queryAll(self, dv=None, sql2py=True):
179
189
  sql = f"select * from {self.table};"
180
190
  return self.query(sql, dv, sql2py)
181
- def save(self, obj, dv=None, py2sql = True, commit=False):
191
+ def filterSql(self, obj):
192
+ if type(obj)!=dict:
193
+ tmp = {}
194
+ for k in self.py2sqls:
195
+ if hasattr(obj, k):
196
+ tmp[k] = getattr(obj, k)
197
+ obj = tmp
198
+ obj = {k:v for k,v in obj.items() if k in self.keys}
199
+ return obj
200
+ def save(self, obj, dv=None, py2sql = True, commit=False, check = True):
182
201
  dv = self.rdv(dv)
183
202
  if type(obj) not in [list, tuple]:
184
203
  obj = [obj]
185
204
  if py2sql:
186
205
  obj = [self.toSql(k) for k in obj]
187
- _ = [dv.insert_or_update(k, self.table, self.query_keys) for k in obj]
206
+ else:
207
+ obj = [self.filterSql(k) for k in obj]
208
+ query_keys = self.query_keys
209
+ if not check:
210
+ query_keys = None
211
+ _ = [dv.insert_or_update(k, self.table, query_keys) for k in obj]
188
212
  if commit:
189
- dv.execute("commit;")
213
+ dv.execute("commit")
190
214
  return _
215
+ def clean(self, dv=None,commit = False):
216
+ dv = self.rdv(dv)
217
+ dv.execute(f"delete from {self.table}")
218
+ if commit:
219
+ dv.execute("commit")
220
+
221
+
191
222
 
@@ -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):
@@ -38,7 +39,7 @@ class Db(SimpleDv):
38
39
  if table is not None:
39
40
  query_table = f" and name = '{table}'"
40
41
  return f"select name as table_name, '' as table_note from sqlite_master where type='table' {query_table};"
41
- def sql_indexes(self, table=None):
42
+ def sql_indexes(self, table=None, index=None):
42
43
  """
43
44
  require:
44
45
  table_name, index_name, is_unique, index_type, index_note
@@ -46,6 +47,8 @@ class Db(SimpleDv):
46
47
  query_table = ""
47
48
  if table is not None:
48
49
  query_table = f" and tbl_name = '{table}'"
50
+ if index is not None:
51
+ query_table+= f" and name='{index}'"
49
52
  return f"select tbl_name as table_name, name as index_name, -1 as is_unique, '?' as index_type, '' as index_note from sqlite_master where type='index' {query_table};"
50
53
  def columns(self, table, as_map=None):
51
54
  """
@@ -62,18 +65,18 @@ class Db(SimpleDv):
62
65
  rst.append(tmp)
63
66
  rst = self.out_list_sqlite3(rst, as_map)
64
67
  return rst
65
- def index_keys(self, index, as_map=None):
68
+ def index_keys(self, table, index, as_map=None):
66
69
  """
67
70
  require:
68
- index_name, column_name, index_offset, column_note
71
+ table_name, index_name, column_name, index_offset, column_note
69
72
  """
70
73
  rst = self.query(f"PRAGMA index_info({index})", as_map=0)
71
74
  dts = rst[1:]
72
- keys = "index_name, column_name, index_offset, column_note".split(", ")
75
+ keys = "table_name, index_name, column_name, index_offset, column_note".split(", ")
73
76
  rst = [keys]
74
77
  for dt in dts:
75
78
  seqno, cid, name = dt
76
- tmp = [index, name, seqno, '']
79
+ tmp = [table, index, name, seqno, '']
77
80
  rst.append(tmp)
78
81
  return self.out_list_sqlite3(rst, as_map)
79
82
  def out_list_sqlite3(self, query_result, as_map=None):
@@ -87,6 +90,21 @@ class Db(SimpleDv):
87
90
  rst = rst[1:]
88
91
  rst = [{k:v for k,v in zip(keys, dt)} for dt in rst]
89
92
  return rst
93
+ def insert_or_update(self, maps, table, keys = None):
94
+ if type(maps)!=dict:
95
+ maps = maps.__dict__
96
+ if keys is None:
97
+ keys = []
98
+ if type(keys) not in (list, tuple):
99
+ keys = [keys]
100
+ kvs = [[k,tls.py2sql(v)] for k,v in maps.items()]
101
+ sets = [f"{k}={v}" for k,v in kvs]
102
+ sets = ",".join(sets)
103
+ ks = ",".join([kv[0] for kv in kvs])
104
+ vs = ",".join([str(kv[1]) for kv in kvs])
105
+ sql = f"insert into {table}({ks}) values({vs}) ON CONFLICT DO UPDATE SET {sets}"
106
+ #print(f"[TESTZ] sql: {sql}")
107
+ return self.execute(sql)
90
108
 
91
109
  pass
92
110
  def build(argv, conf):
@@ -192,13 +192,11 @@ class CMD:
192
192
  try:
193
193
  tab = s.split(" ")[0]
194
194
  if tab in "tables,indexes,columns,index_keys".split(","):
195
- _val = None
196
195
  _arr = s.split(" ")
197
196
  _arr = [_k.strip() for _k in _arr if _k.strip()!=""]
198
- if len(_arr)>1:
199
- _val = _arr[1]
197
+ _arr = _arr[1:]
200
198
  _fc = getattr(self.dv, tab)
201
- rst = self.exec(_fc, _val)
199
+ rst = self.exec(_fc, *_arr)
202
200
  show_query = True
203
201
  elif self.dv.check_query(s):
204
202
  rst = self.query(s)
@@ -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