bee_python 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +202 -0
- data/build/README +23 -0
- data/egg/egg/build.yml +70 -0
- data/egg/egg/ez_setup.py +280 -0
- data/egg/egg/script.py +12 -0
- data/egg/egg/setup.erb +11 -0
- data/egg/egg/suite.py +37 -0
- data/egg/egg/test.py +31 -0
- data/egg/egg.yml +69 -0
- data/egg/http/build.erb +53 -0
- data/egg/http/server.py +34 -0
- data/egg/http.yml +50 -0
- data/egg/mysql/mysql.py +43 -0
- data/egg/mysql.yml +44 -0
- data/egg/project/build.erb +77 -0
- data/egg/project/script.py +42 -0
- data/egg/project/test.py +31 -0
- data/egg/project.yml +59 -0
- data/egg/script/build.erb +35 -0
- data/egg/script/script.py +42 -0
- data/egg/script.yml +50 -0
- data/egg/soap/build.erb +52 -0
- data/egg/soap/client.py +18 -0
- data/egg/soap/server.py +30 -0
- data/egg/soap.yml +58 -0
- data/egg/source/source.py +42 -0
- data/egg/source.yml +47 -0
- data/egg/test/test.py +28 -0
- data/egg/test.yml +44 -0
- data/egg/xmlrpc/build.erb +52 -0
- data/egg/xmlrpc/client.py +22 -0
- data/egg/xmlrpc/server.py +24 -0
- data/egg/xmlrpc.yml +51 -0
- data/lib/bee_task_python.rb +390 -0
- data/test/build.yml +16 -0
- data/test/tc_bee_task_python.rb +27 -0
- data/test/test_build.rb +26 -0
- data/test/test_build_listener.rb +62 -0
- data/test/ts_bee_python.rb +26 -0
- data/tools/common/__init__.py +5 -0
- data/tools/common/common/__init__.py +140 -0
- data/tools/common/common/__pkginfo__.py +43 -0
- data/tools/common/common/adbh.py +35 -0
- data/tools/common/common/cache.py +114 -0
- data/tools/common/common/changelog.py +234 -0
- data/tools/common/common/clcommands.py +181 -0
- data/tools/common/common/cli.py +212 -0
- data/tools/common/common/compat.py +328 -0
- data/tools/common/common/configuration.py +1087 -0
- data/tools/common/common/contexts.py +58 -0
- data/tools/common/common/corbautils.py +117 -0
- data/tools/common/common/daemon.py +171 -0
- data/tools/common/common/date.py +279 -0
- data/tools/common/common/db.py +49 -0
- data/tools/common/common/dbf.py +229 -0
- data/tools/common/common/debugger.py +208 -0
- data/tools/common/common/decorators.py +190 -0
- data/tools/common/common/deprecation.py +118 -0
- data/tools/common/common/fileutils.py +409 -0
- data/tools/common/common/graph.py +259 -0
- data/tools/common/common/html.py +142 -0
- data/tools/common/common/interface.py +76 -0
- data/tools/common/common/logging_ext.py +166 -0
- data/tools/common/common/modutils.py +670 -0
- data/tools/common/common/optik_ext.py +383 -0
- data/tools/common/common/optparser.py +92 -0
- data/tools/common/common/pdf_ext.py +111 -0
- data/tools/common/common/proc.py +276 -0
- data/tools/common/common/pyro_ext.py +146 -0
- data/tools/common/common/pytest.py +754 -0
- data/tools/common/common/shellutils.py +383 -0
- data/tools/common/common/sphinx_ext.py +87 -0
- data/tools/common/common/sphinxutils.py +122 -0
- data/tools/common/common/sqlgen.py +31 -0
- data/tools/common/common/table.py +930 -0
- data/tools/common/common/tasksqueue.py +97 -0
- data/tools/common/common/test/__init__.py +1 -0
- data/tools/common/common/test/data/ChangeLog +184 -0
- data/tools/common/common/test/data/MyPyPa-0.1.0-py2.5.egg +0 -0
- data/tools/common/common/test/data/__init__.py +1 -0
- data/tools/common/common/test/data/content_differ_dir/NOTHING +0 -0
- data/tools/common/common/test/data/content_differ_dir/README +1 -0
- data/tools/common/common/test/data/content_differ_dir/subdir/coin +1 -0
- data/tools/common/common/test/data/content_differ_dir/subdir/toto.txt +53 -0
- data/tools/common/common/test/data/file_differ_dir/NOTHING +0 -0
- data/tools/common/common/test/data/file_differ_dir/README +1 -0
- data/tools/common/common/test/data/file_differ_dir/subdir/toto.txt +53 -0
- 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 +9 -0
- data/tools/common/common/test/data/module.py +88 -0
- data/tools/common/common/test/data/module2.py +77 -0
- data/tools/common/common/test/data/newlines.txt +3 -0
- data/tools/common/common/test/data/noendingnewline.py +36 -0
- data/tools/common/common/test/data/nonregr.py +14 -0
- 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 +1 -0
- data/tools/common/common/test/data/reference_dir/subdir/coin +1 -0
- data/tools/common/common/test/data/reference_dir/subdir/toto.txt +53 -0
- data/tools/common/common/test/data/same_dir/NOTHING +0 -0
- data/tools/common/common/test/data/same_dir/README +1 -0
- data/tools/common/common/test/data/same_dir/subdir/coin +1 -0
- data/tools/common/common/test/data/same_dir/subdir/toto.txt +53 -0
- data/tools/common/common/test/data/spam.txt +9 -0
- data/tools/common/common/test/data/sub/doc.txt +1 -0
- data/tools/common/common/test/data/sub/momo.py +1 -0
- data/tools/common/common/test/data/subdir_differ_dir/NOTHING +0 -0
- data/tools/common/common/test/data/subdir_differ_dir/README +1 -0
- data/tools/common/common/test/data/subdir_differ_dir/subdir/coin +1 -0
- data/tools/common/common/test/data/subdir_differ_dir/subdir/toto.txt +53 -0
- data/tools/common/common/test/data/test.ini +20 -0
- data/tools/common/common/test/data/test1.msg +30 -0
- data/tools/common/common/test/data/test2.msg +42 -0
- data/tools/common/common/test/data/write_protected_file.txt +0 -0
- data/tools/common/common/test/foomod.py +17 -0
- data/tools/common/common/test/unittest_cache.py +129 -0
- data/tools/common/common/test/unittest_changelog.py +37 -0
- data/tools/common/common/test/unittest_compat.py +239 -0
- data/tools/common/common/test/unittest_configuration.py +348 -0
- data/tools/common/common/test/unittest_date.py +154 -0
- data/tools/common/common/test/unittest_decorators.py +62 -0
- data/tools/common/common/test/unittest_deprecation.py +76 -0
- data/tools/common/common/test/unittest_fileutils.py +133 -0
- data/tools/common/common/test/unittest_graph.py +50 -0
- data/tools/common/common/test/unittest_html.py +76 -0
- data/tools/common/common/test/unittest_interface.py +87 -0
- data/tools/common/common/test/unittest_modutils.py +244 -0
- data/tools/common/common/test/unittest_pytest.py +50 -0
- data/tools/common/common/test/unittest_shellutils.py +248 -0
- data/tools/common/common/test/unittest_table.py +448 -0
- data/tools/common/common/test/unittest_taskqueue.py +71 -0
- data/tools/common/common/test/unittest_testlib.py +956 -0
- data/tools/common/common/test/unittest_textutils.py +247 -0
- data/tools/common/common/test/unittest_tree.py +248 -0
- data/tools/common/common/test/unittest_umessage.py +55 -0
- data/tools/common/common/test/unittest_ureports_html.py +64 -0
- data/tools/common/common/test/unittest_ureports_text.py +105 -0
- data/tools/common/common/test/unittest_xmlutils.py +75 -0
- data/tools/common/common/test/utils.py +87 -0
- data/tools/common/common/testlib.py +1927 -0
- data/tools/common/common/textutils.py +476 -0
- data/tools/common/common/tree.py +372 -0
- data/tools/common/common/umessage.py +161 -0
- data/tools/common/common/ureports/__init__.py +174 -0
- data/tools/common/common/ureports/docbook_writer.py +139 -0
- data/tools/common/common/ureports/html_writer.py +131 -0
- data/tools/common/common/ureports/nodes.py +201 -0
- data/tools/common/common/ureports/text_writer.py +140 -0
- data/tools/common/common/vcgutils.py +216 -0
- data/tools/common/common/visitor.py +107 -0
- data/tools/common/common/xmlrpcutils.py +136 -0
- data/tools/common/common/xmlutils.py +61 -0
- data/tools/compile/compile.py +16 -0
- data/tools/coverage/coverage.py +602 -0
- data/tools/epydoc/__init__.py +227 -0
- data/tools/epydoc/__init__.pyc +0 -0
- data/tools/epydoc/apidoc.py +2203 -0
- data/tools/epydoc/apidoc.pyc +0 -0
- data/tools/epydoc/checker.py +349 -0
- data/tools/epydoc/checker.pyc +0 -0
- data/tools/epydoc/cli.py +1470 -0
- data/tools/epydoc/cli.pyc +0 -0
- data/tools/epydoc/compat.py +250 -0
- data/tools/epydoc/compat.pyc +0 -0
- data/tools/epydoc/docbuilder.py +1358 -0
- data/tools/epydoc/docbuilder.pyc +0 -0
- data/tools/epydoc/docintrospecter.py +1056 -0
- data/tools/epydoc/docintrospecter.pyc +0 -0
- data/tools/epydoc/docparser.py +2113 -0
- data/tools/epydoc/docparser.pyc +0 -0
- data/tools/epydoc/docstringparser.py +1111 -0
- data/tools/epydoc/docstringparser.pyc +0 -0
- data/tools/epydoc/docwriter/__init__.py +12 -0
- data/tools/epydoc/docwriter/__init__.pyc +0 -0
- data/tools/epydoc/docwriter/dotgraph.py +1351 -0
- data/tools/epydoc/docwriter/dotgraph.pyc +0 -0
- data/tools/epydoc/docwriter/html.py +3491 -0
- data/tools/epydoc/docwriter/html.pyc +0 -0
- data/tools/epydoc/docwriter/html_colorize.py +909 -0
- data/tools/epydoc/docwriter/html_colorize.pyc +0 -0
- data/tools/epydoc/docwriter/html_css.py +550 -0
- data/tools/epydoc/docwriter/html_css.pyc +0 -0
- data/tools/epydoc/docwriter/html_help.py +190 -0
- data/tools/epydoc/docwriter/html_help.pyc +0 -0
- data/tools/epydoc/docwriter/latex.py +1187 -0
- data/tools/epydoc/docwriter/latex.pyc +0 -0
- data/tools/epydoc/docwriter/plaintext.py +276 -0
- data/tools/epydoc/docwriter/plaintext.pyc +0 -0
- data/tools/epydoc/docwriter/xlink.py +505 -0
- data/tools/epydoc/docwriter/xlink.pyc +0 -0
- data/tools/epydoc/gui.py +1148 -0
- data/tools/epydoc/gui.pyc +0 -0
- data/tools/epydoc/log.py +204 -0
- data/tools/epydoc/log.pyc +0 -0
- data/tools/epydoc/markup/__init__.py +623 -0
- data/tools/epydoc/markup/__init__.pyc +0 -0
- data/tools/epydoc/markup/doctest.py +311 -0
- data/tools/epydoc/markup/doctest.pyc +0 -0
- data/tools/epydoc/markup/epytext.py +2116 -0
- data/tools/epydoc/markup/epytext.pyc +0 -0
- data/tools/epydoc/markup/javadoc.py +250 -0
- data/tools/epydoc/markup/javadoc.pyc +0 -0
- data/tools/epydoc/markup/plaintext.py +78 -0
- data/tools/epydoc/markup/plaintext.pyc +0 -0
- data/tools/epydoc/markup/pyval_repr.py +532 -0
- data/tools/epydoc/markup/pyval_repr.pyc +0 -0
- data/tools/epydoc/markup/restructuredtext.py +906 -0
- data/tools/epydoc/markup/restructuredtext.pyc +0 -0
- data/tools/epydoc/test/__init__.py +97 -0
- data/tools/epydoc/test/__init__.pyc +0 -0
- data/tools/epydoc/test/util.py +226 -0
- data/tools/epydoc/test/util.pyc +0 -0
- data/tools/epydoc/util.py +289 -0
- data/tools/epydoc/util.pyc +0 -0
- data/tools/logilab/logilab/__init__.py +5 -0
- data/tools/logilab/logilab/astng/__init__.py +82 -0
- data/tools/logilab/logilab/astng/__pkginfo__.py +76 -0
- data/tools/logilab/logilab/astng/_exceptions.py +64 -0
- data/tools/logilab/logilab/astng/_nodes_ast.py +667 -0
- data/tools/logilab/logilab/astng/_nodes_compiler.py +758 -0
- data/tools/logilab/logilab/astng/bases.py +608 -0
- data/tools/logilab/logilab/astng/builder.py +239 -0
- data/tools/logilab/logilab/astng/inference.py +426 -0
- data/tools/logilab/logilab/astng/inspector.py +289 -0
- data/tools/logilab/logilab/astng/manager.py +421 -0
- data/tools/logilab/logilab/astng/mixins.py +165 -0
- data/tools/logilab/logilab/astng/node_classes.py +848 -0
- data/tools/logilab/logilab/astng/nodes.py +85 -0
- data/tools/logilab/logilab/astng/nodes_as_string.py +389 -0
- data/tools/logilab/logilab/astng/patchcomptransformer.py +159 -0
- data/tools/logilab/logilab/astng/protocols.py +333 -0
- data/tools/logilab/logilab/astng/raw_building.py +212 -0
- data/tools/logilab/logilab/astng/rebuilder.py +307 -0
- data/tools/logilab/logilab/astng/scoped_nodes.py +951 -0
- data/tools/logilab/logilab/astng/test/__init__.py +19 -0
- 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 +33 -0
- data/tools/logilab/logilab/astng/test/data/SSL1/__init__.py +20 -0
- data/tools/logilab/logilab/astng/test/data/__init__.py +20 -0
- data/tools/logilab/logilab/astng/test/data/all.py +29 -0
- data/tools/logilab/logilab/astng/test/data/appl/__init__.py +23 -0
- data/tools/logilab/logilab/astng/test/data/appl/myConnection.py +30 -0
- data/tools/logilab/logilab/astng/test/data/format.py +34 -0
- data/tools/logilab/logilab/astng/test/data/module.py +90 -0
- data/tools/logilab/logilab/astng/test/data/module2.py +112 -0
- data/tools/logilab/logilab/astng/test/data/noendingnewline.py +57 -0
- data/tools/logilab/logilab/astng/test/data/nonregr.py +76 -0
- data/tools/logilab/logilab/astng/test/data/notall.py +28 -0
- data/tools/logilab/logilab/astng/test/data2/__init__.py +20 -0
- data/tools/logilab/logilab/astng/test/data2/clientmodule_test.py +51 -0
- data/tools/logilab/logilab/astng/test/data2/suppliermodule_test.py +32 -0
- data/tools/logilab/logilab/astng/test/regrtest.py +135 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/absimport.py +22 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/descriptor_crash.py +31 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/import_package_subpackage_module.py +68 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/package/__init__.py +24 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/__init__.py +20 -0
- data/tools/logilab/logilab/astng/test/regrtest_data/package/subpackage/module.py +20 -0
- data/tools/logilab/logilab/astng/test/unittest_builder.py +684 -0
- data/tools/logilab/logilab/astng/test/unittest_inference.py +1112 -0
- data/tools/logilab/logilab/astng/test/unittest_inspector.py +105 -0
- data/tools/logilab/logilab/astng/test/unittest_lookup.py +302 -0
- data/tools/logilab/logilab/astng/test/unittest_manager.py +98 -0
- data/tools/logilab/logilab/astng/test/unittest_nodes.py +302 -0
- data/tools/logilab/logilab/astng/test/unittest_scoped_nodes.py +501 -0
- data/tools/logilab/logilab/astng/test/unittest_utils.py +104 -0
- data/tools/logilab/logilab/astng/utils.py +342 -0
- data/tools/logilab/logilab/common/__init__.py +140 -0
- data/tools/logilab/logilab/common/__pkginfo__.py +43 -0
- data/tools/logilab/logilab/common/adbh.py +35 -0
- data/tools/logilab/logilab/common/cache.py +114 -0
- data/tools/logilab/logilab/common/changelog.py +234 -0
- data/tools/logilab/logilab/common/clcommands.py +181 -0
- data/tools/logilab/logilab/common/cli.py +212 -0
- data/tools/logilab/logilab/common/compat.py +328 -0
- data/tools/logilab/logilab/common/configuration.py +1087 -0
- data/tools/logilab/logilab/common/contexts.py +58 -0
- data/tools/logilab/logilab/common/corbautils.py +117 -0
- data/tools/logilab/logilab/common/daemon.py +171 -0
- data/tools/logilab/logilab/common/date.py +279 -0
- data/tools/logilab/logilab/common/db.py +49 -0
- data/tools/logilab/logilab/common/dbf.py +229 -0
- data/tools/logilab/logilab/common/debugger.py +208 -0
- data/tools/logilab/logilab/common/decorators.py +190 -0
- data/tools/logilab/logilab/common/deprecation.py +118 -0
- data/tools/logilab/logilab/common/fileutils.py +409 -0
- data/tools/logilab/logilab/common/graph.py +259 -0
- data/tools/logilab/logilab/common/html.py +142 -0
- data/tools/logilab/logilab/common/interface.py +76 -0
- data/tools/logilab/logilab/common/logging_ext.py +166 -0
- data/tools/logilab/logilab/common/modutils.py +670 -0
- data/tools/logilab/logilab/common/optik_ext.py +383 -0
- data/tools/logilab/logilab/common/optparser.py +92 -0
- data/tools/logilab/logilab/common/pdf_ext.py +111 -0
- data/tools/logilab/logilab/common/proc.py +276 -0
- data/tools/logilab/logilab/common/pyro_ext.py +146 -0
- data/tools/logilab/logilab/common/pytest.py +754 -0
- data/tools/logilab/logilab/common/shellutils.py +383 -0
- data/tools/logilab/logilab/common/sphinx_ext.py +87 -0
- data/tools/logilab/logilab/common/sphinxutils.py +122 -0
- data/tools/logilab/logilab/common/sqlgen.py +31 -0
- data/tools/logilab/logilab/common/table.py +930 -0
- data/tools/logilab/logilab/common/tasksqueue.py +97 -0
- data/tools/logilab/logilab/common/test/__init__.py +1 -0
- data/tools/logilab/logilab/common/test/data/ChangeLog +184 -0
- 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 +1 -0
- data/tools/logilab/logilab/common/test/data/content_differ_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/content_differ_dir/README +1 -0
- data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/coin +1 -0
- data/tools/logilab/logilab/common/test/data/content_differ_dir/subdir/toto.txt +53 -0
- data/tools/logilab/logilab/common/test/data/file_differ_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/file_differ_dir/README +1 -0
- data/tools/logilab/logilab/common/test/data/file_differ_dir/subdir/toto.txt +53 -0
- 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 +9 -0
- data/tools/logilab/logilab/common/test/data/module.py +88 -0
- data/tools/logilab/logilab/common/test/data/module2.py +77 -0
- data/tools/logilab/logilab/common/test/data/newlines.txt +3 -0
- data/tools/logilab/logilab/common/test/data/noendingnewline.py +36 -0
- data/tools/logilab/logilab/common/test/data/nonregr.py +14 -0
- 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 +1 -0
- data/tools/logilab/logilab/common/test/data/reference_dir/subdir/coin +1 -0
- data/tools/logilab/logilab/common/test/data/reference_dir/subdir/toto.txt +53 -0
- data/tools/logilab/logilab/common/test/data/same_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/same_dir/README +1 -0
- data/tools/logilab/logilab/common/test/data/same_dir/subdir/coin +1 -0
- data/tools/logilab/logilab/common/test/data/same_dir/subdir/toto.txt +53 -0
- data/tools/logilab/logilab/common/test/data/spam.txt +9 -0
- data/tools/logilab/logilab/common/test/data/sub/doc.txt +1 -0
- data/tools/logilab/logilab/common/test/data/sub/momo.py +1 -0
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/NOTHING +0 -0
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/README +1 -0
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/coin +1 -0
- data/tools/logilab/logilab/common/test/data/subdir_differ_dir/subdir/toto.txt +53 -0
- data/tools/logilab/logilab/common/test/data/test.ini +20 -0
- data/tools/logilab/logilab/common/test/data/test1.msg +30 -0
- data/tools/logilab/logilab/common/test/data/test2.msg +42 -0
- data/tools/logilab/logilab/common/test/data/write_protected_file.txt +0 -0
- data/tools/logilab/logilab/common/test/foomod.py +17 -0
- data/tools/logilab/logilab/common/test/unittest_cache.py +129 -0
- data/tools/logilab/logilab/common/test/unittest_changelog.py +37 -0
- data/tools/logilab/logilab/common/test/unittest_compat.py +239 -0
- data/tools/logilab/logilab/common/test/unittest_configuration.py +348 -0
- data/tools/logilab/logilab/common/test/unittest_date.py +154 -0
- data/tools/logilab/logilab/common/test/unittest_decorators.py +62 -0
- data/tools/logilab/logilab/common/test/unittest_deprecation.py +76 -0
- data/tools/logilab/logilab/common/test/unittest_fileutils.py +133 -0
- data/tools/logilab/logilab/common/test/unittest_graph.py +50 -0
- data/tools/logilab/logilab/common/test/unittest_html.py +76 -0
- data/tools/logilab/logilab/common/test/unittest_interface.py +87 -0
- data/tools/logilab/logilab/common/test/unittest_modutils.py +244 -0
- data/tools/logilab/logilab/common/test/unittest_pytest.py +50 -0
- data/tools/logilab/logilab/common/test/unittest_shellutils.py +248 -0
- data/tools/logilab/logilab/common/test/unittest_table.py +448 -0
- data/tools/logilab/logilab/common/test/unittest_taskqueue.py +71 -0
- data/tools/logilab/logilab/common/test/unittest_testlib.py +956 -0
- data/tools/logilab/logilab/common/test/unittest_textutils.py +247 -0
- data/tools/logilab/logilab/common/test/unittest_tree.py +248 -0
- data/tools/logilab/logilab/common/test/unittest_umessage.py +55 -0
- data/tools/logilab/logilab/common/test/unittest_ureports_html.py +64 -0
- data/tools/logilab/logilab/common/test/unittest_ureports_text.py +105 -0
- data/tools/logilab/logilab/common/test/unittest_xmlutils.py +75 -0
- data/tools/logilab/logilab/common/test/utils.py +87 -0
- data/tools/logilab/logilab/common/testlib.py +1927 -0
- data/tools/logilab/logilab/common/textutils.py +476 -0
- data/tools/logilab/logilab/common/tree.py +372 -0
- data/tools/logilab/logilab/common/umessage.py +161 -0
- data/tools/logilab/logilab/common/ureports/__init__.py +174 -0
- data/tools/logilab/logilab/common/ureports/docbook_writer.py +139 -0
- data/tools/logilab/logilab/common/ureports/html_writer.py +131 -0
- data/tools/logilab/logilab/common/ureports/nodes.py +201 -0
- data/tools/logilab/logilab/common/ureports/text_writer.py +140 -0
- data/tools/logilab/logilab/common/vcgutils.py +216 -0
- data/tools/logilab/logilab/common/visitor.py +107 -0
- data/tools/logilab/logilab/common/xmlrpcutils.py +136 -0
- data/tools/logilab/logilab/common/xmlutils.py +61 -0
- data/tools/pychecker/COPYRIGHT +31 -0
- data/tools/pychecker/ChangeLog +349 -0
- data/tools/pychecker/CodeChecks.py +1969 -0
- data/tools/pychecker/CodeChecks.pyc +0 -0
- data/tools/pychecker/CodeChecks.pyo +0 -0
- data/tools/pychecker/Config.py +475 -0
- data/tools/pychecker/Config.pyc +0 -0
- data/tools/pychecker/Config.pyo +0 -0
- data/tools/pychecker/KNOWN_BUGS +100 -0
- data/tools/pychecker/MAINTAINERS +81 -0
- data/tools/pychecker/NEWS +406 -0
- data/tools/pychecker/OP.py +131 -0
- data/tools/pychecker/OP.pyc +0 -0
- data/tools/pychecker/OP.pyo +0 -0
- data/tools/pychecker/OptionTypes.py +117 -0
- data/tools/pychecker/OptionTypes.pyc +0 -0
- data/tools/pychecker/OptionTypes.pyo +0 -0
- data/tools/pychecker/README +152 -0
- data/tools/pychecker/Stack.py +115 -0
- data/tools/pychecker/Stack.pyc +0 -0
- data/tools/pychecker/Stack.pyo +0 -0
- data/tools/pychecker/TODO +101 -0
- data/tools/pychecker/VERSION +1 -0
- data/tools/pychecker/Warning.py +50 -0
- data/tools/pychecker/Warning.pyc +0 -0
- data/tools/pychecker/Warning.pyo +0 -0
- data/tools/pychecker/__init__.py +17 -0
- data/tools/pychecker/__init__.pyc +0 -0
- data/tools/pychecker/__init__.pyo +0 -0
- data/tools/pychecker/checker.py +961 -0
- data/tools/pychecker/checker.pyc +0 -0
- data/tools/pychecker/checker.pyo +0 -0
- data/tools/pychecker/function.py +159 -0
- data/tools/pychecker/function.pyc +0 -0
- data/tools/pychecker/function.pyo +0 -0
- data/tools/pychecker/msgs.py +175 -0
- data/tools/pychecker/msgs.pyc +0 -0
- data/tools/pychecker/msgs.pyo +0 -0
- data/tools/pychecker/options.py +275 -0
- data/tools/pychecker/options.pyc +0 -0
- data/tools/pychecker/options.pyo +0 -0
- data/tools/pychecker/pcmodules.py +19 -0
- data/tools/pychecker/pcmodules.pyc +0 -0
- data/tools/pychecker/pcmodules.pyo +0 -0
- data/tools/pychecker/printer.py +47 -0
- data/tools/pychecker/printer.pyc +0 -0
- data/tools/pychecker/printer.pyo +0 -0
- data/tools/pychecker/python.py +427 -0
- data/tools/pychecker/python.pyc +0 -0
- data/tools/pychecker/python.pyo +0 -0
- data/tools/pychecker/utils.py +102 -0
- data/tools/pychecker/utils.pyc +0 -0
- data/tools/pychecker/utils.pyo +0 -0
- data/tools/pychecker/warn.py +778 -0
- data/tools/pychecker/warn.pyc +0 -0
- data/tools/pychecker/warn.pyo +0 -0
- data/tools/pylint2/pylint/__init__.py +16 -0
- data/tools/pylint2/pylint/__pkginfo__.py +67 -0
- data/tools/pylint2/pylint/checkers/__init__.py +155 -0
- data/tools/pylint2/pylint/checkers/base.py +749 -0
- data/tools/pylint2/pylint/checkers/classes.py +527 -0
- data/tools/pylint2/pylint/checkers/design_analysis.py +344 -0
- data/tools/pylint2/pylint/checkers/exceptions.py +183 -0
- data/tools/pylint2/pylint/checkers/format.py +367 -0
- data/tools/pylint2/pylint/checkers/imports.py +379 -0
- data/tools/pylint2/pylint/checkers/logging.py +98 -0
- data/tools/pylint2/pylint/checkers/misc.py +128 -0
- data/tools/pylint2/pylint/checkers/newstyle.py +107 -0
- data/tools/pylint2/pylint/checkers/raw_metrics.py +125 -0
- data/tools/pylint2/pylint/checkers/similar.py +333 -0
- data/tools/pylint2/pylint/checkers/string_format.py +239 -0
- data/tools/pylint2/pylint/checkers/typecheck.py +364 -0
- data/tools/pylint2/pylint/checkers/utils.py +208 -0
- data/tools/pylint2/pylint/checkers/variables.py +498 -0
- data/tools/pylint2/pylint/config.py +149 -0
- data/tools/pylint2/pylint/epylint.py +149 -0
- data/tools/pylint2/pylint/gui.py +433 -0
- data/tools/pylint2/pylint/interfaces.py +98 -0
- data/tools/pylint2/pylint/lint.py +914 -0
- data/tools/pylint2/pylint/pyreverse/__init__.py +5 -0
- data/tools/pylint2/pylint/pyreverse/diadefslib.py +229 -0
- data/tools/pylint2/pylint/pyreverse/diagrams.py +247 -0
- data/tools/pylint2/pylint/pyreverse/main.py +123 -0
- data/tools/pylint2/pylint/pyreverse/utils.py +131 -0
- data/tools/pylint2/pylint/pyreverse/writer.py +196 -0
- data/tools/pylint2/pylint/reporters/__init__.py +67 -0
- data/tools/pylint2/pylint/reporters/guireporter.py +36 -0
- data/tools/pylint2/pylint/reporters/html.py +69 -0
- data/tools/pylint2/pylint/reporters/text.py +156 -0
- data/tools/pylint2/pylint/utils.py +518 -0
- data/tools/pylint2/pylint.py +16 -0
- data/tools/test/suite.py +35 -0
- metadata +566 -0
@@ -0,0 +1,152 @@
|
|
1
|
+
|
2
|
+
PyChecker is a tool for finding bugs in python source code.
|
3
|
+
It finds problems that are typically caught by a compiler for less
|
4
|
+
dynamic languages, like C and C++. It is similar to lint.
|
5
|
+
Because of the dynamic nature of python, some warnings
|
6
|
+
may be incorrect; however, spurious warnings should be fairly infrequent.
|
7
|
+
|
8
|
+
PyChecker works in a combination of ways. First, it imports each
|
9
|
+
module. If there is an import error, the module cannot be processed.
|
10
|
+
The import provides some basic information about the module. The code
|
11
|
+
for each function, class, and method is checked for possible problems.
|
12
|
+
|
13
|
+
Types of problems that can be found include:
|
14
|
+
|
15
|
+
* No global found (e.g., using a module without importing it)
|
16
|
+
* Passing the wrong number of parameters to functions/methods/constructors
|
17
|
+
* Passing the wrong number of parameters to builtin functions & methods
|
18
|
+
* Using format strings that don't match arguments
|
19
|
+
* Using class methods and attributes that don't exist
|
20
|
+
* Changing signature when overriding a method
|
21
|
+
* Redefining a function/class/method in the same scope
|
22
|
+
* Using a variable before setting it
|
23
|
+
* self not the first parameter to a method
|
24
|
+
* Unused globals and locals (module or variable)
|
25
|
+
* Unused function/method arguments (can ignore self)
|
26
|
+
* No doc strings in modules, classes, functions, and methods
|
27
|
+
|
28
|
+
Using PyChecker
|
29
|
+
---------------
|
30
|
+
To use PyChecker, pass the python source files you want to check
|
31
|
+
on the command line:
|
32
|
+
|
33
|
+
pychecker file1.py file2.py ...
|
34
|
+
|
35
|
+
Note: On Windows, use pychecker.bat. You may also need to add
|
36
|
+
python/scripts to your PATH.
|
37
|
+
|
38
|
+
pychecker and pychecker.bat will only exist if pychecker has been
|
39
|
+
installed. To install, do: python setup.py install
|
40
|
+
|
41
|
+
Note: If you haven't installed pychecker, it can be run by doing:
|
42
|
+
python pychecker/checker.py
|
43
|
+
|
44
|
+
An alternate way to use PyChecker is to import it in your code.
|
45
|
+
See 'Importing PyChecker' below for more details.
|
46
|
+
|
47
|
+
If there are import dependencies in your source files, you should
|
48
|
+
import those files first on the command line in order to get as many
|
49
|
+
files checked as possible.
|
50
|
+
|
51
|
+
PyChecker works with Python 2.0 through 2.3.
|
52
|
+
Some features don't work on earlier versions of Python.
|
53
|
+
I only regularly test with versions 2.2 and 2.3.
|
54
|
+
|
55
|
+
You can use the test files as examples:
|
56
|
+
|
57
|
+
pychecker [options] test_input/*.py
|
58
|
+
|
59
|
+
If you want to change the default behaviour, you can pass command line options
|
60
|
+
or define a .pycheckrc file. For an example, look at pycheckrc.
|
61
|
+
|
62
|
+
To show the available options, do:
|
63
|
+
|
64
|
+
pychecker -h
|
65
|
+
|
66
|
+
Some of the most common options are:
|
67
|
+
|
68
|
+
--only only warn about files passed on the command line [off]
|
69
|
+
-#, --limit the maximum number of warnings to be displayed [10]
|
70
|
+
-s, --shadowbuiltin check if a variable shadows a builtin [on]
|
71
|
+
-q, --stdlib ignore warnings from files under standard library [off]
|
72
|
+
-T, --argsused unused method/function arguments [on]
|
73
|
+
|
74
|
+
There is a simple GUI which is not maintained much. It is good
|
75
|
+
for showing all the options and also allows you to run pychecker.
|
76
|
+
To run options, you will need to start it manually:
|
77
|
+
|
78
|
+
python pychecker/options.py
|
79
|
+
|
80
|
+
If you want to suppress warnings on a module/function/class/method,
|
81
|
+
you can define a suppressions dictionary in .pycheckrc.
|
82
|
+
Examples of keys are: 'module', 'module.function',
|
83
|
+
'module.class', 'module.class.method', etc.
|
84
|
+
|
85
|
+
You can also define suppressions in your code by doing:
|
86
|
+
|
87
|
+
__pychecker__ = 'no-namedargs maxreturns=0 unusednames=foo,bar'
|
88
|
+
|
89
|
+
The format for __pychecker__ values and values in the suppressions dictionary
|
90
|
+
are the same. Dashes (--) are optional when preceding long option names.
|
91
|
+
|
92
|
+
Importing PyChecker
|
93
|
+
-------------------
|
94
|
+
You can import PyChecker in your code's main module, by doing:
|
95
|
+
|
96
|
+
import pychecker.checker
|
97
|
+
|
98
|
+
This will allow each module imported after PyChecker to be checked
|
99
|
+
(other than the main module). NOTE: Modules imported before PyChecker
|
100
|
+
will not be checked. Warnings will be displayed on stdout
|
101
|
+
(ie, PyChecker uses print).
|
102
|
+
|
103
|
+
Since you can't pass command line parameters, you can do:
|
104
|
+
|
105
|
+
os.environ['PYCHECKER'] = 'command line options here'
|
106
|
+
|
107
|
+
This is equivalent of setting PYCHECKER in the shell environment:
|
108
|
+
|
109
|
+
PYCHECKER='no-namedargs maxreturns=0' /path/to/your/program
|
110
|
+
|
111
|
+
If you want to disable the warnings (and processing done by PyChecker),
|
112
|
+
prior to importing PyChecker, do:
|
113
|
+
|
114
|
+
os.environ['PYCHECKER_DISABLED'] = 1
|
115
|
+
|
116
|
+
This is equivalent of setting PYCHECKER_DISABLED in the shell environment:
|
117
|
+
|
118
|
+
PYCHECKER_DISABLED=1 /path/to/your/program
|
119
|
+
|
120
|
+
Internal Errors
|
121
|
+
---------------
|
122
|
+
If you find a bug in PyChecker, meaning you see something like:
|
123
|
+
|
124
|
+
pychecker myfile.py
|
125
|
+
|
126
|
+
myfile.py:13 INTERNAL ERROR -- STOPPED PROCESSING FUNCTION --
|
127
|
+
Traceback (most recent call last):
|
128
|
+
File "./pychecker/warn.py", line 364, in _checkFunction
|
129
|
+
stack, oparg, lastLineNum)
|
130
|
+
File "./pychecker/warn.py", line 195, in _handleFunctionCall
|
131
|
+
kwArgs.append(stack[i].data)
|
132
|
+
IndexError: list index out of range
|
133
|
+
|
134
|
+
Please post a bug in the SourceForge Tracker
|
135
|
+
(https://sourceforge.net/tracker/?atid=382217&group_id=24686&func=browse)
|
136
|
+
or send mail indicating the version of PyChecker, *your source file*
|
137
|
+
which broke PyChecker (myfile.py in the example above), and the traceback.
|
138
|
+
It is very helpful to provide a simple test case to demonstrate the problem.
|
139
|
+
It helps to have the entire file and all the dependencies if you cannot
|
140
|
+
produce a simple test case. But if you can't provide a test case nor
|
141
|
+
the file(s), I may be able to figure out the problem with just the line
|
142
|
+
which broke PyChecker (myfile.py:13 in the example above).
|
143
|
+
|
144
|
+
Good Luck! As always, feedback is greatly appreciated.
|
145
|
+
|
146
|
+
Neal
|
147
|
+
pychecker-list@lists.sourceforge.net
|
148
|
+
|
149
|
+
PyChecker can be found on SourceForge at:
|
150
|
+
http://pychecker.sourceforge.net/
|
151
|
+
http://sourceforge.net/projects/pychecker
|
152
|
+
|
@@ -0,0 +1,115 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2001-2002, MetaSlash Inc. All rights reserved.
|
4
|
+
|
5
|
+
"""
|
6
|
+
Module to hold manipulation of elements on the stack.
|
7
|
+
"""
|
8
|
+
|
9
|
+
import types
|
10
|
+
from pychecker import utils
|
11
|
+
|
12
|
+
DATA_UNKNOWN = "-unknown-"
|
13
|
+
LOCALS = 'locals'
|
14
|
+
|
15
|
+
# These should really be defined by subclasses
|
16
|
+
TYPE_UNKNOWN = "-unknown-"
|
17
|
+
TYPE_FUNC_RETURN = "-return-value-"
|
18
|
+
TYPE_ATTRIBUTE = "-attribute-"
|
19
|
+
TYPE_COMPARISON = "-comparison-"
|
20
|
+
TYPE_GLOBAL = "-global-"
|
21
|
+
TYPE_EXCEPT = "-except-"
|
22
|
+
|
23
|
+
class Item :
|
24
|
+
"Representation of data on the stack"
|
25
|
+
|
26
|
+
def __init__(self, data, dataType, const = 0, length = 0) :
|
27
|
+
self.data = data
|
28
|
+
self.type = dataType
|
29
|
+
self.const = const
|
30
|
+
self.length = length
|
31
|
+
self.is_really_string = 0
|
32
|
+
|
33
|
+
def __str__(self) :
|
34
|
+
if type(self.data) == types.TupleType :
|
35
|
+
value = '('
|
36
|
+
for item in self.data :
|
37
|
+
value = value + utils.safestr(item) + ', '
|
38
|
+
# strip off the ', ' for multiple items
|
39
|
+
if len(self.data) > 1 :
|
40
|
+
value = value[:-2]
|
41
|
+
return value + ')'
|
42
|
+
return utils.safestr(self.data)
|
43
|
+
|
44
|
+
def __repr__(self):
|
45
|
+
return 'Stack Item: (%r, %r, %d)' % (self.data, self.type, self.const)
|
46
|
+
|
47
|
+
def isNone(self) :
|
48
|
+
return (self.type != TYPE_UNKNOWN and self.data is None or
|
49
|
+
(self.data == 'None' and not self.const))
|
50
|
+
|
51
|
+
def isImplicitNone(self) :
|
52
|
+
return self.data is None and self.const
|
53
|
+
|
54
|
+
def isMethodCall(self, c, methodArgName):
|
55
|
+
return self.type == TYPE_ATTRIBUTE and c != None and \
|
56
|
+
len(self.data) == 2 and self.data[0] == methodArgName
|
57
|
+
|
58
|
+
def isLocals(self) :
|
59
|
+
return self.type == types.DictType and self.data == LOCALS
|
60
|
+
|
61
|
+
def setStringType(self, value = types.StringType):
|
62
|
+
self.is_really_string = value == types.StringType
|
63
|
+
|
64
|
+
def getType(self, typeMap) :
|
65
|
+
if self.type != types.StringType or self.is_really_string:
|
66
|
+
return self.type
|
67
|
+
if self.const :
|
68
|
+
return type(self.data)
|
69
|
+
if type(self.data) == types.StringType :
|
70
|
+
localTypes = typeMap.get(self.data, [])
|
71
|
+
if len(localTypes) == 1 :
|
72
|
+
return localTypes[0]
|
73
|
+
return TYPE_UNKNOWN
|
74
|
+
|
75
|
+
def getName(self) :
|
76
|
+
if self.type == TYPE_ATTRIBUTE and type(self.data) != types.StringType:
|
77
|
+
strValue = ""
|
78
|
+
# convert the tuple into a string ('self', 'data') -> self.data
|
79
|
+
for item in self.data :
|
80
|
+
strValue = '%s.%s' % (strValue, utils.safestr(item))
|
81
|
+
return strValue[1:]
|
82
|
+
return utils.safestr(self.data)
|
83
|
+
|
84
|
+
def addAttribute(self, attr) :
|
85
|
+
if type(self.data) == types.TupleType :
|
86
|
+
self.data = self.data + (attr,)
|
87
|
+
else :
|
88
|
+
self.data = (self.data, attr)
|
89
|
+
self.type = TYPE_ATTRIBUTE
|
90
|
+
|
91
|
+
|
92
|
+
def makeDict(values = (), const = 1) :
|
93
|
+
values = tuple(values)
|
94
|
+
if not values:
|
95
|
+
values = ('<on-stack>',)
|
96
|
+
return Item(values, types.DictType, const, len(values))
|
97
|
+
|
98
|
+
def makeTuple(values = (), const = 1) :
|
99
|
+
return Item(tuple(values), types.TupleType, const, len(values))
|
100
|
+
|
101
|
+
def makeList(values = [], const = 1) :
|
102
|
+
return Item(values, types.ListType, const, len(values))
|
103
|
+
|
104
|
+
def makeFuncReturnValue(stackValue, argCount) :
|
105
|
+
data = DATA_UNKNOWN
|
106
|
+
# vars() without params == locals()
|
107
|
+
if stackValue.type == TYPE_GLOBAL and \
|
108
|
+
(stackValue.data == LOCALS or
|
109
|
+
(argCount == 0 and stackValue.data == 'vars')) :
|
110
|
+
data = LOCALS
|
111
|
+
return Item(data, TYPE_FUNC_RETURN)
|
112
|
+
|
113
|
+
def makeComparison(stackItems, comparison) :
|
114
|
+
return Item((stackItems[0], comparison, stackItems[1]), TYPE_COMPARISON)
|
115
|
+
|
Binary file
|
Binary file
|
@@ -0,0 +1,101 @@
|
|
1
|
+
Goals for next minor release:
|
2
|
+
-----------------------------
|
3
|
+
* Add warning for duplicated elif conditions
|
4
|
+
* Check for "if s.find(str):" s/b "if s.find(str) >= 0:" where s is a string
|
5
|
+
* Add warning for: x % x is always 0
|
6
|
+
* Add warning when using listcomp variable (x) outside of [... for x in ...]
|
7
|
+
* Add warning for import overriding builtin (from os import *)
|
8
|
+
* Add warning if defining a module name that's also in the stdlib
|
9
|
+
* Add decorator so you can do:
|
10
|
+
|
11
|
+
@pychecker(maxlocals=42)
|
12
|
+
def myfunc():
|
13
|
+
|
14
|
+
* Support function attributes in addition to __pychecker__
|
15
|
+
* Add warning when iterating over a dict (keys, values, items) and mutating it
|
16
|
+
* Add warning for __special_ or __special or _special__ etc.
|
17
|
+
* Add warning about redefining a function/method with different signatures
|
18
|
+
* Add warning when base class has similar name and same signature:
|
19
|
+
|
20
|
+
class Base:
|
21
|
+
def foobar():
|
22
|
+
class Sub(Base):
|
23
|
+
def foobaz(): # damn, I wanted to override foobar
|
24
|
+
|
25
|
+
* If unknown name, suggest similar names
|
26
|
+
|
27
|
+
* Check for return from finally (disables exception, default off?)
|
28
|
+
* Add another boolean warning for: if bool(xxx):
|
29
|
+
* Need way to configure broken (and non-broken) versions of evil C extensions
|
30
|
+
* Add estimated difficulty to research/fix error
|
31
|
+
* Shouldn't warn about using return value for generators
|
32
|
+
* Suppress argument (self) name warnings if func has no impl?
|
33
|
+
* Add warning for a variable that is constant
|
34
|
+
ie, initialized and used, but never changed
|
35
|
+
|
36
|
+
* Add warning for catching AttributeError when there is no attr access
|
37
|
+
ZeroDivisionError w/no division?
|
38
|
+
KeyError UnboundLocalError IndexError IndentationError ImportError
|
39
|
+
* Add warning for a import b & b import a (import loops)
|
40
|
+
* Check that classes with __slots__ don't get/set any other attributes
|
41
|
+
* Expectations of __methods__, constness (don't modify in __nonzero__)
|
42
|
+
* Add warning if dict has duplicate keys when creating from literals
|
43
|
+
* __new__ should use cls, not self???
|
44
|
+
|
45
|
+
* If arg has default value of None, check that arg is assigned some value
|
46
|
+
|
47
|
+
* check if returning self from __str__()
|
48
|
+
* check for str1 in str2 == otherValue
|
49
|
+
* Fix dependancy problem w/checkReturnValues & checkImplicitReturns
|
50
|
+
* check for use of self.attr before setting self.attr in __init__ method
|
51
|
+
* Handle sys.exit() as non-returnable condition
|
52
|
+
* Warn about non-escaping backslashes???
|
53
|
+
* vars() should use locals, like locals(), hmmm, it should already ...
|
54
|
+
|
55
|
+
Goals for next major release (0.9):
|
56
|
+
-----------------------------------
|
57
|
+
* Improve handling when importing packages (ie, don't import modules)
|
58
|
+
- Make a base class to handle stack operations
|
59
|
+
- Override base class with classes to handle module scope, functions, etc.
|
60
|
+
- Process module and create Module/Class/Function objects w/o dir(), etc.
|
61
|
+
- Finish tests: 44
|
62
|
+
* Add a config option to ignore certain cantankerous modules
|
63
|
+
|
64
|
+
* Add warning for global statement inside a conditional
|
65
|
+
* Fix spurious warnings for unreachable code checks
|
66
|
+
* Fix most of the FIXMEs
|
67
|
+
* Add check for import module (from within package p-should be import p.module)
|
68
|
+
- don't use relative imports, should always use absolute paths
|
69
|
+
|
70
|
+
Longer Term goals:
|
71
|
+
------------------
|
72
|
+
* Add check for magic #s/consts
|
73
|
+
(need dict of consts, count, max count, consts to ignore)
|
74
|
+
* Add check for unsupported operand type(s) for * + / etc
|
75
|
+
* Store types of globals, class attributes, function & method return values
|
76
|
+
* Output stats about pychecker's job, good, bad, otherwise...
|
77
|
+
annotate code for problem areas, well checked areas, etc.
|
78
|
+
* Add original line warnings for those that refer to another place
|
79
|
+
(e.g., overridden method doesn't match signature)
|
80
|
+
* Add capability to check features from a specified version of python
|
81
|
+
which is different from runtime interpreter
|
82
|
+
* Security checks for known issues. Adrian Likins @redhat recommends
|
83
|
+
looking at http://www.securesw.com/rats/
|
84
|
+
* Make check for 'self' a list instead of a string
|
85
|
+
* Check function return values - partially complete
|
86
|
+
* Add check that private functions are used in module/class
|
87
|
+
* Add check for using object members outside of class
|
88
|
+
* Add portability checks for win32/unix
|
89
|
+
* Add check for except: pass
|
90
|
+
* Spell check doc strings
|
91
|
+
|
92
|
+
# need to read source code for these:
|
93
|
+
* Add warning for unnecessary global stmts
|
94
|
+
* Add check for implicit string concatentation
|
95
|
+
* Add check for creating tuple when don't want a tuple, like: 1,
|
96
|
+
or not creating tuple when want one, like: (1)
|
97
|
+
* Warn when using () with statements (assert, print, del, if, while)
|
98
|
+
* Add check for <>, should use !=
|
99
|
+
* Find lines that end w/semi-colons (;)
|
100
|
+
* inconsistent camel-case
|
101
|
+
|
@@ -0,0 +1 @@
|
|
1
|
+
0.8.18
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env python
|
2
|
+
|
3
|
+
# Copyright (c) 2001, MetaSlash Inc. All rights reserved.
|
4
|
+
# Portions Copyright (c) 2005, Google, Inc. All rights reserved.
|
5
|
+
|
6
|
+
"""
|
7
|
+
Warning class to hold info about each warning.
|
8
|
+
"""
|
9
|
+
|
10
|
+
|
11
|
+
class Warning :
|
12
|
+
"Class which holds error information."
|
13
|
+
|
14
|
+
def __init__(self, file, line, err) :
|
15
|
+
if hasattr(file, "function") :
|
16
|
+
file = file.function.func_code.co_filename
|
17
|
+
elif hasattr(file, "co_filename") :
|
18
|
+
file = file.co_filename
|
19
|
+
elif hasattr(line, "co_filename") :
|
20
|
+
file = line.co_filename
|
21
|
+
if file[:2] == './' :
|
22
|
+
file = file[2:]
|
23
|
+
self.file = file
|
24
|
+
|
25
|
+
if hasattr(line, "co_firstlineno") :
|
26
|
+
line = line.co_firstlineno
|
27
|
+
if line == None :
|
28
|
+
line = 1
|
29
|
+
self.line = line
|
30
|
+
self.err = err
|
31
|
+
self.level = err.level
|
32
|
+
|
33
|
+
def __cmp__(self, warn) :
|
34
|
+
if warn == None :
|
35
|
+
return 1
|
36
|
+
if not self.file and not self.line:
|
37
|
+
return 1
|
38
|
+
if self.file != warn.file :
|
39
|
+
return cmp(self.file, warn.file)
|
40
|
+
if self.line != warn.line :
|
41
|
+
return cmp(self.line, warn.line)
|
42
|
+
return cmp(self.err, warn.err)
|
43
|
+
|
44
|
+
def format(self) :
|
45
|
+
if not self.file and not self.line:
|
46
|
+
return str(self.err)
|
47
|
+
return "%s:%d: %s" % (self.file, self.line, self.err)
|
48
|
+
|
49
|
+
def output(self, stream) :
|
50
|
+
stream.write(self.format() + "\n")
|
Binary file
|
Binary file
|
@@ -0,0 +1,17 @@
|
|
1
|
+
"""
|
2
|
+
Copyright (c) 2001, MetaSlash Inc. All rights reserved.
|
3
|
+
|
4
|
+
PyChecker is a tool for finding common bugs in python source code.
|
5
|
+
It finds problems that are typically caught by a compiler for less
|
6
|
+
dynamic languages, like C and C++. It is also similar to lint.
|
7
|
+
|
8
|
+
Contact Info:
|
9
|
+
http://pychecker.sourceforge.net/
|
10
|
+
pychecker-list@lists.sourceforge.net
|
11
|
+
"""
|
12
|
+
|
13
|
+
# A version # to check against in the main module (checker.py)
|
14
|
+
# this will allow us to check if there are two versions of checker
|
15
|
+
# in site-packages and local dir
|
16
|
+
MAIN_MODULE_VERSION = 3
|
17
|
+
|
Binary file
|
Binary file
|