buildz 0.6.31__tar.gz → 0.6.33__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 (218) hide show
  1. {buildz-0.6.31/buildz.egg-info → buildz-0.6.33}/PKG-INFO +1 -1
  2. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/log.py +1 -1
  3. buildz-0.6.33/buildz/db/__init__.py +2 -0
  4. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/dv/basez.py +42 -0
  5. buildz-0.6.33/buildz/db/dv/orm.py +36 -0
  6. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/dv/sqlite3z.py +8 -2
  7. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/dv/structz.py +27 -7
  8. buildz-0.6.33/buildz/db/tls.py +32 -0
  9. buildz-0.6.31/buildz/tz/log.py → buildz-0.6.33/buildz/logz.py +37 -10
  10. buildz-0.6.33/buildz/tools.py +4 -0
  11. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/time/timez.py +1 -1
  12. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/mapz.py +4 -0
  13. buildz-0.6.33/buildz/xz/__init__.py +1 -0
  14. buildz-0.6.33/buildz/xz/conf.js +16 -0
  15. buildz-0.6.33/buildz/xz/data.js +35 -0
  16. buildz-0.6.33/buildz/xz/test.py +12 -0
  17. buildz-0.6.33/buildz/xz/trs.py +174 -0
  18. {buildz-0.6.31 → buildz-0.6.33/buildz.egg-info}/PKG-INFO +1 -1
  19. {buildz-0.6.31 → buildz-0.6.33}/buildz.egg-info/SOURCES.txt +10 -2
  20. {buildz-0.6.31 → buildz-0.6.33}/setup.py +1 -1
  21. buildz-0.6.31/buildz/tools.py +0 -4
  22. {buildz-0.6.31 → buildz-0.6.33}/LICENSE +0 -0
  23. {buildz-0.6.31 → buildz-0.6.33}/MANIFEST.in +0 -0
  24. {buildz-0.6.31 → buildz-0.6.33}/README.md +0 -0
  25. {buildz-0.6.31 → buildz-0.6.33}/buildz/__init__.py +0 -0
  26. {buildz-0.6.31 → buildz-0.6.33}/buildz/__main__.py +0 -0
  27. {buildz-0.6.31 → buildz-0.6.33}/buildz/argx.py +0 -0
  28. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/__init__.py +0 -0
  29. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/cache.py +0 -0
  30. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/config.py +0 -0
  31. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/dbs.py +0 -0
  32. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/deal.py +0 -0
  33. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/deal_list.py +0 -0
  34. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/deal_type.py +0 -0
  35. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/defs.py +0 -0
  36. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/factory.py +0 -0
  37. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/init.py +0 -0
  38. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/request.py +0 -0
  39. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/run.py +0 -0
  40. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/save.py +0 -0
  41. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/test/res/cache/cache.js +0 -0
  42. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/test/res/config/base.js +0 -0
  43. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/test/res/config/config.js +0 -0
  44. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/test/res/data/fp.js +0 -0
  45. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/test/res/data/item1.js +0 -0
  46. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/test/res/data/item2.js +0 -0
  47. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/test/res/data/test.js +0 -0
  48. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/test/test.py +0 -0
  49. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/test/xtest.py +0 -0
  50. {buildz-0.6.31 → buildz-0.6.33}/buildz/auto/verify.py +0 -0
  51. {buildz-0.6.31 → buildz-0.6.33}/buildz/base.py +0 -0
  52. {buildz-0.6.31 → buildz-0.6.33}/buildz/cmd.py +0 -0
  53. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/__main__.py +0 -0
  54. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/dv/__init__.py +0 -0
  55. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/dv/clickhousez.py +0 -0
  56. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/dv/lib/readme +0 -0
  57. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/dv/mysqlz.py +0 -0
  58. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/dv/oraclez.py +0 -0
  59. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/dv/postgresqlz.py +0 -0
  60. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/install.txt +0 -0
  61. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/run.conf +0 -0
  62. {buildz-0.6.31 → buildz-0.6.33}/buildz/db/runz.py +0 -0
  63. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/ioc/deal.py +0 -0
  64. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/ioc/help.py +0 -0
  65. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/myers/deal.py +0 -0
  66. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/myers/help.py +0 -0
  67. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/conf/ioc.js +0 -0
  68. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/conf/main.js +0 -0
  69. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/conf/myers.js +0 -0
  70. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/conf/search.js +0 -0
  71. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/conf/xf.js +0 -0
  72. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/help/default.js +0 -0
  73. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/help/ioc.js +0 -0
  74. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/help/myers.js +0 -0
  75. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/help/search.js +0 -0
  76. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/help/xf.js +0 -0
  77. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/res/test.js +0 -0
  78. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/search/deal.py +0 -0
  79. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/search/help.py +0 -0
  80. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/test.py +0 -0
  81. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/xf/deal.py +0 -0
  82. {buildz-0.6.31 → buildz-0.6.33}/buildz/demo/xf/help.py +0 -0
  83. {buildz-0.6.31 → buildz-0.6.33}/buildz/fz/__init__.py +0 -0
  84. {buildz-0.6.31 → buildz-0.6.33}/buildz/fz/dirz.py +0 -0
  85. {buildz-0.6.31 → buildz-0.6.33}/buildz/fz/fhs.py +0 -0
  86. {buildz-0.6.31 → buildz-0.6.33}/buildz/fz/fio.py +0 -0
  87. {buildz-0.6.31 → buildz-0.6.33}/buildz/fz/lsf.py +0 -0
  88. {buildz-0.6.31 → buildz-0.6.33}/buildz/html/__init__.py +0 -0
  89. {buildz-0.6.31 → buildz-0.6.33}/buildz/html/test/demo.html +0 -0
  90. {buildz-0.6.31 → buildz-0.6.33}/buildz/html/test/test.py +0 -0
  91. {buildz-0.6.31 → buildz-0.6.33}/buildz/html/xml.py +0 -0
  92. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/__init__.py +0 -0
  93. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/base.py +0 -0
  94. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/init.py +0 -0
  95. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc/base.py +0 -0
  96. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc/conf.py +0 -0
  97. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc/confs.py +0 -0
  98. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc/decorator.py +0 -0
  99. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc/single.py +0 -0
  100. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/base.py +0 -0
  101. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/branch.py +0 -0
  102. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/call.py +0 -0
  103. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/calls.py +0 -0
  104. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/branch_lists.js +0 -0
  105. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/call_defaults.js +0 -0
  106. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/call_lists.js +0 -0
  107. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/calls_defaults.js +0 -0
  108. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/calls_lists.js +0 -0
  109. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/deal_lists.js +0 -0
  110. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/deals.js +0 -0
  111. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/env_lists.js +0 -0
  112. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/ioc_lists.js +0 -0
  113. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/iocf_lists.js +0 -0
  114. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/join_lists.js +0 -0
  115. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/list_lists.js +0 -0
  116. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/map_lists.js +0 -0
  117. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/mcall_defaults.js +0 -0
  118. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/mcall_lists.js +0 -0
  119. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/obj_cst_lists.js +0 -0
  120. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/obj_defaults.js +0 -0
  121. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/obj_lists.js +0 -0
  122. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/obj_set_lists.js +0 -0
  123. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/ovar_lists.js +0 -0
  124. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/ref_lists.js +0 -0
  125. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/refs_lists.js +0 -0
  126. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/var_lists.js +0 -0
  127. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/xfile_defaults.js +0 -0
  128. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/conf/xfile_lists.js +0 -0
  129. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/deal.py +0 -0
  130. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/demo.py +0 -0
  131. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/env.py +0 -0
  132. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/init.py +0 -0
  133. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/ioc.py +0 -0
  134. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/iocf.py +0 -0
  135. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/join.py +0 -0
  136. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/list.py +0 -0
  137. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/map.py +0 -0
  138. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/mcall.py +0 -0
  139. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/obj.py +0 -0
  140. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/ovar.py +0 -0
  141. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/ref.py +0 -0
  142. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/refs.py +0 -0
  143. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/val.py +0 -0
  144. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/var.py +0 -0
  145. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/ioc_deal/xfile.py +0 -0
  146. {buildz-0.6.31 → buildz-0.6.33}/buildz/ioc/wrap.py +0 -0
  147. {buildz-0.6.31 → buildz-0.6.33}/buildz/pyz.py +0 -0
  148. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/__init__.py +0 -0
  149. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/myers_diff.py +0 -0
  150. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/test_xfind.py +0 -0
  151. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/time/__init__.py +0 -0
  152. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/tio/__init__.py +0 -0
  153. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/tio/base.py +0 -0
  154. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/tio/getch.py +0 -0
  155. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/tio/lx.py +0 -0
  156. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/tio/test.py +0 -0
  157. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/tio/win.py +0 -0
  158. {buildz-0.6.31 → buildz-0.6.33}/buildz/tz/xfind.py +0 -0
  159. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/__init__.py +0 -0
  160. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/__main__.py +0 -0
  161. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/code.py +0 -0
  162. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/code_modify.py +0 -0
  163. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/copy_old.py +0 -0
  164. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/file.py +0 -0
  165. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/base.py +0 -0
  166. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/buffer.py +0 -0
  167. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/listz.py +0 -0
  168. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/lr.py +0 -0
  169. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/lrval.py +0 -0
  170. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/mapz.py +0 -0
  171. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/nextz.py +0 -0
  172. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/reval.py +0 -0
  173. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/setz.py +0 -0
  174. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/spc.py +0 -0
  175. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/spt.py +0 -0
  176. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/deal/strz.py +0 -0
  177. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/exp.py +0 -0
  178. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/item.py +0 -0
  179. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/mg.py +0 -0
  180. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loader/pos.py +0 -0
  181. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/base.py +0 -0
  182. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/buffer.py +0 -0
  183. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/listmapz.py +0 -0
  184. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/listz.py +0 -0
  185. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/lr.py +0 -0
  186. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/lrval.py +0 -0
  187. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/mapz.py +0 -0
  188. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/nextz.py +0 -0
  189. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/reval.py +0 -0
  190. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/setz.py +0 -0
  191. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/spc.py +0 -0
  192. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/spt.py +0 -0
  193. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/strz.py +0 -0
  194. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/strz_new.py +0 -0
  195. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/deal/strz_old.py +0 -0
  196. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/exp.py +0 -0
  197. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/item.py +0 -0
  198. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/mg.py +0 -0
  199. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/pos.py +0 -0
  200. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/test.py +0 -0
  201. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/loaderz/test1.py +0 -0
  202. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/read.py +0 -0
  203. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/readz.py +0 -0
  204. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/stack.py +0 -0
  205. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/write.py +0 -0
  206. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/writer/base.py +0 -0
  207. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/writer/conf.py +0 -0
  208. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/writer/deal/jsonval.py +0 -0
  209. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/writer/deal/listz.py +0 -0
  210. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/writer/deal/mapz.py +0 -0
  211. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/writer/deal/reval.py +0 -0
  212. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/writer/deal/strz.py +0 -0
  213. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/writer/itemz.py +0 -0
  214. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/writer/mg.py +0 -0
  215. {buildz-0.6.31 → buildz-0.6.33}/buildz/xf/xargs.py +0 -0
  216. {buildz-0.6.31 → buildz-0.6.33}/buildz.egg-info/dependency_links.txt +0 -0
  217. {buildz-0.6.31 → buildz-0.6.33}/buildz.egg-info/top_level.txt +0 -0
  218. {buildz-0.6.31 → buildz-0.6.33}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.31
