buildz 0.6.58__tar.gz → 0.6.59__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.
Files changed (348) hide show
  1. {buildz-0.6.58/buildz.egg-info → buildz-0.6.59}/PKG-INFO +1 -1
  2. {buildz-0.6.58 → buildz-0.6.59}/buildz/__init__.py +1 -1
  3. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/__init__.py +1 -0
  4. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/caps.py +6 -28
  5. buildz-0.6.59/buildz/netz/mhttp/gateway.py +90 -0
  6. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/mhttp.py +23 -15
  7. buildz-0.6.59/buildz/netz/mhttp/mhttps.py +28 -0
  8. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/proxy.py +32 -13
  9. buildz-0.6.59/buildz/netz/test/test_gw.py +33 -0
  10. {buildz-0.6.58 → buildz-0.6.59/buildz.egg-info}/PKG-INFO +1 -1
  11. {buildz-0.6.58 → buildz-0.6.59}/buildz.egg-info/SOURCES.txt +3 -0
  12. {buildz-0.6.58 → buildz-0.6.59}/setup.py +1 -1
  13. {buildz-0.6.58 → buildz-0.6.59}/LICENSE +0 -0
  14. {buildz-0.6.58 → buildz-0.6.59}/MANIFEST.in +0 -0
  15. {buildz-0.6.58 → buildz-0.6.59}/README.md +0 -0
  16. {buildz-0.6.58 → buildz-0.6.59}/buildz/__main__.py +0 -0
  17. {buildz-0.6.58 → buildz-0.6.59}/buildz/argx.py +0 -0
  18. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/__init__.py +0 -0
  19. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/argz.py +0 -0
  20. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/callz.py +0 -0
  21. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/conf_argz.py +0 -0
  22. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/conf_callz.py +0 -0
  23. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/evalx.py +0 -0
  24. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/init.py +0 -0
  25. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/test.py +0 -0
  26. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz/test_call.py +0 -0
  27. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/__init__.py +0 -0
  28. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/argz.py +0 -0
  29. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/build.py +0 -0
  30. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/callz.py +0 -0
  31. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/evalx.py +0 -0
  32. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/test.py +0 -0
  33. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/test_obj.py +0 -0
  34. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/tests/conf.js +0 -0
  35. {buildz-0.6.58 → buildz-0.6.59}/buildz/argz_bk/testx.py +0 -0
  36. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/__init__.py +0 -0
  37. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/cache.py +0 -0
  38. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/config.py +0 -0
  39. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/dbs.py +0 -0
  40. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/deal.py +0 -0
  41. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/deal_list.py +0 -0
  42. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/deal_type.py +0 -0
  43. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/defs.py +0 -0
  44. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/factory.py +0 -0
  45. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/init.py +0 -0
  46. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/log.py +0 -0
  47. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/request.py +0 -0
  48. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/run.py +0 -0
  49. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/save.py +0 -0
  50. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/cache/cache.js +0 -0
  51. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/config/base.js +0 -0
  52. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/config/config.js +0 -0
  53. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/data/fp.js +0 -0
  54. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/data/item1.js +0 -0
  55. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/data/item2.js +0 -0
  56. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/res/data/test.js +0 -0
  57. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/test.py +0 -0
  58. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/test/xtest.py +0 -0
  59. {buildz-0.6.58 → buildz-0.6.59}/buildz/auto/verify.py +0 -0
  60. {buildz-0.6.58 → buildz-0.6.59}/buildz/base.py +0 -0
  61. {buildz-0.6.58 → buildz-0.6.59}/buildz/cachez/__init__.py +0 -0
  62. {buildz-0.6.58 → buildz-0.6.59}/buildz/cachez/cache.py +0 -0
  63. {buildz-0.6.58 → buildz-0.6.59}/buildz/cmd.py +0 -0
  64. {buildz-0.6.58 → buildz-0.6.59}/buildz/confz.py +0 -0
  65. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/__init__.py +0 -0
  66. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/__main__.py +0 -0
  67. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/__init__.py +0 -0
  68. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/basez.py +0 -0
  69. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/clickhousez.py +0 -0
  70. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/lib/readme +0 -0
  71. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/mysqlz.py +0 -0
  72. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/oraclez.py +0 -0
  73. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/orm.py +0 -0
  74. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/postgresqlz.py +0 -0
  75. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/sqlite3z.py +0 -0
  76. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/dv/structz.py +0 -0
  77. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/install.txt +0 -0
  78. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/run.conf +0 -0
  79. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/runz.py +0 -0
  80. {buildz-0.6.58 → buildz-0.6.59}/buildz/db/tls.py +0 -0
  81. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/ioc/deal.py +0 -0
  82. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/ioc/help.py +0 -0
  83. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/myers/deal.py +0 -0
  84. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/myers/help.py +0 -0
  85. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/ioc.js +0 -0
  86. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/main.js +0 -0
  87. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/myers.js +0 -0
  88. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/search.js +0 -0
  89. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/conf/xf.js +0 -0
  90. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/default.js +0 -0
  91. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/ioc.js +0 -0
  92. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/myers.js +0 -0
  93. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/search.js +0 -0
  94. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/help/xf.js +0 -0
  95. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/res/test.js +0 -0
  96. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/search/deal.py +0 -0
  97. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/search/help.py +0 -0
  98. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/test.py +0 -0
  99. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/xf/deal.py +0 -0
  100. {buildz-0.6.58 → buildz-0.6.59}/buildz/demo/xf/help.py +0 -0
  101. {buildz-0.6.58 → buildz-0.6.59}/buildz/dz/__init__.py +0 -0
  102. {buildz-0.6.58 → buildz-0.6.59}/buildz/dz/mapz.py +0 -0
  103. {buildz-0.6.58 → buildz-0.6.59}/buildz/evalz/__init__.py +0 -0
  104. {buildz-0.6.58 → buildz-0.6.59}/buildz/evalz/evalz.py +0 -0
  105. {buildz-0.6.58 → buildz-0.6.59}/buildz/evalz/res/default.js +0 -0
  106. {buildz-0.6.58 → buildz-0.6.59}/buildz/evalz/test.py +0 -0
  107. {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/__init__.py +0 -0
  108. {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/dirz.py +0 -0
  109. {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/fhs.py +0 -0
  110. {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/fio.py +0 -0
  111. {buildz-0.6.58 → buildz-0.6.59}/buildz/fz/lsf.py +0 -0
  112. {buildz-0.6.58 → buildz-0.6.59}/buildz/html/__init__.py +0 -0
  113. {buildz-0.6.58 → buildz-0.6.59}/buildz/html/test/demo.html +0 -0
  114. {buildz-0.6.58 → buildz-0.6.59}/buildz/html/test/test.py +0 -0
  115. {buildz-0.6.58 → buildz-0.6.59}/buildz/html/xml.py +0 -0
  116. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/__init__.py +0 -0
  117. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/base.py +0 -0
  118. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/init.py +0 -0
  119. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/base.py +0 -0
  120. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/conf.py +0 -0
  121. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/confs.py +0 -0
  122. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/decorator.py +0 -0
  123. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/loads.py +0 -0
  124. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc/single.py +0 -0
  125. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/base.py +0 -0
  126. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/branch.py +0 -0
  127. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/call.py +0 -0
  128. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/calls.py +0 -0
  129. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
  130. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  131. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  132. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  133. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  134. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
  135. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
  136. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  137. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  138. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
  139. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  140. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  141. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  142. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  143. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  144. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  145. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  146. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  147. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  148. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  149. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
  150. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
  151. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  152. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
  153. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
  154. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/deal.py +0 -0
  155. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/demo.py +0 -0
  156. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/env.py +0 -0
  157. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/init.py +0 -0
  158. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/ioc.py +0 -0
  159. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/iocf.py +0 -0
  160. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/join.py +0 -0
  161. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/list.py +0 -0
  162. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/map.py +0 -0
  163. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/mcall.py +0 -0
  164. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/obj.py +0 -0
  165. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/ovar.py +0 -0
  166. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/ref.py +0 -0
  167. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/refs.py +0 -0
  168. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/val.py +0 -0
  169. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/var.py +0 -0
  170. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/ioc_deal/xfile.py +0 -0
  171. {buildz-0.6.58 → buildz-0.6.59}/buildz/ioc/wrap.py +0 -0
  172. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/__init__.py +0 -0
  173. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/base.py +0 -0
  174. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/base.py +0 -0
  175. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/conf.py +0 -0
  176. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/mg.py +0 -0
  177. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/unit.py +0 -0
  178. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf/up.py +0 -0
  179. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/attr.py +0 -0
  180. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/base.py +0 -0
  181. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/call.py +0 -0
  182. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/cvar.py +0 -0
  183. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/deal.py +0 -0
  184. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/env.py +0 -0
  185. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/ioc.py +0 -0
  186. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/method.py +0 -0
  187. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/obj.py +0 -0
  188. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/ref.py +0 -0
  189. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/conf_deal/val.py +0 -0
  190. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/init.py +0 -0
  191. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/__init__.py +0 -0
  192. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/base.py +0 -0
  193. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/builds.py +0 -0
  194. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/confs.py +0 -0
  195. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/datas.py +0 -0
  196. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/dataset.py +0 -0
  197. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/encapes.py +0 -0
  198. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/envs.py +0 -0
  199. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/ids.py +0 -0
  200. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/init.py +0 -0
  201. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/mg.py +0 -0
  202. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/single.py +0 -0
  203. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/sys_envs.py +0 -0
  204. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/tdata.py +0 -0
  205. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/tdict.py +0 -0
  206. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/unit.py +0 -0
  207. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc/vars.py +0 -0
  208. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/base.py +0 -0
  209. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/deal.py +0 -0
  210. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/ioc.py +0 -0
  211. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/obj.py +0 -0
  212. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/ref.py +0 -0
  213. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/ioc_deal/val.py +0 -0
  214. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/test/test.py +0 -0
  215. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/base.py +0 -0
  216. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/default_wraps.py +0 -0
  217. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/env.py +0 -0
  218. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/obj.py +0 -0
  219. {buildz-0.6.58 → buildz-0.6.59}/buildz/iocz/wrap/wraps.py +0 -0
  220. {buildz-0.6.58 → buildz-0.6.59}/buildz/logz.py +0 -0
  221. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/__init__.py +0 -0
  222. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/mhttp/record.py +0 -0
  223. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/sslz/__init__.py +0 -0
  224. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/sslz/gen.py +0 -0
  225. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/sslz/gen.pyi +0 -0
  226. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/test/__main__.py +0 -0
  227. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/test/test.py +0 -0
  228. {buildz-0.6.58 → buildz-0.6.59}/buildz/netz/test/test_cli.py +0 -0
  229. {buildz-0.6.58 → buildz-0.6.59}/buildz/pathz.py +0 -0
  230. {buildz-0.6.58 → buildz-0.6.59}/buildz/pyz.py +0 -0
  231. {buildz-0.6.58 → buildz-0.6.59}/buildz/tls.py +0 -0
  232. {buildz-0.6.58 → buildz-0.6.59}/buildz/tools.py +0 -0
  233. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/__init__.py +0 -0
  234. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/myers_diff.py +0 -0
  235. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/test_xfind.py +0 -0
  236. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/time/__init__.py +0 -0
  237. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/time/timez.py +0 -0
  238. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/__init__.py +0 -0
  239. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/base.py +0 -0
  240. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/getch.py +0 -0
  241. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/lx.py +0 -0
  242. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/test.py +0 -0
  243. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/tio/win.py +0 -0
  244. {buildz-0.6.58 → buildz-0.6.59}/buildz/tz/xfind.py +0 -0
  245. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/__init__.py +0 -0
  246. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/__main__.py +0 -0
  247. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/base.py +0 -0
  248. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/code.py +0 -0
  249. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/code_modify.py +0 -0
  250. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/copy_old.py +0 -0
  251. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/file.py +0 -0
  252. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/base.py +0 -0
  253. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/buffer.py +0 -0
  254. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/listz.py +0 -0
  255. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/lr.py +0 -0
  256. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/lrval.py +0 -0
  257. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/mapz.py +0 -0
  258. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/nextz.py +0 -0
  259. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/reval.py +0 -0
  260. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/setz.py +0 -0
  261. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/spc.py +0 -0
  262. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/spt.py +0 -0
  263. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/deal/strz.py +0 -0
  264. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/exp.py +0 -0
  265. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/item.py +0 -0
  266. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/mg.py +0 -0
  267. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loader/pos.py +0 -0
  268. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/base.py +0 -0
  269. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/buffer.py +0 -0
  270. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/listmapz.py +0 -0
  271. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/listz.py +0 -0
  272. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/lr.py +0 -0
  273. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/lrval.py +0 -0
  274. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/mapz.py +0 -0
  275. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/nextz.py +0 -0
  276. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/reval.py +0 -0
  277. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/setz.py +0 -0
  278. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/spc.py +0 -0
  279. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/spt.py +0 -0
  280. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/strz.py +0 -0
  281. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/strz_new.py +0 -0
  282. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/deal/strz_old.py +0 -0
  283. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/exp.py +0 -0
  284. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/item.py +0 -0
  285. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/mg.py +0 -0
  286. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/pos.py +0 -0
  287. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/test.py +0 -0
  288. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz/test1.py +0 -0
  289. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/base.py +0 -0
  290. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/buffer.py +0 -0
  291. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/listmapz.py +0 -0
  292. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/listz.py +0 -0
  293. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/lr.py +0 -0
  294. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/lrval.py +0 -0
  295. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/mapz.py +0 -0
  296. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/nextz.py +0 -0
  297. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/reval.py +0 -0
  298. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/setz.py +0 -0
  299. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/spc.py +0 -0
  300. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/spt.py +0 -0
  301. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/strz.py +0 -0
  302. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/strz_new.py +0 -0
  303. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/deal/strz_old.py +0 -0
  304. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/exp.py +0 -0
  305. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/item.py +0 -0
  306. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/mg.py +0 -0
  307. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/pos.py +0 -0
  308. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/test.py +0 -0
  309. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/loaderz_nexp/test1.py +0 -0
  310. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/mapz.py +0 -0
  311. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/read.py +0 -0
  312. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/readz.py +0 -0
  313. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/readz_nexp.py +0 -0
  314. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/stack.py +0 -0
  315. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/write.py +0 -0
  316. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/base.py +0 -0
  317. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/conf.py +0 -0
  318. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/jsonval.py +0 -0
  319. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/listmapz.py +0 -0
  320. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/listz.py +0 -0
  321. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/mapz.py +0 -0
  322. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/reval.py +0 -0
  323. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/deal/strz.py +0 -0
  324. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/itemz.py +0 -0
  325. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writer/mg.py +0 -0
  326. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/base.py +0 -0
  327. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/conf.py +0 -0
  328. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/jsonval.py +0 -0
  329. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/listmapz.py +0 -0
  330. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/listz.py +0 -0
  331. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/mapz.py +0 -0
  332. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/reval.py +0 -0
  333. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/deal/strz.py +0 -0
  334. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/itemz.py +0 -0
  335. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/mg.py +0 -0
  336. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/test.py +0 -0
  337. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writerz/testx.py +0 -0
  338. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/writez.py +0 -0
  339. {buildz-0.6.58 → buildz-0.6.59}/buildz/xf/xargs.py +0 -0
  340. {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/__init__.py +0 -0
  341. {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/conf.js +0 -0
  342. {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/data.js +0 -0
  343. {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/test.py +0 -0
  344. {buildz-0.6.58 → buildz-0.6.59}/buildz/xz/trs.py +0 -0
  345. {buildz-0.6.58 → buildz-0.6.59}/buildz.egg-info/dependency_links.txt +0 -0
  346. {buildz-0.6.58 → buildz-0.6.59}/buildz.egg-info/top_level.txt +0 -0
  347. {buildz-0.6.58 → buildz-0.6.59}/notes/notes.txt +0 -0
  348. {buildz-0.6.58 → buildz-0.6.59}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.58
3
+ Version: 0.6.59
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
@@ -1,6 +1,6 @@
1
1
  #coding=utf-8
2
2
 
3
- __version__="0.6.34"
3
+ __version__="0.6.59"
4
4
 
5
5
  # 小号多
6
6
  __author__ = "Zzz, emails: 1174534295@qq.com, 1309458652@qq.com"
@@ -3,3 +3,4 @@ from .caps import CapsDealer,CapsProxy
3
3
  from .proxy import ProxyDealer,Proxy
4
4
  from .mhttp import *
5
5
  from .record import MsgRecord,MsgLog
6
+ from .gateway import GWDealer,Gateway
@@ -1,5 +1,5 @@
1
1
 
2
- from . import proxy,mhttp
2
+ from . import proxy,mhttp,mhttps
3
3
  import socket, threading
4
4
  log = mhttp.log
5
5
  from buildz import xf
@@ -72,9 +72,7 @@ class CapsDealer(proxy.ProxyDealer):
72
72
  def context(self, hostname):
73
73
  if hostname not in self.contexts:
74
74
  fp_cert, fp_prv, pwd = self.sign(hostname)
75
- context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
76
- context.load_cert_chain(fp_cert, fp_prv, password=pwd)
77
- self.contexts[hostname]=context
75
+ self.contexts[hostname]=mhttps.load_server_context(fp_cert, fp_prv, pwd)
78
76
  return self.contexts[hostname]
79
77
  def deal_channel(self, skt_cli, skt_srv):
80
78
  #self.wskt.closefile()
@@ -92,7 +90,7 @@ class CapsDealer(proxy.ProxyDealer):
92
90
  line, headers, data_size = mhttp.http_recv(skt_cli)
93
91
  if line is None:
94
92
  continue
95
- self.default_deal(skt_cli, line, headers, data_size, skt_srv)
93
+ self.deals[None](skt_cli, line, headers, data_size, skt_srv)
96
94
  except Exception as exp:
97
95
  log.debug(f"channel exp: {exp}")
98
96
  log.warn(f"traceback: {traceback.format_exc()}")
@@ -110,29 +108,9 @@ class CapsProxy(proxy.Proxy):
110
108
  # context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
111
109
  # context.load_cert_chain(fp_sign, fp_prv, password=password)
112
110
  self.ca = fp_sign, fp_prv, password
113
- if cafile is not None or capath is not None or cadata is not None:
114
- # 导入根证书,需要单个根证书文件cafile或者根证书文件夹capath或者根证书数据cadata
115
- # cadata是证书数据,不清楚能不能多个证书字节码拼在一起
116
- srv_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
117
- srv_context.load_verify_locations(cafile=cafile, capath=capath, cadata=cadata)
118
- srv_context.check_hostname = check_hostname
119
- else:
120
- # 不会校验服务端https证书是否有效,可能有风险?
121
- srv_context = ssl._create_unverified_context(ssl.PROTOCOL_TLS_CLIENT)
122
- #self.context = context
123
- self.srv_context = srv_context
111
+ self.srv_context = mhttps.load_verify_context(cafile, capath, cadata,check_hostname)
124
112
  if dp_cache is None:
125
113
  dp_cache = "./res/certs"
126
114
  self.dp_cache = dp_cache
127
- def call(self):
128
- self.running=True
129
- skt = socket.socket()
130
- skt.bind(self.addr)
131
- skt.listen(self.listen)
132
- self.skt = skt
133
- while self.running:
134
- skt,addr = self.skt.accept()
135
- deal = CapsDealer(skt, self.ca, self.srv_context, record=self.record.clone(), dp_cache = self.dp_cache)
136
- th = threading.Thread(target=deal,daemon=True)
137
- th.start()
138
- self.ths.append(th)
115
+ def make_dealer(self, skt, addr):
116
+ return CapsDealer(skt, self.ca, self.srv_context, record=self.record.clone(), dp_cache = self.dp_cache)
@@ -0,0 +1,90 @@
1
+
2
+ from . import proxy,mhttp, mhttps
3
+ import socket, threading
4
+ log = mhttp.log
5
+ from buildz import xf
6
+ import ssl,re
7
+ from os.path import join, isfile
8
+ import traceback
9
+ from ...iocz.conf import conf as confz
10
+ from ... import dz
11
+ class GWDealer(proxy.ProxyDealer):
12
+ conf = confz.Conf()
13
+ conf.ikey(0, 'match', need=1)
14
+ conf.ikey(1, 'replace', need=1)
15
+ conf.ikey(2, 'ssl')
16
+ conf.ikey(3, 'type', 'match_type,http_type'.split(","))
17
+ """
18
+ rules:[
19
+ [match, replace, [opt|ssl], [opt|match_type]]
20
+ {match=match, replace=relace, ssl=false, match_type='GET'}
21
+ ]
22
+ """
23
+ def init(self, skt, rules, verify_context, context, channel_read_size=1024000, record=None):
24
+ self.context = context
25
+ if context is not None:
26
+ skt = context.wrap_socket(skt, server_side=True)
27
+ rules = [self.conf(k)[0] for k in rules]
28
+ self.rules = rules
29
+ self.verify_context = verify_context
30
+ super().init(skt, channel_read_size, record=record, default_deal = self.maps_deal)
31
+ def match(self, line, headers):
32
+ http_type, url, protocol = line
33
+ for item in self.rules:
34
+ pt, rep, mark_ssl, match_type = dz.g(item, match=None, replace=None, ssl=False, type=http_type)
35
+ if match_type != http_type:
36
+ continue
37
+ rst = re.findall(pt, url)
38
+ if len(rst)==0:
39
+ continue
40
+ match = rst[0]
41
+ i = url.find(match)
42
+ pfx, sfx = url[:i], url[i+len(match):]
43
+ rurl = pfx+rep+sfx
44
+ log.debug(f"url match: {rst} for {url}, replace to {rurl} with i={i}")
45
+ return rurl, mark_ssl
46
+ return None, False
47
+ def ssl_connect(self, addr):
48
+ return mhttps.wrap(self.verify_context, mhttp.WSocket.Connect(addr), False)
49
+ def maps_deal(self, skt_cli, line, headers, data_size, skt=None):
50
+ http_type, url, protocol = line
51
+ rel_url, mark_ssl = self.match(line, headers)
52
+ if rel_url is None:
53
+ if data_size>0:
54
+ data = skt_cli.read(data_size)
55
+ if mhttp.check_chunked(headers):
56
+ self.simple_chunked(skt_cli)
57
+ return self.error(skt_cli)
58
+ if mark_ssl:
59
+ prev = "https"
60
+ else:
61
+ prev = "http"
62
+ host = rel_url.split("?")[0].split("/")[0]
63
+ rel_url = prev+"://"+rel_url
64
+ for key in "Host,Origin".split(","):
65
+ if key in headers:
66
+ headers[key] = host
67
+ if 'Referer' in headers:
68
+ ref = headers['Referer']
69
+ prev, src_host, path = mhttp.spt_url(ref)
70
+ ref = mhttp.comb_url(prev, host, path)
71
+ headers["Referer"] = ref
72
+ log.info(f"[REF] host: {host}, ref: {ref}")
73
+ line = http_type, rel_url, protocol
74
+ fc_connect = None
75
+ if mark_ssl:
76
+ fc_connect = self.ssl_connect
77
+ return self.default_deal(skt_cli, line, headers, data_size, skt, fc_connect)
78
+
79
+
80
+ class Gateway(proxy.Proxy):
81
+ '''
82
+ 类似nginx的前向代理
83
+ '''
84
+ def init(self, addr, rules, fp_cert=None, fp_prv=None, password = None,listen=5, record=None, cafile=None, capath=None, cadata=None,check_hostname=True):
85
+ super().init(addr, listen, record)
86
+ self.rules = rules
87
+ self.verify_context = mhttps.load_verify_context(cafile, capath, cadata,check_hostname)
88
+ self.context = None if fp_cert is None else mhttps.load_server_context(fp_cert, fp_prv, password)
89
+ def make_dealer(self, skt, addr):
90
+ return GWDealer(skt, self.rules, self.verify_context, self.context, record=self.record.clone())
@@ -62,17 +62,21 @@ def http_decode(line):
62
62
  #log.debug(f"http_docde: {a,b,c}")
63
63
  return a,b,c.strip()
64
64
  pass
65
- def http_encode_send(http_type, url, headers=None, data_size=0, protocol = "HTTP/1.1"):
65
+ def spt_url(url):
66
66
  index = url.find("://")
67
67
  prev = url[:index]
68
68
  url = url[index+3:]
69
- index = url.find("/")
70
- if index>=0:
71
- addr = url[:index]
72
- url = url[index:]
73
- else:
74
- addr = url
75
- url = "/"
69
+ addr = url.split("?")[0].split("/")[0]
70
+ url = url[len(addr):]
71
+ if len(url)==0 or url[0]!="/":
72
+ url = "/"+url
73
+ return prev, addr, url
74
+
75
+ pass
76
+ def comb_url(prev, addr, url):
77
+ return prev+"://"+addr+url
78
+ def http_encode_send(http_type, url, headers=None, data_size=0, protocol = "HTTP/1.1"):
79
+ prev, addr, url = spt_url(url)
76
80
  addrs = addr.split(":")
77
81
  ip = addrs[0]
78
82
  if prev.upper()=="HTTP":
@@ -171,20 +175,24 @@ class SendDone(Base):
171
175
  if not self.to_rel:
172
176
  return
173
177
  self.skt.close()
174
- def http_send_head(http_type, url, headers=None, data_size=0,protocol='HTTP/1.1', skt=None, caches=None):
178
+ def http_send_head(http_type, url, headers=None, data_size=0,protocol='HTTP/1.1', skt=None, caches=None, fc_connect=None):
175
179
  if caches is None:
176
180
  caches = {}
177
181
  bts, addr,keep_alive = http_encode_send(http_type, url, headers, data_size,protocol=protocol)
182
+ pfx = spt_url(url)[0].lower()
183
+ if fc_connect is None:
184
+ fc_connect = WSocket.Connect
178
185
  #log.debug(f"request addr: {addr}")
179
186
  #log.debug(f"http_send: {len(bts)}")
180
187
  retry=0
181
188
  use_caches=skt is None and keep_alive
182
189
  need_rel = keep_alive
190
+ addr_key = tuple([pfx]+list(addr))
183
191
  if skt is None:
184
- if not keep_alive or addr not in caches:
185
- skt = WSocket.Connect(addr)
186
- elif addr in caches:
187
- skt = caches[addr]
192
+ if not keep_alive or addr_key not in caches:
193
+ skt = fc_connect(addr)
194
+ else:
195
+ skt = caches[addr_key]
188
196
  retry=1
189
197
  else:
190
198
  need_rel=False
@@ -193,12 +201,12 @@ def http_send_head(http_type, url, headers=None, data_size=0,protocol='HTTP/1.1'
193
201
  skt.send(bts)
194
202
  except:
195
203
  if retry:
196
- skt=WSocket.Connect(addr)
204
+ skt=fc_connect(addr)
197
205
  skt.send(bts)
198
206
  else:
199
207
  raise
200
208
  if use_caches:
201
- caches[addr]=skt
209
+ caches[addr_key]=skt
202
210
  return skt,fc_done
203
211
 
204
212
  class HttpMonitor(Base):
@@ -0,0 +1,28 @@
1
+ #
2
+
3
+ import ssl
4
+ from . import mhttp
5
+
6
+ def load_verify_context(cafile=None, capath=None, cadata=None,check_hostname=True):
7
+ if cafile is not None or capath is not None or cadata is not None:
8
+ # 导入根证书,需要单个根证书文件cafile或者根证书文件夹capath或者根证书数据cadata
9
+ # cadata是证书数据,不清楚能不能多个证书字节码拼在一起
10
+ srv_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
11
+ srv_context.load_verify_locations(cafile=cafile, capath=capath, cadata=cadata)
12
+ srv_context.check_hostname = check_hostname
13
+ else:
14
+ # 不会校验服务端https证书是否有效,可能有风险?
15
+ srv_context = ssl._create_unverified_context(ssl.PROTOCOL_TLS_CLIENT)
16
+ return srv_context
17
+
18
+ pass
19
+
20
+ def load_server_context(fp_cert, fp_prv, pwd=None):
21
+ context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
22
+ context.load_cert_chain(fp_cert, fp_prv, password=pwd)
23
+ return context
24
+
25
+ def wrap(context, wrap_cli, server_side, is_wrap = True):
26
+ if is_wrap:
27
+ wrap_cli = wrap_cli.skt
28
+ return mhttp.WSocket.Bind(context.wrap_socket(wrap_cli, server_side=server_side))
@@ -8,29 +8,36 @@ class ProxyDealer(Base):
8
8
  """
9
9
  http和https代理
10
10
  """
11
- def init(self, skt, channel_read_size=1024000, record=None, protocol = "HTTP/1.1"):
11
+ def init(self, skt, channel_read_size=1024000, record=None, protocol = "HTTP/1.1", default_deal=None):
12
12
  self.wskt = mhttp.WSocket.Bind(skt)
13
13
  self.channel_read_size = channel_read_size
14
14
  self.deals = {}
15
- self.deals[None] = self.default_deal
15
+ if default_deal is None:
16
+ default_deal = self.default_deal
17
+ self.deals[None] = default_deal
16
18
  self.deals['CONNECT'] = self.connect_deal
17
19
  self.skts = {}
18
20
  self.protocol = protocol
19
21
  if record is None:
20
22
  record = _record.MsgLog(log)
21
23
  self.record = record
22
- def simple_chunked(self, skt_read, skt_send):
24
+ def simple_chunked(self, skt_read, skt_send=None):
23
25
  while True:
24
26
  n, dt = mhttp.chunked_data(skt_read)
25
27
  self.record.add_chunk(dt)
26
28
  bts = mhttp.chunked_encode(dt)
27
- skt_send.send(bts)
29
+ if skt_send is not None:
30
+ skt_send.send(bts)
28
31
  if n==0:
29
32
  break
30
- def default_deal(self, skt_cli, line, headers, data_size, skt=None):
33
+ def do_connect(self, addr):
34
+ return mhttp.WSocket.Connect(addr)
35
+ def default_deal(self, skt_cli, line, headers, data_size, skt=None, fc_connect=None):
36
+ if fc_connect is None:
37
+ fc_connect = self.do_connect
31
38
  self.record.request(line, headers, data_size)
32
39
  http_type, url, protocol = line
33
- skt,fc_done = mhttp.http_send_head(http_type, url, headers, data_size,protocol, skt, self.skts)
40
+ skt,fc_done = mhttp.http_send_head(http_type, url, headers, data_size,protocol, skt, self.skts, fc_connect)
34
41
  if data_size>0:
35
42
  data = skt_cli.read(data_size)
36
43
  skt.send(data)
@@ -42,6 +49,7 @@ class ProxyDealer(Base):
42
49
  self.record.response(line, headers, data_size)
43
50
  protocol, code, rsp_text = line
44
51
  bts = mhttp.http_encode_rsp(code, rsp_text, headers, data_size, protocol)
52
+ print(f"[TESTZ] bts send: {bts}")
45
53
  skt_cli.send(bts)
46
54
  if data_size>0:
47
55
  data = skt.read(data_size)
@@ -58,6 +66,14 @@ class ProxyDealer(Base):
58
66
  skt.close()
59
67
  except:
60
68
  pass
69
+ def error(self, skt_cli, code=404, txt="Not Found", data=None):
70
+ if data is None:
71
+ data = txt
72
+ if type(data)==str:
73
+ data = data.encode("utf-8")
74
+ bts = mhttp.http_encode_rsp(code, txt, data_size=len(data), protocol = self.protocol)
75
+ skt_cli.send(bts+data)
76
+ log.debug(f"error: {code}, txt={txt}")
61
77
  def connect_deal(self, skt_cli, line, headers, data_size, skt=None):
62
78
  self.record.request(line, headers, data_size)
63
79
  if data_size>0:
@@ -78,14 +94,15 @@ class ProxyDealer(Base):
78
94
  except:
79
95
  code,txt=404,"Not Found"
80
96
  self.record.response([self.protocol,code, txt],{},0).finish()
97
+ if code!=200:
98
+ return self.error(skt_cli, code, txt)
81
99
  bts = mhttp.http_encode_rsp(code, txt, protocol = self.protocol)
82
100
  skt_cli.send(bts)
83
- if code==200:
84
- try:
85
- self.deal_channel(skt_cli, skt)
86
- finally:
87
- if need_close:
88
- skt.close()
101
+ try:
102
+ self.deal_channel(skt_cli, skt)
103
+ finally:
104
+ if need_close:
105
+ skt.close()
89
106
  def deal_channel(self, skt_cli, skt_srv):
90
107
  return self.direct_channel(skt_cli, skt_srv)
91
108
  def direct_channel(self, skt_cli, skt_srv):
@@ -147,6 +164,8 @@ class Proxy(Base):
147
164
  self.record = record
148
165
  def close(self):
149
166
  self.skt.close()
167
+ def make_dealer(self, skt, addr):
168
+ return ProxyDealer(skt, record=self.record.clone())
150
169
  def call(self):
151
170
  self.running=True
152
171
  skt = socket.socket()
@@ -155,7 +174,7 @@ class Proxy(Base):
155
174
  self.skt = skt
156
175
  while self.running:
157
176
  skt,addr = self.skt.accept()
158
- deal = ProxyDealer(skt,record=self.record.clone())
177
+ deal = self.make_dealer(skt, addr)
159
178
  th = threading.Thread(target=deal,daemon=True)
160
179
  th.start()
161
180
  self.ths.append(th)
@@ -0,0 +1,33 @@
1
+
2
+
3
+ from buildz import xf,fz,pathz,logz,pyz
4
+ from buildz.netz import mhttp
5
+ import threading
6
+ confs = r"""
7
+ [
8
+ {match=^/baidu, replace='www.baidu.com',ssl=true}
9
+ ]
10
+ """
11
+ rules = xf.loads(confs)
12
+ path = pathz.Path()
13
+ path.set("res", "./res")
14
+ log = logz.simple(path.res("gw/%Y%m%d.log"))
15
+ def gw():
16
+ import sys,time
17
+ ip = '127.0.0.1'
18
+ port = 9999
19
+ args = sys.argv[1:]
20
+ if len(args)>0:
21
+ ip = args.pop(0)
22
+ if len(args)>0:
23
+ port = int(args.pop(0))
24
+ px = mhttp.Gateway((ip, port), rules, record=mhttp.MsgLog(log))
25
+ th = threading.Thread(target=px,daemon=True)
26
+ th.start()
27
+ print(f"start on {(ip, port)}")
28
+ while px.running:
29
+ time.sleep(1)
30
+
31
+ #pyz.lc(locals(), caps)
32
+ pyz.lc(locals(), gw)
33
+
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.58
3
+ Version: 0.6.59
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
@@ -219,7 +219,9 @@ buildz/iocz/wrap/wraps.py
219
219
  buildz/netz/__init__.py
220
220
  buildz/netz/mhttp/__init__.py
221
221
  buildz/netz/mhttp/caps.py
222
+ buildz/netz/mhttp/gateway.py
222
223
  buildz/netz/mhttp/mhttp.py
224
+ buildz/netz/mhttp/mhttps.py
223
225
  buildz/netz/mhttp/proxy.py
224
226
  buildz/netz/mhttp/record.py
225
227
  buildz/netz/sslz/__init__.py
@@ -228,6 +230,7 @@ buildz/netz/sslz/gen.pyi
228
230
  buildz/netz/test/__main__.py
229
231
  buildz/netz/test/test.py
230
232
  buildz/netz/test/test_cli.py
233
+ buildz/netz/test/test_gw.py
231
234
  buildz/tz/__init__.py
232
235
  buildz/tz/myers_diff.py
233
236
  buildz/tz/test_xfind.py
@@ -7,7 +7,7 @@ from setuptools import setup, find_packages
7
7
 
8
8
  setup(
9
9
  name = 'buildz',
10
- version = '0.6.58',
10
+ version = '0.6.59',
11
11
  keywords='buildz',
12
12
  long_description=open('README.md', 'r', encoding="utf-8").read(),
13
13
  long_description_content_type='text/markdown',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes