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.
- data/{build/README → README} +1 -1
- data/egg/egg/build.yml +11 -49
- data/egg/egg.yml +19 -27
- data/egg/http/build.erb +32 -36
- data/egg/http/libhttp.py +102 -0
- data/egg/http/pylint.cfg +236 -0
- data/egg/http/server.py +7 -0
- data/egg/http/test.erb +32 -0
- data/egg/http.yml +33 -29
- data/egg/mysql/mysql.py +8 -9
- data/egg/project/build.erb +21 -53
- data/egg/project/pylint.cfg +236 -0
- data/egg/project/test.py +2 -2
- data/egg/project.yml +23 -31
- data/egg/script/build.erb +18 -23
- data/egg/script/pylint.cfg +236 -0
- data/egg/script.yml +22 -18
- data/egg/source/source.py +6 -6
- data/egg/test/test.py +1 -1
- data/lib/bee_task_python.rb +3 -34
- data/python.yml +123 -0
- metadata +61 -503
- data/test/build.yml +0 -16
- data/test/tc_bee_task_python.rb +0 -27
- data/test/test_build.rb +0 -26
- data/test/test_build_listener.rb +0 -110
- data/test/ts_bee_python.rb +0 -26
- data/tools/common/__init__.py +0 -5
- data/tools/common/common/__init__.py +0 -140
- data/tools/common/common/__pkginfo__.py +0 -43
- data/tools/common/common/adbh.py +0 -35
- data/tools/common/common/cache.py +0 -114
- data/tools/common/common/changelog.py +0 -234
- data/tools/common/common/clcommands.py +0 -181
- data/tools/common/common/cli.py +0 -212
- data/tools/common/common/compat.py +0 -328
- data/tools/common/common/configuration.py +0 -1087
- data/tools/common/common/contexts.py +0 -58
- data/tools/common/common/corbautils.py +0 -117
- data/tools/common/common/daemon.py +0 -171
- data/tools/common/common/date.py +0 -279
- data/tools/common/common/db.py +0 -49
- data/tools/common/common/dbf.py +0 -229
- data/tools/common/common/debugger.py +0 -208
- data/tools/common/common/decorators.py +0 -190
- data/tools/common/common/deprecation.py +0 -118
- data/tools/common/common/fileutils.py +0 -409
- data/tools/common/common/graph.py +0 -259
- data/tools/common/common/html.py +0 -142
- data/tools/common/common/interface.py +0 -76
- data/tools/common/common/logging_ext.py +0 -166
- data/tools/common/common/modutils.py +0 -670
- data/tools/common/common/optik_ext.py +0 -383
- data/tools/common/common/optparser.py +0 -92
- data/tools/common/common/pdf_ext.py +0 -111
- data/tools/common/common/proc.py +0 -276
- data/tools/common/common/pyro_ext.py +0 -146
- data/tools/common/common/pytest.py +0 -754
- data/tools/common/common/shellutils.py +0 -383
- data/tools/common/common/sphinx_ext.py +0 -87
- data/tools/common/common/sphinxutils.py +0 -122
- data/tools/common/common/sqlgen.py +0 -31
- data/tools/common/common/table.py +0 -930
- data/tools/common/common/tasksqueue.py +0 -97
- data/tools/common/common/test/__init__.py +0 -1
- data/tools/common/common/test/data/ChangeLog +0 -184
- data/tools/common/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
- data/tools/common/common/test/data/__init__.py +0 -1
- data/tools/common/common/test/data/content_differ_dir/NOTHING +0 -0
- data/tools/common/common/test/data/content_differ_dir/README +0 -1
- data/tools/common/common/test/data/content_differ_dir/subdir/coin +0 -1
- data/tools/common/common/test/data/content_differ_dir/subdir/toto.txt +0 -53
- data/tools/common/common/test/data/file_differ_dir/NOTHING +0 -0
- data/tools/common/common/test/data/file_differ_dir/README +0 -1
- data/tools/common/common/test/data/file_differ_dir/subdir/toto.txt +0 -53
- data/tools/common/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
- data/tools/common/common/test/data/find_test/__init__.py +0 -0
- data/tools/common/common/test/data/find_test/foo.txt +0 -0
- data/tools/common/common/test/data/find_test/module.py +0 -0
- data/tools/common/common/test/data/find_test/module2.py +0 -0
- data/tools/common/common/test/data/find_test/newlines.txt +0 -0
- data/tools/common/common/test/data/find_test/noendingnewline.py +0 -0
- data/tools/common/common/test/data/find_test/nonregr.py +0 -0
- data/tools/common/common/test/data/find_test/normal_file.txt +0 -0
- data/tools/common/common/test/data/find_test/spam.txt +0 -0
- data/tools/common/common/test/data/find_test/sub/doc.txt +0 -0
- data/tools/common/common/test/data/find_test/sub/momo.py +0 -0
- data/tools/common/common/test/data/find_test/test.ini +0 -0
- data/tools/common/common/test/data/find_test/test1.msg +0 -0
- data/tools/common/common/test/data/find_test/test2.msg +0 -0
- data/tools/common/common/test/data/find_test/write_protected_file.txt +0 -0
- data/tools/common/common/test/data/foo.txt +0 -9
- data/tools/common/common/test/data/module.py +0 -88
- data/tools/common/common/test/data/module2.py +0 -77
- data/tools/common/common/test/data/newlines.txt +0 -3
- data/tools/common/common/test/data/noendingnewline.py +0 -36
- data/tools/common/common/test/data/nonregr.py +0 -14
- data/tools/common/common/test/data/normal_file.txt +0 -0
- data/tools/common/common/test/data/reference_dir/NOTHING +0 -0
- data/tools/common/common/test/data/reference_dir/README +0 -1
- data/tools/common/common/test/data/reference_dir/subdir/coin +0 -1
- data/tools/common/common/test/data/reference_dir/subdir/toto.txt +0 -53
- data/tools/common/common/test/data/same_dir/NOTHING +0 -0
- data/tools/common/common/test/data/same_dir/README +0 -1
- data/tools/common/common/test/data/same_dir/subdir/coin +0 -1
- data/tools/common/common/test/data/same_dir/subdir/toto.txt +0 -53
- data/tools/common/common/test/data/spam.txt +0 -9
- data/tools/common/common/test/data/sub/doc.txt +0 -1
- data/tools/common/common/test/data/sub/momo.py +0 -1
- data/tools/common/common/test/data/subdir_differ_dir/NOTHING +0 -0
- data/tools/common/common/test/data/subdir_differ_dir/README +0 -1
- data/tools/common/common/test/data/subdir_differ_dir/subdir/coin +0 -1
- data/tools/common/common/test/data/subdir_differ_dir/subdir/toto.txt +0 -53
- data/tools/common/common/test/data/test.ini +0 -20
- data/tools/common/common/test/data/test1.msg +0 -30
- data/tools/common/common/test/data/test2.msg +0 -42
- data/tools/common/common/test/data/write_protected_file.txt +0 -0
- data/tools/common/common/test/foomod.py +0 -17
- data/tools/common/common/test/unittest_cache.py +0 -129
- data/tools/common/common/test/unittest_changelog.py +0 -37
- data/tools/common/common/test/unittest_compat.py +0 -239
- data/tools/common/common/test/unittest_configuration.py +0 -348
- data/tools/common/common/test/unittest_date.py +0 -154
- data/tools/common/common/test/unittest_decorators.py +0 -62
- data/tools/common/common/test/unittest_deprecation.py +0 -76
- data/tools/common/common/test/unittest_fileutils.py +0 -133
- data/tools/common/common/test/unittest_graph.py +0 -50
- data/tools/common/common/test/unittest_html.py +0 -76
- data/tools/common/common/test/unittest_interface.py +0 -87
- data/tools/common/common/test/unittest_modutils.py +0 -244
- data/tools/common/common/test/unittest_pytest.py +0 -50
- data/tools/common/common/test/unittest_shellutils.py +0 -248
- data/tools/common/common/test/unittest_table.py +0 -448
- data/tools/common/common/test/unittest_taskqueue.py +0 -71
- data/tools/common/common/test/unittest_testlib.py +0 -956
- data/tools/common/common/test/unittest_textutils.py +0 -247
- data/tools/common/common/test/unittest_tree.py +0 -248
- data/tools/common/common/test/unittest_umessage.py +0 -55
- data/tools/common/common/test/unittest_ureports_html.py +0 -64
- data/tools/common/common/test/unittest_ureports_text.py +0 -105
- data/tools/common/common/test/unittest_xmlutils.py +0 -75
- data/tools/common/common/test/utils.py +0 -87
- data/tools/common/common/testlib.py +0 -1927
- data/tools/common/common/textutils.py +0 -476
- data/tools/common/common/tree.py +0 -372
- data/tools/common/common/umessage.py +0 -161
- data/tools/common/common/ureports/__init__.py +0 -174
- data/tools/common/common/ureports/docbook_writer.py +0 -139
- data/tools/common/common/ureports/html_writer.py +0 -131
- data/tools/common/common/ureports/nodes.py +0 -201
- data/tools/common/common/ureports/text_writer.py +0 -140
- data/tools/common/common/vcgutils.py +0 -216
- data/tools/common/common/visitor.py +0 -107
- data/tools/common/common/xmlrpcutils.py +0 -136
- data/tools/common/common/xmlutils.py +0 -61
- data/tools/coverage/coverage.py +0 -602
- data/tools/epydoc/__init__.py +0 -227
- data/tools/epydoc/__init__.pyc +0 -0
- data/tools/epydoc/apidoc.py +0 -2203
- data/tools/epydoc/apidoc.pyc +0 -0
- data/tools/epydoc/checker.py +0 -349
- data/tools/epydoc/checker.pyc +0 -0
- data/tools/epydoc/cli.py +0 -1470
- data/tools/epydoc/cli.pyc +0 -0
- data/tools/epydoc/compat.py +0 -250
- data/tools/epydoc/compat.pyc +0 -0
- data/tools/epydoc/docbuilder.py +0 -1358
- data/tools/epydoc/docbuilder.pyc +0 -0
- data/tools/epydoc/docintrospecter.py +0 -1056
- data/tools/epydoc/docintrospecter.pyc +0 -0
- data/tools/epydoc/docparser.py +0 -2113
- data/tools/epydoc/docparser.pyc +0 -0
- data/tools/epydoc/docstringparser.py +0 -1111
- data/tools/epydoc/docstringparser.pyc +0 -0
- data/tools/epydoc/docwriter/__init__.py +0 -12
- data/tools/epydoc/docwriter/__init__.pyc +0 -0
- data/tools/epydoc/docwriter/dotgraph.py +0 -1351
- data/tools/epydoc/docwriter/dotgraph.pyc +0 -0
- data/tools/epydoc/docwriter/html.py +0 -3491
- data/tools/epydoc/docwriter/html.pyc +0 -0
- data/tools/epydoc/docwriter/html_colorize.py +0 -909
- data/tools/epydoc/docwriter/html_colorize.pyc +0 -0
- data/tools/epydoc/docwriter/html_css.py +0 -550
- data/tools/epydoc/docwriter/html_css.pyc +0 -0
- data/tools/epydoc/docwriter/html_help.py +0 -190
- data/tools/epydoc/docwriter/html_help.pyc +0 -0
- data/tools/epydoc/docwriter/latex.py +0 -1187
- data/tools/epydoc/docwriter/latex.pyc +0 -0
- data/tools/epydoc/docwriter/plaintext.py +0 -276
- data/tools/epydoc/docwriter/plaintext.pyc +0 -0
- data/tools/epydoc/docwriter/xlink.py +0 -505
- data/tools/epydoc/docwriter/xlink.pyc +0 -0
- data/tools/epydoc/gui.py +0 -1148
- data/tools/epydoc/gui.pyc +0 -0
- data/tools/epydoc/log.py +0 -204
- data/tools/epydoc/log.pyc +0 -0
- data/tools/epydoc/markup/__init__.py +0 -623
- data/tools/epydoc/markup/__init__.pyc +0 -0
- data/tools/epydoc/markup/doctest.py +0 -311
- data/tools/epydoc/markup/doctest.pyc +0 -0
- data/tools/epydoc/markup/epytext.py +0 -2116
- data/tools/epydoc/markup/epytext.pyc +0 -0
- data/tools/epydoc/markup/javadoc.py +0 -250
- data/tools/epydoc/markup/javadoc.pyc +0 -0
- data/tools/epydoc/markup/plaintext.py +0 -78
- data/tools/epydoc/markup/plaintext.pyc +0 -0
- data/tools/epydoc/markup/pyval_repr.py +0 -532
- data/tools/epydoc/markup/pyval_repr.pyc +0 -0
- data/tools/epydoc/markup/restructuredtext.py +0 -906
- data/tools/epydoc/markup/restructuredtext.pyc +0 -0
- data/tools/epydoc/test/__init__.py +0 -97
- data/tools/epydoc/test/__init__.pyc +0 -0
- data/tools/epydoc/test/util.py +0 -226
- data/tools/epydoc/test/util.pyc +0 -0
- data/tools/epydoc/util.py +0 -289
- data/tools/epydoc/util.pyc +0 -0
- data/tools/logilab/logilab/__init__.py +0 -5
- data/tools/logilab/logilab/astng/__init__.py +0 -82
- data/tools/logilab/logilab/astng/__pkginfo__.py +0 -76
- data/tools/logilab/logilab/astng/_exceptions.py +0 -64
- data/tools/logilab/logilab/astng/_nodes_ast.py +0 -667
- data/tools/logilab/logilab/astng/_nodes_compiler.py +0 -758
- data/tools/logilab/logilab/astng/bases.py +0 -608
- data/tools/logilab/logilab/astng/builder.py +0 -239
- data/tools/logilab/logilab/astng/inference.py +0 -426
- data/tools/logilab/logilab/astng/inspector.py +0 -289
- data/tools/logilab/logilab/astng/manager.py +0 -421
- data/tools/logilab/logilab/astng/mixins.py +0 -165
- data/tools/logilab/logilab/astng/node_classes.py +0 -848
- data/tools/logilab/logilab/astng/nodes.py +0 -85
- data/tools/logilab/logilab/astng/nodes_as_string.py +0 -389
- data/tools/logilab/logilab/astng/patchcomptransformer.py +0 -159
- data/tools/logilab/logilab/astng/protocols.py +0 -333
- data/tools/logilab/logilab/astng/raw_building.py +0 -212
- data/tools/logilab/logilab/astng/rebuilder.py +0 -307
- data/tools/logilab/logilab/astng/scoped_nodes.py +0 -951
- data/tools/logilab/logilab/astng/test/__init__.py +0 -19
- data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
- data/tools/logilab/logilab/astng/test/data/MyPyPa-0.1.0-py2.5.zip +0 -0
- data/tools/logilab/logilab/astng/test/data/SSL1/Connection1.py +0 -33
- data/tools/logilab/logilab/astng/test/data/SSL1/__init__.py +0 -20
- data/tools/logilab/logilab/astng/test/data/__init__.py +0 -20
- data/tools/logilab/logilab/astng/test/data/all.py +0 -29
- data/tools/logilab/logilab/astng/test/data/appl/__init__.py +0 -23
- data/tools/logilab/logilab/astng/test/data/appl/myConnection.py +0 -30
- data/tools/logilab/logilab/astng/test/data/format.py +0 -34
- data/tools/logilab/logilab/astng/test/data/module.py +0 -90
- data/tools/logilab/logilab/astng/test/data/module2.py +0 -112
- data/tools/logilab/logilab/astng/test/data/noendingnewline.py +0 -57
- data/tools/logilab/logilab/astng/test/data/nonregr.py +0 -76
- data/tools/logilab/logilab/astng/test/data/notall.py +0 -28
- data/tools/logilab/logilab/astng/test/data2/__init__.py +0 -20
- data/tools/logilab/logilab/astng/test/data2/clientmodule_test.py +0 -51
- data/tools/logilab/logilab/astng/test/data2/suppliermodule_test.py +0 -32
- data/tools/logilab/logilab/astng/test/regrtest.py +0 -135
- data/tools/logilab/logilab/astng/test/regrtest_data/absimport.py +0 -22
- data/tools/logilab/logilab/astng/test/regrtest_data/descriptor_crash.py +0 -31
- data/tools/logilab/logilab/astng/test/regrtest_data/import_package_subpackage_module.py +0 -68
- data/tools/logilab/logilab/astng/test/regrtest_data/package/__init__.py +0 -24
- data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/__init__.py +0 -20
- data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/module.py +0 -20
- data/tools/logilab/logilab/astng/test/unittest_builder.py +0 -684
- data/tools/logilab/logilab/astng/test/unittest_inference.py +0 -1112
- data/tools/logilab/logilab/astng/test/unittest_inspector.py +0 -105
- data/tools/logilab/logilab/astng/test/unittest_lookup.py +0 -302
- data/tools/logilab/logilab/astng/test/unittest_manager.py +0 -98
- data/tools/logilab/logilab/astng/test/unittest_nodes.py +0 -302
- data/tools/logilab/logilab/astng/test/unittest_scoped_nodes.py +0 -501
- data/tools/logilab/logilab/astng/test/unittest_utils.py +0 -104
- data/tools/logilab/logilab/astng/utils.py +0 -342
- data/tools/logilab/logilab/common/__init__.py +0 -140
- data/tools/logilab/logilab/common/__pkginfo__.py +0 -43
- data/tools/logilab/logilab/common/adbh.py +0 -35
- data/tools/logilab/logilab/common/cache.py +0 -114
- data/tools/logilab/logilab/common/changelog.py +0 -234
- data/tools/logilab/logilab/common/clcommands.py +0 -181
- data/tools/logilab/logilab/common/cli.py +0 -212
- data/tools/logilab/logilab/common/compat.py +0 -328
- data/tools/logilab/logilab/common/configuration.py +0 -1087
- data/tools/logilab/logilab/common/contexts.py +0 -58
- data/tools/logilab/logilab/common/corbautils.py +0 -117
- data/tools/logilab/logilab/common/daemon.py +0 -171
- data/tools/logilab/logilab/common/date.py +0 -279
- data/tools/logilab/logilab/common/db.py +0 -49
- data/tools/logilab/logilab/common/dbf.py +0 -229
- data/tools/logilab/logilab/common/debugger.py +0 -208
- data/tools/logilab/logilab/common/decorators.py +0 -190
- data/tools/logilab/logilab/common/deprecation.py +0 -118
- data/tools/logilab/logilab/common/fileutils.py +0 -409
- data/tools/logilab/logilab/common/graph.py +0 -259
- data/tools/logilab/logilab/common/html.py +0 -142
- data/tools/logilab/logilab/common/interface.py +0 -76
- data/tools/logilab/logilab/common/logging_ext.py +0 -166
- data/tools/logilab/logilab/common/modutils.py +0 -670
- data/tools/logilab/logilab/common/optik_ext.py +0 -383
- data/tools/logilab/logilab/common/optparser.py +0 -92
- data/tools/logilab/logilab/common/pdf_ext.py +0 -111
- data/tools/logilab/logilab/common/proc.py +0 -276
- data/tools/logilab/logilab/common/pyro_ext.py +0 -146
- data/tools/logilab/logilab/common/pytest.py +0 -754
- data/tools/logilab/logilab/common/shellutils.py +0 -383
- data/tools/logilab/logilab/common/sphinx_ext.py +0 -87
- data/tools/logilab/logilab/common/sphinxutils.py +0 -122
- data/tools/logilab/logilab/common/sqlgen.py +0 -31
- data/tools/logilab/logilab/common/table.py +0 -930
- data/tools/logilab/logilab/common/tasksqueue.py +0 -97
- data/tools/logilab/logilab/common/test/__init__.py +0 -1
- data/tools/logilab/logilab/common/test/data/ChangeLog +0 -184
- data/tools/logilab/logilab/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
- data/tools/logilab/logilab/common/test/data/__init__.py +0 -1
- data/tools/logilab/logilab/common/test/data/content_differ_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/content_differ_dir/README +0 -1
- data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/coin +0 -1
- data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/toto.txt +0 -53
- data/tools/logilab/logilab/common/test/data/file_differ_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/file_differ_dir/README +0 -1
- data/tools/logilab/logilab/common/test/data/file_differ_dir/subdir/toto.txt +0 -53
- data/tools/logilab/logilab/common/test/data/file_differ_dir/subdirtwo/Hello +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/__init__.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/foo.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/module.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/module2.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/newlines.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/noendingnewline.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/nonregr.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/normal_file.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/spam.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/sub/doc.txt +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/sub/momo.py +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/test.ini +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/test1.msg +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/test2.msg +0 -0
- data/tools/logilab/logilab/common/test/data/find_test/write_protected_file.txt +0 -0
- data/tools/logilab/logilab/common/test/data/foo.txt +0 -9
- data/tools/logilab/logilab/common/test/data/module.py +0 -88
- data/tools/logilab/logilab/common/test/data/module2.py +0 -77
- data/tools/logilab/logilab/common/test/data/newlines.txt +0 -3
- data/tools/logilab/logilab/common/test/data/noendingnewline.py +0 -36
- data/tools/logilab/logilab/common/test/data/nonregr.py +0 -14
- data/tools/logilab/logilab/common/test/data/normal_file.txt +0 -0
- data/tools/logilab/logilab/common/test/data/reference_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/reference_dir/README +0 -1
- data/tools/logilab/logilab/common/test/data/reference_dir/subdir/coin +0 -1
- data/tools/logilab/logilab/common/test/data/reference_dir/subdir/toto.txt +0 -53
- data/tools/logilab/logilab/common/test/data/same_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/same_dir/README +0 -1
- data/tools/logilab/logilab/common/test/data/same_dir/subdir/coin +0 -1
- data/tools/logilab/logilab/common/test/data/same_dir/subdir/toto.txt +0 -53
- data/tools/logilab/logilab/common/test/data/spam.txt +0 -9
- data/tools/logilab/logilab/common/test/data/sub/doc.txt +0 -1
- data/tools/logilab/logilab/common/test/data/sub/momo.py +0 -1
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/README +0 -1
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/coin +0 -1
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/toto.txt +0 -53
- data/tools/logilab/logilab/common/test/data/test.ini +0 -20
- data/tools/logilab/logilab/common/test/data/test1.msg +0 -30
- data/tools/logilab/logilab/common/test/data/test2.msg +0 -42
- data/tools/logilab/logilab/common/test/data/write_protected_file.txt +0 -0
- data/tools/logilab/logilab/common/test/foomod.py +0 -17
- data/tools/logilab/logilab/common/test/unittest_cache.py +0 -129
- data/tools/logilab/logilab/common/test/unittest_changelog.py +0 -37
- data/tools/logilab/logilab/common/test/unittest_compat.py +0 -239
- data/tools/logilab/logilab/common/test/unittest_configuration.py +0 -348
- data/tools/logilab/logilab/common/test/unittest_date.py +0 -154
- data/tools/logilab/logilab/common/test/unittest_decorators.py +0 -62
- data/tools/logilab/logilab/common/test/unittest_deprecation.py +0 -76
- data/tools/logilab/logilab/common/test/unittest_fileutils.py +0 -133
- data/tools/logilab/logilab/common/test/unittest_graph.py +0 -50
- data/tools/logilab/logilab/common/test/unittest_html.py +0 -76
- data/tools/logilab/logilab/common/test/unittest_interface.py +0 -87
- data/tools/logilab/logilab/common/test/unittest_modutils.py +0 -244
- data/tools/logilab/logilab/common/test/unittest_pytest.py +0 -50
- data/tools/logilab/logilab/common/test/unittest_shellutils.py +0 -248
- data/tools/logilab/logilab/common/test/unittest_table.py +0 -448
- data/tools/logilab/logilab/common/test/unittest_taskqueue.py +0 -71
- data/tools/logilab/logilab/common/test/unittest_testlib.py +0 -956
- data/tools/logilab/logilab/common/test/unittest_textutils.py +0 -247
- data/tools/logilab/logilab/common/test/unittest_tree.py +0 -248
- data/tools/logilab/logilab/common/test/unittest_umessage.py +0 -55
- data/tools/logilab/logilab/common/test/unittest_ureports_html.py +0 -64
- data/tools/logilab/logilab/common/test/unittest_ureports_text.py +0 -105
- data/tools/logilab/logilab/common/test/unittest_xmlutils.py +0 -75
- data/tools/logilab/logilab/common/test/utils.py +0 -87
- data/tools/logilab/logilab/common/testlib.py +0 -1927
- data/tools/logilab/logilab/common/textutils.py +0 -476
- data/tools/logilab/logilab/common/tree.py +0 -372
- data/tools/logilab/logilab/common/umessage.py +0 -161
- data/tools/logilab/logilab/common/ureports/__init__.py +0 -174
- data/tools/logilab/logilab/common/ureports/docbook_writer.py +0 -139
- data/tools/logilab/logilab/common/ureports/html_writer.py +0 -131
- data/tools/logilab/logilab/common/ureports/nodes.py +0 -201
- data/tools/logilab/logilab/common/ureports/text_writer.py +0 -140
- data/tools/logilab/logilab/common/vcgutils.py +0 -216
- data/tools/logilab/logilab/common/visitor.py +0 -107
- data/tools/logilab/logilab/common/xmlrpcutils.py +0 -136
- data/tools/logilab/logilab/common/xmlutils.py +0 -61
- data/tools/pychecker/COPYRIGHT +0 -31
- data/tools/pychecker/ChangeLog +0 -349
- data/tools/pychecker/CodeChecks.py +0 -1969
- data/tools/pychecker/CodeChecks.pyc +0 -0
- data/tools/pychecker/CodeChecks.pyo +0 -0
- data/tools/pychecker/Config.py +0 -475
- data/tools/pychecker/Config.pyc +0 -0
- data/tools/pychecker/Config.pyo +0 -0
- data/tools/pychecker/KNOWN_BUGS +0 -100
- data/tools/pychecker/MAINTAINERS +0 -81
- data/tools/pychecker/NEWS +0 -406
- data/tools/pychecker/OP.py +0 -131
- data/tools/pychecker/OP.pyc +0 -0
- data/tools/pychecker/OP.pyo +0 -0
- data/tools/pychecker/OptionTypes.py +0 -117
- data/tools/pychecker/OptionTypes.pyc +0 -0
- data/tools/pychecker/OptionTypes.pyo +0 -0
- data/tools/pychecker/README +0 -152
- data/tools/pychecker/Stack.py +0 -115
- data/tools/pychecker/Stack.pyc +0 -0
- data/tools/pychecker/Stack.pyo +0 -0
- data/tools/pychecker/TODO +0 -101
- data/tools/pychecker/VERSION +0 -1
- data/tools/pychecker/Warning.py +0 -50
- data/tools/pychecker/Warning.pyc +0 -0
- data/tools/pychecker/Warning.pyo +0 -0
- data/tools/pychecker/__init__.py +0 -17
- data/tools/pychecker/__init__.pyc +0 -0
- data/tools/pychecker/__init__.pyo +0 -0
- data/tools/pychecker/checker.py +0 -961
- data/tools/pychecker/checker.pyc +0 -0
- data/tools/pychecker/checker.pyo +0 -0
- data/tools/pychecker/function.py +0 -159
- data/tools/pychecker/function.pyc +0 -0
- data/tools/pychecker/function.pyo +0 -0
- data/tools/pychecker/msgs.py +0 -175
- data/tools/pychecker/msgs.pyc +0 -0
- data/tools/pychecker/msgs.pyo +0 -0
- data/tools/pychecker/options.py +0 -275
- data/tools/pychecker/options.pyc +0 -0
- data/tools/pychecker/options.pyo +0 -0
- data/tools/pychecker/pcmodules.py +0 -19
- data/tools/pychecker/pcmodules.pyc +0 -0
- data/tools/pychecker/pcmodules.pyo +0 -0
- data/tools/pychecker/printer.py +0 -47
- data/tools/pychecker/printer.pyc +0 -0
- data/tools/pychecker/printer.pyo +0 -0
- data/tools/pychecker/python.py +0 -427
- data/tools/pychecker/python.pyc +0 -0
- data/tools/pychecker/python.pyo +0 -0
- data/tools/pychecker/utils.py +0 -102
- data/tools/pychecker/utils.pyc +0 -0
- data/tools/pychecker/utils.pyo +0 -0
- data/tools/pychecker/warn.py +0 -778
- data/tools/pychecker/warn.pyc +0 -0
- data/tools/pychecker/warn.pyo +0 -0
- data/tools/pylint2/pylint/__init__.py +0 -16
- data/tools/pylint2/pylint/__pkginfo__.py +0 -67
- data/tools/pylint2/pylint/checkers/__init__.py +0 -155
- data/tools/pylint2/pylint/checkers/base.py +0 -749
- data/tools/pylint2/pylint/checkers/classes.py +0 -527
- data/tools/pylint2/pylint/checkers/design_analysis.py +0 -344
- data/tools/pylint2/pylint/checkers/exceptions.py +0 -183
- data/tools/pylint2/pylint/checkers/format.py +0 -367
- data/tools/pylint2/pylint/checkers/imports.py +0 -379
- data/tools/pylint2/pylint/checkers/logging.py +0 -98
- data/tools/pylint2/pylint/checkers/misc.py +0 -128
- data/tools/pylint2/pylint/checkers/newstyle.py +0 -107
- data/tools/pylint2/pylint/checkers/raw_metrics.py +0 -125
- data/tools/pylint2/pylint/checkers/similar.py +0 -333
- data/tools/pylint2/pylint/checkers/string_format.py +0 -239
- data/tools/pylint2/pylint/checkers/typecheck.py +0 -364
- data/tools/pylint2/pylint/checkers/utils.py +0 -208
- data/tools/pylint2/pylint/checkers/variables.py +0 -498
- data/tools/pylint2/pylint/config.py +0 -149
- data/tools/pylint2/pylint/epylint.py +0 -149
- data/tools/pylint2/pylint/gui.py +0 -433
- data/tools/pylint2/pylint/interfaces.py +0 -98
- data/tools/pylint2/pylint/lint.py +0 -914
- data/tools/pylint2/pylint/pyreverse/__init__.py +0 -5
- data/tools/pylint2/pylint/pyreverse/diadefslib.py +0 -229
- data/tools/pylint2/pylint/pyreverse/diagrams.py +0 -247
- data/tools/pylint2/pylint/pyreverse/main.py +0 -123
- data/tools/pylint2/pylint/pyreverse/utils.py +0 -131
- data/tools/pylint2/pylint/pyreverse/writer.py +0 -196
- data/tools/pylint2/pylint/reporters/__init__.py +0 -67
- data/tools/pylint2/pylint/reporters/guireporter.py +0 -36
- data/tools/pylint2/pylint/reporters/html.py +0 -69
- data/tools/pylint2/pylint/reporters/text.py +0 -156
- data/tools/pylint2/pylint/utils.py +0 -518
- data/tools/pylint2/pylint.py +0 -16
@@ -1,342 +0,0 @@
|
|
1
|
-
# This program is free software; you can redistribute it and/or modify
|
2
|
-
# it under the terms of the GNU Lesser General Public License as published by
|
3
|
-
# the Free Software Foundation; either version 2 of the License, or
|
4
|
-
# (at your option) any later version.
|
5
|
-
#
|
6
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
7
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
8
|
-
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
9
|
-
#
|
10
|
-
# You should have received a copy of the GNU Lesser General Public License along with
|
11
|
-
# this program; if not, write to the Free Software Foundation, Inc.,
|
12
|
-
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
13
|
-
# copyright 2003-2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
|
14
|
-
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
|
15
|
-
# copyright 2003-2010 Sylvain Thenault, all rights reserved.
|
16
|
-
# contact mailto:thenault@gmail.com
|
17
|
-
#
|
18
|
-
# This file is part of logilab-astng.
|
19
|
-
#
|
20
|
-
# logilab-astng is free software: you can redistribute it and/or modify it
|
21
|
-
# under the terms of the GNU Lesser General Public License as published by the
|
22
|
-
# Free Software Foundation, either version 2.1 of the License, or (at your
|
23
|
-
# option) any later version.
|
24
|
-
#
|
25
|
-
# logilab-astng is distributed in the hope that it will be useful, but
|
26
|
-
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
27
|
-
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
|
28
|
-
# for more details.
|
29
|
-
#
|
30
|
-
# You should have received a copy of the GNU Lesser General Public License along
|
31
|
-
# with logilab-astng. If not, see <http://www.gnu.org/licenses/>.
|
32
|
-
"""this module contains some utilities to navigate in the tree or to
|
33
|
-
extract information from it
|
34
|
-
|
35
|
-
"""
|
36
|
-
|
37
|
-
__docformat__ = "restructuredtext en"
|
38
|
-
|
39
|
-
from logilab.astng._exceptions import IgnoreChild, ASTNGBuildingException
|
40
|
-
|
41
|
-
|
42
|
-
class ASTVisitor(object):
|
43
|
-
"""Abstract Base Class for Python AST Visitors.
|
44
|
-
|
45
|
-
Visitors inheriting from ASTVisitors could visit
|
46
|
-
compiler.ast, _ast or astng trees.
|
47
|
-
|
48
|
-
Not all methods will have to be implemented;
|
49
|
-
so some methods are just empty interfaces for catching
|
50
|
-
cases where we don't want to do anything on the
|
51
|
-
concerned node.
|
52
|
-
"""
|
53
|
-
|
54
|
-
def visit_arguments(self, node):
|
55
|
-
"""dummy method for visiting an Arguments node"""
|
56
|
-
|
57
|
-
def visit_assattr(self, node):
|
58
|
-
"""dummy method for visiting an AssAttr node"""
|
59
|
-
|
60
|
-
def visit_assert(self, node):
|
61
|
-
"""dummy method for visiting an Assert node"""
|
62
|
-
|
63
|
-
def visit_assign(self, node):
|
64
|
-
"""dummy method for visiting an Assign node"""
|
65
|
-
|
66
|
-
def visit_assname(self, node):
|
67
|
-
"""dummy method for visiting an AssName node"""
|
68
|
-
|
69
|
-
def visit_augassign(self, node):
|
70
|
-
"""dummy method for visiting an AugAssign node"""
|
71
|
-
|
72
|
-
def visit_backquote(self, node):
|
73
|
-
"""dummy method for visiting an Backquote node"""
|
74
|
-
|
75
|
-
def visit_binop(self, node):
|
76
|
-
"""dummy method for visiting an BinOp node"""
|
77
|
-
|
78
|
-
def visit_boolop(self, node):
|
79
|
-
"""dummy method for visiting an BoolOp node"""
|
80
|
-
|
81
|
-
def visit_break(self, node):
|
82
|
-
"""dummy method for visiting an Break node"""
|
83
|
-
|
84
|
-
def visit_callfunc(self, node):
|
85
|
-
"""dummy method for visiting an CallFunc node"""
|
86
|
-
|
87
|
-
def visit_class(self, node):
|
88
|
-
"""dummy method for visiting an Class node"""
|
89
|
-
|
90
|
-
def visit_compare(self, node):
|
91
|
-
"""dummy method for visiting an Compare node"""
|
92
|
-
|
93
|
-
def visit_comprehension(self, node):
|
94
|
-
"""dummy method for visiting an Comprehension node"""
|
95
|
-
|
96
|
-
def visit_const(self, node):
|
97
|
-
"""dummy method for visiting an Const node"""
|
98
|
-
|
99
|
-
def visit_continue(self, node):
|
100
|
-
"""dummy method for visiting an Continue node"""
|
101
|
-
|
102
|
-
def visit_decorators(self, node):
|
103
|
-
"""dummy method for visiting an Decorators node"""
|
104
|
-
|
105
|
-
def visit_delattr(self, node):
|
106
|
-
"""dummy method for visiting an DelAttr node"""
|
107
|
-
|
108
|
-
def visit_delete(self, node):
|
109
|
-
"""dummy method for visiting an Delete node"""
|
110
|
-
|
111
|
-
def visit_delname(self, node):
|
112
|
-
"""dummy method for visiting an DelName node"""
|
113
|
-
|
114
|
-
def visit_dict(self, node):
|
115
|
-
"""dummy method for visiting an Dict node"""
|
116
|
-
|
117
|
-
def visit_discard(self, node):
|
118
|
-
"""dummy method for visiting an Discard node"""
|
119
|
-
|
120
|
-
def visit_emptynode(self, node):
|
121
|
-
"""dummy method for visiting an EmptyNode node"""
|
122
|
-
|
123
|
-
def visit_excepthandler(self, node):
|
124
|
-
"""dummy method for visiting an ExceptHandler node"""
|
125
|
-
|
126
|
-
def visit_ellipsis(self, node):
|
127
|
-
"""dummy method for visiting an Ellipsis node"""
|
128
|
-
|
129
|
-
def visit_empty(self, node):
|
130
|
-
"""dummy method for visiting an Empty node"""
|
131
|
-
|
132
|
-
def visit_exec(self, node):
|
133
|
-
"""dummy method for visiting an Exec node"""
|
134
|
-
|
135
|
-
def visit_extslice(self, node):
|
136
|
-
"""dummy method for visiting an ExtSlice node"""
|
137
|
-
|
138
|
-
def visit_for(self, node):
|
139
|
-
"""dummy method for visiting an For node"""
|
140
|
-
|
141
|
-
def visit_from(self, node):
|
142
|
-
"""dummy method for visiting an From node"""
|
143
|
-
|
144
|
-
def visit_function(self, node):
|
145
|
-
"""dummy method for visiting an Function node"""
|
146
|
-
|
147
|
-
def visit_genexpr(self, node):
|
148
|
-
"""dummy method for visiting an ListComp node"""
|
149
|
-
|
150
|
-
def visit_getattr(self, node):
|
151
|
-
"""dummy method for visiting an Getattr node"""
|
152
|
-
|
153
|
-
def visit_global(self, node):
|
154
|
-
"""dummy method for visiting an Global node"""
|
155
|
-
|
156
|
-
def visit_if(self, node):
|
157
|
-
"""dummy method for visiting an If node"""
|
158
|
-
|
159
|
-
def visit_ifexp(self, node):
|
160
|
-
"""dummy method for visiting an IfExp node"""
|
161
|
-
|
162
|
-
def visit_import(self, node):
|
163
|
-
"""dummy method for visiting an Import node"""
|
164
|
-
|
165
|
-
def visit_index(self, node):
|
166
|
-
"""dummy method for visiting an Index node"""
|
167
|
-
|
168
|
-
def visit_keyword(self, node):
|
169
|
-
"""dummy method for visiting an Keyword node"""
|
170
|
-
|
171
|
-
def visit_lambda(self, node):
|
172
|
-
"""dummy method for visiting an Lambda node"""
|
173
|
-
|
174
|
-
def visit_list(self, node):
|
175
|
-
"""dummy method for visiting an List node"""
|
176
|
-
|
177
|
-
def visit_listcomp(self, node):
|
178
|
-
"""dummy method for visiting an ListComp node"""
|
179
|
-
|
180
|
-
def visit_module(self, node):
|
181
|
-
"""dummy method for visiting an Module node"""
|
182
|
-
|
183
|
-
def visit_name(self, node):
|
184
|
-
"""dummy method for visiting an Name node"""
|
185
|
-
|
186
|
-
def visit_pass(self, node):
|
187
|
-
"""dummy method for visiting an Pass node"""
|
188
|
-
|
189
|
-
def visit_print(self, node):
|
190
|
-
"""dummy method for visiting an Print node"""
|
191
|
-
|
192
|
-
def visit_raise(self, node):
|
193
|
-
"""dummy method for visiting an Raise node"""
|
194
|
-
|
195
|
-
def visit_return(self, node):
|
196
|
-
"""dummy method for visiting an Return node"""
|
197
|
-
|
198
|
-
def visit_slice(self, node):
|
199
|
-
"""dummy method for visiting an Slice node"""
|
200
|
-
|
201
|
-
def visit_subscript(self, node):
|
202
|
-
"""dummy method for visiting an Subscript node"""
|
203
|
-
|
204
|
-
def visit_tryexcept(self, node):
|
205
|
-
"""dummy method for visiting an TryExcept node"""
|
206
|
-
|
207
|
-
def visit_tryfinally(self, node):
|
208
|
-
"""dummy method for visiting an TryFinally node"""
|
209
|
-
|
210
|
-
def visit_tuple(self, node):
|
211
|
-
"""dummy method for visiting an Tuple node"""
|
212
|
-
|
213
|
-
def visit_unaryop(self, node):
|
214
|
-
"""dummy method for visiting an UnaryOp node"""
|
215
|
-
|
216
|
-
def visit_while(self, node):
|
217
|
-
"""dummy method for visiting an While node"""
|
218
|
-
|
219
|
-
def visit_with(self, node):
|
220
|
-
"""dummy method for visiting an With node"""
|
221
|
-
|
222
|
-
def visit_yield(self, node):
|
223
|
-
"""dummy method for visiting an Yield node"""
|
224
|
-
|
225
|
-
|
226
|
-
class ASTWalker:
|
227
|
-
"""a walker visiting a tree in preorder, calling on the handler:
|
228
|
-
|
229
|
-
* visit_<class name> on entering a node, where class name is the class of
|
230
|
-
the node in lower case
|
231
|
-
|
232
|
-
* leave_<class name> on leaving a node, where class name is the class of
|
233
|
-
the node in lower case
|
234
|
-
"""
|
235
|
-
|
236
|
-
def __init__(self, handler):
|
237
|
-
self.handler = handler
|
238
|
-
self._cache = {}
|
239
|
-
|
240
|
-
def walk(self, node, _done=None):
|
241
|
-
"""walk on the tree from <node>, getting callbacks from handler"""
|
242
|
-
if _done is None:
|
243
|
-
_done = set()
|
244
|
-
if node in _done:
|
245
|
-
raise AssertionError((id(node), node, node.parent))
|
246
|
-
_done.add(node)
|
247
|
-
try:
|
248
|
-
self.visit(node)
|
249
|
-
except IgnoreChild:
|
250
|
-
pass
|
251
|
-
else:
|
252
|
-
try:
|
253
|
-
for child_node in node.get_children():
|
254
|
-
self.handler.set_context(node, child_node)
|
255
|
-
assert child_node is not node
|
256
|
-
self.walk(child_node, _done)
|
257
|
-
except AttributeError:
|
258
|
-
print node.__class__, id(node.__class__)
|
259
|
-
raise
|
260
|
-
self.leave(node)
|
261
|
-
assert node.parent is not node
|
262
|
-
|
263
|
-
def get_callbacks(self, node):
|
264
|
-
"""get callbacks from handler for the visited node"""
|
265
|
-
klass = node.__class__
|
266
|
-
methods = self._cache.get(klass)
|
267
|
-
if methods is None:
|
268
|
-
handler = self.handler
|
269
|
-
kid = klass.__name__.lower()
|
270
|
-
e_method = getattr(handler, 'visit_%s' % kid,
|
271
|
-
getattr(handler, 'visit_default', None))
|
272
|
-
l_method = getattr(handler, 'leave_%s' % kid,
|
273
|
-
getattr(handler, 'leave_default', None))
|
274
|
-
self._cache[klass] = (e_method, l_method)
|
275
|
-
else:
|
276
|
-
e_method, l_method = methods
|
277
|
-
return e_method, l_method
|
278
|
-
|
279
|
-
def visit(self, node):
|
280
|
-
"""walk on the tree from <node>, getting callbacks from handler"""
|
281
|
-
method = self.get_callbacks(node)[0]
|
282
|
-
if method is not None:
|
283
|
-
method(node)
|
284
|
-
|
285
|
-
def leave(self, node):
|
286
|
-
"""walk on the tree from <node>, getting callbacks from handler"""
|
287
|
-
method = self.get_callbacks(node)[1]
|
288
|
-
if method is not None:
|
289
|
-
method(node)
|
290
|
-
|
291
|
-
|
292
|
-
class LocalsVisitor(ASTWalker):
|
293
|
-
"""visit a project by traversing the locals dictionary"""
|
294
|
-
def __init__(self):
|
295
|
-
ASTWalker.__init__(self, self)
|
296
|
-
self._visited = {}
|
297
|
-
|
298
|
-
def visit(self, node):
|
299
|
-
"""launch the visit starting from the given node"""
|
300
|
-
if self._visited.has_key(node):
|
301
|
-
return
|
302
|
-
self._visited[node] = 1 # FIXME: use set ?
|
303
|
-
methods = self.get_callbacks(node)
|
304
|
-
recurse = 1
|
305
|
-
if methods[0] is not None:
|
306
|
-
try:
|
307
|
-
methods[0](node)
|
308
|
-
except IgnoreChild:
|
309
|
-
recurse = 0
|
310
|
-
if recurse:
|
311
|
-
if 'locals' in node.__dict__: # skip Instance and other proxy
|
312
|
-
for name, local_node in node.items():
|
313
|
-
self.visit(local_node)
|
314
|
-
if methods[1] is not None:
|
315
|
-
return methods[1](node)
|
316
|
-
|
317
|
-
|
318
|
-
def _check_children(node):
|
319
|
-
"""a helper function to check children - parent relations"""
|
320
|
-
for child in node.get_children():
|
321
|
-
ok = False
|
322
|
-
if child is None:
|
323
|
-
print "Hm, child of %s is None" % node
|
324
|
-
continue
|
325
|
-
if not hasattr(child, 'parent'):
|
326
|
-
print " ERROR: %s has child %s %x with no parent" % (node, child, id(child))
|
327
|
-
elif not child.parent:
|
328
|
-
print " ERROR: %s has child %s %x with parent %r" % (node, child, id(child), child.parent)
|
329
|
-
elif child.parent is not node:
|
330
|
-
print " ERROR: %s %x has child %s %x with wrong parent %s" % (node,
|
331
|
-
id(node), child, id(child), child.parent)
|
332
|
-
else:
|
333
|
-
ok = True
|
334
|
-
if not ok:
|
335
|
-
print "lines;", node.lineno, child.lineno
|
336
|
-
print "of module", node.root(), node.root().name
|
337
|
-
raise ASTNGBuildingException
|
338
|
-
_check_children(child)
|
339
|
-
|
340
|
-
|
341
|
-
__all__ = ('LocalsVisitor', 'ASTWalker', 'ASTVisitor',)
|
342
|
-
|
@@ -1,140 +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
|
-
"""Logilab common library (aka Logilab's extension to the standard library).
|
19
|
-
|
20
|
-
:type STD_BLACKLIST: tuple
|
21
|
-
:var STD_BLACKLIST: directories ignored by default by the functions in
|
22
|
-
this package which have to recurse into directories
|
23
|
-
|
24
|
-
:type IGNORED_EXTENSIONS: tuple
|
25
|
-
:var IGNORED_EXTENSIONS: file extensions that may usually be ignored
|
26
|
-
"""
|
27
|
-
__docformat__ = "restructuredtext en"
|
28
|
-
from logilab.common.__pkginfo__ import version as __version__
|
29
|
-
|
30
|
-
STD_BLACKLIST = ('CVS', '.svn', '.hg', 'debian', 'dist', 'build')
|
31
|
-
|
32
|
-
IGNORED_EXTENSIONS = ('.pyc', '.pyo', '.elc', '~')
|
33
|
-
|
34
|
-
# set this to False if you've mx DateTime installed but you don't want your db
|
35
|
-
# adapter to use it (should be set before you got a connection)
|
36
|
-
USE_MX_DATETIME = True
|
37
|
-
|
38
|
-
|
39
|
-
class attrdict(dict):
|
40
|
-
"""A dictionary for which keys are also accessible as attributes."""
|
41
|
-
def __getattr__(self, attr):
|
42
|
-
try:
|
43
|
-
return self[attr]
|
44
|
-
except KeyError:
|
45
|
-
raise AttributeError(attr)
|
46
|
-
|
47
|
-
class dictattr(dict):
|
48
|
-
def __init__(self, proxy):
|
49
|
-
self.__proxy = proxy
|
50
|
-
|
51
|
-
def __getitem__(self, attr):
|
52
|
-
try:
|
53
|
-
return getattr(self.__proxy, attr)
|
54
|
-
except AttributeError:
|
55
|
-
raise KeyError(attr)
|
56
|
-
|
57
|
-
class nullobject(object):
|
58
|
-
def __repr__(self):
|
59
|
-
return '<nullobject>'
|
60
|
-
def __nonzero__(self):
|
61
|
-
return False
|
62
|
-
|
63
|
-
# flatten -----
|
64
|
-
# XXX move in a specific module and use yield instead
|
65
|
-
# do not mix flatten and translate
|
66
|
-
#
|
67
|
-
# def iterable(obj):
|
68
|
-
# try: iter(obj)
|
69
|
-
# except: return False
|
70
|
-
# return True
|
71
|
-
#
|
72
|
-
# def is_string_like(obj):
|
73
|
-
# try: obj +''
|
74
|
-
# except (TypeError, ValueError): return False
|
75
|
-
# return True
|
76
|
-
#
|
77
|
-
#def is_scalar(obj):
|
78
|
-
# return is_string_like(obj) or not iterable(obj)
|
79
|
-
#
|
80
|
-
#def flatten(seq):
|
81
|
-
# for item in seq:
|
82
|
-
# if is_scalar(item):
|
83
|
-
# yield item
|
84
|
-
# else:
|
85
|
-
# for subitem in flatten(item):
|
86
|
-
# yield subitem
|
87
|
-
|
88
|
-
def flatten(iterable, tr_func=None, results=None):
|
89
|
-
"""Flatten a list of list with any level.
|
90
|
-
|
91
|
-
If tr_func is not None, it should be a one argument function that'll be called
|
92
|
-
on each final element.
|
93
|
-
|
94
|
-
:rtype: list
|
95
|
-
|
96
|
-
>>> flatten([1, [2, 3]])
|
97
|
-
[1, 2, 3]
|
98
|
-
"""
|
99
|
-
if results is None:
|
100
|
-
results = []
|
101
|
-
for val in iterable:
|
102
|
-
if isinstance(val, (list, tuple)):
|
103
|
-
flatten(val, tr_func, results)
|
104
|
-
elif tr_func is None:
|
105
|
-
results.append(val)
|
106
|
-
else:
|
107
|
-
results.append(tr_func(val))
|
108
|
-
return results
|
109
|
-
|
110
|
-
|
111
|
-
# XXX is function below still used ?
|
112
|
-
|
113
|
-
def make_domains(lists):
|
114
|
-
"""
|
115
|
-
Given a list of lists, return a list of domain for each list to produce all
|
116
|
-
combinations of possibles values.
|
117
|
-
|
118
|
-
:rtype: list
|
119
|
-
|
120
|
-
Example:
|
121
|
-
|
122
|
-
>>> make_domains(['a', 'b'], ['c','d', 'e'])
|
123
|
-
[['a', 'b', 'a', 'b', 'a', 'b'], ['c', 'c', 'd', 'd', 'e', 'e']]
|
124
|
-
"""
|
125
|
-
domains = []
|
126
|
-
for iterable in lists:
|
127
|
-
new_domain = iterable[:]
|
128
|
-
for i in range(len(domains)):
|
129
|
-
domains[i] = domains[i]*len(iterable)
|
130
|
-
if domains:
|
131
|
-
missing = (len(domains[0]) - len(iterable)) / len(iterable)
|
132
|
-
i = 0
|
133
|
-
for j in range(len(iterable)):
|
134
|
-
value = iterable[j]
|
135
|
-
for dummy in range(missing):
|
136
|
-
new_domain.insert(i, value)
|
137
|
-
i += 1
|
138
|
-
i += 1
|
139
|
-
domains.append(new_domain)
|
140
|
-
return domains
|
@@ -1,43 +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
|
-
"""logilab.common packaging information"""
|
19
|
-
__docformat__ = "restructuredtext en"
|
20
|
-
|
21
|
-
distname = 'logilab-common'
|
22
|
-
modname = 'common'
|
23
|
-
|
24
|
-
numversion = (0, 50, 3)
|
25
|
-
version = '.'.join([str(num) for num in numversion])
|
26
|
-
|
27
|
-
license = 'LGPL' # 2.1 or later
|
28
|
-
|
29
|
-
author = "Logilab"
|
30
|
-
author_email = "devel@logilab.fr"
|
31
|
-
|
32
|
-
description = "collection of low-level Python packages and modules used by Logilab projects"
|
33
|
-
web = "http://www.logilab.org/project/%s" % distname
|
34
|
-
ftp = "ftp://ftp.logilab.org/pub/%s" % modname
|
35
|
-
mailinglist = "mailto://python-projects@lists.logilab.org"
|
36
|
-
|
37
|
-
subpackage_of = 'logilab'
|
38
|
-
subpackage_master = True
|
39
|
-
|
40
|
-
scripts = ('bin/pytest',)
|
41
|
-
from os.path import join
|
42
|
-
include_dirs = [join('test', 'data')]
|
43
|
-
pyversions = ['2.4', '2.5', '2.6']
|
@@ -1,35 +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
|
-
"""Helpers for DBMS specific (advanced or non standard) functionalities.
|
19
|
-
"""
|
20
|
-
__docformat__ = "restructuredtext en"
|
21
|
-
|
22
|
-
from warnings import warn
|
23
|
-
warn('this module is deprecated, use logilab.database instead',
|
24
|
-
DeprecationWarning, stacklevel=1)
|
25
|
-
|
26
|
-
from logilab.database import (FunctionDescr, get_db_helper as get_adv_func_helper,
|
27
|
-
_GenericAdvFuncHelper,
|
28
|
-
_ADV_FUNC_HELPER_DIRECTORY as ADV_FUNC_HELPER_DIRECTORY)
|
29
|
-
from logilab.common.decorators import monkeypatch
|
30
|
-
|
31
|
-
@monkeypatch(_GenericAdvFuncHelper, 'func_sqlname')
|
32
|
-
@classmethod
|
33
|
-
def func_sqlname(cls, funcname):
|
34
|
-
funcdef = cls.function_description(funcname)
|
35
|
-
return funcdef.name_mapping.get(cls.backend_name, funcname)
|
@@ -1,114 +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
|
-
"""Cache module, with a least recently used algorithm for the management of the
|
19
|
-
deletion of entries.
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
"""
|
25
|
-
__docformat__ = "restructuredtext en"
|
26
|
-
|
27
|
-
from threading import Lock
|
28
|
-
|
29
|
-
from logilab.common.decorators import locked
|
30
|
-
|
31
|
-
_marker = object()
|
32
|
-
|
33
|
-
class Cache(dict):
|
34
|
-
"""A dictionary like cache.
|
35
|
-
|
36
|
-
inv:
|
37
|
-
len(self._usage) <= self.size
|
38
|
-
len(self.data) <= self.size
|
39
|
-
"""
|
40
|
-
|
41
|
-
def __init__(self, size=100):
|
42
|
-
""" Warning : Cache.__init__() != dict.__init__().
|
43
|
-
Constructor does not take any arguments beside size.
|
44
|
-
"""
|
45
|
-
assert size >= 0, 'cache size must be >= 0 (0 meaning no caching)'
|
46
|
-
self.size = size
|
47
|
-
self._usage = []
|
48
|
-
self._lock = Lock()
|
49
|
-
super(Cache, self).__init__()
|
50
|
-
|
51
|
-
def _acquire(self):
|
52
|
-
self._lock.acquire()
|
53
|
-
|
54
|
-
def _release(self):
|
55
|
-
self._lock.release()
|
56
|
-
|
57
|
-
def _update_usage(self, key):
|
58
|
-
if not self._usage:
|
59
|
-
self._usage.append(key)
|
60
|
-
elif self._usage[-1] != key:
|
61
|
-
try:
|
62
|
-
self._usage.remove(key)
|
63
|
-
except ValueError:
|
64
|
-
# we are inserting a new key
|
65
|
-
# check the size of the dictionary
|
66
|
-
# and remove the oldest item in the cache
|
67
|
-
if self.size and len(self._usage) >= self.size:
|
68
|
-
super(Cache, self).__delitem__(self._usage[0])
|
69
|
-
del self._usage[0]
|
70
|
-
self._usage.append(key)
|
71
|
-
else:
|
72
|
-
pass # key is already the most recently used key
|
73
|
-
|
74
|
-
def __getitem__(self, key):
|
75
|
-
value = super(Cache, self).__getitem__(key)
|
76
|
-
self._update_usage(key)
|
77
|
-
return value
|
78
|
-
__getitem__ = locked(_acquire, _release)(__getitem__)
|
79
|
-
|
80
|
-
def __setitem__(self, key, item):
|
81
|
-
# Just make sure that size > 0 before inserting a new item in the cache
|
82
|
-
if self.size > 0:
|
83
|
-
super(Cache, self).__setitem__(key, item)
|
84
|
-
self._update_usage(key)
|
85
|
-
__setitem__ = locked(_acquire, _release)(__setitem__)
|
86
|
-
|
87
|
-
def __delitem__(self, key):
|
88
|
-
super(Cache, self).__delitem__(key)
|
89
|
-
self._usage.remove(key)
|
90
|
-
__delitem__ = locked(_acquire, _release)(__delitem__)
|
91
|
-
|
92
|
-
def clear(self):
|
93
|
-
super(Cache, self).clear()
|
94
|
-
self._usage = []
|
95
|
-
clear = locked(_acquire, _release)(clear)
|
96
|
-
|
97
|
-
def pop(self, key, default=_marker):
|
98
|
-
if key in self:
|
99
|
-
self._usage.remove(key)
|
100
|
-
#if default is _marker:
|
101
|
-
# return super(Cache, self).pop(key)
|
102
|
-
return super(Cache, self).pop(key, default)
|
103
|
-
pop = locked(_acquire, _release)(pop)
|
104
|
-
|
105
|
-
def popitem(self):
|
106
|
-
raise NotImplementedError()
|
107
|
-
|
108
|
-
def setdefault(self, key, default=None):
|
109
|
-
raise NotImplementedError()
|
110
|
-
|
111
|
-
def update(self, other):
|
112
|
-
raise NotImplementedError()
|
113
|
-
|
114
|
-
|