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,372 +0,0 @@
1
- # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2
- # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
- #
4
- # This file is part of logilab-common.
5
- #
6
- # logilab-common is free software: you can redistribute it and/or modify it under
7
- # the terms of the GNU Lesser General Public License as published by the Free
8
- # Software Foundation, either version 2.1 of the License, or (at your option) any
9
- # later version.
10
- #
11
- # logilab-common is distributed in the hope that it will be useful, but WITHOUT
12
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
- # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
- # details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License along
17
- # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
18
- """Base class to represent a tree structure.
19
-
20
-
21
-
22
-
23
- """
24
- __docformat__ = "restructuredtext en"
25
-
26
- import sys
27
-
28
- from logilab.common import flatten
29
- from logilab.common.visitor import VisitedMixIn, FilteredIterator, no_filter
30
-
31
- ## Exceptions #################################################################
32
-
33
- class NodeNotFound(Exception):
34
- """raised when a node has not been found"""
35
-
36
- EX_SIBLING_NOT_FOUND = "No such sibling as '%s'"
37
- EX_CHILD_NOT_FOUND = "No such child as '%s'"
38
- EX_NODE_NOT_FOUND = "No such node as '%s'"
39
-
40
-
41
- # Base node ###################################################################
42
-
43
- class Node(object):
44
- """a basic tree node, characterized by an id"""
45
-
46
- def __init__(self, nid=None) :
47
- self.id = nid
48
- # navigation
49
- self.parent = None
50
- self.children = []
51
-
52
- def __iter__(self):
53
- return iter(self.children)
54
-
55
- def __str__(self, indent=0):
56
- s = ['%s%s %s' % (' '*indent, self.__class__.__name__, self.id)]
57
- indent += 2
58
- for child in self.children:
59
- try:
60
- s.append(child.__str__(indent))
61
- except TypeError:
62
- s.append(child.__str__())
63
- return '\n'.join(s)
64
-
65
- def is_leaf(self):
66
- return not self.children
67
-
68
- def append(self, child):
69
- """add a node to children"""
70
- self.children.append(child)
71
- child.parent = self
72
-
73
- def remove(self, child):
74
- """remove a child node"""
75
- self.children.remove(child)
76
- child.parent = None
77
-
78
- def insert(self, index, child):
79
- """insert a child node"""
80
- self.children.insert(index, child)
81
- child.parent = self
82
-
83
- def replace(self, old_child, new_child):
84
- """replace a child node with another"""
85
- i = self.children.index(old_child)
86
- self.children.pop(i)
87
- self.children.insert(i, new_child)
88
- new_child.parent = self
89
-
90
- def get_sibling(self, nid):
91
- """return the sibling node that has given id"""
92
- try:
93
- return self.parent.get_child_by_id(nid)
94
- except NodeNotFound :
95
- raise NodeNotFound(EX_SIBLING_NOT_FOUND % nid)
96
-
97
- def next_sibling(self):
98
- """
99
- return the next sibling for this node if any
100
- """
101
- parent = self.parent
102
- if parent is None:
103
- # root node has no sibling
104
- return None
105
- index = parent.children.index(self)
106
- try:
107
- return parent.children[index+1]
108
- except IndexError:
109
- return None
110
-
111
- def previous_sibling(self):
112
- """
113
- return the previous sibling for this node if any
114
- """
115
- parent = self.parent
116
- if parent is None:
117
- # root node has no sibling
118
- return None
119
- index = parent.children.index(self)
120
- if index > 0:
121
- return parent.children[index-1]
122
- return None
123
-
124
- def get_node_by_id(self, nid):
125
- """
126
- return node in whole hierarchy that has given id
127
- """
128
- root = self.root()
129
- try:
130
- return root.get_child_by_id(nid, 1)
131
- except NodeNotFound :
132
- raise NodeNotFound(EX_NODE_NOT_FOUND % nid)
133
-
134
- def get_child_by_id(self, nid, recurse=None):
135
- """
136
- return child of given id
137
- """
138
- if self.id == nid:
139
- return self
140
- for c in self.children :
141
- if recurse:
142
- try:
143
- return c.get_child_by_id(nid, 1)
144
- except NodeNotFound :
145
- continue
146
- if c.id == nid :
147
- return c
148
- raise NodeNotFound(EX_CHILD_NOT_FOUND % nid)
149
-
150
- def get_child_by_path(self, path):
151
- """
152
- return child of given path (path is a list of ids)
153
- """
154
- if len(path) > 0 and path[0] == self.id:
155
- if len(path) == 1 :
156
- return self
157
- else :
158
- for c in self.children :
159
- try:
160
- return c.get_child_by_path(path[1:])
161
- except NodeNotFound :
162
- pass
163
- raise NodeNotFound(EX_CHILD_NOT_FOUND % path)
164
-
165
- def depth(self):
166
- """
167
- return depth of this node in the tree
168
- """
169
- if self.parent is not None:
170
- return 1 + self.parent.depth()
171
- else :
172
- return 0
173
-
174
- def depth_down(self):
175
- """
176
- return depth of the tree from this node
177
- """
178
- if self.children:
179
- return 1 + max([c.depth_down() for c in self.children])
180
- return 1
181
-
182
- def width(self):
183
- """
184
- return the width of the tree from this node
185
- """
186
- return len(self.leaves())
187
-
188
- def root(self):
189
- """
190
- return the root node of the tree
191
- """
192
- if self.parent is not None:
193
- return self.parent.root()
194
- return self
195
-
196
- def leaves(self):
197
- """
198
- return a list with all the leaves nodes descendant from this node
199
- """
200
- leaves = []
201
- if self.children:
202
- for child in self.children:
203
- leaves += child.leaves()
204
- return leaves
205
- else:
206
- return [self]
207
-
208
- def __iter__(self):
209
- return iter(self.children)
210
-
211
- def flatten(self, _list=None):
212
- """
213
- return a list with all the nodes descendant from this node
214
- """
215
- if _list is None:
216
- _list = []
217
- _list.append(self)
218
- for c in self.children:
219
- c.flatten(_list)
220
- return _list
221
-
222
- def lineage(self):
223
- """
224
- return list of parents up to root node
225
- """
226
- lst = [self]
227
- if self.parent is not None:
228
- lst.extend(self.parent.lineage())
229
- return lst
230
-
231
- class VNode(Node, VisitedMixIn):
232
- """a visitable node
233
- """
234
- pass
235
-
236
-
237
- class BinaryNode(VNode):
238
- """a binary node (i.e. only two children
239
- """
240
- def __init__(self, lhs=None, rhs=None) :
241
- VNode.__init__(self)
242
- if lhs is not None or rhs is not None:
243
- assert lhs and rhs
244
- self.append(lhs)
245
- self.append(rhs)
246
-
247
- def remove(self, child):
248
- """remove the child and replace this node with the other child
249
- """
250
- self.children.remove(child)
251
- self.parent.replace(self, self.children[0])
252
-
253
- def get_parts(self):
254
- """
255
- return the left hand side and the right hand side of this node
256
- """
257
- return self.children[0], self.children[1]
258
-
259
-
260
-
261
- if sys.version_info[0:2] >= (2, 2):
262
- list_class = list
263
- else:
264
- from UserList import UserList
265
- list_class = UserList
266
-
267
- class ListNode(VNode, list_class):
268
- """Used to manipulate Nodes as Lists
269
- """
270
- def __init__(self):
271
- list_class.__init__(self)
272
- VNode.__init__(self)
273
- self.children = self
274
-
275
- def __str__(self, indent=0):
276
- return '%s%s %s' % (indent*' ', self.__class__.__name__,
277
- ', '.join([str(v) for v in self]))
278
-
279
- def append(self, child):
280
- """add a node to children"""
281
- list_class.append(self, child)
282
- child.parent = self
283
-
284
- def insert(self, index, child):
285
- """add a node to children"""
286
- list_class.insert(self, index, child)
287
- child.parent = self
288
-
289
- def remove(self, child):
290
- """add a node to children"""
291
- list_class.remove(self, child)
292
- child.parent = None
293
-
294
- def pop(self, index):
295
- """add a node to children"""
296
- child = list_class.pop(self, index)
297
- child.parent = None
298
-
299
- def __iter__(self):
300
- return list_class.__iter__(self)
301
-
302
- # construct list from tree ####################################################
303
-
304
- def post_order_list(node, filter_func=no_filter):
305
- """
306
- create a list with tree nodes for which the <filter> function returned true
307
- in a post order fashion
308
- """
309
- l, stack = [], []
310
- poped, index = 0, 0
311
- while node:
312
- if filter_func(node):
313
- if node.children and not poped:
314
- stack.append((node, index))
315
- index = 0
316
- node = node.children[0]
317
- else:
318
- l.append(node)
319
- index += 1
320
- try:
321
- node = stack[-1][0].children[index]
322
- except IndexError:
323
- node = None
324
- else:
325
- node = None
326
- poped = 0
327
- if node is None and stack:
328
- node, index = stack.pop()
329
- poped = 1
330
- return l
331
-
332
- def pre_order_list(node, filter_func=no_filter):
333
- """
334
- create a list with tree nodes for which the <filter> function returned true
335
- in a pre order fashion
336
- """
337
- l, stack = [], []
338
- poped, index = 0, 0
339
- while node:
340
- if filter_func(node):
341
- if not poped:
342
- l.append(node)
343
- if node.children and not poped:
344
- stack.append((node, index))
345
- index = 0
346
- node = node.children[0]
347
- else:
348
- index += 1
349
- try:
350
- node = stack[-1][0].children[index]
351
- except IndexError:
352
- node = None
353
- else:
354
- node = None
355
- poped = 0
356
- if node is None and len(stack) > 1:
357
- node, index = stack.pop()
358
- poped = 1
359
- return l
360
-
361
- class PostfixedDepthFirstIterator(FilteredIterator):
362
- """a postfixed depth first iterator, designed to be used with visitors
363
- """
364
- def __init__(self, node, filter_func=None):
365
- FilteredIterator.__init__(self, node, post_order_list, filter_func)
366
-
367
- class PrefixedDepthFirstIterator(FilteredIterator):
368
- """a prefixed depth first iterator, designed to be used with visitors
369
- """
370
- def __init__(self, node, filter_func=None):
371
- FilteredIterator.__init__(self, node, pre_order_list, filter_func)
372
-
@@ -1,161 +0,0 @@
1
- # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2
- # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
- #
4
- # This file is part of logilab-common.
5
- #
6
- # logilab-common is free software: you can redistribute it and/or modify it under
7
- # the terms of the GNU Lesser General Public License as published by the Free
8
- # Software Foundation, either version 2.1 of the License, or (at your option) any
9
- # later version.
10
- #
11
- # logilab-common is distributed in the hope that it will be useful, but WITHOUT
12
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
- # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
- # details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License along
17
- # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
18
- """Unicode email support (extends email from stdlib).
19
-
20
-
21
-
22
-
23
- """
24
- __docformat__ = "restructuredtext en"
25
-
26
- import email
27
- from encodings import search_function
28
- from email.Utils import parseaddr, parsedate
29
- from email.Header import decode_header
30
- from datetime import datetime
31
-
32
- try:
33
- from mx.DateTime import DateTime
34
- except ImportError:
35
- DateTime = datetime
36
-
37
- import logilab.common as lgc
38
-
39
-
40
- def decode_QP(string):
41
- parts = []
42
- for decoded, charset in decode_header(string):
43
- if not charset :
44
- charset = 'iso-8859-15'
45
- parts.append(unicode(decoded, charset, 'replace'))
46
-
47
- return u' '.join(parts)
48
-
49
- def message_from_file(fd):
50
- try:
51
- return UMessage(email.message_from_file(fd))
52
- except email.Errors.MessageParseError:
53
- return ''
54
-
55
- def message_from_string(string):
56
- try:
57
- return UMessage(email.message_from_string(string))
58
- except email.Errors.MessageParseError:
59
- return ''
60
-
61
- class UMessage:
62
- """Encapsulates an email.Message instance and returns only unicode objects.
63
- """
64
-
65
- def __init__(self, message):
66
- self.message = message
67
-
68
- # email.Message interface #################################################
69
-
70
- def get(self, header, default=None):
71
- value = self.message.get(header, default)
72
- if value:
73
- return decode_QP(value)
74
- return value
75
-
76
- def get_all(self, header, default=()):
77
- return [decode_QP(val) for val in self.message.get_all(header, default)
78
- if val is not None]
79
-
80
- def get_payload(self, index=None, decode=False):
81
- message = self.message
82
- if index is None:
83
- payload = message.get_payload(index, decode)
84
- if isinstance(payload, list):
85
- return [UMessage(msg) for msg in payload]
86
- if message.get_content_maintype() != 'text':
87
- return payload
88
-
89
- charset = message.get_content_charset() or 'iso-8859-1'
90
- if search_function(charset) is None:
91
- charset = 'iso-8859-1'
92
- return unicode(payload or '', charset, "replace")
93
- else:
94
- payload = UMessage(message.get_payload(index, decode))
95
- return payload
96
-
97
- def is_multipart(self):
98
- return self.message.is_multipart()
99
-
100
- def get_boundary(self):
101
- return self.message.get_boundary()
102
-
103
- def walk(self):
104
- for part in self.message.walk():
105
- yield UMessage(part)
106
-
107
- def get_content_maintype(self):
108
- return unicode(self.message.get_content_maintype())
109
-
110
- def get_content_type(self):
111
- return unicode(self.message.get_content_type())
112
-
113
- def get_filename(self, failobj=None):
114
- value = self.message.get_filename(failobj)
115
- if value is failobj:
116
- return value
117
- try:
118
- return unicode(value)
119
- except UnicodeDecodeError:
120
- return u'error decoding filename'
121
-
122
- # other convenience methods ###############################################
123
-
124
- def headers(self):
125
- """return an unicode string containing all the message's headers"""
126
- values = []
127
- for header in self.message.keys():
128
- values.append(u'%s: %s' % (header, self.get(header)))
129
- return '\n'.join(values)
130
-
131
- def multi_addrs(self, header):
132
- """return a list of 2-uple (name, address) for the given address (which
133
- is expected to be an header containing address such as from, to, cc...)
134
- """
135
- persons = []
136
- for person in self.get_all(header, ()):
137
- name, mail = parseaddr(person)
138
- persons.append((name, mail))
139
- return persons
140
-
141
- def date(self, alternative_source=False, return_str=False):
142
- """return a datetime object for the email's date or None if no date is
143
- set or if it can't be parsed
144
- """
145
- value = self.get('date')
146
- if value is None and alternative_source:
147
- unix_from = self.message.get_unixfrom()
148
- if unix_from is not None:
149
- try:
150
- value = unix_from.split(" ", 2)[2]
151
- except IndexError:
152
- pass
153
- if value is not None:
154
- datetuple = parsedate(value)
155
- if datetuple:
156
- if lgc.USE_MX_DATETIME:
157
- return DateTime(*datetuple[:6])
158
- return datetime(*datetuple[:6])
159
- elif not return_str:
160
- return None
161
- return value
@@ -1,174 +0,0 @@
1
- # copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
2
- # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
3
- #
4
- # This file is part of logilab-common.
5
- #
6
- # logilab-common is free software: you can redistribute it and/or modify it under
7
- # the terms of the GNU Lesser General Public License as published by the Free
8
- # Software Foundation, either version 2.1 of the License, or (at your option) any
9
- # later version.
10
- #
11
- # logilab-common is distributed in the hope that it will be useful, but WITHOUT
12
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
- # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
14
- # details.
15
- #
16
- # You should have received a copy of the GNU Lesser General Public License along
17
- # with logilab-common. If not, see <http://www.gnu.org/licenses/>.
18
- """Universal report objects and some formatting drivers.
19
-
20
- A way to create simple reports using python objects, primarily designed to be
21
- formatted as text and html.
22
- """
23
- from __future__ import generators
24
- __docformat__ = "restructuredtext en"
25
-
26
- import sys
27
- from cStringIO import StringIO
28
- from StringIO import StringIO as UStringIO
29
-
30
- from logilab.common.textutils import linesep
31
-
32
-
33
- def get_nodes(node, klass):
34
- """return an iterator on all children node of the given klass"""
35
- for child in node.children:
36
- if isinstance(child, klass):
37
- yield child
38
- # recurse (FIXME: recursion controled by an option)
39
- for grandchild in get_nodes(child, klass):
40
- yield grandchild
41
-
42
- def layout_title(layout):
43
- """try to return the layout's title as string, return None if not found
44
- """
45
- for child in layout.children:
46
- if isinstance(child, Title):
47
- return ' '.join([node.data for node in get_nodes(child, Text)])
48
-
49
- def build_summary(layout, level=1):
50
- """make a summary for the report, including X level"""
51
- assert level > 0
52
- level -= 1
53
- summary = List(klass='summary')
54
- for child in layout.children:
55
- if not isinstance(child, Section):
56
- continue
57
- label = layout_title(child)
58
- if not label and not child.id:
59
- continue
60
- if not child.id:
61
- child.id = label.replace(' ', '-')
62
- node = Link('#'+child.id, label=label or child.id)
63
- # FIXME: Three following lines produce not very compliant
64
- # docbook: there are some useless <para><para>. They might be
65
- # replaced by the three commented lines but this then produces
66
- # a bug in html display...
67
- if level and [n for n in child.children if isinstance(n, Section)]:
68
- node = Paragraph([node, build_summary(child, level)])
69
- summary.append(node)
70
- # summary.append(node)
71
- # if level and [n for n in child.children if isinstance(n, Section)]:
72
- # summary.append(build_summary(child, level))
73
- return summary
74
-
75
-
76
- class BaseWriter(object):
77
- """base class for ureport writers"""
78
-
79
- def format(self, layout, stream=None, encoding=None):
80
- """format and write the given layout into the stream object
81
-
82
- unicode policy: unicode strings may be found in the layout;
83
- try to call stream.write with it, but give it back encoded using
84
- the given encoding if it fails
85
- """
86
- if stream is None:
87
- stream = sys.stdout
88
- if not encoding:
89
- encoding = getattr(stream, 'encoding', 'UTF-8')
90
- self.encoding = encoding or 'UTF-8'
91
- self.__compute_funcs = []
92
- self.out = stream
93
- self.begin_format(layout)
94
- layout.accept(self)
95
- self.end_format(layout)
96
-
97
- def format_children(self, layout):
98
- """recurse on the layout children and call their accept method
99
- (see the Visitor pattern)
100
- """
101
- for child in getattr(layout, 'children', ()):
102
- child.accept(self)
103
-
104
- def writeln(self, string=''):
105
- """write a line in the output buffer"""
106
- self.write(string + linesep)
107
-
108
- def write(self, string):
109
- """write a string in the output buffer"""
110
- try:
111
- self.out.write(string)
112
- except UnicodeEncodeError:
113
- self.out.write(string.encode(self.encoding))
114
-
115
- def begin_format(self, layout):
116
- """begin to format a layout"""
117
- self.section = 0
118
-
119
- def end_format(self, layout):
120
- """finished to format a layout"""
121
-
122
- def get_table_content(self, table):
123
- """trick to get table content without actually writing it
124
-
125
- return an aligned list of lists containing table cells values as string
126
- """
127
- result = [[]]
128
- cols = table.cols
129
- for cell in self.compute_content(table):
130
- if cols == 0:
131
- result.append([])
132
- cols = table.cols
133
- cols -= 1
134
- result[-1].append(cell)
135
- # fill missing cells
136
- while len(result[-1]) < cols:
137
- result[-1].append('')
138
- return result
139
-
140
- def compute_content(self, layout):
141
- """trick to compute the formatting of children layout before actually
142
- writing it
143
-
144
- return an iterator on strings (one for each child element)
145
- """
146
- # use cells !
147
- def write(data):
148
- try:
149
- stream.write(data)
150
- except UnicodeEncodeError:
151
- stream.write(data.encode(self.encoding))
152
- def writeln(data=''):
153
- try:
154
- stream.write(data+linesep)
155
- except UnicodeEncodeError:
156
- stream.write(data.encode(self.encoding)+linesep)
157
- self.write = write
158
- self.writeln = writeln
159
- self.__compute_funcs.append((write, writeln))
160
- for child in layout.children:
161
- stream = UStringIO()
162
- child.accept(self)
163
- yield stream.getvalue()
164
- self.__compute_funcs.pop()
165
- try:
166
- self.write, self.writeln = self.__compute_funcs[-1]
167
- except IndexError:
168
- del self.write
169
- del self.writeln
170
-
171
-
172
- from logilab.common.ureports.nodes import *
173
- from logilab.common.ureports.text_writer import TextWriter
174
- from logilab.common.ureports.html_writer import HTMLWriter