buildz 0.6.29__tar.gz → 0.6.31__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.29/buildz.egg-info → buildz-0.6.31}/PKG-INFO +3 -1
- {buildz-0.6.29 → buildz-0.6.31}/README.md +2 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/__init__.py +1 -1
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/dv/__init__.py +2 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/dv/basez.py +1 -1
- buildz-0.6.31/buildz/db/dv/sqlite3z.py +35 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/dv/structz.py +8 -3
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/runz.py +32 -10
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/wrap.py +3 -2
- buildz-0.6.31/buildz/tz/test_xfind.py +74 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/time/timez.py +1 -1
- buildz-0.6.31/buildz/tz/xfind.py +232 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/mapz.py +22 -0
- {buildz-0.6.29 → buildz-0.6.31/buildz.egg-info}/PKG-INFO +3 -1
- {buildz-0.6.29 → buildz-0.6.31}/buildz.egg-info/SOURCES.txt +3 -0
- {buildz-0.6.29 → buildz-0.6.31}/setup.py +1 -1
- {buildz-0.6.29 → buildz-0.6.31}/LICENSE +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/MANIFEST.in +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/__main__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/argx.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/cache.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/config.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/dbs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/deal_list.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/deal_type.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/defs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/factory.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/init.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/log.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/request.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/run.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/save.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/test/res/cache/cache.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/test/res/config/base.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/test/res/config/config.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/test/res/data/fp.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/test/res/data/item1.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/test/res/data/item2.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/test/res/data/test.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/test/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/test/xtest.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/auto/verify.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/cmd.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/__main__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/dv/clickhousez.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/dv/lib/readme +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/dv/mysqlz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/dv/oraclez.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/dv/postgresqlz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/install.txt +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/db/run.conf +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/ioc/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/ioc/help.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/myers/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/myers/help.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/conf/ioc.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/conf/main.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/conf/myers.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/conf/search.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/conf/xf.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/help/default.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/help/ioc.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/help/myers.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/help/search.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/help/xf.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/res/test.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/search/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/search/help.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/xf/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/demo/xf/help.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/fz/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/fz/dirz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/fz/fhs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/fz/fio.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/fz/lsf.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/html/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/html/test/demo.html +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/html/test/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/html/xml.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/init.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc/conf.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc/confs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc/decorator.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc/single.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/branch.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/call.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/calls.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/demo.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/env.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/init.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/ioc.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/iocf.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/join.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/list.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/map.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/mcall.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/obj.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/ovar.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/ref.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/refs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/val.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/var.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/ioc/ioc_deal/xfile.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/pyz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tools.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/log.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/myers_diff.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/time/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/tio/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/tio/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/tio/getch.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/tio/lx.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/tio/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/tz/tio/win.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/__main__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/code.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/code_modify.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/copy_old.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/file.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/buffer.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/lr.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/reval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/spc.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/deal/strz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/item.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/mg.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/buffer.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/listmapz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/listz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/lr.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/lrval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/mapz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/nextz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/reval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/setz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/spc.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/spt.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/strz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/strz_new.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/deal/strz_old.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/exp.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/item.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/mg.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/pos.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/loaderz/test1.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/read.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/readz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/stack.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/write.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/writer/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/writer/deal/strz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/writer/mg.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz/xf/xargs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.6.29 → buildz-0.6.31}/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.31
|
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/11/11:
|
38
|
+
新增buildz.tz.xfind,对json做查询用的,功能类似jsonpath,自己实现的原因是好玩,以及不想为了用jsonpath去学对应的语法
|
37
39
|
2024/10/08:
|
38
40
|
增强auto配置功能,在auto增加数据库使用的封装,后续考虑出文档。。。如果有时间
|
39
41
|
2024/09/25:
|
@@ -9,6 +9,8 @@ def build(dv,*a,**b):
|
|
9
9
|
from .clickhousez import build as _build
|
10
10
|
elif dv == "postgresql":
|
11
11
|
from .postgresqlz import build as _build
|
12
|
+
elif dv == "sqlite3":
|
13
|
+
from .sqlite3z import build as _build
|
12
14
|
else:
|
13
15
|
raise Exception(f"not impl dv: {dv}")
|
14
16
|
return _build(*a, **b)
|
@@ -51,7 +51,7 @@ class SimpleDv(ItDv):
|
|
51
51
|
def query(self, sql, vals=()):
|
52
52
|
# return list, first row is key
|
53
53
|
tmp = self.cursor.execute(sql, vals)
|
54
|
-
print("[TESTZ] exe:",tmp)
|
54
|
+
#print("[TESTZ] exe:",tmp)
|
55
55
|
rst = self.cursor.fetchall()
|
56
56
|
return self.to_list(rst)
|
57
57
|
def execute(self, sql, vals=()):
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
import sqlite3
|
3
|
+
import sys
|
4
|
+
from .basez import SimpleDv, fetch
|
5
|
+
from .structz import CMD
|
6
|
+
class Db(SimpleDv):
|
7
|
+
# func to impl:
|
8
|
+
def to_list(self, rst):
|
9
|
+
rows = self.cursor.description
|
10
|
+
keys = [k[0].lower() for k in rows]
|
11
|
+
result = []
|
12
|
+
result.append(keys)
|
13
|
+
if rst is None or len(rst)==0:
|
14
|
+
return result
|
15
|
+
result += rst
|
16
|
+
return result
|
17
|
+
def new_con(self):
|
18
|
+
return sqlite3.connect(self.fp)
|
19
|
+
def new_cursor(self):
|
20
|
+
return self.con.cursor()
|
21
|
+
def __init__(self, fp):
|
22
|
+
self.con = None
|
23
|
+
self.cursor = None
|
24
|
+
self.init(fp)
|
25
|
+
def init(self, fp):
|
26
|
+
self.fp = fp
|
27
|
+
|
28
|
+
pass
|
29
|
+
def build(argv, conf):
|
30
|
+
dv = Db(argv[0])
|
31
|
+
return dv
|
32
|
+
def buildbk(argv, conf):
|
33
|
+
return CMD(make(argv, conf))
|
34
|
+
|
35
|
+
pass
|
@@ -125,13 +125,18 @@ class CMD:
|
|
125
125
|
with open(fp, 'rb') as f:
|
126
126
|
s = f.read().decode(cd)
|
127
127
|
arr = s.split(";")
|
128
|
+
n = len(arr)
|
129
|
+
print(f"[TESTZ] done fread {fp}: {len(arr)}")
|
130
|
+
i=0
|
128
131
|
for sql in arr:
|
129
|
-
if sql.strip() == "":
|
132
|
+
if sql.strip() == "" or sql.strip()[:2]=="--":
|
130
133
|
continue
|
131
134
|
_sql = sql+";"
|
132
|
-
self.s_print("sql:", _sql)
|
135
|
+
#self.s_print("sql:", _sql)
|
136
|
+
#print(f"[TESTZ] sql: {_sql}")
|
133
137
|
tmp = self.execute(_sql)
|
134
|
-
self.s_print(tmp)
|
138
|
+
#self.s_print(tmp)
|
139
|
+
i+=1
|
135
140
|
self.s_print("done source", fp)
|
136
141
|
elif s.split(" ")[0] == "export":
|
137
142
|
# export filepath encoding sql;
|
@@ -17,13 +17,28 @@ if __name__ == "__main__":
|
|
17
17
|
else:
|
18
18
|
from .dv import build
|
19
19
|
from .dv.structz import CMD
|
20
|
+
|
21
|
+
pass
|
22
|
+
def cmd(conf):
|
23
|
+
obj = conf
|
24
|
+
dv = obj['dv']
|
25
|
+
db_url = obj['db']
|
26
|
+
db_url = obj[db_url]
|
27
|
+
user = xf.g(obj,user=None)
|
28
|
+
pwd = xf.g(obj,pwd=None)
|
29
|
+
src = obj['src']
|
30
|
+
out = obj['out']
|
31
|
+
cmd = CMD(build(dv, [db_url, user, pwd], obj))
|
32
|
+
return cmd
|
33
|
+
|
34
|
+
pass
|
20
35
|
def test(fp):
|
21
36
|
obj = xf.loads(xf.fread(fp))
|
22
37
|
dv = obj['dv']
|
23
38
|
db_url = obj['db']
|
24
39
|
db_url = obj[db_url]
|
25
|
-
user = obj
|
26
|
-
pwd = obj
|
40
|
+
user = xf.g(obj,user=None)
|
41
|
+
pwd = xf.g(obj,pwd=None)
|
27
42
|
src = obj['src']
|
28
43
|
out = obj['out']
|
29
44
|
sqls = xf.fread(src)
|
@@ -43,15 +58,22 @@ def test(fp):
|
|
43
58
|
cmd.dv.begin()
|
44
59
|
print("[TESTZ] A")
|
45
60
|
with open(out, 'wb') as f:
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
61
|
+
f.write(b"[START SQL]\n\n")
|
62
|
+
for sql in sqls:
|
63
|
+
if sql.strip()=="":
|
64
|
+
continue
|
65
|
+
if sql.strip() == "exit":
|
66
|
+
break
|
67
|
+
print("[TESTZ] B")
|
68
|
+
curr=time.time()
|
69
|
+
rst = cmd.single(sql)
|
70
|
+
cost = time.time()-curr
|
71
|
+
print(f"[TESTZ] Cost: {cost} sec")
|
72
|
+
rst += f"time cost: {cost} sec\n"
|
73
|
+
with open(out, 'ab') as f:
|
54
74
|
f.write(rst.encode("utf-8"))
|
75
|
+
with open(out, 'ab') as f:
|
76
|
+
f.write(b"\n[DONE SQL]")
|
55
77
|
cmd.close()
|
56
78
|
|
57
79
|
pass
|
@@ -17,7 +17,7 @@ def pkg(fp):
|
|
17
17
|
__import__(fp)
|
18
18
|
|
19
19
|
pass
|
20
|
-
def imports(dp, pts, pfx=""):
|
20
|
+
def imports(dp, pts=".*\.py$", pfx=""):
|
21
21
|
"""
|
22
22
|
find filepath by dirpath(dp) and pattern(pts),
|
23
23
|
import:
|
@@ -31,4 +31,5 @@ def imports(dp, pts, pfx=""):
|
|
31
31
|
for fp in fps:
|
32
32
|
pkg(fp)
|
33
33
|
|
34
|
-
pass
|
34
|
+
pass
|
35
|
+
includes=imports
|
@@ -0,0 +1,74 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
from buildz.tz import xfind as sh
|
4
|
+
from buildz import xf
|
5
|
+
s = r"""
|
6
|
+
name=zero
|
7
|
+
age=12000
|
8
|
+
datas = [
|
9
|
+
{
|
10
|
+
name=notebook
|
11
|
+
price=6500
|
12
|
+
power=200w
|
13
|
+
contains=[buildz,pyz]
|
14
|
+
}
|
15
|
+
{
|
16
|
+
name=buildz
|
17
|
+
function='easy coding'
|
18
|
+
contains = [
|
19
|
+
{
|
20
|
+
name=xf
|
21
|
+
function = 'json-like easier format'
|
22
|
+
}
|
23
|
+
{
|
24
|
+
name=ioc
|
25
|
+
function = 'factory build items by profile or wrap'
|
26
|
+
}
|
27
|
+
{
|
28
|
+
name=auto
|
29
|
+
function = 'easy to make auto functions'
|
30
|
+
}
|
31
|
+
]
|
32
|
+
}
|
33
|
+
{
|
34
|
+
name=pyz
|
35
|
+
function = 'tools'
|
36
|
+
contains = [
|
37
|
+
{
|
38
|
+
name=nxf
|
39
|
+
function = 'safely transfer data by devices'
|
40
|
+
}
|
41
|
+
{
|
42
|
+
name=netx
|
43
|
+
function = 'both side RPC support'
|
44
|
+
}
|
45
|
+
{
|
46
|
+
name=logz
|
47
|
+
function = 'log recoding'
|
48
|
+
}
|
49
|
+
]
|
50
|
+
}
|
51
|
+
]
|
52
|
+
"""
|
53
|
+
"""
|
54
|
+
|
55
|
+
python test_xfind.py
|
56
|
+
|
57
|
+
"""
|
58
|
+
data = xf.loads(s)
|
59
|
+
print(xf.dumps(data, format=1))
|
60
|
+
node = sh.Node.parse(data)
|
61
|
+
arr = sh.SearchArray.single(node)
|
62
|
+
pts = r"""
|
63
|
+
[
|
64
|
+
[
|
65
|
+
or,
|
66
|
+
(mkv, name, nxf)
|
67
|
+
(mkv, name, xf)
|
68
|
+
]
|
69
|
+
[re, key, "[f].*"]
|
70
|
+
]
|
71
|
+
"""
|
72
|
+
arr = arr.searchs_dfc(pts)
|
73
|
+
print("Rst:", arr.datas())
|
74
|
+
print("Vals:", arr.vals())
|
@@ -0,0 +1,232 @@
|
|
1
|
+
from .. import xf
|
2
|
+
from ..base import Base
|
3
|
+
import re
|
4
|
+
|
5
|
+
def default_update(node, args, up):
|
6
|
+
"""
|
7
|
+
默认args是patterns, deep形式
|
8
|
+
"""
|
9
|
+
deep = args[1]
|
10
|
+
if deep == 0:
|
11
|
+
return None
|
12
|
+
if deep>0:
|
13
|
+
deep -= 1
|
14
|
+
return [args[0], deep]
|
15
|
+
|
16
|
+
pass
|
17
|
+
class DefaultSearch:
|
18
|
+
"""
|
19
|
+
默认args是patterns, deep形式
|
20
|
+
patterns:
|
21
|
+
[or, [re, key, 'a.*'], ['=', key, ]]
|
22
|
+
"""
|
23
|
+
def __init__(self):
|
24
|
+
self.opts = {}
|
25
|
+
self.opts['or'] = self.fc_or
|
26
|
+
self.opts['and'] = self.fc_and
|
27
|
+
self.opts['not'] = self.fc_not
|
28
|
+
self.opts['xor'] = self.fc_xor
|
29
|
+
self.sets(("=", "eq"), self.make_logic(lambda data, val:data==val))
|
30
|
+
self.sets((">", "bg"), self.make_logic(lambda data, val:data>val))
|
31
|
+
self.sets((">=", "be"), self.make_logic(lambda data, val:data>=val))
|
32
|
+
self.sets(("<", "lt"), self.make_logic(lambda data, val:data<val))
|
33
|
+
self.sets(("<=", "le"), self.make_logic(lambda data, val:data<=val))
|
34
|
+
self.sets("in", self.make_logic(lambda data, val:data in val))
|
35
|
+
self.sets("re", self.make_logic(lambda data, val:len(re.findall(val, str(data)))>0))
|
36
|
+
self.sets(["$", "eval"], self.fc_eval)
|
37
|
+
self.sets(["*", "exec"], self.fc_exec)
|
38
|
+
self.sets("mkv", self.fc_mkv)
|
39
|
+
def fc_eval(self, node, args, curr):
|
40
|
+
cmd = args[0]
|
41
|
+
return eval(cmd)
|
42
|
+
def fc_exec(self, node, args, curr):
|
43
|
+
"""
|
44
|
+
exec(cmd)
|
45
|
+
return self.rst
|
46
|
+
"""
|
47
|
+
cmd = args[0]
|
48
|
+
exec(cmd)
|
49
|
+
return self.rst
|
50
|
+
def sets(self, keys, fc):
|
51
|
+
if type(keys) not in (list, tuple):
|
52
|
+
keys = [keys]
|
53
|
+
for k in keys:
|
54
|
+
self.opts[k] = fc
|
55
|
+
def fc_mkv(self, node, args, curr):
|
56
|
+
data = node.data
|
57
|
+
if type(data)!=dict:
|
58
|
+
return False
|
59
|
+
key = args[0]
|
60
|
+
val = args[1]
|
61
|
+
if key not in data:
|
62
|
+
return False
|
63
|
+
return data[key].to_data()==val
|
64
|
+
@staticmethod
|
65
|
+
def fetch_judge_by(judge_by, node, curr):
|
66
|
+
#print(f"[TESTZ] fetch_judge_by: {judge_by}, {node}, {curr}")
|
67
|
+
if judge_by in ('key', 'k'):
|
68
|
+
if curr is None:
|
69
|
+
return None, False
|
70
|
+
key = curr[0]
|
71
|
+
return key,True
|
72
|
+
elif judge_by in ('index', 'i'):
|
73
|
+
if curr is None:
|
74
|
+
return None, False
|
75
|
+
key = curr[0]
|
76
|
+
return int(key),True
|
77
|
+
elif judge_by in ('value', 'val', 'v'):
|
78
|
+
return node.to_data(),True
|
79
|
+
else:
|
80
|
+
assert False, f"unsupport judge_by: {judge_by}"
|
81
|
+
def make_logic(self, fc):
|
82
|
+
def check(node, args, curr):
|
83
|
+
judge_by = args[0]
|
84
|
+
data, get = self.fetch_judge_by(judge_by, node, curr)
|
85
|
+
if not get:
|
86
|
+
return False
|
87
|
+
val = args[1]
|
88
|
+
return fc(data, val)
|
89
|
+
return check
|
90
|
+
def fc_xor(self, node, args, curr):
|
91
|
+
a = self.fc(node, args[0], curr)
|
92
|
+
b = self.fc(node, args[1], curr)
|
93
|
+
return a^b
|
94
|
+
def fc_not(self, node, args, curr):
|
95
|
+
return not self.fc(node, args[0], curr)
|
96
|
+
def fc_or(self, node, args, curr):
|
97
|
+
for pattern in args:
|
98
|
+
if self.fc(node, pattern, curr):
|
99
|
+
return True
|
100
|
+
return False
|
101
|
+
def fc_and(self, node, args, curr):
|
102
|
+
for pattern in args:
|
103
|
+
if not self.fc(node, pattern, curr):
|
104
|
+
return False
|
105
|
+
return True
|
106
|
+
def fc(self, node, args, curr):
|
107
|
+
opt = args[0]
|
108
|
+
#print(f"[TESTZ] opt: {opt}, {type(opt)}, args: {args}")
|
109
|
+
assert opt in self.opts, f"unkonwn opt {opt} in {list(self.opts.keys())}"
|
110
|
+
return self.opts[opt](node, args[1:], curr)
|
111
|
+
def __call__(self, node, args, curr):
|
112
|
+
args = args[0]
|
113
|
+
jg = self.fc(node, args, curr)
|
114
|
+
if not jg:
|
115
|
+
return []
|
116
|
+
return [[curr, node]]
|
117
|
+
|
118
|
+
pass
|
119
|
+
default_search = DefaultSearch()
|
120
|
+
class SearchArray(Base):
|
121
|
+
@staticmethod
|
122
|
+
def parse(data):
|
123
|
+
return SearchArray.single(Node.parse(data))
|
124
|
+
@staticmethod
|
125
|
+
def single(data):
|
126
|
+
return SearchArray([[None, data]])
|
127
|
+
def str(self):
|
128
|
+
return str(self.arr)
|
129
|
+
def init(self, arr):
|
130
|
+
self.arr = arr
|
131
|
+
self.size = len(arr)
|
132
|
+
def expand(self, ks):
|
133
|
+
if ks is None:
|
134
|
+
return []
|
135
|
+
return self.expand(ks[1]) + [ks[0]]
|
136
|
+
def datas(self):
|
137
|
+
rst = [[self.expand(ks), nd.to_data()] for ks, nd in self.arr]
|
138
|
+
return rst
|
139
|
+
def vals(self):
|
140
|
+
rst = [nd.to_data() for ks, nd in self.arr]
|
141
|
+
return rst
|
142
|
+
def keys(self):
|
143
|
+
rst = [self.expand(ks) for ks, nd in self.arr]
|
144
|
+
return rst
|
145
|
+
def searchs(self, args):
|
146
|
+
"""
|
147
|
+
array.searchs((patterns, fc_search, fc_update), (patterns, fc_search, fc_update), ...)
|
148
|
+
"""
|
149
|
+
rst = self.arr
|
150
|
+
for patterns, fc_search, fc_update in args:
|
151
|
+
tmp = []
|
152
|
+
for ks, node in rst:
|
153
|
+
tmp += node.search(patterns, fc_search, fc_update, ks)
|
154
|
+
rst = tmp
|
155
|
+
return SearchArray(rst)
|
156
|
+
def searchs_fc(self, args, fc_search=None, fc_update=None):
|
157
|
+
rst = self.arr
|
158
|
+
if type(args)==str:
|
159
|
+
args = xf.loads(args)
|
160
|
+
for patterns in args:
|
161
|
+
tmp = []
|
162
|
+
for ks, node in rst:
|
163
|
+
tmp += node.search(patterns, fc_search, fc_update, ks)
|
164
|
+
rst = tmp
|
165
|
+
return SearchArray(rst)
|
166
|
+
def searchs_dfc(self, args, deep=-1, fc_search=None, fc_update=None):
|
167
|
+
rst = self.arr
|
168
|
+
if type(args)==str:
|
169
|
+
args = xf.loads(args)
|
170
|
+
for patterns in args:
|
171
|
+
tmp = []
|
172
|
+
for ks, node in rst:
|
173
|
+
tmp += node.search([patterns,deep], fc_search, fc_update, ks)
|
174
|
+
rst = tmp
|
175
|
+
return SearchArray(rst)
|
176
|
+
|
177
|
+
pass
|
178
|
+
class Node:
|
179
|
+
@staticmethod
|
180
|
+
def parse(data):
|
181
|
+
if type(data)==list:
|
182
|
+
rst = [Node.parse(it) for it in data]
|
183
|
+
elif type(data)==dict:
|
184
|
+
rst = {k:Node.parse(v) for k,v in data.items()}
|
185
|
+
else:
|
186
|
+
rst = data
|
187
|
+
return Node(rst)
|
188
|
+
def to_data(self):
|
189
|
+
if type(self.data)==list:
|
190
|
+
rst = [it.to_data() for it in self.data]
|
191
|
+
elif type(self.data)==dict:
|
192
|
+
rst = {k:v.to_data() for k,v in self.data.items()}
|
193
|
+
else:
|
194
|
+
rst = self.data
|
195
|
+
return rst
|
196
|
+
def __str__(self):
|
197
|
+
return xf.dumps(self.to_data())
|
198
|
+
def __repr__(self):
|
199
|
+
return self.__str__()
|
200
|
+
def __init__(self, data):
|
201
|
+
self.data = data
|
202
|
+
def search(self, args, fc_search=None, fc_update = None, curr = None):
|
203
|
+
"""
|
204
|
+
args: 匹配条件
|
205
|
+
返回:
|
206
|
+
SearchArray(rst)
|
207
|
+
rst: [
|
208
|
+
[keys, val],
|
209
|
+
...
|
210
|
+
]
|
211
|
+
SearchArray(node).searchs(...)
|
212
|
+
"""
|
213
|
+
if fc_update is None:
|
214
|
+
fc_update = default_update
|
215
|
+
if fc_search is None:
|
216
|
+
fc_search = default_search
|
217
|
+
args = fc_update(self, args, curr)
|
218
|
+
if args is None:
|
219
|
+
return []
|
220
|
+
rst = fc_search(self, args, curr)
|
221
|
+
if type(self.data)==list:
|
222
|
+
for i in range(len(self.data)):
|
223
|
+
it = self.data[i]
|
224
|
+
crr = [i, curr]
|
225
|
+
rst += it.search(args, fc_search, fc_update, crr)
|
226
|
+
elif type(self.data)==dict:
|
227
|
+
for k,v in self.data.items():
|
228
|
+
crr = [k, curr]
|
229
|
+
rst += v.search(args, fc_search, fc_update, crr)
|
230
|
+
return rst
|
231
|
+
|
232
|
+
pass
|
@@ -75,6 +75,15 @@ def g(obj, **maps):
|
|
75
75
|
return rst
|
76
76
|
|
77
77
|
pass
|
78
|
+
def c(obj, **maps):
|
79
|
+
for k in maps:
|
80
|
+
v = maps[k]
|
81
|
+
if k not in obj:
|
82
|
+
return False
|
83
|
+
vo = obj[k]
|
84
|
+
if vo!=v:
|
85
|
+
return False
|
86
|
+
return True
|
78
87
|
def gs(obj, **maps):
|
79
88
|
rst = []
|
80
89
|
for k in maps:
|
@@ -222,6 +231,19 @@ def deep_fill(src, target, replace=1):
|
|
222
231
|
return deep_update(target, src, replace)
|
223
232
|
|
224
233
|
pass
|
234
|
+
def deep_clone(obj):
|
235
|
+
if type(obj)==list:
|
236
|
+
rst = []
|
237
|
+
for it in obj:
|
238
|
+
rst.append(deep_clone(it))
|
239
|
+
elif type(obj)==dict:
|
240
|
+
rst = {}
|
241
|
+
for k,v in obj.items():
|
242
|
+
rst[k] = deep_clone(v)
|
243
|
+
else:
|
244
|
+
rst = obj
|
245
|
+
return rst
|
246
|
+
pass
|
225
247
|
fill=deep_fill
|
226
248
|
|
227
249
|
def maps(**kv):
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: buildz
|
3
|
-
Version: 0.6.
|
3
|
+
Version: 0.6.31
|
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/11/11:
|
38
|
+
新增buildz.tz.xfind,对json做查询用的,功能类似jsonpath,自己实现的原因是好玩,以及不想为了用jsonpath去学对应的语法
|
37
39
|
2024/10/08:
|
38
40
|
增强auto配置功能,在auto增加数据库使用的封装,后续考虑出文档。。。如果有时间
|
39
41
|
2024/09/25:
|
@@ -47,6 +47,7 @@ buildz/db/dv/clickhousez.py
|
|
47
47
|
buildz/db/dv/mysqlz.py
|
48
48
|
buildz/db/dv/oraclez.py
|
49
49
|
buildz/db/dv/postgresqlz.py
|
50
|
+
buildz/db/dv/sqlite3z.py
|
50
51
|
buildz/db/dv/structz.py
|
51
52
|
buildz/db/dv/lib/readme
|
52
53
|
buildz/demo/test.py
|
@@ -136,6 +137,8 @@ buildz/ioc/ioc_deal/conf/xfile_lists.js
|
|
136
137
|
buildz/tz/__init__.py
|
137
138
|
buildz/tz/log.py
|
138
139
|
buildz/tz/myers_diff.py
|
140
|
+
buildz/tz/test_xfind.py
|
141
|
+
buildz/tz/xfind.py
|
139
142
|
buildz/tz/time/__init__.py
|
140
143
|
buildz/tz/time/timez.py
|
141
144
|
buildz/tz/tio/__init__.py
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|