buildz 0.6.12__tar.gz → 0.6.14__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.12/buildz.egg-info → buildz-0.6.14}/PKG-INFO +3 -1
- {buildz-0.6.12 → buildz-0.6.14}/README.md +2 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/cache.py +7 -4
- buildz-0.6.14/buildz/auto/config.py +34 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/deal_type.py +2 -1
- {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/init.py +1 -1
- {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/log.py +2 -0
- buildz-0.6.14/buildz/auto/request.py +131 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/run.py +4 -0
- buildz-0.6.14/buildz/auto/save.py +33 -0
- buildz-0.6.14/buildz/auto/test/cache.js +16 -0
- buildz-0.6.14/buildz/auto/test/config.js +10 -0
- buildz-0.6.14/buildz/auto/test/item1.js +16 -0
- buildz-0.6.14/buildz/auto/test/item2.js +15 -0
- buildz-0.6.14/buildz/auto/test/test.js +27 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/test/test.py +1 -1
- buildz-0.6.14/buildz/auto/verify.py +78 -0
- buildz-0.6.14/buildz/html/test/test.py +15 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/html/xml.py +65 -17
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/mapz.py +30 -5
- {buildz-0.6.12 → buildz-0.6.14/buildz.egg-info}/PKG-INFO +3 -1
- {buildz-0.6.12 → buildz-0.6.14}/buildz.egg-info/SOURCES.txt +7 -2
- {buildz-0.6.12 → buildz-0.6.14}/setup.py +1 -1
- buildz-0.6.12/buildz/auto/save.py +0 -21
- buildz-0.6.12/buildz/auto/test/test.js +0 -27
- buildz-0.6.12/buildz/auto/test/tmp.js +0 -5
- buildz-0.6.12/buildz/auto/verify.py +0 -72
- buildz-0.6.12/buildz/html/test.py +0 -8
- {buildz-0.6.12 → buildz-0.6.14}/LICENSE +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/MANIFEST.in +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/__init__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/__main__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/argx.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/__init__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/deal.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/auto/factory.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/base.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/cmd.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/__main__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/basez.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/clickhousez.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/lib/readme +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/mysqlz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/oraclez.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/dv/structz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/install.txt +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/run.conf +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/db/runz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/ioc/deal.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/ioc/help.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/myers/deal.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/myers/help.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/ioc.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/main.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/myers.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/search.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/conf/xf.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/default.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/ioc.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/myers.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/search.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/help/xf.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/res/test.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/search/deal.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/search/help.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/test.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/xf/deal.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/demo/xf/help.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/__init__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/dirz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/fhs.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/fio.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/fz/lsf.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/html/__init__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/__init__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/base.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/init.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/base.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/conf.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/confs.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/decorator.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc/single.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/base.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/branch.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/call.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/calls.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/deal.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/demo.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/env.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/init.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/ioc.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/iocf.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/join.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/list.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/map.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/mcall.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/obj.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/ovar.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/ref.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/refs.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/val.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/var.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/ioc_deal/xfile.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/ioc/wrap.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/pyz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/tools.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/__init__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/myers_diff.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/__init__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/base.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/getch.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/lx.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/test.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/tz/tio/win.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/__init__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/__main__.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/code.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/code_modify.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/copy_old.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/file.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/base.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/buffer.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/lr.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/reval.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/spc.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/deal/strz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/item.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/mg.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/base.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/buffer.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/listmapz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/listz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/lr.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/lrval.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/mapz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/nextz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/reval.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/setz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/spc.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/spt.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/strz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/strz_new.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/deal/strz_old.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/exp.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/item.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/mg.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/pos.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/test.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/loaderz/test1.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/read.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/readz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/stack.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/write.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/base.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/deal/strz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/writer/mg.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz/xf/xargs.py +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.6.12 → buildz-0.6.14}/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.14
|
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,8 @@ License-File: LICENSE
|
|
31
31
|
运行python -m buildz查看帮助
|
32
32
|
|
33
33
|
持续更新中。。。
|
34
|
+
2024/09/25:
|
35
|
+
修复bug,增强html的搜索功能,增强auto配置功能
|
34
36
|
2024/09/24:
|
35
37
|
增加模块html:html页面解析
|
36
38
|
增加模块auto:自动化调用
|
@@ -6,7 +6,7 @@ from ..base import Base
|
|
6
6
|
from ..ioc import wrap
|
7
7
|
import os,re
|
8
8
|
|
9
|
-
@wrap.obj(id="
|
9
|
+
@wrap.obj(id="cache.modify")
|
10
10
|
@wrap.obj_args("ref, cache", "ref, log")
|
11
11
|
class Update(Base):
|
12
12
|
"""
|
@@ -38,7 +38,10 @@ class Update(Base):
|
|
38
38
|
err = f"'{key}' not found in cache"
|
39
39
|
self.log.error(err)
|
40
40
|
raise Exception(err)
|
41
|
-
s
|
41
|
+
if s == match:
|
42
|
+
s = val
|
43
|
+
else:
|
44
|
+
s = s.replace(match, str(val))
|
42
45
|
return s
|
43
46
|
|
44
47
|
pass
|
@@ -53,8 +56,8 @@ class Save(Base):
|
|
53
56
|
self.log = log
|
54
57
|
def call(self, maps, fp):
|
55
58
|
fp = xf.get(maps, "cache.save", None)
|
56
|
-
self.log.debug(f"try save cache to '{fp}'")
|
57
59
|
if fp is None:
|
60
|
+
self.log.warn(f"cache not save cause 'cache.save' is None")
|
58
61
|
return
|
59
62
|
fz.makefdir(fp)
|
60
63
|
rst = self.cache.data
|
@@ -81,7 +84,7 @@ class Cache(Base):
|
|
81
84
|
data = {}
|
82
85
|
if os.path.isfile(fp):
|
83
86
|
self.log.info(f"load cache from {fp}")
|
84
|
-
data = xf.loadf(fp)
|
87
|
+
data = xf.flush_maps(xf.loadf(fp),visit_list=False)
|
85
88
|
self.data.update(data)
|
86
89
|
return True
|
87
90
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#
|
2
|
+
from .. import xf
|
3
|
+
from .. import ioc
|
4
|
+
from ..base import Base
|
5
|
+
from ..ioc import wrap
|
6
|
+
import os
|
7
|
+
@wrap.obj(id="buildz.auto.config.load")
|
8
|
+
class Config(Base):
|
9
|
+
def call(self, maps, fp):
|
10
|
+
configs = xf.g(maps, configs=[])
|
11
|
+
if type(configs)!=list:
|
12
|
+
configs = [configs]
|
13
|
+
for cfp in configs:
|
14
|
+
if not os.path.isfile(cfp):
|
15
|
+
self.log.error(f"config file not exist: {cfp}")
|
16
|
+
return False
|
17
|
+
dt = xf.loadf(cfp)
|
18
|
+
xf.fill(dt, maps, replace=0)
|
19
|
+
return True
|
20
|
+
|
21
|
+
pass
|
22
|
+
#wrap.add_datas("[(env, env.buildz.auto.deal), buildz.auto.deal, auto.deal]")
|
23
|
+
@wrap.obj_args("[env, buildz.auto.deal, auto.deal]")
|
24
|
+
@wrap.obj(id="autoz.deal")
|
25
|
+
class DfDeal(Base):
|
26
|
+
def init(self, id):
|
27
|
+
self.id = id
|
28
|
+
def call(self, data):
|
29
|
+
print(f"[ERROR] implement obj with id '{self.id}' by yourself")
|
30
|
+
|
31
|
+
pass
|
32
|
+
|
33
|
+
|
34
|
+
|
@@ -5,9 +5,10 @@ from ..base import Base
|
|
5
5
|
from ..ioc import wrap
|
6
6
|
class DealType(Base):
|
7
7
|
def init(self, deals = {}):
|
8
|
-
print(f"deals: {deals}")
|
9
8
|
self.deals = deals
|
10
9
|
def call(self, data):
|
10
|
+
if type(data)==str:
|
11
|
+
data = xf.loadf(data)
|
11
12
|
_type = xf.g(data, type = None)
|
12
13
|
return self.deals[_type](data)
|
13
14
|
|
@@ -0,0 +1,131 @@
|
|
1
|
+
#
|
2
|
+
|
3
|
+
from ..tools import *
|
4
|
+
from buildz.ioc import wrap
|
5
|
+
import json
|
6
|
+
|
7
|
+
try:
|
8
|
+
import requests as rq
|
9
|
+
session = rq.session()
|
10
|
+
except:
|
11
|
+
rq = None
|
12
|
+
session = None
|
13
|
+
|
14
|
+
pass
|
15
|
+
class Request(Base):
|
16
|
+
def init(self, http_type, use_session, log, upd):
|
17
|
+
self.type = http_type
|
18
|
+
self.use_session = use_session
|
19
|
+
self.log = log
|
20
|
+
self.upd = upd
|
21
|
+
self.fc = None
|
22
|
+
self.fcs = None
|
23
|
+
self.key_data = None
|
24
|
+
self.build()
|
25
|
+
def build(self):
|
26
|
+
fcs = {}
|
27
|
+
global rq, session
|
28
|
+
if rq is None:
|
29
|
+
return
|
30
|
+
obj = rq
|
31
|
+
if self.use_session:
|
32
|
+
obj = session
|
33
|
+
fcs['get'] = [obj.get, "params"]
|
34
|
+
fcs['post'] = [obj.post, "data"]
|
35
|
+
fcs['json'] = [obj.post, "json"]
|
36
|
+
fcs['put'] = [obj.put, "json"]
|
37
|
+
fcs['delete'] = [obj.delete, 'json']
|
38
|
+
self.fcs = fcs
|
39
|
+
self.fc = self.fcs[self.type][0]
|
40
|
+
self.key_data = self.fcs[self.type][1]
|
41
|
+
def get_set(self, data, kd, maps, km):
|
42
|
+
v = xf.get(data, kd)
|
43
|
+
if v is not None:
|
44
|
+
maps[km] = v
|
45
|
+
def req(self, data):
|
46
|
+
url = xf.g(data, url=None)
|
47
|
+
maps = {}
|
48
|
+
self.get_set(data, "data", maps, self.key_data)
|
49
|
+
self.get_set(data, "cookies", maps, "cookies")
|
50
|
+
self.get_set(data, "headers", maps, "headers")
|
51
|
+
self.get_set(data, "proxies", maps, "proxies")
|
52
|
+
return self.fc(url, **maps)
|
53
|
+
def rsp(self, rp, data):
|
54
|
+
url = xf.g(data, url=None)
|
55
|
+
xf.s(data, status_code = rp.status_code)
|
56
|
+
xf.s(data, result_code = rp.status_code)
|
57
|
+
try:
|
58
|
+
xf.s(data, result_content=rp.content)
|
59
|
+
s = xf.decode(rp.content, "utf-8")
|
60
|
+
xf.s(data, result_text=s)
|
61
|
+
except Exception as exp:
|
62
|
+
self.log.warn(f"exp in deal response on '{url}': {exp}")
|
63
|
+
try:
|
64
|
+
obj = json.loads(s)
|
65
|
+
xf.s(data, result=obj)
|
66
|
+
except Exception as exp:
|
67
|
+
#self.log.warn(f"exp in deal response on '{url}': {exp}")
|
68
|
+
pass
|
69
|
+
try:
|
70
|
+
xf.s(data, result_cookies=dict(rp.cookies))
|
71
|
+
except Exception as exp:
|
72
|
+
self.log.warn(f"exp in deal response on '{url}': {exp}")
|
73
|
+
try:
|
74
|
+
xf.s(data, result_headers = dict(rp.headers))
|
75
|
+
except Exception as exp:
|
76
|
+
self.log.warn(f"exp in deal response on '{url}': {exp}")
|
77
|
+
return True
|
78
|
+
def call(self, data, fc=None):
|
79
|
+
if self.fc is None:
|
80
|
+
self.log.error("install requests to use this(pip install requests)")
|
81
|
+
return False
|
82
|
+
if self.upd is not None:
|
83
|
+
data = self.upd(data)
|
84
|
+
url = xf.g(data, url=None)
|
85
|
+
try:
|
86
|
+
rp = self.req(data)
|
87
|
+
except Exception as exp:
|
88
|
+
self.log.error("error in request '{url}' with method {self.type}: {exp}")
|
89
|
+
return False
|
90
|
+
self.rsp(rp, data)
|
91
|
+
if fc is None:
|
92
|
+
return True
|
93
|
+
return fc(data)
|
94
|
+
|
95
|
+
pass
|
96
|
+
|
97
|
+
|
98
|
+
@wrap.obj(id="request.post")
|
99
|
+
@wrap.obj_args("post", "env, request.session, false", "ref, log", "ref, cache.modify")
|
100
|
+
class Post(Request):
|
101
|
+
pass
|
102
|
+
|
103
|
+
pass
|
104
|
+
|
105
|
+
@wrap.obj(id="request.json")
|
106
|
+
@wrap.obj_args("json", "env, request.session, false", "ref, log", "ref, cache.modify")
|
107
|
+
class Json(Request):
|
108
|
+
pass
|
109
|
+
|
110
|
+
pass
|
111
|
+
|
112
|
+
@wrap.obj(id="request.get")
|
113
|
+
@wrap.obj_args("get", "env, request.session, false", "ref, log", "ref, cache.modify")
|
114
|
+
class Get(Request):
|
115
|
+
pass
|
116
|
+
|
117
|
+
pass
|
118
|
+
|
119
|
+
@wrap.obj(id="request.put")
|
120
|
+
@wrap.obj_args("put", "env, request.session, false", "ref, log", "ref, cache.modify")
|
121
|
+
class Put(Request):
|
122
|
+
pass
|
123
|
+
|
124
|
+
pass
|
125
|
+
|
126
|
+
@wrap.obj(id="request.delete")
|
127
|
+
@wrap.obj_args("delete", "env, request.session, false", "ref, log", "ref, cache.modify")
|
128
|
+
class Delete(Request):
|
129
|
+
pass
|
130
|
+
|
131
|
+
pass
|
@@ -2,6 +2,7 @@ from .. import xf
|
|
2
2
|
from .. import ioc
|
3
3
|
from ..base import Base
|
4
4
|
from . import init
|
5
|
+
import os
|
5
6
|
class Run(Base):
|
6
7
|
def init(self, fps=None):
|
7
8
|
mg = ioc.build()
|
@@ -10,6 +11,9 @@ class Run(Base):
|
|
10
11
|
self.mg = mg
|
11
12
|
def call(self, fp):
|
12
13
|
maps = xf.loadf(fp)
|
14
|
+
config = self.mg.get("buildz.auto.config.load")
|
15
|
+
if not config(maps, fp):
|
16
|
+
return
|
13
17
|
calls = xf.g(maps, calls = [])
|
14
18
|
for deal in calls:
|
15
19
|
fc = self.mg.get(deal)
|
@@ -0,0 +1,33 @@
|
|
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
|
+
if type(v)==str:
|
16
|
+
v = ["key"]+v.split(".")
|
17
|
+
if type(v)!=list:
|
18
|
+
v = ["key", v]
|
19
|
+
tp = v[0]
|
20
|
+
v = v[1:]
|
21
|
+
if tp=="eval":
|
22
|
+
val = eval(v[0])
|
23
|
+
elif tp == "exec":
|
24
|
+
exec(v[0])
|
25
|
+
val = self.val
|
26
|
+
else:
|
27
|
+
val = xf.gets(data, v)
|
28
|
+
self.cache.set(k, val)
|
29
|
+
return True
|
30
|
+
|
31
|
+
pass
|
32
|
+
|
33
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
note: test2
|
2
|
+
url: "https://#{host}/"
|
3
|
+
type: get
|
4
|
+
headers: {
|
5
|
+
User-Agent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"
|
6
|
+
}
|
7
|
+
data: {
|
8
|
+
}
|
9
|
+
verify: [
|
10
|
+
"status_code, 200"
|
11
|
+
"result_headers.Content-Type, text/html"
|
12
|
+
]
|
13
|
+
save: {
|
14
|
+
test2.headers.content_type: result_headers.Content-Type
|
15
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
configs: config.js
|
2
|
+
datas: [
|
3
|
+
//写一个配置
|
4
|
+
{
|
5
|
+
note: test
|
6
|
+
url: test
|
7
|
+
type: http.get
|
8
|
+
data: {
|
9
|
+
url: "#{test.url}"
|
10
|
+
}
|
11
|
+
save: {
|
12
|
+
test.url: data.url
|
13
|
+
}
|
14
|
+
result: {
|
15
|
+
code: 1.99
|
16
|
+
}
|
17
|
+
verify: [
|
18
|
+
"result.code, [>, 1]"
|
19
|
+
]
|
20
|
+
save: {
|
21
|
+
result.code: result.code
|
22
|
+
}
|
23
|
+
}
|
24
|
+
// 或者配置所在的文件
|
25
|
+
item1.js
|
26
|
+
item2.js
|
27
|
+
]
|
@@ -0,0 +1,78 @@
|
|
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
|
+
self.opts = {}
|
12
|
+
self.opts[">"] = self.make_val_cmp(lambda val,v:val>v)
|
13
|
+
self.opts["<"] = self.make_val_cmp(lambda val,v:val<v)
|
14
|
+
self.opts[">="] = self.make_val_cmp(lambda val,v:val>=v)
|
15
|
+
self.opts["<="] = self.make_val_cmp(lambda val,v:val<=v)
|
16
|
+
self.opts["="] = self.eq
|
17
|
+
self.opts["!="] = self.neq
|
18
|
+
def eq(self, val, v):
|
19
|
+
if type(val)!=type(v):
|
20
|
+
if type(val)==str or type(v)==str:
|
21
|
+
return str(val)==str(v)
|
22
|
+
return val==v
|
23
|
+
def neq(self, val, v):
|
24
|
+
if type(val)!=type(v):
|
25
|
+
if type(val)==str or type(v)==str:
|
26
|
+
return str(val)!=str(v)
|
27
|
+
return val!=v
|
28
|
+
def make_val_cmp(self, opt):
|
29
|
+
def fc(val, v):
|
30
|
+
if val is None:
|
31
|
+
return False
|
32
|
+
if type(val)==str:
|
33
|
+
val = float(val)
|
34
|
+
if type(v)==str:
|
35
|
+
v = float(v)
|
36
|
+
return opt(val, v)
|
37
|
+
return fc
|
38
|
+
def match(self, v, val, result, data):
|
39
|
+
tp,v = v
|
40
|
+
if tp in self.opts:
|
41
|
+
return self.opts[tp](val,v)
|
42
|
+
if tp=="eval":
|
43
|
+
return eval(v)
|
44
|
+
elif tp == "exec":
|
45
|
+
exec(v)
|
46
|
+
return self.val
|
47
|
+
else:
|
48
|
+
err = f"not impl match type: {tp}"
|
49
|
+
self.log.error(err)
|
50
|
+
raise Exception(err)
|
51
|
+
def call(self, data, fc=None):
|
52
|
+
data = self.upd(data)
|
53
|
+
note = xf.g(data, note=data)
|
54
|
+
result = xf.g(data, result = {})
|
55
|
+
vs = xf.g(data, verify=[])
|
56
|
+
for it in vs:
|
57
|
+
if type(it)==str:
|
58
|
+
it = xf.loads(it)
|
59
|
+
k,v=it
|
60
|
+
bak = v
|
61
|
+
if k == "$":
|
62
|
+
if type(v)!=list:
|
63
|
+
v = ["eval", v]
|
64
|
+
val = None
|
65
|
+
else:
|
66
|
+
val = xf.gets(data, k.split("."))
|
67
|
+
if type(v)!=list:
|
68
|
+
v = ["=", v]
|
69
|
+
jg = self.match(v, val, result, data)
|
70
|
+
if not jg:
|
71
|
+
self.log.error(f"verify failed in {note}, key: '{k}', match: {bak}, val: {val}")
|
72
|
+
return False
|
73
|
+
if fc is None:
|
74
|
+
return True
|
75
|
+
return fc(data)
|
76
|
+
|
77
|
+
pass
|
78
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
from buildz.html import parse
|
3
|
+
from buildz.tools import *
|
4
|
+
#demo.html太大,已经删除
|
5
|
+
fp = "demo.html"
|
6
|
+
s = fz.read(fp, "rb").decode("utf-8")
|
7
|
+
|
8
|
+
obj = parse(s)
|
9
|
+
|
10
|
+
# 可以进行多次查询调用,后一次查询在前一次的结果集里做查询
|
11
|
+
rst = obj.finds("(class,toplist1-tr_1MWDu)").finds("tag=a,target=_blank").data()
|
12
|
+
rst = obj.searchs("class,toplist1-tr_1MWDu").finds("(tag,a),(tag,a),(target,_blank)").data()
|
13
|
+
rst = obj.searchs("class,toplist1-tr_1MWDu").searchs("tag,a", "tag, a", "target, _blank").data()
|
14
|
+
|
15
|
+
print(f"search rst: {rst}")
|
@@ -1,16 +1,47 @@
|
|
1
1
|
from html.parser import HTMLParser
|
2
2
|
from .. import xf
|
3
|
+
from ..base import Base
|
3
4
|
import re
|
5
|
+
class SearchResult(Base):
|
6
|
+
def str(self):
|
7
|
+
return str(self.arr)
|
8
|
+
def init(self, arr):
|
9
|
+
self.arr = arr
|
10
|
+
self.size = len(arr)
|
11
|
+
def run(self, fc_name, *a, **b):
|
12
|
+
rst = []
|
13
|
+
for it in self.arr:
|
14
|
+
fc = getattr(it, fc_name)
|
15
|
+
rst+=fc(*a,**b).data()
|
16
|
+
return SearchResult(rst)
|
17
|
+
def searchs(self, *args, **maps):
|
18
|
+
return self.run("searchs", *args, **maps)
|
19
|
+
def finds(self, s):
|
20
|
+
return self.run("finds", s)
|
21
|
+
def tags(self, _tag):
|
22
|
+
return self.searchs(tag=_tag)
|
23
|
+
def call(self):
|
24
|
+
return self.data()
|
25
|
+
def data(self):
|
26
|
+
return self.arr
|
27
|
+
|
28
|
+
pass
|
4
29
|
class HtmlTag:
|
30
|
+
def data(self):
|
31
|
+
return self.to_maps()
|
5
32
|
def to_maps(self):
|
6
33
|
nodes = [n.to_maps() for n in self.nodes]
|
7
|
-
rst = {'tag': self.tag, 'attrs': self.attrs, 'texts': self.texts, 'text': self.text, '
|
34
|
+
rst = {'tag': self.tag, 'attrs': self.attrs, 'texts': self.texts, 'text': self.text, 'nodes': nodes}
|
8
35
|
return rst
|
9
36
|
def __str__(self):
|
10
37
|
return xf.dumps(self.to_maps())
|
11
38
|
def __repr__(self):
|
12
39
|
return self.__str__()
|
13
40
|
def match(self, val, pt):
|
41
|
+
tag = self.tag
|
42
|
+
text = self.text
|
43
|
+
texts = self.texts
|
44
|
+
attrs = self.attrs
|
14
45
|
if type(pt)==list:
|
15
46
|
tp = pt[0]
|
16
47
|
v = pt[1]
|
@@ -28,20 +59,24 @@ class HtmlTag:
|
|
28
59
|
elif tp=="<=":
|
29
60
|
return val<=v
|
30
61
|
elif tp == "re":
|
31
|
-
return (re.findall(v, val))>0
|
32
|
-
elif tp == '
|
33
|
-
#v.replace("${it}", val)
|
62
|
+
return len(re.findall(v, val))>0
|
63
|
+
elif tp == 'eval':
|
34
64
|
return eval(v)
|
35
65
|
else:
|
36
66
|
raise Exception(f"not impl match type: '{tp}'")
|
37
|
-
def check(self, maps):
|
67
|
+
def check(self, args, maps):
|
38
68
|
#print(f"[TESTZ] check: {maps}, attrs: {self.attrs}")
|
39
|
-
|
69
|
+
arr = args+list(maps.items())
|
70
|
+
for k,v in arr:
|
40
71
|
if k == 'tag':
|
41
72
|
if not self.match(self.tag, v):
|
42
73
|
return False
|
74
|
+
elif k == 'text':
|
75
|
+
if not self.match(self.text, v):
|
76
|
+
return False
|
43
77
|
elif k == "$":
|
44
|
-
|
78
|
+
if not self.match(None, ["eval", v]):
|
79
|
+
return False
|
45
80
|
else:
|
46
81
|
if k not in self.attrs or not self.match(self.attrs[k], v):
|
47
82
|
return False
|
@@ -54,22 +89,35 @@ class HtmlTag:
|
|
54
89
|
self.nodes = []
|
55
90
|
self.text = None
|
56
91
|
self.texts = []
|
57
|
-
def _search(self, rst, maps):
|
58
|
-
if self.check(maps):
|
92
|
+
def _search(self, rst, args, maps):
|
93
|
+
if self.check(args, maps):
|
59
94
|
rst.append(self)
|
60
95
|
for n in self.nodes:
|
61
|
-
n._search(rst, maps)
|
62
|
-
def searchs(self, **maps):
|
96
|
+
n._search(rst, args, maps)
|
97
|
+
def searchs(self, *args, **maps):
|
98
|
+
tmp = []
|
99
|
+
for k in args:
|
100
|
+
if type(k)!=list:
|
101
|
+
k = xf.loads(k)
|
102
|
+
tmp.append(k)
|
63
103
|
rst = []
|
64
|
-
self._search(rst, maps)
|
65
|
-
return rst
|
104
|
+
self._search(rst, tmp, maps)
|
105
|
+
return SearchResult(rst)
|
66
106
|
def tags(self, _tag):
|
67
|
-
return self.searchs(tag = _tag)
|
107
|
+
return SearchResult(self.searchs(tag = _tag))
|
68
108
|
def finds(self, s):
|
69
109
|
rst = []
|
70
|
-
|
71
|
-
|
72
|
-
|
110
|
+
args = []
|
111
|
+
maps = {}
|
112
|
+
dt = xf.loads(s)
|
113
|
+
if type(dt)==list:
|
114
|
+
args = dt
|
115
|
+
else:
|
116
|
+
maps = dt
|
117
|
+
if len(args)==2 and type(args[0])!=list:
|
118
|
+
args = [args]
|
119
|
+
self._search(rst, args, maps)
|
120
|
+
return SearchResult(rst)
|
73
121
|
def add_node(self, node):
|
74
122
|
self.nodes.append(node)
|
75
123
|
def add_text(self, text):
|
@@ -126,8 +126,11 @@ def sets(maps, keys, val):
|
|
126
126
|
if type(keys) != list:
|
127
127
|
keys = [keys]
|
128
128
|
for key in keys[:-1]:
|
129
|
-
if
|
130
|
-
|
129
|
+
if type(maps)==dict:
|
130
|
+
if key not in maps:
|
131
|
+
maps[key] = {}
|
132
|
+
else:
|
133
|
+
key = int(key)
|
131
134
|
maps = maps[key]
|
132
135
|
maps[keys[-1]] = val
|
133
136
|
|
@@ -136,8 +139,13 @@ def gets(maps, keys, default = None):
|
|
136
139
|
if type(keys) != list:
|
137
140
|
keys = [keys]
|
138
141
|
for key in keys:
|
139
|
-
if
|
140
|
-
|
142
|
+
if type(maps)==dict:
|
143
|
+
if key not in maps:
|
144
|
+
return default
|
145
|
+
else:
|
146
|
+
key = int(key)
|
147
|
+
if key>=len(maps):
|
148
|
+
return default
|
141
149
|
maps = maps[key]
|
142
150
|
return maps
|
143
151
|
|
@@ -203,4 +211,21 @@ fill=deep_fill
|
|
203
211
|
def maps(**kv):
|
204
212
|
return kv
|
205
213
|
|
206
|
-
pass
|
214
|
+
pass
|
215
|
+
|
216
|
+
def flush_maps(maps, fc_key = lambda x:x.split(".") if type(x)==str else [x], visit_list=False):
|
217
|
+
if type(maps)==list:
|
218
|
+
if not visit_list:
|
219
|
+
return maps
|
220
|
+
rst = [flush_maps(it, fc_key, visit_list) for it in maps]
|
221
|
+
return rst
|
222
|
+
if type(maps)!=dict:
|
223
|
+
return maps
|
224
|
+
rst = {}
|
225
|
+
for k,v in maps.items():
|
226
|
+
ks = fc_key(k)
|
227
|
+
v = flush_maps(v, fc_key, visit_list)
|
228
|
+
sets(rst, ks, v)
|
229
|
+
return rst
|
230
|
+
|
231
|
+
pass
|