3
+ Version: 0.6.33
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
@@ -7,7 +7,7 @@ from ..base import Base
7
7
  from ..ioc import wrap
8
8
  from ..tools import *
9
9
  import time, sys
10
- from ..tz.log import FpLog
10
+ from ..logz import FpLog
11
11
  @wrap.obj(id="log")
12
12
  @wrap.obj_sets(cache="ref,cache")
13
13
  class AutoLog(FpLog):
@@ -0,0 +1,2 @@
1
+
2
+ from .tls import *
@@ -1,5 +1,6 @@
1
1
  import sys
2
2
  from .structz import ItDv
3
+ from buildz.db import tls
3
4
  def sp(obj):
4
5
  return super(obj.__class__, obj)
5
6
 
@@ -57,6 +58,47 @@ class SimpleDv(ItDv):
57
58
  def execute(self, sql, vals=()):
58
59
  tmp = self.cursor.execute(sql, vals)
59
60
  return tmp
61
+ def insert_or_update(self, maps, table, keys = None):
62
+ if type(maps)!=dict:
63
+ maps = maps.__dict__
64
+ if keys is None:
65
+ keys = []
66
+ if type(keys) not in (list, tuple):
67
+ keys = [keys]
68
+ update = False
69
+ conds = ""
70
+ if len(keys)>0:
71
+ need_query = True
72
+ conds = []
73
+ for k in keys:
74
+ if k not in maps:
75
+ need_query = False
76
+ break
77
+ v = maps[k]
78
+ if type(v)==str:
79
+ v = f"'{v}'"
80
+ if v not is None:
81
+ cond = f"{k} = {v}"
82
+ else:
83
+ cond = f"{k} is null"
84
+ conds.append(cond)
85
+ if need_query:
86
+ conds = " and ".join(conds)
87
+ sql_search = f"select count(*) from {table} where {conds}"
88
+ rst = self.query(sql_search)[1][0]
89
+ update = rst>0
90
+ if update:
91
+ keys = set(keys)
92
+ kvs = [[k,tls.py2sql(v)] for k,v in maps.items() if k not in keys]
93
+ sets = [f"{k}={v}"]
94
+ sets = ",".join(sets)
95
+ sql = f"update {table} set {sets} where {conds}"
96
+ else:
97
+ kvs = [k, tls.py2sql(v) for k,v in maps.items()]
98
+ ks = ",".join([kv[0] for kv in kvs])
99
+ vs = ",".join([kv[1] for kv in kvs])
100
+ sql = f"insert into {table}({ks}) values({vs});"
101
+ return self.execute(sql)
60
102
 
