bee_python 0.0.3 → 0.0.4

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 (488) hide show
  1. data/{build/README → README} +1 -1
  2. data/egg/egg/build.yml +11 -49
  3. data/egg/egg.yml +19 -27
  4. data/egg/http/build.erb +32 -36
  5. data/egg/http/libhttp.py +102 -0
  6. data/egg/http/pylint.cfg +236 -0
  7. data/egg/http/server.py +7 -0
  8. data/egg/http/test.erb +32 -0
  9. data/egg/http.yml +33 -29
  10. data/egg/mysql/mysql.py +8 -9
  11. data/egg/project/build.erb +21 -53
  12. data/egg/project/pylint.cfg +236 -0
  13. data/egg/project/test.py +2 -2
  14. data/egg/project.yml +23 -31
  15. data/egg/script/build.erb +18 -23
  16. data/egg/script/pylint.cfg +236 -0
  17. data/egg/script.yml +22 -18
  18. data/egg/source/source.py +6 -6
  19. data/egg/test/test.py +1 -1
  20. data/lib/bee_task_python.rb +3 -34
  21. data/python.yml +123 -0
  22. metadata +61 -503
  23. data/test/build.yml +0 -16
  24. data/test/tc_bee_task_python.rb +0 -27
  25. data/test/test_build.rb +0 -26
  26. data/test/test_build_listener.rb +0 -110
  27. data/test/ts_bee_python.rb +0 -26
  28. data/tools/common/__init__.py +0 -5
  29. data/tools/common/common/__init__.py +0 -140
  30. data/tools/common/common/__pkginfo__.py +0 -43
  31. data/tools/common/common/adbh.py +0 -35
  32. data/tools/common/common/cache.py +0 -114
  33. data/tools/common/common/changelog.py +0 -234
  34. data/tools/common/common/clcommands.py +0 -181
  35. data/tools/common/common/cli.py +0 -212
  36. data/tools/common/common/compat.py +0 -328
  37. data/tools/common/common/configuration.py +0 -1087
  38. data/tools/common/common/contexts.py +0 -58
  39. data/tools/common/common/corbautils.py +0 -117
  40. data/tools/common/common/daemon.py +0 -171
  41. data/tools/common/common/date.py +0 -279
  42. data/tools/common/common/db.py +0 -49
  43. data/tools/common/common/dbf.py +0 -229
  44. data/tools/common/common/debugger.py +0 -208
  45. data/tools/common/common/decorators.py +0 -190
  46. data/tools/common/common/deprecation.py +0 -118
  47. data/tools/common/common/fileutils.py +0 -409
  48. data/tools/common/common/graph.py +0 -259
  49. data/tools/common/common/html.py +0 -142
  50. data/tools/common/common/interface.py +0 -76
  51. data/tools/common/common/logging_ext.py +0 -166
  52. data/tools/common/common/modutils.py +0 -670
  53. data/tools/common/common/optik_ext.py +0 -383
  54. data/tools/common/common/optparser.py +0 -92
  55. data/tools/common/common/pdf_ext.py +0 -111
  56. data/tools/common/common/proc.py +0 -276
  57. data/tools/common/common/pyro_ext.py +0 -146
  58. data/tools/common/common/pytest.py +0 -754
  59. data/tools/common/common/shellutils.py +0 -383
  60. data/tools/common/common/sphinx_ext.py +0 -87
  61. data/tools/common/common/sphinxutils.py +0 -122
  62. data/tools/common/common/sqlgen.py +0 -31
  63. data/tools/common/common/table.py +0 -930
  64. data/tools/common/common/tasksqueue.py +0 -97
  65. data/tools/common/common/test/__init__.py +0 -1
  66. data/tools/common/common/test/data/ChangeLog +0 -184
  67. data/tools/common/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
  68. data/tools/common/common/test/data/__init__.py +0 -1
  69. data/tools/common/common/test/data/content_differ_dir/NOTHING +0 -0
  70. data/tools/common/common/test/data/content_differ_dir/README +0 -1
  71. data/tools/common/common/test/data/content_differ_dir/subdir/coin +0 -1
  72. data/tools/common/common/test/data/content_differ_dir/subdir/toto.txt +0 -53
  73. data/tools/common/common/test/data/file_differ_dir/NOTHING +0 -0
  74. data/tools/common/common/test/data/file_differ_dir/README +0 -1
  75. data/tools/common/common/test/data/file_differ_dir/subdir/toto.txt +0 -53
  76. data/tools/common/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
  77. data/tools/common/common/test/data/find_test/__init__.py +0 -0
  78. data/tools/common/common/test/data/find_test/foo.txt +0 -0
  79. data/tools/common/common/test/data/find_test/module.py +0 -0
  80. data/tools/common/common/test/data/find_test/module2.py +0 -0
  81. data/tools/common/common/test/data/find_test/newlines.txt +0 -0
  82. data/tools/common/common/test/data/find_test/noendingnewline.py +0 -0
  83. data/tools/common/common/test/data/find_test/nonregr.py +0 -0
  84. data/tools/common/common/test/data/find_test/normal_file.txt +0 -0
  85. data/tools/common/common/test/data/find_test/spam.txt +0 -0
  86. data/tools/common/common/test/data/find_test/sub/doc.txt +0 -0
  87. data/tools/common/common/test/data/find_test/sub/momo.py +0 -0
  88. data/tools/common/common/test/data/find_test/test.ini +0 -0
  89. data/tools/common/common/test/data/find_test/test1.msg +0 -0
  90. data/tools/common/common/test/data/find_test/test2.msg +0 -0
  91. data/tools/common/common/test/data/find_test/write_protected_file.txt +0 -0
  92. data/tools/common/common/test/data/foo.txt +0 -9
  93. data/tools/common/common/test/data/module.py +0 -88
  94. data/tools/common/common/test/data/module2.py +0 -77
  95. data/tools/common/common/test/data/newlines.txt +0 -3
  96. data/tools/common/common/test/data/noendingnewline.py +0 -36
  97. data/tools/common/common/test/data/nonregr.py +0 -14
  98. data/tools/common/common/test/data/normal_file.txt +0 -0
  99. data/tools/common/common/test/data/reference_dir/NOTHING +0 -0
  100. data/tools/common/common/test/data/reference_dir/README +0 -1
  101. data/tools/common/common/test/data/reference_dir/subdir/coin +0 -1
  102. data/tools/common/common/test/data/reference_dir/subdir/toto.txt +0 -53
  103. data/tools/common/common/test/data/same_dir/NOTHING +0 -0
  104. data/tools/common/common/test/data/same_dir/README +0 -1
  105. data/tools/common/common/test/data/same_dir/subdir/coin +0 -1
  106. data/tools/common/common/test/data/same_dir/subdir/toto.txt +0 -53
  107. data/tools/common/common/test/data/spam.txt +0 -9
  108. data/tools/common/common/test/data/sub/doc.txt +0 -1
  109. data/tools/common/common/test/data/sub/momo.py +0 -1
  110. data/tools/common/common/test/data/subdir_differ_dir/NOTHING +0 -0
  111. data/tools/common/common/test/data/subdir_differ_dir/README +0 -1
  112. data/tools/common/common/test/data/subdir_differ_dir/subdir/coin +0 -1
  113. data/tools/common/common/test/data/subdir_differ_dir/subdir/toto.txt +0 -53
  114. data/tools/common/common/test/data/test.ini +0 -20
  115. data/tools/common/common/test/data/test1.msg +0 -30
  116. data/tools/common/common/test/data/test2.msg +0 -42
  117. data/tools/common/common/test/data/write_protected_file.txt +0 -0
  118. data/tools/common/common/test/foomod.py +0 -17
  119. data/tools/common/common/test/unittest_cache.py +0 -129
  120. data/tools/common/common/test/unittest_changelog.py +0 -37
  121. data/tools/common/common/test/unittest_compat.py +0 -239
  122. data/tools/common/common/test/unittest_configuration.py +0 -348
  123. data/tools/common/common/test/unittest_date.py +0 -154
  124. data/tools/common/common/test/unittest_decorators.py +0 -62
  125. data/tools/common/common/test/unittest_deprecation.py +0 -76
  126. data/tools/common/common/test/unittest_fileutils.py +0 -133
  127. data/tools/common/common/test/unittest_graph.py +0 -50
  128. data/tools/common/common/test/unittest_html.py +0 -76
  129. data/tools/common/common/test/unittest_interface.py +0 -87
  130. data/tools/common/common/test/unittest_modutils.py +0 -244
  131. data/tools/common/common/test/unittest_pytest.py +0 -50
  132. data/tools/common/common/test/unittest_shellutils.py +0 -248
  133. data/tools/common/common/test/unittest_table.py +0 -448
  134. data/tools/common/common/test/unittest_taskqueue.py +0 -71
  135. data/tools/common/common/test/unittest_testlib.py +0 -956
  136. data/tools/common/common/test/unittest_textutils.py +0 -247
  137. data/tools/common/common/test/unittest_tree.py +0 -248
  138. data/tools/common/common/test/unittest_umessage.py +0 -55
  139. data/tools/common/common/test/unittest_ureports_html.py +0 -64
  140. data/tools/common/common/test/unittest_ureports_text.py +0 -105
  141. data/tools/common/common/test/unittest_xmlutils.py +0 -75
  142. data/tools/common/common/test/utils.py +0 -87
  143. data/tools/common/common/testlib.py +0 -1927
  144. data/tools/common/common/textutils.py +0 -476
  145. data/tools/common/common/tree.py +0 -372
  146. data/tools/common/common/umessage.py +0 -161
  147. data/tools/common/common/ureports/__init__.py +0 -174
  148. data/tools/common/common/ureports/docbook_writer.py +0 -139
  149. data/tools/common/common/ureports/html_writer.py +0 -131
  150. data/tools/common/common/ureports/nodes.py +0 -201
  151. data/tools/common/common/ureports/text_writer.py +0 -140
  152. data/tools/common/common/vcgutils.py +0 -216
  153. data/tools/common/common/visitor.py +0 -107
  154. data/tools/common/common/xmlrpcutils.py +0 -136
  155. data/tools/common/common/xmlutils.py +0 -61
  156. data/tools/coverage/coverage.py +0 -602
  157. data/tools/epydoc/__init__.py +0 -227
  158. data/tools/epydoc/__init__.pyc +0 -0
  159. data/tools/epydoc/apidoc.py +0 -2203
  160. data/tools/epydoc/apidoc.pyc +0 -0
  161. data/tools/epydoc/checker.py +0 -349
  162. data/tools/epydoc/checker.pyc +0 -0
  163. data/tools/epydoc/cli.py +0 -1470
  164. data/tools/epydoc/cli.pyc +0 -0
  165. data/tools/epydoc/compat.py +0 -250
  166. data/tools/epydoc/compat.pyc +0 -0
  167. data/tools/epydoc/docbuilder.py +0 -1358
  168. data/tools/epydoc/docbuilder.pyc +0 -0
  169. data/tools/epydoc/docintrospecter.py +0 -1056
  170. data/tools/epydoc/docintrospecter.pyc +0 -0
  171. data/tools/epydoc/docparser.py +0 -2113
  172. data/tools/epydoc/docparser.pyc +0 -0
  173. data/tools/epydoc/docstringparser.py +0 -1111
  174. data/tools/epydoc/docstringparser.pyc +0 -0
  175. data/tools/epydoc/docwriter/__init__.py +0 -12
  176. data/tools/epydoc/docwriter/__init__.pyc +0 -0
  177. data/tools/epydoc/docwriter/dotgraph.py +0 -1351
  178. data/tools/epydoc/docwriter/dotgraph.pyc +0 -0
  179. data/tools/epydoc/docwriter/html.py +0 -3491
  180. data/tools/epydoc/docwriter/html.pyc +0 -0
  181. data/tools/epydoc/docwriter/html_colorize.py +0 -909
  182. data/tools/epydoc/docwriter/html_colorize.pyc +0 -0
  183. data/tools/epydoc/docwriter/html_css.py +0 -550
  184. data/tools/epydoc/docwriter/html_css.pyc +0 -0
  185. data/tools/epydoc/docwriter/html_help.py +0 -190
  186. data/tools/epydoc/docwriter/html_help.pyc +0 -0
  187. data/tools/epydoc/docwriter/latex.py +0 -1187
  188. data/tools/epydoc/docwriter/latex.pyc +0 -0
  189. data/tools/epydoc/docwriter/plaintext.py +0 -276
  190. data/tools/epydoc/docwriter/plaintext.pyc +0 -0
  191. data/tools/epydoc/docwriter/xlink.py +0 -505
  192. data/tools/epydoc/docwriter/xlink.pyc +0 -0
  193. data/tools/epydoc/gui.py +0 -1148
  194. data/tools/epydoc/gui.pyc +0 -0
  195. data/tools/epydoc/log.py +0 -204
  196. data/tools/epydoc/log.pyc +0 -0
  197. data/tools/epydoc/markup/__init__.py +0 -623
  198. data/tools/epydoc/markup/__init__.pyc +0 -0
  199. data/tools/epydoc/markup/doctest.py +0 -311
  200. data/tools/epydoc/markup/doctest.pyc +0 -0
  201. data/tools/epydoc/markup/epytext.py +0 -2116
  202. data/tools/epydoc/markup/epytext.pyc +0 -0
  203. data/tools/epydoc/markup/javadoc.py +0 -250
  204. data/tools/epydoc/markup/javadoc.pyc +0 -0
  205. data/tools/epydoc/markup/plaintext.py +0 -78
  206. data/tools/epydoc/markup/plaintext.pyc +0 -0
  207. data/tools/epydoc/markup/pyval_repr.py +0 -532
  208. data/tools/epydoc/markup/pyval_repr.pyc +0 -0
  209. data/tools/epydoc/markup/restructuredtext.py +0 -906
  210. data/tools/epydoc/markup/restructuredtext.pyc +0 -0
  211. data/tools/epydoc/test/__init__.py +0 -97
  212. data/tools/epydoc/test/__init__.pyc +0 -0
  213. data/tools/epydoc/test/util.py +0 -226
  214. data/tools/epydoc/test/util.pyc +0 -0
  215. data/tools/epydoc/util.py +0 -289
  216. data/tools/epydoc/util.pyc +0 -0
  217. data/tools/logilab/logilab/__init__.py +0 -5
  218. data/tools/logilab/logilab/astng/__init__.py +0 -82
  219. data/tools/logilab/logilab/astng/__pkginfo__.py +0 -76
  220. data/tools/logilab/logilab/astng/_exceptions.py +0 -64
  221. data/tools/logilab/logilab/astng/_nodes_ast.py +0 -667
  222. data/tools/logilab/logilab/astng/_nodes_compiler.py +0 -758
  223. data/tools/logilab/logilab/astng/bases.py +0 -608
  224. data/tools/logilab/logilab/astng/builder.py +0 -239
  225. data/tools/logilab/logilab/astng/inference.py +0 -426
  226. data/tools/logilab/logilab/astng/inspector.py +0 -289
  227. data/tools/logilab/logilab/astng/manager.py +0 -421
  228. data/tools/logilab/logilab/astng/mixins.py +0 -165
  229. data/tools/logilab/logilab/astng/node_classes.py +0 -848
  230. data/tools/logilab/logilab/astng/nodes.py +0 -85
  231. data/tools/logilab/logilab/astng/nodes_as_string.py +0 -389
  232. data/tools/logilab/logilab/astng/patchcomptransformer.py +0 -159
  233. data/tools/logilab/logilab/astng/protocols.py +0 -333
  234. data/tools/logilab/logilab/astng/raw_building.py +0 -212
  235. data/tools/logilab/logilab/astng/rebuilder.py +0 -307
  236. data/tools/logilab/logilab/astng/scoped_nodes.py +0 -951
  237. data/tools/logilab/logilab/astng/test/__init__.py +0 -19
  238. data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
  239. data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.zip +0 -0
  240. data/tools/logilab/logilab/astng/test/data/SSL1/Connection1.py +0 -33
  241. data/tools/logilab/logilab/astng/test/data/SSL1/__init__.py +0 -20
  242. data/tools/logilab/logilab/astng/test/data/__init__.py +0 -20
  243. data/tools/logilab/logilab/astng/test/data/all.py +0 -29
  244. data/tools/logilab/logilab/astng/test/data/appl/__init__.py +0 -23
  245. data/tools/logilab/logilab/astng/test/data/appl/myConnection.py +0 -30
  246. data/tools/logilab/logilab/astng/test/data/format.py +0 -34
  247. data/tools/logilab/logilab/astng/test/data/module.py +0 -90
  248. data/tools/logilab/logilab/astng/test/data/module2.py +0 -112
  249. data/tools/logilab/logilab/astng/test/data/noendingnewline.py +0 -57
  250. data/tools/logilab/logilab/astng/test/data/nonregr.py +0 -76
  251. data/tools/logilab/logilab/astng/test/data/notall.py +0 -28
  252. data/tools/logilab/logilab/astng/test/data2/__init__.py +0 -20
  253. data/tools/logilab/logilab/astng/test/data2/clientmodule_test.py +0 -51
  254. data/tools/logilab/logilab/astng/test/data2/suppliermodule_test.py +0 -32
  255. data/tools/logilab/logilab/astng/test/regrtest.py +0 -135
  256. data/tools/logilab/logilab/astng/test/regrtest_data/absimport.py +0 -22
  257. data/tools/logilab/logilab/astng/test/regrtest_data/descriptor_crash.py +0 -31
  258. data/tools/logilab/logilab/astng/test/regrtest_data/import_package_subpackage_module.py +0 -68
  259. data/tools/logilab/logilab/astng/test/regrtest_data/package/__init__.py +0 -24
  260. data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/__init__.py +0 -20
  261. data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/module.py +0 -20
  262. data/tools/logilab/logilab/astng/test/unittest_builder.py +0 -684
  263. data/tools/logilab/logilab/astng/test/unittest_inference.py +0 -1112
  264. data/tools/logilab/logilab/astng/test/unittest_inspector.py +0 -105
  265. data/tools/logilab/logilab/astng/test/unittest_lookup.py +0 -302
  266. data/tools/logilab/logilab/astng/test/unittest_manager.py +0 -98
  267. data/tools/logilab/logilab/astng/test/unittest_nodes.py +0 -302
  268. data/tools/logilab/logilab/astng/test/unittest_scoped_nodes.py +0 -501
  269. data/tools/logilab/logilab/astng/test/unittest_utils.py +0 -104
  270. data/tools/logilab/logilab/astng/utils.py +0 -342
  271. data/tools/logilab/logilab/common/__init__.py +0 -140
  272. data/tools/logilab/logilab/common/__pkginfo__.py +0 -43
  273. data/tools/logilab/logilab/common/adbh.py +0 -35
  274. data/tools/logilab/logilab/common/cache.py +0 -114
  275. data/tools/logilab/logilab/common/changelog.py +0 -234
  276. data/tools/logilab/logilab/common/clcommands.py +0 -181
  277. data/tools/logilab/logilab/common/cli.py +0 -212
  278. data/tools/logilab/logilab/common/compat.py +0 -328
  279. data/tools/logilab/logilab/common/configuration.py +0 -1087
  280. data/tools/logilab/logilab/common/contexts.py +0 -58
  281. data/tools/logilab/logilab/common/corbautils.py +0 -117
  282. data/tools/logilab/logilab/common/daemon.py +0 -171
  283. data/tools/logilab/logilab/common/date.py +0 -279
  284. data/tools/logilab/logilab/common/db.py +0 -49
  285. data/tools/logilab/logilab/common/dbf.py +0 -229
  286. data/tools/logilab/logilab/common/debugger.py +0 -208
  287. data/tools/logilab/logilab/common/decorators.py +0 -190
  288. data/tools/logilab/logilab/common/deprecation.py +0 -118
  289. data/tools/logilab/logilab/common/fileutils.py +0 -409
  290. data/tools/logilab/logilab/common/graph.py +0 -259
  291. data/tools/logilab/logilab/common/html.py +0 -142
  292. data/tools/logilab/logilab/common/interface.py +0 -76
  293. data/tools/logilab/logilab/common/logging_ext.py +0 -166
  294. data/tools/logilab/logilab/common/modutils.py +0 -670
  295. data/tools/logilab/logilab/common/optik_ext.py +0 -383
  296. data/tools/logilab/logilab/common/optparser.py +0 -92
  297. data/tools/logilab/logilab/common/pdf_ext.py +0 -111
  298. data/tools/logilab/logilab/common/proc.py +0 -276
  299. data/tools/logilab/logilab/common/pyro_ext.py +0 -146
  300. data/tools/logilab/logilab/common/pytest.py +0 -754
  301. data/tools/logilab/logilab/common/shellutils.py +0 -383
  302. data/tools/logilab/logilab/common/sphinx_ext.py +0 -87
  303. data/tools/logilab/logilab/common/sphinxutils.py +0 -122
  304. data/tools/logilab/logilab/common/sqlgen.py +0 -31
  305. data/tools/logilab/logilab/common/table.py +0 -930
  306. data/tools/logilab/logilab/common/tasksqueue.py +0 -97
  307. data/tools/logilab/logilab/common/test/__init__.py +0 -1
  308. data/tools/logilab/logilab/common/test/data/ChangeLog +0 -184
  309. data/tools/logilab/logilab/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
  310. data/tools/logilab/logilab/common/test/data/__init__.py +0 -1
  311. data/tools/logilab/logilab/common/test/data/content_differ_dir/NOTHING +0 -0
  312. data/tools/logilab/logilab/common/test/data/content_differ_dir/README +0 -1
  313. data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/coin +0 -1
  314. data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/toto.txt +0 -53
  315. data/tools/logilab/logilab/common/test/data/file_differ_dir/NOTHING +0 -0
  316. data/tools/logilab/logilab/common/test/data/file_differ_dir/README +0 -1
  317. data/tools/logilab/logilab/common/test/data/file_differ_dir/subdir/toto.txt +0 -53
  318. data/tools/logilab/logilab/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
  319. data/tools/logilab/logilab/common/test/data/find_test/__init__.py +0 -0
  320. data/tools/logilab/logilab/common/test/data/find_test/foo.txt +0 -0
  321. data/tools/logilab/logilab/common/test/data/find_test/module.py +0 -0
  322. data/tools/logilab/logilab/common/test/data/find_test/module2.py +0 -0
  323. data/tools/logilab/logilab/common/test/data/find_test/newlines.txt +0 -0
  324. data/tools/logilab/logilab/common/test/data/find_test/noendingnewline.py +0 -0
  325. data/tools/logilab/logilab/common/test/data/find_test/nonregr.py +0 -0
  326. data/tools/logilab/logilab/common/test/data/find_test/normal_file.txt +0 -0
  327. data/tools/logilab/logilab/common/test/data/find_test/spam.txt +0 -0
  328. data/tools/logilab/logilab/common/test/data/find_test/sub/doc.txt +0 -0
  329. data/tools/logilab/logilab/common/test/data/find_test/sub/momo.py +0 -0
  330. data/tools/logilab/logilab/common/test/data/find_test/test.ini +0 -0
  331. data/tools/logilab/logilab/common/test/data/find_test/test1.msg +0 -0
  332. data/tools/logilab/logilab/common/test/data/find_test/test2.msg +0 -0
  333. data/tools/logilab/logilab/common/test/data/find_test/write_protected_file.txt +0 -0
  334. data/tools/logilab/logilab/common/test/data/foo.txt +0 -9
  335. data/tools/logilab/logilab/common/test/data/module.py +0 -88
  336. data/tools/logilab/logilab/common/test/data/module2.py +0 -77
  337. data/tools/logilab/logilab/common/test/data/newlines.txt +0 -3
  338. data/tools/logilab/logilab/common/test/data/noendingnewline.py +0 -36
  339. data/tools/logilab/logilab/common/test/data/nonregr.py +0 -14
  340. data/tools/logilab/logilab/common/test/data/normal_file.txt +0 -0
  341. data/tools/logilab/logilab/common/test/data/reference_dir/NOTHING +0 -0
  342. data/tools/logilab/logilab/common/test/data/reference_dir/README +0 -1
  343. data/tools/logilab/logilab/common/test/data/reference_dir/subdir/coin +0 -1
  344. data/tools/logilab/logilab/common/test/data/reference_dir/subdir/toto.txt +0 -53
  345. data/tools/logilab/logilab/common/test/data/same_dir/NOTHING +0 -0
  346. data/tools/logilab/logilab/common/test/data/same_dir/README +0 -1
  347. data/tools/logilab/logilab/common/test/data/same_dir/subdir/coin +0 -1
  348. data/tools/logilab/logilab/common/test/data/same_dir/subdir/toto.txt +0 -53
  349. data/tools/logilab/logilab/common/test/data/spam.txt +0 -9
  350. data/tools/logilab/logilab/common/test/data/sub/doc.txt +0 -1
  351. data/tools/logilab/logilab/common/test/data/sub/momo.py +0 -1
  352. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/NOTHING +0 -0
  353. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/README +0 -1
  354. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/coin +0 -1
  355. data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/toto.txt +0 -53
  356. data/tools/logilab/logilab/common/test/data/test.ini +0 -20
  357. data/tools/logilab/logilab/common/test/data/test1.msg +0 -30
  358. data/tools/logilab/logilab/common/test/data/test2.msg +0 -42
  359. data/tools/logilab/logilab/common/test/data/write_protected_file.txt +0 -0
  360. data/tools/logilab/logilab/common/test/foomod.py +0 -17
  361. data/tools/logilab/logilab/common/test/unittest_cache.py +0 -129
  362. data/tools/logilab/logilab/common/test/unittest_changelog.py +0 -37
  363. data/tools/logilab/logilab/common/test/unittest_compat.py +0 -239
  364. data/tools/logilab/logilab/common/test/unittest_configuration.py +0 -348
  365. data/tools/logilab/logilab/common/test/unittest_date.py +0 -154
  366. data/tools/logilab/logilab/common/test/unittest_decorators.py +0 -62
  367. data/tools/logilab/logilab/common/test/unittest_deprecation.py +0 -76
  368. data/tools/logilab/logilab/common/test/unittest_fileutils.py +0 -133
  369. data/tools/logilab/logilab/common/test/unittest_graph.py +0 -50
  370. data/tools/logilab/logilab/common/test/unittest_html.py +0 -76
  371. data/tools/logilab/logilab/common/test/unittest_interface.py +0 -87
  372. data/tools/logilab/logilab/common/test/unittest_modutils.py +0 -244
  373. data/tools/logilab/logilab/common/test/unittest_pytest.py +0 -50
  374. data/tools/logilab/logilab/common/test/unittest_shellutils.py +0 -248
  375. data/tools/logilab/logilab/common/test/unittest_table.py +0 -448
  376. data/tools/logilab/logilab/common/test/unittest_taskqueue.py +0 -71
  377. data/tools/logilab/logilab/common/test/unittest_testlib.py +0 -956
  378. data/tools/logilab/logilab/common/test/unittest_textutils.py +0 -247
  379. data/tools/logilab/logilab/common/test/unittest_tree.py +0 -248
  380. data/tools/logilab/logilab/common/test/unittest_umessage.py +0 -55
  381. data/tools/logilab/logilab/common/test/unittest_ureports_html.py +0 -64
  382. data/tools/logilab/logilab/common/test/unittest_ureports_text.py +0 -105
  383. data/tools/logilab/logilab/common/test/unittest_xmlutils.py +0 -75
  384. data/tools/logilab/logilab/common/test/utils.py +0 -87
  385. data/tools/logilab/logilab/common/testlib.py +0 -1927
  386. data/tools/logilab/logilab/common/textutils.py +0 -476
  387. data/tools/logilab/logilab/common/tree.py +0 -372
  388. data/tools/logilab/logilab/common/umessage.py +0 -161
  389. data/tools/logilab/logilab/common/ureports/__init__.py +0 -174
  390. data/tools/logilab/logilab/common/ureports/docbook_writer.py +0 -139
  391. data/tools/logilab/logilab/common/ureports/html_writer.py +0 -131
  392. data/tools/logilab/logilab/common/ureports/nodes.py +0 -201
  393. data/tools/logilab/logilab/common/ureports/text_writer.py +0 -140
  394. data/tools/logilab/logilab/common/vcgutils.py +0 -216
  395. data/tools/logilab/logilab/common/visitor.py +0 -107
  396. data/tools/logilab/logilab/common/xmlrpcutils.py +0 -136
  397. data/tools/logilab/logilab/common/xmlutils.py +0 -61
  398. data/tools/pychecker/COPYRIGHT +0 -31
  399. data/tools/pychecker/ChangeLog +0 -349
  400. data/tools/pychecker/CodeChecks.py +0 -1969
  401. data/tools/pychecker/CodeChecks.pyc +0 -0
  402. data/tools/pychecker/CodeChecks.pyo +0 -0
  403. data/tools/pychecker/Config.py +0 -475
  404. data/tools/pychecker/Config.pyc +0 -0
  405. data/tools/pychecker/Config.pyo +0 -0
  406. data/tools/pychecker/KNOWN_BUGS +0 -100
  407. data/tools/pychecker/MAINTAINERS +0 -81
  408. data/tools/pychecker/NEWS +0 -406
  409. data/tools/pychecker/OP.py +0 -131
  410. data/tools/pychecker/OP.pyc +0 -0
  411. data/tools/pychecker/OP.pyo +0 -0
  412. data/tools/pychecker/OptionTypes.py +0 -117
  413. data/tools/pychecker/OptionTypes.pyc +0 -0
  414. data/tools/pychecker/OptionTypes.pyo +0 -0
  415. data/tools/pychecker/README +0 -152
  416. data/tools/pychecker/Stack.py +0 -115
  417. data/tools/pychecker/Stack.pyc +0 -0
  418. data/tools/pychecker/Stack.pyo +0 -0
  419. data/tools/pychecker/TODO +0 -101
  420. data/tools/pychecker/VERSION +0 -1
  421. data/tools/pychecker/Warning.py +0 -50
  422. data/tools/pychecker/Warning.pyc +0 -0
  423. data/tools/pychecker/Warning.pyo +0 -0
  424. data/tools/pychecker/__init__.py +0 -17
  425. data/tools/pychecker/__init__.pyc +0 -0
  426. data/tools/pychecker/__init__.pyo +0 -0
  427. data/tools/pychecker/checker.py +0 -961
  428. data/tools/pychecker/checker.pyc +0 -0
  429. data/tools/pychecker/checker.pyo +0 -0
  430. data/tools/pychecker/function.py +0 -159
  431. data/tools/pychecker/function.pyc +0 -0
  432. data/tools/pychecker/function.pyo +0 -0
  433. data/tools/pychecker/msgs.py +0 -175
  434. data/tools/pychecker/msgs.pyc +0 -0
  435. data/tools/pychecker/msgs.pyo +0 -0
  436. data/tools/pychecker/options.py +0 -275
  437. data/tools/pychecker/options.pyc +0 -0
  438. data/tools/pychecker/options.pyo +0 -0
  439. data/tools/pychecker/pcmodules.py +0 -19
  440. data/tools/pychecker/pcmodules.pyc +0 -0
  441. data/tools/pychecker/pcmodules.pyo +0 -0
  442. data/tools/pychecker/printer.py +0 -47
  443. data/tools/pychecker/printer.pyc +0 -0
  444. data/tools/pychecker/printer.pyo +0 -0
  445. data/tools/pychecker/python.py +0 -427
  446. data/tools/pychecker/python.pyc +0 -0
  447. data/tools/pychecker/python.pyo +0 -0
  448. data/tools/pychecker/utils.py +0 -102
  449. data/tools/pychecker/utils.pyc +0 -0
  450. data/tools/pychecker/utils.pyo +0 -0
  451. data/tools/pychecker/warn.py +0 -778
  452. data/tools/pychecker/warn.pyc +0 -0
  453. data/tools/pychecker/warn.pyo +0 -0
  454. data/tools/pylint2/pylint/__init__.py +0 -16
  455. data/tools/pylint2/pylint/__pkginfo__.py +0 -67
  456. data/tools/pylint2/pylint/checkers/__init__.py +0 -155
  457. data/tools/pylint2/pylint/checkers/base.py +0 -749
  458. data/tools/pylint2/pylint/checkers/classes.py +0 -527
  459. data/tools/pylint2/pylint/checkers/design_analysis.py +0 -344
  460. data/tools/pylint2/pylint/checkers/exceptions.py +0 -183
  461. data/tools/pylint2/pylint/checkers/format.py +0 -367
  462. data/tools/pylint2/pylint/checkers/imports.py +0 -379
  463. data/tools/pylint2/pylint/checkers/logging.py +0 -98
  464. data/tools/pylint2/pylint/checkers/misc.py +0 -128
  465. data/tools/pylint2/pylint/checkers/newstyle.py +0 -107
  466. data/tools/pylint2/pylint/checkers/raw_metrics.py +0 -125
  467. data/tools/pylint2/pylint/checkers/similar.py +0 -333
  468. data/tools/pylint2/pylint/checkers/string_format.py +0 -239
  469. data/tools/pylint2/pylint/checkers/typecheck.py +0 -364
  470. data/tools/pylint2/pylint/checkers/utils.py +0 -208
  471. data/tools/pylint2/pylint/checkers/variables.py +0 -498
  472. data/tools/pylint2/pylint/config.py +0 -149
  473. data/tools/pylint2/pylint/epylint.py +0 -149
  474. data/tools/pylint2/pylint/gui.py +0 -433
  475. data/tools/pylint2/pylint/interfaces.py +0 -98
  476. data/tools/pylint2/pylint/lint.py +0 -914
  477. data/tools/pylint2/pylint/pyreverse/__init__.py +0 -5
  478. data/tools/pylint2/pylint/pyreverse/diadefslib.py +0 -229
  479. data/tools/pylint2/pylint/pyreverse/diagrams.py +0 -247
  480. data/tools/pylint2/pylint/pyreverse/main.py +0 -123
  481. data/tools/pylint2/pylint/pyreverse/utils.py +0 -131
  482. data/tools/pylint2/pylint/pyreverse/writer.py +0 -196
  483. data/tools/pylint2/pylint/reporters/__init__.py +0 -67
  484. data/tools/pylint2/pylint/reporters/guireporter.py +0 -36
  485. data/tools/pylint2/pylint/reporters/html.py +0 -69
  486. data/tools/pylint2/pylint/reporters/text.py +0 -156
  487. data/tools/pylint2/pylint/utils.py +0 -518
  488. data/tools/pylint2/pylint.py +0 -16
