buildz 0.6.29__tar.gz → 0.6.30__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.30}/PKG-INFO +3 -1
- {buildz-0.6.29 → buildz-0.6.30}/README.md +2 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/wrap.py +3 -2
- buildz-0.6.30/buildz/tz/test_xfind.py +74 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/time/timez.py +1 -1
- buildz-0.6.30/buildz/tz/xfind.py +232 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/mapz.py +22 -0
- {buildz-0.6.29 → buildz-0.6.30/buildz.egg-info}/PKG-INFO +3 -1
- {buildz-0.6.29 → buildz-0.6.30}/buildz.egg-info/SOURCES.txt +2 -0
- {buildz-0.6.29 → buildz-0.6.30}/setup.py +1 -1
- {buildz-0.6.29 → buildz-0.6.30}/LICENSE +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/MANIFEST.in +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/__main__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/argx.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/cache.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/config.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/dbs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/deal_list.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/deal_type.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/defs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/factory.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/init.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/log.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/request.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/run.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/save.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/test/res/cache/cache.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/test/res/config/base.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/test/res/config/config.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/test/res/data/fp.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/test/res/data/item1.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/test/res/data/item2.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/test/res/data/test.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/test/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/test/xtest.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/auto/verify.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/cmd.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/__main__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/dv/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/dv/basez.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/dv/clickhousez.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/dv/lib/readme +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/dv/mysqlz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/dv/oraclez.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/dv/postgresqlz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/dv/structz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/install.txt +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/run.conf +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/db/runz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/ioc/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/ioc/help.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/myers/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/myers/help.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/conf/ioc.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/conf/main.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/conf/myers.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/conf/search.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/conf/xf.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/help/default.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/help/ioc.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/help/myers.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/help/search.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/help/xf.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/res/test.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/search/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/search/help.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/xf/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/demo/xf/help.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/fz/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/fz/dirz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/fz/fhs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/fz/fio.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/fz/lsf.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/html/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/html/test/demo.html +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/html/test/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/html/xml.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/init.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc/conf.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc/confs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc/decorator.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc/single.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/branch.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/call.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/calls.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/deal.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/demo.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/env.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/init.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/ioc.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/iocf.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/join.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/list.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/map.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/mcall.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/obj.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/ovar.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/ref.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/refs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/val.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/var.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/ioc/ioc_deal/xfile.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/pyz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tools.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/log.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/myers_diff.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/time/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/tio/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/tio/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/tio/getch.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/tio/lx.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/tio/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/tz/tio/win.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/__init__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/__main__.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/code.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/code_modify.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/copy_old.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/file.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/buffer.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/lr.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/reval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/spc.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/deal/strz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/item.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/mg.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/buffer.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/listmapz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/listz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/lr.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/lrval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/mapz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/nextz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/reval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/setz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/spc.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/spt.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/strz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/strz_new.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/deal/strz_old.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/exp.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/item.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/mg.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/pos.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/test.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/loaderz/test1.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/read.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/readz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/stack.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/write.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/writer/base.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/writer/deal/strz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/writer/mg.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz/xf/xargs.py +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.6.29 → buildz-0.6.30}/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.30
|
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:
|
@@ -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.30
|
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:
|
@@ -136,6 +136,8 @@ buildz/ioc/ioc_deal/conf/xfile_lists.js
|
|
136
136
|
buildz/tz/__init__.py
|
137
137
|
buildz/tz/log.py
|
138
138
|
buildz/tz/myers_diff.py
|
139
|
+
buildz/tz/test_xfind.py
|
140
|
+
buildz/tz/xfind.py
|
139
141
|
buildz/tz/time/__init__.py
|
140
142
|
buildz/tz/time/timez.py
|
141
143
|
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
|
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
|
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
|