buildz 0.6.10__tar.gz → 0.6.12__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.10/buildz.egg-info → buildz-0.6.12}/PKG-INFO +9 -1
- {buildz-0.6.10 → buildz-0.6.12}/README.md +8 -0
- buildz-0.6.12/buildz/auto/__init__.py +1 -0
- buildz-0.6.12/buildz/auto/cache.py +88 -0
- buildz-0.6.12/buildz/auto/deal.py +40 -0
- buildz-0.6.12/buildz/auto/deal_type.py +33 -0
- buildz-0.6.12/buildz/auto/factory.py +28 -0
- buildz-0.6.12/buildz/auto/init.py +12 -0
- buildz-0.6.12/buildz/auto/log.py +35 -0
- buildz-0.6.12/buildz/auto/run.py +20 -0
- buildz-0.6.12/buildz/auto/save.py +21 -0
- buildz-0.6.12/buildz/auto/test/test.js +27 -0
- buildz-0.6.12/buildz/auto/test/test.py +24 -0
- buildz-0.6.12/buildz/auto/test/tmp.js +5 -0
- buildz-0.6.12/buildz/auto/verify.py +72 -0
- buildz-0.6.12/buildz/html/__init__.py +1 -0
- buildz-0.6.12/buildz/html/test.py +8 -0
- buildz-0.6.12/buildz/html/xml.py +119 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/__init__.py +1 -1
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/base.py +2 -1
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/init.py +5 -2
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc/base.py +2 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc/conf.py +13 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc/confs.py +51 -4
- buildz-0.6.12/buildz/ioc/ioc/decorator.py +44 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc/single.py +3 -1
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/base.py +20 -4
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/deals.js +5 -0
- buildz-0.6.12/buildz/ioc/ioc_deal/conf/refs_lists.js +31 -0
- buildz-0.6.12/buildz/ioc/ioc_deal/init.py +4 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/obj.py +147 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/ref.py +5 -2
- buildz-0.6.12/buildz/ioc/ioc_deal/refs.py +62 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/var.py +17 -0
- buildz-0.6.12/buildz/ioc/wrap.py +34 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/pyz.py +4 -1
- {buildz-0.6.10 → buildz-0.6.12}/buildz/tools.py +1 -1
- {buildz-0.6.10 → buildz-0.6.12/buildz.egg-info}/PKG-INFO +9 -1
- {buildz-0.6.10 → buildz-0.6.12}/buildz.egg-info/SOURCES.txt +21 -0
- {buildz-0.6.10 → buildz-0.6.12}/setup.py +1 -1
- {buildz-0.6.10 → buildz-0.6.12}/LICENSE +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/MANIFEST.in +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/__init__.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/__main__.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/argx.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/base.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/cmd.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/__main__.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/basez.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/clickhousez.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/lib/readme +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/mysqlz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/oraclez.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/dv/structz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/install.txt +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/run.conf +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/db/runz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/ioc/deal.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/ioc/help.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/myers/deal.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/myers/help.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/ioc.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/main.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/myers.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/search.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/conf/xf.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/default.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/ioc.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/myers.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/search.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/help/xf.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/res/test.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/search/deal.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/search/help.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/test.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/xf/deal.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/demo/xf/help.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/__init__.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/dirz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/fhs.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/fio.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/fz/lsf.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/branch.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/call.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/calls.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/deal.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/demo.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/env.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/ioc.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/iocf.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/join.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/list.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/map.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/mcall.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/ovar.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/val.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/ioc/ioc_deal/xfile.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/__init__.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/myers_diff.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/__init__.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/base.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/getch.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/lx.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/test.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/tz/tio/win.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/__init__.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/__main__.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/code.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/code_modify.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/copy_old.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/file.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/base.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/buffer.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/lr.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/reval.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/spc.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/deal/strz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/item.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/mg.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/base.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/buffer.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/listmapz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/listz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/lr.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/lrval.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/mapz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/nextz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/reval.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/setz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/spc.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/spt.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz_new.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz_old.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/exp.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/item.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/mg.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/pos.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/test.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/loaderz/test1.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/mapz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/read.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/readz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/stack.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/write.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/base.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/deal/strz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/writer/mg.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz/xf/xargs.py +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.6.10 → buildz-0.6.12}/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.12
|
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
|
@@ -31,6 +31,14 @@ License-File: LICENSE
|
|
31
31
|
运行python -m buildz查看帮助
|
32
32
|
|
33
33
|
持续更新中。。。
|
34
|
+
2024/09/24:
|
35
|
+
增加模块html:html页面解析
|
36
|
+
增加模块auto:自动化调用
|
37
|
+
|
38
|
+
2024/09/09
|
39
|
+
ioc:
|
40
|
+
加修饰器
|
41
|
+
加配置refs
|
34
42
|
|
35
43
|
PS: 对比了下json.loads(修改了下json的scanner.py,让它在纯python下运行,不然json.loads会更快)和目前的xf.loads(buildz.xf.readz.loads)的速度,xf.loads比json.loads慢7倍,可能是读字符串更频繁,方法调用更多(为了代码更结构化和容易修改),其实有一版更慢(buildz.xf.read.loads,废弃代码,后面看情况删掉),慢100倍,因为只考虑结构化,没考虑列表增减开销
|
36
44
|
|
@@ -18,6 +18,14 @@
|
|
18
18
|
运行python -m buildz查看帮助
|
19
19
|
|
20
20
|
持续更新中。。。
|
21
|
+
2024/09/24:
|
22
|
+
增加模块html:html页面解析
|
23
|
+
增加模块auto:自动化调用
|
24
|
+
|
25
|
+
2024/09/09
|
26
|
+
ioc:
|
27
|
+
加修饰器
|
28
|
+
加配置refs
|
21
29
|
|
22
30
|
PS: 对比了下json.loads(修改了下json的scanner.py,让它在纯python下运行,不然json.loads会更快)和目前的xf.loads(buildz.xf.readz.loads)的速度,xf.loads比json.loads慢7倍,可能是读字符串更频繁,方法调用更多(为了代码更结构化和容易修改),其实有一版更慢(buildz.xf.read.loads,废弃代码,后面看情况删掉),慢100倍,因为只考虑结构化,没考虑列表增减开销
|
23
31
|
|
@@ -0,0 +1 @@
|
|
1
|
+
from .run import Run
|
@@ -0,0 +1,88 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
from .. import xf, fz
|
4
|
+
from .. import ioc
|
5
|
+
from ..base import Base
|
6
|
+
from ..ioc import wrap
|
7
|
+
import os,re
|
8
|
+
|
9
|
+
@wrap.obj(id="cache_modify")
|
10
|
+
@wrap.obj_args("ref, cache", "ref, log")
|
11
|
+
class Update(Base):
|
12
|
+
"""
|
13
|
+
#{}
|
14
|
+
"""
|
15
|
+
def init(self, cache, log, pt = "(#\{([^\{\}]*)\})"):
|
16
|
+
self.cache = cache
|
17
|
+
self.log = log
|
18
|
+
self.pt = pt
|
19
|
+
def call(self, s):
|
20
|
+
if type(s)==dict:
|
21
|
+
rst = {}
|
22
|
+
for k,v in s.items():
|
23
|
+
k,v = self(k), self(v)
|
24
|
+
rst[k] = v
|
25
|
+
return rst
|
26
|
+
elif type(s)==list:
|
27
|
+
rst = []
|
28
|
+
for v in s:
|
29
|
+
v = self(v)
|
30
|
+
rst.append(v)
|
31
|
+
return rst
|
32
|
+
elif type(s)!=str:
|
33
|
+
return s
|
34
|
+
rst = re.findall(self.pt, s)
|
35
|
+
for match, key in rst:
|
36
|
+
val = self.cache.get(key)
|
37
|
+
if val is None:
|
38
|
+
err = f"'{key}' not found in cache"
|
39
|
+
self.log.error(err)
|
40
|
+
raise Exception(err)
|
41
|
+
s = s.replace(match, val)
|
42
|
+
return s
|
43
|
+
|
44
|
+
pass
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
@wrap.obj(id="cache.save")
|
49
|
+
@wrap.obj_args("ref, cache", "ref, log")
|
50
|
+
class Save(Base):
|
51
|
+
def init(self, cache, log):
|
52
|
+
self.cache = cache
|
53
|
+
self.log = log
|
54
|
+
def call(self, maps, fp):
|
55
|
+
fp = xf.get(maps, "cache.save", None)
|
56
|
+
self.log.debug(f"try save cache to '{fp}'")
|
57
|
+
if fp is None:
|
58
|
+
return
|
59
|
+
fz.makefdir(fp)
|
60
|
+
rst = self.cache.data
|
61
|
+
rs = xf.dumps(rst, format=True)
|
62
|
+
fz.write(rs, fp, 'w')
|
63
|
+
return True
|
64
|
+
|
65
|
+
pass
|
66
|
+
@wrap.obj(id="cache")
|
67
|
+
@wrap.obj_args("ref, log")
|
68
|
+
class Cache(Base):
|
69
|
+
def get(self, key):
|
70
|
+
ks = key.split(".")
|
71
|
+
return xf.gets(self.data, ks)
|
72
|
+
def set(self, key, val):
|
73
|
+
xf.sets(self.data, key.split("."), val)
|
74
|
+
def remove(self, key):
|
75
|
+
xf.removes(self.data, key.split("."))
|
76
|
+
def init(self, log):
|
77
|
+
self.log = log
|
78
|
+
self.data = {}
|
79
|
+
def call(self, maps, fp):
|
80
|
+
fp = xf.g(maps, cache="cache.js")
|
81
|
+
data = {}
|
82
|
+
if os.path.isfile(fp):
|
83
|
+
self.log.info(f"load cache from {fp}")
|
84
|
+
data = xf.loadf(fp)
|
85
|
+
self.data.update(data)
|
86
|
+
return True
|
87
|
+
|
88
|
+
pass
|
@@ -0,0 +1,40 @@
|
|
1
|
+
#
|
2
|
+
from .. import xf
|
3
|
+
from .. import ioc
|
4
|
+
from ..base import Base
|
5
|
+
from ..ioc import wrap
|
6
|
+
|
7
|
+
@wrap.obj(id="list")
|
8
|
+
@wrap.obj_args("[ref, [env, buildz.auto.deal, auto.deal], [ref, autoz.deal]]", "[ioc, confs]")
|
9
|
+
class List(Base):
|
10
|
+
def init(self, deal, mg):
|
11
|
+
self.deal = deal
|
12
|
+
self.mg = mg
|
13
|
+
def call(self, maps, fp):
|
14
|
+
datas = xf.g(maps, datas = [])
|
15
|
+
sdeal = xf.g(maps, deal = None)
|
16
|
+
deal_obj = xf.g(maps, deal_obj = None)
|
17
|
+
deal = self.deal
|
18
|
+
if deal_obj is not None:
|
19
|
+
deal = deal_obj
|
20
|
+
elif sdeal is not None:
|
21
|
+
deal = self.mg.get(sdeal)
|
22
|
+
for data in datas:
|
23
|
+
if not deal(data):
|
24
|
+
return False
|
25
|
+
return True
|
26
|
+
|
27
|
+
pass
|
28
|
+
#wrap.add_datas("[(env, env.buildz.auto.deal), buildz.auto.deal, auto.deal]")
|
29
|
+
@wrap.obj_args("[env, buildz.auto.deal, auto.deal]")
|
30
|
+
@wrap.obj(id="autoz.deal")
|
31
|
+
class DfDeal(Base):
|
32
|
+
def init(self, id):
|
33
|
+
self.id = id
|
34
|
+
def call(self, data):
|
35
|
+
print(f"[ERROR] implement obj with id '{self.id}' by yourself")
|
36
|
+
|
37
|
+
pass
|
38
|
+
|
39
|
+
|
40
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
|
2
|
+
from .. import xf
|
3
|
+
from .. import ioc
|
4
|
+
from ..base import Base
|
5
|
+
from ..ioc import wrap
|
6
|
+
class DealType(Base):
|
7
|
+
def init(self, deals = {}):
|
8
|
+
print(f"deals: {deals}")
|
9
|
+
self.deals = deals
|
10
|
+
def call(self, data):
|
11
|
+
_type = xf.g(data, type = None)
|
12
|
+
return self.deals[_type](data)
|
13
|
+
|
14
|
+
pass
|
15
|
+
|
16
|
+
@wrap.obj(id = "def.deal.type")
|
17
|
+
@wrap.obj_args("ioc, confs")
|
18
|
+
class DefDeal(Base):
|
19
|
+
def init(self, mg):
|
20
|
+
self.mg = mg
|
21
|
+
def call(self, maps, fp):
|
22
|
+
conf = xf.get(maps, "def.deal", None)
|
23
|
+
factory_id = xf.g(conf, factory="buildz.auto.deal.fill")
|
24
|
+
factory = self.mg.get(factory_id)
|
25
|
+
data = xf.g(conf, types={})
|
26
|
+
rst = {}
|
27
|
+
for _type, calls in data.items():
|
28
|
+
rst[_type] = factory(calls)
|
29
|
+
obj = DealType(rst)
|
30
|
+
maps['deal_obj'] = obj
|
31
|
+
return True
|
32
|
+
|
33
|
+
pass
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
from .. import xf
|
4
|
+
from .. import ioc
|
5
|
+
from ..base import Base
|
6
|
+
from ..ioc import wrap
|
7
|
+
|
8
|
+
class DeepFc(Base):
|
9
|
+
def init(self, fcs):
|
10
|
+
self.fc = fcs[0]
|
11
|
+
if len(fcs)>1:
|
12
|
+
self.next = DeepFc(fcs[1:])
|
13
|
+
else:
|
14
|
+
self.next = None
|
15
|
+
def call(self, data):
|
16
|
+
return self.fc(data, self.next)
|
17
|
+
|
18
|
+
pass
|
19
|
+
@wrap.obj(id = "buildz.auto.deal.fill")
|
20
|
+
@wrap.obj_args("ioc, confs")
|
21
|
+
class Fill(Base):
|
22
|
+
def init(self, mg):
|
23
|
+
self.mg = mg
|
24
|
+
def call(self, orders):
|
25
|
+
fcs = [self.mg.get(id) for id in orders]
|
26
|
+
return DeepFc(fcs)
|
27
|
+
|
28
|
+
pass
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
|
4
|
+
from .. import xf
|
5
|
+
from .. import ioc
|
6
|
+
from ..base import Base
|
7
|
+
from ..ioc import wrap
|
8
|
+
from ..tools import *
|
9
|
+
import time, sys
|
10
|
+
@wrap.obj(id="log")
|
11
|
+
class Log(Base):
|
12
|
+
def init(self):
|
13
|
+
self.fp = None
|
14
|
+
def log(self, level, *args):
|
15
|
+
args = [str(k) for k in args]
|
16
|
+
msg = " ".join(args)
|
17
|
+
date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
|
18
|
+
msg = f"[{level}] {date} {msg}\n"
|
19
|
+
sys.stdout.write(msg)
|
20
|
+
if self.fp is not None:
|
21
|
+
fp = time.strftime(self.fp)
|
22
|
+
fz.makefdir(fp)
|
23
|
+
fz.write(msg.encode("utf-8"), fp, 'ab')
|
24
|
+
def info(self, *args):
|
25
|
+
self.log("INFO", *args)
|
26
|
+
def debug(self, *args):
|
27
|
+
self.log("DEBUG", *args)
|
28
|
+
def error(self, *args):
|
29
|
+
self.log("ERROR", *args)
|
30
|
+
def call(self, maps, fp):
|
31
|
+
fp = xf.g(maps, log = None)
|
32
|
+
self.fp = fp
|
33
|
+
return True
|
34
|
+
|
35
|
+
pass
|
@@ -0,0 +1,20 @@
|
|
1
|
+
from .. import xf
|
2
|
+
from .. import ioc
|
3
|
+
from ..base import Base
|
4
|
+
from . import init
|
5
|
+
class Run(Base):
|
6
|
+
def init(self, fps=None):
|
7
|
+
mg = ioc.build()
|
8
|
+
if fps is not None:
|
9
|
+
mg.add_fps(fps)
|
10
|
+
self.mg = mg
|
11
|
+
def call(self, fp):
|
12
|
+
maps = xf.loadf(fp)
|
13
|
+
calls = xf.g(maps, calls = [])
|
14
|
+
for deal in calls:
|
15
|
+
fc = self.mg.get(deal)
|
16
|
+
if not fc(maps, fp):
|
17
|
+
break
|
18
|
+
|
19
|
+
pass
|
20
|
+
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#
|
2
|
+
from ..tools import *
|
3
|
+
from buildz.ioc import wrap
|
4
|
+
@wrap.obj(id="save")
|
5
|
+
@wrap.obj_args("ref, cache", "ref, log", "ref, cache_modify")
|
6
|
+
class Save(Base):
|
7
|
+
def init(self, cache, log, upd):
|
8
|
+
self.cache = cache
|
9
|
+
self.log = log
|
10
|
+
self.upd = upd
|
11
|
+
def call(self, data, fc=None):
|
12
|
+
data = self.upd(data)
|
13
|
+
save = xf.g(data, save={})
|
14
|
+
for k, v in save.items():
|
15
|
+
val = xf.gets(data, v.split("."))
|
16
|
+
self.cache.set(k, val)
|
17
|
+
return True
|
18
|
+
|
19
|
+
pass
|
20
|
+
|
21
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
calls: [log, cache, def.deal.type, list, cache.save]
|
2
|
+
cache: tmp.js
|
3
|
+
cache.save: tmp.js
|
4
|
+
log: log.txt
|
5
|
+
def.deal: {
|
6
|
+
types: {
|
7
|
+
http.get: [request, verify, save]
|
8
|
+
}
|
9
|
+
}
|
10
|
+
datas: [
|
11
|
+
{
|
12
|
+
url: test
|
13
|
+
type: http.get
|
14
|
+
data: {
|
15
|
+
url: "#{test.url}"
|
16
|
+
}
|
17
|
+
save: {
|
18
|
+
test.url: data.url
|
19
|
+
}
|
20
|
+
result: {
|
21
|
+
code: 0.99
|
22
|
+
}
|
23
|
+
verify: [
|
24
|
+
[code, [">", 1]]
|
25
|
+
]
|
26
|
+
}
|
27
|
+
]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#coding=utf-8
|
2
|
+
from buildz.tools import *
|
3
|
+
from buildz.ioc import wrap
|
4
|
+
@wrap.obj(id="request")
|
5
|
+
@wrap.obj_args("ref, log", "ref, cache_modify")
|
6
|
+
class Req(Base):
|
7
|
+
def init(self, log, upd):
|
8
|
+
self.upd = upd
|
9
|
+
self.log = log
|
10
|
+
def call(self, data, fc=None):
|
11
|
+
data = self.upd(data)
|
12
|
+
self.log.debug(f"test data: {data}")
|
13
|
+
if fc is not None:
|
14
|
+
return fc(data)
|
15
|
+
return True
|
16
|
+
|
17
|
+
pass
|
18
|
+
from buildz.auto import Run
|
19
|
+
def test():
|
20
|
+
Run()("test.js")
|
21
|
+
|
22
|
+
pass
|
23
|
+
pyz.lc(locals(), test)
|
24
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
from ..tools import *
|
4
|
+
from buildz.ioc import wrap
|
5
|
+
@wrap.obj(id="verify")
|
6
|
+
@wrap.obj_args("ref, log", "ref, cache_modify")
|
7
|
+
class Verify(Base):
|
8
|
+
def init(self, log, upd):
|
9
|
+
self.log = log
|
10
|
+
self.upd = upd
|
11
|
+
def match(self, v, val, result, data):
|
12
|
+
tp,v = v
|
13
|
+
if tp=="=":
|
14
|
+
if type(val)!=type(v):
|
15
|
+
if type(v)==str:
|
16
|
+
val = str(val)
|
17
|
+
elif type(val)==str:
|
18
|
+
v = str(v)
|
19
|
+
return val==v
|
20
|
+
elif tp == ">":
|
21
|
+
if val is None:
|
22
|
+
return False
|
23
|
+
if type(val)==str:
|
24
|
+
val = float(val)
|
25
|
+
return val>v
|
26
|
+
elif tp=="<":
|
27
|
+
if val is None:
|
28
|
+
return False
|
29
|
+
if type(val)==str:
|
30
|
+
val = float(val)
|
31
|
+
return val<v
|
32
|
+
elif tp==">=":
|
33
|
+
if val is None:
|
34
|
+
return False
|
35
|
+
if type(val)==str:
|
36
|
+
val = float(val)
|
37
|
+
return val>=v
|
38
|
+
elif tp=="<=":
|
39
|
+
if val is None:
|
40
|
+
return False
|
41
|
+
if type(val)==str:
|
42
|
+
val = float(val)
|
43
|
+
return val<=v
|
44
|
+
elif tp=="sh":
|
45
|
+
return eval(v)
|
46
|
+
else:
|
47
|
+
err = f"not impl match type: {tp}"
|
48
|
+
self.log.error(err)
|
49
|
+
raise Exception(err)
|
50
|
+
def call(self, data, fc=None):
|
51
|
+
result = self.upd(xf.g(data, result = {}))
|
52
|
+
vs = self.upd(xf.g(data, verify=[]))
|
53
|
+
for k,v in vs:
|
54
|
+
bak = v
|
55
|
+
if k == "$":
|
56
|
+
if type(v)!=list:
|
57
|
+
v = ["sh", v]
|
58
|
+
val = None
|
59
|
+
else:
|
60
|
+
val = xf.gets(result, k.split("."))
|
61
|
+
if type(v)!=list:
|
62
|
+
v = ["=", v]
|
63
|
+
jg = self.match(v, val, result, data)
|
64
|
+
if not jg:
|
65
|
+
self.log.error(f"verify failed in {data}, key: '{k}', match: {bak}, val: {val}")
|
66
|
+
return False
|
67
|
+
if fc is None:
|
68
|
+
return True
|
69
|
+
return fc(data)
|
70
|
+
|
71
|
+
pass
|
72
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
from .xml import parse
|
@@ -0,0 +1,119 @@
|
|
1
|
+
from html.parser import HTMLParser
|
2
|
+
from .. import xf
|
3
|
+
import re
|
4
|
+
class HtmlTag:
|
5
|
+
def to_maps(self):
|
6
|
+
nodes = [n.to_maps() for n in self.nodes]
|
7
|
+
rst = {'tag': self.tag, 'attrs': self.attrs, 'texts': self.texts, 'text': self.text, 'childs': nodes}
|
8
|
+
return rst
|
9
|
+
def __str__(self):
|
10
|
+
return xf.dumps(self.to_maps())
|
11
|
+
def __repr__(self):
|
12
|
+
return self.__str__()
|
13
|
+
def match(self, val, pt):
|
14
|
+
if type(pt)==list:
|
15
|
+
tp = pt[0]
|
16
|
+
v = pt[1]
|
17
|
+
else:
|
18
|
+
tp = "="
|
19
|
+
v = pt
|
20
|
+
if tp == '>':
|
21
|
+
return val>v
|
22
|
+
elif tp == "<":
|
23
|
+
return val<v
|
24
|
+
elif tp == "=":
|
25
|
+
return val == v
|
26
|
+
elif tp == ">=":
|
27
|
+
return val>=v
|
28
|
+
elif tp=="<=":
|
29
|
+
return val<=v
|
30
|
+
elif tp == "re":
|
31
|
+
return (re.findall(v, val))>0
|
32
|
+
elif tp == 'sh':
|
33
|
+
#v.replace("${it}", val)
|
34
|
+
return eval(v)
|
35
|
+
else:
|
36
|
+
raise Exception(f"not impl match type: '{tp}'")
|
37
|
+
def check(self, maps):
|
38
|
+
#print(f"[TESTZ] check: {maps}, attrs: {self.attrs}")
|
39
|
+
for k,v in maps.items():
|
40
|
+
if k == 'tag':
|
41
|
+
if not self.match(self.tag, v):
|
42
|
+
return False
|
43
|
+
elif k == "$":
|
44
|
+
return self.match(None, ["sh", v])
|
45
|
+
else:
|
46
|
+
if k not in self.attrs or not self.match(self.attrs[k], v):
|
47
|
+
return False
|
48
|
+
return True
|
49
|
+
def __init__(self, tag, attrs=None):
|
50
|
+
self.tag = tag
|
51
|
+
if attrs is None:
|
52
|
+
attrs = {}
|
53
|
+
self.attrs = attrs
|
54
|
+
self.nodes = []
|
55
|
+
self.text = None
|
56
|
+
self.texts = []
|
57
|
+
def _search(self, rst, maps):
|
58
|
+
if self.check(maps):
|
59
|
+
rst.append(self)
|
60
|
+
for n in self.nodes:
|
61
|
+
n._search(rst, maps)
|
62
|
+
def searchs(self, **maps):
|
63
|
+
rst = []
|
64
|
+
self._search(rst, maps)
|
65
|
+
return rst
|
66
|
+
def tags(self, _tag):
|
67
|
+
return self.searchs(tag = _tag)
|
68
|
+
def finds(self, s):
|
69
|
+
rst = []
|
70
|
+
maps = xf.loads(s)
|
71
|
+
self._search(rst, maps)
|
72
|
+
return rst
|
73
|
+
def add_node(self, node):
|
74
|
+
self.nodes.append(node)
|
75
|
+
def add_text(self, text):
|
76
|
+
self.text = text
|
77
|
+
self.texts.append(text)
|
78
|
+
|
79
|
+
pass
|
80
|
+
|
81
|
+
class MyHTMLParser(HTMLParser):
|
82
|
+
def __init__(self):
|
83
|
+
super().__init__()
|
84
|
+
self.data = HtmlTag("document")
|
85
|
+
self.stacks = [self.data]
|
86
|
+
def handle_comment(self, data):
|
87
|
+
"处理注释,< !-- -->之间的文本"
|
88
|
+
pass
|
89
|
+
def handle_startendtag(self, tag, attrs):
|
90
|
+
"处理自己结束的标签,如< img />"
|
91
|
+
self.handle_starttag(tag, attrs)
|
92
|
+
self.handle_endtag(tag)
|
93
|
+
pass
|
94
|
+
def handle_starttag(self, tag, attrs):
|
95
|
+
"处理开始标签,比如< div>;这里的attrs获取到的是属性列表,属性以元组的方式展示"
|
96
|
+
attrs = {k:v for k,v in attrs}
|
97
|
+
tag = HtmlTag(tag, attrs)
|
98
|
+
self.stacks[-1].add_node(tag)
|
99
|
+
self.stacks.append(tag)
|
100
|
+
#print(f"Encountered a {tag} start tag")
|
101
|
+
#for attr, value in attrs:
|
102
|
+
# print(f" {attr} = {value}")
|
103
|
+
def handle_data(self, data):
|
104
|
+
self.stacks[-1].add_text(data)
|
105
|
+
"处理数据,标签之间的文本"
|
106
|
+
#print(f"----handle data in tags: {data}")
|
107
|
+
def handle_endtag(self, tag):
|
108
|
+
self.stacks.pop(-1)
|
109
|
+
"处理结束标签,比如< /div>"
|
110
|
+
#print(f"Encountered a {tag} end tag")
|
111
|
+
|
112
|
+
pass
|
113
|
+
|
114
|
+
def parse(text):
|
115
|
+
obj = MyHTMLParser()
|
116
|
+
obj.feed(text)
|
117
|
+
return obj.data
|
118
|
+
|
119
|
+
pass
|
@@ -1,9 +1,10 @@
|
|
1
1
|
#
|
2
2
|
|
3
3
|
from .ioc import confs
|
4
|
+
from .ioc.confs import ConfsList, Confs
|
4
5
|
from .ioc_deal.base import default_deals
|
5
|
-
|
6
|
-
def build(fp_init = None, add_default_deals = True):
|
6
|
+
from . import wrap
|
7
|
+
def build(fp_init = None, add_default_deals = True, add_wrap = True):
|
7
8
|
obj = confs.Confs()
|
8
9
|
if (fp_init is not None):
|
9
10
|
if type(fp_init)==dict:
|
@@ -12,6 +13,8 @@ def build(fp_init = None, add_default_deals = True):
|
|
12
13
|
obj.init_fp(fp_init)
|
13
14
|
if add_default_deals:
|
14
15
|
obj.add_fp(default_deals)
|
16
|
+
if add_wrap:
|
17
|
+
obj.add_decorator()
|
15
18
|
return obj
|
16
19
|
|
17
20
|
pass
|
@@ -174,6 +174,17 @@ class Conf(Base):
|
|
174
174
|
return obj
|
175
175
|
obj = self.confs.get_data(id, self.id, src=src, info = info)
|
176
176
|
return obj
|
177
|
+
def full_ids(self, local = True):
|
178
|
+
rst = []
|
179
|
+
arr = [self.datas]
|
180
|
+
if local:
|
181
|
+
arr.append(self.locals)
|
182
|
+
for datas in arr:
|
183
|
+
for id in datas:
|
184
|
+
gid = self.confs.gid(self.namespace, id)
|
185
|
+
item = [gid, id, self]
|
186
|
+
rst.append(item)
|
187
|
+
return rst
|
177
188
|
def get(self, *args, **maps):
|
178
189
|
return self.get_obj(*args, **maps)
|
179
190
|
def default_type(self):
|
@@ -182,6 +193,8 @@ class Conf(Base):
|
|
182
193
|
return self._default_type
|
183
194
|
def get_var(self, key, i = -1):
|
184
195
|
return self.confs.get_var(key, i)
|
196
|
+
def var_keys(self):
|
197
|
+
return self.confs.var_keys()
|
185
198
|
def push_var(self, key, val):
|
186
199
|
return self.confs.push_var(key,val)
|
187
200
|
def has_var(self, key):
|