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,758 @@
1
+ # This program is free software; you can redistribute it and/or modify it under
2
+ # the terms of the GNU Lesser General Public License as published by the Free Software
3
+ # Foundation; either version 2 of the License, or (at your option) any later
4
+ # version.
5
+ #
6
+ # This program is distributed in the hope that it will be useful, but WITHOUT
7
+ # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8
+ # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
9
+ #
10
+ # You should have received a copy of the GNU Lesser General Public License along with
11
+ # this program; if not, write to the Free Software Foundation, Inc.,
12
+ # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
13
+ # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
14
+ # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
15
+ # copyright 2003-2010 Sylvain Thenault, all rights reserved.
16
+ # contact mailto:thenault@gmail.com
17
+ #
18
+ # This file is part of logilab-astng.
19
+ #
20
+ # logilab-astng is free software: you can redistribute it and/or modify it
21
+ # under the terms of the GNU Lesser General Public License as published by the
22
+ # Free Software Foundation, either version 2.1 of the License, or (at your
23
+ # option) any later version.
24
+ #
25
+ # logilab-astng is distributed in the hope that it will be useful, but
26
+ # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
27
+ # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
28
+ # for more details.
29
+ #
30
+ # You should have received a copy of the GNU Lesser General Public License along
31
+ # with logilab-astng. If not, see <http://www.gnu.org/licenses/>.
32
+ """python < 2.5 compiler package compatibility module [1]
33
+
34
+
35
+ [1] http://docs.python.org/lib/module-compiler.ast.html
36
+
37
+ """
38
+
39
+ __docformat__ = "restructuredtext en"
40
+
41
+ from compiler.ast import Const, Node, Sliceobj
42
+
43
+ # nodes which are not part of astng
44
+ from compiler.ast import And as _And, Or as _Or,\
45
+ UnaryAdd as _UnaryAdd, UnarySub as _UnarySub, Not as _Not,\
46
+ Invert as _Invert, Add as _Add, Div as _Div, FloorDiv as _FloorDiv,\
47
+ Mod as _Mod, Mul as _Mul, Power as _Power, Sub as _Sub, Bitand as _Bitand,\
48
+ Bitor as _Bitor, Bitxor as _Bitxor, LeftShift as _LeftShift,\
49
+ RightShift as _RightShift
50
+
51
+
52
+ from logilab.astng import nodes as new
53
+ from logilab.astng.rebuilder import RebuildVisitor
54
+
55
+
56
+ CONST_NAME_TRANSFORMS = {'None': None,
57
+ 'True': True,
58
+ 'False': False}
59
+
60
+
61
+ def native_repr_tree(node, indent='', _done=None):
62
+ """enhanced compiler.ast tree representation"""
63
+ if _done is None:
64
+ _done = set()
65
+ if node in _done:
66
+ print ('loop in tree: %r (%s)' % (node, getattr(node, 'lineno', None)))
67
+ return
68
+ _done.add(node)
69
+ print indent + "<%s>" % node.__class__
70
+ indent += ' '
71
+ if not hasattr(node, "__dict__"): # XXX
72
+ return
73
+ for field, attr in node.__dict__.items():
74
+ if attr is None or field == "_proxied":
75
+ continue
76
+ if type(attr) is list:
77
+ if not attr: continue
78
+ print indent + field + ' ['
79
+ for elt in attr:
80
+ if type(elt) is tuple:
81
+ for val in elt:
82
+ native_repr_tree(val, indent, _done)
83
+ else:
84
+ native_repr_tree(elt, indent, _done)
85
+ print indent + ']'
86
+ continue
87
+ if isinstance(attr, Node):
88
+ print indent + field
89
+ native_repr_tree(attr, indent, _done)
90
+ else:
91
+ print indent + field, repr(attr)
92
+
93
+
94
+ # some astng nodes unexistent in compiler #####################################
95
+
96
+ BinOp_OP_CLASSES = {_Add: '+',
97
+ _Div: '/',
98
+ _FloorDiv: '//',
99
+ _Mod: '%',
100
+ _Mul: '*',
101
+ _Power: '**',
102
+ _Sub: '-',
103
+ _Bitand: '&',
104
+ _Bitor: '|',
105
+ _Bitxor: '^',
106
+ _LeftShift: '<<',
107
+ _RightShift: '>>'
108
+ }
109
+ BinOp_BIT_CLASSES = {'&': _Bitand,
110
+ '|': _Bitor,
111
+ '^': _Bitxor
112
+ }
113
+
114
+
115
+ BoolOp_OP_CLASSES = {_And: 'and',
116
+ _Or: 'or'
117
+ }
118
+
119
+ UnaryOp_OP_CLASSES = {_UnaryAdd: '+',
120
+ _UnarySub: '-',
121
+ _Not: 'not',
122
+ _Invert: '~'
123
+ }
124
+
125
+
126
+ # compiler rebuilder ##########################################################
127
+
128
+ def _filter_none(node):
129
+ """transform Const(None) to None"""
130
+ if isinstance(node, Const) and node.value is None:
131
+ return None
132
+ else:
133
+ return node
134
+
135
+
136
+ class TreeRebuilder(RebuildVisitor):
137
+ """Rebuilds the compiler tree to become an ASTNG tree"""
138
+
139
+ def _init_else_node(self, node, newnode):
140
+ """visit else block; replace None by empty list"""
141
+ if not node.else_:
142
+ return []
143
+ return [self.visit(child, newnode) for child in node.else_.nodes]
144
+
145
+ def _set_infos(self, oldnode, newnode, newparent):
146
+ newnode.parent = newparent
147
+ if hasattr(oldnode, 'lineno'):
148
+ newnode.lineno = oldnode.lineno
149
+ if hasattr(oldnode, 'fromlineno'):
150
+ newnode.fromlineno = oldnode.fromlineno
151
+ if hasattr(oldnode, 'tolineno'):
152
+ newnode.tolineno = oldnode.tolineno
153
+ if hasattr(oldnode, 'blockstart_tolineno'):
154
+ newnode.blockstart_tolineno = oldnode.blockstart_tolineno
155
+
156
+ def _check_del_node(self, node, parent, targets):
157
+ """insert a Delete node if necessary.
158
+
159
+ As for assignments we have a Assign (or For or ...) node, this method
160
+ is only called in delete contexts. Hence we return a Delete node"""
161
+ if self.asscontext is None:
162
+ self.asscontext = "Del"
163
+ newnode = new.Delete()
164
+ self._set_infos(node, newnode, parent)
165
+ newnode.targets = [self.visit(elt, newnode) for elt in targets]
166
+ self.asscontext = None
167
+ return newnode
168
+ else:
169
+ # this will trigger the visit_ass* methods to create the right nodes
170
+ return False
171
+
172
+ def _nodify_args(self, parent, values):
173
+ """transform arguments and tuples or lists of arguments into astng nodes"""
174
+ res = []
175
+ for arg in values:
176
+ if isinstance(arg, (tuple, list)):
177
+ n = new.Tuple()
178
+ self._set_infos(parent, n, parent)
179
+ n.elts = self._nodify_args(n, arg)
180
+ else:
181
+ assert isinstance(arg, basestring)
182
+ n = new.AssName()
183
+ self._set_infos(parent, n, parent)
184
+ n.name = arg
185
+ self._save_assignment(n, n.name)
186
+ res.append(n)
187
+ return res
188
+
189
+ def visit_arguments(self, node, parent):
190
+ """visit an Arguments node by returning a fresh instance of it"""
191
+ # /!\ incoming node is Function or Lambda, coming directly from visit_*
192
+ if node.flags & 8:
193
+ kwarg = node.argnames.pop()
194
+ else:
195
+ kwarg = None
196
+ if node.flags & 4:
197
+ vararg = node.argnames.pop()
198
+ else:
199
+ vararg = None
200
+ newnode = new.Arguments(vararg, kwarg)
201
+ newnode.parent = parent
202
+ newnode.fromlineno = parent.fromlineno
203
+ try:
204
+ newnode.tolineno = parent.blockstart_tolineno
205
+ except AttributeError: # lambda
206
+ newnode.tolineno = parent.tolineno
207
+ newnode.args = self._nodify_args(newnode, node.argnames)
208
+ self._save_argument_name(newnode)
209
+ newnode.defaults = [self.visit(n, newnode) for n in node.defaults]
210
+ return newnode
211
+
212
+ def visit_assattr(self, node, parent):
213
+ """visit an AssAttr node by returning a fresh instance of it"""
214
+ delnode = self._check_del_node(node, parent, [node])
215
+ if delnode:
216
+ return delnode
217
+ elif self.asscontext == "Del":
218
+ return self.visit_delattr(node, parent)
219
+ elif self.asscontext in ("Ass", "Aug"):
220
+ newnode = new.AssAttr()
221
+ self._set_infos(node, newnode, parent)
222
+ asscontext, self.asscontext = self.asscontext, None
223
+ newnode.expr = self.visit(node.expr, newnode)
224
+ self.asscontext = asscontext
225
+ newnode.attrname = node.attrname
226
+ self._delayed_assattr.append(newnode)
227
+ return newnode
228
+
229
+ def visit_assname(self, node, parent):
230
+ """visit an AssName node by returning a fresh instance of it"""
231
+ delnode = self._check_del_node(node, parent, [node])
232
+ if delnode:
233
+ return delnode
234
+ elif self.asscontext == "Del":
235
+ return self.visit_delname(node, parent)
236
+ assert self.asscontext in ("Ass", "Aug")
237
+ newnode = new.AssName()
238
+ self._set_infos(node, newnode, parent)
239
+ newnode.name = node.name
240
+ self._save_assignment(newnode)
241
+ return newnode
242
+
243
+ def visit_assert(self, node, parent):
244
+ """visit an Assert node by returning a fresh instance of it"""
245
+ newnode = new.Assert()
246
+ self._set_infos(node, newnode, parent)
247
+ newnode.test = self.visit(node.test, newnode)
248
+ newnode.fail = self.visit(node.fail, newnode)
249
+ return newnode
250
+
251
+ def visit_assign(self, node, parent):
252
+ """visit an Assign node by returning a fresh instance of it"""
253
+ newnode = new.Assign()
254
+ self._set_infos(node, newnode, parent)
255
+ self.asscontext = 'Ass'
256
+ newnode.targets = [self.visit(child, newnode) for child in node.nodes]
257
+ # /!\ Subscript can appear on both sides,
258
+ # so we need 'Ass' in rhs to avoid inserting a Delete node
259
+ newnode.value = self.visit(node.expr, newnode)
260
+ self.asscontext = None
261
+ self._set_assign_infos(newnode)
262
+ return newnode
263
+
264
+ def visit_asslist(self, node, parent):
265
+ # FIXME : use self._check_del_node(node, [node]) more precise ?
266
+ delnode = self._check_del_node(node, parent, node.nodes)
267
+ if delnode:
268
+ return delnode
269
+ return self.visit_list(node, parent)
270
+
271
+ def visit_asstuple(self, node, parent):
272
+ delnode = self._check_del_node(node, parent, node.nodes)
273
+ if delnode:
274
+ return delnode
275
+ return self.visit_tuple(node, parent)
276
+
277
+ def visit_augassign(self, node, parent):
278
+ """visit an AugAssign node by returning a fresh instance of it"""
279
+ newnode = new.AugAssign()
280
+ self._set_infos(node, newnode, parent)
281
+ self.asscontext = "Aug"
282
+ newnode.target = self.visit(node.node, newnode)
283
+ self.asscontext = None
284
+ newnode.op = node.op
285
+ newnode.value = self.visit(node.expr, newnode)
286
+ return newnode
287
+
288
+ def visit_backquote(self, node, parent):
289
+ """visit a Backquote node by returning a fresh instance of it"""
290
+ newnode = new.Backquote()
291
+ self._set_infos(node, newnode, parent)
292
+ newnode.value = self.visit(node.expr, newnode)
293
+ return newnode
294
+
295
+ def visit_binop(self, node, parent):
296
+ """visit a BinOp node by returning a fresh instance of it"""
297
+ newnode = new.BinOp()
298
+ self._set_infos(node, newnode, parent)
299
+ newnode.op = BinOp_OP_CLASSES[node.__class__]
300
+ if newnode.op in ('&', '|', '^'):
301
+ newnode.right = self.visit(node.nodes[-1], newnode)
302
+ bitop = BinOp_BIT_CLASSES[newnode.op]
303
+ if len(node.nodes) > 2:
304
+ # create a bitop node on the fly and visit it:
305
+ # XXX can't we create directly the right node ?
306
+ newnode.left = self.visit(bitop(node.nodes[:-1]), newnode)
307
+ else:
308
+ newnode.left = self.visit(node.nodes[0], newnode)
309
+ else:
310
+ newnode.left = self.visit(node.left, newnode)
311
+ newnode.right = self.visit(node.right, newnode)
312
+ return newnode
313
+
314
+ def visit_boolop(self, node, parent):
315
+ """visit a BoolOp node by returning a fresh instance of it"""
316
+ newnode = new.BoolOp()
317
+ self._set_infos(node, newnode, parent)
318
+ newnode.values = [self.visit(child, newnode) for child in node.nodes]
319
+ newnode.op = BoolOp_OP_CLASSES[node.__class__]
320
+ return newnode
321
+
322
+ def visit_callfunc(self, node, parent):
323
+ """visit a CallFunc node by returning a fresh instance of it"""
324
+ newnode = new.CallFunc()
325
+ self._set_infos(node, newnode, parent)
326
+ newnode.func = self.visit(node.node, newnode)
327
+ newnode.args = [self.visit(child, newnode) for child in node.args]
328
+ if node.star_args:
329
+ newnode.starargs = self.visit(node.star_args, newnode)
330
+ if node.dstar_args:
331
+ newnode.kwargs = self.visit(node.dstar_args, newnode)
332
+ return newnode
333
+
334
+ def _visit_class(self, node, parent):
335
+ """visit a Class node by returning a fresh instance of it"""
336
+ newnode = new.Class(node.name, node.doc)
337
+ self._set_infos(node, newnode, parent)
338
+ newnode.bases = [self.visit(child, newnode) for child in node.bases]
339
+ newnode.body = [self.visit(child, newnode) for child in node.code.nodes]
340
+ return newnode
341
+
342
+ def visit_compare(self, node, parent):
343
+ """visit a Compare node by returning a fresh instance of it"""
344
+ newnode = new.Compare()
345
+ self._set_infos(node, newnode, parent)
346
+ newnode.left = self.visit(node.expr, newnode)
347
+ newnode.ops = [(op, self.visit(child, newnode)) for op, child in node.ops]
348
+ return newnode
349
+
350
+ def visit_comprehension(self, node, parent):
351
+ """visit a Comprehension node by returning a fresh instance of it"""
352
+ newnode = new.Comprehension()
353
+ self._set_infos(node, newnode, parent)
354
+ self.asscontext = "Ass"
355
+ newnode.target = self.visit(node.assign, newnode)
356
+ self.asscontext = None
357
+ if hasattr(node, 'list'):# ListCompFor
358
+ iters = node.list
359
+ else:# GenExprFor
360
+ iters = node.iter
361
+ newnode.iter = self.visit(iters, newnode)
362
+ if node.ifs:
363
+ newnode.ifs = [self.visit(iff.test, newnode) for iff in node.ifs]
364
+ else:
365
+ newnode.ifs = []
366
+ return newnode
367
+
368
+ def visit_decorators(self, node, parent):
369
+ """visit a Decorators node by returning a fresh instance of it"""
370
+ newnode = new.Decorators()
371
+ self._set_infos(node, newnode, parent)
372
+ newnode.nodes = [self.visit(child, newnode) for child in node.nodes]
373
+ return newnode
374
+
375
+ def visit_delattr(self, node, parent):
376
+ """visit a DelAttr node by returning a fresh instance of it"""
377
+ newnode = new.DelAttr()
378
+ self._set_infos(node, newnode, parent)
379
+ newnode.expr = self.visit(node.expr, newnode)
380
+ newnode.attrname = node.attrname
381
+ return newnode
382
+
383
+ def visit_delname(self, node, parent):
384
+ """visit a DelName node by returning a fresh instance of it"""
385
+ newnode = new.DelName()
386
+ self._set_infos(node, newnode, parent)
387
+ newnode.name = node.name
388
+ self._save_assignment(newnode) # ???
389
+ return newnode
390
+
391
+ def visit_dict(self, node, parent):
392
+ """visit a Dict node by returning a fresh instance of it"""
393
+ newnode = new.Dict()
394
+ self._set_infos(node, newnode, parent)
395
+ newnode.items = [(self.visit(key, newnode), self.visit(value, newnode))
396
+ for (key, value) in node.items]
397
+ return newnode
398
+
399
+ def visit_discard(self, node, parent):
400
+ """visit a Discard node by returning a fresh instance of it"""
401
+ newnode = new.Discard()
402
+ if node.lineno is None:
403
+ # ignore dummy Discard introduced when a statement
404
+ # is ended by a semi-colon: remove it at the end of rebuilding
405
+ self._remove_nodes.append((newnode, parent))
406
+ self._set_infos(node, newnode, parent)
407
+ self.asscontext = "Dis"
408
+ newnode.value = self.visit(node.expr, newnode)
409
+ self.asscontext = None
410
+ return newnode
411
+
412
+ def visit_excepthandler(self, node, parent):
413
+ """visit an ExceptHandler node by returning a fresh instance of it"""
414
+ newnode = new.ExceptHandler()
415
+ self._set_infos(node, newnode, parent)
416
+ newnode.type = self.visit(node.type, newnode)
417
+ newnode.name = self.visit(node.name, newnode)
418
+ newnode.body = [self.visit(child, newnode) for child in node.body]
419
+ return newnode
420
+
421
+ def visit_exec(self, node, parent):
422
+ """visit an Exec node by returning a fresh instance of it"""
423
+ newnode = new.Exec()
424
+ self._set_infos(node, newnode, parent)
425
+ newnode.expr = self.visit(node.expr, newnode)
426
+ newnode.globals = self.visit(node.locals, newnode)
427
+ newnode.locals = self.visit(node.globals, newnode)
428
+ return newnode
429
+
430
+ def visit_extslice(self, node, parent):
431
+ """visit an ExtSlice node by returning a fresh instance of it"""
432
+ newnode = new.ExtSlice()
433
+ self._set_infos(node, newnode, parent)
434
+ newnode.dims = [self.visit(dim, newnode) for dim in node.subs]
435
+ return newnode
436
+
437
+ def visit_for(self, node, parent):
438
+ """visit a For node by returning a fresh instance of it"""
439
+ newnode = new.For()
440
+ self._set_infos(node, newnode, parent)
441
+ self.asscontext = "Ass"
442
+ newnode.target = self.visit(node.assign, newnode)
443
+ self.asscontext = None
444
+ newnode.iter = self.visit(node.list, newnode)
445
+ newnode.body = [self.visit(child, newnode) for child in node.body.nodes]
446
+ newnode.orelse = self._init_else_node(node, newnode)
447
+ return newnode
448
+
449
+ def visit_from(self, node, parent):
450
+ """visit a From node by returning a fresh instance of it"""
451
+ newnode = new.From(node.modname, node.names)
452
+ self._set_infos(node, newnode, parent)
453
+ self._store_from_node(newnode)
454
+ return newnode
455
+
456
+ def _visit_function(self, node, parent):
457
+ """visit a Function node by returning a fresh instance of it"""
458
+ newnode = new.Function(node.name, node.doc)
459
+ self._set_infos(node, newnode, parent)
460
+ newnode.decorators = self.visit(node.decorators, newnode)
461
+ newnode.args = self.visit_arguments(node, newnode)
462
+ newnode.body = [self.visit(child, newnode) for child in node.code.nodes]
463
+ return newnode
464
+
465
+ def visit_genexpr(self, node, parent):
466
+ """visit a GenExpr node by returning a fresh instance of it"""
467
+ newnode = new.GenExpr()
468
+ self._set_infos(node, newnode, parent)
469
+ # remove GenExprInner node
470
+ newnode.elt = self.visit(node.code.expr, newnode)
471
+ newnode.generators = [self.visit(n, newnode) for n in node.code.quals]
472
+ return newnode
473
+
474
+ def visit_getattr(self, node, parent):
475
+ """visit a Getattr node by returning a fresh instance of it"""
476
+ newnode = new.Getattr()
477
+ self._set_infos(node, newnode, parent)
478
+ if self.asscontext == "Aug":
479
+ return self.visit_assattr(node, parent)
480
+ newnode.expr = self.visit(node.expr, newnode)
481
+ newnode.attrname = node.attrname
482
+ return newnode
483
+
484
+ def visit_if(self, node, parent):
485
+ """visit an If node by returning a fresh instance of it"""
486
+ newnode = subnode = new.If()
487
+ self._set_infos(node, newnode, parent)
488
+ test, body = node.tests[0]
489
+ newnode.test = self.visit(test, newnode)
490
+ newnode.body = [self.visit(child, newnode) for child in body.nodes]
491
+ for test, body in node.tests[1:]:# this represents 'elif'
492
+ # create successively If nodes and put it in orelse of the previous
493
+ subparent, subnode = subnode, new.If()
494
+ subnode.parent = subparent
495
+ subnode.fromlineno = test.fromlineno
496
+ subnode.tolineno = body.nodes[-1].tolineno
497
+ subnode.blockstart_tolineno = test.tolineno
498
+ subnode.test = self.visit(test, subnode)
499
+ subnode.body = [self.visit(child, subnode) for child in body.nodes]
500
+ subparent.orelse = [subnode]
501
+ # the last subnode gets the else block:
502
+ subnode.orelse = self._init_else_node(node, subnode)
503
+ return newnode
504
+
505
+ def visit_ifexp(self, node, parent):
506
+ """visit an IfExp node by returning a fresh instance of it"""
507
+ newnode = new.IfExp()
508
+ self._set_infos(node, newnode, parent)
509
+ newnode.test = self.visit(node.test, newnode)
510
+ newnode.body = [self.visit(child, newnode) for child in node.body]
511
+ newnode.orelse = self.visit(node.orelse, newnode)
512
+ return newnode
513
+
514
+ def visit_import(self, node, parent):
515
+ """visit an Import node by returning a fresh instance of it"""
516
+ newnode = new.Import()
517
+ self._set_infos(node, newnode, parent)
518
+ newnode.names = node.names
519
+ self._save_import_locals(newnode)
520
+ return newnode
521
+
522
+ def visit_index(self, node, parent):
523
+ """visit an Index node by returning a fresh instance of it"""
524
+ newnode = new.Index()
525
+ self._set_infos(node, newnode, parent)
526
+ newnode.value = self.visit(node.subs[0], newnode)
527
+ return newnode
528
+
529
+ def visit_keyword(self, node, parent):
530
+ """visit a Keyword node by returning a fresh instance of it"""
531
+ newnode = new.Keyword()
532
+ self._set_infos(node, newnode, parent)
533
+ newnode.value = self.visit(node.expr, newnode)
534
+ newnode.arg = node.name
535
+ return newnode
536
+
537
+ def visit_lambda(self, node, parent):
538
+ """visit a Lambda node by returning a fresh instance of it"""
539
+ newnode = new.Lambda()
540
+ self._set_infos(node, newnode, parent)
541
+ newnode.body = self.visit(node.code, newnode)
542
+ newnode.args = self.visit_arguments(node, newnode)
543
+ return newnode
544
+
545
+ def visit_list(self, node, parent):
546
+ """visit a List node by returning a fresh instance of it"""
547
+ newnode = new.List()
548
+ self._set_infos(node, newnode, parent)
549
+ newnode.elts = [self.visit(child, newnode) for child in node.nodes]
550
+ return newnode
551
+
552
+ def visit_listcomp(self, node, parent):
553
+ """visit a ListComp node by returning a fresh instance of it"""
554
+ newnode = new.ListComp()
555
+ self._set_infos(node, newnode, parent)
556
+ newnode.elt = self.visit(node.expr, newnode)
557
+ newnode.generators = [self.visit(child, newnode) for child in node.quals]
558
+ return newnode
559
+
560
+ def visit_module(self, node, modname):
561
+ """visit a Module node by returning a fresh instance of it"""
562
+ newnode = new.Module(modname, node.doc)
563
+ self._set_infos(node, newnode, None)
564
+ self._remove_nodes = [] # list of ';' Discard nodes to be removed
565
+ newnode.body = [self.visit(child, newnode) for child in node.node.nodes]
566
+ for discard, d_parent in self._remove_nodes:
567
+ d_parent.child_sequence(discard).remove(discard)
568
+ return newnode
569
+
570
+ def visit_name(self, node, parent):
571
+ """visit a Name node by returning a fresh instance of it"""
572
+ if node.name in CONST_NAME_TRANSFORMS:
573
+ newnode = new.Const(CONST_NAME_TRANSFORMS[node.name])
574
+ self._set_infos(node, newnode, parent)
575
+ return newnode
576
+ if self.asscontext == "Aug":
577
+ return self.visit_assname(node, parent)
578
+ newnode = new.Name()
579
+ self._set_infos(node, newnode, parent)
580
+ newnode.name = node.name
581
+ return newnode
582
+
583
+ def visit_print(self, node, parent):
584
+ """visit a Print node by returning a fresh instance of it"""
585
+ newnode = new.Print()
586
+ self._set_infos(node, newnode, parent)
587
+ newnode.dest = self.visit(node.dest, newnode)
588
+ newnode.values = [self.visit(child, newnode) for child in node.nodes]
589
+ newnode.nl = False
590
+ return newnode
591
+
592
+ def visit_printnl(self, node, parent):
593
+ newnode = self.visit_print(node, parent)
594
+ self._set_infos(node, newnode, parent)
595
+ newnode.nl = True
596
+ return newnode
597
+
598
+ def visit_raise(self, node, parent):
599
+ """visit a Raise node by returning a fresh instance of it"""
600
+ newnode = new.Raise()
601
+ self._set_infos(node, newnode, parent)
602
+ newnode.type = self.visit(node.expr1, newnode)
603
+ newnode.inst = self.visit(node.expr2, newnode)
604
+ newnode.tback = self.visit(node.expr3, newnode)
605
+ return newnode
606
+
607
+ def visit_return(self, node, parent):
608
+ """visit a Return node by returning a fresh instance of it"""
609
+ newnode = new.Return()
610
+ self._set_infos(node, newnode, parent)
611
+ newnode.value = self.visit(_filter_none(node.value), newnode)
612
+ return newnode
613
+
614
+ def visit_slice(self, node, parent):
615
+ """visit a compiler.Slice by returning a astng.Subscript"""
616
+ # compiler.Slice nodes represent astng.Subscript nodes
617
+ # the astng.Subscript node has a astng.Slice node as child
618
+ if node.flags == 'OP_DELETE':
619
+ delnode = self._check_del_node(node, parent, [node])
620
+ if delnode:
621
+ return delnode
622
+ newnode = new.Subscript()
623
+ self._set_infos(node, newnode, parent)
624
+ newnode.value = self.visit(node.expr, newnode)
625
+ newnode.slice = self.visit_sliceobj(node, newnode, slice=True)
626
+ return newnode
627
+
628
+ def visit_sliceobj(self, node, parent, slice=False):
629
+ """visit a Slice or Sliceobj; transform Sliceobj into a astng.Slice"""
630
+ newnode = new.Slice()
631
+ self._set_infos(node, newnode, parent)
632
+ if slice:
633
+ subs = [node.lower, node.upper, None]
634
+ else:
635
+ subs = node.nodes
636
+ if len(subs) == 2:
637
+ subs.append(None)
638
+ newnode.lower = self.visit(_filter_none(subs[0]), newnode)
639
+ newnode.upper = self.visit(_filter_none(subs[1]), newnode)
640
+ newnode.step = self.visit(_filter_none(subs[2]), newnode)
641
+ return newnode
642
+
643
+ def visit_subscript(self, node, parent):
644
+ """visit a Subscript node by returning a fresh instance of it"""
645
+ if node.flags == 'OP_DELETE':
646
+ delnode = self._check_del_node(node, parent, [node])
647
+ if delnode:
648
+ return delnode
649
+ newnode = new.Subscript()
650
+ self._set_infos(node, newnode, parent)
651
+ self.asscontext, asscontext = None, self.asscontext
652
+ newnode.value = self.visit(node.expr, newnode)
653
+ if [n for n in node.subs if isinstance(n, Sliceobj)]:
654
+ if len(node.subs) == 1: # Sliceobj -> new.Slice
655
+ newnode.slice = self.visit_sliceobj(node.subs[0], newnode)
656
+ else: # ExtSlice
657
+ newnode.slice = self.visit_extslice(node, newnode)
658
+ else: # Index
659
+ newnode.slice = self.visit_index(node, newnode)
660
+ self.asscontext = asscontext
661
+ return newnode
662
+
663
+ def visit_tryexcept(self, node, parent):
664
+ """visit a TryExcept node by returning a fresh instance of it"""
665
+ newnode = new.TryExcept()
666
+ self._set_infos(node, newnode, parent)
667
+ newnode.body = [self.visit(child, newnode) for child in node.body.nodes]
668
+ newnode.handlers = [self._visit_excepthandler(newnode, values)
669
+ for values in node.handlers]
670
+ newnode.orelse = self._init_else_node(node, newnode)
671
+ return newnode
672
+
673
+ def _visit_excepthandler(self, parent, values):
674
+ """build an ExceptHandler node from given values and visit children"""
675
+ newnode = new.ExceptHandler()
676
+ newnode.parent = parent
677
+ exctype, excobj, body = values
678
+ if exctype and exctype.lineno:
679
+ newnode.fromlineno = exctype.lineno
680
+ else:
681
+ newnode.fromlineno = body.nodes[0].fromlineno - 1
682
+ newnode.tolineno = body.nodes[-1].tolineno
683
+ if excobj:
684
+ newnode.blockstart_tolineno = excobj.tolineno
685
+ elif exctype:
686
+ newnode.blockstart_tolineno = exctype.tolineno
687
+ else:
688
+ newnode.blockstart_tolineno = newnode.fromlineno
689
+ newnode.type = self.visit(exctype, newnode)
690
+ self.asscontext = "Ass"
691
+ newnode.name = self.visit(excobj, newnode)
692
+ self.asscontext = None
693
+ newnode.body = [self.visit(child, newnode) for child in body.nodes]
694
+ return newnode
695
+
696
+ def visit_tryfinally(self, node, parent):
697
+ """visit a TryFinally node by returning a fresh instance of it"""
698
+ newnode = new.TryFinally()
699
+ self._set_infos(node, newnode, parent)
700
+ newnode.body = [self.visit(child, newnode) for child in node.body.nodes]
701
+ newnode.finalbody = [self.visit(n, newnode) for n in node.final.nodes]
702
+ return newnode
703
+
704
+ def visit_tuple(self, node, parent):
705
+ """visit a Tuple node by returning a fresh instance of it"""
706
+ newnode = new.Tuple()
707
+ self._set_infos(node, newnode, parent)
708
+ newnode.elts = [self.visit(child, newnode) for child in node.nodes]
709
+ return newnode
710
+
711
+ def visit_unaryop(self, node, parent):
712
+ """visit an UnaryOp node by returning a fresh instance of it"""
713
+ newnode = new.UnaryOp()
714
+ self._set_infos(node, newnode, parent)
715
+ newnode.operand = self.visit(node.expr, newnode)
716
+ newnode.op = UnaryOp_OP_CLASSES[node.__class__]
717
+ return newnode
718
+
719
+ def visit_while(self, node, parent):
720
+ """visit a While node by returning a fresh instance of it"""
721
+ newnode = new.While()
722
+ self._set_infos(node, newnode, parent)
723
+ newnode.test = self.visit(node.test, newnode)
724
+ newnode.body = [self.visit(child, newnode) for child in node.body.nodes]
725
+ newnode.orelse = self._init_else_node(node, newnode)
726
+ return newnode
727
+
728
+ def visit_with(self, node, parent):
729
+ """visit a With node by returning a fresh instance of it"""
730
+ newnode = new.With()
731
+ self._set_infos(node, newnode, parent)
732
+ newnode.expr = self.visit(node.expr, newnode)
733
+ newnode.vars = self.visit(node.vars, newnode)
734
+ newnode.body = [self.visit(child, newnode) for child in node.body]
735
+ return newnode
736
+
737
+ def visit_yield(self, node, parent):
738
+ """visit a Yield node by returning a fresh instance of it"""
739
+ discard = self._check_discard(node, parent)
740
+ if discard:
741
+ return discard
742
+ newnode = new.Yield()
743
+ self._set_infos(node, newnode, parent)
744
+ newnode.value = self.visit(node.value, newnode)
745
+ return newnode
746
+
747
+ def _check_discard(self, node, parent):
748
+ """check if we introduced already a discard node."""
749
+ # XXX we should maybe use something else then 'asscontext' here
750
+ if self.asscontext is None:
751
+ self.asscontext = 'Dis'
752
+ newnode = new.Discard()
753
+ self._set_infos(node, newnode, parent)
754
+ newnode.value = self.visit(node, newnode)
755
+ self.asscontext = None
756
+ return newnode
757
+ return False
758
+