61
103
  pass
62
104
 
@@ -0,0 +1,36 @@
1
+ #coding=utf-8
2
+
3
+ from buildz import Base
4
+ from buildz.db import tls
5
+ class TableObject(Base):
6
+ def init(self, keys, table=None, translates=None, primary_keys=None, auto_translate=True, dv = None):
7
+ if table_name is None:
8
+ table = tls.lower(self.__class__.__name__)
9
+ self.table = table
10
+ if translates is None:
11
+ translates = {}
12
+ for key in keys:
13
+ if key not in translates:
14
+ k_py, k_sql = key,key
15
+ if auto_translate:
16
+ k_py,k_sql = tls.upper(key), tls.lower(key)
17
+ translates[k_py] = k_sql
18
+ self.translates = translates
19
+ self.keys = keys
20
+ if primary_keys is None:
21
+ primary_keys = []
22
+ self.primary_keys = primary_keys
23
+ self.dv = dv
24
+ def save(self, obj, dv=None):
25
+ if dv is None:
26
+ dv = self.dv
27
+ assert dv is not None
28
+ if type(obj)!=dict:
29
+ tmp = {}
30
+ for k in self.translates:
31
+ if hasattr(obj, k):
32
+ tmp[k] = getattr(obj, k)
33
+ obj = tmp
34
+ obj = {self.translates[k]:v for k,v in obj.items()}
35
+ return dv.insert_or_update(obj, self.table, self.primary_keys)
36
+
@@ -1,8 +1,9 @@
1
1
 
