buildz 0.3.9__tar.gz → 0.6.42__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 (280) hide show
  1. buildz-0.6.42/PKG-INFO +86 -0
  2. buildz-0.6.42/README.md +73 -0
  3. buildz-0.6.42/buildz/__init__.py +9 -0
  4. buildz-0.6.42/buildz/__main__.py +6 -0
  5. buildz-0.6.42/buildz/argx.py +127 -0
  6. buildz-0.6.42/buildz/argz/__init__.py +3 -0
  7. buildz-0.6.42/buildz/argz/argz.py +223 -0
  8. buildz-0.6.42/buildz/argz/build.py +48 -0
  9. buildz-0.6.42/buildz/argz/callz.py +115 -0
  10. buildz-0.6.42/buildz/argz/evalx.py +30 -0
  11. buildz-0.6.42/buildz/argz/test.py +26 -0
  12. buildz-0.6.42/buildz/argz/test_obj.py +38 -0
  13. buildz-0.6.42/buildz/argz/tests/conf.js +31 -0
  14. buildz-0.6.42/buildz/auto/__init__.py +7 -0
  15. buildz-0.6.42/buildz/auto/cache.py +207 -0
  16. buildz-0.6.42/buildz/auto/config.py +38 -0
  17. buildz-0.6.42/buildz/auto/dbs.py +37 -0
  18. buildz-0.6.42/buildz/auto/deal.py +44 -0
  19. buildz-0.6.42/buildz/auto/deal_list.py +33 -0
  20. buildz-0.6.42/buildz/auto/deal_type.py +39 -0
  21. buildz-0.6.42/buildz/auto/defs.py +46 -0
  22. buildz-0.6.42/buildz/auto/factory.py +35 -0
  23. buildz-0.6.42/buildz/auto/init.py +13 -0
  24. buildz-0.6.42/buildz/auto/log.py +28 -0
  25. buildz-0.6.42/buildz/auto/request.py +151 -0
  26. buildz-0.6.42/buildz/auto/run.py +47 -0
  27. buildz-0.6.42/buildz/auto/save.py +45 -0
  28. buildz-0.6.42/buildz/auto/test/res/cache/cache.js +11 -0
  29. buildz-0.6.42/buildz/auto/test/res/config/base.js +13 -0
  30. buildz-0.6.42/buildz/auto/test/res/config/config.js +4 -0
  31. buildz-0.6.42/buildz/auto/test/res/data/fp.js +30 -0
  32. buildz-0.6.42/buildz/auto/test/res/data/item1.js +16 -0
  33. buildz-0.6.42/buildz/auto/test/res/data/item2.js +21 -0
  34. buildz-0.6.42/buildz/auto/test/res/data/test.js +41 -0
  35. buildz-0.6.42/buildz/auto/test/test.py +27 -0
  36. buildz-0.6.42/buildz/auto/test/xtest.py +20 -0
  37. buildz-0.6.42/buildz/auto/verify.py +77 -0
  38. buildz-0.6.42/buildz/base.py +55 -0
  39. buildz-0.6.42/buildz/cachez/__init__.py +8 -0
  40. buildz-0.6.42/buildz/cachez/cache.py +200 -0
  41. buildz-0.6.42/buildz/cmd.py +78 -0
  42. buildz-0.6.42/buildz/db/__init__.py +4 -0
  43. buildz-0.6.42/buildz/db/__main__.py +3 -0
  44. buildz-0.6.42/buildz/db/dv/__init__.py +20 -0
  45. buildz-0.6.42/buildz/db/dv/basez.py +217 -0
  46. buildz-0.6.42/buildz/db/dv/clickhousez.py +39 -0
  47. buildz-0.6.42/buildz/db/dv/lib/readme +10 -0
  48. buildz-0.6.42/buildz/db/dv/mysqlz.py +73 -0
  49. buildz-0.6.42/buildz/db/dv/oraclez.py +94 -0
  50. buildz-0.6.42/buildz/db/dv/orm.py +241 -0
  51. buildz-0.6.42/buildz/db/dv/postgresqlz.py +42 -0
  52. buildz-0.6.42/buildz/db/dv/sqlite3z.py +124 -0
  53. buildz-0.6.42/buildz/db/dv/structz.py +249 -0
  54. buildz-0.6.42/buildz/db/install.txt +5 -0
  55. buildz-0.6.42/buildz/db/run.conf +10 -0
  56. buildz-0.6.42/buildz/db/runz.py +127 -0
  57. buildz-0.6.42/buildz/db/tls.py +34 -0
  58. buildz-0.6.42/buildz/demo/ioc/deal.py +20 -0
  59. buildz-0.6.42/buildz/demo/ioc/help.py +42 -0
  60. buildz-0.6.42/buildz/demo/myers/deal.py +62 -0
  61. buildz-0.6.42/buildz/demo/myers/help.py +16 -0
  62. buildz-0.6.42/buildz/demo/res/conf/ioc.js +20 -0
  63. buildz-0.6.42/buildz/demo/res/conf/main.js +62 -0
  64. buildz-0.6.42/buildz/demo/res/conf/myers.js +21 -0
  65. buildz-0.6.42/buildz/demo/res/conf/search.js +21 -0
  66. buildz-0.6.42/buildz/demo/res/conf/xf.js +21 -0
  67. buildz-0.6.42/buildz/demo/res/help/default.js +24 -0
  68. buildz-0.6.42/buildz/demo/res/help/ioc.js +39 -0
  69. buildz-0.6.42/buildz/demo/res/help/myers.js +38 -0
  70. buildz-0.6.42/buildz/demo/res/help/search.js +44 -0
  71. buildz-0.6.42/buildz/demo/res/help/xf.js +34 -0
  72. buildz-0.6.42/buildz/demo/res/test.js +24 -0
  73. buildz-0.6.42/buildz/demo/search/deal.py +33 -0
  74. buildz-0.6.42/buildz/demo/search/help.py +16 -0
  75. buildz-0.6.42/buildz/demo/test.py +56 -0
  76. buildz-0.6.42/buildz/demo/xf/deal.py +16 -0
  77. buildz-0.6.42/buildz/demo/xf/help.py +16 -0
  78. buildz-0.6.42/buildz/evalz/__init__.py +2 -0
  79. buildz-0.6.42/buildz/evalz/evalz.py +175 -0
  80. buildz-0.6.42/buildz/evalz/res/default.js +12 -0
  81. buildz-0.6.42/buildz/evalz/test.py +32 -0
  82. buildz-0.6.42/buildz/fz/__init__.py +8 -0
  83. buildz-0.6.42/buildz/fz/dirz.py +80 -0
  84. buildz-0.6.42/buildz/fz/fhs.py +55 -0
  85. buildz-0.6.42/buildz/fz/fio.py +126 -0
  86. buildz-0.6.42/buildz/fz/lsf.py +196 -0
  87. buildz-0.6.42/buildz/html/__init__.py +1 -0
  88. buildz-0.6.42/buildz/html/test/demo.html +2 -0
  89. buildz-0.6.42/buildz/html/test/test.py +14 -0
  90. buildz-0.6.42/buildz/html/xml.py +199 -0
  91. buildz-0.6.42/buildz/ioc/__init__.py +5 -0
  92. buildz-0.6.42/buildz/ioc/base.py +6 -0
  93. buildz-0.6.42/buildz/ioc/init.py +20 -0
  94. buildz-0.6.42/buildz/ioc/ioc/base.py +85 -0
  95. buildz-0.6.42/buildz/ioc/ioc/conf.py +247 -0
  96. buildz-0.6.42/buildz/ioc/ioc/confs.py +577 -0
  97. buildz-0.6.42/buildz/ioc/ioc/decorator.py +282 -0
  98. buildz-0.6.42/buildz/ioc/ioc/loads.py +35 -0
  99. buildz-0.6.42/buildz/ioc/ioc/single.py +71 -0
  100. buildz-0.6.42/buildz/ioc/ioc_deal/base.py +233 -0
  101. buildz-0.6.42/buildz/ioc/ioc_deal/branch.py +47 -0
  102. buildz-0.6.42/buildz/ioc/ioc_deal/call.py +70 -0
  103. buildz-0.6.42/buildz/ioc/ioc_deal/calls.py +43 -0
  104. buildz-0.6.42/buildz/ioc/ioc_deal/conf/branch_lists.js +26 -0
  105. buildz-0.6.42/buildz/ioc/ioc_deal/conf/call_defaults.js +5 -0
  106. buildz-0.6.42/buildz/ioc/ioc_deal/conf/call_lists.js +20 -0
  107. buildz-0.6.42/buildz/ioc/ioc_deal/conf/calls_defaults.js +3 -0
  108. buildz-0.6.42/buildz/ioc/ioc_deal/conf/calls_lists.js +19 -0
  109. buildz-0.6.42/buildz/ioc/ioc_deal/conf/deal_lists.js +22 -0
  110. buildz-0.6.42/buildz/ioc/ioc_deal/conf/deals.js +97 -0
  111. buildz-0.6.42/buildz/ioc/ioc_deal/conf/env_lists.js +23 -0
  112. buildz-0.6.42/buildz/ioc/ioc_deal/conf/ioc_lists.js +23 -0
  113. buildz-0.6.42/buildz/ioc/ioc_deal/conf/iocf_lists.js +22 -0
  114. buildz-0.6.42/buildz/ioc/ioc_deal/conf/join_lists.js +17 -0
  115. buildz-0.6.42/buildz/ioc/ioc_deal/conf/list_lists.js +17 -0
  116. buildz-0.6.42/buildz/ioc/ioc_deal/conf/map_lists.js +17 -0
  117. buildz-0.6.42/buildz/ioc/ioc_deal/conf/mcall_defaults.js +6 -0
  118. buildz-0.6.42/buildz/ioc/ioc_deal/conf/mcall_lists.js +25 -0
  119. buildz-0.6.42/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +12 -0
  120. buildz-0.6.42/buildz/ioc/ioc_deal/conf/obj_defaults.js +12 -0
  121. buildz-0.6.42/buildz/ioc/ioc_deal/conf/obj_lists.js +34 -0
  122. buildz-0.6.42/buildz/ioc/ioc_deal/conf/obj_set_lists.js +10 -0
  123. buildz-0.6.42/buildz/ioc/ioc_deal/conf/ovar_lists.js +23 -0
  124. buildz-0.6.42/buildz/ioc/ioc_deal/conf/ref_lists.js +46 -0
  125. buildz-0.6.42/buildz/ioc/ioc_deal/conf/refs_lists.js +42 -0
  126. buildz-0.6.42/buildz/ioc/ioc_deal/conf/var_lists.js +18 -0
  127. buildz-0.6.42/buildz/ioc/ioc_deal/conf/xfile_defaults.js +2 -0
  128. buildz-0.6.42/buildz/ioc/ioc_deal/conf/xfile_lists.js +22 -0
  129. buildz-0.6.42/buildz/ioc/ioc_deal/deal.py +87 -0
  130. buildz-0.6.42/buildz/ioc/ioc_deal/demo.py +15 -0
  131. buildz-0.6.42/buildz/ioc/ioc_deal/env.py +36 -0
  132. buildz-0.6.42/buildz/ioc/ioc_deal/init.py +5 -0
  133. buildz-0.6.42/buildz/ioc/ioc_deal/ioc.py +33 -0
  134. buildz-0.6.42/buildz/ioc/ioc_deal/iocf.py +59 -0
  135. buildz-0.6.42/buildz/ioc/ioc_deal/join.py +32 -0
  136. buildz-0.6.42/buildz/ioc/ioc_deal/list.py +35 -0
  137. buildz-0.6.42/buildz/ioc/ioc_deal/map.py +35 -0
  138. buildz-0.6.42/buildz/ioc/ioc_deal/mcall.py +86 -0
  139. buildz-0.6.42/buildz/ioc/ioc_deal/obj.py +367 -0
  140. buildz-0.6.42/buildz/ioc/ioc_deal/ovar.py +52 -0
  141. buildz-0.6.42/buildz/ioc/ioc_deal/ref.py +55 -0
  142. buildz-0.6.42/buildz/ioc/ioc_deal/refs.py +63 -0
  143. buildz-0.6.42/buildz/ioc/ioc_deal/val.py +29 -0
  144. buildz-0.6.42/buildz/ioc/ioc_deal/var.py +55 -0
  145. buildz-0.6.42/buildz/ioc/ioc_deal/xfile.py +43 -0
  146. buildz-0.6.42/buildz/ioc/wrap.py +35 -0
  147. buildz-0.6.42/buildz/logz.py +137 -0
  148. buildz-0.6.42/buildz/pathz.py +65 -0
  149. buildz-0.6.42/buildz/pyz.py +152 -0
  150. buildz-0.6.42/buildz/tools.py +5 -0
  151. buildz-0.6.42/buildz/tz/__init__.py +12 -0
  152. buildz-0.6.42/buildz/tz/myers_diff.py +257 -0
  153. buildz-0.6.42/buildz/tz/test_xfind.py +74 -0
  154. buildz-0.6.42/buildz/tz/time/__init__.py +1 -0
  155. buildz-0.6.42/buildz/tz/time/timez.py +24 -0
  156. buildz-0.6.42/buildz/tz/tio/__init__.py +3 -0
  157. buildz-0.6.42/buildz/tz/tio/base.py +7 -0
  158. buildz-0.6.42/buildz/tz/tio/getch.py +23 -0
  159. buildz-0.6.42/buildz/tz/tio/lx.py +38 -0
  160. buildz-0.6.42/buildz/tz/tio/test.py +12 -0
  161. buildz-0.6.42/buildz/tz/tio/win.py +8 -0
  162. buildz-0.6.42/buildz/tz/xfind.py +232 -0
  163. buildz-0.6.42/buildz/xf/__init__.py +13 -0
  164. buildz-0.6.42/buildz/xf/__main__.py +6 -0
  165. buildz-0.6.42/buildz/xf/code.py +71 -0
  166. buildz-0.6.42/buildz/xf/code_modify.py +71 -0
  167. buildz-0.6.42/buildz/xf/copy_old.py +60 -0
  168. {buildz-0.3.9/buildz/xconfz → buildz-0.6.42/buildz/xf}/file.py +10 -2
  169. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/base.py +4 -0
  170. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/buffer.py +35 -0
  171. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/deal/lr.py +3 -1
  172. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/deal/reval.py +4 -0
  173. buildz-0.6.42/buildz/xf/loader/deal/spc.py +24 -0
  174. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/deal/strz.py +22 -3
  175. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/mg.py +27 -5
  176. buildz-0.6.42/buildz/xf/loaderz/base.py +34 -0
  177. buildz-0.6.42/buildz/xf/loaderz/buffer.py +101 -0
  178. buildz-0.6.42/buildz/xf/loaderz/deal/listmapz.py +84 -0
  179. buildz-0.6.42/buildz/xf/loaderz/deal/listz.py +35 -0
  180. buildz-0.6.42/buildz/xf/loaderz/deal/lr.py +78 -0
  181. buildz-0.6.42/buildz/xf/loaderz/deal/lrval.py +42 -0
  182. buildz-0.6.42/buildz/xf/loaderz/deal/mapz.py +42 -0
  183. buildz-0.6.42/buildz/xf/loaderz/deal/nextz.py +25 -0
  184. buildz-0.6.42/buildz/xf/loaderz/deal/reval.py +33 -0
  185. buildz-0.6.42/buildz/xf/loaderz/deal/setz.py +15 -0
  186. {buildz-0.3.9/buildz/xf/loader → buildz-0.6.42/buildz/xf/loaderz}/deal/spc.py +2 -1
  187. buildz-0.6.42/buildz/xf/loaderz/deal/spt.py +38 -0
  188. buildz-0.6.42/buildz/xf/loaderz/deal/strz.py +284 -0
  189. buildz-0.6.42/buildz/xf/loaderz/deal/strz_new.py +284 -0
  190. buildz-0.6.42/buildz/xf/loaderz/deal/strz_old.py +197 -0
  191. buildz-0.6.42/buildz/xf/loaderz/exp.py +12 -0
  192. buildz-0.6.42/buildz/xf/loaderz/item.py +69 -0
  193. buildz-0.6.42/buildz/xf/loaderz/mg.py +123 -0
  194. buildz-0.6.42/buildz/xf/loaderz/pos.py +51 -0
  195. buildz-0.6.42/buildz/xf/loaderz/test.py +102 -0
  196. buildz-0.6.42/buildz/xf/loaderz/test1.py +7 -0
  197. buildz-0.6.42/buildz/xf/mapz.py +279 -0
  198. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/read.py +10 -2
  199. buildz-0.6.42/buildz/xf/readz.py +179 -0
  200. buildz-0.6.42/buildz/xf/stack.py +68 -0
  201. buildz-0.6.42/buildz/xf/write.py +63 -0
  202. buildz-0.6.42/buildz/xf/writer/deal/listmapz.py +51 -0
  203. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/writer/deal/strz.py +3 -1
  204. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/writer/mg.py +13 -1
  205. buildz-0.6.42/buildz/xf/xargs.py +31 -0
  206. buildz-0.6.42/buildz/xz/__init__.py +1 -0
  207. buildz-0.6.42/buildz/xz/conf.js +16 -0
  208. buildz-0.6.42/buildz/xz/data.js +35 -0
  209. buildz-0.6.42/buildz/xz/test.py +12 -0
  210. buildz-0.6.42/buildz/xz/trs.py +176 -0
  211. buildz-0.6.42/buildz.egg-info/PKG-INFO +86 -0
  212. buildz-0.6.42/buildz.egg-info/SOURCES.txt +233 -0
  213. {buildz-0.3.9 → buildz-0.6.42}/setup.py +2 -2
  214. buildz-0.3.9/PKG-INFO +0 -155
  215. buildz-0.3.9/README.md +0 -142
  216. buildz-0.3.9/buildz/__init__.py +0 -29
  217. buildz-0.3.9/buildz/__main__.py +0 -19
  218. buildz-0.3.9/buildz/base.py +0 -88
  219. buildz-0.3.9/buildz/build.py +0 -274
  220. buildz-0.3.9/buildz/confz.py +0 -501
  221. buildz-0.3.9/buildz/demo/demo.confz +0 -33
  222. buildz-0.3.9/buildz/demo/demo.py +0 -20
  223. buildz-0.3.9/buildz/demo/run.confz +0 -26
  224. buildz-0.3.9/buildz/demo/test.confz +0 -24
  225. buildz-0.3.9/buildz/demo/test.py +0 -15
  226. buildz-0.3.9/buildz/demo/testc.py +0 -18
  227. buildz-0.3.9/buildz/demo/testf.py +0 -46
  228. buildz-0.3.9/buildz/demo/testz.py +0 -90
  229. buildz-0.3.9/buildz/demo/value.confz +0 -19
  230. buildz-0.3.9/buildz/demo/x.py +0 -14
  231. buildz-0.3.9/buildz/keys.py +0 -232
  232. buildz-0.3.9/buildz/pyz.py +0 -47
  233. buildz-0.3.9/buildz/test_loader copy.py +0 -69
  234. buildz-0.3.9/buildz/test_loader.py +0 -26
  235. buildz-0.3.9/buildz/test_writer.py +0 -50
  236. buildz-0.3.9/buildz/tools.py +0 -39
  237. buildz-0.3.9/buildz/xconfz/__init__.py +0 -21
  238. buildz-0.3.9/buildz/xconfz/base.py +0 -222
  239. buildz-0.3.9/buildz/xconfz/buff.py +0 -57
  240. buildz-0.3.9/buildz/xconfz/fc.py +0 -8
  241. buildz-0.3.9/buildz/xconfz/fc_item.py +0 -88
  242. buildz-0.3.9/buildz/xconfz/fc_list.py +0 -85
  243. buildz-0.3.9/buildz/xconfz/fc_map.py +0 -91
  244. buildz-0.3.9/buildz/xconfz/fc_set.py +0 -60
  245. buildz-0.3.9/buildz/xconfz/fc_str.py +0 -80
  246. buildz-0.3.9/buildz/xconfz/fc_type.py +0 -100
  247. buildz-0.3.9/buildz/xconfz/fmt_base.py +0 -155
  248. buildz-0.3.9/buildz/xconfz/fmt_str.py +0 -50
  249. buildz-0.3.9/buildz/xconfz/fmt_type.py +0 -86
  250. buildz-0.3.9/buildz/xconfz/mg.py +0 -163
  251. buildz-0.3.9/buildz/xconfz/mg_fmt.py +0 -145
  252. buildz-0.3.9/buildz/xf/__init__.py +0 -5
  253. buildz-0.3.9/buildz/xf/file.py +0 -41
  254. buildz-0.3.9/buildz/xf/mapz.py +0 -20
  255. buildz-0.3.9/buildz/xf/test_write.py +0 -73
  256. buildz-0.3.9/buildz/xf/write.py +0 -44
  257. buildz-0.3.9/buildz.egg-info/PKG-INFO +0 -155
  258. buildz-0.3.9/buildz.egg-info/SOURCES.txt +0 -77
  259. {buildz-0.3.9 → buildz-0.6.42}/LICENSE +0 -0
  260. {buildz-0.3.9 → buildz-0.6.42}/MANIFEST.in +0 -0
  261. /buildz-0.3.9/buildz/dj.txt → /buildz-0.6.42/buildz/confz.py +0 -0
  262. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/deal/listz.py +0 -0
  263. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/deal/lrval.py +0 -0
  264. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/deal/mapz.py +0 -0
  265. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/deal/nextz.py +0 -0
  266. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/deal/setz.py +0 -0
  267. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/deal/spt.py +0 -0
  268. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/exp.py +0 -0
  269. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/item.py +0 -0
  270. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/loader/pos.py +0 -0
  271. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/writer/base.py +0 -0
  272. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/writer/conf.py +0 -0
  273. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/writer/deal/jsonval.py +0 -0
  274. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/writer/deal/listz.py +0 -0
  275. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/writer/deal/mapz.py +0 -0
  276. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/writer/deal/reval.py +0 -0
  277. {buildz-0.3.9 → buildz-0.6.42}/buildz/xf/writer/itemz.py +0 -0
  278. {buildz-0.3.9 → buildz-0.6.42}/buildz.egg-info/dependency_links.txt +0 -0
  279. {buildz-0.3.9 → buildz-0.6.42}/buildz.egg-info/top_level.txt +0 -0
  280. {buildz-0.3.9 → buildz-0.6.42}/setup.cfg +0 -0
