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