2
2
  import sqlite3
3
- import sys
3
+ import sys,os
4
4
  from .basez import SimpleDv, fetch
5
5
  from .structz import CMD
6
+ from buildz import xf,fz
6
7
  class Db(SimpleDv):
7
8
  # func to impl:
8
9
  def to_list(self, rst):
@@ -23,11 +24,16 @@ class Db(SimpleDv):
23
24
  self.cursor = None
24
25
  self.init(fp)
25
26
  def init(self, fp):
27
+ fz.makefdir(fp)
26
28
  self.fp = fp
27
29
 
28
30
  pass
29
31
  def build(argv, conf):
30
- dv = Db(argv[0])
32
+ root = xf.g(conf, root=None)
33
+ fp = argv[0]
34
+ if root is not None:
35
+ fp = os.path.join(root, fp)
36
+ dv = Db(fp)
31
37
  return dv
32
38
  def buildbk(argv, conf):
33
39
  return CMD(make(argv, conf))
@@ -1,5 +1,9 @@
1
1
  #import pymysql
2
2
  import sys
3
+ import datetime
4
+ import decimal
5
+ from buildz import logz
6
+ from buildz.db import tls
3
7
  class ItDv:
4
8
  def begin(self):
5
9
  pass
@@ -28,10 +32,12 @@ class CMD:
28
32
  return self.dv.begin()
29
33
  def close(self):
30
34
  return self.dv.close()
31
- def __init__(self, dv, simple_format = True):
35
+ def __init__(self, dv, simple_format = True, log = None):
32
36
  self.s_rst = ""
33
37
  self.dv = dv
34
38
  self.simple_format = simple_format
39
+ self.log = logz.make(log)
40
+ self.insert_or_update = dv.insert_or_update
35
41
  def __enter__(self, *argv, **maps):
36
42
  self.dv.begin()
37
43
  return self
@@ -79,9 +85,20 @@ class CMD:
79
85
  if type(obj) == decimal.Decimal:
80
86
  obj = str(obj)
81
87
  if type(obj) == bytes:
82
- obj = list(obj)[0]
88
+ for code in "utf-8,gbk".split(","):
89
+ try:
90
+ obj = obj.decode(code)
91
+ break
92
+ except:
93
+ continue
94
+ else:
95
+ obj = list(obj)
96
+ #obj = list(obj)[0]
83
97
  import json
