buildz 0.3.8__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.
- buildz-0.6.42/PKG-INFO +86 -0
- buildz-0.6.42/README.md +73 -0
- buildz-0.6.42/buildz/__init__.py +9 -0
- buildz-0.6.42/buildz/__main__.py +6 -0
- buildz-0.6.42/buildz/argx.py +127 -0
- buildz-0.6.42/buildz/argz/__init__.py +3 -0
- buildz-0.6.42/buildz/argz/argz.py +223 -0
- buildz-0.6.42/buildz/argz/build.py +48 -0
- buildz-0.6.42/buildz/argz/callz.py +115 -0
- buildz-0.6.42/buildz/argz/evalx.py +30 -0
- buildz-0.6.42/buildz/argz/test.py +26 -0
- buildz-0.6.42/buildz/argz/test_obj.py +38 -0
- buildz-0.6.42/buildz/argz/tests/conf.js +31 -0
- buildz-0.6.42/buildz/auto/__init__.py +7 -0
- buildz-0.6.42/buildz/auto/cache.py +207 -0
- buildz-0.6.42/buildz/auto/config.py +38 -0
- buildz-0.6.42/buildz/auto/dbs.py +37 -0
- buildz-0.6.42/buildz/auto/deal.py +44 -0
- buildz-0.6.42/buildz/auto/deal_list.py +33 -0
- buildz-0.6.42/buildz/auto/deal_type.py +39 -0
- buildz-0.6.42/buildz/auto/defs.py +46 -0
- buildz-0.6.42/buildz/auto/factory.py +35 -0
- buildz-0.6.42/buildz/auto/init.py +13 -0
- buildz-0.6.42/buildz/auto/log.py +28 -0
- buildz-0.6.42/buildz/auto/request.py +151 -0
- buildz-0.6.42/buildz/auto/run.py +47 -0
- buildz-0.6.42/buildz/auto/save.py +45 -0
- buildz-0.6.42/buildz/auto/test/res/cache/cache.js +11 -0
- buildz-0.6.42/buildz/auto/test/res/config/base.js +13 -0
- buildz-0.6.42/buildz/auto/test/res/config/config.js +4 -0
- buildz-0.6.42/buildz/auto/test/res/data/fp.js +30 -0
- buildz-0.6.42/buildz/auto/test/res/data/item1.js +16 -0
- buildz-0.6.42/buildz/auto/test/res/data/item2.js +21 -0
- buildz-0.6.42/buildz/auto/test/res/data/test.js +41 -0
- buildz-0.6.42/buildz/auto/test/test.py +27 -0
- buildz-0.6.42/buildz/auto/test/xtest.py +20 -0
- buildz-0.6.42/buildz/auto/verify.py +77 -0
- buildz-0.6.42/buildz/base.py +55 -0
- buildz-0.6.42/buildz/cachez/__init__.py +8 -0
- buildz-0.6.42/buildz/cachez/cache.py +200 -0
- buildz-0.6.42/buildz/cmd.py +78 -0
- buildz-0.6.42/buildz/db/__init__.py +4 -0
- buildz-0.6.42/buildz/db/__main__.py +3 -0
- buildz-0.6.42/buildz/db/dv/__init__.py +20 -0
- buildz-0.6.42/buildz/db/dv/basez.py +217 -0
- buildz-0.6.42/buildz/db/dv/clickhousez.py +39 -0
- buildz-0.6.42/buildz/db/dv/lib/readme +10 -0
- buildz-0.6.42/buildz/db/dv/mysqlz.py +73 -0
- buildz-0.6.42/buildz/db/dv/oraclez.py +94 -0
- buildz-0.6.42/buildz/db/dv/orm.py +241 -0
- buildz-0.6.42/buildz/db/dv/postgresqlz.py +42 -0
- buildz-0.6.42/buildz/db/dv/sqlite3z.py +124 -0
- buildz-0.6.42/buildz/db/dv/structz.py +249 -0
- buildz-0.6.42/buildz/db/install.txt +5 -0
- buildz-0.6.42/buildz/db/run.conf +10 -0
- buildz-0.6.42/buildz/db/runz.py +127 -0
- buildz-0.6.42/buildz/db/tls.py +34 -0
- buildz-0.6.42/buildz/demo/ioc/deal.py +20 -0
- buildz-0.6.42/buildz/demo/ioc/help.py +42 -0
- buildz-0.6.42/buildz/demo/myers/deal.py +62 -0
- buildz-0.6.42/buildz/demo/myers/help.py +16 -0
- buildz-0.6.42/buildz/demo/res/conf/ioc.js +20 -0
- buildz-0.6.42/buildz/demo/res/conf/main.js +62 -0
- buildz-0.6.42/buildz/demo/res/conf/myers.js +21 -0
- buildz-0.6.42/buildz/demo/res/conf/search.js +21 -0
- buildz-0.6.42/buildz/demo/res/conf/xf.js +21 -0
- buildz-0.6.42/buildz/demo/res/help/default.js +24 -0
- buildz-0.6.42/buildz/demo/res/help/ioc.js +39 -0
- buildz-0.6.42/buildz/demo/res/help/myers.js +38 -0
- buildz-0.6.42/buildz/demo/res/help/search.js +44 -0
- buildz-0.6.42/buildz/demo/res/help/xf.js +34 -0
- buildz-0.6.42/buildz/demo/res/test.js +24 -0
- buildz-0.6.42/buildz/demo/search/deal.py +33 -0
- buildz-0.6.42/buildz/demo/search/help.py +16 -0
- buildz-0.6.42/buildz/demo/test.py +56 -0
- buildz-0.6.42/buildz/demo/xf/deal.py +16 -0
- buildz-0.6.42/buildz/demo/xf/help.py +16 -0
- buildz-0.6.42/buildz/evalz/__init__.py +2 -0
- buildz-0.6.42/buildz/evalz/evalz.py +175 -0
- buildz-0.6.42/buildz/evalz/res/default.js +12 -0
- buildz-0.6.42/buildz/evalz/test.py +32 -0
- buildz-0.6.42/buildz/fz/__init__.py +8 -0
- buildz-0.6.42/buildz/fz/dirz.py +80 -0
- buildz-0.6.42/buildz/fz/fhs.py +55 -0
- buildz-0.6.42/buildz/fz/fio.py +126 -0
- buildz-0.6.42/buildz/fz/lsf.py +196 -0
- buildz-0.6.42/buildz/html/__init__.py +1 -0
- buildz-0.6.42/buildz/html/test/demo.html +2 -0
- buildz-0.6.42/buildz/html/test/test.py +14 -0
- buildz-0.6.42/buildz/html/xml.py +199 -0
- buildz-0.6.42/buildz/ioc/__init__.py +5 -0
- buildz-0.6.42/buildz/ioc/base.py +6 -0
- buildz-0.6.42/buildz/ioc/init.py +20 -0
- buildz-0.6.42/buildz/ioc/ioc/base.py +85 -0
- buildz-0.6.42/buildz/ioc/ioc/conf.py +247 -0
- buildz-0.6.42/buildz/ioc/ioc/confs.py +577 -0
- buildz-0.6.42/buildz/ioc/ioc/decorator.py +282 -0
- buildz-0.6.42/buildz/ioc/ioc/loads.py +35 -0
- buildz-0.6.42/buildz/ioc/ioc/single.py +71 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/base.py +233 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/branch.py +47 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/call.py +70 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/calls.py +43 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/branch_lists.js +26 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/call_defaults.js +5 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/call_lists.js +20 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/calls_defaults.js +3 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/calls_lists.js +19 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/deal_lists.js +22 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/deals.js +97 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/env_lists.js +23 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/ioc_lists.js +23 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/iocf_lists.js +22 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/join_lists.js +17 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/list_lists.js +17 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/map_lists.js +17 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/mcall_defaults.js +6 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/mcall_lists.js +25 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +12 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/obj_defaults.js +12 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/obj_lists.js +34 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/obj_set_lists.js +10 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/ovar_lists.js +23 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/ref_lists.js +46 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/refs_lists.js +42 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/var_lists.js +18 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/xfile_defaults.js +2 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/conf/xfile_lists.js +22 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/deal.py +87 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/demo.py +15 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/env.py +36 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/init.py +5 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/ioc.py +33 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/iocf.py +59 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/join.py +32 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/list.py +35 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/map.py +35 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/mcall.py +86 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/obj.py +367 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/ovar.py +52 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/ref.py +55 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/refs.py +63 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/val.py +29 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/var.py +55 -0
- buildz-0.6.42/buildz/ioc/ioc_deal/xfile.py +43 -0
- buildz-0.6.42/buildz/ioc/wrap.py +35 -0
- buildz-0.6.42/buildz/logz.py +137 -0
- buildz-0.6.42/buildz/pathz.py +65 -0
- buildz-0.6.42/buildz/pyz.py +152 -0
- buildz-0.6.42/buildz/tools.py +5 -0
- buildz-0.6.42/buildz/tz/__init__.py +12 -0
- buildz-0.6.42/buildz/tz/myers_diff.py +257 -0
- buildz-0.6.42/buildz/tz/test_xfind.py +74 -0
- buildz-0.6.42/buildz/tz/time/__init__.py +1 -0
- buildz-0.6.42/buildz/tz/time/timez.py +24 -0
- buildz-0.6.42/buildz/tz/tio/__init__.py +3 -0
- buildz-0.6.42/buildz/tz/tio/base.py +7 -0
- buildz-0.6.42/buildz/tz/tio/getch.py +23 -0
- buildz-0.6.42/buildz/tz/tio/lx.py +38 -0
- buildz-0.6.42/buildz/tz/tio/test.py +12 -0
- buildz-0.6.42/buildz/tz/tio/win.py +8 -0
- buildz-0.6.42/buildz/tz/xfind.py +232 -0
- buildz-0.6.42/buildz/xf/__init__.py +13 -0
- buildz-0.6.42/buildz/xf/__main__.py +6 -0
- buildz-0.6.42/buildz/xf/code.py +71 -0
- buildz-0.6.42/buildz/xf/code_modify.py +71 -0
- buildz-0.6.42/buildz/xf/copy_old.py +60 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/file.py +10 -2
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/base.py +4 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/buffer.py +35 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/deal/lr.py +3 -1
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/deal/reval.py +4 -0
- buildz-0.6.42/buildz/xf/loader/deal/spc.py +24 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/deal/strz.py +23 -4
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/mg.py +27 -5
- buildz-0.6.42/buildz/xf/loaderz/base.py +34 -0
- buildz-0.6.42/buildz/xf/loaderz/buffer.py +101 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/listmapz.py +84 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/listz.py +35 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/lr.py +78 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/lrval.py +42 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/mapz.py +42 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/nextz.py +25 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/reval.py +33 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/setz.py +15 -0
- {buildz-0.3.8/buildz/xf/loader → buildz-0.6.42/buildz/xf/loaderz}/deal/spc.py +2 -1
- buildz-0.6.42/buildz/xf/loaderz/deal/spt.py +38 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/strz.py +284 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/strz_new.py +284 -0
- buildz-0.6.42/buildz/xf/loaderz/deal/strz_old.py +197 -0
- buildz-0.6.42/buildz/xf/loaderz/exp.py +12 -0
- buildz-0.6.42/buildz/xf/loaderz/item.py +69 -0
- buildz-0.6.42/buildz/xf/loaderz/mg.py +123 -0
- buildz-0.6.42/buildz/xf/loaderz/pos.py +51 -0
- buildz-0.6.42/buildz/xf/loaderz/test.py +102 -0
- buildz-0.6.42/buildz/xf/loaderz/test1.py +7 -0
- buildz-0.6.42/buildz/xf/mapz.py +279 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/read.py +10 -2
- buildz-0.6.42/buildz/xf/readz.py +179 -0
- buildz-0.6.42/buildz/xf/stack.py +68 -0
- buildz-0.6.42/buildz/xf/write.py +63 -0
- buildz-0.6.42/buildz/xf/writer/deal/listmapz.py +51 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/writer/deal/strz.py +3 -1
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/writer/mg.py +13 -1
- buildz-0.6.42/buildz/xf/xargs.py +31 -0
- buildz-0.6.42/buildz/xz/__init__.py +1 -0
- buildz-0.6.42/buildz/xz/conf.js +16 -0
- buildz-0.6.42/buildz/xz/data.js +35 -0
- buildz-0.6.42/buildz/xz/test.py +12 -0
- buildz-0.6.42/buildz/xz/trs.py +176 -0
- buildz-0.6.42/buildz.egg-info/PKG-INFO +86 -0
- buildz-0.6.42/buildz.egg-info/SOURCES.txt +233 -0
- {buildz-0.3.8 → buildz-0.6.42}/setup.py +2 -2
- buildz-0.3.8/PKG-INFO +0 -155
- buildz-0.3.8/README.md +0 -142
- buildz-0.3.8/buildz/__init__.py +0 -29
- buildz-0.3.8/buildz/__main__.py +0 -19
- buildz-0.3.8/buildz/base.py +0 -88
- buildz-0.3.8/buildz/build.py +0 -274
- buildz-0.3.8/buildz/confz.py +0 -501
- buildz-0.3.8/buildz/demo/demo.confz +0 -33
- buildz-0.3.8/buildz/demo/demo.py +0 -20
- buildz-0.3.8/buildz/demo/run.confz +0 -26
- buildz-0.3.8/buildz/demo/test.confz +0 -24
- buildz-0.3.8/buildz/demo/test.py +0 -15
- buildz-0.3.8/buildz/demo/testc.py +0 -18
- buildz-0.3.8/buildz/demo/testf.py +0 -46
- buildz-0.3.8/buildz/demo/testz.py +0 -90
- buildz-0.3.8/buildz/demo/value.confz +0 -19
- buildz-0.3.8/buildz/demo/x.py +0 -14
- buildz-0.3.8/buildz/keys.py +0 -232
- buildz-0.3.8/buildz/test_loader copy.py +0 -69
- buildz-0.3.8/buildz/test_loader.py +0 -26
- buildz-0.3.8/buildz/test_writer.py +0 -50
- buildz-0.3.8/buildz/tools.py +0 -39
- buildz-0.3.8/buildz/xconfz/__init__.py +0 -21
- buildz-0.3.8/buildz/xconfz/base.py +0 -222
- buildz-0.3.8/buildz/xconfz/buff.py +0 -57
- buildz-0.3.8/buildz/xconfz/fc.py +0 -8
- buildz-0.3.8/buildz/xconfz/fc_item.py +0 -88
- buildz-0.3.8/buildz/xconfz/fc_list.py +0 -85
- buildz-0.3.8/buildz/xconfz/fc_map.py +0 -91
- buildz-0.3.8/buildz/xconfz/fc_set.py +0 -60
- buildz-0.3.8/buildz/xconfz/fc_str.py +0 -80
- buildz-0.3.8/buildz/xconfz/fc_type.py +0 -100
- buildz-0.3.8/buildz/xconfz/file.py +0 -41
- buildz-0.3.8/buildz/xconfz/fmt_base.py +0 -155
- buildz-0.3.8/buildz/xconfz/fmt_str.py +0 -50
- buildz-0.3.8/buildz/xconfz/fmt_type.py +0 -86
- buildz-0.3.8/buildz/xconfz/mg.py +0 -163
- buildz-0.3.8/buildz/xconfz/mg_fmt.py +0 -145
- buildz-0.3.8/buildz/xf/__init__.py +0 -5
- buildz-0.3.8/buildz/xf/mapz.py +0 -20
- buildz-0.3.8/buildz/xf/test_write.py +0 -73
- buildz-0.3.8/buildz/xf/write.py +0 -44
- buildz-0.3.8/buildz.egg-info/PKG-INFO +0 -155
- buildz-0.3.8/buildz.egg-info/SOURCES.txt +0 -76
- {buildz-0.3.8 → buildz-0.6.42}/LICENSE +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/MANIFEST.in +0 -0
- /buildz-0.3.8/buildz/dj.txt → /buildz-0.6.42/buildz/confz.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/item.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/writer/base.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.3.8 → buildz-0.6.42}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.3.8 → 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
|
+
```
|
buildz-0.6.42/README.md
ADDED
@@ -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,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,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)
|