bee_python 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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,344 +0,0 @@
1
- # Copyright (c) 2003-2006 LOGILAB S.A. (Paris, FRANCE).
2
- # http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
- #
4
- # This program is free software; you can redistribute it and/or modify it under
5
- # the terms of the GNU General Public License as published by the Free Software
6
- # Foundation; either version 2 of the License, or (at your option) any later
7
- # version.
8
- #
9
- # This program is distributed in the hope that it will be useful, but WITHOUT
10
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
- # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
- #
13
- # You should have received a copy of the GNU General Public License along with
14
- # this program; if not, write to the Free Software Foundation, Inc.,
15
- # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16
- """check for signs of poor design
17
-
18
-
19
- see http://intranet.logilab.fr/jpl/view?rql=Any%20X%20where%20X%20eid%201243
20
- FIXME: missing 13, 15, 16
21
- """
22
-
23
- from logilab.astng import Function, If, InferenceError
24
-
25
- from pylint.interfaces import IASTNGChecker
26
- from pylint.checkers import BaseChecker
27
-
28
- import re
29
-
30
- # regexp for ignored argument name
31
- IGNORED_ARGUMENT_NAMES = re.compile('_.*')
32
-
33
- def class_is_abstract(klass):
34
- """return true if the given class node should be considered as an abstract
35
- class
36
- """
37
- for attr in klass.values():
38
- if isinstance(attr, Function):
39
- if attr.is_abstract(pass_is_abstract=False):
40
- return True
41
- return False
42
-
43
-
44
- MSGS = {
45
- 'R0901': ('Too many ancestors (%s/%s)',
46
- 'Used when class has too many parent classes, try to reduce \
47
- this to get a more simple (and so easier to use) class.'),
48
- 'R0902': ('Too many instance attributes (%s/%s)',
49
- 'Used when class has too many instance attributes, try to reduce \
50
- this to get a more simple (and so easier to use) class.'),
51
- 'R0903': ('Too few public methods (%s/%s)',
52
- 'Used when class has too few public methods, so be sure it\'s \
53
- really worth it.'),
54
- 'R0904': ('Too many public methods (%s/%s)',
55
- 'Used when class has too many public methods, try to reduce \
56
- this to get a more simple (and so easier to use) class.'),
57
-
58
- 'R0911': ('Too many return statements (%s/%s)',
59
- 'Used when a function or method has too many return statement, \
60
- making it hard to follow.'),
61
- 'R0912': ('Too many branches (%s/%s)',
62
- 'Used when a function or method has too many branches, \
63
- making it hard to follow.'),
64
- 'R0913': ('Too many arguments (%s/%s)',
65
- 'Used when a function or method takes too many arguments.'),
66
- 'R0914': ('Too many local variables (%s/%s)',
67
- 'Used when a function or method has too many local variables.'),
68
- 'R0915': ('Too many statements (%s/%s)',
69
- 'Used when a function or method has too many statements. You \
70
- should then split it in smaller functions / methods.'),
71
-
72
- 'R0921': ('Abstract class not referenced',
73
- 'Used when an abstract class is not used as ancestor anywhere.'),
74
- 'R0922': ('Abstract class is only referenced %s times',
75
- 'Used when an abstract class is used less than X times as \
76
- ancestor.'),
77
- 'R0923': ('Interface not implemented',
78
- 'Used when an interface class is not implemented anywhere.'),
79
- }
80
-
81
-
82
- class MisdesignChecker(BaseChecker):
83
- """checks for sign of poor/misdesign:
84
- * number of methods, attributes, local variables...
85
- * size, complexity of functions, methods
86
- """
87
-
88
- __implements__ = (IASTNGChecker,)
89
-
90
- # configuration section name
91
- name = 'design'
92
- # messages
93
- msgs = MSGS
94
- priority = -2
95
- # configuration options
96
- options = (('max-args',
97
- {'default' : 5, 'type' : 'int', 'metavar' : '<int>',
98
- 'help': 'Maximum number of arguments for function / method'}
99
- ),
100
- ('ignored-argument-names',
101
- {'default' : IGNORED_ARGUMENT_NAMES,
102
- 'type' :'regexp', 'metavar' : '<regexp>',
103
- 'help' : 'Argument names that match this expression will be '
104
- 'ignored. Default to name with leading underscore'}
105
- ),
106
- ('max-locals',
107
- {'default' : 15, 'type' : 'int', 'metavar' : '<int>',
108
- 'help': 'Maximum number of locals for function / method body'}
109
- ),
110
- ('max-returns',
111
- {'default' : 6, 'type' : 'int', 'metavar' : '<int>',
112
- 'help': 'Maximum number of return / yield for function / '
113
- 'method body'}
114
- ),
115
- ('max-branchs',
116
- {'default' : 12, 'type' : 'int', 'metavar' : '<int>',
117
- 'help': 'Maximum number of branch for function / method body'}
118
- ),
119
- ('max-statements',
120
- {'default' : 50, 'type' : 'int', 'metavar' : '<int>',
121
- 'help': 'Maximum number of statements in function / method '
122
- 'body'}
123
- ),
124
- ('max-parents',
125
- {'default' : 7,
126
- 'type' : 'int',
127
- 'metavar' : '<num>',
128
- 'help' : 'Maximum number of parents for a class (see R0901).'}
129
- ),
130
- ('max-attributes',
131
- {'default' : 7,
132
- 'type' : 'int',
133
- 'metavar' : '<num>',
134
- 'help' : 'Maximum number of attributes for a class \
135
- (see R0902).'}
136
- ),
137
- ('min-public-methods',
138
- {'default' : 2,
139
- 'type' : 'int',
140
- 'metavar' : '<num>',
141
- 'help' : 'Minimum number of public methods for a class \
142
- (see R0903).'}
143
- ),
144
- ('max-public-methods',
145
- {'default' : 20,
146
- 'type' : 'int',
147
- 'metavar' : '<num>',
148
- 'help' : 'Maximum number of public methods for a class \
149
- (see R0904).'}
150
- ),
151
- )
152
-
153
- def __init__(self, linter=None):
154
- BaseChecker.__init__(self, linter)
155
- self.stats = None
156
- self._returns = None
157
- self._branchs = None
158
- self._used_abstracts = None
159
- self._used_ifaces = None
160
- self._abstracts = None
161
- self._ifaces = None
162
- self._stmts = 0
163
-
164
- def open(self):
165
- """initialize visit variables"""
166
- self.stats = self.linter.add_stats()
167
- self._returns = []
168
- self._branchs = []
169
- self._used_abstracts = {}
170
- self._used_ifaces = {}
171
- self._abstracts = []
172
- self._ifaces = []
173
-
174
- def close(self):
175
- """check that abstract/interface classes are used"""
176
- for abstract in self._abstracts:
177
- if not abstract in self._used_abstracts:
178
- self.add_message('R0921', node=abstract)
179
- elif self._used_abstracts[abstract] < 2:
180
- self.add_message('R0922', node=abstract,
181
- args=self._used_abstracts[abstract])
182
- for iface in self._ifaces:
183
- if not iface in self._used_ifaces:
184
- self.add_message('R0923', node=iface)
185
-
186
- def visit_class(self, node):
187
- """check size of inheritance hierarchy and number of instance attributes
188
- """
189
- self._inc_branch()
190
- # Is the total inheritance hierarchy is 7 or less?
191
- nb_parents = len(list(node.ancestors()))
192
- if nb_parents > self.config.max_parents:
193
- self.add_message('R0901', node=node,
194
- args=(nb_parents, self.config.max_parents))
195
- # Does the class contain less than 20 attributes for
196
- # non-GUI classes (40 for GUI)?
197
- # FIXME detect gui classes
198
- if len(node.instance_attrs) > self.config.max_attributes:
199
- self.add_message('R0902', node=node,
200
- args=(len(node.instance_attrs),
201
- self.config.max_attributes))
202
- # update abstract / interface classes structures
203
- if class_is_abstract(node):
204
- self._abstracts.append(node)
205
- elif node.type == 'interface' and node.name != 'Interface':
206
- self._ifaces.append(node)
207
- for parent in node.ancestors(False):
208
- if parent.name == 'Interface':
209
- continue
210
- self._used_ifaces[parent] = 1
211
- try:
212
- for iface in node.interfaces():
213
- self._used_ifaces[iface] = 1
214
- except InferenceError:
215
- # XXX log ?
216
- pass
217
- for parent in node.ancestors():
218
- try:
219
- self._used_abstracts[parent] += 1
220
- except KeyError:
221
- self._used_abstracts[parent] = 1
222
-
223
- def leave_class(self, node):
224
- """check number of public methods"""
225
- nb_public_methods = 0
226
- for method in node.methods():
227
- if not method.name.startswith('_'):
228
- nb_public_methods += 1
229
- # Does the class contain less than 20 public methods ?
230
- if nb_public_methods > self.config.max_public_methods:
231
- self.add_message('R0904', node=node,
232
- args=(nb_public_methods,
233
- self.config.max_public_methods))
234
- # stop here for exception, metaclass and interface classes
235
- if node.type != 'class':
236
- return
237
- # Does the class contain more than 5 public methods ?
238
- if nb_public_methods < self.config.min_public_methods:
239
- self.add_message('R0903', node=node,
240
- args=(nb_public_methods,
241
- self.config.min_public_methods))
242
-
243
-
244
- def visit_function(self, node):
245
- """check function name, docstring, arguments, redefinition,
246
- variable names, max locals
247
- """
248
- self._inc_branch()
249
- # init branch and returns counters
250
- self._returns.append(0)
251
- self._branchs.append(0)
252
- # check number of arguments
253
- args = node.args.args
254
- if args is not None:
255
- ignored_args_num = len(
256
- [arg for arg in args
257
- if self.config.ignored_argument_names.match(arg.name)])
258
- argnum = len(args) - ignored_args_num
259
- if argnum > self.config.max_args:
260
- self.add_message('R0913', node=node,
261
- args=(len(args), self.config.max_args))
262
- else:
263
- ignored_args_num = 0
264
- # check number of local variables
265
- locnum = len(node.locals) - ignored_args_num
266
- if locnum > self.config.max_locals:
267
- self.add_message('R0914', node=node,
268
- args=(locnum, self.config.max_locals))
269
- # init statements counter
270
- self._stmts = 1
271
-
272
- def leave_function(self, node):
273
- """most of the work is done here on close:
274
- checks for max returns, branch, return in __init__
275
- """
276
- returns = self._returns.pop()
277
- if returns > self.config.max_returns:
278
- self.add_message('R0911', node=node,
279
- args=(returns, self.config.max_returns))
280
- branchs = self._branchs.pop()
281
- if branchs > self.config.max_branchs:
282
- self.add_message('R0912', node=node,
283
- args=(branchs, self.config.max_branchs))
284
- # check number of statements
285
- if self._stmts > self.config.max_statements:
286
- self.add_message('R0915', node=node,
287
- args=(self._stmts, self.config.max_statements))
288
-
289
- def visit_return(self, _):
290
- """count number of returns"""
291
- if not self._returns:
292
- return # return outside function, reported by the base checker
293
- self._returns[-1] += 1
294
-
295
- def visit_default(self, node):
296
- """default visit method -> increments the statements counter if
297
- necessary
298
- """
299
- if node.is_statement:
300
- self._stmts += 1
301
-
302
- def visit_tryexcept(self, node):
303
- """increments the branchs counter"""
304
- branchs = len(node.handlers)
305
- if node.orelse:
306
- branchs += 1
307
- self._inc_branch(branchs)
308
- self._stmts += branchs
309
-
310
- def visit_tryfinally(self, _):
311
- """increments the branchs counter"""
312
- self._inc_branch(2)
313
- self._stmts += 2
314
-
315
- def visit_if(self, node):
316
- """increments the branchs counter"""
317
- branchs = 1
318
- # don't double count If nodes coming from some 'elif'
319
- if node.orelse and (len(node.orelse)>1 or
320
- not isinstance(node.orelse[0], If)):
321
- branchs += 1
322
- self._inc_branch(branchs)
323
- self._stmts += branchs
324
-
325
- def visit_while(self, node):
326
- """increments the branchs counter"""
327
- branchs = 1
328
- if node.orelse:
329
- branchs += 1
330
- self._inc_branch(branchs)
331
-
332
- visit_for = visit_while
333
-
334
- def _inc_branch(self, branchsnum=1):
335
- """increments the branchs counter"""
336
- branchs = self._branchs
337
- for i in xrange(len(branchs)):
338
- branchs[i] += branchsnum
339
-
340
- # FIXME: make a nice report...
341
-
342
- def register(linter):
343
- """required method to auto register this checker """
344
- linter.register_checker(MisdesignChecker(linter))
@@ -1,183 +0,0 @@
1
- # Copyright (c) 2003-2007 LOGILAB S.A. (Paris, FRANCE).
2
- # http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
- # This program is free software; you can redistribute it and/or modify it under
4
- # the terms of the GNU General Public License as published by the Free Software
5
- # Foundation; either version 2 of the License, or (at your option) any later
6
- # version.
7
- #
8
- # This program is distributed in the hope that it will be useful, but WITHOUT
9
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10
- # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
11
- #
12
- # You should have received a copy of the GNU General Public License along with
13
- # this program; if not, write to the Free Software Foundation, Inc.,
14
- # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15
- """exceptions handling (raising, catching, exceptions classes) checker
16
- """
17
- import sys
18
-
19
- from logilab.common.compat import enumerate
20
- from logilab import astng
21
- from logilab.astng import YES, Instance, unpack_infer
22
-
23
- from pylint.checkers import BaseChecker
24
- from pylint.checkers.utils import is_empty, is_raising
25
- from pylint.interfaces import IASTNGChecker
26
-
27
- MSGS = {
28
- 'E0701': (
29
- 'Bad except clauses order (%s)',
30
- 'Used when except clauses are not in the correct order (from the \
31
- more specific to the more generic). If you don\'t fix the order, \
32
- some exceptions may not be catched by the most specific handler.'),
33
- 'E0702': ('Raising %s while only classes, instances or string are allowed',
34
- 'Used when something which is neither a class, an instance or a \
35
- string is raised (i.e. a `TypeError` will be raised).'),
36
- 'E0711': ('NotImplemented raised - should raise NotImplementedError',
37
- 'Used when NotImplemented is raised instead of \
38
- NotImplementedError'),
39
-
40
- 'W0701': ('Raising a string exception',
41
- 'Used when a string exception is raised.'),
42
- 'W0702': ('No exception type(s) specified',
43
- 'Used when an except clause doesn\'t specify exceptions type to \
44
- catch.'),
45
- 'W0703': ('Catch "Exception"',
46
- 'Used when an except catches Exception instances.'),
47
- 'W0704': ('Except doesn\'t do anything',
48
- 'Used when an except clause does nothing but "pass" and there is\
49
- no "else" clause.'),
50
- 'W0710': ('Exception doesn\'t inherit from standard "Exception" class',
51
- 'Used when a custom exception class is raised but doesn\'t \
52
- inherit from the builtin "Exception" class.'),
53
- }
54
- if sys.version_info < (2, 5):
55
- MSGS['E0710'] = ('Raising a new style class',
56
- 'Used when a new style class is raised since it\'s not \
57
- possible with python < 2.5.')
58
- else:
59
- MSGS['E0710'] = ('Raising a new style class which doesn\'t inherit from \
60
- BaseException',
61
- 'Used when a new style class which doesn\'t inherit from \
62
- BaseException raised since it\'s not possible with \
63
- python < 2.5.')
64
-
65
-
66
- class ExceptionsChecker(BaseChecker):
67
- """checks for
68
- * excepts without exception filter
69
- * type of raise argument : string, Exceptions, other values
70
- """
71
-
72
- __implements__ = IASTNGChecker
73
-
74
- name = 'exceptions'
75
- msgs = MSGS
76
- priority = -4
77
- options = ()
78
-
79
- def visit_raise(self, node):
80
- """visit raise possibly inferring value"""
81
- # ignore empty raise
82
- if node.type is None:
83
- return
84
- expr = node.type
85
- if self._check_raise_value(node, expr):
86
- return
87
- else:
88
- try:
89
- value = unpack_infer(expr).next()
90
- except astng.InferenceError:
91
- return
92
- self._check_raise_value(node, value)
93
-
94
- def _check_raise_value(self, node, expr):
95
- """check for bad values, string exception and class inheritance
96
- """
97
- value_found = True
98
- if isinstance(expr, astng.Const):
99
- value = expr.value
100
- if isinstance(value, str):
101
- self.add_message('W0701', node=node)
102
- else:
103
- self.add_message('E0702', node=node,
104
- args=value.__class__.__name__)
105
- elif (isinstance(expr, astng.Name) and \
106
- expr.name in ('None', 'True', 'False')) or \
107
- isinstance(expr, (astng.List, astng.Dict, astng.Tuple,
108
- astng.Module, astng.Function)):
109
- self.add_message('E0702', node=node, args=expr.name)
110
- elif isinstance(expr, astng.Name) and expr.name == 'NotImplemented':
111
- self.add_message('E0711', node=node)
112
- elif isinstance(expr, astng.BinOp) and expr.op == '%':
113
- self.add_message('W0701', node=node)
114
- elif isinstance(expr, (Instance, astng.Class)):
115
- if isinstance(expr, Instance):
116
- expr = expr._proxied
117
- if (isinstance(expr, astng.Class) and
118
- not inherit_from_std_ex(expr) and
119
- expr.root().name != '__builtin__'):
120
- if expr.newstyle:
121
- self.add_message('E0710', node=node)
122
- else:
123
- self.add_message('W0710', node=node)
124
- else:
125
- value_found = False
126
- else:
127
- value_found = False
128
- return value_found
129
-
130
-
131
- def visit_tryexcept(self, node):
132
- """check for empty except"""
133
- exceptions_classes = []
134
- nb_handlers = len(node.handlers)
135
- for index, handler in enumerate(node.handlers):
136
- # single except doing nothing but "pass" without else clause
137
- if nb_handlers == 1 and is_empty(handler.body) and not node.orelse:
138
- self.add_message('W0704', node=handler.type or handler.body[0])
139
- if handler.type is None:
140
- if nb_handlers == 1 and not is_raising(handler.body):
141
- self.add_message('W0702', node=handler.body[0])
142
- # check if a "except:" is followed by some other
143
- # except
144
- elif index < (nb_handlers - 1):
145
- msg = 'empty except clause should always appears last'
146
- self.add_message('E0701', node=node, args=msg)
147
- else:
148
- try:
149
- excs = list(unpack_infer(handler.type))
150
- except astng.InferenceError:
151
- continue
152
- for exc in excs:
153
- # XXX skip other non class nodes
154
- if exc is YES or not isinstance(exc, astng.Class):
155
- continue
156
- exc_ancestors = [anc for anc in exc.ancestors()
157
- if isinstance(anc, astng.Class)]
158
- for previous_exc in exceptions_classes:
159
- if previous_exc in exc_ancestors:
160
- msg = '%s is an ancestor class of %s' % (
161
- previous_exc.name, exc.name)
162
- self.add_message('E0701', node=handler.type, args=msg)
163
- if (exc.name == 'Exception'
164
- and exc.root().name == 'exceptions'
165
- and nb_handlers == 1 and not is_raising(handler.body)):
166
- self.add_message('W0703', node=handler.type)
167
- exceptions_classes += excs
168
-
169
- def inherit_from_std_ex(node):
170
- """return true if the given class node is subclass of
171
- exceptions.Exception
172
- """
173
- if node.name in ('Exception', 'BaseException') \
174
- and node.root().name == 'exceptions':
175
- return True
176
- for parent in node.ancestors(recurs=False):
177
- if inherit_from_std_ex(parent):
178
- return True
179
- return False
180
-
181
- def register(linter):
182
- """required method to auto register this checker"""
183
- linter.register_checker(ExceptionsChecker(linter))