@@ -1,848 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # This program is free software; you can redistribute it and/or modify it under
3
- # the terms of the GNU Lesser General Public License as published by the Free Software
4
- # Foundation; either version 2 of the License, or (at your option) any later
5
- # version.
6
- #
7
- # This program is distributed in the hope that it will be useful, but WITHOUT
8
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
9
- # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
10
- #
11
- # You should have received a copy of the GNU Lesser General Public License along with
12
- # this program; if not, write to the Free Software Foundation, Inc.,
13
- # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
14
- # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
15
- # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
16
- # copyright 2003-2010 Sylvain Thenault, all rights reserved.
17
- # contact mailto:thenault@gmail.com
18
- #
19
- # This file is part of logilab-astng.
20
- #
21
- # logilab-astng is free software: you can redistribute it and/or modify it
22
- # under the terms of the GNU Lesser General Public License as published by the
23
- # Free Software Foundation, either version 2.1 of the License, or (at your
24
- # option) any later version.
25
- #
26
- # logilab-astng is distributed in the hope that it will be useful, but
27
- # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
28
- # FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
29
- # for more details.
30
- #
31
- # You should have received a copy of the GNU Lesser General Public License along
32
- # with logilab-astng. If not, see <http://www.gnu.org/licenses/>.
33
- """
34
- Module for some node classes. More nodes in scoped_nodes.py
35
-
36
-
37
- """
38
- from logilab.common.compat import chain, imap
39
-
40
- from logilab.astng import NoDefault
41
- from logilab.astng.bases import (NodeNG, BaseClass, Instance, copy_context,
42
- _infer_stmts, YES)
43
- from logilab.astng.mixins import (StmtMixIn, BlockRangeMixIn, AssignTypeMixin,
44
- ParentAssignTypeMixin, FromImportMixIn)
45
-
46
- def unpack_infer(stmt, context=None):
47
- """return an iterator on nodes inferred by the given statement if the
48
- inferred value is a list or a tuple, recurse on it to get values inferred
49
- by its content
50
- """
51
- if isinstance(stmt, (List, Tuple)):
52
- # XXX loosing context
53
- return chain(*imap(unpack_infer, stmt.elts))
54
- infered = stmt.infer(context).next()
55
- if infered is stmt:
56
- return iter( (stmt,) )
57
- return chain(*imap(unpack_infer, stmt.infer(context)))
58
-
59
-
60
-
61
- def are_exclusive(stmt1, stmt2, exceptions=None):
62
- """return true if the two given statements are mutually exclusive
63
-
64
- `exceptions` may be a list of exception names. If specified, discard If
65
- branches and check one of the statement is in an exception handler catching
66
- one of the given exceptions.
67
-
68
- algorithm :
69
- 1) index stmt1's parents
70
- 2) climb among stmt2's parents until we find a common parent
71
- 3) if the common parent is a If or TryExcept statement, look if nodes are
72
- in exclusive branches
73
- """
74
- # index stmt1's parents
75
- stmt1_parents = {}
76
- children = {}
77
- node = stmt1.parent
78
- previous = stmt1
79
- while node:
80
- stmt1_parents[node] = 1
81
- children[node] = previous
82
- previous = node
83
- node = node.parent
84
- # climb among stmt2's parents until we find a common parent
85
- node = stmt2.parent
86
- previous = stmt2
87
- while node:
88
- if stmt1_parents.has_key(node):
89
- # if the common parent is a If or TryExcept statement, look if
90
- # nodes are in exclusive branches
91
- if isinstance(node, If) and exceptions is None:
92
- if (node.locate_child(previous)[1]
93
- is not node.locate_child(children[node])[1]):
94
- return True
95
- elif isinstance(node, TryExcept):
96
- c2attr, c2node = node.locate_child(previous)
97
- c1attr, c1node = node.locate_child(children[node])
98
- if c1node is not c2node:
99
- if ((c2attr == 'body' and c1attr == 'handlers' and children[node].catch(exceptions)) or
100
- (c2attr == 'handlers' and c1attr == 'body' and previous.catch(exceptions)) or
101
- (c2attr == 'handlers' and c1attr == 'orelse') or
102
- (c2attr == 'orelse' and c1attr == 'handlers')):
103
- return True
104
- elif c2attr == 'handlers' and c1attr == 'handlers':
105
- return previous is not children[node]
106
- return False
107
- previous = node
108
- node = node.parent
109
- return False
110
-
111
-
112
-
113
-
114
-
115
- class LookupMixIn(BaseClass):
116
- """Mixin looking up a name in the right scope
117
- """
118
-
119
- def lookup(self, name):
120
- """lookup a variable name
121
-
122
- return the scope node and the list of assignments associated to the given
123
- name according to the scope where it has been found (locals, globals or
124
- builtin)
125
-
126
- The lookup is starting from self's scope. If self is not a frame itself and
127
- the name is found in the inner frame locals, statements will be filtered
128
- to remove ignorable statements according to self's location
129
- """
130
- return self.scope().scope_lookup(self, name)
131
-
132
- def ilookup(self, name, context=None):
133
- """infered lookup
134
-
135
- return an iterator on infered values of the statements returned by
136
- the lookup method
137
- """
138
- frame, stmts = self.lookup(name)
139
- context = copy_context(context)
140
- context.lookupname = name
141
- return _infer_stmts(stmts, context, frame)
142
-
143
- def _filter_stmts(self, stmts, frame, offset):
144
- """filter statements to remove ignorable statements.
145
-
146
- If self is not a frame itself and the name is found in the inner
147
- frame locals, statements will be filtered to remove ignorable
148
- statements according to self's location
149
- """
150
- # if offset == -1, my actual frame is not the inner frame but its parent
151
- #
152
- # class A(B): pass
153
- #
154
- # we need this to resolve B correctly
155
- if offset == -1:
156
- myframe = self.frame().parent.frame()
157
- else:
158
- myframe = self.frame()
159
- if not myframe is frame or self is frame:
160
- return stmts
161
- mystmt = self.statement()
162
- # line filtering if we are in the same frame
163
- #
164
- # take care node may be missing lineno information (this is the case for
165
- # nodes inserted for living objects)
166
- if myframe is frame and mystmt.fromlineno is not None:
167
- assert mystmt.fromlineno is not None, mystmt
168
- mylineno = mystmt.fromlineno + offset
169
- else:
170
- # disabling lineno filtering
171
- mylineno = 0
172
- _stmts = []
173
- _stmt_parents = []
174
- for node in stmts:
175
- stmt = node.statement()
176
- # line filtering is on and we have reached our location, break
177
- if mylineno > 0 and stmt.fromlineno > mylineno:
178
- break
179
- assert hasattr(node, 'ass_type'), (node, node.scope(),
180
- node.scope().locals)
181
- ass_type = node.ass_type()
182
-
183
- if node.has_base(self):
184
- break
185
-
186
- _stmts, done = ass_type._get_filtered_stmts(self, node, _stmts, mystmt)
187
- if done:
188
- break
189
-
190
- optional_assign = isinstance(ass_type, (For, Comprehension))
191
- if optional_assign and ass_type.parent_of(self):
192
- # we are inside a loop, loop var assigment is hidding previous
193
- # assigment
194
- _stmts = [node]
195
- _stmt_parents = [stmt.parent]
196
- continue
197
-
198
- # XXX comment various branches below!!!
199
- try:
200
- pindex = _stmt_parents.index(stmt.parent)
201
- except ValueError:
202
- pass
203
- else:
204
- # we got a parent index, this means the currently visited node
205
- # is at the same block level as a previously visited node
206
- if _stmts[pindex].ass_type().parent_of(ass_type):
207
- # both statements are not at the same block level
208
- continue
209
- # if currently visited node is following previously considered
210
- # assignement and both are not exclusive, we can drop the
211
- # previous one. For instance in the following code ::
212
- #
213
- # if a:
214
- # x = 1
215
- # else:
216
- # x = 2
217
- # print x
218
- #
219
- # we can't remove neither x = 1 nor x = 2 when looking for 'x'
220
- # of 'print x'; while in the following ::
221
- #
222
- # x = 1
223
- # x = 2
224
- # print x
225
- #
226
- # we can remove x = 1 when we see x = 2
227
- #
228
- # moreover, on loop assignment types, assignment won't
229
- # necessarily be done if the loop has no iteration, so we don't
230
- # want to clear previous assigments if any (hence the test on
231
- # optional_assign)
232
- if not (optional_assign or are_exclusive(_stmts[pindex], node)):
233
- del _stmt_parents[pindex]
234
- del _stmts[pindex]
235
- if isinstance(node, AssName):
236
- if not optional_assign and stmt.parent is mystmt.parent:
237
- _stmts = []
238
- _stmt_parents = []
239
- elif isinstance(node, DelName):
240
- _stmts = []
241
- _stmt_parents = []
242
- continue
243
- if not are_exclusive(self, node):
244
- _stmts.append(node)
245
- _stmt_parents.append(stmt.parent)
246
- return _stmts
247
-
248
- # Name classes
249
-
250
- class AssName(LookupMixIn, ParentAssignTypeMixin, NodeNG):
251
- """class representing an AssName node"""
252
-
253
-
254
- class DelName(LookupMixIn, ParentAssignTypeMixin, NodeNG):
255
- """class representing a DelName node"""
256
-
257
-
258
- class Name(LookupMixIn, NodeNG):
259
- """class representing a Name node"""
260
-
261
-
262
-
263
-
264
- ##################### node classes ########################################
265
-
266
- class Arguments(NodeNG, AssignTypeMixin):
267
- """class representing an Arguments node"""
268
- _astng_fields = ('args', 'defaults')
269
- args = None
270
- defaults = None
271
-
272
- def __init__(self, vararg=None, kwarg=None):
273
- self.vararg = vararg
274
- self.kwarg = kwarg
275
-
276
- def _infer_name(self, frame, name):
277
- if self.parent is frame:
278
- return name
279
- return None
280
-
281
- def format_args(self):
282
- """return arguments formatted as string"""
283
- result = [_format_args(self.args, self.defaults)]
284
- if self.vararg:
285
- result.append('*%s' % self.vararg)
286
- if self.kwarg:
287
- result.append('**%s' % self.kwarg)
288
- return ', '.join(result)
289
-
290
- def default_value(self, argname):
291
- """return the default value for an argument
292
-
293
- :raise `NoDefault`: if there is no default value defined
294
- """
295
- i = _find_arg(argname, self.args)[0]
296
- if i is not None:
297
- idx = i - (len(self.args) - len(self.defaults))
298
- if idx >= 0:
299
- return self.defaults[idx]
300
- raise NoDefault()
301
-
302
- def is_argument(self, name):
303
- """return True if the name is defined in arguments"""
304
- if name == self.vararg:
305
- return True
306
- if name == self.kwarg:
307
- return True
308
- return self.find_argname(name, True)[1] is not None
309
-
310
- def find_argname(self, argname, rec=False):
311
- """return index and Name node with given name"""
312
- if self.args: # self.args may be None in some cases (builtin function)
313
- return _find_arg(argname, self.args, rec)
314
- return None, None
315
-
316
-
317
- def _find_arg(argname, args, rec=False):
318
- for i, arg in enumerate(args):
319
- if isinstance(arg, Tuple):
320
- if rec:
321
- found = _find_arg(argname, arg.elts)
322
- if found[0] is not None:
323
- return found
324
- elif arg.name == argname:
325
- return i, arg
326
- return None, None
327
-
328
-
329
- def _format_args(args, defaults=None):
330
- values = []
331
- if args is None:
332
- return ''
333
- if defaults is not None:
334
- default_offset = len(args) - len(defaults)
335
- for i, arg in enumerate(args):
336
- if isinstance(arg, Tuple):
337
- values.append('(%s)' % _format_args(arg.elts))
338
- else:
339
- values.append(arg.name)
340
- if defaults is not None and i >= default_offset:
341
- values[-1] += '=' + defaults[i-default_offset].as_string()
342
- return ', '.join(values)
343
-
344
-
345
- class AssAttr(NodeNG, ParentAssignTypeMixin):
346
- """class representing an AssAttr node"""
347
- _astng_fields = ('expr',)
348
- expr = None
349
-
350
- class Assert(StmtMixIn, NodeNG):
351
- """class representing an Assert node"""
352
- _astng_fields = ('test', 'fail',)
353
- test = None
354
- fail = None
355
-
356
- class Assign(StmtMixIn, NodeNG, AssignTypeMixin):
357
- """class representing an Assign node"""
358
- _astng_fields = ('targets', 'value',)
359
- targets = None
360
- value = None
361
-
362
- class AugAssign(StmtMixIn, NodeNG, AssignTypeMixin):
363
- """class representing an AugAssign node"""
364
- _astng_fields = ('target', 'value',)
365
- target = None
366
- value = None
367
-
368
- class Backquote(NodeNG):
369
- """class representing a Backquote node"""
370
- _astng_fields = ('value',)
371
- value = None
372
-
373
- class BinOp(NodeNG):
374
- """class representing a BinOp node"""
375
- _astng_fields = ('left', 'right',)
376
- left = None
377
- right = None
378
-
379
- class BoolOp(NodeNG):
380
- """class representing a BoolOp node"""
381
- _astng_fields = ('values',)
382
- values = None
383
-
384
- class Break(StmtMixIn, NodeNG):
385
- """class representing a Break node"""
386
-
387
-
388
- class CallFunc(NodeNG):
389
- """class representing a CallFunc node"""
390
- _astng_fields = ('func', 'args', 'starargs', 'kwargs')
391
- func = None
392
- args = None
393
- starargs = None
394
- kwargs = None
395
-
396
- def __init__(self):
397
- self.starargs = None
398
- self.kwargs = None
399
-
400
- class Compare(NodeNG):
401
- """class representing a Compare node"""
402
- _astng_fields = ('left', 'ops',)
403
- left = None
404
- ops = None
405
-
406
- def get_children(self):
407
- """override get_children for tuple fields"""
408
- yield self.left
409
- for _, comparator in self.ops:
410
- yield comparator # we don't want the 'op'
411
-
412
- def last_child(self):
413
- """override last_child"""
414
- # XXX maybe if self.ops:
415
- return self.ops[-1][1]
416
- #return self.left
417
-
418
- class Comprehension(NodeNG):
419
- """class representing a Comprehension node"""
420
- _astng_fields = ('target', 'iter' ,'ifs')
421
- target = None
422
- iter = None
423
- ifs = None
424
-
425
- def ass_type(self):
426
- return self
427
-
428
- def _get_filtered_stmts(self, lookup_node, node, stmts, mystmt):
429
- """method used in filter_stmts"""
430
- if self is mystmt:
431
- if isinstance(lookup_node, (Const, Name)):
432
- return [lookup_node], True
433
-
434
- elif self.statement() is mystmt:
435
- # original node's statement is the assignment, only keeps
436
- # current node (gen exp, list comp)
437
-
438
- return [node], True
439
-
440
- return stmts, False
441
-
442
-
443
- class Const(NodeNG, Instance):
444
- """represent a Str or Num node"""
445
-
446
- def __init__(self, value=None):
447
- self.value = value
448
-
449
- def getitem(self, index, context=None):
450
- if isinstance(self.value, basestring):
451
- return self.value[index]
452
- raise TypeError('%r (value=%s)' % (self, self.value))
453
-
454
- def has_dynamic_getattr(self):
455
- return False
456
-
457
- def itered(self):
458
- if isinstance(self.value, basestring):
459
- return self.value
460
- raise TypeError()
461
-
462
- class Continue(StmtMixIn, NodeNG):
463
- """class representing a Continue node"""
464
-
465
-
466
- class Decorators(NodeNG):
467
- """class representing a Decorators node"""
468
- _astng_fields = ('nodes',)
469
- nodes = None
470
-
471
- def __init__(self, nodes=None):
472
- self.nodes = nodes
473
-
474
- def scope(self):
475
- # skip the function node to go directly to the upper level scope
476
- return self.parent.parent.scope()
477
-
478
- class DelAttr(NodeNG, ParentAssignTypeMixin):
479
- """class representing a DelAttr node"""
480
- _astng_fields = ('expr',)
481
- expr = None
482
-
483
-
484
- class Delete(StmtMixIn, NodeNG, AssignTypeMixin):
485
- """class representing a Delete node"""
486
- _astng_fields = ('targets',)
487
- targets = None
488
-
489
-
490
- class Dict(NodeNG, Instance):
491
- """class representing a Dict node"""
492
- _astng_fields = ('items',)
493
- items = None
494
-
495
- def pytype(self):
496
- return '__builtin__.dict'
497
-
498
- def get_children(self):
499
- """get children of a Dict node"""
500
- # overrides get_children
501
- for key, value in self.items:
502
- yield key
503
- yield value
504
-
505
- def last_child(self):
506
- """override last_child"""
507
- if self.items:
508
- return self.items[-1][1]
509
- return None
510
-
511
- def itered(self):
512
- return self.items[::2]
513
-
514
- def getitem(self, key, context=None):
515
- for i in xrange(0, len(self.items), 2):
516
- for inferedkey in self.items[i].infer(context):
517
- if inferedkey is YES:
518
- continue
519
- if isinstance(inferedkey, Const) and inferedkey.value == key:
520
- return self.items[i+1]
521
- raise IndexError(key)
522
-
523
-
524
- class Discard(StmtMixIn, NodeNG):
525
- """class representing a Discard node"""
526
- _astng_fields = ('value',)
527
- value = None
528
-
529
-
530
- class Ellipsis(NodeNG):
531
- """class representing an Ellipsis node"""
532
-
533
-
534
- class EmptyNode(NodeNG):
535
- """class representing an EmptyNode node"""
536
-
537
-
538
- class ExceptHandler(StmtMixIn, NodeNG, AssignTypeMixin):
539
- """class representing an ExceptHandler node"""
540
- _astng_fields = ('type', 'name', 'body',)
541
- type = None
542
- name = None
543
- body = None
544
-
545
- def _blockstart_toline(self):
546
- if self.name:
547
- return self.name.tolineno
548
- elif self.type:
549
- return self.type.tolineno
550
- else:
551
- return self.lineno
552
-
553
- def set_line_info(self, lastchild):
554
- self.fromlineno = self.lineno
555
- self.tolineno = lastchild.tolineno
556
- self.blockstart_tolineno = self._blockstart_toline()
557
-
558
- def catch(self, exceptions):
559
- if self.type is None or exceptions is None:
560
- return True
561
- for node in self.type.nodes_of_class(Name):
562
- if node.name in exceptions:
563
- return True
564
-
565
-
566
- class Exec(StmtMixIn, NodeNG):
567
- """class representing an Exec node"""
568
- _astng_fields = ('expr', 'globals', 'locals',)
569
- expr = None
570
- globals = None
571
- locals = None
572
-
573
-
574
- class ExtSlice(NodeNG):
575
- """class representing an ExtSlice node"""
576
- _astng_fields = ('dims',)
577
- dims = None
578
-
579
-
580
- class For(BlockRangeMixIn, StmtMixIn, AssignTypeMixin, NodeNG):
581
- """class representing a For node"""
582
- _astng_fields = ('target', 'iter', 'body', 'orelse',)
583
- target = None
584
- iter = None
585
- body = None
586
- orelse = None
587
-
588
- def _blockstart_toline(self):
589
- return self.iter.tolineno
590
-
591
-
592
- class From(FromImportMixIn, StmtMixIn, NodeNG):
593
- """class representing a From node"""
594
-
595
- def __init__(self, fromname, names, level=0):
596
- self.modname = fromname
597
- self.names = names
598
- self.level = level
599
-
600
- class Getattr(NodeNG):
601
- """class representing a Getattr node"""
602
- _astng_fields = ('expr',)
603
- expr = None
604
-
605
-
606
- class Global(StmtMixIn, NodeNG):
607
- """class representing a Global node"""
608
-
609
- def __init__(self, names):
610
- self.names = names
611
-
612
- def _infer_name(self, frame, name):
613
- return name
614
-
615
-
616
- class If(BlockRangeMixIn, StmtMixIn, NodeNG):
617
- """class representing an If node"""
618
- _astng_fields = ('test', 'body', 'orelse')
619
- test = None
620
- body = None
621
- orelse = None
622
-
623
- def _blockstart_toline(self):
624
- return self.test.tolineno
625
-
626
- def block_range(self, lineno):
627
- """handle block line numbers range for if statements"""
628
- if lineno == self.body[0].fromlineno:
629
- return lineno, lineno
630
- if lineno <= self.body[-1].tolineno:
631
- return lineno, self.body[-1].tolineno
632
- return self._elsed_block_range(lineno, self.orelse,
633
- self.body[0].fromlineno - 1)
634
-
635
-
636
- class IfExp(NodeNG):
637
- """class representing an IfExp node"""
638
- _astng_fields = ('test', 'body', 'orelse')
639
- test = None
640
- body = None
641
- orelse = None
642
-
643
-
644
- class Import(FromImportMixIn, StmtMixIn, NodeNG):
645
- """class representing an Import node"""
646
-
647
-
648
- class Index(NodeNG):
649
- """class representing an Index node"""
650
- _astng_fields = ('value',)
651
- value = None
652
-
653
-
654
- class Keyword(NodeNG):
655
- """class representing a Keyword node"""
656
- _astng_fields = ('value',)
657
- value = None
658
-
659
-
660
- class List(NodeNG, Instance, ParentAssignTypeMixin):
661
- """class representing a List node"""
662
- _astng_fields = ('elts',)
663
- elts = None
664
-
665
- def pytype(self):
666
- return '__builtin__.list'
667
-
668
- def getitem(self, index, context=None):
669
- return self.elts[index]
670
-
671
- def itered(self):
672
- return self.elts
673
-
674
-
675
-
676
- class ListComp(NodeNG):
677
- """class representing a ListComp node"""
678
- _astng_fields = ('elt', 'generators')
679
- elt = None
680
- generators = None
681
-
682
-
683
- class Pass(StmtMixIn, NodeNG):
684
- """class representing a Pass node"""
685
-
686
-
687
- class Print(StmtMixIn, NodeNG):
688
- """class representing a Print node"""
689
- _astng_fields = ('dest', 'values',)
690
- dest = None
691
- values = None
692
-
693
-
694
- class Raise(StmtMixIn, NodeNG):
695
- """class representing a Raise node"""
696
- _astng_fields = ('type', 'inst', 'tback')
697
- type = None
698
- inst = None
699
- tback = None
700
-
701
-
702
- class Return(StmtMixIn, NodeNG):
703
- """class representing a Return node"""
704
- _astng_fields = ('value',)
705
- value = None
706
-
707
-
708
- class Slice(NodeNG):
709
- """class representing a Slice node"""
710
- _astng_fields = ('lower', 'upper', 'step')
711
- lower = None
712
- upper = None
713
- step = None
714
-
715
-
716
- class Subscript(NodeNG):
717
- """class representing a Subscript node"""
718
- _astng_fields = ('value', 'slice')
719
- value = None
720
- slice = None
721
-
722
-
723
- class TryExcept(BlockRangeMixIn, StmtMixIn, NodeNG):
724
- """class representing a TryExcept node"""
725
- _astng_fields = ('body', 'handlers', 'orelse',)
726
- body = None
727
- handlers = None
728
- orelse = None
729
-
730
- def _infer_name(self, frame, name):
731
- return name
732
-
733
- def _blockstart_toline(self):
734
- return self.lineno
735
-
736
- def block_range(self, lineno):
737
- """handle block line numbers range for try/except statements"""
738
- last = None
739
- for exhandler in self.handlers:
740
- if exhandler.type and lineno == exhandler.type.fromlineno:
741
- return lineno, lineno
742
- if exhandler.body[0].fromlineno <= lineno <= exhandler.body[-1].tolineno:
743
- return lineno, exhandler.body[-1].tolineno
744
- if last is None:
745
- last = exhandler.body[0].fromlineno - 1
746
- return self._elsed_block_range(lineno, self.orelse, last)
747
-
748
-
749
- class TryFinally(BlockRangeMixIn, StmtMixIn, NodeNG):
750
- """class representing a TryFinally node"""
751
- _astng_fields = ('body', 'finalbody',)
752
- body = None
753
- finalbody = None
754
-
755
- def _blockstart_toline(self):
756
- return self.lineno
757
-
758
- def block_range(self, lineno):
759
- """handle block line numbers range for try/finally statements"""
760
- child = self.body[0]
761
- # py2.5 try: except: finally:
762
- if (isinstance(child, TryExcept) and child.fromlineno == self.fromlineno
763
- and lineno > self.fromlineno and lineno <= child.tolineno):
764
- return child.block_range(lineno)
765
- return self._elsed_block_range(lineno, self.finalbody)
766
-
767
-
768
- class Tuple(NodeNG, Instance, ParentAssignTypeMixin):
769
- """class representing a Tuple node"""
770
- _astng_fields = ('elts',)
771
- elts = None
772
-
773
- def pytype(self):
774
- return '__builtin__.tuple'
775
-
776
- def getitem(self, index, context=None):
777
- return self.elts[index]
778
-
779
- def itered(self):
780
- return self.elts
781
-
782
-
783
- class UnaryOp(NodeNG):
784
- """class representing an UnaryOp node"""
785
- _astng_fields = ('operand',)
786
- operand = None
787
-
788
-
789
- class While(BlockRangeMixIn, StmtMixIn, NodeNG):
790
- """class representing a While node"""
791
- _astng_fields = ('test', 'body', 'orelse',)
792
- test = None
793
- body = None
794
- orelse = None
795
-
796
- def _blockstart_toline(self):
797
- return self.test.tolineno
798
-
799
- def block_range(self, lineno):
800
- """handle block line numbers range for for and while statements"""
801
- return self. _elsed_block_range(lineno, self.orelse)
802
-
803
- class With(BlockRangeMixIn, StmtMixIn, AssignTypeMixin, NodeNG):
804
- """class representing a With node"""
805
- _astng_fields = ('expr', 'vars', 'body')
806
- expr = None
807
- vars = None
808
- body = None
809
-
810
- def _blockstart_toline(self):
811
- if self.vars:
812
- return self.vars.tolineno
813
- else:
814
- return self.expr.tolineno
815
-
816
-
817
- class Yield(NodeNG):
818
- """class representing a Yield node"""
819
- _astng_fields = ('value',)
820
- value = None
821
-
822
- # constants ##############################################################
823
-
824
- CONST_CLS = {
825
- list: List,
826
- tuple: Tuple,
827
- dict: Dict,
828
- }
829
-
830
- def const_factory(value):
831
- """return an astng node for a python value"""
832
- try:
833
- # if value is of class list, tuple, dict use specific class, not Const
834
- cls = CONST_CLS[value.__class__]
835
- node = cls()
836
- if isinstance(node, Dict):
837
- node.items = ()
838
- else:
839
- node.elts = ()
840
- except KeyError:
841
- # why was value in (None, False, True) not OK?
842
- assert isinstance(value, (int, long, complex, float, basestring)) or value in (None, False, True)
843
- node = Const()
844
- node.value = value
845
- return node
846
-
847
-
848
-