84
- rs = json.dumps(obj, ensure_ascii=0)
98
+ try:
99
+ rs = json.dumps(obj, ensure_ascii=0)
100
+ except:
101
+ rs = json.dumps(str(obj), ensure_ascii=0)
85
102
  return rs
86
103
  def tr_sz(self, s, sz):
87
104
  try:
@@ -89,7 +106,7 @@ class CMD:
89
106
  s = s+(b" "*(sz-len(s)))
90
107
  s = s.decode("gbk")
91
108
  except Exception as exp:
92
- print("TR_SZ exp:", exp)
109
+ self.log.error("TR_SZ exp:", exp)
93
110
  return s
94
111
  def format(self, arr):
95
112
  arr = [[self.rp(k) for k in obj] for obj in arr]
@@ -118,7 +135,7 @@ class CMD:
118
135
  elif s.split(" ")[0] == "source":
119
136
  # source filepath [encoding]
120
137
  arr = s.split(" ")
121
- fp =arr[1].strip()
138
+ fp =arr[1].strip().split(";")[0]
122
139
  cd = "utf-8"
123
140
  if len(arr)>2:
124
141
  cd = arr[2].strip().lower()
@@ -126,14 +143,17 @@ class CMD:
126
143
  s = f.read().decode(cd)
127
144
  arr = s.split(";")
128
145
  n = len(arr)
129
- print(f"[TESTZ] done fread {fp}: {len(arr)}")
146
+ self.log.info(f"[TESTZ] done fread {fp}: {len(arr)}")
130
147
  i=0
131
148
  for sql in arr:
149
+ sql=sql.replace("\r","")
150
+ sql = sql.split("\n")
151
+ sql = [k for k in sql if k.strip()[:2]!="--"]
152
+ sql = "\n".join(sql)
132
153
  if sql.strip() == "" or sql.strip()[:2]=="--":
133
154
  continue
134
155
  _sql = sql+";"
135
156
  #self.s_print("sql:", _sql)
136
- #print(f"[TESTZ] sql: {_sql}")
137
157
  tmp = self.execute(_sql)
138
158
  #self.s_print(tmp)
139
159
  i+=1
@@ -0,0 +1,32 @@
1
+ #
2
+ def lower(val):
3
+ rst = ""
4
+ for c in val:
5
+ if c.lower()!=c:
6
+ c = "_"+c.lower()
7
+ rst+=c
8
+ return rst
9
+ pass
10
+ def upper(val):
11
+ rst = ""
12
+ mark_up = False
13
+ for c in val:
14
+ if c == "_":
15
+ mark_up = True
16
+ continue
17
+ if mark_up:
18
+ c = c.upper()
19
+ rst+=c
20
+ return rst
21
+ pass
22
+ def py2sql(val):
23
+ if val is None:
24
+ return 'null'
25
+ if type(val)==str:
26
+ return f"'{val}'"
27
+ if type(val) == datetime.datetime:
28
+ val = str(val)
29
+ if type(val) == decimal.Decimal:
30
+ val = str(val)
31
+ return val
32
+ pass
@@ -1,11 +1,10 @@
1
1
  #
2
2
 
3
3
 
4
- from .. import xf
5
- from .. import ioc
6
- from ..base import Base
7
- from ..ioc import wrap
8
- from ..tools import *
4
+ from . import xf, ioc, fz
5
+ from .base import Base
6
+ from .ioc import wrap
7
+ #from .tools import *
9
8
  import time, sys
10
9
  class Log(Base):
11
10
  def tag(self, _tag):
@@ -56,13 +55,14 @@ def mstr(s):
56
55
  if s is None or len(s)==0:
57
56
  return s
58
57
  return s[:1].upper()+s[1:].lower()
59
- class FpLog(Log):
60
- def init(self, fp = None,shows =None, tag=None, format=None):
58
+ class FormatLog(Log):
59
+ def init(self, shows =None, tag=None, format=None):
61
60
  if format is None:
62
61
  format = "[{LEVEL}] %Y-%m-%d %H:%M:%S {tag} {msg}\n"
63
62
  self.format=format
64
63
  super().init(shows, tag)
65
- self.fp = fp
64
+ def output(self, msg):
65
+ raise Exception("impl")
66
66
  def log(self, level, tag, *args):
67
67
  m_level = level.lower()
68
68
  u_level = level.upper()
@@ -73,8 +73,12 @@ class FpLog(Log):
73
73
  tag = "base"
74
74
  rst = time.strftime(self.format, time.localtime(time.time()))
