buildz 0.6.34__tar.gz → 0.6.36__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {buildz-0.6.34/buildz.egg-info → buildz-0.6.36}/PKG-INFO +3 -1
- {buildz-0.6.34 → buildz-0.6.36}/README.md +2 -0
- buildz-0.6.36/buildz/auto/__init__.py +7 -0
- buildz-0.6.36/buildz/cachez/__init__.py +8 -0
- buildz-0.6.36/buildz/cachez/cache.py +199 -0
- buildz-0.6.36/buildz/confz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/basez.py +36 -29
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/mysqlz.py +6 -4
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/oraclez.py +11 -9
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/orm.py +41 -10
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/sqlite3z.py +23 -5
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/structz.py +2 -4
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/base.py +4 -3
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/conf.py +4 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/confs.py +2 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/decorator.py +18 -8
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc/single.py +2 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/branch.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/call.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/calls.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/ref_lists.js +12 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/refs_lists.js +12 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/deal.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/ioc.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/iocf.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/join.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/list.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/map.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/mcall.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/obj.py +2 -2
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/ovar.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/ref.py +3 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/refs.py +3 -2
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/val.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/var.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/xfile.py +1 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz/logz.py +19 -2
- buildz-0.6.36/buildz/pathz.py +33 -0
- buildz-0.6.36/buildz/tools.py +5 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/trs.py +1 -0
- {buildz-0.6.34 → buildz-0.6.36/buildz.egg-info}/PKG-INFO +3 -1
- {buildz-0.6.34 → buildz-0.6.36}/buildz.egg-info/SOURCES.txt +4 -0
- {buildz-0.6.34 → buildz-0.6.36}/setup.py +1 -1
- buildz-0.6.34/buildz/auto/__init__.py +0 -1
- buildz-0.6.34/buildz/tools.py +0 -4
- {buildz-0.6.34 → buildz-0.6.36}/LICENSE +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/MANIFEST.in +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/__main__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/argx.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/cache.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/config.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/dbs.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/deal.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/deal_list.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/deal_type.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/defs.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/factory.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/init.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/log.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/request.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/run.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/save.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/cache/cache.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/config/base.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/config/config.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/data/fp.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/data/item1.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/data/item2.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/res/data/test.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/test.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/test/xtest.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/auto/verify.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/base.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/cmd.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/__main__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/clickhousez.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/lib/readme +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/dv/postgresqlz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/install.txt +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/run.conf +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/runz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/db/tls.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/ioc/deal.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/ioc/help.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/myers/deal.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/myers/help.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/ioc.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/main.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/myers.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/search.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/conf/xf.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/default.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/ioc.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/myers.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/search.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/help/xf.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/res/test.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/search/deal.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/search/help.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/test.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/xf/deal.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/demo/xf/help.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/dirz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/fhs.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/fio.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/fz/lsf.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/html/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/html/test/demo.html +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/html/test/test.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/html/xml.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/base.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/init.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/base.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/demo.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/env.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/ioc_deal/init.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/ioc/wrap.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/pyz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/myers_diff.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/test_xfind.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/time/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/time/timez.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/base.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/getch.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/lx.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/test.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/tio/win.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/tz/xfind.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/__main__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/code.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/code_modify.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/copy_old.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/file.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/base.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/buffer.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/lr.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/reval.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/spc.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/deal/strz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/item.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/mg.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/base.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/buffer.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/listmapz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/listz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/lr.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/lrval.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/mapz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/nextz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/reval.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/setz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/spc.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/spt.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/strz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/strz_new.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/deal/strz_old.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/exp.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/item.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/mg.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/pos.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/test.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/loaderz/test1.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/mapz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/read.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/readz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/stack.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/write.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/base.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/listmapz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/deal/strz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/writer/mg.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xf/xargs.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/__init__.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/conf.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/data.js +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz/xz/test.py +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.6.34 → buildz-0.6.36}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: buildz
|
3
|
-
Version: 0.6.
|
3
|
+
Version: 0.6.36
|
4
4
|
Summary: 配置读写(基于json格式进行简化)、ioc、以及其他工具代码。a json-base file format's read and write code by python, and codes to read and product object from configure file in such format(ioc), and other tool codes
|
5
5
|
Home-page: https://github.com/buildCodeZ/buildz
|
6
6
|
Author: Zzz
|
@@ -34,6 +34,8 @@ License-File: LICENSE
|
|
34
34
|
运行python -m buildz查看帮助
|
35
35
|
|
36
36
|
持续更新中。。。
|
37
|
+
2024/12/22:
|
38
|
+
增加pathz模块,方便处理路径,修改ioc和db
|
37
39
|
2024/12/18:
|
38
40
|
增加数据映射xz,数据库db增加类似orm功能以及表和索引结构查询功能(目前只写了mysql,oracle,sqlite3的查询),配置文件读写xf的输出增加对ListMap的支持(dumpx, dumpxf)
|
39
41
|
2024/11/11:
|
@@ -0,0 +1,199 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
from .. import xf, fz
|
4
|
+
from .. import ioc
|
5
|
+
from ..base import Base
|
6
|
+
from ..ioc import wrap
|
7
|
+
from .. import logz
|
8
|
+
ns = wrap.ns("buildz.cache")
|
9
|
+
import os,re
|
10
|
+
|
11
|
+
|
12
|
+
@ns.obj(id="cache.save")
|
13
|
+
@ns.obj_args("ref, cache.file", "ref, log")
|
14
|
+
class Save(Base):
|
15
|
+
def init(self, cache, log, fkey = "cache.save", fp = None):
|
16
|
+
self.fkey = fkey
|
17
|
+
self.cache = cache
|
18
|
+
self.log = log.tag("Cache.Save")
|
19
|
+
self.fp = fp
|
20
|
+
def save(self):
|
21
|
+
fp = self.fp
|
22
|
+
if fp is None:
|
23
|
+
self.log.warn(f"cache not save cause 'cache.save' is None")
|
24
|
+
return False
|
25
|
+
fz.makefdir(fp)
|
26
|
+
rst = self.cache.data
|
27
|
+
rs = xf.dumps(rst, format=True).encode("utf-8")
|
28
|
+
fz.write(rs, fp, 'wb')
|
29
|
+
return True
|
30
|
+
def call(self, maps, fp):
|
31
|
+
fp = xf.get(maps, self.fkey, None)
|
32
|
+
fp = self.cache.rfp(fp)
|
33
|
+
self.fp = fp
|
34
|
+
return self.save()
|
35
|
+
|
36
|
+
pass
|
37
|
+
class CacheKey(Base):
|
38
|
+
def init(self, cache, key):
|
39
|
+
self.cache = cache
|
40
|
+
self.key = key
|
41
|
+
def has(self):
|
42
|
+
return self.cache.has(self.key)
|
43
|
+
def set(self, val):
|
44
|
+
return self.cache.set(self.key, val)
|
45
|
+
def get(self):
|
46
|
+
return self.cache.get(self.key)
|
47
|
+
def call(self, *args):
|
48
|
+
if len(args)==0:
|
49
|
+
return self.get()
|
50
|
+
elif len(args)==1:
|
51
|
+
return self.set(args[0])
|
52
|
+
else:
|
53
|
+
assert 0
|
54
|
+
@ns.obj(id="cache.file")
|
55
|
+
@ns.obj_args("ref, fps, cache.js","ref, log, null", "ref, rfp.current.first, false", "ref, split, .", "ref, key.currents, buildz.cache.path.currents", "ref, key.basedir, buildz.cache.path.basedir", "ref, save.index, 0", "ref, save.auto, false")
|
56
|
+
class Cache(Base):
|
57
|
+
def bind(self, key):
|
58
|
+
return CacheKey(self, key)
|
59
|
+
def has(self, key):
|
60
|
+
ks = key.split(self.spt)
|
61
|
+
return xf.has(self.data, ks)
|
62
|
+
def get(self, key):
|
63
|
+
ks = key.split(self.spt)
|
64
|
+
return xf.gets(self.data, ks)
|
65
|
+
def set(self, key, val):
|
66
|
+
xf.sets(self.data, key.split(self.spt), val)
|
67
|
+
if self.auto_save:
|
68
|
+
self.save()
|
69
|
+
def remove(self, key):
|
70
|
+
xf.removes(self.data, key.split(self.spt))
|
71
|
+
def init(self, fps="cache.js", log=None, current_first=False, spt = ".", key_currents = "buildz.cache.path.currents", key_basedir = "buildz.cache.path.basedir", save_index = 0, auto_save = False):
|
72
|
+
if type(fps) not in (tuple, list):
|
73
|
+
fps = [fps]
|
74
|
+
self.fps = fps
|
75
|
+
self.spt = spt
|
76
|
+
self.current_first = current_first
|
77
|
+
self.log = logz.make(log)(self)
|
78
|
+
self.key_currents = key_currents
|
79
|
+
self.key_basedir = key_basedir
|
80
|
+
self.save_index = save_index
|
81
|
+
self.data = {}
|
82
|
+
self.auto_save = auto_save
|
83
|
+
def set_currents(self, dp):
|
84
|
+
if type(dp)!=list:
|
85
|
+
dp = [dp]
|
86
|
+
self.set(self.key_currents, dp)
|
87
|
+
def add_currents(self, dp):
|
88
|
+
dps = self.get_currents()
|
89
|
+
if dps is None:
|
90
|
+
dps = []
|
91
|
+
if dp in dps:
|
92
|
+
return
|
93
|
+
dps.append(dp)
|
94
|
+
self.set_currents(dps)
|
95
|
+
def get_currents(self):
|
96
|
+
dps = self.get(self.key_currents)
|
97
|
+
if dps is None:
|
98
|
+
dps = []
|
99
|
+
if type(dps)!=list:
|
100
|
+
dps = [dps]
|
101
|
+
return dps
|
102
|
+
def set_basedir(self, dp):
|
103
|
+
self.set(self.key_basedir, dp)
|
104
|
+
def get_basedir(self):
|
105
|
+
return self.get(self.key_basedir)
|
106
|
+
def rfp(self, fp):
|
107
|
+
if fz.is_abs(fp):
|
108
|
+
return fp
|
109
|
+
dps = [None,"."]
|
110
|
+
cfps = self.get_currents()
|
111
|
+
if cfps is not None:
|
112
|
+
if self.current_first:
|
113
|
+
dps = cfps+dps
|
114
|
+
else:
|
115
|
+
dps = dps+cfps
|
116
|
+
basedir = self.get_basedir()
|
117
|
+
if basedir is not None:
|
118
|
+
dps = [basedir]+dps
|
119
|
+
for dp in dps:
|
120
|
+
_fp = fp
|
121
|
+
if dp is not None:
|
122
|
+
_fp = os.path.join(dp, fp)
|
123
|
+
if os.path.isfile(_fp):
|
124
|
+
return _fp
|
125
|
+
if basedir is not None:
|
126
|
+
fp = os.path.join(basedir, fp)
|
127
|
+
return fp
|
128
|
+
def save(self, fp = None):
|
129
|
+
if fp is None:
|
130
|
+
fp = self.fps[self.save_index]
|
131
|
+
fp = self.rfp(fp)
|
132
|
+
fz.makefdir(fp)
|
133
|
+
rst = self.data
|
134
|
+
rs = xf.dumps(rst, format=True).encode("utf-8")
|
135
|
+
fz.write(rs, fp, 'wb')
|
136
|
+
def load(self, fps = None):
|
137
|
+
if fps is None:
|
138
|
+
fps = self.fps
|
139
|
+
data = {}
|
140
|
+
for fp in fps:
|
141
|
+
fp = self.rfp(fp)
|
142
|
+
if os.path.isfile(fp):
|
143
|
+
self.log.info(f"load cache from {fp}")
|
144
|
+
xdata = xf.flush_maps(xf.loadf(fp),visit_list=True)
|
145
|
+
xf.fill(xdata, data, replace=1)
|
146
|
+
xf.fill(data, self.data, replace=0)
|
147
|
+
|
148
|
+
pass
|
149
|
+
|
150
|
+
@ns.obj(id="cache.mem")
|
151
|
+
@ns.obj_args("ref, log, null")
|
152
|
+
class Mem(Cache):
|
153
|
+
def init(self, log=None):
|
154
|
+
super().init(None, log)
|
155
|
+
|
156
|
+
pass
|
157
|
+
@ns.obj(id="cache")
|
158
|
+
@ns.obj_args("ref, cache.file", "ref, cache.mem")
|
159
|
+
class Caches(Base):
|
160
|
+
def init(self, cache, mem):
|
161
|
+
self.cache = cache
|
162
|
+
self.mem = mem
|
163
|
+
self.caches = [cache, mem]
|
164
|
+
self.set = cache.set
|
165
|
+
self.remove = cache.remove
|
166
|
+
self.call=cache.call
|
167
|
+
self.rfp = cache.rfp
|
168
|
+
self.get_currents = cache.get_currents
|
169
|
+
self.add_currents = cache.add_currents
|
170
|
+
self.set_currents = cache.set_currents
|
171
|
+
self.set_basedir = cache.set_basedir
|
172
|
+
self.get_basedir = cache.get_basedir
|
173
|
+
self.has_file = cache.has
|
174
|
+
self.has_mem = mem.has
|
175
|
+
def get_file(self, key):
|
176
|
+
return self.cache.get(key)
|
177
|
+
def get_mem(self, key):
|
178
|
+
return self.mem.get(key)
|
179
|
+
def set_file(self, key, val):
|
180
|
+
self.cache.set(key,val)
|
181
|
+
def set_mem(self, key, val):
|
182
|
+
self.mem.set(key, val)
|
183
|
+
def remove_file(self, key):
|
184
|
+
self.cache.remove(key)
|
185
|
+
def remove_mem(self, key):
|
186
|
+
self.mem.remove(key)
|
187
|
+
def get(self, key):
|
188
|
+
for cache in self.caches:
|
189
|
+
v = cache.get(key)
|
190
|
+
if v is not None:
|
191
|
+
return v
|
192
|
+
return None
|
193
|
+
def has(self, key):
|
194
|
+
for cache in self.caches:
|
195
|
+
if cache.has(key):
|
196
|
+
return True
|
197
|
+
return False
|
198
|
+
|
199
|
+
pass
|
File without changes
|
@@ -32,10 +32,10 @@ class SimpleDv(ItDv):
|
|
32
32
|
"""
|
33
33
|
raise Exception("unimplement")
|
34
34
|
return None
|
35
|
-
def sql_index_keys(self, index):
|
35
|
+
def sql_index_keys(self, table, index):
|
36
36
|
"""
|
37
37
|
require:
|
38
|
-
index_name, column_name, index_offset, column_note
|
38
|
+
table_name, index_name, column_name, index_offset, column_note
|
39
39
|
"""
|
40
40
|
raise Exception("unimplement")
|
41
41
|
return None
|
@@ -51,17 +51,17 @@ class SimpleDv(ItDv):
|
|
51
51
|
def columns(self, table, as_map=None):
|
52
52
|
sql = self.sql_columns(table)
|
53
53
|
return self.query(sql, as_map=as_map)
|
54
|
-
def indexes(self, table=None, as_map=None):
|
55
|
-
sql = self.sql_indexes(table)
|
54
|
+
def indexes(self, table=None, index=None, as_map=None):
|
55
|
+
sql = self.sql_indexes(table, index)
|
56
56
|
return self.query(sql, as_map=as_map)
|
57
|
-
def index_keys(self, index, as_map=None):
|
58
|
-
sql = self.sql_index_keys(table)
|
57
|
+
def index_keys(self, table, index, as_map=None):
|
58
|
+
sql = self.sql_index_keys(table, index)
|
59
59
|
return self.query(sql, as_map=as_map)
|
60
60
|
# func already impl
|
61
61
|
def check_query(self, s):
|
62
62
|
arr = s.split(" ")
|
63
63
|
k = arr[0].strip().lower()
|
64
|
-
rst = k not in "delete,insert,update,create,drop,commit".split(",")
|
64
|
+
rst = k not in "delete,insert,update,create,drop,commit,alter".split(",")
|
65
65
|
return rst
|
66
66
|
def out_list(self, query_result, as_map=None):
|
67
67
|
if as_map is None:
|
@@ -130,26 +130,33 @@ class SimpleDv(ItDv):
|
|
130
130
|
keys = [keys]
|
131
131
|
update = False
|
132
132
|
conds = ""
|
133
|
-
if len(keys)>0:
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
133
|
+
# if len(keys)>0:
|
134
|
+
# need_query = True
|
135
|
+
# conds = []
|
136
|
+
# for k in keys:
|
137
|
+
# if k not in maps:
|
138
|
+
# need_query = False
|
139
|
+
# break
|
140
|
+
# v = maps[k]
|
141
|
+
# if type(v)==str:
|
142
|
+
# v = f"'{v}'"
|
143
|
+
# if v is not None:
|
144
|
+
# cond = f"{k} = {v}"
|
145
|
+
# else:
|
146
|
+
# cond = f"{k} is null"
|
147
|
+
# conds.append(cond)
|
148
|
+
# if need_query:
|
149
|
+
# conds = " and ".join(conds)
|
150
|
+
# sql_search = f"select count(*) from {table} where {conds}"
|
151
|
+
# rst = self.query(sql_search, as_map = False)[1][0]
|
152
|
+
# update = rst>0
|
153
|
+
kvs = [[k,tls.py2sql(v)] for k,v in maps.items()]
|
154
|
+
sets = [f"{k}={v}" for k,v in kvs]
|
155
|
+
sets = ",".join(sets)
|
156
|
+
ks = ",".join([kv[0] for kv in kvs])
|
157
|
+
vs = ",".join([str(kv[1]) for kv in kvs])
|
158
|
+
sql = f"insert into {table}({ks}) values({vs}) on duplicate key update {sets}"
|
159
|
+
return self.execute(sql)
|
153
160
|
if update:
|
154
161
|
keys = set(keys)
|
155
162
|
kvs = [[k,tls.py2sql(v)] for k,v in maps.items() if k not in keys]
|
@@ -157,10 +164,10 @@ class SimpleDv(ItDv):
|
|
157
164
|
sets = ",".join(sets)
|
158
165
|
sql = f"update {table} set {sets} where {conds}"
|
159
166
|
else:
|
160
|
-
kvs = [[k,
|
167
|
+
kvs = [[k,tls.py2sql(v)] for k,v in maps.items()]
|
161
168
|
ks = ",".join([kv[0] for kv in kvs])
|
162
169
|
vs = ",".join([str(kv[1]) for kv in kvs])
|
163
|
-
sql = f"insert into {table}({ks}) values({vs})
|
170
|
+
sql = f"insert into {table}({ks}) values({vs})"
|
164
171
|
return self.execute(sql)
|
165
172
|
|
166
173
|
pass
|
@@ -45,7 +45,7 @@ class Db(SimpleDv):
|
|
45
45
|
table_name, column_name, column_type, column_default, nullable, column_offset, column_note
|
46
46
|
"""
|
47
47
|
return f"select table_name, column_name, column_type, column_default, is_nullable as nullable, ordinal_position as column_offset, column_comment as column_note from information_schema.columns where table_schema='{self.db}' and table_name = '{table}' order by ordinal_position asc;"
|
48
|
-
def sql_indexes(self, table=None):
|
48
|
+
def sql_indexes(self, table=None, index=None):
|
49
49
|
"""
|
50
50
|
require:
|
51
51
|
table_name, index_name, is_unique, index_type, index_note
|
@@ -53,13 +53,15 @@ class Db(SimpleDv):
|
|
53
53
|
query_table = ""
|
54
54
|
if table is not None:
|
55
55
|
query_table = f" and table_name = '{table}'"
|
56
|
+
if index is not None:
|
57
|
+
query_table+= f" and index_name='{index}'"
|
56
58
|
return f"select table_name, index_name, 1-any_value(non_unique) as is_unique, any_value(index_type) as index_type, any_value(index_comment) as index_note from information_schema.statistics where table_schema='{self.db}' {query_table} group by index_name;"
|
57
|
-
def sql_index_keys(self, index):
|
59
|
+
def sql_index_keys(self, table, index):
|
58
60
|
"""
|
59
61
|
require:
|
60
|
-
index_name, column_name, index_offset, column_note
|
62
|
+
table_name, index_name, column_name, index_offset, column_note
|
61
63
|
"""
|
62
|
-
return f"select index_name, column_name, seq_in_index as index_offset, comment as column_note from information_schema.statistics where table_name='
|
64
|
+
return f"select table_name, index_name, column_name, seq_in_index as index_offset, comment as column_note from information_schema.statistics where table_name='{table}' and table_schema='{self.db}' and index_name = '{index}' order by seq_in_index asc;"
|
63
65
|
|
64
66
|
pass
|
65
67
|
def build(argv, conf):
|
@@ -52,29 +52,31 @@ class Db(SimpleDv):
|
|
52
52
|
"""
|
53
53
|
query_table = ""
|
54
54
|
if table is not None:
|
55
|
-
query_table = f" and t.table_name = '{table}'"
|
56
|
-
return f"select t.table_name as table_name, tc.comments as table_note from all_tables t inner join all_tab_comments tc on t.table_name=tc.table_name where t.owner='{self.user.upper()}' {query_table}
|
55
|
+
query_table = f" and t.table_name = '{table.upper()}'"
|
56
|
+
return f"select t.table_name as table_name, tc.comments as table_note from all_tables t inner join all_tab_comments tc on t.table_name=tc.table_name where t.owner='{self.user.upper()}' {query_table}"
|
57
57
|
def sql_columns(self, table):
|
58
58
|
"""
|
59
59
|
require:
|
60
60
|
table_name, column_name, column_type, column_default, nullable, column_offset, column_note
|
61
61
|
"""
|
62
|
-
return f"select c.table_name as table_name, c.column_name as column_name, c.data_type|| '(' ||c.data_length||','||c.data_precision||','||c.data_scale||')' as column_type, c.data_default as column_default, c.nullable as nullable, c.column_id as column_offset, cc.comments as column_note from all_tab_columns c inner join all_col_comments cc on c.column_name=cc.column_name and c.table_name=cc.table_name where c.table_name='{table}' order by c.column_id asc
|
63
|
-
def sql_indexes(self, table=None):
|
62
|
+
return f"select c.table_name as table_name, c.column_name as column_name, c.data_type|| '(' ||c.data_length||','||c.data_precision||','||c.data_scale||')' as column_type, c.data_default as column_default, c.nullable as nullable, c.column_id as column_offset, cc.comments as column_note from all_tab_columns c inner join all_col_comments cc on c.column_name=cc.column_name and c.table_name=cc.table_name where c.table_name='{table.upper()}' order by c.column_id asc"
|
63
|
+
def sql_indexes(self, table=None, index=None):
|
64
64
|
"""
|
65
65
|
require:
|
66
66
|
table_name, index_name, is_unique, index_type, index_note
|
67
67
|
"""
|
68
68
|
query_table = ""
|
69
69
|
if table is not None:
|
70
|
-
query_table = f" and table_name = '{table}'"
|
71
|
-
|
72
|
-
|
70
|
+
query_table = f" and table_name = '{table.upper()}'"
|
71
|
+
if index is not None:
|
72
|
+
query_table+= f" and index_name='{index.upper()}'"
|
73
|
+
return f"select table_name, index_name, case uniqueness when 'UNIQUE' then 1 else 0 end as is_unique, index_type, '' as index_note from all_indexes where owner = '{self.user.upper()}'{query_table}"
|
74
|
+
def sql_index_keys(self, table, index):
|
73
75
|
"""
|
74
76
|
require:
|
75
|
-
index_name, column_name, index_offset, column_note
|
77
|
+
table_name, index_name, column_name, index_offset, column_note
|
76
78
|
"""
|
77
|
-
return f"select index_name, column_name, column_position as index_offset, '' as note from all_ind_columns where index_name='{index}' order by column_position asc
|
79
|
+
return f"select table_name, index_name, column_name, column_position as index_offset, '' as note from all_ind_columns where index_name='{index.upper()}' and table_name='{table.upper()}' order by column_position asc"
|
78
80
|
|
79
81
|
pass
|
80
82
|
def build(argv, conf):
|
@@ -20,8 +20,10 @@ def deal_item(item, conf):
|
|
20
20
|
def deal_key(it, conf):
|
21
21
|
data_keys = xf.g(conf, data_keys=[])
|
22
22
|
tmp = {}
|
23
|
+
#print(f"[TESTZ] conf: {conf}, it: {it}")
|
23
24
|
for i in range(min(len(it), len(data_keys))):
|
24
25
|
tmp[data_keys[i]] = it[i]
|
26
|
+
#print(f"[TESTZ] tmp: {tmp}")
|
25
27
|
sql_key = tmp['sql_key']
|
26
28
|
sql_def = tmp['sql_def']
|
27
29
|
py_key = xf.g(tmp, py_key=None)
|
@@ -31,11 +33,12 @@ def deal_key(it, conf):
|
|
31
33
|
xf.g(conf, vars=[]).append(sql_key+" "+sql_def)
|
32
34
|
def makes(datas, data_keys = "sql_key,sql_def,py_key".split(",")):
|
33
35
|
if type(datas)==dict:
|
34
|
-
rst = [make(v, k) for k,v in datas.items()]
|
36
|
+
rst = [make(v, k, py_name = k) for k,v in datas.items()]
|
35
37
|
else:
|
36
38
|
rst = [make(it) for it in datas]
|
37
39
|
return rst
|
38
|
-
def make(data, table=None, data_keys = "sql_key,sql_def,py_key".split(",")):
|
40
|
+
def make(data, table=None, data_keys = "sql_key,sql_def,py_key".split(","), py_name=None):
|
41
|
+
#print(f"[TESTZ] MARK: {data}")
|
39
42
|
"""
|
40
43
|
从配置中生成建表语句,删表语句和orm对象
|
41
44
|
输入:
|
@@ -75,13 +78,16 @@ def make(data, table=None, data_keys = "sql_key,sql_def,py_key".split(",")):
|
|
75
78
|
elif type(data) == dict:
|
76
79
|
data = dict2list(data)
|
77
80
|
conf = {}
|
78
|
-
xf.s(conf, sql_before = [], sql_after = [], sql_delete_before=[], sql_delete_after=[],auto_translate=True,table=table,keys=[],py2sqls={},query_keys=None, data_keys = data_keys, vars=[])
|
81
|
+
xf.s(conf, sql_before = [], sql_after = [], sql_delete_before=[], sql_delete_after=[],auto_translate=True,table=table,keys=[],py2sqls={},query_keys=None, data_keys = data_keys, vars=[], py_name = py_name)
|
79
82
|
for it in data:
|
80
83
|
if len(it)==1 and type(it[0]) in (list, tuple):
|
81
84
|
deal_item(it[0], conf)
|
82
85
|
else:
|
83
86
|
deal_key(it, conf)
|
84
87
|
table = xf.g(conf, table=table)
|
88
|
+
py_name = xf.g(conf, py_name = py_name)
|
89
|
+
if py_name is None:
|
90
|
+
py_name = table
|
85
91
|
vars = xf.g(conf, vars = [])
|
86
92
|
vars = ",".join(vars)
|
87
93
|
assert table is not None
|
@@ -93,7 +99,7 @@ def make(data, table=None, data_keys = "sql_key,sql_def,py_key".split(",")):
|
|
93
99
|
sqls_del = sqls[2]+[sql_del]+sqls[3]
|
94
100
|
sqls = [sqls_crt, sqls_del]
|
95
101
|
sqls = [(";\n".join(k)+";").replace(";;",";") for k in sqls]
|
96
|
-
obj = TableObject(*xf.g(conf, keys=[], table=table, py2sqls = None, query_keys=None,auto_translate=True), sql_create = sqls[0], sql_delete = sqls[1])
|
102
|
+
obj = TableObject(*xf.g(conf, keys=[], table=table, py2sqls = None, query_keys=None,auto_translate=True), sql_create = sqls[0], sql_delete = sqls[1], py_name = py_name)
|
97
103
|
return sqls, obj
|
98
104
|
|
99
105
|
pass
|
@@ -108,10 +114,13 @@ class TableObject(Base):
|
|
108
114
|
auto_translate:
|
109
115
|
对于没有在py2sqls自定义映射的表字段,是否自动转换(py|autoTran<=>auto_tran|sql)
|
110
116
|
"""
|
111
|
-
def init(self, keys, table=None, py2sqls=None, query_keys=None, auto_translate=True, dv = None, sql_create=None, sql_delete=None):
|
117
|
+
def init(self, keys, table=None, py2sqls=None, query_keys=None, auto_translate=True, dv = None, sql_create=None, sql_delete=None, py_name = None):
|
112
118
|
if table is None:
|
113
119
|
table = tls.lower(self.__class__.__name__)
|
114
120
|
self.table = table
|
121
|
+
if py_name is None:
|
122
|
+
py_name = table
|
123
|
+
self.py_name = py_name
|
115
124
|
if py2sqls is None:
|
116
125
|
py2sqls = {}
|
117
126
|
if type(py2sqls) in (list, tuple):
|
@@ -139,6 +148,7 @@ class TableObject(Base):
|
|
139
148
|
self.sql_delete = sql_delete
|
140
149
|
def create(self, dv=None):
|
141
150
|
assert self.sql_create is not None
|
151
|
+
#print(f"[TESTZ] sql_create: {self.sql_create}")
|
142
152
|
dv = self.rdv(dv)
|
143
153
|
dv.executes(self.sql_create)
|
144
154
|
def delete(self, dv=None):
|
@@ -153,7 +163,7 @@ class TableObject(Base):
|
|
153
163
|
if hasattr(obj, k):
|
154
164
|
tmp[k] = getattr(obj, k)
|
155
165
|
obj = tmp
|
156
|
-
obj = {self.py2sqls[k]:v for k,v in obj.items()}
|
166
|
+
obj = {self.py2sqls[k]:v for k,v in obj.items() if k in self.py2sqls}
|
157
167
|
return obj
|
158
168
|
def toPy(self, obj):
|
159
169
|
if type(obj)!=dict:
|
@@ -171,21 +181,42 @@ class TableObject(Base):
|
|
171
181
|
return dv
|
172
182
|
def query(self, sql, dv=None, sql2py=True):
|
173
183
|
dv=self.rdv(dv)
|
174
|
-
rst = dv.query(sql)
|
184
|
+
rst = dv.query(sql, as_map=1)
|
175
185
|
if sql2py:
|
176
186
|
rst = [self.sql2py(it) for it in rst]
|
177
187
|
return rst
|
178
188
|
def queryAll(self, dv=None, sql2py=True):
|
179
189
|
sql = f"select * from {self.table};"
|
180
190
|
return self.query(sql, dv, sql2py)
|
181
|
-
def
|
191
|
+
def filterSql(self, obj):
|
192
|
+
if type(obj)!=dict:
|
193
|
+
tmp = {}
|
194
|
+
for k in self.py2sqls:
|
195
|
+
if hasattr(obj, k):
|
196
|
+
tmp[k] = getattr(obj, k)
|
197
|
+
obj = tmp
|
198
|
+
obj = {k:v for k,v in obj.items() if k in self.keys}
|
199
|
+
return obj
|
200
|
+
def save(self, obj, dv=None, py2sql = True, commit=False, check = True):
|
182
201
|
dv = self.rdv(dv)
|
183
202
|
if type(obj) not in [list, tuple]:
|
184
203
|
obj = [obj]
|
185
204
|
if py2sql:
|
186
205
|
obj = [self.toSql(k) for k in obj]
|
187
|
-
|
206
|
+
else:
|
207
|
+
obj = [self.filterSql(k) for k in obj]
|
208
|
+
query_keys = self.query_keys
|
209
|
+
if not check:
|
210
|
+
query_keys = None
|
211
|
+
_ = [dv.insert_or_update(k, self.table, query_keys) for k in obj]
|
188
212
|
if commit:
|
189
|
-
dv.execute("commit
|
213
|
+
dv.execute("commit")
|
190
214
|
return _
|
215
|
+
def clean(self, dv=None,commit = False):
|
216
|
+
dv = self.rdv(dv)
|
217
|
+
dv.execute(f"delete from {self.table}")
|
218
|
+
if commit:
|
219
|
+
dv.execute("commit")
|
220
|
+
|
221
|
+
|
191
222
|
|
@@ -4,6 +4,7 @@ import sys,os
|
|
4
4
|
from .basez import SimpleDv, fetch
|
5
5
|
from .structz import CMD
|
6
6
|
from buildz import xf,fz
|
7
|
+
from buildz.db import tls
|
7
8
|
class Db(SimpleDv):
|
8
9
|
# func to impl:
|
9
10
|
def to_list(self, rst):
|
@@ -38,7 +39,7 @@ class Db(SimpleDv):
|
|
38
39
|
if table is not None:
|
39
40
|
query_table = f" and name = '{table}'"
|
40
41
|
return f"select name as table_name, '' as table_note from sqlite_master where type='table' {query_table};"
|
41
|
-
def sql_indexes(self, table=None):
|
42
|
+
def sql_indexes(self, table=None, index=None):
|
42
43
|
"""
|
43
44
|
require:
|
44
45
|
table_name, index_name, is_unique, index_type, index_note
|
@@ -46,6 +47,8 @@ class Db(SimpleDv):
|
|
46
47
|
query_table = ""
|
47
48
|
if table is not None:
|
48
49
|
query_table = f" and tbl_name = '{table}'"
|
50
|
+
if index is not None:
|
51
|
+
query_table+= f" and name='{index}'"
|
49
52
|
return f"select tbl_name as table_name, name as index_name, -1 as is_unique, '?' as index_type, '' as index_note from sqlite_master where type='index' {query_table};"
|
50
53
|
def columns(self, table, as_map=None):
|
51
54
|
"""
|
@@ -62,18 +65,18 @@ class Db(SimpleDv):
|
|
62
65
|
rst.append(tmp)
|
63
66
|
rst = self.out_list_sqlite3(rst, as_map)
|
64
67
|
return rst
|
65
|
-
def index_keys(self, index, as_map=None):
|
68
|
+
def index_keys(self, table, index, as_map=None):
|
66
69
|
"""
|
67
70
|
require:
|
68
|
-
index_name, column_name, index_offset, column_note
|
71
|
+
table_name, index_name, column_name, index_offset, column_note
|
69
72
|
"""
|
70
73
|
rst = self.query(f"PRAGMA index_info({index})", as_map=0)
|
71
74
|
dts = rst[1:]
|
72
|
-
keys = "index_name, column_name, index_offset, column_note".split(", ")
|
75
|
+
keys = "table_name, index_name, column_name, index_offset, column_note".split(", ")
|
73
76
|
rst = [keys]
|
74
77
|
for dt in dts:
|
75
78
|
seqno, cid, name = dt
|
76
|
-
tmp = [index, name, seqno, '']
|
79
|
+
tmp = [table, index, name, seqno, '']
|
77
80
|
rst.append(tmp)
|
78
81
|
return self.out_list_sqlite3(rst, as_map)
|
79
82
|
def out_list_sqlite3(self, query_result, as_map=None):
|
@@ -87,6 +90,21 @@ class Db(SimpleDv):
|
|
87
90
|
rst = rst[1:]
|
88
91
|
rst = [{k:v for k,v in zip(keys, dt)} for dt in rst]
|
89
92
|
return rst
|
93
|
+
def insert_or_update(self, maps, table, keys = None):
|
94
|
+
if type(maps)!=dict:
|
95
|
+
maps = maps.__dict__
|
96
|
+
if keys is None:
|
97
|
+
keys = []
|
98
|
+
if type(keys) not in (list, tuple):
|
99
|
+
keys = [keys]
|
100
|
+
kvs = [[k,tls.py2sql(v)] for k,v in maps.items()]
|
101
|
+
sets = [f"{k}={v}" for k,v in kvs]
|
102
|
+
sets = ",".join(sets)
|
103
|
+
ks = ",".join([kv[0] for kv in kvs])
|
104
|
+
vs = ",".join([str(kv[1]) for kv in kvs])
|
105
|
+
sql = f"insert into {table}({ks}) values({vs}) ON CONFLICT DO UPDATE SET {sets}"
|
106
|
+
#print(f"[TESTZ] sql: {sql}")
|
107
|
+
return self.execute(sql)
|
90
108
|
|
91
109
|
pass
|
92
110
|
def build(argv, conf):
|
@@ -192,13 +192,11 @@ class CMD:
|
|
192
192
|
try:
|
193
193
|
tab = s.split(" ")[0]
|
194
194
|
if tab in "tables,indexes,columns,index_keys".split(","):
|
195
|
-
_val = None
|
196
195
|
_arr = s.split(" ")
|
197
196
|
_arr = [_k.strip() for _k in _arr if _k.strip()!=""]
|
198
|
-
|
199
|
-
_val = _arr[1]
|
197
|
+
_arr = _arr[1:]
|
200
198
|
_fc = getattr(self.dv, tab)
|
201
|
-
rst = self.exec(_fc,
|
199
|
+
rst = self.exec(_fc, *_arr)
|
202
200
|
show_query = True
|
203
201
|
elif self.dv.check_query(s):
|
204
202
|
rst = self.query(s)
|
@@ -33,7 +33,7 @@ class EncapeData(Base):
|
|
33
33
|
包含data id对应的配置,配置文件id,配置文件对象
|
34
34
|
[object.test, call, ]
|
35
35
|
"""
|
36
|
-
def __init__(self, data, conf=None, local = False, type = None, src = None, info = None, confs = None):
|
36
|
+
def __init__(self, data, conf=None, local = False, type = None, src = None, info = None, confs = None, force_new = False):
|
37
37
|
"""
|
38
38
|
data: 配置数据
|
39
39
|
conf: 配置数据对应的配置文件的管理器
|
@@ -42,6 +42,7 @@ class EncapeData(Base):
|
|
42
42
|
src: 源对象,配置数据生成的对象调用conf获取对象,会有这个字段,目前只有object会放这个字段,其他要么透传要么不传
|
43
43
|
info: 额外的调用信息,目前只有object会用到里面的id字段,作为单例额外输入
|
44
44
|
"""
|
45
|
+
self.force_new = force_new
|
45
46
|
if typez(data)==dict:
|
46
47
|
pid = xf.g1(data, parent=None, template=None, temp=None)
|
47
48
|
if pid is not None:
|
@@ -77,8 +78,8 @@ class EncapeData(Base):
|
|
77
78
|
self.info = info
|
78
79
|
def deal(self, remove = False):
|
79
80
|
if self.conf is None:
|
80
|
-
return self.confs.get(self, src = self.src, info=self.info, remove = remove)
|
81
|
-
return self.conf.get(self, src = self.src, info=self.info, remove = remove)
|
81
|
+
return self.confs.get(self, src = self.src, info=self.info, remove = remove, force_new = self.force_new)
|
82
|
+
return self.conf.get(self, src = self.src, info=self.info, remove = remove, force_new = self.force_new)
|
82
83
|
|
83
84
|
|
84
85
|
pass
|