buildz 0.6.11__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.11/buildz.egg-info → buildz-0.6.12}/PKG-INFO +4 -1
- {buildz-0.6.11 → buildz-0.6.12}/README.md +3 -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.11 → buildz-0.6.12}/buildz/ioc/base.py +2 -1
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/init.py +4 -1
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/confs.py +22 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/decorator.py +14 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/single.py +3 -1
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/base.py +4 -3
- buildz-0.6.12/buildz/ioc/ioc_deal/init.py +4 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/obj.py +2 -1
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/ref.py +3 -1
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/var.py +17 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/wrap.py +8 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/pyz.py +2 -0
- {buildz-0.6.11 → buildz-0.6.12/buildz.egg-info}/PKG-INFO +4 -1
- {buildz-0.6.11 → buildz-0.6.12}/buildz.egg-info/SOURCES.txt +16 -0
- {buildz-0.6.11 → buildz-0.6.12}/setup.py +1 -1
- buildz-0.6.11/buildz/ioc/ioc_deal/init.py +0 -3
- {buildz-0.6.11 → buildz-0.6.12}/LICENSE +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/MANIFEST.in +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/__init__.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/__main__.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/argx.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/base.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/cmd.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/__main__.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/basez.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/clickhousez.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/lib/readme +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/mysqlz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/oraclez.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/dv/structz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/install.txt +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/run.conf +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/db/runz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/ioc/deal.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/ioc/help.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/myers/deal.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/myers/help.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/ioc.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/main.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/myers.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/search.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/conf/xf.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/default.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/ioc.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/myers.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/search.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/help/xf.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/res/test.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/search/deal.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/search/help.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/test.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/xf/deal.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/demo/xf/help.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/__init__.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/dirz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/fhs.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/fio.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/fz/lsf.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/__init__.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/base.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc/conf.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/branch.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/call.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/calls.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/deal.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/demo.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/env.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/ioc.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/iocf.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/join.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/list.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/map.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/mcall.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/ovar.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/refs.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/val.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/ioc/ioc_deal/xfile.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/tools.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/__init__.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/myers_diff.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/__init__.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/base.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/getch.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/lx.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/test.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/tz/tio/win.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/__init__.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/__main__.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/code.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/code_modify.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/copy_old.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/file.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/base.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/buffer.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/listz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/lr.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/lrval.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/mapz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/nextz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/reval.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/setz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/spc.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/spt.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/deal/strz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/exp.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/item.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/mg.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loader/pos.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/base.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/buffer.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/listmapz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/listz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/lr.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/lrval.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/mapz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/nextz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/reval.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/setz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/spc.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/spt.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz_new.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/deal/strz_old.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/exp.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/item.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/mg.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/pos.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/test.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/loaderz/test1.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/mapz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/read.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/readz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/stack.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/write.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/base.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/conf.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/jsonval.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/listz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/mapz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/reval.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/deal/strz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/itemz.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/writer/mg.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz/xf/xargs.py +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz.egg-info/dependency_links.txt +0 -0
- {buildz-0.6.11 → buildz-0.6.12}/buildz.egg-info/top_level.txt +0 -0
- {buildz-0.6.11 → 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,9 @@ License-File: LICENSE
|
|
31
31
|
运行python -m buildz查看帮助
|
32
32
|
|
33
33
|
持续更新中。。。
|
34
|
+
2024/09/24:
|
35
|
+
增加模块html:html页面解析
|
36
|
+
增加模块auto:自动化调用
|
34
37
|
|
35
38
|
2024/09/09
|
36
39
|
ioc:
|
@@ -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
|
from . import wrap
|
6
|
-
def build(fp_init = None, add_default_deals = True):
|
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
|
@@ -478,3 +478,25 @@ class Confs(Base):
|
|
478
478
|
return EncapeData(fc, confs=self)
|
479
479
|
|
480
480
|
pass
|
481
|
+
|
482
|
+
class ConfsList(Base):
|
483
|
+
def init(self, mgs):
|
484
|
+
self.mgs = mgs
|
485
|
+
def get(self, conf):
|
486
|
+
_exp = None
|
487
|
+
for mg in self.mgs:
|
488
|
+
try:
|
489
|
+
obj = mg.get(conf)
|
490
|
+
return obj
|
491
|
+
except IdNotFoundError as exp:
|
492
|
+
_exp = exp
|
493
|
+
raise _exp
|
494
|
+
def push_vars(self, vars):
|
495
|
+
[mg.push_vars(vars) for mg in self.mgs]
|
496
|
+
return pyz.with_out(lambda :self.pop_vars(vars))
|
497
|
+
def pop_vars(self, vars):
|
498
|
+
[mg.pop_vars(vars) for mg in self.mgs]
|
499
|
+
|
500
|
+
pass
|
501
|
+
|
502
|
+
|
@@ -1,21 +1,35 @@
|
|
1
1
|
#coding=utf-8
|
2
2
|
from buildz.base import Base
|
3
|
+
from buildz import xf
|
3
4
|
class Decorator(Base):
|
4
5
|
def init(self):
|
5
6
|
self.conf = {}
|
6
7
|
self.fcs = {}
|
8
|
+
self.regist("add_datas", self.add_datas)
|
7
9
|
def regist(self, key, fc):
|
8
10
|
self.fcs[key] = fc
|
11
|
+
def get(self, tag, index):
|
12
|
+
if tag not in self.conf:
|
13
|
+
self.conf[tag]=[]
|
14
|
+
return self.conf[tag][index]
|
9
15
|
def add(self, tag, data):
|
10
16
|
if tag not in self.conf:
|
11
17
|
self.conf[tag]=[]
|
18
|
+
id = len(self.conf[tag])
|
12
19
|
self.conf[tag].append(data)
|
20
|
+
return id
|
13
21
|
def set(self, tag, key, val):
|
14
22
|
if tag not in self.conf:
|
15
23
|
self.conf[tag]={}
|
16
24
|
self.conf[tag][key]=val
|
17
25
|
def add_datas(self, item):
|
26
|
+
if type(item)==str:
|
27
|
+
item = xf.loads(item)
|
18
28
|
return self.add("datas", item)
|
29
|
+
def get_datas(self, id):
|
30
|
+
return self.get("datas", id)
|
31
|
+
def set_datas(self, id, val):
|
32
|
+
return self.set("datas", id, val)
|
19
33
|
def set_envs(self, key, val):
|
20
34
|
return self.set("env", key, val)
|
21
35
|
def add_inits(self, val):
|
@@ -53,7 +53,9 @@ class Single(Base):
|
|
53
53
|
if ids is None:
|
54
54
|
return
|
55
55
|
xf.sets(self.singles, ids, obj)
|
56
|
-
def set(self,
|
56
|
+
def set(self, edata:EncapeData, obj):
|
57
|
+
if not isinstance(edata, EncapeData) and isinstance(obj, EncapeData):
|
58
|
+
edata, obj = obj, edata
|
57
59
|
ids = self.get_ids(edata)
|
58
60
|
self.set_by_ids(ids, obj)
|
59
61
|
def rm_by_ids(self, idsj):
|