buildz-0.6.42/PKG-INFO ADDED
@@ -0,0 +1,86 @@
1
+ Metadata-Version: 2.1
2
+ Name: buildz
3
+ Version: 0.6.42
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
+ Home-page: https://github.com/buildCodeZ/buildz
6
+ Author: Zzz
7
+ Author-email: 1309458652@qq.com
8
+ License: Apache License 2.0
9
+ Keywords: buildz
10
+ Platform: any
11
+ Description-Content-Type: text/markdown
12
+ License-File: LICENSE
13
+
14
+ # buildz
15
+ 声明:
16
+ 禁止将本项目代码用于ai训练
17
+ declaration:
18
+ Codes of this project are not allowed to be used for AI training or any other form of machine learning processes.
19
+ ```
20
+ 1,在json格式基础上加了点东西,让配置文件写起来更简单,模块在buildz.xf下
21
+ 2,基于xf格式写了个ioc控制反转配置文件读取的程序,模块在buildz.ioc下
22
+ 3,其他工具模块:
23
+ buildz.fz: 文件夹查找
24
+ buildz.pyz: 简化python __import__调用
25
+ buildz.argx: 按格式读命令行参数
26
+ buildz.tz: 加些工具,目前只有myerse diff字符串比较算法
27
+ buildz.demo: 使用参考,运行"python -m buildz"会用这个模块
28
+ buildz.db: sql集成工具,自用,里面import了其他sql库,使用运行"python -m buildz.db 配置文件路径"
29
+ buildz.base: 封装了一个基础类,继承它可以少写一些代码
30
+ buildz.html: xml(html)内容读取和解析
31
+ buildz.auto: 自动化操作(主要是做自动化测试方便些,如果不怕写一堆配置文件的话)
32
+ 代码关系:
33
+ buildz.xf, buildz.pyz, buildz.argx, buildz.fz, buildz.tz都是独立的模块
34
+ buildz.ioc需要buildz.xf和buildz.pyz
35
+ buildz.db需要buildz.xf
36
+ buildz.demo需要其他全部模块
37
+
38
+ 运行python -m buildz查看帮助
39
+
40
+ 持续更新中。。。
41
+ 2025/01/17:
42
+ 加了argz模块和evalz模块
43
+ argz模块用于命令行参数匹配
44
+ evalz模块用于可配置真假判断
45
+ 命令行还差一个入参转map的
46
+ 2024/12/22:
47
+ 增加pathz模块,方便处理路径,修改ioc和db
48
+ 2024/12/18:
49
+ 增加数据映射xz,数据库db增加类似orm功能以及表和索引结构查询功能(目前只写了mysql,oracle,sqlite3的查询),配置文件读写xf的输出增加对ListMap的支持(dumpx, dumpxf)
50
+ 2024/11/11:
51
+ 新增buildz.tz.xfind,对json做查询用的,功能类似jsonpath,自己实现的原因是好玩,以及不想为了用jsonpath去学对应的语法
52
+ 2024/10/08:
53
+ 增强auto配置功能,在auto增加数据库使用的封装,后续考虑出文档。。。如果有时间
54
+ 2024/09/25:
55
+ 修复bug,增强html的搜索功能,增强auto配置功能
56
+ auto里加了个request的demo,里面用的requests库,可以直接配置来进行http调用
57
+ 2024/09/24:
58
+ 增加模块html:html页面解析
59
+ 增加模块auto:自动化调用
60
+
61
+ 2024/09/09
62
+ ioc:
63
+ 加修饰器
64
+ 加配置refs
65
+
66
+ PS: 对比了下json.loads(修改了下json的scanner.py,让它在纯python下运行,不然json.loads会更快)和目前的xf.loads(buildz.xf.readz.loads)的速度,xf.loads比json.loads慢7倍,可能是读字符串更频繁,方法调用更多(为了代码更结构化和容易修改),其实有一版更慢(buildz.xf.read.loads,废弃代码,后面看情况删掉),慢100倍,因为只考虑结构化,没考虑列表增减开销(获得的经验教训是别直接用python的列表list当堆栈做append和pop,特别慢!)
67
+
68
+ 1, a profile file format base on json, make it easy to write profile file, module is in buildz.xf
69
+ 2, a ioc profile file read function base on xf format, module is in buildz.ioc
70
+ 3, other tools module:
71
+ buildz.fz: file search
72
+ buildz.pyz: make it easier to use python's __import__ function
73
+ buildz.argx: read command argument in special format
74
+ buildz.demo: example codes to use buildz, run "python -m buildz" will use this module
75
+ code relationship:
76
+ buildz.xf, buildz.pyz, buildz.argx, buildz.fz, buildz.tz is independent
77
+ buildz.ioc use buildz.xf and buildz.pyz
78
+ buildz.tz: some tools, only contains "myerse diff algorithm" now
79
+ buildz.demo use all other modules
80
+
81
+ run python -m buildz to see help
82
+
83
+ continue updating...
84
+
85
+ PS: testing speed on json.loads(has modified scanner.py in json module to make it purely run on Python, which make it run slower) and xf.loads(real func is buildz.xf.readz.loads), xf.loads takes 7 times longer than json.loads, it may cost by more func calls and more string cutting and reading(to make codes more structuring and easier to update)
86
+ ```
@@ -0,0 +1,73 @@
1
+ # buildz
2
+ 声明:
3
+ 禁止将本项目代码用于ai训练
4
+ declaration:
5
+ Codes of this project are not allowed to be used for AI training or any other form of machine learning processes.
6
+ ```
7
+ 1,在json格式基础上加了点东西,让配置文件写起来更简单,模块在buildz.xf下
8
+ 2,基于xf格式写了个ioc控制反转配置文件读取的程序,模块在buildz.ioc下
9
+ 3,其他工具模块:
10
+ buildz.fz: 文件夹查找
11
+ buildz.pyz: 简化python __import__调用
12
+ buildz.argx: 按格式读命令行参数
13
+ buildz.tz: 加些工具,目前只有myerse diff字符串比较算法
14
+ buildz.demo: 使用参考,运行"python -m buildz"会用这个模块
15
+ buildz.db: sql集成工具,自用,里面import了其他sql库,使用运行"python -m buildz.db 配置文件路径"
16
+ buildz.base: 封装了一个基础类,继承它可以少写一些代码
17
+ buildz.html: xml(html)内容读取和解析
18
+ buildz.auto: 自动化操作(主要是做自动化测试方便些,如果不怕写一堆配置文件的话)
19
+ 代码关系:
20
+ buildz.xf, buildz.pyz, buildz.argx, buildz.fz, buildz.tz都是独立的模块
21
+ buildz.ioc需要buildz.xf和buildz.pyz
22
+ buildz.db需要buildz.xf
23
+ buildz.demo需要其他全部模块
24
+
25
+ 运行python -m buildz查看帮助
26
+
27
+ 持续更新中。。。
28
+ 2025/01/17:
29
+ 加了argz模块和evalz模块
30
+ argz模块用于命令行参数匹配
31
+ evalz模块用于可配置真假判断
32
+ 命令行还差一个入参转map的
33
+ 2024/12/22:
34
+ 增加pathz模块,方便处理路径,修改ioc和db
35
+ 2024/12/18:
36
+ 增加数据映射xz,数据库db增加类似orm功能以及表和索引结构查询功能(目前只写了mysql,oracle,sqlite3的查询),配置文件读写xf的输出增加对ListMap的支持(dumpx, dumpxf)
37
+ 2024/11/11:
38
+ 新增buildz.tz.xfind,对json做查询用的,功能类似jsonpath,自己实现的原因是好玩,以及不想为了用jsonpath去学对应的语法
39
+ 2024/10/08:
40
+ 增强auto配置功能,在auto增加数据库使用的封装,后续考虑出文档。。。如果有时间
41
+ 2024/09/25:
42
+ 修复bug,增强html的搜索功能,增强auto配置功能
43
+ auto里加了个request的demo,里面用的requests库,可以直接配置来进行http调用
44
+ 2024/09/24:
45
+ 增加模块html:html页面解析
46
+ 增加模块auto:自动化调用
47
+
48
+ 2024/09/09
49
+ ioc:
50
+ 加修饰器
51
+ 加配置refs
52
+
53
+ PS: 对比了下json.loads(修改了下json的scanner.py,让它在纯python下运行,不然json.loads会更快)和目前的xf.loads(buildz.xf.readz.loads)的速度,xf.loads比json.loads慢7倍,可能是读字符串更频繁,方法调用更多(为了代码更结构化和容易修改),其实有一版更慢(buildz.xf.read.loads,废弃代码,后面看情况删掉),慢100倍,因为只考虑结构化,没考虑列表增减开销(获得的经验教训是别直接用python的列表list当堆栈做append和pop,特别慢!)
54
+
55
+ 1, a profile file format base on json, make it easy to write profile file, module is in buildz.xf
56
+ 2, a ioc profile file read function base on xf format, module is in buildz.ioc
57
+ 3, other tools module:
58
+ buildz.fz: file search
59
+ buildz.pyz: make it easier to use python's __import__ function
60
+ buildz.argx: read command argument in special format
61
+ buildz.demo: example codes to use buildz, run "python -m buildz" will use this module
62
+ code relationship:
63
+ buildz.xf, buildz.pyz, buildz.argx, buildz.fz, buildz.tz is independent
64
+ buildz.ioc use buildz.xf and buildz.pyz
65
+ buildz.tz: some tools, only contains "myerse diff algorithm" now
66
+ buildz.demo use all other modules
67
+
68
+ run python -m buildz to see help
69
+
70
+ continue updating...
71
+
72
+ PS: testing speed on json.loads(has modified scanner.py in json module to make it purely run on Python, which make it run slower) and xf.loads(real func is buildz.xf.readz.loads), xf.loads takes 7 times longer than json.loads, it may cost by more func calls and more string cutting and reading(to make codes more structuring and easier to update)
73
+ ```
@@ -0,0 +1,9 @@
1
+ #coding=utf-8
2
+
3
+ __version__="0.6.34"
4
+
5
+ # 小号多
6
+ __author__ = "Zzz, emails: 1174534295@qq.com, 1309458652@qq.com"
7
+
8
+ from .argx import fetch as args
9
+ from .base import Base, WBase
@@ -0,0 +1,6 @@
1
+ #coding=utf-8
2
+ from .demo.test import test
3
+ if __name__=="__main__":
4
+ test()
5
+
6
+ pass
@@ -0,0 +1,127 @@
1
+ #coding=utf-8
2
+ import sys
3
+ class Fetch:
4
+ """
5
+ 命令行参数读取
6
+ ft = Fetch("id,name,kind".split(","), {"a":"age"})
7
+ or
8
+ ft = Fetch(*xf.loads("[[id,name,kind],{a:age}]"))
9
+
10
+ ft("001 zero life -a12".split(" ")) = {'id': '001', 'name': 'zero', 'kind': 'life', 'age': '12'}
11
+
12
+ 但更简单的方法是:
13
+ xf.args("{id:'001', name: zero, kind: life, age: 12}".split(" ")) = {'id': '001', 'name': 'zero', 'kind': 'life', 'age': 12}
14
+ python buildz.xf {id:'001', name: zero, kind: life, age: 12}
15
+ 就是对引号不太适用
16
+ """
17
+ def __init__(self, args = [], maps ={}):
18
+ args = [maps[k] if k in maps else k for k in args]
19
+ self.args = args
20
+ self.maps = maps
21
+ def des(self):
22
+ cmd = " ".join(self.args)
23
+ adds = []
24
+ for k, val in self.maps.items():
25
+ tmp = f" [-{k} param] [--{val}=param]"
26
+ adds.append(tmp)
27
+ adds = [cmd]+adds
28
+ rs = "\n".join(adds)
29
+ return rs
30
+ def check(self, args, ks):
31
+ rst = []
32
+ for k in ks:
33
+ if k not in args:
34
+ rst.append(k)
35
+ return rst
36
+ def __call__(self, argv = None):
37
+ args, maps = fetch(argv)
38
+ rst = {}
39
+ for i in range(len(args)):
40
+ if i >= len(self.args):
41
+ break
42
+ key = self.args[i]
43
+ rst[key] = args[i]
44
+ for key in maps:
45
+ rst[key] = maps[key]
46
+ for key in self.maps:
47
+ rkey = self.maps[key]
48
+ if key in rst:
49
+ val = rst[key]
50
+ rst[rkey] = val
51
+ del rst[key]
52
+ return rst
53
+
54
+ pass
55
+ class FetchX(Fetch):
56
+ def __init__(self, *a, **b):
57
+ super().__init__(a,b)
58
+
59
+ pass
60
+ def fetch(argv = None):
61
+ r"""
62
+ format: a b c -a 123 -b456 --c=789 +d -x"??? ???" y z
63
+ return: [a,b,c,y,z], {a:123,b:456,c:789,d:1,x:'??? ???'}
64
+ """
65
+ if argv is None:
66
+ argv = sys.argv[1:]
67
+ lists, maps = [],{}
68
+ argv = [str(k).strip() for k in argv]
69
+ argv = [k for k in argv if k!=""]
70
+ i = 0
71
+ while i<len(argv):
72
+ v = argv[i]
73
+ make_plus = 0
74
+ if v in ["-", "--", "+"]or v[0] not in "+-":
75
+ lists.append(v)
76
+ i+=1
77
+ continue
78
+ if v[0] == "+":
79
+ key = v[1:]
80
+ make_plus = 1
81
+ val = 1
82
+ else:
83
+ if v[1]=="-":
84
+ kv = v[2:]
85
+ x = kv.split("=")
86
+ key = x[0]
87
+ val = "=".join(x[1:])
88
+ if len(val)==0:
89
+ val = 1
90
+ else:
91
+ key = v[1]
92
+ if len(v)>2:
93
+ val = v[2:]
94
+ else:
95
+ if i+1>=len(argv):
96
+ val = 1
97
+ else:
98
+ val = argv[i+1]
99
+ i+=1
100
+ if make_plus:
101
+ keys = key.split(",")
102
+ else:
103
+ keys = [key]
104
+ for key in keys:
105
+ if key not in maps:
106
+ maps[key] = []
107
+ maps[key].append(val)
108
+ i+=1
109
+ for k in maps:
110
+ v = maps[k]
111
+ if len(v)==1:
112
+ maps[k] = v[0]
113
+ return lists, maps
114
+
115
+ pass
116
+
117
+ def get(maps, keys, default=None):
118
+ if type(keys) not in [list, tuple]:
119
+ keys = [keys]
120
+ for key in keys:
121
+ if key in maps:
122
+ return maps[key]
123
+ return default
124
+
125
+ pass
126
+
127
+
@@ -0,0 +1,3 @@
1
+ from .argz import *
2
+ from .callz import *
3
+ from .evalx import *
@@ -0,0 +1,223 @@
1
+ from buildz import Base, xf
2
+ from . import build
3
+ class ArgExp(Exception):
4
+ def __repr__(self):
5
+ return self.__str__()
6
+ def __str__(self):
7
+ return f"stype: {self.stype}, trs: {self.trs}, des: {self.des}"
8
+ def __init__(self, stype, trs, des=None, prev = None):
9
+ super().__init__()
10
+ self.prev = prev
11
+ self.stype = stype
12
+ self.trs = trs
13
+ self.des = des
14
+
15
+ pass
16
+ class Args(Base):
17
+ def call(self, args, maps):
18
+ return args, maps
19
+ def deal_exp(self, exp):
20
+ return exp
21
+
22
+ pass
23
+ class ArrArgs(Args):
24
+ def init(self, args = None):
25
+ if args is None:
26
+ args = []
27
+ self.args = args
28
+ def add(self, item):
29
+ self.args.append(item)
30
+ return self
31
+ def call(self, args, maps):
32
+ i=0
33
+ try:
34
+ for i in range(len(self.args)):
35
+ item = self.args[i]
36
+ args, maps = item(args,maps)
37
+ except ArgExp as exp:
38
+ for j in range(i-1, -1, -1):
39
+ exp = self.args[j].deal_exp(exp)
40
+ raise exp
41
+ return args, maps
42
+ def deal_exp(self, exp):
43
+ for i in range(len(self.args)-1, -1, -1):
44
+ exp = self.args[i].deal_exp(exp)
45
+ return exp
46
+ class RangeListArgs(Args):
47
+ def init(self, min = 0, max = None):
48
+ self.min = min
49
+ self.max = max
50
+ def deal_exp(self, exp):
51
+ trs = set()
52
+ for key, vtype in exp.trs:
53
+ if vtype=='list':
54
+ trs.add((key+self.min, vtype))
55
+ else:
56
+ trs.add((key, vtype))
57
+ #exp.trs = trs
58
+ return ArgExp(exp.stype, trs, exp.des, exp)
59
+ def call(self, args, maps):
60
+ if len(args)<self.min:
61
+ raise ArgExp("need", set([(self.min, 'list')]))
62
+ if self.max is None:
63
+ args = args[self.min:]
64
+ else:
65
+ args = args[self.min:self.max]
66
+ return args, maps
67
+ class RangeListBuild(build.Build):
68
+ def call(self, conf):
69
+ rg = xf.g(conf, range=None)
70
+ if rg is None:
71
+ return None
72
+ if type(rg)==int:
73
+ rg = [rg, None]
74
+ return RangeListArgs(*rg)
75
+ class ArgItem(Base):
76
+ # vtype = 'dict' | 'list'
77
+ def init(self, key, vtype="dict", need = False, default = False, value = None, des = None,remove=True):
78
+ self.vtype = vtype
79
+ self.key = key
80
+ self.need = need
81
+ self.default = default
82
+ self.value = value
83
+ self.trs = []
84
+ self.remove = remove
85
+ if des is None:
86
+ des = key
87
+ self.des = des
88
+ def add(self, key, vtype="dict"):
89
+ self.trs.append((key, vtype))
90
+ return self
91
+ def deal_exp(self, exp):
92
+ trs = set()
93
+ for key, vtype in exp.trs:
94
+ if key == self.key and vtype==self.vtype:
95
+ trs.update(self.trs)
96
+ else:
97
+ trs.add((key, vtype))
98
+ #exp.trs = trs
99
+ return ArgExp(exp.stype, trs, exp.des, exp)
100
+ return exp
101
+ def call(self, set_args, args, maps, rst_args, rst_maps):
102
+ val = None
103
+ find = False
104
+ for key, vtype in self.trs:
105
+ if vtype =="dict":
106
+ if key in maps:
107
+ val = maps[key]
108
+ if self.remove:
109
+ del maps[key]
110
+ find = True
111
+ break
112
+ else:
113
+ if key in set_args:
114
+ val = args[key]
115
+ if self.remove:
116
+ set_args.remove(key)
117
+ find = True
118
+ break
119
+ if not find:
120
+ if self.default:
121
+ find = True
122
+ val = self.value
123
+ if not find and self.need:
124
+ raise ArgExp("need", set(self.trs), self.des)
125
+ if self.vtype == 'dict':
126
+ rst_maps[self.key] = val
127
+ else:
128
+ rst_args[self.key] = val
129
+
130
+ pass
131
+ class ArgItemBuild(build.Build):
132
+ def call(self, key, vtype, conf):
133
+ need = xf.g(conf, need=False)
134
+ default = xf.g(conf, default=False)
135
+ value = xf.g(conf, value=None)
136
+ des = xf.g(conf, des=None)
137
+ remove = xf.g(conf, remove=True)
138
+ src = conf['src']
139
+ if type(src) not in (list, tuple):
140
+ src = [src]
141
+ item = ArgItem(key, vtype, need, default, value, des, remove)
142
+ for s in src:
143
+ if type(s) not in (list, tuple):
144
+ if type(s)==int:
145
+ s = [s, 'list']
146
+ else:
147
+ s = [s, 'dict']
148
+ if s[1] in ('l', 'args'):
149
+ s[1] = 'list'
150
+ elif s[1] in ('d', 'maps'):
151
+ s[1] = 'dict'
152
+ item.add(*s)
153
+ return item
154
+ class TrsArgs(Args):
155
+ def deal_exp(self, exp):
156
+ for item in self.args:
157
+ exp = item.deal_exp(exp)
158
+ return exp
159
+ def init(self, args=None, keep = True):
160
+ super().init()
161
+ if args is None:
162
+ args = []
163
+ self.args = args
164
+ self.keep = keep
165
+ def add(self, item):
166
+ self.args.append(item)
167
+ return self
168
+ def call(self, args, maps):
169
+ rst_args, rst_maps = {}, {}
170
+ set_args = set(range(len(args)))
171
+ for item in self.args:
172
+ item(set_args, args, maps, rst_args, rst_maps)
173
+ l_args = 0
174
+ if len(rst_args)>0:
175
+ l_args= max(rst_args.keys())
176
+ out_args = []
177
+ if self.keep and len(set_args)>0:
178
+ for i in range(max(set_args)):
179
+ if i in set_args:
180
+ out_args.append(args[i])
181
+ for i in range(l_args+1):
182
+ if i in rst_args:
183
+ if len(out_args)<i:
184
+ raise ArgExp("need", set([(i, 'list')]))
185
+ out_args.append(rst_args[i])
186
+ if self.keep:
187
+ for k in maps:
188
+ if k not in rst_maps:
189
+ rst_maps[k] = maps[k]
190
+ return out_args, rst_maps
191
+
192
+ pass
193
+ class TrsArgsBuild(build.Build):
194
+ def init(self):
195
+ self.item = ArgItemBuild()
196
+ super().init(self.item)
197
+ def call(self, conf):
198
+ keep = xf.g(conf, keep = False)
199
+ lst = xf.g1(conf, list={}, args={})
200
+ dct = xf.g1(conf, dict={}, maps={})
201
+ items = []
202
+ for k, val in lst.items():
203
+ items.append(self.item(k, 'list', val))
204
+ for k, val in dct.items():
205
+ items.append(self.item(k, 'dict', val))
206
+ if len(items)==0:
207
+ return None
208
+ return TrsArgs(items, keep)
209
+ class ArrArgsBuild(build.Build):
210
+ def init(self):
211
+ self.range = RangeListBuild()
212
+ self.trs = TrsArgsBuild()
213
+ super().init(self.trs, self.range)
214
+ def call(self, conf):
215
+ rg = self.range(conf)
216
+ trs = self.trs(conf)
217
+ if rg is None and trs is None:
218
+ return None
219
+ arr = [rg, trs]
220
+ arr = [k for k in arr if k is not None]
221
+ if len(arr)==1:
222
+ return arr[0]
223
+ return ArrArgs(arr)
@@ -0,0 +1,48 @@
1
+ #
2
+ from buildz import Base, xf
3
+ class Build(Base):
4
+ def init(self, *binds):
5
+ self.builder = None
6
+ self.binds = binds
7
+ def bind(self, builder):
8
+ self.builder = builder
9
+ for obj in self.binds:
10
+ obj.bind(builder)
11
+ def call(self, conf):
12
+ assert 0, 'not impl'
13
+ class Builder(Base):
14
+ def init(self, fc = None, key_id = "id"):
15
+ self.vars = {}
16
+ self.confs = {}
17
+ self.key_id = key_id
18
+ self.set_fc(fc)
19
+ def set_fc(self, fc):
20
+ fc.bind(self)
21
+ self.fc = fc
22
+ return self
23
+ def var(self, key, obj):
24
+ self.vars[key] = obj
25
+ return self
26
+ def get_var(self, key):
27
+ return self.vars[key]
28
+ def get_conf(self, key):
29
+ if type(key) == dict:
30
+ conf = key
31
+ else:
32
+ if key not in self.confs:
33
+ return self.get_var(key)
34
+ conf = self.confs[key]
35
+ return self.fc(conf)
36
+ def conf(self, data):
37
+ if type(data) in (list, tuple):
38
+ rst = {}
39
+ for it in data:
40
+ if self.key_id not in it:
41
+ continue
42
+ id = it[self.key_id]
43
+ rst[id] = it
44
+ data = rst
45
+ self.confs = data
46
+ return self
47
+ def call(self, data, key="main"):
48
+ return self.conf(data).get_conf(key)
@@ -0,0 +1,115 @@
1
+ from buildz import Base, xf
2
+ from . import argz
3
+ from . import build
4
+ from . import evalx
5
+ class Fc(Base):
6
+ def str(self):
7
+ return str(self.fc)
8
+ def init(self, fc=None):
9
+ self.fc = fc
10
+ def call(self, args, maps):
11
+ return self.fc(*args, **maps)
12
+ @staticmethod
13
+ def make(fc):
14
+ if isinstance(fc, Fc):
15
+ return fc
16
+ return Fc(fc)
17
+ class ArgsCall(Fc):
18
+ def init(self, fc, args=None, name = None):
19
+ fc=self.make(fc)
20
+ if name is None:
21
+ name = str(fc)
22
+ self.name = name
23
+ self.fc = fc
24
+ self.args = args
25
+ def call(self, args, maps):
26
+ if self.args is not None:
27
+ args, maps = self.args(args, maps)
28
+ try:
29
+ return self.fc(args, maps)
30
+ except argz.ArgExp as exp:
31
+ if self.args is not None:
32
+ exp = self.args.deal_exp(exp)
33
+ raise exp
34
+ class Calls(Fc):
35
+ def str(self):
36
+ return "argz.Calls"
37
+ def init(self, fcs = None, args=None, name = None):
38
+ if name is None:
39
+ name = "argz.calls"
40
+ self.name = name
41
+ if fcs is None:
42
+ fcs = []
43
+ self.fcs = fcs
44
+ self.args = args
45
+ def add(self, fc):
46
+ fc=self.make(fc)
47
+ self.fcs.append(fc)
48
+ def call(self, args, maps):
49
+ val = None
50
+ if self.args is not None:
51
+ args, maps = self.args(args, maps)
52
+ try:
53
+ for fc in self.fcs:
54
+ val = fc(args, maps)
55
+ return val
56
+ except argz.ArgExp as exp:
57
+ if self.args is not None:
58
+ exp = self.args.deal_exp(exp)
59
+ raise exp
60
+ class EvalCall(Fc):
61
+ def init(self, fc, eval=None, name = None):
62
+ fc=self.make(fc)
63
+ if name is None:
64
+ name = str(fc)
65
+ self.eval = eval
66
+ self.fc = fc
67
+ self.name = name
68
+ def call(self, args, maps):
69
+ if self.eval is not None:
70
+ if not self.eval([args, maps]):
71
+ return None
72
+ return self.fc(args, maps)
73
+ class CallsBuild(build.Build):
74
+ def call(self, conf):
75
+ ctype = xf.g(conf, type=None)
76
+ if ctype != "calls":
77
+ return None
78
+ calls = xf.g(conf, calls = [])
79
+ if len(calls)==0:
80
+ return None
81
+ calls = [self.builder.get_conf(conf) for conf in calls]
82
+ return Calls(calls)
83
+ class FcBuild(build.Build):
84
+ def call(self, conf):
85
+ ctype = xf.g(conf, type=None)
86
+ if ctype != "call":
87
+ return None
88
+ src = xf.g(conf, src = None)
89
+ fc = self.builder.get_var(src)
90
+ return Fc(fc)
91
+ class CallBuild(build.Build):
92
+ def init(self):
93
+ self.args = argz.ArrArgsBuild()
94
+ self.eval = evalx.EvalBuild()
95
+ self.fc = FcBuild()
96
+ self.calls = CallsBuild()
97
+ super().init(self.args, self.eval, self.fc, self.calls)
98
+ def call(self, conf):
99
+ args = self.args(conf)
100
+ judges = self.eval(conf)
101
+ fc = self.fc(conf)
102
+ calls = self.calls(conf)
103
+ bfc = fc is None
104
+ bcls = calls is None
105
+ assert (bfc+bcls)==1
106
+ if fc is None:
107
+ fc = calls
108
+ if args is not None:
109
+ fc = ArgsCall(fc, args)
110
+ if judges is not None:
111
+ fc = EvalCall(fc, judges)
112
+ return fc
113
+ class CallBuilder(build.Builder):
114
+ def init(self, key_id = "id"):
115
+ super().init(CallBuild(), key_id)