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,390 @@
|
|
1
|
+
require 'bee_task'
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Bee
|
5
|
+
|
6
|
+
module Task
|
7
|
+
|
8
|
+
# Package for Python tasks.
|
9
|
+
class Python < Package
|
10
|
+
|
11
|
+
# Compile Python source files, checking syntax and generating .pyc files.
|
12
|
+
# Parameter is a glob or list of globs for files to compile.
|
13
|
+
#
|
14
|
+
# Example
|
15
|
+
#
|
16
|
+
# - python.compile: "**/*.py"
|
17
|
+
def compile(globs)
|
18
|
+
error "python.compile parameter is a String or Array of Strings" unless
|
19
|
+
globs.kind_of?(String) or globs.kind_of?(Array)
|
20
|
+
for glob in globs
|
21
|
+
error "python.compile parameter is a String or Array of Strings" unless
|
22
|
+
glob.kind_of?(String)
|
23
|
+
files = Dir.glob(glob)
|
24
|
+
size = (files.kind_of?(Array) ? files.size : 1)
|
25
|
+
puts "Compiling #{size} Python source file(s)" if files.length > 0
|
26
|
+
script = File.join(File.expand_path(File.dirname(__FILE__)),
|
27
|
+
'..', 'tools', 'compile', 'compile.py')
|
28
|
+
for file in files
|
29
|
+
puts "Compiling Python source file '#{file}'" if
|
30
|
+
@build.listener.verbose
|
31
|
+
ok = system("python #{script} #{file}")
|
32
|
+
error "Error compiling Python source file '#{file}'" unless ok
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Run a given Python source file. Parameter is the source file to run.
|
38
|
+
# Source file must be an existing readable file.
|
39
|
+
#
|
40
|
+
# Example
|
41
|
+
#
|
42
|
+
# - python.python: "my_script.py"
|
43
|
+
def python(source)
|
44
|
+
error "python.python parameter is a String" unless
|
45
|
+
source.kind_of?(String)
|
46
|
+
error "python.python parameter must be an existing file" unless
|
47
|
+
File.exists?(source) and File.readable?(source)
|
48
|
+
ok = system("python #{source}")
|
49
|
+
error "Error running Python source file '#{source}'" unless ok
|
50
|
+
end
|
51
|
+
|
52
|
+
# Check source files using Pychecker tool. You may find documentation
|
53
|
+
# about this tool at this URL: http://pychecker.sourceforge.net/.
|
54
|
+
#
|
55
|
+
# - src: directory or list of directories containing Python source
|
56
|
+
# files to check.
|
57
|
+
# - options: custom options to use on command line (optional).
|
58
|
+
# - installed: ask to use Pychecker installed in Python VM. Optional,
|
59
|
+
# defaults to false.
|
60
|
+
# - lenient: if set to true, doesn't interrupt the build on error.
|
61
|
+
# Optional, defaults to false.
|
62
|
+
# - only: Tells if we must only check sources passed as parameters.
|
63
|
+
# Optional, defaults to true.
|
64
|
+
#
|
65
|
+
# Example
|
66
|
+
#
|
67
|
+
# - python.pychecker:
|
68
|
+
# src: ["lib", "test"]
|
69
|
+
# options: "--keepgoing"
|
70
|
+
def pychecker(params)
|
71
|
+
# check parameters
|
72
|
+
params_desc = {
|
73
|
+
:src => { :mandatory => true, :type => :string_or_array },
|
74
|
+
:options => { :mandatory => false, :type => :string },
|
75
|
+
:installed => { :mandatory => false, :type => :boolean,
|
76
|
+
:default => false },
|
77
|
+
:lenient => { :mandatory => false, :type => :boolean,
|
78
|
+
:default => false },
|
79
|
+
:only => { :mandatory => false, :type => :boolean,
|
80
|
+
:default => true }
|
81
|
+
}
|
82
|
+
check_parameters(params, params_desc)
|
83
|
+
src = params[:src]
|
84
|
+
options = params[:options]
|
85
|
+
installed = params[:installed]
|
86
|
+
lenient = params[:lenient]
|
87
|
+
only = params[:only]
|
88
|
+
# build the list of python source files
|
89
|
+
src = Array(src)
|
90
|
+
files = []
|
91
|
+
for dir in src
|
92
|
+
files += Dir.glob("#{dir}/**/*.py")
|
93
|
+
end
|
94
|
+
files.map! { |file| "\"#{file}\"" }
|
95
|
+
files.uniq!
|
96
|
+
# run pychecker command
|
97
|
+
puts "Checking #{files.length} Python source file(s)"
|
98
|
+
if installed
|
99
|
+
command = "pychecker"
|
100
|
+
else
|
101
|
+
pychecker = "#{File.dirname(__FILE__)}/../tools/pychecker"
|
102
|
+
command = "python #{pychecker}/checker.py"
|
103
|
+
end
|
104
|
+
command += " #{options}" if options
|
105
|
+
command += " --only" if only
|
106
|
+
command += " #{files.join(' ')}"
|
107
|
+
ok = system(command)
|
108
|
+
error "Error checking Python source files" unless ok or lenient
|
109
|
+
end
|
110
|
+
|
111
|
+
# Check source files using Pylint tool. You may find documentation
|
112
|
+
# about this tool at: http://www.logilab.org/card/pylint_tutorial.
|
113
|
+
#
|
114
|
+
# - src: directory or list of directories containing Python source
|
115
|
+
# files to check.
|
116
|
+
# - files: a list of Python source files to check.
|
117
|
+
# - path: a list of additional directories to include in Python path.
|
118
|
+
# Optional, defaults to no directory.
|
119
|
+
# - options: custom options to use on command line (optional).
|
120
|
+
# - installed: ask to use Pylint installed in Python VM. Optional,
|
121
|
+
# defaults to false.
|
122
|
+
# - lenient: if set to true, doesn't interrupt the build on error.
|
123
|
+
# Optional, defaults to false.
|
124
|
+
# - config: configuration file name. Optional.
|
125
|
+
#
|
126
|
+
# Example
|
127
|
+
#
|
128
|
+
# - python.pylint:
|
129
|
+
# src: "lib"
|
130
|
+
def pylint(params)
|
131
|
+
# check parameters
|
132
|
+
params_desc = {
|
133
|
+
:src => { :mandatory => false, :type => :string_or_array },
|
134
|
+
:files => { :mandatory => false, :type => :string_or_array },
|
135
|
+
:path => { :mandatory => false, :type => :string_or_array },
|
136
|
+
:options => { :mandatory => false, :type => :string },
|
137
|
+
:installed => { :mandatory => false, :type => :boolean,
|
138
|
+
:default => false },
|
139
|
+
:lenient => { :mandatory => false, :type => :boolean,
|
140
|
+
:default => false },
|
141
|
+
:config => { :mandatory => false, :type => :string_or_array },
|
142
|
+
}
|
143
|
+
check_parameters(params, params_desc)
|
144
|
+
src = params[:src]
|
145
|
+
files = params[:files]
|
146
|
+
path = params[:path]
|
147
|
+
options = params[:options]
|
148
|
+
installed = params[:installed]
|
149
|
+
lenient = params[:lenient]
|
150
|
+
config = params[:config]
|
151
|
+
# build the list of python source files
|
152
|
+
error "Must set at least one of 'src' or 'files' in python.pylint" if
|
153
|
+
not src and not files
|
154
|
+
if files
|
155
|
+
files = Array(files)
|
156
|
+
else
|
157
|
+
files = []
|
158
|
+
end
|
159
|
+
if src
|
160
|
+
src = Array(src)
|
161
|
+
for dir in src
|
162
|
+
files += Dir.glob("#{dir}/**/*.py")
|
163
|
+
end
|
164
|
+
end
|
165
|
+
# build the list of source directory to include them in PYTHONPATH
|
166
|
+
dirs = []
|
167
|
+
for file in files
|
168
|
+
dir = File.expand_path(File.dirname(file))
|
169
|
+
dirs << dir if not dirs.include?(dir)
|
170
|
+
end
|
171
|
+
dirs += path if path
|
172
|
+
add_python_path(dirs)
|
173
|
+
files.map! { |file| "\"#{file}\"" }
|
174
|
+
files.uniq!
|
175
|
+
# run pylint command
|
176
|
+
puts "Checking #{files.length} Python source file(s)"
|
177
|
+
if installed
|
178
|
+
command = "pylint"
|
179
|
+
else
|
180
|
+
pylint = "#{File.dirname(__FILE__)}/../tools/pylint2/pylint.py"
|
181
|
+
command = "python #{pylint}"
|
182
|
+
end
|
183
|
+
command += " --rcfile=#{config}" if config
|
184
|
+
command += " #{options}" if options
|
185
|
+
command += " #{files.join(' ')}"
|
186
|
+
ok = system(command)
|
187
|
+
error "Error checking Python source files" unless ok or lenient
|
188
|
+
end
|
189
|
+
|
190
|
+
# Generate documentation using Epydoc tool.
|
191
|
+
#
|
192
|
+
# - src: directory or list of directories containing Python source
|
193
|
+
# files to doc for.
|
194
|
+
# - dest: destination directory for generated documentation.
|
195
|
+
# - options: custom options to use on command line (optional).
|
196
|
+
# - installed: ask to use Pychecker installed in Python VM. Optional,
|
197
|
+
# defaults to false.
|
198
|
+
#
|
199
|
+
# Example
|
200
|
+
#
|
201
|
+
# - python.pychecker:
|
202
|
+
# src: ["lib", "test"]
|
203
|
+
# dest: "build/doc"
|
204
|
+
def epydoc(params)
|
205
|
+
# check parameters
|
206
|
+
params_desc = {
|
207
|
+
:src => { :mandatory => true, :type => :string_or_array },
|
208
|
+
:dest => { :mandatory => true, :type => :string },
|
209
|
+
:options => { :mandatory => false, :type => :string },
|
210
|
+
:installed => { :mandatory => false, :type => :boolean, :default => false }
|
211
|
+
}
|
212
|
+
check_parameters(params, params_desc)
|
213
|
+
src = params[:src]
|
214
|
+
dest = params[:dest]
|
215
|
+
options = params[:options]
|
216
|
+
installed = params[:installed]
|
217
|
+
# build the list of python source files
|
218
|
+
src = Array(src)
|
219
|
+
files = []
|
220
|
+
for dir in src
|
221
|
+
files += Dir.glob("#{dir}/**/*.py")
|
222
|
+
end
|
223
|
+
files.map! { |file| "\"#{file}\"" }
|
224
|
+
files.uniq!
|
225
|
+
# make destination directory if it doesn't exist
|
226
|
+
FileUtils.makedirs(dest) if not File.exists?(dest)
|
227
|
+
error "epydoc 'dest' parameter must be a writable directory" unless
|
228
|
+
File.directory?(dest) and File.writable?(dest)
|
229
|
+
# run epydoc command
|
230
|
+
puts "Generating doc for #{files.length} Python source file(s)"
|
231
|
+
if installed
|
232
|
+
command = "epydoc"
|
233
|
+
else
|
234
|
+
epydoc = "#{File.dirname(__FILE__)}/../tools/epydoc"
|
235
|
+
add_python_path("#{epydoc}/..")
|
236
|
+
command = "python #{epydoc}/cli.py"
|
237
|
+
end
|
238
|
+
command += " -o #{dest}"
|
239
|
+
command += " #{options}" if options
|
240
|
+
command += " #{files.join(' ')}"
|
241
|
+
ok = system(command)
|
242
|
+
error "Error generating documentation for Python source files" unless
|
243
|
+
ok
|
244
|
+
end
|
245
|
+
|
246
|
+
# Run python test files. Parameter is a glob or list of globs for test
|
247
|
+
# files to run.
|
248
|
+
#
|
249
|
+
# Example
|
250
|
+
#
|
251
|
+
# - python.test: "test/test_*.py"
|
252
|
+
def test(globs)
|
253
|
+
error "python.test parameter is a String or Array of Strings" unless
|
254
|
+
globs.kind_of?(String) or globs.kind_of?(Array)
|
255
|
+
for glob in globs
|
256
|
+
error "python.test parameter is a String or Array of Strings" unless
|
257
|
+
glob.kind_of?(String)
|
258
|
+
files = Dir.glob(glob)
|
259
|
+
files.map! {|f| File.expand_path(f)}
|
260
|
+
size = (files.kind_of?(Array) ? files.size : 1)
|
261
|
+
puts "Running #{size} Python test file(s)" if files.length > 0
|
262
|
+
script = File.join(File.expand_path(File.dirname(__FILE__)),
|
263
|
+
'..', 'tools', 'test', 'suite.py')
|
264
|
+
command = "python #{script} #{files.join(' ')}"
|
265
|
+
ok = system(command)
|
266
|
+
error "Error running Python test(s)" unless ok
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
# Generate test coverage report.
|
271
|
+
#
|
272
|
+
# - src: directory or list of directories containing Python source
|
273
|
+
# files to measure test coverage for.
|
274
|
+
# - test: glob or list of globs for tests to run while measuring
|
275
|
+
# coverage.
|
276
|
+
# - dir: directory where to run unit tests. Optional, defaults to
|
277
|
+
# current directory.
|
278
|
+
# - dest: destination directory where to generate coverage report.
|
279
|
+
# Optional, will print report on console if not set.
|
280
|
+
# - data: file where to write coverage data. Optional, defaults to
|
281
|
+
# file .coverage in current directory.
|
282
|
+
# - path: a list of directories to add to Python path to run tests.
|
283
|
+
#
|
284
|
+
# Example
|
285
|
+
#
|
286
|
+
# - python.coverage:
|
287
|
+
# src: "src"
|
288
|
+
# test: "test/suite.py"
|
289
|
+
# dir: "test"
|
290
|
+
# dest: "build/coverage"
|
291
|
+
# data: "build/.coverage"
|
292
|
+
# path: "lib"
|
293
|
+
def coverage(params)
|
294
|
+
# check parameters
|
295
|
+
params_desc = {
|
296
|
+
:src => { :mandatory => true, :type => :string_or_array },
|
297
|
+
:test => { :mandatory => true, :type => :string_or_array },
|
298
|
+
:dir => { :mandatory => true, :type => :string },
|
299
|
+
:dest => { :mandatory => false, :type => :string },
|
300
|
+
:data => { :mandatory => false, :type => :string },
|
301
|
+
:path => { :mandatory => false, :type => :string_or_array },
|
302
|
+
}
|
303
|
+
check_parameters(params, params_desc)
|
304
|
+
src = params[:src]
|
305
|
+
test = params[:test]
|
306
|
+
dir = params[:dir]
|
307
|
+
dest = params[:dest]
|
308
|
+
data = File.expand_path(params[:data] || '.coverage')
|
309
|
+
path = params[:path]
|
310
|
+
path = path.map {|d| File.expand_path(d)} if path
|
311
|
+
# manage directories and files
|
312
|
+
src_files = []
|
313
|
+
for src_dir in src
|
314
|
+
error "Coverage 'src' parameter must be existing directories" unless
|
315
|
+
File.exists?(src_dir) and File.directory?(src_dir)
|
316
|
+
src_files += Dir.glob("#{src_dir}/**/*.py")
|
317
|
+
end
|
318
|
+
src_files = src_files.map {|f| File.expand_path(f)}.uniq.sort
|
319
|
+
sources = src_files.join(' ')
|
320
|
+
test_files = []
|
321
|
+
for test_glob in test
|
322
|
+
test_files += Dir.glob(test_glob)
|
323
|
+
end
|
324
|
+
test_files = test_files.map {|f| File.expand_path(f)}.uniq.sort
|
325
|
+
error "Coverage 'dir' parameter must be an existing directory" unless
|
326
|
+
File.exists?(dir) and File.directory?(dir)
|
327
|
+
if dest
|
328
|
+
dest = File.expand_path(dest)
|
329
|
+
FileUtils.makedirs(dest) if not File.exists?(dest)
|
330
|
+
report = File.join(dest, 'report.txt')
|
331
|
+
end
|
332
|
+
if path
|
333
|
+
for path_dir in path
|
334
|
+
error "Coverage 'path' parameter must be existing directories" unless
|
335
|
+
File.exists?(path_dir) and File.directory?(path_dir)
|
336
|
+
end
|
337
|
+
end
|
338
|
+
# build the python path
|
339
|
+
if path and path.length > 0
|
340
|
+
if ENV['PYTHONPATH']
|
341
|
+
ENV['PYTHONPATH'] = ENV['PYTHONPATH'] + File::PATH_SEPARATOR +
|
342
|
+
path.join(File::PATH_SEPARATOR)
|
343
|
+
else
|
344
|
+
ENV['PYTHONPATH'] = path.join(File::PATH_SEPARATOR)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
# run coverage command
|
348
|
+
puts "Generating coverage report for #{test_files.length} test(s)..."
|
349
|
+
coverage = "#{File.dirname(__FILE__)}/../tools/coverage/coverage.py"
|
350
|
+
File.delete(data) if File.exists?(data)
|
351
|
+
prev_dir = Dir.pwd
|
352
|
+
for test_file in test_files
|
353
|
+
begin
|
354
|
+
Dir.chdir(dir)
|
355
|
+
command = "python #{coverage} -x -f #{data} #{test_file}"
|
356
|
+
system(command) || error("Error running coverage report")
|
357
|
+
ensure
|
358
|
+
Dir.chdir(prev_dir)
|
359
|
+
end
|
360
|
+
end
|
361
|
+
if dest
|
362
|
+
command = "python #{coverage} -r -f #{data} -m #{sources} > #{report}"
|
363
|
+
system(command) || error("Error generating coverage report")
|
364
|
+
command = "python #{coverage} -a -f #{data} -d #{dest} #{sources}"
|
365
|
+
system(command) || error("Error generating coverage report")
|
366
|
+
else
|
367
|
+
command = "python #{coverage} -r -f #{data} -m #{sources}"
|
368
|
+
system(command) || error("Error generating coverage report")
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
private
|
373
|
+
|
374
|
+
# Add directories to the Python path environment variable.
|
375
|
+
# - dirs: directory (string) or list of directories to add to path.
|
376
|
+
def add_python_path(dirs)
|
377
|
+
dirs = Array(dirs)
|
378
|
+
if ENV['PYTHONPATH']
|
379
|
+
ENV['PYTHONPATH'] = dirs.join(File::PATH_SEPARATOR) +
|
380
|
+
File::PATH_SEPARATOR + ENV['PYTHONPATH'] if dirs.length > 0
|
381
|
+
else
|
382
|
+
ENV['PYTHONPATH'] = dirs.join(File::PATH_SEPARATOR)
|
383
|
+
end
|
384
|
+
end
|
385
|
+
|
386
|
+
end
|
387
|
+
|
388
|
+
end
|
389
|
+
|
390
|
+
end
|
data/test/build.yml
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
- build: package_test
|
2
|
+
default: all
|
3
|
+
description: Build file to test generated and installed package
|
4
|
+
|
5
|
+
- target: task
|
6
|
+
description: Test task for generated package
|
7
|
+
script:
|
8
|
+
- python.hello: "World"
|
9
|
+
|
10
|
+
- target: egg
|
11
|
+
description: Test egg for generated package
|
12
|
+
script:
|
13
|
+
- "bee -t 'python.hello'"
|
14
|
+
|
15
|
+
- target: all
|
16
|
+
depends: [task, egg]
|
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bee'
|
4
|
+
require 'test/unit'
|
5
|
+
$:.unshift(File.join(File.expand_path(File.dirname(__FILE__))))
|
6
|
+
require 'test_build'
|
7
|
+
require 'test_build_listener'
|
8
|
+
$:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
9
|
+
require 'bee_task_python'
|
10
|
+
|
11
|
+
# Test case for bee task.
|
12
|
+
class TestBeeTaskPython < Test::Unit::TestCase
|
13
|
+
|
14
|
+
# Create a context object and load tasks in it.
|
15
|
+
def setup
|
16
|
+
super
|
17
|
+
@context = Bee::Context.new(nil)
|
18
|
+
@listener = TestBuildListener.new
|
19
|
+
@build = TestBuild.new(@context, @listener)
|
20
|
+
@package = Bee::Task::Python.new(@build)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_compile
|
24
|
+
# TODO: write unit test
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/test/test_build.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Copyright 2006-2008 Michel Casabianca <michel.casabianca@gmail.com>
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
# Empty build for testing purpose. Contains a single context.
|
16
|
+
class TestBuild
|
17
|
+
|
18
|
+
attr_reader :context
|
19
|
+
attr_reader :listener
|
20
|
+
|
21
|
+
def initialize(context, listener)
|
22
|
+
@context = context
|
23
|
+
@listener = listener
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# Copyright 2006-2008 Michel Casabianca <michel.casabianca@gmail.com>
|
2
|
+
#
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
# you may not use this file except in compliance with the License.
|
5
|
+
# You may obtain a copy of the License at
|
6
|
+
#
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
#
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
# See the License for the specific language governing permissions and
|
13
|
+
# limitations under the License.
|
14
|
+
|
15
|
+
# Test build listener.
|
16
|
+
class TestBuildListener
|
17
|
+
|
18
|
+
attr_reader :started
|
19
|
+
attr_reader :finished
|
20
|
+
attr_reader :targets
|
21
|
+
attr_reader :tasks
|
22
|
+
attr_reader :success
|
23
|
+
attr_reader :errors
|
24
|
+
attr_accessor :output
|
25
|
+
attr_reader :verbose
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
@targets = []
|
29
|
+
@tasks = []
|
30
|
+
@output = ''
|
31
|
+
@verbose = false
|
32
|
+
end
|
33
|
+
|
34
|
+
def build_started(build)
|
35
|
+
@started = true
|
36
|
+
end
|
37
|
+
|
38
|
+
def build_finished(build)
|
39
|
+
@finished = true
|
40
|
+
end
|
41
|
+
|
42
|
+
def target(target)
|
43
|
+
@targets << target
|
44
|
+
end
|
45
|
+
|
46
|
+
def task(task)
|
47
|
+
@tasks << tasks
|
48
|
+
end
|
49
|
+
|
50
|
+
def error(exception)
|
51
|
+
@errors = exception
|
52
|
+
end
|
53
|
+
|
54
|
+
def print(text)
|
55
|
+
@output << text
|
56
|
+
end
|
57
|
+
|
58
|
+
def puts(text)
|
59
|
+
@output << text + "\n"
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# Copyright 2006-2008 Michel Casabianca <michel.casabianca@gmail.com>
|
4
|
+
#
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
# you may not use this file except in compliance with the License.
|
7
|
+
# You may obtain a copy of the License at
|
8
|
+
#
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
#
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
# See the License for the specific language governing permissions and
|
15
|
+
# limitations under the License.
|
16
|
+
|
17
|
+
# Script that runs all tests in current directory (and subdirectories)
|
18
|
+
# in a single test suite.
|
19
|
+
|
20
|
+
require 'find'
|
21
|
+
|
22
|
+
Find.find(File.dirname(__FILE__)) do |path|
|
23
|
+
if File.file?(path) and path =~ /tc_.+\.rb$/
|
24
|
+
load path
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,140 @@
|
|
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
|