bee_python 0.0.1

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 (503) hide show
  1. data/LICENSE +202 -0
  2. data/build/README +23 -0
  3. data/egg/egg/build.yml +70 -0
  4. data/egg/egg/ez_setup.py +280 -0
  5. data/egg/egg/script.py +12 -0
  6. data/egg/egg/setup.erb +11 -0
  7. data/egg/egg/suite.py +37 -0
  8. data/egg/egg/test.py +31 -0
  9. data/egg/egg.yml +69 -0
  10. data/egg/http/build.erb +53 -0
  11. data/egg/http/server.py +34 -0
  12. data/egg/http.yml +50 -0
  13. data/egg/mysql/mysql.py +43 -0
  14. data/egg/mysql.yml +44 -0
  15. data/egg/project/build.erb +77 -0
  16. data/egg/project/script.py +42 -0
  17. data/egg/project/test.py +31 -0
  18. data/egg/project.yml +59 -0
  19. data/egg/script/build.erb +35 -0
  20. data/egg/script/script.py +42 -0
  21. data/egg/script.yml +50 -0
  22. data/egg/soap/build.erb +52 -0
  23. data/egg/soap/client.py +18 -0
  24. data/egg/soap/server.py +30 -0
  25. data/egg/soap.yml +58 -0
  26. data/egg/source/source.py +42 -0
  27. data/egg/source.yml +47 -0
  28. data/egg/test/test.py +28 -0
  29. data/egg/test.yml +44 -0
  30. data/egg/xmlrpc/build.erb +52 -0
  31. data/egg/xmlrpc/client.py +22 -0
  32. data/egg/xmlrpc/server.py +24 -0
  33. data/egg/xmlrpc.yml +51 -0
  34. data/lib/bee_task_python.rb +390 -0
  35. data/test/build.yml +16 -0
  36. data/test/tc_bee_task_python.rb +27 -0
  37. data/test/test_build.rb +26 -0
  38. data/test/test_build_listener.rb +62 -0
  39. data/test/ts_bee_python.rb +26 -0
  40. data/tools/common/__init__.py +5 -0
  41. data/tools/common/common/__init__.py +140 -0
  42. data/tools/common/common/__pkginfo__.py +43 -0
  43. data/tools/common/common/adbh.py +35 -0
  44. data/tools/common/common/cache.py +114 -0
  45. data/tools/common/common/changelog.py +234 -0
  46. data/tools/common/common/clcommands.py +181 -0
  47. data/tools/common/common/cli.py +212 -0
  48. data/tools/common/common/compat.py +328 -0
  49. data/tools/common/common/configuration.py +1087 -0
  50. data/tools/common/common/contexts.py +58 -0
  51. data/tools/common/common/corbautils.py +117 -0
  52. data/tools/common/common/daemon.py +171 -0
  53. data/tools/common/common/date.py +279 -0
  54. data/tools/common/common/db.py +49 -0
  55. data/tools/common/common/dbf.py +229 -0
  56. data/tools/common/common/debugger.py +208 -0
  57. data/tools/common/common/decorators.py +190 -0
  58. data/tools/common/common/deprecation.py +118 -0
  59. data/tools/common/common/fileutils.py +409 -0
  60. data/tools/common/common/graph.py +259 -0
  61. data/tools/common/common/html.py +142 -0
  62. data/tools/common/common/interface.py +76 -0
  63. data/tools/common/common/logging_ext.py +166 -0
  64. data/tools/common/common/modutils.py +670 -0
  65. data/tools/common/common/optik_ext.py +383 -0
  66. data/tools/common/common/optparser.py +92 -0
  67. data/tools/common/common/pdf_ext.py +111 -0
  68. data/tools/common/common/proc.py +276 -0
  69. data/tools/common/common/pyro_ext.py +146 -0
  70. data/tools/common/common/pytest.py +754 -0
  71. data/tools/common/common/shellutils.py +383 -0
  72. data/tools/common/common/sphinx_ext.py +87 -0
  73. data/tools/common/common/sphinxutils.py +122 -0
  74. data/tools/common/common/sqlgen.py +31 -0
  75. data/tools/common/common/table.py +930 -0
  76. data/tools/common/common/tasksqueue.py +97 -0
  77. data/tools/common/common/test/__init__.py +1 -0
  78. data/tools/common/common/test/data/ChangeLog +184 -0
  79. data/tools/common/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
  80. data/tools/common/common/test/data/__init__.py +1 -0
  81. data/tools/common/common/test/data/content_differ_dir/NOTHING +0 -0
  82. data/tools/common/common/test/data/content_differ_dir/README +1 -0
  83. data/tools/common/common/test/data/content_differ_dir/subdir/coin +1 -0
  84. data/tools/common/common/test/data/content_differ_dir/subdir/toto.txt +53 -0
  85. data/tools/common/common/test/data/file_differ_dir/NOTHING +0 -0
  86. data/tools/common/common/test/data/file_differ_dir/README +1 -0
  87. data/tools/common/common/test/data/file_differ_dir/subdir/toto.txt +53 -0
  88. data/tools/common/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
  89. data/tools/common/common/test/data/find_test/__init__.py +0 -0
  90. data/tools/common/common/test/data/find_test/foo.txt +0 -0
  91. data/tools/common/common/test/data/find_test/module.py +0 -0
  92. data/tools/common/common/test/data/find_test/module2.py +0 -0
  93. data/tools/common/common/test/data/find_test/newlines.txt +0 -0
  94. data/tools/common/common/test/data/find_test/noendingnewline.py +0 -0
  95. data/tools/common/common/test/data/find_test/nonregr.py +0 -0
  96. data/tools/common/common/test/data/find_test/normal_file.txt +0 -0
  97. data/tools/common/common/test/data/find_test/spam.txt +0 -0
  98. data/tools/common/common/test/data/find_test/sub/doc.txt +0 -0
  99. data/tools/common/common/test/data/find_test/sub/momo.py +0 -0
  100. data/tools/common/common/test/data/find_test/test.ini +0 -0
  101. data/tools/common/common/test/data/find_test/test1.msg +0 -0
  102. data/tools/common/common/test/data/find_test/test2.msg +0 -0
  103. data/tools/common/common/test/data/find_test/write_protected_file.txt +0 -0
  104. data/tools/common/common/test/data/foo.txt +9 -0
  105. data/tools/common/common/test/data/module.py +88 -0
  106. data/tools/common/common/test/data/module2.py +77 -0
  107. data/tools/common/common/test/data/newlines.txt +3 -0
  108. data/tools/common/common/test/data/noendingnewline.py +36 -0
  109. data/tools/common/common/test/data/nonregr.py +14 -0
  110. data/tools/common/common/test/data/normal_file.txt +0 -0
  111. data/tools/common/common/test/data/reference_dir/NOTHING +0 -0
  112. data/tools/common/common/test/data/reference_dir/README +1 -0
  113. data/tools/common/common/test/data/reference_dir/subdir/coin +1 -0
  114. data/tools/common/common/test/data/reference_dir/subdir/toto.txt +53 -0
  115. data/tools/common/common/test/data/same_dir/NOTHING +0 -0
  116. data/tools/common/common/test/data/same_dir/README +1 -0
  117. data/tools/common/common/test/data/same_dir/subdir/coin +1 -0
  118. data/tools/common/common/test/data/same_dir/subdir/toto.txt +53 -0
  119. data/tools/common/common/test/data/spam.txt +9 -0
  120. data/tools/common/common/test/data/sub/doc.txt +1 -0
  121. data/tools/common/common/test/data/sub/momo.py +1 -0
  122. data/tools/common/common/test/data/subdir_differ_dir/NOTHING +0 -0
  123. data/tools/common/common/test/data/subdir_differ_dir/README +1 -0
  124. data/tools/common/common/test/data/subdir_differ_dir/subdir/coin +1 -0
  125. data/tools/common/common/test/data/subdir_differ_dir/subdir/toto.txt +53 -0
  126. data/tools/common/common/test/data/test.ini +20 -0
  127. data/tools/common/common/test/data/test1.msg +30 -0
  128. data/tools/common/common/test/data/test2.msg +42 -0
  129. data/tools/common/common/test/data/write_protected_file.txt +0 -0
  130. data/tools/common/common/test/foomod.py +17 -0
  131. data/tools/common/common/test/unittest_cache.py +129 -0
  132. data/tools/common/common/test/unittest_changelog.py +37 -0
  133. data/tools/common/common/test/unittest_compat.py +239 -0
  134. data/tools/common/common/test/unittest_configuration.py +348 -0
  135. data/tools/common/common/test/unittest_date.py +154 -0
  136. data/tools/common/common/test/unittest_decorators.py +62 -0
  137. data/tools/common/common/test/unittest_deprecation.py +76 -0
  138. data/tools/common/common/test/unittest_fileutils.py +133 -0
  139. data/tools/common/common/test/unittest_graph.py +50 -0
  140. data/tools/common/common/test/unittest_html.py +76 -0
  141. data/tools/common/common/test/unittest_interface.py +87 -0
  142. data/tools/common/common/test/unittest_modutils.py +244 -0
  143. data/tools/common/common/test/unittest_pytest.py +50 -0
  144. data/tools/common/common/test/unittest_shellutils.py +248 -0
  145. data/tools/common/common/test/unittest_table.py +448 -0
  146. data/tools/common/common/test/unittest_taskqueue.py +71 -0
  147. data/tools/common/common/test/unittest_testlib.py +956 -0
  148. data/tools/common/common/test/unittest_textutils.py +247 -0
  149. data/tools/common/common/test/unittest_tree.py +248 -0
  150. data/tools/common/common/test/unittest_umessage.py +55 -0
  151. data/tools/common/common/test/unittest_ureports_html.py +64 -0
  152. data/tools/common/common/test/unittest_ureports_text.py +105 -0
  153. data/tools/common/common/test/unittest_xmlutils.py +75 -0
  154. data/tools/common/common/test/utils.py +87 -0
  155. data/tools/common/common/testlib.py +1927 -0
  156. data/tools/common/common/textutils.py +476 -0
  157. data/tools/common/common/tree.py +372 -0
  158. data/tools/common/common/umessage.py +161 -0
  159. data/tools/common/common/ureports/__init__.py +174 -0
  160. data/tools/common/common/ureports/docbook_writer.py +139 -0
  161. data/tools/common/common/ureports/html_writer.py +131 -0
  162. data/tools/common/common/ureports/nodes.py +201 -0
  163. data/tools/common/common/ureports/text_writer.py +140 -0
  164. data/tools/common/common/vcgutils.py +216 -0
  165. data/tools/common/common/visitor.py +107 -0
  166. data/tools/common/common/xmlrpcutils.py +136 -0
  167. data/tools/common/common/xmlutils.py +61 -0
  168. data/tools/compile/compile.py +16 -0
  169. data/tools/coverage/coverage.py +602 -0
  170. data/tools/epydoc/__init__.py +227 -0
  171. data/tools/epydoc/__init__.pyc +0 -0
  172. data/tools/epydoc/apidoc.py +2203 -0
  173. data/tools/epydoc/apidoc.pyc +0 -0
  174. data/tools/epydoc/checker.py +349 -0
  175. data/tools/epydoc/checker.pyc +0 -0
  176. data/tools/epydoc/cli.py +1470 -0
  177. data/tools/epydoc/cli.pyc +0 -0
  178. data/tools/epydoc/compat.py +250 -0
  179. data/tools/epydoc/compat.pyc +0 -0
  180. data/tools/epydoc/docbuilder.py +1358 -0
  181. data/tools/epydoc/docbuilder.pyc +0 -0
  182. data/tools/epydoc/docintrospecter.py +1056 -0
  183. data/tools/epydoc/docintrospecter.pyc +0 -0
  184. data/tools/epydoc/docparser.py +2113 -0
  185. data/tools/epydoc/docparser.pyc +0 -0
  186. data/tools/epydoc/docstringparser.py +1111 -0
  187. data/tools/epydoc/docstringparser.pyc +0 -0
  188. data/tools/epydoc/docwriter/__init__.py +12 -0
  189. data/tools/epydoc/docwriter/__init__.pyc +0 -0
  190. data/tools/epydoc/docwriter/dotgraph.py +1351 -0
  191. data/tools/epydoc/docwriter/dotgraph.pyc +0 -0
  192. data/tools/epydoc/docwriter/html.py +3491 -0
  193. data/tools/epydoc/docwriter/html.pyc +0 -0
  194. data/tools/epydoc/docwriter/html_colorize.py +909 -0
  195. data/tools/epydoc/docwriter/html_colorize.pyc +0 -0
  196. data/tools/epydoc/docwriter/html_css.py +550 -0
  197. data/tools/epydoc/docwriter/html_css.pyc +0 -0
  198. data/tools/epydoc/docwriter/html_help.py +190 -0
  199. data/tools/epydoc/docwriter/html_help.pyc +0 -0
  200. data/tools/epydoc/docwriter/latex.py +1187 -0
  201. data/tools/epydoc/docwriter/latex.pyc +0 -0
  202. data/tools/epydoc/docwriter/plaintext.py +276 -0
  203. data/tools/epydoc/docwriter/plaintext.pyc +0 -0
  204. data/tools/epydoc/docwriter/xlink.py +505 -0
  205. data/tools/epydoc/docwriter/xlink.pyc +0 -0
  206. data/tools/epydoc/gui.py +1148 -0
  207. data/tools/epydoc/gui.pyc +0 -0
  208. data/tools/epydoc/log.py +204 -0
  209. data/tools/epydoc/log.pyc +0 -0
  210. data/tools/epydoc/markup/__init__.py +623 -0
  211. data/tools/epydoc/markup/__init__.pyc +0 -0
  212. data/tools/epydoc/markup/doctest.py +311 -0
  213. data/tools/epydoc/markup/doctest.pyc +0 -0
  214. data/tools/epydoc/markup/epytext.py +2116 -0
  215. data/tools/epydoc/markup/epytext.pyc +0 -0
  216. data/tools/epydoc/markup/javadoc.py +250 -0
  217. data/tools/epydoc/markup/javadoc.pyc +0 -0
  218. data/tools/epydoc/markup/plaintext.py +78 -0
  219. data/tools/epydoc/markup/plaintext.pyc +0 -0
  220. data/tools/epydoc/markup/pyval_repr.py +532 -0
  221. data/tools/epydoc/markup/pyval_repr.pyc +0 -0
  222. data/tools/epydoc/markup/restructuredtext.py +906 -0
  223. data/tools/epydoc/markup/restructuredtext.pyc +0 -0
  224. data/tools/epydoc/test/__init__.py +97 -0
  225. data/tools/epydoc/test/__init__.pyc +0 -0
  226. data/tools/epydoc/test/util.py +226 -0
  227. data/tools/epydoc/test/util.pyc +0 -0
  228. data/tools/epydoc/util.py +289 -0
  229. data/tools/epydoc/util.pyc +0 -0
  230. data/tools/logilab/logilab/__init__.py +5 -0
  231. data/tools/logilab/logilab/astng/__init__.py +82 -0
  232. data/tools/logilab/logilab/astng/__pkginfo__.py +76 -0
  233. data/tools/logilab/logilab/astng/_exceptions.py +64 -0
  234. data/tools/logilab/logilab/astng/_nodes_ast.py +667 -0
  235. data/tools/logilab/logilab/astng/_nodes_compiler.py +758 -0
  236. data/tools/logilab/logilab/astng/bases.py +608 -0
  237. data/tools/logilab/logilab/astng/builder.py +239 -0
  238. data/tools/logilab/logilab/astng/inference.py +426 -0
  239. data/tools/logilab/logilab/astng/inspector.py +289 -0
  240. data/tools/logilab/logilab/astng/manager.py +421 -0
  241. data/tools/logilab/logilab/astng/mixins.py +165 -0
  242. data/tools/logilab/logilab/astng/node_classes.py +848 -0
  243. data/tools/logilab/logilab/astng/nodes.py +85 -0
  244. data/tools/logilab/logilab/astng/nodes_as_string.py +389 -0
  245. data/tools/logilab/logilab/astng/patchcomptransformer.py +159 -0
  246. data/tools/logilab/logilab/astng/protocols.py +333 -0
  247. data/tools/logilab/logilab/astng/raw_building.py +212 -0
  248. data/tools/logilab/logilab/astng/rebuilder.py +307 -0
  249. data/tools/logilab/logilab/astng/scoped_nodes.py +951 -0
  250. data/tools/logilab/logilab/astng/test/__init__.py +19 -0
  251. data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
  252. data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.zip +0 -0
  253. data/tools/logilab/logilab/astng/test/data/SSL1/Connection1.py +33 -0
  254. data/tools/logilab/logilab/astng/test/data/SSL1/__init__.py +20 -0
  255. data/tools/logilab/logilab/astng/test/data/__init__.py +20 -0
  256. data/tools/logilab/logilab/astng/test/data/all.py +29 -0
  257. data/tools/logilab/logilab/astng/test/data/appl/__init__.py +23 -0
  258. data/tools/logilab/logilab/astng/test/data/appl/myConnection.py +30 -0
  259. data/tools/logilab/logilab/astng/test/data/format.py +34 -0
  260. data/tools/logilab/logilab/astng/test/data/module.py +90 -0
  261. data/tools/logilab/logilab/astng/test/data/module2.py +112 -0
  262. data/tools/logilab/logilab/astng/test/data/noendingnewline.py +57 -0
  263. data/tools/logilab/logilab/astng/test/data/nonregr.py +76 -0
  264. data/tools/logilab/logilab/astng/test/data/notall.py +28 -0
  265. data/tools/logilab/logilab/astng/test/data2/__init__.py +20 -0
  266. data/tools/logilab/logilab/astng/test/data2/clientmodule_test.py +51 -0
  267. data/tools/logilab/logilab/astng/test/data2/suppliermodule_test.py +32 -0
  268. data/tools/logilab/logilab/astng/test/regrtest.py +135 -0
  269. data/tools/logilab/logilab/astng/test/regrtest_data/absimport.py +22 -0
  270. data/tools/logilab/logilab/astng/test/regrtest_data/descriptor_crash.py +31 -0
  271. data/tools/logilab/logilab/astng/test/regrtest_data/import_package_subpackage_module.py +68 -0
  272. data/tools/logilab/logilab/astng/test/regrtest_data/package/__init__.py +24 -0
  273. data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/__init__.py +20 -0
  274. data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/module.py +20 -0
  275. data/tools/logilab/logilab/astng/test/unittest_builder.py +684 -0
  276. data/tools/logilab/logilab/astng/test/unittest_inference.py +1112 -0
  277. data/tools/logilab/logilab/astng/test/unittest_inspector.py +105 -0
  278. data/tools/logilab/logilab/astng/test/unittest_lookup.py +302 -0
  279. data/tools/logilab/logilab/astng/test/unittest_manager.py +98 -0
  280. data/tools/logilab/logilab/astng/test/unittest_nodes.py +302 -0
  281. data/tools/logilab/logilab/astng/test/unittest_scoped_nodes.py +501 -0
  282. data/tools/logilab/logilab/astng/test/unittest_utils.py +104 -0
  283. data/tools/logilab/logilab/astng/utils.py +342 -0
  284. data/tools/logilab/logilab/common/__init__.py +140 -0
  285. data/tools/logilab/logilab/common/__pkginfo__.py +43 -0
  286. data/tools/logilab/logilab/common/adbh.py +35 -0
  287. data/tools/logilab/logilab/common/cache.py +114 -0
  288. data/tools/logilab/logilab/common/changelog.py +234 -0
  289. data/tools/logilab/logilab/common/clcommands.py +181 -0
  290. data/tools/logilab/logilab/common/cli.py +212 -0
  291. data/tools/logilab/logilab/common/compat.py +328 -0
  292. data/tools/logilab/logilab/common/configuration.py +1087 -0
  293. data/tools/logilab/logilab/common/contexts.py +58 -0
  294. data/tools/logilab/logilab/common/corbautils.py +117 -0
  295. data/tools/logilab/logilab/common/daemon.py +171 -0
  296. data/tools/logilab/logilab/common/date.py +279 -0
  297. data/tools/logilab/logilab/common/db.py +49 -0
  298. data/tools/logilab/logilab/common/dbf.py +229 -0
  299. data/tools/logilab/logilab/common/debugger.py +208 -0
  300. data/tools/logilab/logilab/common/decorators.py +190 -0
  301. data/tools/logilab/logilab/common/deprecation.py +118 -0
  302. data/tools/logilab/logilab/common/fileutils.py +409 -0
  303. data/tools/logilab/logilab/common/graph.py +259 -0
  304. data/tools/logilab/logilab/common/html.py +142 -0
  305. data/tools/logilab/logilab/common/interface.py +76 -0
  306. data/tools/logilab/logilab/common/logging_ext.py +166 -0
  307. data/tools/logilab/logilab/common/modutils.py +670 -0
  308. data/tools/logilab/logilab/common/optik_ext.py +383 -0
  309. data/tools/logilab/logilab/common/optparser.py +92 -0
  310. data/tools/logilab/logilab/common/pdf_ext.py +111 -0
  311. data/tools/logilab/logilab/common/proc.py +276 -0
  312. data/tools/logilab/logilab/common/pyro_ext.py +146 -0
  313. data/tools/logilab/logilab/common/pytest.py +754 -0
  314. data/tools/logilab/logilab/common/shellutils.py +383 -0
  315. data/tools/logilab/logilab/common/sphinx_ext.py +87 -0
  316. data/tools/logilab/logilab/common/sphinxutils.py +122 -0
  317. data/tools/logilab/logilab/common/sqlgen.py +31 -0
  318. data/tools/logilab/logilab/common/table.py +930 -0
  319. data/tools/logilab/logilab/common/tasksqueue.py +97 -0
  320. data/tools/logilab/logilab/common/test/__init__.py +1 -0
  321. data/tools/logilab/logilab/common/test/data/ChangeLog +184 -0
  322. data/tools/logilab/logilab/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
  323. data/tools/logilab/logilab/common/test/data/__init__.py +1 -0
  324. data/tools/logilab/logilab/common/test/data/content_differ_dir/NOTHING +0 -0
  325. data/tools/logilab/logilab/common/test/data/content_differ_dir/README +1 -0
  326. data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/coin +1 -0
  327. data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/toto.txt +53 -0
  328. data/tools/logilab/logilab/common/test/data/file_differ_dir/NOTHING +0 -0
  329. data/tools/logilab/logilab/common/test/data/file_differ_dir/README +1 -0
  330. data/tools/logilab/logilab/common/test/data/file_differ_dir/subdir/toto.txt +53 -0
  331. data/tools/logilab/logilab/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
  332. data/tools/logilab/logilab/common/test/data/find_test/__init__.py +0 -0
  333. data/tools/logilab/logilab/common/test/data/find_test/foo.txt +0 -0
  334. data/tools/logilab/logilab/common/test/data/find_test/module.py +0 -0
  335. data/tools/logilab/logilab/common/test/data/find_test/module2.py +0 -0
  336. data/tools/logilab/logilab/common/test/data/find_test/newlines.txt +0 -0
  337. data/tools/logilab/logilab/common/test/data/find_test/noendingnewline.py +0 -0
  338. data/tools/logilab/logilab/common/test/data/find_test/nonregr.py +0 -0
  339. data/tools/logilab/logilab/common/test/data/find_test/normal_file.txt +0 -0
  340. data/tools/logilab/logilab/common/test/data/find_test/spam.txt +0 -0
  341. data/tools/logilab/logilab/common/test/data/find_test/sub/doc.txt +0 -0
  342. data/tools/logilab/logilab/common/test/data/find_test/sub/momo.py +0 -0
  343. data/tools/logilab/logilab/common/test/data/find_test/test.ini +0 -0
  344. data/tools/logilab/logilab/common/test/data/find_test/test1.msg +0 -0
  345. data/tools/logilab/logilab/common/test/data/find_test/test2.msg +0 -0
  346. data/tools/logilab/logilab/common/test/data/find_test/write_protected_file.txt +0 -0
  347. data/tools/logilab/logilab/common/test/data/foo.txt +9 -0
  348. data/tools/logilab/logilab/common/test/data/module.py +88 -0
  349. data/tools/logilab/logilab/common/test/data/module2.py +77 -0
  350. data/tools/logilab/logilab/common/test/data/newlines.txt +3 -0
  351. data/tools/logilab/logilab/common/test/data/noendingnewline.py +36 -0
  352. data/tools/logilab/logilab/common/test/data/nonregr.py +14 -0
  353. data/tools/logilab/logilab/common/test/data/normal_file.txt +0 -0
  354. data/tools/logilab/logilab/common/test/data/reference_dir/NOTHING +0 -0
  355. data/tools/logilab/logilab/common/test/data/reference_dir/README +1 -0
  356. data/tools/logilab/logilab/common/test/data/reference_dir/subdir/coin +1 -0
  357. data/tools/logilab/logilab/common/test/data/reference_dir/subdir/toto.txt +53 -0
  358. data/tools/logilab/logilab/common/test/data/same_dir/NOTHING +0 -0
  359. data/tools/logilab/logilab/common/test/data/same_dir/README +1 -0
  360. data/tools/logilab/logilab/common/test/data/same_dir/subdir/coin +1 -0
  361. data/tools/logilab/logilab/common/test/data/same_dir/subdir/toto.txt +53 -0
  362. data/tools/logilab/logilab/common/test/data/spam.txt +9 -0
  363. data/tools/logilab/logilab/common/test/data/sub/doc.txt +1 -0
  364. data/tools/logilab/logilab/common/test/data/sub/momo.py +1 -0
  365. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/NOTHING +0 -0
  366. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/README +1 -0
  367. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/coin +1 -0
  368. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/toto.txt +53 -0
  369. data/tools/logilab/logilab/common/test/data/test.ini +20 -0
  370. data/tools/logilab/logilab/common/test/data/test1.msg +30 -0
  371. data/tools/logilab/logilab/common/test/data/test2.msg +42 -0
  372. data/tools/logilab/logilab/common/test/data/write_protected_file.txt +0 -0
  373. data/tools/logilab/logilab/common/test/foomod.py +17 -0
  374. data/tools/logilab/logilab/common/test/unittest_cache.py +129 -0
  375. data/tools/logilab/logilab/common/test/unittest_changelog.py +37 -0
  376. data/tools/logilab/logilab/common/test/unittest_compat.py +239 -0
  377. data/tools/logilab/logilab/common/test/unittest_configuration.py +348 -0
  378. data/tools/logilab/logilab/common/test/unittest_date.py +154 -0
  379. data/tools/logilab/logilab/common/test/unittest_decorators.py +62 -0
  380. data/tools/logilab/logilab/common/test/unittest_deprecation.py +76 -0
  381. data/tools/logilab/logilab/common/test/unittest_fileutils.py +133 -0
  382. data/tools/logilab/logilab/common/test/unittest_graph.py +50 -0
  383. data/tools/logilab/logilab/common/test/unittest_html.py +76 -0
  384. data/tools/logilab/logilab/common/test/unittest_interface.py +87 -0
  385. data/tools/logilab/logilab/common/test/unittest_modutils.py +244 -0
  386. data/tools/logilab/logilab/common/test/unittest_pytest.py +50 -0
  387. data/tools/logilab/logilab/common/test/unittest_shellutils.py +248 -0
  388. data/tools/logilab/logilab/common/test/unittest_table.py +448 -0
  389. data/tools/logilab/logilab/common/test/unittest_taskqueue.py +71 -0
  390. data/tools/logilab/logilab/common/test/unittest_testlib.py +956 -0
  391. data/tools/logilab/logilab/common/test/unittest_textutils.py +247 -0
  392. data/tools/logilab/logilab/common/test/unittest_tree.py +248 -0
  393. data/tools/logilab/logilab/common/test/unittest_umessage.py +55 -0
  394. data/tools/logilab/logilab/common/test/unittest_ureports_html.py +64 -0
  395. data/tools/logilab/logilab/common/test/unittest_ureports_text.py +105 -0
  396. data/tools/logilab/logilab/common/test/unittest_xmlutils.py +75 -0
  397. data/tools/logilab/logilab/common/test/utils.py +87 -0
  398. data/tools/logilab/logilab/common/testlib.py +1927 -0
  399. data/tools/logilab/logilab/common/textutils.py +476 -0
  400. data/tools/logilab/logilab/common/tree.py +372 -0
  401. data/tools/logilab/logilab/common/umessage.py +161 -0
  402. data/tools/logilab/logilab/common/ureports/__init__.py +174 -0
  403. data/tools/logilab/logilab/common/ureports/docbook_writer.py +139 -0
  404. data/tools/logilab/logilab/common/ureports/html_writer.py +131 -0
  405. data/tools/logilab/logilab/common/ureports/nodes.py +201 -0
  406. data/tools/logilab/logilab/common/ureports/text_writer.py +140 -0
  407. data/tools/logilab/logilab/common/vcgutils.py +216 -0
  408. data/tools/logilab/logilab/common/visitor.py +107 -0
  409. data/tools/logilab/logilab/common/xmlrpcutils.py +136 -0
  410. data/tools/logilab/logilab/common/xmlutils.py +61 -0
  411. data/tools/pychecker/COPYRIGHT +31 -0
  412. data/tools/pychecker/ChangeLog +349 -0
  413. data/tools/pychecker/CodeChecks.py +1969 -0
  414. data/tools/pychecker/CodeChecks.pyc +0 -0
  415. data/tools/pychecker/CodeChecks.pyo +0 -0
  416. data/tools/pychecker/Config.py +475 -0
  417. data/tools/pychecker/Config.pyc +0 -0
  418. data/tools/pychecker/Config.pyo +0 -0
  419. data/tools/pychecker/KNOWN_BUGS +100 -0
  420. data/tools/pychecker/MAINTAINERS +81 -0
  421. data/tools/pychecker/NEWS +406 -0
  422. data/tools/pychecker/OP.py +131 -0
  423. data/tools/pychecker/OP.pyc +0 -0
  424. data/tools/pychecker/OP.pyo +0 -0
  425. data/tools/pychecker/OptionTypes.py +117 -0
  426. data/tools/pychecker/OptionTypes.pyc +0 -0
  427. data/tools/pychecker/OptionTypes.pyo +0 -0
  428. data/tools/pychecker/README +152 -0
  429. data/tools/pychecker/Stack.py +115 -0
  430. data/tools/pychecker/Stack.pyc +0 -0
  431. data/tools/pychecker/Stack.pyo +0 -0
  432. data/tools/pychecker/TODO +101 -0
  433. data/tools/pychecker/VERSION +1 -0
  434. data/tools/pychecker/Warning.py +50 -0
  435. data/tools/pychecker/Warning.pyc +0 -0
  436. data/tools/pychecker/Warning.pyo +0 -0
  437. data/tools/pychecker/__init__.py +17 -0
  438. data/tools/pychecker/__init__.pyc +0 -0
  439. data/tools/pychecker/__init__.pyo +0 -0
  440. data/tools/pychecker/checker.py +961 -0
  441. data/tools/pychecker/checker.pyc +0 -0
  442. data/tools/pychecker/checker.pyo +0 -0
  443. data/tools/pychecker/function.py +159 -0
  444. data/tools/pychecker/function.pyc +0 -0
  445. data/tools/pychecker/function.pyo +0 -0
  446. data/tools/pychecker/msgs.py +175 -0
  447. data/tools/pychecker/msgs.pyc +0 -0
  448. data/tools/pychecker/msgs.pyo +0 -0
  449. data/tools/pychecker/options.py +275 -0
  450. data/tools/pychecker/options.pyc +0 -0
  451. data/tools/pychecker/options.pyo +0 -0
  452. data/tools/pychecker/pcmodules.py +19 -0
  453. data/tools/pychecker/pcmodules.pyc +0 -0
  454. data/tools/pychecker/pcmodules.pyo +0 -0
  455. data/tools/pychecker/printer.py +47 -0
  456. data/tools/pychecker/printer.pyc +0 -0
  457. data/tools/pychecker/printer.pyo +0 -0
  458. data/tools/pychecker/python.py +427 -0
  459. data/tools/pychecker/python.pyc +0 -0
  460. data/tools/pychecker/python.pyo +0 -0
  461. data/tools/pychecker/utils.py +102 -0
  462. data/tools/pychecker/utils.pyc +0 -0
  463. data/tools/pychecker/utils.pyo +0 -0
  464. data/tools/pychecker/warn.py +778 -0
  465. data/tools/pychecker/warn.pyc +0 -0
  466. data/tools/pychecker/warn.pyo +0 -0
  467. data/tools/pylint2/pylint/__init__.py +16 -0
  468. data/tools/pylint2/pylint/__pkginfo__.py +67 -0
  469. data/tools/pylint2/pylint/checkers/__init__.py +155 -0
  470. data/tools/pylint2/pylint/checkers/base.py +749 -0
  471. data/tools/pylint2/pylint/checkers/classes.py +527 -0
  472. data/tools/pylint2/pylint/checkers/design_analysis.py +344 -0
  473. data/tools/pylint2/pylint/checkers/exceptions.py +183 -0
  474. data/tools/pylint2/pylint/checkers/format.py +367 -0
  475. data/tools/pylint2/pylint/checkers/imports.py +379 -0
  476. data/tools/pylint2/pylint/checkers/logging.py +98 -0
  477. data/tools/pylint2/pylint/checkers/misc.py +128 -0
  478. data/tools/pylint2/pylint/checkers/newstyle.py +107 -0
  479. data/tools/pylint2/pylint/checkers/raw_metrics.py +125 -0
  480. data/tools/pylint2/pylint/checkers/similar.py +333 -0
  481. data/tools/pylint2/pylint/checkers/string_format.py +239 -0
  482. data/tools/pylint2/pylint/checkers/typecheck.py +364 -0
  483. data/tools/pylint2/pylint/checkers/utils.py +208 -0
  484. data/tools/pylint2/pylint/checkers/variables.py +498 -0
  485. data/tools/pylint2/pylint/config.py +149 -0
  486. data/tools/pylint2/pylint/epylint.py +149 -0
  487. data/tools/pylint2/pylint/gui.py +433 -0
  488. data/tools/pylint2/pylint/interfaces.py +98 -0
  489. data/tools/pylint2/pylint/lint.py +914 -0
  490. data/tools/pylint2/pylint/pyreverse/__init__.py +5 -0
  491. data/tools/pylint2/pylint/pyreverse/diadefslib.py +229 -0
  492. data/tools/pylint2/pylint/pyreverse/diagrams.py +247 -0
  493. data/tools/pylint2/pylint/pyreverse/main.py +123 -0
  494. data/tools/pylint2/pylint/pyreverse/utils.py +131 -0
  495. data/tools/pylint2/pylint/pyreverse/writer.py +196 -0
  496. data/tools/pylint2/pylint/reporters/__init__.py +67 -0
  497. data/tools/pylint2/pylint/reporters/guireporter.py +36 -0
  498. data/tools/pylint2/pylint/reporters/html.py +69 -0
  499. data/tools/pylint2/pylint/reporters/text.py +156 -0
  500. data/tools/pylint2/pylint/utils.py +518 -0
  501. data/tools/pylint2/pylint.py +16 -0
  502. data/tools/test/suite.py +35 -0
  503. metadata +566 -0