75
75
  msg = replaces(rst, "{Level}", x_level, "{level}", m_level, "{LEVEL}", u_level, "{tag}", tag, "{msg}", msg)
76
- # rst = rst.replace("{level}",level).replace("{tag}", tag).replace
77
- # msg = f"[{level}] {date} {tag} {msg}\n"
76
+ self.output(msg)
77
+ class FpLog(FormatLog):
78
+ def init(self, fp = None,shows =None, tag=None, format=None):
79
+ super().init(shows, tag, format)
80
+ self.fp = fp
81
+ def output(self, msg):
78
82
  sys.stdout.write(msg)
79
83
  if self.fp is not None:
80
84
  fp = time.strftime(self.fp)
@@ -82,3 +86,26 @@ class FpLog(Log):
82
86
  fz.write(msg.encode("utf-8"), fp, 'ab')
83
87
 
84
88
  pass
89
+ class StdLog(FormatLog):
90
+ def output(self, msg):
91
+ sys.stdout.write(msg)
92
+
93
+ pass
94
+
95
+ class Logs(Log):
96
+ def init(self, logs, shows = None, tag= None):
97
+ super().init(shows, tag)
98
+ self.logs = logs
99
+ def log(self, level, tag, *args):
100
+ for _log in self.logs:
101
+ _log.log(level, tag, *args)
102
+
103
+ pass
104
+
105
+ def build(obj=None, shows=None, tag=None, format=None):
106
+ if obj is None:
107
+ return StdLog(shows, tag, format)
108
+ return obj
109
+
110
+ pass
111
+ make=build
@@ -0,0 +1,4 @@
1
+ #coding=utf-8
2
+ # from buildz.tools import *
3
+ from . import pyz,xf,fz,Base, ioc, logz,xz
4
+ from .tz.time import timecost,showcost
@@ -1,6 +1,6 @@
1
1
  import time
2
2
  from ... import Base
3
- from ..log import FpLog
3
+ from ...logz import FpLog
4
4
  class Clock(Base):
5
5
  def default(self, cost, fc, rst, *a, **b):
6
6
  print(f"cost {cost} sec on {fc}")
@@ -193,6 +193,10 @@ def removes(maps, keys):
193
193
  return None
194
194
 
195
195
  pass
196
+ dset = sets
197
+ dget = gets
198
+ dhas = has
199
+ dremove = removes
196
200
  def l2m(arr, **maps):
197
201
  rst = {}
198
202
  i = 0
@@ -0,0 +1 @@
1
+ from .trs import Translate
@@ -0,0 +1,16 @@
1
+
2
+ main:{
3
+ data.total: total
4
+ data.diff: datas1
5
+ datas1: [datas, list, trs.datas]
6
+ }
7
+
8
+ trs.datas: {
9
+ var0: code
10
+ var1: name
11
+ var2: group
12
+ var3: num
13
+ var4: val
14
+ _: [type, val, 'A']
15
+ _1: [typeV, var, x]
16
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ data: {
3
+ total: 1024
4
+ diff: [
5
+ {
6
+ var0: 001
7
+ var1: 测试
8
+ var2: 100
9
+ var3: 1000
10
+ var4: 1e2
11
+ }
12
+ {
13
+ var0: 002
14
+ var1: 测试
15
+ var2: 102
16
+ var3: 1002
17
+ var4: 2e3
18
+ }
19
+ {
20
+ var0: 003
21
+ var1: 测试
22
+ var2: 300
23
+ var3: 3000
24
+ var4: 3e4
25
+ }
26
+ {
27
+ var0: 004
28
+ var1: 测试
29
+ var2: 104
30
+ var3: 1004
31
+ var4: 4e5
32
+ }
33
+ ]
34
+ }
35
+ }
@@ -0,0 +1,12 @@
1
+ #
2
+
3
+ from buildz.xz import trs
4
+ from buildz import xf
5
+
6
+ data = xf.loadf("data.js")
7
+ conf = xf.loadf("conf.js")
8
+
9
+ obj = trs.Translate(conf, inline = 1, remove_src = 1, vars = {"x":"test"})
10
+ rst = obj(data)
11
+ print(rst)
12
+
@@ -0,0 +1,174 @@
1
+
2
+ from buildz import xf, Base
3
+ class Translate(Base):
4
+ """
5
+ conf:
6
+ main: [
7
+ null, mdict
8
+ [
9
+
10
+ ]
11
+ ]
12
+ main: [
13
+ [data.total, total] // [data.total, total, key]
14
+ [data.diff, datas, list, translates]
15
+ ]
16
+ or:
17
+ main: {
18
+ data.total: total
19
+ data.diff: [datas, list, translates]
20
+ }
21
+ translates: {
22
+ ...
23
+ }
24
+ """
25
+ def init(self, conf, src_spt=".",dst_spt = ".", inline = False, remove_src = False, vars = None):
26
+ self.conf = conf
27
+ self.src_spt = src_spt
28
+ self.dst_spt = dst_spt
29
+ self.inline = inline
30
+ self.remove_src = remove_src
31
+ self.cache_conf = {}
32
+ self.vars = vars
33
+ def kfc(self, fckey, val, vars=None):
34
+ fc = self.var(fckey, vars)
35
+ return fc(val)
36
+ def var(self, key, vars=None):
37
+ #print(f"[TESTZ] vars: {vars}")
38
+ if vars is None:
39
+ vars = self.vars
40
+ #print(f"[TESTZ] vars: {vars}")
41
+ if vars is None:
42
+ raise Exception(f"var not found: {key}")
43
+ if type(vars)==dict:
44
+ if key not in vars:
45
+ raise Exception(f"var not found: {key}")
46
+ return vars[key]
47
+ if callable(vars):
48
+ return vars(key)
49
+ return vars.get(key)
50
+ def call(self, data, key = "main", vars=None):
51
+ trs = xf.get(self.conf, key)
52
+ #print(f"[TESTZ] trs: {trs}")
53
+ trs = expand(trs)
54
+ #print(f"[TESTZ] expand.trs: {trs}")
55
+ return self.deal(data, trs,vars)
56
+ def conf_get(self, key):
57
+ if key in self.cache_conf:
58
+ return self.cache_conf[key]
59
+ assert key in self.conf
60
+ rst = self.conf[key]
61
+ rst = dict2list(rst)
62
+ self.cache_conf[key] = rst
63
+ return rst
64
+ def src_get(self, data, key):
65
+ if self.src_spt is not None:
66
+ key = key.split(self.src_spt)
67
+ return xf.gets(data, key)
68
+ def dst_set(self, data, key, val):
69
+ #print(f"[TESTZ] key: {key}")
70
+ if self.dst_spt is not None:
71
+ key = key.split(self.dst_spt)
72
+ return xf.sets(data, key, val)
73
+ def src_has(self, data, key):
74
+ if self.src_spt is not None:
75
+ key = key.split(self.src_spt)
76
+ return xf.has(data, key)
77
+ def src_remove(self, data, key):
78
+ if self.src_spt is not None:
79
+ key = key.split(self.src_spt)
80
+ return xf.removes(data, key)
81
+ def get_type(self, trs):
82
+ if len(trs)==2:
83
+ if type(trs[1]) not in (list, dict):
84
+ return "key"
85
+ return trs[0]
86
+ return trs[2]
87
+ def deal(self, data, trs, vars=None):
88
+ """
89
+ type: key,
90
+ conf = [
91
+ key, target_key, type, info
92
+ ]
93
+ key: return [target_key, target_val, exists]
94
+ """
95
+ # trs = xf.get(conf, key)
96
+ # trs = dict2list(trs)
97
+ _type = self.get_type(trs)
98
+ #print(f"[TESTZ] deal.trs: {trs}")
99
+ if _type in ("list", "dict"):
100
+ info = trs[-1]
101
+ if type(info) == str:
102
+ info = self.conf_get(info)
103
+ trs[-1] = info
104
+ if _type == "list":
105
+ _trs = trs[-1]
106
+ _trs = expand(_trs)
107
+ if self.inline:
108
+ rst = data
109
+ else:
110
+ rst = [None]*len(data)
111
+ for i in range(len(data)):
112
+ dt = data[i]
113
+ _rst = self.deal(dt, _trs, vars)
114
+ rst[i] = _rst
115
+ elif _type == "dict":
116
+ if self.inline:
117
+ rst = data
118
+ else:
119
+ rst = {}
120
+ for _trs in trs[-1]:
121
+ #print(f"[TESTZ] _trs: {_trs}")
122
+ _trs = expand(_trs)
123
+ #print(f"[TESTZ] expand_trs: {_trs}")
124
+ src_key, target_key = _trs[:2]
125
+ _ctype = self.get_type(_trs)
126
+ if _ctype == "val":
127
+ _rst = _trs[3]
128
+ elif _ctype == "var":
129
+ _rst = self.var(_trs[3], vars)
130
+ else:
131
+ if not self.src_has(data, src_key):
132
+ continue
133
+ val = self.src_get(data, src_key)
134
+ if _ctype == "key":
135
+ _rst = val
136
+ elif _ctype == "kfc":
137
+ _rst = self.kfc(_trs[3], val, vars)
138
+ else:
139
+ _rst = self.deal(val, _trs, vars)
140
+ if self.inline and self.remove_src and _ctype not in ("val", "var"):
141
+ self.src_remove(data, src_key)
142
+ #del data[src_key]
143
+ self.dst_set(rst, target_key, _rst)
144
+ #rst[target_key] = _rst
145
+ else:
146
+ raise Exception("error")
147
+ return rst
148
+ def dict2list(trs):
149
+ if type(trs)==dict:
150
+ tmp = []
151
+ for k,v in trs.items():
152
+ if type(v) not in [list, tuple]:
153
+ v = [v]
154
+ if type(v)==tuple:
155
+ v = list(v)
156
+ if len(v)==1:
157
+ v = v+["key"]
158
+ v = [k]+v
159
+ tmp.append(v)
160
+ trs = tmp
161
+ return trs
162
+ def expand(trs):
163
+ trs = dict2list(trs)
164
+ if len(trs)>0:
165
+ k = trs[0]
166
+ if type(k) in (list, tuple):
167
+ trs = ['dict', trs]
168
+ if len(trs)>1:
169
+ val = trs[-1]
170
+ if type(val)==dict:
171
+ trs[-1] = dict2list(val)
172
+ return trs
173
+
174
+ pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: buildz
3
- Version: 0.6.31
3
+ Version: 0.6.33
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
@@ -7,6 +7,7 @@ buildz/__main__.py
7
7
  buildz/argx.py