@@ -0,0 +1,390 @@
1
+ require 'bee_task'
2
+ require 'fileutils'
3
+
4
+ module Bee
5
+
6
+ module Task
7
+
8
+ # Package for Python tasks.
9
+ class Python < Package
10
+
11
+ # Compile Python source files, checking syntax and generating .pyc files.
12
+ # Parameter is a glob or list of globs for files to compile.
13
+ #
14
+ # Example
15
+ #
16
+ # - python.compile: "**/*.py"
17
+ def compile(globs)
18
+ error "python.compile parameter is a String or Array of Strings" unless
19
+ globs.kind_of?(String) or globs.kind_of?(Array)
20
+ for glob in globs
21
+ error "python.compile parameter is a String or Array of Strings" unless
22
+ glob.kind_of?(String)
23
+ files = Dir.glob(glob)
24
+ size = (files.kind_of?(Array) ? files.size : 1)
25
+ puts "Compiling #{size} Python source file(s)" if files.length > 0
26
+ script = File.join(File.expand_path(File.dirname(__FILE__)),
27
+ '..', 'tools', 'compile', 'compile.py')
28
+ for file in files
29
+ puts "Compiling Python source file '#{file}'" if
30
+ @build.listener.verbose
31
+ ok = system("python #{script} #{file}")
32
+ error "Error compiling Python source file '#{file}'" unless ok
33
+ end
34
+ end
35
+ end
36
+
37
+ # Run a given Python source file. Parameter is the source file to run.
38
+ # Source file must be an existing readable file.
39
+ #
40
+ # Example
41
+ #
42
+ # - python.python: "my_script.py"
43
+ def python(source)
44
+ error "python.python parameter is a String" unless
45
+ source.kind_of?(String)
46
+ error "python.python parameter must be an existing file" unless
47
+ File.exists?(source) and File.readable?(source)
48
+ ok = system("python #{source}")
49
+ error "Error running Python source file '#{source}'" unless ok
50
+ end
51
+
52
+ # Check source files using Pychecker tool. You may find documentation
53
+ # about this tool at this URL: http://pychecker.sourceforge.net/.
54
+ #
55
+ # - src: directory or list of directories containing Python source
56
+ # files to check.
57
+ # - options: custom options to use on command line (optional).
58
+ # - installed: ask to use Pychecker installed in Python VM. Optional,
59
+ # defaults to false.
60
+ # - lenient: if set to true, doesn't interrupt the build on error.
61
+ # Optional, defaults to false.
62
+ # - only: Tells if we must only check sources passed as parameters.
63
+ # Optional, defaults to true.
64
+ #
65
+ # Example
66
+ #
67
+ # - python.pychecker:
68
+ # src: ["lib", "test"]
69
+ # options: "--keepgoing"
70
+ def pychecker(params)
71
+ # check parameters
72
+ params_desc = {
73
+ :src => { :mandatory => true, :type => :string_or_array },
74
+ :options => { :mandatory => false, :type => :string },
75
+ :installed => { :mandatory => false, :type => :boolean,
76
+ :default => false },
77
+ :lenient => { :mandatory => false, :type => :boolean,
78
+ :default => false },
79
+ :only => { :mandatory => false, :type => :boolean,
80
+ :default => true }
81
+ }
82
+ check_parameters(params, params_desc)
83
+ src = params[:src]
84
+ options = params[:options]
85
+ installed = params[:installed]
86
+ lenient = params[:lenient]
87
+ only = params[:only]
88
+ # build the list of python source files
89
+ src = Array(src)
90
+ files = []
91
+ for dir in src
92
+ files += Dir.glob("#{dir}/**/*.py")
93
+ end
94
+ files.map! { |file| "\"#{file}\"" }
95
+ files.uniq!
96
+ # run pychecker command
97
+ puts "Checking #{files.length} Python source file(s)"
98
+ if installed
99
+ command = "pychecker"
100
+ else
101
+ pychecker = "#{File.dirname(__FILE__)}/../tools/pychecker"
102
+ command = "python #{pychecker}/checker.py"
103
+ end
104
+ command += " #{options}" if options
105
+ command += " --only" if only
106
+ command += " #{files.join(' ')}"
107
+ ok = system(command)
108
+ error "Error checking Python source files" unless ok or lenient
109
+ end
110
+
111
+ # Check source files using Pylint tool. You may find documentation
112
+ # about this tool at: http://www.logilab.org/card/pylint_tutorial.
113
+ #
114
+ # - src: directory or list of directories containing Python source
115
+ # files to check.
116
+ # - files: a list of Python source files to check.
117
+ # - path: a list of additional directories to include in Python path.
118
+ # Optional, defaults to no directory.
119
+ # - options: custom options to use on command line (optional).
120
+ # - installed: ask to use Pylint installed in Python VM. Optional,
121
+ # defaults to false.
122
+ # - lenient: if set to true, doesn't interrupt the build on error.
123
+ # Optional, defaults to false.
124
+ # - config: configuration file name. Optional.
125
+ #
126
+ # Example
127
+ #
128
+ # - python.pylint:
129
+ # src: "lib"
130
+ def pylint(params)
131
+ # check parameters
132
+ params_desc = {
133
+ :src => { :mandatory => false, :type => :string_or_array },
134
+ :files => { :mandatory => false, :type => :string_or_array },
135
+ :path => { :mandatory => false, :type => :string_or_array },
136
+ :options => { :mandatory => false, :type => :string },
137
+ :installed => { :mandatory => false, :type => :boolean,
138
+ :default => false },
139
+ :lenient => { :mandatory => false, :type => :boolean,
140
+ :default => false },
141
+ :config => { :mandatory => false, :type => :string_or_array },
142
+ }
143
+ check_parameters(params, params_desc)
144
+ src = params[:src]
145
+ files = params[:files]
146
+ path = params[:path]
147
+ options = params[:options]
148
+ installed = params[:installed]
149
+ lenient = params[:lenient]
150
+ config = params[:config]
151
+ # build the list of python source files
152
+ error "Must set at least one of 'src' or 'files' in python.pylint" if
153
+ not src and not files
154
+ if files
155
+ files = Array(files)
156
+ else
157
+ files = []
158
+ end
159
+ if src
160
+ src = Array(src)
161
+ for dir in src
162
+ files += Dir.glob("#{dir}/**/*.py")
163
+ end
164
+ end
165
+ # build the list of source directory to include them in PYTHONPATH
166
+ dirs = []
167
+ for file in files
168
+ dir = File.expand_path(File.dirname(file))
169
+ dirs << dir if not dirs.include?(dir)
170
+ end
171
+ dirs += path if path
172
+ add_python_path(dirs)
173
+ files.map! { |file| "\"#{file}\"" }
174
+ files.uniq!
175
+ # run pylint command
176
+ puts "Checking #{files.length} Python source file(s)"
177
+ if installed
178
+ command = "pylint"
179
+ else
180
+ pylint = "#{File.dirname(__FILE__)}/../tools/pylint2/pylint.py"
181
+ command = "python #{pylint}"
182
+ end
183
+ command += " --rcfile=#{config}" if config
184
+ command += " #{options}" if options
185
+ command += " #{files.join(' ')}"
186
+ ok = system(command)
187
+ error "Error checking Python source files" unless ok or lenient
188
+ end
189
+
190
+ # Generate documentation using Epydoc tool.
191
+ #
192
+ # - src: directory or list of directories containing Python source
193
+ # files to doc for.
194
+ # - dest: destination directory for generated documentation.
195
+ # - options: custom options to use on command line (optional).
196
+ # - installed: ask to use Pychecker installed in Python VM. Optional,
197
+ # defaults to false.
198
+ #
199
+ # Example
200
+ #
201
+ # - python.pychecker:
202
+ # src: ["lib", "test"]
203
+ # dest: "build/doc"
204
+ def epydoc(params)
205
+ # check parameters
206
+ params_desc = {
207
+ :src => { :mandatory => true, :type => :string_or_array },
208
+ :dest => { :mandatory => true, :type => :string },
209
+ :options => { :mandatory => false, :type => :string },
210
+ :installed => { :mandatory => false, :type => :boolean, :default => false }
211
+ }
212
+ check_parameters(params, params_desc)
213
+ src = params[:src]
214
+ dest = params[:dest]
215
+ options = params[:options]
216
+ installed = params[:installed]
217
+ # build the list of python source files
218
+ src = Array(src)
219
+ files = []
220
+ for dir in src
221
+ files += Dir.glob("#{dir}/**/*.py")
222
+ end
223
+ files.map! { |file| "\"#{file}\"" }
224
+ files.uniq!
225
+ # make destination directory if it doesn't exist
226
+ FileUtils.makedirs(dest) if not File.exists?(dest)
227
+ error "epydoc 'dest' parameter must be a writable directory" unless
228
+ File.directory?(dest) and File.writable?(dest)
229
+ # run epydoc command
230
+ puts "Generating doc for #{files.length} Python source file(s)"
231
+ if installed
232
+ command = "epydoc"
233
+ else
234
+ epydoc = "#{File.dirname(__FILE__)}/../tools/epydoc"
235
+ add_python_path("#{epydoc}/..")
236
+ command = "python #{epydoc}/cli.py"
237
+ end
238
+ command += " -o #{dest}"
239
+ command += " #{options}" if options
240
+ command += " #{files.join(' ')}"
241
+ ok = system(command)
242
+ error "Error generating documentation for Python source files" unless
243
+ ok
244
+ end
245
+
246
+ # Run python test files. Parameter is a glob or list of globs for test
247
+ # files to run.
248
+ #
249
+ # Example
250
+ #
251
+ # - python.test: "test/test_*.py"
252
+ def test(globs)
253
+ error "python.test parameter is a String or Array of Strings" unless
254
+ globs.kind_of?(String) or globs.kind_of?(Array)
255
+ for glob in globs
256
+ error "python.test parameter is a String or Array of Strings" unless
257
+ glob.kind_of?(String)
258
+ files = Dir.glob(glob)
259
+ files.map! {|f| File.expand_path(f)}
260
+ size = (files.kind_of?(Array) ? files.size : 1)
261
+ puts "Running #{size} Python test file(s)" if files.length > 0
262
+ script = File.join(File.expand_path(File.dirname(__FILE__)),
263
+ '..', 'tools', 'test', 'suite.py')
264
+ command = "python #{script} #{files.join(' ')}"
265
+ ok = system(command)
266
+ error "Error running Python test(s)" unless ok
267
+ end
268
+ end
269
+
270
+ # Generate test coverage report.
271
+ #
272
+ # - src: directory or list of directories containing Python source
273
+ # files to measure test coverage for.
274
+ # - test: glob or list of globs for tests to run while measuring
275
+ # coverage.
276
+ # - dir: directory where to run unit tests. Optional, defaults to
277
+ # current directory.
278
+ # - dest: destination directory where to generate coverage report.
279
+ # Optional, will print report on console if not set.
280
+ # - data: file where to write coverage data. Optional, defaults to
281
+ # file .coverage in current directory.
282
+ # - path: a list of directories to add to Python path to run tests.
283
+ #
284
+ # Example
285
+ #
286
+ # - python.coverage:
287
+ # src: "src"
288
+ # test: "test/suite.py"
289
+ # dir: "test"
290
+ # dest: "build/coverage"
291
+ # data: "build/.coverage"
292
+ # path: "lib"
293
+ def coverage(params)
294
+ # check parameters
295
+ params_desc = {
296
+ :src => { :mandatory => true, :type => :string_or_array },
297
+ :test => { :mandatory => true, :type => :string_or_array },
298
+ :dir => { :mandatory => true, :type => :string },
299
+ :dest => { :mandatory => false, :type => :string },
300
+ :data => { :mandatory => false, :type => :string },
301
+ :path => { :mandatory => false, :type => :string_or_array },
302
+ }
303
+ check_parameters(params, params_desc)
304
+ src = params[:src]
305
+ test = params[:test]
306
+ dir = params[:dir]
307
+ dest = params[:dest]
308
+ data = File.expand_path(params[:data] || '.coverage')
309
+ path = params[:path]
310
+ path = path.map {|d| File.expand_path(d)} if path
311
+ # manage directories and files
312
+ src_files = []
313
+ for src_dir in src
314
+ error "Coverage 'src' parameter must be existing directories" unless
315
+ File.exists?(src_dir) and File.directory?(src_dir)
316
+ src_files += Dir.glob("#{src_dir}/**/*.py")
317
+ end
318
+ src_files = src_files.map {|f| File.expand_path(f)}.uniq.sort
319
+ sources = src_files.join(' ')
320
+ test_files = []
321
+ for test_glob in test
322
+ test_files += Dir.glob(test_glob)
323
+ end
324
+ test_files = test_files.map {|f| File.expand_path(f)}.uniq.sort
325
+ error "Coverage 'dir' parameter must be an existing directory" unless
326
+ File.exists?(dir) and File.directory?(dir)
327
+ if dest
328
+ dest = File.expand_path(dest)
329
+ FileUtils.makedirs(dest) if not File.exists?(dest)
330
+ report = File.join(dest, 'report.txt')
331
+ end
332
+ if path
333
+ for path_dir in path
334
+ error "Coverage 'path' parameter must be existing directories" unless
335
+ File.exists?(path_dir) and File.directory?(path_dir)
336
+ end
337
+ end
338
+ # build the python path
339
+ if path and path.length > 0
340
+ if ENV['PYTHONPATH']
341
+ ENV['PYTHONPATH'] = ENV['PYTHONPATH'] + File::PATH_SEPARATOR +
342
+ path.join(File::PATH_SEPARATOR)
343
+ else
344
+ ENV['PYTHONPATH'] = path.join(File::PATH_SEPARATOR)
345
+ end
346
+ end
347
+ # run coverage command
348
+ puts "Generating coverage report for #{test_files.length} test(s)..."
349
+ coverage = "#{File.dirname(__FILE__)}/../tools/coverage/coverage.py"
350
+ File.delete(data) if File.exists?(data)
351
+ prev_dir = Dir.pwd
352
+ for test_file in test_files
353
+ begin
354
+ Dir.chdir(dir)
355
+ command = "python #{coverage} -x -f #{data} #{test_file}"
356
+ system(command) || error("Error running coverage report")
357
+ ensure
358
+ Dir.chdir(prev_dir)
359
+ end
360
+ end
361
+ if dest
362
+ command = "python #{coverage} -r -f #{data} -m #{sources} > #{report}"
363
+ system(command) || error("Error generating coverage report")
364
+ command = "python #{coverage} -a -f #{data} -d #{dest} #{sources}"
365
+ system(command) || error("Error generating coverage report")
366
+ else
367
+ command = "python #{coverage} -r -f #{data} -m #{sources}"
368
+ system(command) || error("Error generating coverage report")
369
+ end
370
+ end
371
+
372
+ private
373
+
374
+ # Add directories to the Python path environment variable.
375
+ # - dirs: directory (string) or list of directories to add to path.
376
+ def add_python_path(dirs)
377
+ dirs = Array(dirs)
378
+ if ENV['PYTHONPATH']
379
+ ENV['PYTHONPATH'] = dirs.join(File::PATH_SEPARATOR) +
380
+ File::PATH_SEPARATOR + ENV['PYTHONPATH'] if dirs.length > 0
381
+ else
382
+ ENV['PYTHONPATH'] = dirs.join(File::PATH_SEPARATOR)
383
+ end
384
+ end
385
+
386
+ end
387
+
388
+ end
389
+
390
+ end
data/test/build.yml ADDED
@@ -0,0 +1,16 @@
1
+ - build: package_test
2
+ default: all
3
+ description: Build file to test generated and installed package
4
+
5
+ - target: task
6
+ description: Test task for generated package
7
+ script:
8
+ - python.hello: "World"
9
+
10
+ - target: egg
11
+ description: Test egg for generated package
12
+ script:
13
+ - "bee -t 'python.hello'"
14
+
15
+ - target: all
16
+ depends: [task, egg]
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bee'
4
+ require 'test/unit'
5
+ $:.unshift(File.join(File.expand_path(File.dirname(__FILE__))))
6
+ require 'test_build'
7
+ require 'test_build_listener'
8
+ $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
9
+ require 'bee_task_python'
10
+
11
+ # Test case for bee task.
12
+ class TestBeeTaskPython < Test::Unit::TestCase
13
+
14
+ # Create a context object and load tasks in it.
15
+ def setup
16
+ super
17
+ @context = Bee::Context.new(nil)
18
+ @listener = TestBuildListener.new
19
+ @build = TestBuild.new(@context, @listener)
20
+ @package = Bee::Task::Python.new(@build)
21
+ end
22
+
23
+ def test_compile
24
+ # TODO: write unit test
25
+ end
26
+
27
+ end
@@ -0,0 +1,26 @@
1
+ # Copyright 2006-2008 Michel Casabianca <michel.casabianca@gmail.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # Empty build for testing purpose. Contains a single context.
16
+ class TestBuild
17
+
18
+ attr_reader :context
19
+ attr_reader :listener
20
+
21
+ def initialize(context, listener)
22
+ @context = context
23
+ @listener = listener
24
+ end
25
+
26
+ end
@@ -0,0 +1,62 @@
1
+ # Copyright 2006-2008 Michel Casabianca <michel.casabianca@gmail.com>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # Test build listener.
16
+ class TestBuildListener
17
+
18
+ attr_reader :started
19
+ attr_reader :finished
20
+ attr_reader :targets
21
+ attr_reader :tasks
22
+ attr_reader :success
23
+ attr_reader :errors
24
+ attr_accessor :output
25
+ attr_reader :verbose
26
+
27
+ def initialize
28
+ @targets = []
29
+ @tasks = []
30
+ @output = ''
31
+ @verbose = false
32
+ end
33
+
34
+ def build_started(build)
35
+ @started = true
36
+ end
37
+
38
+ def build_finished(build)
39
+ @finished = true
40
+ end
41
+
42
+ def target(target)
43
+ @targets << target
44
+ end
45
+
46
+ def task(task)
47
+ @tasks << tasks
48
+ end
49
+
50
+ def error(exception)
51
+ @errors = exception
52
+ end
53
+
54
+ def print(text)
55
+ @output << text
56
+ end
57
+
58
+ def puts(text)
59
+ @output << text + "\n"
60
+ end
61
+
62
+ end
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright 2006-2008 Michel Casabianca <michel.casabianca@gmail.com>
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Script that runs all tests in current directory (and subdirectories)
18
+ # in a single test suite.
19
+
20
+ require 'find'
21
+
22
+ Find.find(File.dirname(__FILE__)) do |path|
23
+ if File.file?(path) and path =~ /tc_.+\.rb$/
24
+ load path
25
+ end
26
+ end
@@ -0,0 +1,5 @@
1
+ """generated file, don't modify or your data will be lost"""
2
+ try:
3
+ __import__('pkg_resources').declare_namespace(__name__)
4
+ except ImportError:
5
+ pass
@@ -0,0 +1,140 @@
1
+ # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2
+ # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
+ #
4
+ # This file is part of logilab-common.
5
+ #
6
+ # logilab-common is free software: you can redistribute it and/or modify it under
7
+ # the terms of the GNU Lesser General Public License as published by the Free
8
+ # Software Foundation, either version 2.1 of the License, or (at your option) any
9
+ # later version.
10
+ #
11
+ # logilab-common is distributed in the hope that it will be useful, but WITHOUT
12
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
+ # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
+ # details.
15
+ #
16
+ # You should have received a copy of the GNU Lesser General Public License along
17
+ # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
18
+ """Logilab common library (aka Logilab's extension to the standard library).
19
+
20
+ :type STD_BLACKLIST: tuple
21
+ :var STD_BLACKLIST: directories ignored by default by the functions in
22
+ this package which have to recurse into directories
23
+
24
+ :type IGNORED_EXTENSIONS: tuple
25
+ :var IGNORED_EXTENSIONS: file extensions that may usually be ignored
26
+ """
27
+ __docformat__ = "restructuredtext en"
28
+ from logilab.common.__pkginfo__ import version as __version__
29
+
30
+ STD_BLACKLIST = ('CVS', '.svn', '.hg', 'debian', 'dist', 'build')
31
+
32
+ IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc', '~')
33
+
34
+ # set this to False if you've mx DateTime installed but you don't want your db
35
+ # adapter to use it (should be set before you got a connection)
36
+ USE_MX_DATETIME = True
37
+
38
+
39
+ class attrdict(dict):
40
+ """A dictionary for which keys are also accessible as attributes."""
41
+ def __getattr__(self, attr):
42
+ try:
43
+ return self[attr]
44
+ except KeyError:
45
+ raise AttributeError(attr)
46
+
47
+ class dictattr(dict):
48
+ def __init__(self, proxy):
49
+ self.__proxy = proxy
50
+
51
+ def __getitem__(self, attr):
52
+ try:
53
+ return getattr(self.__proxy, attr)
54
+ except AttributeError:
55
+ raise KeyError(attr)
56
+
57
+ class nullobject(object):
58
+ def __repr__(self):
59
+ return '<nullobject>'
60
+ def __nonzero__(self):
61
+ return False
62
+
63
+ # flatten -----
64
+ # XXX move in a specific module and use yield instead
65
+ # do not mix flatten and translate
66
+ #
67
+ # def iterable(obj):
68
+ # try: iter(obj)
69
+ # except: return False
70
+ # return True
71
+ #
72
+ # def is_string_like(obj):
73
+ # try: obj +''
74
+ # except (TypeError, ValueError): return False
75
+ # return True
76
+ #
77
+ #def is_scalar(obj):
78
+ # return is_string_like(obj) or not iterable(obj)
79
+ #
80
+ #def flatten(seq):
81
+ # for item in seq:
82
+ # if is_scalar(item):
83
+ # yield item
84
+ # else:
85
+ # for subitem in flatten(item):
86
+ # yield subitem
87
+
88
+ def flatten(iterable, tr_func=None, results=None):
89
+ """Flatten a list of list with any level.
90
+
91
+ If tr_func is not None, it should be a one argument function that'll be called
92
+ on each final element.
93
+
94
+ :rtype: list
95
+
96
+ >>> flatten([1, [2, 3]])
97
+ [1, 2, 3]
98
+ """
99
+ if results is None:
100
+ results = []
101
+ for val in iterable:
102
+ if isinstance(val, (list, tuple)):
103
+ flatten(val, tr_func, results)
104
+ elif tr_func is None:
105
+ results.append(val)
106
+ else:
107
+ results.append(tr_func(val))
108
+ return results
109
+
110
+
111
+ # XXX is function below still used ?
112
+
113
+ def make_domains(lists):
114
+ """
115
+ Given a list of lists, return a list of domain for each list to produce all
116
+ combinations of possibles values.
117
+
118
+ :rtype: list
119
+
120
+ Example:
121
+
122
+ >>> make_domains(['a', 'b'], ['c','d', 'e'])
123
+ [['a', 'b', 'a', 'b', 'a', 'b'], ['c', 'c', 'd', 'd', 'e', 'e']]
124
+ """
125
+ domains = []
126
+ for iterable in lists:
127
+ new_domain = iterable[:]
128
+ for i in range(len(domains)):
129
+ domains[i] = domains[i]*len(iterable)
130
+ if domains:
131
+ missing = (len(domains[0]) - len(iterable)) / len(iterable)
132
+ i = 0
133
+ for j in range(len(iterable)):
134
+ value = iterable[j]
135
+ for dummy in range(missing):
136
+ new_domain.insert(i, value)
137
+ i += 1
138
+ i += 1
139
+ domains.append(new_domain)
140
+ return domains