8
8
  buildz/base.py
9
9
  buildz/cmd.py
10
+ buildz/logz.py
10
11
  buildz/pyz.py
11
12
  buildz/tools.py
12
13
  buildz.egg-info/PKG-INFO
@@ -37,15 +38,18 @@ buildz/auto/test/res/data/fp.js
37
38
  buildz/auto/test/res/data/item1.js
38
39
  buildz/auto/test/res/data/item2.js
39
40
  buildz/auto/test/res/data/test.js
41
+ buildz/db/__init__.py
40
42
  buildz/db/__main__.py
41
43
  buildz/db/install.txt
42
44
  buildz/db/run.conf
43
45
  buildz/db/runz.py
46
+ buildz/db/tls.py
44
47
  buildz/db/dv/__init__.py
45
48
  buildz/db/dv/basez.py
46
49
  buildz/db/dv/clickhousez.py
47
50
  buildz/db/dv/mysqlz.py
48
51
  buildz/db/dv/oraclez.py
52
+ buildz/db/dv/orm.py
49
53
  buildz/db/dv/postgresqlz.py
50
54
  buildz/db/dv/sqlite3z.py
51
55
  buildz/db/dv/structz.py
@@ -135,7 +139,6 @@ buildz/ioc/ioc_deal/conf/var_lists.js
135
139
  buildz/ioc/ioc_deal/conf/xfile_defaults.js
136
140
  buildz/ioc/ioc_deal/conf/xfile_lists.js
137
141
  buildz/tz/__init__.py
138
- buildz/tz/log.py
139
142
  buildz/tz/myers_diff.py
140
143
  buildz/tz/test_xfind.py
141
144
  buildz/tz/xfind.py
@@ -204,4 +207,9 @@ buildz/xf/writer/deal/jsonval.py
204
207
  buildz/xf/writer/deal/listz.py
205
208
  buildz/xf/writer/deal/mapz.py
206
209
  buildz/xf/writer/deal/reval.py
207
- buildz/xf/writer/deal/strz.py
210
+ buildz/xf/writer/deal/strz.py
211
+ buildz/xz/__init__.py
212
+ buildz/xz/conf.js
213
+ buildz/xz/data.js
214
+ buildz/xz/test.py
215
+ buildz/xz/trs.py
@@ -7,7 +7,7 @@ from setuptools import setup, find_packages
7
7
 
8
8
  setup(
9
9
  name = 'buildz',
10
- version = '0.6.31',
10
+ version = '0.6.33',
11
11
  keywords='buildz',
12
12
  long_description=open('README.md', 'r', encoding="utf-8").read(),
13
13
  long_description_content_type='text/markdown',
@@ -1,4 +0,0 @@
1
- #coding=utf-8
2
- # from buildz.tools import *
3
- from . import pyz,xf,fz,Base, ioc
4
- from .tz.time import timecost,showcost
File without changes
File without changes
File without changes
File without changes