mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-16 23:05:42 +00:00
5ccbc0cfd7
This commit is a simple 'hg mv' and does not contain any file modifications. *** Bug 1346025 - Split vendored modules in python/moz.build to third_party/python/moz.build, r=ted *** Bug 1346025 - Update references to moved python modules, r=ted MozReview-Commit-ID: A12RnIFtXju --HG-- rename : python/PyECC/MANIFEST.in => third_party/python/PyECC/MANIFEST.in rename : python/PyECC/README.md => third_party/python/PyECC/README.md rename : python/PyECC/ecc/Key.py => third_party/python/PyECC/ecc/Key.py rename : python/PyECC/ecc/Rabbit.py => third_party/python/PyECC/ecc/Rabbit.py rename : python/PyECC/ecc/SecurityViolationException.py => third_party/python/PyECC/ecc/SecurityViolationException.py rename : python/PyECC/ecc/__init__.py => third_party/python/PyECC/ecc/__init__.py rename : python/PyECC/ecc/curves.py => third_party/python/PyECC/ecc/curves.py rename : python/PyECC/ecc/eccrypt.py => third_party/python/PyECC/ecc/eccrypt.py rename : python/PyECC/ecc/ecdsa.py => third_party/python/PyECC/ecc/ecdsa.py rename : python/PyECC/ecc/elliptic.py => third_party/python/PyECC/ecc/elliptic.py rename : python/PyECC/ecc/encoding.py => third_party/python/PyECC/ecc/encoding.py rename : python/PyECC/ecc/performance.py => third_party/python/PyECC/ecc/performance.py rename : python/PyECC/ecc/primes.py => third_party/python/PyECC/ecc/primes.py rename : python/PyECC/ecc/shacrypt.py => third_party/python/PyECC/ecc/shacrypt.py rename : python/PyECC/setup.py => third_party/python/PyECC/setup.py rename : python/blessings/LICENSE => third_party/python/blessings/LICENSE rename : python/blessings/MANIFEST.in => third_party/python/blessings/MANIFEST.in rename : python/blessings/PKG-INFO => third_party/python/blessings/PKG-INFO rename : python/blessings/README.rst => third_party/python/blessings/README.rst rename : python/blessings/blessings/__init__.py => third_party/python/blessings/blessings/__init__.py rename : python/blessings/blessings/tests.py => third_party/python/blessings/blessings/tests.py rename : python/blessings/setup.cfg => third_party/python/blessings/setup.cfg rename : python/blessings/setup.py => third_party/python/blessings/setup.py rename : python/blessings/tox.ini => third_party/python/blessings/tox.ini rename : python/compare-locales/compare_locales/__init__.py => third_party/python/compare-locales/compare_locales/__init__.py rename : python/compare-locales/compare_locales/checks.py => third_party/python/compare-locales/compare_locales/checks.py rename : python/compare-locales/compare_locales/commands.py => third_party/python/compare-locales/compare_locales/commands.py rename : python/compare-locales/compare_locales/compare.py => third_party/python/compare-locales/compare_locales/compare.py rename : python/compare-locales/compare_locales/parser.py => third_party/python/compare-locales/compare_locales/parser.py rename : python/compare-locales/compare_locales/paths.py => third_party/python/compare-locales/compare_locales/paths.py rename : python/compare-locales/compare_locales/tests/__init__.py => third_party/python/compare-locales/compare_locales/tests/__init__.py rename : python/compare-locales/compare_locales/tests/data/bug121341.properties => third_party/python/compare-locales/compare_locales/tests/data/bug121341.properties rename : python/compare-locales/compare_locales/tests/data/test.properties => third_party/python/compare-locales/compare_locales/tests/data/test.properties rename : python/compare-locales/compare_locales/tests/data/triple-license.dtd => third_party/python/compare-locales/compare_locales/tests/data/triple-license.dtd rename : python/compare-locales/compare_locales/tests/test_checks.py => third_party/python/compare-locales/compare_locales/tests/test_checks.py rename : python/compare-locales/compare_locales/tests/test_compare.py => third_party/python/compare-locales/compare_locales/tests/test_compare.py rename : python/compare-locales/compare_locales/tests/test_dtd.py => third_party/python/compare-locales/compare_locales/tests/test_dtd.py rename : python/compare-locales/compare_locales/tests/test_ini.py => third_party/python/compare-locales/compare_locales/tests/test_ini.py rename : python/compare-locales/compare_locales/tests/test_merge.py => third_party/python/compare-locales/compare_locales/tests/test_merge.py rename : python/compare-locales/compare_locales/tests/test_properties.py => third_party/python/compare-locales/compare_locales/tests/test_properties.py rename : python/compare-locales/compare_locales/tests/test_util.py => third_party/python/compare-locales/compare_locales/tests/test_util.py rename : python/compare-locales/compare_locales/tests/test_webapps.py => third_party/python/compare-locales/compare_locales/tests/test_webapps.py rename : python/compare-locales/compare_locales/util.py => third_party/python/compare-locales/compare_locales/util.py rename : python/compare-locales/compare_locales/webapps.py => third_party/python/compare-locales/compare_locales/webapps.py rename : python/configobj/PKG-INFO => third_party/python/configobj/PKG-INFO rename : python/configobj/configobj.py => third_party/python/configobj/configobj.py rename : python/configobj/setup.py => third_party/python/configobj/setup.py rename : python/configobj/validate.py => third_party/python/configobj/validate.py rename : python/dlmanager/README.rst => third_party/python/dlmanager/README.rst rename : python/dlmanager/check.py => third_party/python/dlmanager/check.py rename : python/dlmanager/dlmanager/__init__.py => third_party/python/dlmanager/dlmanager/__init__.py rename : python/dlmanager/dlmanager/fs.py => third_party/python/dlmanager/dlmanager/fs.py rename : python/dlmanager/dlmanager/manager.py => third_party/python/dlmanager/dlmanager/manager.py rename : python/dlmanager/dlmanager/persist_limit.py => third_party/python/dlmanager/dlmanager/persist_limit.py rename : python/dlmanager/doc/Makefile => third_party/python/dlmanager/doc/Makefile rename : python/dlmanager/doc/api.rst => third_party/python/dlmanager/doc/api.rst rename : python/dlmanager/doc/conf.py => third_party/python/dlmanager/doc/conf.py rename : python/dlmanager/doc/index.rst => third_party/python/dlmanager/doc/index.rst rename : python/dlmanager/doc/make.bat => third_party/python/dlmanager/doc/make.bat rename : python/dlmanager/examples/dl_progressbar.py => third_party/python/dlmanager/examples/dl_progressbar.py rename : python/dlmanager/examples/dl_tqdm.py => third_party/python/dlmanager/examples/dl_tqdm.py rename : python/dlmanager/requirements.txt => third_party/python/dlmanager/requirements.txt rename : python/dlmanager/setup.cfg => third_party/python/dlmanager/setup.cfg rename : python/dlmanager/setup.py => third_party/python/dlmanager/setup.py rename : python/dlmanager/test-requirements.txt => third_party/python/dlmanager/test-requirements.txt rename : python/dlmanager/tests/__init__.py => third_party/python/dlmanager/tests/__init__.py rename : python/dlmanager/tests/test_manager.py => third_party/python/dlmanager/tests/test_manager.py rename : python/dlmanager/tests/test_persist_limit.py => third_party/python/dlmanager/tests/test_persist_limit.py rename : python/futures/CHANGES => third_party/python/futures/CHANGES rename : python/futures/LICENSE => third_party/python/futures/LICENSE rename : python/futures/MANIFEST.in => third_party/python/futures/MANIFEST.in rename : python/futures/PKG-INFO => third_party/python/futures/PKG-INFO rename : python/futures/concurrent/__init__.py => third_party/python/futures/concurrent/__init__.py rename : python/futures/concurrent/futures/__init__.py => third_party/python/futures/concurrent/futures/__init__.py rename : python/futures/concurrent/futures/_base.py => third_party/python/futures/concurrent/futures/_base.py rename : python/futures/concurrent/futures/process.py => third_party/python/futures/concurrent/futures/process.py rename : python/futures/concurrent/futures/thread.py => third_party/python/futures/concurrent/futures/thread.py rename : python/futures/crawl.py => third_party/python/futures/crawl.py rename : python/futures/docs/Makefile => third_party/python/futures/docs/Makefile rename : python/futures/docs/conf.py => third_party/python/futures/docs/conf.py rename : python/futures/docs/index.rst => third_party/python/futures/docs/index.rst rename : python/futures/docs/make.bat => third_party/python/futures/docs/make.bat rename : python/futures/futures.egg-info/PKG-INFO => third_party/python/futures/futures.egg-info/PKG-INFO rename : python/futures/futures.egg-info/SOURCES.txt => third_party/python/futures/futures.egg-info/SOURCES.txt rename : python/futures/futures.egg-info/dependency_links.txt => third_party/python/futures/futures.egg-info/dependency_links.txt rename : python/futures/futures.egg-info/not-zip-safe => third_party/python/futures/futures.egg-info/not-zip-safe rename : python/futures/futures.egg-info/pbr.json => third_party/python/futures/futures.egg-info/pbr.json rename : python/futures/futures.egg-info/top_level.txt => third_party/python/futures/futures.egg-info/top_level.txt rename : python/futures/primes.py => third_party/python/futures/primes.py rename : python/futures/setup.cfg => third_party/python/futures/setup.cfg rename : python/futures/setup.py => third_party/python/futures/setup.py rename : python/futures/test_futures.py => third_party/python/futures/test_futures.py rename : python/futures/tox.ini => third_party/python/futures/tox.ini rename : python/gdbpp/gdbpp/__init__.py => third_party/python/gdbpp/gdbpp/__init__.py rename : python/gdbpp/gdbpp/linkedlist.py => third_party/python/gdbpp/gdbpp/linkedlist.py rename : python/gdbpp/gdbpp/owningthread.py => third_party/python/gdbpp/gdbpp/owningthread.py rename : python/gdbpp/gdbpp/smartptr.py => third_party/python/gdbpp/gdbpp/smartptr.py rename : python/gdbpp/gdbpp/string.py => third_party/python/gdbpp/gdbpp/string.py rename : python/gdbpp/gdbpp/tarray.py => third_party/python/gdbpp/gdbpp/tarray.py rename : python/gdbpp/gdbpp/thashtable.py => third_party/python/gdbpp/gdbpp/thashtable.py rename : python/jsmin/jsmin/__init__.py => third_party/python/jsmin/jsmin/__init__.py rename : python/jsmin/jsmin/test.py => third_party/python/jsmin/jsmin/test.py rename : python/jsmin/setup.cfg => third_party/python/jsmin/setup.cfg rename : python/jsmin/setup.py => third_party/python/jsmin/setup.py rename : python/lldbutils/README.txt => third_party/python/lldbutils/README.txt rename : python/lldbutils/lldbutils/__init__.py => third_party/python/lldbutils/lldbutils/__init__.py rename : python/lldbutils/lldbutils/content.py => third_party/python/lldbutils/lldbutils/content.py rename : python/lldbutils/lldbutils/general.py => third_party/python/lldbutils/lldbutils/general.py rename : python/lldbutils/lldbutils/gfx.py => third_party/python/lldbutils/lldbutils/gfx.py rename : python/lldbutils/lldbutils/layout.py => third_party/python/lldbutils/lldbutils/layout.py rename : python/lldbutils/lldbutils/utils.py => third_party/python/lldbutils/lldbutils/utils.py rename : python/mock-1.0.0/LICENSE.txt => third_party/python/mock-1.0.0/LICENSE.txt rename : python/mock-1.0.0/MANIFEST.in => third_party/python/mock-1.0.0/MANIFEST.in rename : python/mock-1.0.0/PKG-INFO => third_party/python/mock-1.0.0/PKG-INFO rename : python/mock-1.0.0/README.txt => third_party/python/mock-1.0.0/README.txt rename : python/mock-1.0.0/docs/changelog.txt => third_party/python/mock-1.0.0/docs/changelog.txt rename : python/mock-1.0.0/docs/compare.txt => third_party/python/mock-1.0.0/docs/compare.txt rename : python/mock-1.0.0/docs/conf.py => third_party/python/mock-1.0.0/docs/conf.py rename : python/mock-1.0.0/docs/examples.txt => third_party/python/mock-1.0.0/docs/examples.txt rename : python/mock-1.0.0/docs/getting-started.txt => third_party/python/mock-1.0.0/docs/getting-started.txt rename : python/mock-1.0.0/docs/helpers.txt => third_party/python/mock-1.0.0/docs/helpers.txt rename : python/mock-1.0.0/docs/index.txt => third_party/python/mock-1.0.0/docs/index.txt rename : python/mock-1.0.0/docs/magicmock.txt => third_party/python/mock-1.0.0/docs/magicmock.txt rename : python/mock-1.0.0/docs/mock.txt => third_party/python/mock-1.0.0/docs/mock.txt rename : python/mock-1.0.0/docs/patch.txt => third_party/python/mock-1.0.0/docs/patch.txt rename : python/mock-1.0.0/docs/sentinel.txt => third_party/python/mock-1.0.0/docs/sentinel.txt rename : python/mock-1.0.0/html/.doctrees/changelog.doctree => third_party/python/mock-1.0.0/html/.doctrees/changelog.doctree rename : python/mock-1.0.0/html/.doctrees/compare.doctree => third_party/python/mock-1.0.0/html/.doctrees/compare.doctree rename : python/mock-1.0.0/html/.doctrees/examples.doctree => third_party/python/mock-1.0.0/html/.doctrees/examples.doctree rename : python/mock-1.0.0/html/.doctrees/getting-started.doctree => third_party/python/mock-1.0.0/html/.doctrees/getting-started.doctree rename : python/mock-1.0.0/html/.doctrees/index.doctree => third_party/python/mock-1.0.0/html/.doctrees/index.doctree rename : python/mock-1.0.0/html/.doctrees/magicmock.doctree => third_party/python/mock-1.0.0/html/.doctrees/magicmock.doctree rename : python/mock-1.0.0/html/.doctrees/mock.doctree => third_party/python/mock-1.0.0/html/.doctrees/mock.doctree rename : python/mock-1.0.0/html/.doctrees/mocksignature.doctree => third_party/python/mock-1.0.0/html/.doctrees/mocksignature.doctree rename : python/mock-1.0.0/html/.doctrees/patch.doctree => third_party/python/mock-1.0.0/html/.doctrees/patch.doctree rename : python/mock-1.0.0/html/.doctrees/sentinel.doctree => third_party/python/mock-1.0.0/html/.doctrees/sentinel.doctree rename : python/mock-1.0.0/html/_sources/changelog.txt => third_party/python/mock-1.0.0/html/_sources/changelog.txt rename : python/mock-1.0.0/html/_sources/compare.txt => third_party/python/mock-1.0.0/html/_sources/compare.txt rename : python/mock-1.0.0/html/_sources/examples.txt => third_party/python/mock-1.0.0/html/_sources/examples.txt rename : python/mock-1.0.0/html/_sources/getting-started.txt => third_party/python/mock-1.0.0/html/_sources/getting-started.txt rename : python/mock-1.0.0/html/_sources/index.txt => third_party/python/mock-1.0.0/html/_sources/index.txt rename : python/mock-1.0.0/html/_sources/magicmock.txt => third_party/python/mock-1.0.0/html/_sources/magicmock.txt rename : python/mock-1.0.0/html/_sources/mock.txt => third_party/python/mock-1.0.0/html/_sources/mock.txt rename : python/mock-1.0.0/html/_sources/mocksignature.txt => third_party/python/mock-1.0.0/html/_sources/mocksignature.txt rename : python/mock-1.0.0/html/_sources/patch.txt => third_party/python/mock-1.0.0/html/_sources/patch.txt rename : python/mock-1.0.0/html/_sources/sentinel.txt => third_party/python/mock-1.0.0/html/_sources/sentinel.txt rename : python/mock-1.0.0/html/_static/adctheme.css => third_party/python/mock-1.0.0/html/_static/adctheme.css rename : python/mock-1.0.0/html/_static/basic.css => third_party/python/mock-1.0.0/html/_static/basic.css rename : python/mock-1.0.0/html/_static/breadcrumb_background.png => third_party/python/mock-1.0.0/html/_static/breadcrumb_background.png rename : python/mock-1.0.0/html/_static/default.css => third_party/python/mock-1.0.0/html/_static/default.css rename : python/mock-1.0.0/html/_static/doctools.js => third_party/python/mock-1.0.0/html/_static/doctools.js rename : python/mock-1.0.0/html/_static/documentation.png => third_party/python/mock-1.0.0/html/_static/documentation.png rename : python/mock-1.0.0/html/_static/file.png => third_party/python/mock-1.0.0/html/_static/file.png rename : python/mock-1.0.0/html/_static/header_sm_mid.png => third_party/python/mock-1.0.0/html/_static/header_sm_mid.png rename : python/mock-1.0.0/html/_static/jquery.js => third_party/python/mock-1.0.0/html/_static/jquery.js rename : python/mock-1.0.0/html/_static/minus.png => third_party/python/mock-1.0.0/html/_static/minus.png rename : python/mock-1.0.0/html/_static/mobile.css => third_party/python/mock-1.0.0/html/_static/mobile.css rename : python/mock-1.0.0/html/_static/plus.png => third_party/python/mock-1.0.0/html/_static/plus.png rename : python/mock-1.0.0/html/_static/pygments.css => third_party/python/mock-1.0.0/html/_static/pygments.css rename : python/mock-1.0.0/html/_static/scrn1.png => third_party/python/mock-1.0.0/html/_static/scrn1.png rename : python/mock-1.0.0/html/_static/scrn2.png => third_party/python/mock-1.0.0/html/_static/scrn2.png rename : python/mock-1.0.0/html/_static/searchfield_leftcap.png => third_party/python/mock-1.0.0/html/_static/searchfield_leftcap.png rename : python/mock-1.0.0/html/_static/searchfield_repeat.png => third_party/python/mock-1.0.0/html/_static/searchfield_repeat.png rename : python/mock-1.0.0/html/_static/searchfield_rightcap.png => third_party/python/mock-1.0.0/html/_static/searchfield_rightcap.png rename : python/mock-1.0.0/html/_static/searchtools.js => third_party/python/mock-1.0.0/html/_static/searchtools.js rename : python/mock-1.0.0/html/_static/sidebar.js => third_party/python/mock-1.0.0/html/_static/sidebar.js rename : python/mock-1.0.0/html/_static/title_background.png => third_party/python/mock-1.0.0/html/_static/title_background.png rename : python/mock-1.0.0/html/_static/toc.js => third_party/python/mock-1.0.0/html/_static/toc.js rename : python/mock-1.0.0/html/_static/triangle_closed.png => third_party/python/mock-1.0.0/html/_static/triangle_closed.png rename : python/mock-1.0.0/html/_static/triangle_left.png => third_party/python/mock-1.0.0/html/_static/triangle_left.png rename : python/mock-1.0.0/html/_static/triangle_open.png => third_party/python/mock-1.0.0/html/_static/triangle_open.png rename : python/mock-1.0.0/html/_static/underscore.js => third_party/python/mock-1.0.0/html/_static/underscore.js rename : python/mock-1.0.0/html/changelog.html => third_party/python/mock-1.0.0/html/changelog.html rename : python/mock-1.0.0/html/compare.html => third_party/python/mock-1.0.0/html/compare.html rename : python/mock-1.0.0/html/examples.html => third_party/python/mock-1.0.0/html/examples.html rename : python/mock-1.0.0/html/genindex.html => third_party/python/mock-1.0.0/html/genindex.html rename : python/mock-1.0.0/html/getting-started.html => third_party/python/mock-1.0.0/html/getting-started.html rename : python/mock-1.0.0/html/index.html => third_party/python/mock-1.0.0/html/index.html rename : python/mock-1.0.0/html/magicmock.html => third_party/python/mock-1.0.0/html/magicmock.html rename : python/mock-1.0.0/html/mock.html => third_party/python/mock-1.0.0/html/mock.html rename : python/mock-1.0.0/html/mocksignature.html => third_party/python/mock-1.0.0/html/mocksignature.html rename : python/mock-1.0.0/html/objects.inv => third_party/python/mock-1.0.0/html/objects.inv rename : python/mock-1.0.0/html/output.txt => third_party/python/mock-1.0.0/html/output.txt rename : python/mock-1.0.0/html/patch.html => third_party/python/mock-1.0.0/html/patch.html rename : python/mock-1.0.0/html/search.html => third_party/python/mock-1.0.0/html/search.html rename : python/mock-1.0.0/html/searchindex.js => third_party/python/mock-1.0.0/html/searchindex.js rename : python/mock-1.0.0/html/sentinel.html => third_party/python/mock-1.0.0/html/sentinel.html rename : python/mock-1.0.0/mock.egg-info/PKG-INFO => third_party/python/mock-1.0.0/mock.egg-info/PKG-INFO rename : python/mock-1.0.0/mock.egg-info/SOURCES.txt => third_party/python/mock-1.0.0/mock.egg-info/SOURCES.txt rename : python/mock-1.0.0/mock.egg-info/dependency_links.txt => third_party/python/mock-1.0.0/mock.egg-info/dependency_links.txt rename : python/mock-1.0.0/mock.egg-info/top_level.txt => third_party/python/mock-1.0.0/mock.egg-info/top_level.txt rename : python/mock-1.0.0/mock.py => third_party/python/mock-1.0.0/mock.py rename : python/mock-1.0.0/setup.cfg => third_party/python/mock-1.0.0/setup.cfg rename : python/mock-1.0.0/setup.py => third_party/python/mock-1.0.0/setup.py rename : python/mock-1.0.0/tests/__init__.py => third_party/python/mock-1.0.0/tests/__init__.py rename : python/mock-1.0.0/tests/_testwith.py => third_party/python/mock-1.0.0/tests/_testwith.py rename : python/mock-1.0.0/tests/support.py => third_party/python/mock-1.0.0/tests/support.py rename : python/mock-1.0.0/tests/support_with.py => third_party/python/mock-1.0.0/tests/support_with.py rename : python/mock-1.0.0/tests/testcallable.py => third_party/python/mock-1.0.0/tests/testcallable.py rename : python/mock-1.0.0/tests/testhelpers.py => third_party/python/mock-1.0.0/tests/testhelpers.py rename : python/mock-1.0.0/tests/testmagicmethods.py => third_party/python/mock-1.0.0/tests/testmagicmethods.py rename : python/mock-1.0.0/tests/testmock.py => third_party/python/mock-1.0.0/tests/testmock.py rename : python/mock-1.0.0/tests/testpatch.py => third_party/python/mock-1.0.0/tests/testpatch.py rename : python/mock-1.0.0/tests/testsentinel.py => third_party/python/mock-1.0.0/tests/testsentinel.py rename : python/mock-1.0.0/tests/testwith.py => third_party/python/mock-1.0.0/tests/testwith.py rename : python/mock-1.0.0/tox.ini => third_party/python/mock-1.0.0/tox.ini rename : python/psutil/CREDITS => third_party/python/psutil/CREDITS rename : python/psutil/HISTORY.rst => third_party/python/psutil/HISTORY.rst rename : python/psutil/INSTALL.rst => third_party/python/psutil/INSTALL.rst rename : python/psutil/LICENSE => third_party/python/psutil/LICENSE rename : python/psutil/MANIFEST.in => third_party/python/psutil/MANIFEST.in rename : python/psutil/Makefile => third_party/python/psutil/Makefile rename : python/psutil/PKG-INFO => third_party/python/psutil/PKG-INFO rename : python/psutil/README.rst => third_party/python/psutil/README.rst rename : python/psutil/TODO => third_party/python/psutil/TODO rename : python/psutil/docs/Makefile => third_party/python/psutil/docs/Makefile rename : python/psutil/docs/README => third_party/python/psutil/docs/README rename : python/psutil/docs/_static/copybutton.js => third_party/python/psutil/docs/_static/copybutton.js rename : python/psutil/docs/_static/favicon.ico => third_party/python/psutil/docs/_static/favicon.ico rename : python/psutil/docs/_static/logo.png => third_party/python/psutil/docs/_static/logo.png rename : python/psutil/docs/_static/sidebar.js => third_party/python/psutil/docs/_static/sidebar.js rename : python/psutil/docs/_template/globaltoc.html => third_party/python/psutil/docs/_template/globaltoc.html rename : python/psutil/docs/_template/indexcontent.html => third_party/python/psutil/docs/_template/indexcontent.html rename : python/psutil/docs/_template/indexsidebar.html => third_party/python/psutil/docs/_template/indexsidebar.html rename : python/psutil/docs/_template/page.html => third_party/python/psutil/docs/_template/page.html rename : python/psutil/docs/_themes/pydoctheme/static/pydoctheme.css => third_party/python/psutil/docs/_themes/pydoctheme/static/pydoctheme.css rename : python/psutil/docs/_themes/pydoctheme/theme.conf => third_party/python/psutil/docs/_themes/pydoctheme/theme.conf rename : python/psutil/docs/conf.py => third_party/python/psutil/docs/conf.py rename : python/psutil/docs/index.rst => third_party/python/psutil/docs/index.rst rename : python/psutil/docs/make.bat => third_party/python/psutil/docs/make.bat rename : python/psutil/docs/xxx => third_party/python/psutil/docs/xxx rename : python/psutil/examples/disk_usage.py => third_party/python/psutil/examples/disk_usage.py rename : python/psutil/examples/free.py => third_party/python/psutil/examples/free.py rename : python/psutil/examples/ifconfig.py => third_party/python/psutil/examples/ifconfig.py rename : python/psutil/examples/iotop.py => third_party/python/psutil/examples/iotop.py rename : python/psutil/examples/killall.py => third_party/python/psutil/examples/killall.py rename : python/psutil/examples/meminfo.py => third_party/python/psutil/examples/meminfo.py rename : python/psutil/examples/netstat.py => third_party/python/psutil/examples/netstat.py rename : python/psutil/examples/nettop.py => third_party/python/psutil/examples/nettop.py rename : python/psutil/examples/pidof.py => third_party/python/psutil/examples/pidof.py rename : python/psutil/examples/pmap.py => third_party/python/psutil/examples/pmap.py rename : python/psutil/examples/process_detail.py => third_party/python/psutil/examples/process_detail.py rename : python/psutil/examples/ps.py => third_party/python/psutil/examples/ps.py rename : python/psutil/examples/pstree.py => third_party/python/psutil/examples/pstree.py rename : python/psutil/examples/top.py => third_party/python/psutil/examples/top.py rename : python/psutil/examples/who.py => third_party/python/psutil/examples/who.py rename : python/psutil/make.bat => third_party/python/psutil/make.bat rename : python/psutil/psutil.egg-info/PKG-INFO => third_party/python/psutil/psutil.egg-info/PKG-INFO rename : python/psutil/psutil.egg-info/SOURCES.txt => third_party/python/psutil/psutil.egg-info/SOURCES.txt rename : python/psutil/psutil.egg-info/dependency_links.txt => third_party/python/psutil/psutil.egg-info/dependency_links.txt rename : python/psutil/psutil.egg-info/top_level.txt => third_party/python/psutil/psutil.egg-info/top_level.txt rename : python/psutil/psutil/__init__.py => third_party/python/psutil/psutil/__init__.py rename : python/psutil/psutil/_common.py => third_party/python/psutil/psutil/_common.py rename : python/psutil/psutil/_compat.py => third_party/python/psutil/psutil/_compat.py rename : python/psutil/psutil/_psbsd.py => third_party/python/psutil/psutil/_psbsd.py rename : python/psutil/psutil/_pslinux.py => third_party/python/psutil/psutil/_pslinux.py rename : python/psutil/psutil/_psosx.py => third_party/python/psutil/psutil/_psosx.py rename : python/psutil/psutil/_psposix.py => third_party/python/psutil/psutil/_psposix.py rename : python/psutil/psutil/_pssunos.py => third_party/python/psutil/psutil/_pssunos.py rename : python/psutil/psutil/_psutil_bsd.c => third_party/python/psutil/psutil/_psutil_bsd.c rename : python/psutil/psutil/_psutil_bsd.h => third_party/python/psutil/psutil/_psutil_bsd.h rename : python/psutil/psutil/_psutil_common.c => third_party/python/psutil/psutil/_psutil_common.c rename : python/psutil/psutil/_psutil_common.h => third_party/python/psutil/psutil/_psutil_common.h rename : python/psutil/psutil/_psutil_linux.c => third_party/python/psutil/psutil/_psutil_linux.c rename : python/psutil/psutil/_psutil_linux.h => third_party/python/psutil/psutil/_psutil_linux.h rename : python/psutil/psutil/_psutil_osx.c => third_party/python/psutil/psutil/_psutil_osx.c rename : python/psutil/psutil/_psutil_osx.h => third_party/python/psutil/psutil/_psutil_osx.h rename : python/psutil/psutil/_psutil_posix.c => third_party/python/psutil/psutil/_psutil_posix.c rename : python/psutil/psutil/_psutil_posix.h => third_party/python/psutil/psutil/_psutil_posix.h rename : python/psutil/psutil/_psutil_sunos.c => third_party/python/psutil/psutil/_psutil_sunos.c rename : python/psutil/psutil/_psutil_sunos.h => third_party/python/psutil/psutil/_psutil_sunos.h rename : python/psutil/psutil/_psutil_windows.c => third_party/python/psutil/psutil/_psutil_windows.c rename : python/psutil/psutil/_psutil_windows.h => third_party/python/psutil/psutil/_psutil_windows.h rename : python/psutil/psutil/_pswindows.py => third_party/python/psutil/psutil/_pswindows.py rename : python/psutil/psutil/arch/bsd/process_info.c => third_party/python/psutil/psutil/arch/bsd/process_info.c rename : python/psutil/psutil/arch/bsd/process_info.h => third_party/python/psutil/psutil/arch/bsd/process_info.h rename : python/psutil/psutil/arch/osx/process_info.c => third_party/python/psutil/psutil/arch/osx/process_info.c rename : python/psutil/psutil/arch/osx/process_info.h => third_party/python/psutil/psutil/arch/osx/process_info.h rename : python/psutil/psutil/arch/windows/glpi.h => third_party/python/psutil/psutil/arch/windows/glpi.h rename : python/psutil/psutil/arch/windows/inet_ntop.c => third_party/python/psutil/psutil/arch/windows/inet_ntop.c rename : python/psutil/psutil/arch/windows/inet_ntop.h => third_party/python/psutil/psutil/arch/windows/inet_ntop.h rename : python/psutil/psutil/arch/windows/ntextapi.h => third_party/python/psutil/psutil/arch/windows/ntextapi.h rename : python/psutil/psutil/arch/windows/process_handles.c => third_party/python/psutil/psutil/arch/windows/process_handles.c rename : python/psutil/psutil/arch/windows/process_handles.h => third_party/python/psutil/psutil/arch/windows/process_handles.h rename : python/psutil/psutil/arch/windows/process_info.c => third_party/python/psutil/psutil/arch/windows/process_info.c rename : python/psutil/psutil/arch/windows/process_info.h => third_party/python/psutil/psutil/arch/windows/process_info.h rename : python/psutil/psutil/arch/windows/security.c => third_party/python/psutil/psutil/arch/windows/security.c rename : python/psutil/psutil/arch/windows/security.h => third_party/python/psutil/psutil/arch/windows/security.h rename : python/psutil/setup.cfg => third_party/python/psutil/setup.cfg rename : python/psutil/setup.py => third_party/python/psutil/setup.py rename : python/psutil/test/README.rst => third_party/python/psutil/test/README.rst rename : python/psutil/test/_bsd.py => third_party/python/psutil/test/_bsd.py rename : python/psutil/test/_linux.py => third_party/python/psutil/test/_linux.py rename : python/psutil/test/_osx.py => third_party/python/psutil/test/_osx.py rename : python/psutil/test/_posix.py => third_party/python/psutil/test/_posix.py rename : python/psutil/test/_sunos.py => third_party/python/psutil/test/_sunos.py rename : python/psutil/test/_windows.py => third_party/python/psutil/test/_windows.py rename : python/psutil/test/test_memory_leaks.py => third_party/python/psutil/test/test_memory_leaks.py rename : python/psutil/test/test_psutil.py => third_party/python/psutil/test/test_psutil.py rename : python/psutil/tox.ini => third_party/python/psutil/tox.ini rename : python/py/AUTHORS => third_party/python/py/AUTHORS rename : python/py/LICENSE => third_party/python/py/LICENSE rename : python/py/MANIFEST.in => third_party/python/py/MANIFEST.in rename : python/py/PKG-INFO => third_party/python/py/PKG-INFO rename : python/py/README.txt => third_party/python/py/README.txt rename : python/py/py/__init__.py => third_party/python/py/py/__init__.py rename : python/py/py/__metainfo.py => third_party/python/py/py/__metainfo.py rename : python/py/py/_apipkg.py => third_party/python/py/py/_apipkg.py rename : python/py/py/_builtin.py => third_party/python/py/py/_builtin.py rename : python/py/py/_code/__init__.py => third_party/python/py/py/_code/__init__.py rename : python/py/py/_code/_assertionnew.py => third_party/python/py/py/_code/_assertionnew.py rename : python/py/py/_code/_assertionold.py => third_party/python/py/py/_code/_assertionold.py rename : python/py/py/_code/_py2traceback.py => third_party/python/py/py/_code/_py2traceback.py rename : python/py/py/_code/assertion.py => third_party/python/py/py/_code/assertion.py rename : python/py/py/_code/code.py => third_party/python/py/py/_code/code.py rename : python/py/py/_code/source.py => third_party/python/py/py/_code/source.py rename : python/py/py/_error.py => third_party/python/py/py/_error.py rename : python/py/py/_iniconfig.py => third_party/python/py/py/_iniconfig.py rename : python/py/py/_io/__init__.py => third_party/python/py/py/_io/__init__.py rename : python/py/py/_io/capture.py => third_party/python/py/py/_io/capture.py rename : python/py/py/_io/saferepr.py => third_party/python/py/py/_io/saferepr.py rename : python/py/py/_io/terminalwriter.py => third_party/python/py/py/_io/terminalwriter.py rename : python/py/py/_log/__init__.py => third_party/python/py/py/_log/__init__.py rename : python/py/py/_log/log.py => third_party/python/py/py/_log/log.py rename : python/py/py/_log/warning.py => third_party/python/py/py/_log/warning.py rename : python/py/py/_path/__init__.py => third_party/python/py/py/_path/__init__.py rename : python/py/py/_path/cacheutil.py => third_party/python/py/py/_path/cacheutil.py rename : python/py/py/_path/common.py => third_party/python/py/py/_path/common.py rename : python/py/py/_path/local.py => third_party/python/py/py/_path/local.py rename : python/py/py/_path/svnurl.py => third_party/python/py/py/_path/svnurl.py rename : python/py/py/_path/svnwc.py => third_party/python/py/py/_path/svnwc.py rename : python/py/py/_process/__init__.py => third_party/python/py/py/_process/__init__.py rename : python/py/py/_process/cmdexec.py => third_party/python/py/py/_process/cmdexec.py rename : python/py/py/_process/forkedfunc.py => third_party/python/py/py/_process/forkedfunc.py rename : python/py/py/_process/killproc.py => third_party/python/py/py/_process/killproc.py rename : python/py/py/_std.py => third_party/python/py/py/_std.py rename : python/py/py/_xmlgen.py => third_party/python/py/py/_xmlgen.py rename : python/py/py/test.py => third_party/python/py/py/test.py rename : python/py/setup.cfg => third_party/python/py/setup.cfg rename : python/py/setup.py => third_party/python/py/setup.py rename : python/pyasn1-modules/CHANGES => third_party/python/pyasn1-modules/CHANGES rename : python/pyasn1-modules/LICENSE => third_party/python/pyasn1-modules/LICENSE rename : python/pyasn1-modules/MANIFEST.in => third_party/python/pyasn1-modules/MANIFEST.in rename : python/pyasn1-modules/PKG-INFO => third_party/python/pyasn1-modules/PKG-INFO rename : python/pyasn1-modules/README => third_party/python/pyasn1-modules/README rename : python/pyasn1-modules/pyasn1_modules.egg-info/PKG-INFO => third_party/python/pyasn1-modules/pyasn1_modules.egg-info/PKG-INFO rename : python/pyasn1-modules/pyasn1_modules.egg-info/SOURCES.txt => third_party/python/pyasn1-modules/pyasn1_modules.egg-info/SOURCES.txt rename : python/pyasn1-modules/pyasn1_modules.egg-info/dependency_links.txt => third_party/python/pyasn1-modules/pyasn1_modules.egg-info/dependency_links.txt rename : python/pyasn1-modules/pyasn1_modules.egg-info/requires.txt => third_party/python/pyasn1-modules/pyasn1_modules.egg-info/requires.txt rename : python/pyasn1-modules/pyasn1_modules.egg-info/top_level.txt => third_party/python/pyasn1-modules/pyasn1_modules.egg-info/top_level.txt rename : python/pyasn1-modules/pyasn1_modules.egg-info/zip-safe => third_party/python/pyasn1-modules/pyasn1_modules.egg-info/zip-safe rename : python/pyasn1-modules/pyasn1_modules/__init__.py => third_party/python/pyasn1-modules/pyasn1_modules/__init__.py rename : python/pyasn1-modules/pyasn1_modules/pem.py => third_party/python/pyasn1-modules/pyasn1_modules/pem.py rename : python/pyasn1-modules/pyasn1_modules/pkcs12.py => third_party/python/pyasn1-modules/pyasn1_modules/pkcs12.py rename : python/pyasn1-modules/pyasn1_modules/rfc1155.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc1155.py rename : python/pyasn1-modules/pyasn1_modules/rfc1157.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc1157.py rename : python/pyasn1-modules/pyasn1_modules/rfc1901.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc1901.py rename : python/pyasn1-modules/pyasn1_modules/rfc1902.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc1902.py rename : python/pyasn1-modules/pyasn1_modules/rfc1905.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc1905.py rename : python/pyasn1-modules/pyasn1_modules/rfc2251.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc2251.py rename : python/pyasn1-modules/pyasn1_modules/rfc2314.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc2314.py rename : python/pyasn1-modules/pyasn1_modules/rfc2315.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc2315.py rename : python/pyasn1-modules/pyasn1_modules/rfc2437.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc2437.py rename : python/pyasn1-modules/pyasn1_modules/rfc2459.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc2459.py rename : python/pyasn1-modules/pyasn1_modules/rfc2511.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc2511.py rename : python/pyasn1-modules/pyasn1_modules/rfc2560.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc2560.py rename : python/pyasn1-modules/pyasn1_modules/rfc3412.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc3412.py rename : python/pyasn1-modules/pyasn1_modules/rfc3414.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc3414.py rename : python/pyasn1-modules/pyasn1_modules/rfc3447.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc3447.py rename : python/pyasn1-modules/pyasn1_modules/rfc4210.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc4210.py rename : python/pyasn1-modules/pyasn1_modules/rfc5208.py => third_party/python/pyasn1-modules/pyasn1_modules/rfc5208.py rename : python/pyasn1-modules/setup.cfg => third_party/python/pyasn1-modules/setup.cfg rename : python/pyasn1-modules/setup.py => third_party/python/pyasn1-modules/setup.py rename : python/pyasn1-modules/test/cmp.sh => third_party/python/pyasn1-modules/test/cmp.sh rename : python/pyasn1-modules/test/crl.sh => third_party/python/pyasn1-modules/test/crl.sh rename : python/pyasn1-modules/test/crmf.sh => third_party/python/pyasn1-modules/test/crmf.sh rename : python/pyasn1-modules/test/ocspreq.sh => third_party/python/pyasn1-modules/test/ocspreq.sh rename : python/pyasn1-modules/test/ocsprsp.sh => third_party/python/pyasn1-modules/test/ocsprsp.sh rename : python/pyasn1-modules/test/pkcs1.sh => third_party/python/pyasn1-modules/test/pkcs1.sh rename : python/pyasn1-modules/test/pkcs10.sh => third_party/python/pyasn1-modules/test/pkcs10.sh rename : python/pyasn1-modules/test/pkcs7.sh => third_party/python/pyasn1-modules/test/pkcs7.sh rename : python/pyasn1-modules/test/pkcs8.sh => third_party/python/pyasn1-modules/test/pkcs8.sh rename : python/pyasn1-modules/test/x509dump.sh => third_party/python/pyasn1-modules/test/x509dump.sh rename : python/pyasn1-modules/tools/cmpdump.py => third_party/python/pyasn1-modules/tools/cmpdump.py rename : python/pyasn1-modules/tools/crldump.py => third_party/python/pyasn1-modules/tools/crldump.py rename : python/pyasn1-modules/tools/crmfdump.py => third_party/python/pyasn1-modules/tools/crmfdump.py rename : python/pyasn1-modules/tools/ocspclient.py => third_party/python/pyasn1-modules/tools/ocspclient.py rename : python/pyasn1-modules/tools/ocspreqdump.py => third_party/python/pyasn1-modules/tools/ocspreqdump.py rename : python/pyasn1-modules/tools/ocsprspdump.py => third_party/python/pyasn1-modules/tools/ocsprspdump.py rename : python/pyasn1-modules/tools/ocspserver.py => third_party/python/pyasn1-modules/tools/ocspserver.py rename : python/pyasn1-modules/tools/pkcs10dump.py => third_party/python/pyasn1-modules/tools/pkcs10dump.py rename : python/pyasn1-modules/tools/pkcs1dump.py => third_party/python/pyasn1-modules/tools/pkcs1dump.py rename : python/pyasn1-modules/tools/pkcs7dump.py => third_party/python/pyasn1-modules/tools/pkcs7dump.py rename : python/pyasn1-modules/tools/pkcs8dump.py => third_party/python/pyasn1-modules/tools/pkcs8dump.py rename : python/pyasn1-modules/tools/snmpget.py => third_party/python/pyasn1-modules/tools/snmpget.py rename : python/pyasn1-modules/tools/x509dump.py => third_party/python/pyasn1-modules/tools/x509dump.py rename : python/pyasn1/CHANGES => third_party/python/pyasn1/CHANGES rename : python/pyasn1/LICENSE => third_party/python/pyasn1/LICENSE rename : python/pyasn1/MANIFEST.in => third_party/python/pyasn1/MANIFEST.in rename : python/pyasn1/PKG-INFO => third_party/python/pyasn1/PKG-INFO rename : python/pyasn1/README => third_party/python/pyasn1/README rename : python/pyasn1/THANKS => third_party/python/pyasn1/THANKS rename : python/pyasn1/TODO => third_party/python/pyasn1/TODO rename : python/pyasn1/doc/codecs.html => third_party/python/pyasn1/doc/codecs.html rename : python/pyasn1/doc/constraints.html => third_party/python/pyasn1/doc/constraints.html rename : python/pyasn1/doc/constructed.html => third_party/python/pyasn1/doc/constructed.html rename : python/pyasn1/doc/intro.html => third_party/python/pyasn1/doc/intro.html rename : python/pyasn1/doc/pyasn1-tutorial.html => third_party/python/pyasn1/doc/pyasn1-tutorial.html rename : python/pyasn1/doc/scalar.html => third_party/python/pyasn1/doc/scalar.html rename : python/pyasn1/doc/tagging.html => third_party/python/pyasn1/doc/tagging.html rename : python/pyasn1/pyasn1.egg-info/PKG-INFO => third_party/python/pyasn1/pyasn1.egg-info/PKG-INFO rename : python/pyasn1/pyasn1.egg-info/SOURCES.txt => third_party/python/pyasn1/pyasn1.egg-info/SOURCES.txt rename : python/pyasn1/pyasn1.egg-info/dependency_links.txt => third_party/python/pyasn1/pyasn1.egg-info/dependency_links.txt rename : python/pyasn1/pyasn1.egg-info/top_level.txt => third_party/python/pyasn1/pyasn1.egg-info/top_level.txt rename : python/pyasn1/pyasn1.egg-info/zip-safe => third_party/python/pyasn1/pyasn1.egg-info/zip-safe rename : python/pyasn1/pyasn1/__init__.py => third_party/python/pyasn1/pyasn1/__init__.py rename : python/pyasn1/pyasn1/codec/__init__.py => third_party/python/pyasn1/pyasn1/codec/__init__.py rename : python/pyasn1/pyasn1/codec/ber/__init__.py => third_party/python/pyasn1/pyasn1/codec/ber/__init__.py rename : python/pyasn1/pyasn1/codec/ber/decoder.py => third_party/python/pyasn1/pyasn1/codec/ber/decoder.py rename : python/pyasn1/pyasn1/codec/ber/encoder.py => third_party/python/pyasn1/pyasn1/codec/ber/encoder.py rename : python/pyasn1/pyasn1/codec/ber/eoo.py => third_party/python/pyasn1/pyasn1/codec/ber/eoo.py rename : python/pyasn1/pyasn1/codec/cer/__init__.py => third_party/python/pyasn1/pyasn1/codec/cer/__init__.py rename : python/pyasn1/pyasn1/codec/cer/decoder.py => third_party/python/pyasn1/pyasn1/codec/cer/decoder.py rename : python/pyasn1/pyasn1/codec/cer/encoder.py => third_party/python/pyasn1/pyasn1/codec/cer/encoder.py rename : python/pyasn1/pyasn1/codec/der/__init__.py => third_party/python/pyasn1/pyasn1/codec/der/__init__.py rename : python/pyasn1/pyasn1/codec/der/decoder.py => third_party/python/pyasn1/pyasn1/codec/der/decoder.py rename : python/pyasn1/pyasn1/codec/der/encoder.py => third_party/python/pyasn1/pyasn1/codec/der/encoder.py rename : python/pyasn1/pyasn1/compat/__init__.py => third_party/python/pyasn1/pyasn1/compat/__init__.py rename : python/pyasn1/pyasn1/compat/octets.py => third_party/python/pyasn1/pyasn1/compat/octets.py rename : python/pyasn1/pyasn1/debug.py => third_party/python/pyasn1/pyasn1/debug.py rename : python/pyasn1/pyasn1/error.py => third_party/python/pyasn1/pyasn1/error.py rename : python/pyasn1/pyasn1/type/__init__.py => third_party/python/pyasn1/pyasn1/type/__init__.py rename : python/pyasn1/pyasn1/type/base.py => third_party/python/pyasn1/pyasn1/type/base.py rename : python/pyasn1/pyasn1/type/char.py => third_party/python/pyasn1/pyasn1/type/char.py rename : python/pyasn1/pyasn1/type/constraint.py => third_party/python/pyasn1/pyasn1/type/constraint.py rename : python/pyasn1/pyasn1/type/error.py => third_party/python/pyasn1/pyasn1/type/error.py rename : python/pyasn1/pyasn1/type/namedtype.py => third_party/python/pyasn1/pyasn1/type/namedtype.py rename : python/pyasn1/pyasn1/type/namedval.py => third_party/python/pyasn1/pyasn1/type/namedval.py rename : python/pyasn1/pyasn1/type/tag.py => third_party/python/pyasn1/pyasn1/type/tag.py rename : python/pyasn1/pyasn1/type/tagmap.py => third_party/python/pyasn1/pyasn1/type/tagmap.py rename : python/pyasn1/pyasn1/type/univ.py => third_party/python/pyasn1/pyasn1/type/univ.py rename : python/pyasn1/pyasn1/type/useful.py => third_party/python/pyasn1/pyasn1/type/useful.py rename : python/pyasn1/setup.cfg => third_party/python/pyasn1/setup.cfg rename : python/pyasn1/setup.py => third_party/python/pyasn1/setup.py rename : python/pyasn1/test/__init__.py => third_party/python/pyasn1/test/__init__.py rename : python/pyasn1/test/codec/__init__.py => third_party/python/pyasn1/test/codec/__init__.py rename : python/pyasn1/test/codec/ber/__init__.py => third_party/python/pyasn1/test/codec/ber/__init__.py rename : python/pyasn1/test/codec/ber/suite.py => third_party/python/pyasn1/test/codec/ber/suite.py rename : python/pyasn1/test/codec/ber/test_decoder.py => third_party/python/pyasn1/test/codec/ber/test_decoder.py rename : python/pyasn1/test/codec/ber/test_encoder.py => third_party/python/pyasn1/test/codec/ber/test_encoder.py rename : python/pyasn1/test/codec/cer/__init__.py => third_party/python/pyasn1/test/codec/cer/__init__.py rename : python/pyasn1/test/codec/cer/suite.py => third_party/python/pyasn1/test/codec/cer/suite.py rename : python/pyasn1/test/codec/cer/test_decoder.py => third_party/python/pyasn1/test/codec/cer/test_decoder.py rename : python/pyasn1/test/codec/cer/test_encoder.py => third_party/python/pyasn1/test/codec/cer/test_encoder.py rename : python/pyasn1/test/codec/der/__init__.py => third_party/python/pyasn1/test/codec/der/__init__.py rename : python/pyasn1/test/codec/der/suite.py => third_party/python/pyasn1/test/codec/der/suite.py rename : python/pyasn1/test/codec/der/test_decoder.py => third_party/python/pyasn1/test/codec/der/test_decoder.py rename : python/pyasn1/test/codec/der/test_encoder.py => third_party/python/pyasn1/test/codec/der/test_encoder.py rename : python/pyasn1/test/codec/suite.py => third_party/python/pyasn1/test/codec/suite.py rename : python/pyasn1/test/suite.py => third_party/python/pyasn1/test/suite.py rename : python/pyasn1/test/type/__init__.py => third_party/python/pyasn1/test/type/__init__.py rename : python/pyasn1/test/type/suite.py => third_party/python/pyasn1/test/type/suite.py rename : python/pyasn1/test/type/test_constraint.py => third_party/python/pyasn1/test/type/test_constraint.py rename : python/pyasn1/test/type/test_namedtype.py => third_party/python/pyasn1/test/type/test_namedtype.py rename : python/pyasn1/test/type/test_tag.py => third_party/python/pyasn1/test/type/test_tag.py rename : python/pyasn1/test/type/test_univ.py => third_party/python/pyasn1/test/type/test_univ.py rename : python/pylru/pylru.py => third_party/python/pylru/pylru.py rename : python/pylru/test.py => third_party/python/pylru/test.py rename : python/pystache/.gitignore => third_party/python/pystache/.gitignore rename : python/pystache/.gitmodules => third_party/python/pystache/.gitmodules rename : python/pystache/.travis.yml => third_party/python/pystache/.travis.yml rename : python/pystache/HISTORY.md => third_party/python/pystache/HISTORY.md rename : python/pystache/LICENSE => third_party/python/pystache/LICENSE rename : python/pystache/MANIFEST.in => third_party/python/pystache/MANIFEST.in rename : python/pystache/README.md => third_party/python/pystache/README.md rename : python/pystache/TODO.md => third_party/python/pystache/TODO.md rename : python/pystache/gh/images/logo_phillips.png => third_party/python/pystache/gh/images/logo_phillips.png rename : python/pystache/pystache/__init__.py => third_party/python/pystache/pystache/__init__.py rename : python/pystache/pystache/commands/__init__.py => third_party/python/pystache/pystache/commands/__init__.py rename : python/pystache/pystache/commands/render.py => third_party/python/pystache/pystache/commands/render.py rename : python/pystache/pystache/commands/test.py => third_party/python/pystache/pystache/commands/test.py rename : python/pystache/pystache/common.py => third_party/python/pystache/pystache/common.py rename : python/pystache/pystache/context.py => third_party/python/pystache/pystache/context.py rename : python/pystache/pystache/defaults.py => third_party/python/pystache/pystache/defaults.py rename : python/pystache/pystache/init.py => third_party/python/pystache/pystache/init.py rename : python/pystache/pystache/loader.py => third_party/python/pystache/pystache/loader.py rename : python/pystache/pystache/locator.py => third_party/python/pystache/pystache/locator.py rename : python/pystache/pystache/parsed.py => third_party/python/pystache/pystache/parsed.py rename : python/pystache/pystache/parser.py => third_party/python/pystache/pystache/parser.py rename : python/pystache/pystache/renderengine.py => third_party/python/pystache/pystache/renderengine.py rename : python/pystache/pystache/renderer.py => third_party/python/pystache/pystache/renderer.py rename : python/pystache/pystache/specloader.py => third_party/python/pystache/pystache/specloader.py rename : python/pystache/pystache/template_spec.py => third_party/python/pystache/pystache/template_spec.py rename : python/pystache/setup.py => third_party/python/pystache/setup.py rename : python/pystache/setup_description.rst => third_party/python/pystache/setup_description.rst rename : python/pystache/test_pystache.py => third_party/python/pystache/test_pystache.py rename : python/pystache/tox.ini => third_party/python/pystache/tox.ini rename : python/pytest/.coveragerc => third_party/python/pytest/.coveragerc rename : python/pytest/AUTHORS => third_party/python/pytest/AUTHORS rename : python/pytest/LICENSE => third_party/python/pytest/LICENSE rename : python/pytest/MANIFEST.in => third_party/python/pytest/MANIFEST.in rename : python/pytest/PKG-INFO => third_party/python/pytest/PKG-INFO rename : python/pytest/README.rst => third_party/python/pytest/README.rst rename : python/pytest/_pytest/__init__.py => third_party/python/pytest/_pytest/__init__.py rename : python/pytest/_pytest/_argcomplete.py => third_party/python/pytest/_pytest/_argcomplete.py rename : python/pytest/_pytest/_code/__init__.py => third_party/python/pytest/_pytest/_code/__init__.py rename : python/pytest/_pytest/_code/_py2traceback.py => third_party/python/pytest/_pytest/_code/_py2traceback.py rename : python/pytest/_pytest/_code/code.py => third_party/python/pytest/_pytest/_code/code.py rename : python/pytest/_pytest/_code/source.py => third_party/python/pytest/_pytest/_code/source.py rename : python/pytest/_pytest/_pluggy.py => third_party/python/pytest/_pytest/_pluggy.py rename : python/pytest/_pytest/assertion/__init__.py => third_party/python/pytest/_pytest/assertion/__init__.py rename : python/pytest/_pytest/assertion/reinterpret.py => third_party/python/pytest/_pytest/assertion/reinterpret.py rename : python/pytest/_pytest/assertion/rewrite.py => third_party/python/pytest/_pytest/assertion/rewrite.py rename : python/pytest/_pytest/assertion/util.py => third_party/python/pytest/_pytest/assertion/util.py rename : python/pytest/_pytest/cacheprovider.py => third_party/python/pytest/_pytest/cacheprovider.py rename : python/pytest/_pytest/capture.py => third_party/python/pytest/_pytest/capture.py rename : python/pytest/_pytest/config.py => third_party/python/pytest/_pytest/config.py rename : python/pytest/_pytest/doctest.py => third_party/python/pytest/_pytest/doctest.py rename : python/pytest/_pytest/genscript.py => third_party/python/pytest/_pytest/genscript.py rename : python/pytest/_pytest/helpconfig.py => third_party/python/pytest/_pytest/helpconfig.py rename : python/pytest/_pytest/hookspec.py => third_party/python/pytest/_pytest/hookspec.py rename : python/pytest/_pytest/junitxml.py => third_party/python/pytest/_pytest/junitxml.py rename : python/pytest/_pytest/main.py => third_party/python/pytest/_pytest/main.py rename : python/pytest/_pytest/mark.py => third_party/python/pytest/_pytest/mark.py rename : python/pytest/_pytest/monkeypatch.py => third_party/python/pytest/_pytest/monkeypatch.py rename : python/pytest/_pytest/nose.py => third_party/python/pytest/_pytest/nose.py rename : python/pytest/_pytest/pastebin.py => third_party/python/pytest/_pytest/pastebin.py rename : python/pytest/_pytest/pdb.py => third_party/python/pytest/_pytest/pdb.py rename : python/pytest/_pytest/pytester.py => third_party/python/pytest/_pytest/pytester.py rename : python/pytest/_pytest/python.py => third_party/python/pytest/_pytest/python.py rename : python/pytest/_pytest/recwarn.py => third_party/python/pytest/_pytest/recwarn.py rename : python/pytest/_pytest/resultlog.py => third_party/python/pytest/_pytest/resultlog.py rename : python/pytest/_pytest/runner.py => third_party/python/pytest/_pytest/runner.py rename : python/pytest/_pytest/skipping.py => third_party/python/pytest/_pytest/skipping.py rename : python/pytest/_pytest/standalonetemplate.py => third_party/python/pytest/_pytest/standalonetemplate.py rename : python/pytest/_pytest/terminal.py => third_party/python/pytest/_pytest/terminal.py rename : python/pytest/_pytest/tmpdir.py => third_party/python/pytest/_pytest/tmpdir.py rename : python/pytest/_pytest/unittest.py => third_party/python/pytest/_pytest/unittest.py rename : python/pytest/_pytest/vendored_packages/README.md => third_party/python/pytest/_pytest/vendored_packages/README.md rename : python/pytest/_pytest/vendored_packages/__init__.py => third_party/python/pytest/_pytest/vendored_packages/__init__.py rename : python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/DESCRIPTION.rst => third_party/python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/DESCRIPTION.rst rename : python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/METADATA => third_party/python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/METADATA rename : python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/RECORD => third_party/python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/RECORD rename : python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/WHEEL => third_party/python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/WHEEL rename : python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/metadata.json => third_party/python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/metadata.json rename : python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/pbr.json => third_party/python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/pbr.json rename : python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/top_level.txt => third_party/python/pytest/_pytest/vendored_packages/pluggy-0.3.1.dist-info/top_level.txt rename : python/pytest/_pytest/vendored_packages/pluggy.py => third_party/python/pytest/_pytest/vendored_packages/pluggy.py rename : python/pytest/pytest.py => third_party/python/pytest/pytest.py rename : python/pytest/setup.cfg => third_party/python/pytest/setup.cfg rename : python/pytest/setup.py => third_party/python/pytest/setup.py rename : python/pytoml/PKG-INFO => third_party/python/pytoml/PKG-INFO rename : python/pytoml/pytoml/__init__.py => third_party/python/pytoml/pytoml/__init__.py rename : python/pytoml/pytoml/core.py => third_party/python/pytoml/pytoml/core.py rename : python/pytoml/pytoml/parser.py => third_party/python/pytoml/pytoml/parser.py rename : python/pytoml/pytoml/writer.py => third_party/python/pytoml/pytoml/writer.py rename : python/pytoml/setup.cfg => third_party/python/pytoml/setup.cfg rename : python/pytoml/setup.py => third_party/python/pytoml/setup.py rename : python/pytoml/test/test.py => third_party/python/pytoml/test/test.py rename : python/pyyaml/CHANGES => third_party/python/pyyaml/CHANGES rename : python/pyyaml/LICENSE => third_party/python/pyyaml/LICENSE rename : python/pyyaml/PKG-INFO => third_party/python/pyyaml/PKG-INFO rename : python/pyyaml/README => third_party/python/pyyaml/README rename : python/pyyaml/examples/pygments-lexer/example.yaml => third_party/python/pyyaml/examples/pygments-lexer/example.yaml rename : python/pyyaml/examples/pygments-lexer/yaml.py => third_party/python/pyyaml/examples/pygments-lexer/yaml.py rename : python/pyyaml/examples/yaml-highlight/yaml_hl.cfg => third_party/python/pyyaml/examples/yaml-highlight/yaml_hl.cfg rename : python/pyyaml/examples/yaml-highlight/yaml_hl.py => third_party/python/pyyaml/examples/yaml-highlight/yaml_hl.py rename : python/pyyaml/ext/_yaml.c => third_party/python/pyyaml/ext/_yaml.c rename : python/pyyaml/ext/_yaml.h => third_party/python/pyyaml/ext/_yaml.h rename : python/pyyaml/ext/_yaml.pxd => third_party/python/pyyaml/ext/_yaml.pxd rename : python/pyyaml/ext/_yaml.pyx => third_party/python/pyyaml/ext/_yaml.pyx rename : python/pyyaml/lib/yaml/__init__.py => third_party/python/pyyaml/lib/yaml/__init__.py rename : python/pyyaml/lib/yaml/composer.py => third_party/python/pyyaml/lib/yaml/composer.py rename : python/pyyaml/lib/yaml/constructor.py => third_party/python/pyyaml/lib/yaml/constructor.py rename : python/pyyaml/lib/yaml/cyaml.py => third_party/python/pyyaml/lib/yaml/cyaml.py rename : python/pyyaml/lib/yaml/dumper.py => third_party/python/pyyaml/lib/yaml/dumper.py rename : python/pyyaml/lib/yaml/emitter.py => third_party/python/pyyaml/lib/yaml/emitter.py rename : python/pyyaml/lib/yaml/error.py => third_party/python/pyyaml/lib/yaml/error.py rename : python/pyyaml/lib/yaml/events.py => third_party/python/pyyaml/lib/yaml/events.py rename : python/pyyaml/lib/yaml/loader.py => third_party/python/pyyaml/lib/yaml/loader.py rename : python/pyyaml/lib/yaml/nodes.py => third_party/python/pyyaml/lib/yaml/nodes.py rename : python/pyyaml/lib/yaml/parser.py => third_party/python/pyyaml/lib/yaml/parser.py rename : python/pyyaml/lib/yaml/reader.py => third_party/python/pyyaml/lib/yaml/reader.py rename : python/pyyaml/lib/yaml/representer.py => third_party/python/pyyaml/lib/yaml/representer.py rename : python/pyyaml/lib/yaml/resolver.py => third_party/python/pyyaml/lib/yaml/resolver.py rename : python/pyyaml/lib/yaml/scanner.py => third_party/python/pyyaml/lib/yaml/scanner.py rename : python/pyyaml/lib/yaml/serializer.py => third_party/python/pyyaml/lib/yaml/serializer.py rename : python/pyyaml/lib/yaml/tokens.py => third_party/python/pyyaml/lib/yaml/tokens.py rename : python/pyyaml/lib3/yaml/__init__.py => third_party/python/pyyaml/lib3/yaml/__init__.py rename : python/pyyaml/lib3/yaml/composer.py => third_party/python/pyyaml/lib3/yaml/composer.py rename : python/pyyaml/lib3/yaml/constructor.py => third_party/python/pyyaml/lib3/yaml/constructor.py rename : python/pyyaml/lib3/yaml/cyaml.py => third_party/python/pyyaml/lib3/yaml/cyaml.py rename : python/pyyaml/lib3/yaml/dumper.py => third_party/python/pyyaml/lib3/yaml/dumper.py rename : python/pyyaml/lib3/yaml/emitter.py => third_party/python/pyyaml/lib3/yaml/emitter.py rename : python/pyyaml/lib3/yaml/error.py => third_party/python/pyyaml/lib3/yaml/error.py rename : python/pyyaml/lib3/yaml/events.py => third_party/python/pyyaml/lib3/yaml/events.py rename : python/pyyaml/lib3/yaml/loader.py => third_party/python/pyyaml/lib3/yaml/loader.py rename : python/pyyaml/lib3/yaml/nodes.py => third_party/python/pyyaml/lib3/yaml/nodes.py rename : python/pyyaml/lib3/yaml/parser.py => third_party/python/pyyaml/lib3/yaml/parser.py rename : python/pyyaml/lib3/yaml/reader.py => third_party/python/pyyaml/lib3/yaml/reader.py rename : python/pyyaml/lib3/yaml/representer.py => third_party/python/pyyaml/lib3/yaml/representer.py rename : python/pyyaml/lib3/yaml/resolver.py => third_party/python/pyyaml/lib3/yaml/resolver.py rename : python/pyyaml/lib3/yaml/scanner.py => third_party/python/pyyaml/lib3/yaml/scanner.py rename : python/pyyaml/lib3/yaml/serializer.py => third_party/python/pyyaml/lib3/yaml/serializer.py rename : python/pyyaml/lib3/yaml/tokens.py => third_party/python/pyyaml/lib3/yaml/tokens.py rename : python/pyyaml/setup.cfg => third_party/python/pyyaml/setup.cfg rename : python/pyyaml/setup.py => third_party/python/pyyaml/setup.py rename : python/redo/PKG-INFO => third_party/python/redo/PKG-INFO rename : python/redo/README => third_party/python/redo/README rename : python/redo/redo.egg-info/PKG-INFO => third_party/python/redo/redo.egg-info/PKG-INFO rename : python/redo/redo.egg-info/SOURCES.txt => third_party/python/redo/redo.egg-info/SOURCES.txt rename : python/redo/redo.egg-info/dependency_links.txt => third_party/python/redo/redo.egg-info/dependency_links.txt rename : python/redo/redo.egg-info/entry_points.txt => third_party/python/redo/redo.egg-info/entry_points.txt rename : python/redo/redo.egg-info/top_level.txt => third_party/python/redo/redo.egg-info/top_level.txt rename : python/redo/redo/__init__.py => third_party/python/redo/redo/__init__.py rename : python/redo/redo/cmd.py => third_party/python/redo/redo/cmd.py rename : python/redo/setup.cfg => third_party/python/redo/setup.cfg rename : python/redo/setup.py => third_party/python/redo/setup.py rename : python/requests/HISTORY.rst => third_party/python/requests/HISTORY.rst rename : python/requests/LICENSE => third_party/python/requests/LICENSE rename : python/requests/MANIFEST.in => third_party/python/requests/MANIFEST.in rename : python/requests/NOTICE => third_party/python/requests/NOTICE rename : python/requests/PKG-INFO => third_party/python/requests/PKG-INFO rename : python/requests/README.rst => third_party/python/requests/README.rst rename : python/requests/requests.egg-info/PKG-INFO => third_party/python/requests/requests.egg-info/PKG-INFO rename : python/requests/requests.egg-info/SOURCES.txt => third_party/python/requests/requests.egg-info/SOURCES.txt rename : python/requests/requests.egg-info/dependency_links.txt => third_party/python/requests/requests.egg-info/dependency_links.txt rename : python/requests/requests.egg-info/not-zip-safe => third_party/python/requests/requests.egg-info/not-zip-safe rename : python/requests/requests.egg-info/requires.txt => third_party/python/requests/requests.egg-info/requires.txt rename : python/requests/requests.egg-info/top_level.txt => third_party/python/requests/requests.egg-info/top_level.txt rename : python/requests/requests/__init__.py => third_party/python/requests/requests/__init__.py rename : python/requests/requests/adapters.py => third_party/python/requests/requests/adapters.py rename : python/requests/requests/api.py => third_party/python/requests/requests/api.py rename : python/requests/requests/auth.py => third_party/python/requests/requests/auth.py rename : python/requests/requests/cacert.pem => third_party/python/requests/requests/cacert.pem rename : python/requests/requests/certs.py => third_party/python/requests/requests/certs.py rename : python/requests/requests/compat.py => third_party/python/requests/requests/compat.py rename : python/requests/requests/cookies.py => third_party/python/requests/requests/cookies.py rename : python/requests/requests/exceptions.py => third_party/python/requests/requests/exceptions.py rename : python/requests/requests/hooks.py => third_party/python/requests/requests/hooks.py rename : python/requests/requests/models.py => third_party/python/requests/requests/models.py rename : python/requests/requests/packages/__init__.py => third_party/python/requests/requests/packages/__init__.py rename : python/requests/requests/packages/chardet/__init__.py => third_party/python/requests/requests/packages/chardet/__init__.py rename : python/requests/requests/packages/chardet/big5freq.py => third_party/python/requests/requests/packages/chardet/big5freq.py rename : python/requests/requests/packages/chardet/big5prober.py => third_party/python/requests/requests/packages/chardet/big5prober.py rename : python/requests/requests/packages/chardet/chardetect.py => third_party/python/requests/requests/packages/chardet/chardetect.py rename : python/requests/requests/packages/chardet/chardistribution.py => third_party/python/requests/requests/packages/chardet/chardistribution.py rename : python/requests/requests/packages/chardet/charsetgroupprober.py => third_party/python/requests/requests/packages/chardet/charsetgroupprober.py rename : python/requests/requests/packages/chardet/charsetprober.py => third_party/python/requests/requests/packages/chardet/charsetprober.py rename : python/requests/requests/packages/chardet/codingstatemachine.py => third_party/python/requests/requests/packages/chardet/codingstatemachine.py rename : python/requests/requests/packages/chardet/compat.py => third_party/python/requests/requests/packages/chardet/compat.py rename : python/requests/requests/packages/chardet/constants.py => third_party/python/requests/requests/packages/chardet/constants.py rename : python/requests/requests/packages/chardet/cp949prober.py => third_party/python/requests/requests/packages/chardet/cp949prober.py rename : python/requests/requests/packages/chardet/escprober.py => third_party/python/requests/requests/packages/chardet/escprober.py rename : python/requests/requests/packages/chardet/escsm.py => third_party/python/requests/requests/packages/chardet/escsm.py rename : python/requests/requests/packages/chardet/eucjpprober.py => third_party/python/requests/requests/packages/chardet/eucjpprober.py rename : python/requests/requests/packages/chardet/euckrfreq.py => third_party/python/requests/requests/packages/chardet/euckrfreq.py rename : python/requests/requests/packages/chardet/euckrprober.py => third_party/python/requests/requests/packages/chardet/euckrprober.py rename : python/requests/requests/packages/chardet/euctwfreq.py => third_party/python/requests/requests/packages/chardet/euctwfreq.py rename : python/requests/requests/packages/chardet/euctwprober.py => third_party/python/requests/requests/packages/chardet/euctwprober.py rename : python/requests/requests/packages/chardet/gb2312freq.py => third_party/python/requests/requests/packages/chardet/gb2312freq.py rename : python/requests/requests/packages/chardet/gb2312prober.py => third_party/python/requests/requests/packages/chardet/gb2312prober.py rename : python/requests/requests/packages/chardet/hebrewprober.py => third_party/python/requests/requests/packages/chardet/hebrewprober.py rename : python/requests/requests/packages/chardet/jisfreq.py => third_party/python/requests/requests/packages/chardet/jisfreq.py rename : python/requests/requests/packages/chardet/jpcntx.py => third_party/python/requests/requests/packages/chardet/jpcntx.py rename : python/requests/requests/packages/chardet/langbulgarianmodel.py => third_party/python/requests/requests/packages/chardet/langbulgarianmodel.py rename : python/requests/requests/packages/chardet/langcyrillicmodel.py => third_party/python/requests/requests/packages/chardet/langcyrillicmodel.py rename : python/requests/requests/packages/chardet/langgreekmodel.py => third_party/python/requests/requests/packages/chardet/langgreekmodel.py rename : python/requests/requests/packages/chardet/langhebrewmodel.py => third_party/python/requests/requests/packages/chardet/langhebrewmodel.py rename : python/requests/requests/packages/chardet/langhungarianmodel.py => third_party/python/requests/requests/packages/chardet/langhungarianmodel.py rename : python/requests/requests/packages/chardet/langthaimodel.py => third_party/python/requests/requests/packages/chardet/langthaimodel.py rename : python/requests/requests/packages/chardet/latin1prober.py => third_party/python/requests/requests/packages/chardet/latin1prober.py rename : python/requests/requests/packages/chardet/mbcharsetprober.py => third_party/python/requests/requests/packages/chardet/mbcharsetprober.py rename : python/requests/requests/packages/chardet/mbcsgroupprober.py => third_party/python/requests/requests/packages/chardet/mbcsgroupprober.py rename : python/requests/requests/packages/chardet/mbcssm.py => third_party/python/requests/requests/packages/chardet/mbcssm.py rename : python/requests/requests/packages/chardet/sbcharsetprober.py => third_party/python/requests/requests/packages/chardet/sbcharsetprober.py rename : python/requests/requests/packages/chardet/sbcsgroupprober.py => third_party/python/requests/requests/packages/chardet/sbcsgroupprober.py rename : python/requests/requests/packages/chardet/sjisprober.py => third_party/python/requests/requests/packages/chardet/sjisprober.py rename : python/requests/requests/packages/chardet/universaldetector.py => third_party/python/requests/requests/packages/chardet/universaldetector.py rename : python/requests/requests/packages/chardet/utf8prober.py => third_party/python/requests/requests/packages/chardet/utf8prober.py rename : python/requests/requests/packages/urllib3/__init__.py => third_party/python/requests/requests/packages/urllib3/__init__.py rename : python/requests/requests/packages/urllib3/_collections.py => third_party/python/requests/requests/packages/urllib3/_collections.py rename : python/requests/requests/packages/urllib3/connection.py => third_party/python/requests/requests/packages/urllib3/connection.py rename : python/requests/requests/packages/urllib3/connectionpool.py => third_party/python/requests/requests/packages/urllib3/connectionpool.py rename : python/requests/requests/packages/urllib3/contrib/__init__.py => third_party/python/requests/requests/packages/urllib3/contrib/__init__.py rename : python/requests/requests/packages/urllib3/contrib/appengine.py => third_party/python/requests/requests/packages/urllib3/contrib/appengine.py rename : python/requests/requests/packages/urllib3/contrib/ntlmpool.py => third_party/python/requests/requests/packages/urllib3/contrib/ntlmpool.py rename : python/requests/requests/packages/urllib3/contrib/pyopenssl.py => third_party/python/requests/requests/packages/urllib3/contrib/pyopenssl.py rename : python/requests/requests/packages/urllib3/exceptions.py => third_party/python/requests/requests/packages/urllib3/exceptions.py rename : python/requests/requests/packages/urllib3/fields.py => third_party/python/requests/requests/packages/urllib3/fields.py rename : python/requests/requests/packages/urllib3/filepost.py => third_party/python/requests/requests/packages/urllib3/filepost.py rename : python/requests/requests/packages/urllib3/packages/__init__.py => third_party/python/requests/requests/packages/urllib3/packages/__init__.py rename : python/requests/requests/packages/urllib3/packages/ordered_dict.py => third_party/python/requests/requests/packages/urllib3/packages/ordered_dict.py rename : python/requests/requests/packages/urllib3/packages/six.py => third_party/python/requests/requests/packages/urllib3/packages/six.py rename : python/requests/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py => third_party/python/requests/requests/packages/urllib3/packages/ssl_match_hostname/__init__.py rename : python/requests/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py => third_party/python/requests/requests/packages/urllib3/packages/ssl_match_hostname/_implementation.py rename : python/requests/requests/packages/urllib3/poolmanager.py => third_party/python/requests/requests/packages/urllib3/poolmanager.py rename : python/requests/requests/packages/urllib3/request.py => third_party/python/requests/requests/packages/urllib3/request.py rename : python/requests/requests/packages/urllib3/response.py => third_party/python/requests/requests/packages/urllib3/response.py rename : python/requests/requests/packages/urllib3/util/__init__.py => third_party/python/requests/requests/packages/urllib3/util/__init__.py rename : python/requests/requests/packages/urllib3/util/connection.py => third_party/python/requests/requests/packages/urllib3/util/connection.py rename : python/requests/requests/packages/urllib3/util/request.py => third_party/python/requests/requests/packages/urllib3/util/request.py rename : python/requests/requests/packages/urllib3/util/response.py => third_party/python/requests/requests/packages/urllib3/util/response.py rename : python/requests/requests/packages/urllib3/util/retry.py => third_party/python/requests/requests/packages/urllib3/util/retry.py rename : python/requests/requests/packages/urllib3/util/ssl_.py => third_party/python/requests/requests/packages/urllib3/util/ssl_.py rename : python/requests/requests/packages/urllib3/util/timeout.py => third_party/python/requests/requests/packages/urllib3/util/timeout.py rename : python/requests/requests/packages/urllib3/util/url.py => third_party/python/requests/requests/packages/urllib3/util/url.py rename : python/requests/requests/sessions.py => third_party/python/requests/requests/sessions.py rename : python/requests/requests/status_codes.py => third_party/python/requests/requests/status_codes.py rename : python/requests/requests/structures.py => third_party/python/requests/requests/structures.py rename : python/requests/requests/utils.py => third_party/python/requests/requests/utils.py rename : python/requests/requirements.txt => third_party/python/requests/requirements.txt rename : python/requests/setup.cfg => third_party/python/requests/setup.cfg rename : python/requests/setup.py => third_party/python/requests/setup.py rename : python/requests/test_requests.py => third_party/python/requests/test_requests.py rename : python/rsa/LICENSE => third_party/python/rsa/LICENSE rename : python/rsa/MANIFEST.in => third_party/python/rsa/MANIFEST.in rename : python/rsa/PKG-INFO => third_party/python/rsa/PKG-INFO rename : python/rsa/README.rst => third_party/python/rsa/README.rst rename : python/rsa/create_timing_table.py => third_party/python/rsa/create_timing_table.py rename : python/rsa/playstuff.py => third_party/python/rsa/playstuff.py rename : python/rsa/rsa.egg-info/PKG-INFO => third_party/python/rsa/rsa.egg-info/PKG-INFO rename : python/rsa/rsa.egg-info/SOURCES.txt => third_party/python/rsa/rsa.egg-info/SOURCES.txt rename : python/rsa/rsa.egg-info/dependency_links.txt => third_party/python/rsa/rsa.egg-info/dependency_links.txt rename : python/rsa/rsa.egg-info/entry_points.txt => third_party/python/rsa/rsa.egg-info/entry_points.txt rename : python/rsa/rsa.egg-info/requires.txt => third_party/python/rsa/rsa.egg-info/requires.txt rename : python/rsa/rsa.egg-info/top_level.txt => third_party/python/rsa/rsa.egg-info/top_level.txt rename : python/rsa/rsa/__init__.py => third_party/python/rsa/rsa/__init__.py rename : python/rsa/rsa/_compat.py => third_party/python/rsa/rsa/_compat.py rename : python/rsa/rsa/_version133.py => third_party/python/rsa/rsa/_version133.py rename : python/rsa/rsa/_version200.py => third_party/python/rsa/rsa/_version200.py rename : python/rsa/rsa/asn1.py => third_party/python/rsa/rsa/asn1.py rename : python/rsa/rsa/bigfile.py => third_party/python/rsa/rsa/bigfile.py rename : python/rsa/rsa/cli.py => third_party/python/rsa/rsa/cli.py rename : python/rsa/rsa/common.py => third_party/python/rsa/rsa/common.py rename : python/rsa/rsa/core.py => third_party/python/rsa/rsa/core.py rename : python/rsa/rsa/key.py => third_party/python/rsa/rsa/key.py rename : python/rsa/rsa/parallel.py => third_party/python/rsa/rsa/parallel.py rename : python/rsa/rsa/pem.py => third_party/python/rsa/rsa/pem.py rename : python/rsa/rsa/pkcs1.py => third_party/python/rsa/rsa/pkcs1.py rename : python/rsa/rsa/prime.py => third_party/python/rsa/rsa/prime.py rename : python/rsa/rsa/randnum.py => third_party/python/rsa/rsa/randnum.py rename : python/rsa/rsa/transform.py => third_party/python/rsa/rsa/transform.py rename : python/rsa/rsa/util.py => third_party/python/rsa/rsa/util.py rename : python/rsa/rsa/varblock.py => third_party/python/rsa/rsa/varblock.py rename : python/rsa/run_tests.py => third_party/python/rsa/run_tests.py rename : python/rsa/setup.cfg => third_party/python/rsa/setup.cfg rename : python/rsa/setup.py => third_party/python/rsa/setup.py rename : python/rsa/tests/__init__.py => third_party/python/rsa/tests/__init__.py rename : python/rsa/tests/constants.py => third_party/python/rsa/tests/constants.py rename : python/rsa/tests/py2kconstants.py => third_party/python/rsa/tests/py2kconstants.py rename : python/rsa/tests/py3kconstants.py => third_party/python/rsa/tests/py3kconstants.py rename : python/rsa/tests/test_bigfile.py => third_party/python/rsa/tests/test_bigfile.py rename : python/rsa/tests/test_common.py => third_party/python/rsa/tests/test_common.py rename : python/rsa/tests/test_compat.py => third_party/python/rsa/tests/test_compat.py rename : python/rsa/tests/test_integers.py => third_party/python/rsa/tests/test_integers.py rename : python/rsa/tests/test_load_save_keys.py => third_party/python/rsa/tests/test_load_save_keys.py rename : python/rsa/tests/test_pem.py => third_party/python/rsa/tests/test_pem.py rename : python/rsa/tests/test_pkcs1.py => third_party/python/rsa/tests/test_pkcs1.py rename : python/rsa/tests/test_strings.py => third_party/python/rsa/tests/test_strings.py rename : python/rsa/tests/test_transform.py => third_party/python/rsa/tests/test_transform.py rename : python/rsa/tests/test_varblock.py => third_party/python/rsa/tests/test_varblock.py rename : python/slugid/.gitignore => third_party/python/slugid/.gitignore rename : python/slugid/.travis.yml => third_party/python/slugid/.travis.yml rename : python/slugid/LICENSE => third_party/python/slugid/LICENSE rename : python/slugid/README.rst => third_party/python/slugid/README.rst rename : python/slugid/requirements.txt => third_party/python/slugid/requirements.txt rename : python/slugid/setup.py => third_party/python/slugid/setup.py rename : python/slugid/slugid/__init__.py => third_party/python/slugid/slugid/__init__.py rename : python/slugid/slugid/slugid.py => third_party/python/slugid/slugid/slugid.py rename : python/slugid/test.py => third_party/python/slugid/test.py rename : python/slugid/tox.ini => third_party/python/slugid/tox.ini rename : python/virtualenv/AUTHORS.txt => third_party/python/virtualenv/AUTHORS.txt rename : python/virtualenv/LICENSE.txt => third_party/python/virtualenv/LICENSE.txt rename : python/virtualenv/MANIFEST.in => third_party/python/virtualenv/MANIFEST.in rename : python/virtualenv/PKG-INFO => third_party/python/virtualenv/PKG-INFO rename : python/virtualenv/README.rst => third_party/python/virtualenv/README.rst rename : python/virtualenv/bin/rebuild-script.py => third_party/python/virtualenv/bin/rebuild-script.py rename : python/virtualenv/docs/Makefile => third_party/python/virtualenv/docs/Makefile rename : python/virtualenv/docs/changes.rst => third_party/python/virtualenv/docs/changes.rst rename : python/virtualenv/docs/conf.py => third_party/python/virtualenv/docs/conf.py rename : python/virtualenv/docs/development.rst => third_party/python/virtualenv/docs/development.rst rename : python/virtualenv/docs/index.rst => third_party/python/virtualenv/docs/index.rst rename : python/virtualenv/docs/installation.rst => third_party/python/virtualenv/docs/installation.rst rename : python/virtualenv/docs/make.bat => third_party/python/virtualenv/docs/make.bat rename : python/virtualenv/docs/reference.rst => third_party/python/virtualenv/docs/reference.rst rename : python/virtualenv/docs/userguide.rst => third_party/python/virtualenv/docs/userguide.rst rename : python/virtualenv/scripts/virtualenv => third_party/python/virtualenv/scripts/virtualenv rename : python/virtualenv/setup.cfg => third_party/python/virtualenv/setup.cfg rename : python/virtualenv/setup.py => third_party/python/virtualenv/setup.py rename : python/virtualenv/site.py => third_party/python/virtualenv/site.py rename : python/virtualenv/tests/__init__.py => third_party/python/virtualenv/tests/__init__.py rename : python/virtualenv/tests/test_activate.sh => third_party/python/virtualenv/tests/test_activate.sh rename : python/virtualenv/tests/test_activate_output.expected => third_party/python/virtualenv/tests/test_activate_output.expected rename : python/virtualenv/tests/test_cmdline.py => third_party/python/virtualenv/tests/test_cmdline.py rename : python/virtualenv/tests/test_virtualenv.py => third_party/python/virtualenv/tests/test_virtualenv.py rename : python/virtualenv/virtualenv.py => third_party/python/virtualenv/virtualenv.py rename : python/virtualenv/virtualenv_embedded/activate.bat => third_party/python/virtualenv/virtualenv_embedded/activate.bat rename : python/virtualenv/virtualenv_embedded/activate.csh => third_party/python/virtualenv/virtualenv_embedded/activate.csh rename : python/virtualenv/virtualenv_embedded/activate.fish => third_party/python/virtualenv/virtualenv_embedded/activate.fish rename : python/virtualenv/virtualenv_embedded/activate.ps1 => third_party/python/virtualenv/virtualenv_embedded/activate.ps1 rename : python/virtualenv/virtualenv_embedded/activate.sh => third_party/python/virtualenv/virtualenv_embedded/activate.sh rename : python/virtualenv/virtualenv_embedded/activate_this.py => third_party/python/virtualenv/virtualenv_embedded/activate_this.py rename : python/virtualenv/virtualenv_embedded/deactivate.bat => third_party/python/virtualenv/virtualenv_embedded/deactivate.bat rename : python/virtualenv/virtualenv_embedded/distutils-init.py => third_party/python/virtualenv/virtualenv_embedded/distutils-init.py rename : python/virtualenv/virtualenv_embedded/distutils.cfg => third_party/python/virtualenv/virtualenv_embedded/distutils.cfg rename : python/virtualenv/virtualenv_embedded/python-config => third_party/python/virtualenv/virtualenv_embedded/python-config rename : python/virtualenv/virtualenv_embedded/site.py => third_party/python/virtualenv/virtualenv_embedded/site.py rename : python/virtualenv/virtualenv_support/__init__.py => third_party/python/virtualenv/virtualenv_support/__init__.py rename : python/virtualenv/virtualenv_support/argparse-1.4.0-py2.py3-none-any.whl => third_party/python/virtualenv/virtualenv_support/argparse-1.4.0-py2.py3-none-any.whl rename : python/virtualenv/virtualenv_support/pip-8.1.2-py2.py3-none-any.whl => third_party/python/virtualenv/virtualenv_support/pip-8.1.2-py2.py3-none-any.whl rename : python/virtualenv/virtualenv_support/setuptools-25.2.0-py2.py3-none-any.whl => third_party/python/virtualenv/virtualenv_support/setuptools-25.2.0-py2.py3-none-any.whl rename : python/virtualenv/virtualenv_support/wheel-0.29.0-py2.py3-none-any.whl => third_party/python/virtualenv/virtualenv_support/wheel-0.29.0-py2.py3-none-any.whl rename : python/voluptuous/COPYING => third_party/python/voluptuous/COPYING rename : python/voluptuous/MANIFEST.in => third_party/python/voluptuous/MANIFEST.in rename : python/voluptuous/PKG-INFO => third_party/python/voluptuous/PKG-INFO rename : python/voluptuous/README.md => third_party/python/voluptuous/README.md rename : python/voluptuous/README.rst => third_party/python/voluptuous/README.rst rename : python/voluptuous/setup.cfg => third_party/python/voluptuous/setup.cfg rename : python/voluptuous/setup.py => third_party/python/voluptuous/setup.py rename : python/voluptuous/tests.md => third_party/python/voluptuous/tests.md rename : python/voluptuous/voluptuous.py => third_party/python/voluptuous/voluptuous.py rename : python/which/LICENSE.txt => third_party/python/which/LICENSE.txt rename : python/which/MANIFEST.in => third_party/python/which/MANIFEST.in rename : python/which/Makefile.win => third_party/python/which/Makefile.win rename : python/which/PKG-INFO => third_party/python/which/PKG-INFO rename : python/which/README.txt => third_party/python/which/README.txt rename : python/which/TODO.txt => third_party/python/which/TODO.txt rename : python/which/build.py => third_party/python/which/build.py rename : python/which/launcher.cpp => third_party/python/which/launcher.cpp rename : python/which/logo.jpg => third_party/python/which/logo.jpg rename : python/which/setup.py => third_party/python/which/setup.py rename : python/which/test/test_which.py => third_party/python/which/test/test_which.py rename : python/which/test/testsupport.py => third_party/python/which/test/testsupport.py rename : python/which/which.py => third_party/python/which/which.py extra : rebase_source : fc38848c444c36b0d38a0c33aa5be74d5037d57d
1451 lines
45 KiB
Python
1451 lines
45 KiB
Python
# validate.py
|
|
# A Validator object
|
|
# Copyright (C) 2005-2010 Michael Foord, Mark Andrews, Nicola Larosa
|
|
# E-mail: fuzzyman AT voidspace DOT org DOT uk
|
|
# mark AT la-la DOT com
|
|
# nico AT tekNico DOT net
|
|
|
|
# This software is licensed under the terms of the BSD license.
|
|
# http://www.voidspace.org.uk/python/license.shtml
|
|
# Basically you're free to copy, modify, distribute and relicense it,
|
|
# So long as you keep a copy of the license with it.
|
|
|
|
# Scripts maintained at http://www.voidspace.org.uk/python/index.shtml
|
|
# For information about bugfixes, updates and support, please join the
|
|
# ConfigObj mailing list:
|
|
# http://lists.sourceforge.net/lists/listinfo/configobj-develop
|
|
# Comments, suggestions and bug reports welcome.
|
|
|
|
"""
|
|
The Validator object is used to check that supplied values
|
|
conform to a specification.
|
|
|
|
The value can be supplied as a string - e.g. from a config file.
|
|
In this case the check will also *convert* the value to
|
|
the required type. This allows you to add validation
|
|
as a transparent layer to access data stored as strings.
|
|
The validation checks that the data is correct *and*
|
|
converts it to the expected type.
|
|
|
|
Some standard checks are provided for basic data types.
|
|
Additional checks are easy to write. They can be
|
|
provided when the ``Validator`` is instantiated or
|
|
added afterwards.
|
|
|
|
The standard functions work with the following basic data types :
|
|
|
|
* integers
|
|
* floats
|
|
* booleans
|
|
* strings
|
|
* ip_addr
|
|
|
|
plus lists of these datatypes
|
|
|
|
Adding additional checks is done through coding simple functions.
|
|
|
|
The full set of standard checks are :
|
|
|
|
* 'integer': matches integer values (including negative)
|
|
Takes optional 'min' and 'max' arguments : ::
|
|
|
|
integer()
|
|
integer(3, 9) # any value from 3 to 9
|
|
integer(min=0) # any positive value
|
|
integer(max=9)
|
|
|
|
* 'float': matches float values
|
|
Has the same parameters as the integer check.
|
|
|
|
* 'boolean': matches boolean values - ``True`` or ``False``
|
|
Acceptable string values for True are :
|
|
true, on, yes, 1
|
|
Acceptable string values for False are :
|
|
false, off, no, 0
|
|
|
|
Any other value raises an error.
|
|
|
|
* 'ip_addr': matches an Internet Protocol address, v.4, represented
|
|
by a dotted-quad string, i.e. '1.2.3.4'.
|
|
|
|
* 'string': matches any string.
|
|
Takes optional keyword args 'min' and 'max'
|
|
to specify min and max lengths of the string.
|
|
|
|
* 'list': matches any list.
|
|
Takes optional keyword args 'min', and 'max' to specify min and
|
|
max sizes of the list. (Always returns a list.)
|
|
|
|
* 'tuple': matches any tuple.
|
|
Takes optional keyword args 'min', and 'max' to specify min and
|
|
max sizes of the tuple. (Always returns a tuple.)
|
|
|
|
* 'int_list': Matches a list of integers.
|
|
Takes the same arguments as list.
|
|
|
|
* 'float_list': Matches a list of floats.
|
|
Takes the same arguments as list.
|
|
|
|
* 'bool_list': Matches a list of boolean values.
|
|
Takes the same arguments as list.
|
|
|
|
* 'ip_addr_list': Matches a list of IP addresses.
|
|
Takes the same arguments as list.
|
|
|
|
* 'string_list': Matches a list of strings.
|
|
Takes the same arguments as list.
|
|
|
|
* 'mixed_list': Matches a list with different types in
|
|
specific positions. List size must match
|
|
the number of arguments.
|
|
|
|
Each position can be one of :
|
|
'integer', 'float', 'ip_addr', 'string', 'boolean'
|
|
|
|
So to specify a list with two strings followed
|
|
by two integers, you write the check as : ::
|
|
|
|
mixed_list('string', 'string', 'integer', 'integer')
|
|
|
|
* 'pass': This check matches everything ! It never fails
|
|
and the value is unchanged.
|
|
|
|
It is also the default if no check is specified.
|
|
|
|
* 'option': This check matches any from a list of options.
|
|
You specify this check with : ::
|
|
|
|
option('option 1', 'option 2', 'option 3')
|
|
|
|
You can supply a default value (returned if no value is supplied)
|
|
using the default keyword argument.
|
|
|
|
You specify a list argument for default using a list constructor syntax in
|
|
the check : ::
|
|
|
|
checkname(arg1, arg2, default=list('val 1', 'val 2', 'val 3'))
|
|
|
|
A badly formatted set of arguments will raise a ``VdtParamError``.
|
|
"""
|
|
|
|
__version__ = '1.0.1'
|
|
|
|
|
|
__all__ = (
|
|
'__version__',
|
|
'dottedQuadToNum',
|
|
'numToDottedQuad',
|
|
'ValidateError',
|
|
'VdtUnknownCheckError',
|
|
'VdtParamError',
|
|
'VdtTypeError',
|
|
'VdtValueError',
|
|
'VdtValueTooSmallError',
|
|
'VdtValueTooBigError',
|
|
'VdtValueTooShortError',
|
|
'VdtValueTooLongError',
|
|
'VdtMissingValue',
|
|
'Validator',
|
|
'is_integer',
|
|
'is_float',
|
|
'is_boolean',
|
|
'is_list',
|
|
'is_tuple',
|
|
'is_ip_addr',
|
|
'is_string',
|
|
'is_int_list',
|
|
'is_bool_list',
|
|
'is_float_list',
|
|
'is_string_list',
|
|
'is_ip_addr_list',
|
|
'is_mixed_list',
|
|
'is_option',
|
|
'__docformat__',
|
|
)
|
|
|
|
|
|
import re
|
|
|
|
|
|
_list_arg = re.compile(r'''
|
|
(?:
|
|
([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*list\(
|
|
(
|
|
(?:
|
|
\s*
|
|
(?:
|
|
(?:".*?")| # double quotes
|
|
(?:'.*?')| # single quotes
|
|
(?:[^'",\s\)][^,\)]*?) # unquoted
|
|
)
|
|
\s*,\s*
|
|
)*
|
|
(?:
|
|
(?:".*?")| # double quotes
|
|
(?:'.*?')| # single quotes
|
|
(?:[^'",\s\)][^,\)]*?) # unquoted
|
|
)? # last one
|
|
)
|
|
\)
|
|
)
|
|
''', re.VERBOSE | re.DOTALL) # two groups
|
|
|
|
_list_members = re.compile(r'''
|
|
(
|
|
(?:".*?")| # double quotes
|
|
(?:'.*?')| # single quotes
|
|
(?:[^'",\s=][^,=]*?) # unquoted
|
|
)
|
|
(?:
|
|
(?:\s*,\s*)|(?:\s*$) # comma
|
|
)
|
|
''', re.VERBOSE | re.DOTALL) # one group
|
|
|
|
_paramstring = r'''
|
|
(?:
|
|
(
|
|
(?:
|
|
[a-zA-Z_][a-zA-Z0-9_]*\s*=\s*list\(
|
|
(?:
|
|
\s*
|
|
(?:
|
|
(?:".*?")| # double quotes
|
|
(?:'.*?')| # single quotes
|
|
(?:[^'",\s\)][^,\)]*?) # unquoted
|
|
)
|
|
\s*,\s*
|
|
)*
|
|
(?:
|
|
(?:".*?")| # double quotes
|
|
(?:'.*?')| # single quotes
|
|
(?:[^'",\s\)][^,\)]*?) # unquoted
|
|
)? # last one
|
|
\)
|
|
)|
|
|
(?:
|
|
(?:".*?")| # double quotes
|
|
(?:'.*?')| # single quotes
|
|
(?:[^'",\s=][^,=]*?)| # unquoted
|
|
(?: # keyword argument
|
|
[a-zA-Z_][a-zA-Z0-9_]*\s*=\s*
|
|
(?:
|
|
(?:".*?")| # double quotes
|
|
(?:'.*?')| # single quotes
|
|
(?:[^'",\s=][^,=]*?) # unquoted
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(?:
|
|
(?:\s*,\s*)|(?:\s*$) # comma
|
|
)
|
|
)
|
|
'''
|
|
|
|
_matchstring = '^%s*' % _paramstring
|
|
|
|
# Python pre 2.2.1 doesn't have bool
|
|
try:
|
|
bool
|
|
except NameError:
|
|
def bool(val):
|
|
"""Simple boolean equivalent function. """
|
|
if val:
|
|
return 1
|
|
else:
|
|
return 0
|
|
|
|
|
|
def dottedQuadToNum(ip):
|
|
"""
|
|
Convert decimal dotted quad string to long integer
|
|
|
|
>>> int(dottedQuadToNum('1 '))
|
|
1
|
|
>>> int(dottedQuadToNum(' 1.2'))
|
|
16777218
|
|
>>> int(dottedQuadToNum(' 1.2.3 '))
|
|
16908291
|
|
>>> int(dottedQuadToNum('1.2.3.4'))
|
|
16909060
|
|
>>> dottedQuadToNum('255.255.255.255')
|
|
4294967295L
|
|
>>> dottedQuadToNum('255.255.255.256')
|
|
Traceback (most recent call last):
|
|
ValueError: Not a good dotted-quad IP: 255.255.255.256
|
|
"""
|
|
|
|
# import here to avoid it when ip_addr values are not used
|
|
import socket, struct
|
|
|
|
try:
|
|
return struct.unpack('!L',
|
|
socket.inet_aton(ip.strip()))[0]
|
|
except socket.error:
|
|
# bug in inet_aton, corrected in Python 2.4
|
|
if ip.strip() == '255.255.255.255':
|
|
return 0xFFFFFFFFL
|
|
else:
|
|
raise ValueError('Not a good dotted-quad IP: %s' % ip)
|
|
return
|
|
|
|
|
|
def numToDottedQuad(num):
|
|
"""
|
|
Convert long int to dotted quad string
|
|
|
|
>>> numToDottedQuad(-1L)
|
|
Traceback (most recent call last):
|
|
ValueError: Not a good numeric IP: -1
|
|
>>> numToDottedQuad(1L)
|
|
'0.0.0.1'
|
|
>>> numToDottedQuad(16777218L)
|
|
'1.0.0.2'
|
|
>>> numToDottedQuad(16908291L)
|
|
'1.2.0.3'
|
|
>>> numToDottedQuad(16909060L)
|
|
'1.2.3.4'
|
|
>>> numToDottedQuad(4294967295L)
|
|
'255.255.255.255'
|
|
>>> numToDottedQuad(4294967296L)
|
|
Traceback (most recent call last):
|
|
ValueError: Not a good numeric IP: 4294967296
|
|
"""
|
|
|
|
# import here to avoid it when ip_addr values are not used
|
|
import socket, struct
|
|
|
|
# no need to intercept here, 4294967295L is fine
|
|
if num > 4294967295L or num < 0:
|
|
raise ValueError('Not a good numeric IP: %s' % num)
|
|
try:
|
|
return socket.inet_ntoa(
|
|
struct.pack('!L', long(num)))
|
|
except (socket.error, struct.error, OverflowError):
|
|
raise ValueError('Not a good numeric IP: %s' % num)
|
|
|
|
|
|
class ValidateError(Exception):
|
|
"""
|
|
This error indicates that the check failed.
|
|
It can be the base class for more specific errors.
|
|
|
|
Any check function that fails ought to raise this error.
|
|
(or a subclass)
|
|
|
|
>>> raise ValidateError
|
|
Traceback (most recent call last):
|
|
ValidateError
|
|
"""
|
|
|
|
|
|
class VdtMissingValue(ValidateError):
|
|
"""No value was supplied to a check that needed one."""
|
|
|
|
|
|
class VdtUnknownCheckError(ValidateError):
|
|
"""An unknown check function was requested"""
|
|
|
|
def __init__(self, value):
|
|
"""
|
|
>>> raise VdtUnknownCheckError('yoda')
|
|
Traceback (most recent call last):
|
|
VdtUnknownCheckError: the check "yoda" is unknown.
|
|
"""
|
|
ValidateError.__init__(self, 'the check "%s" is unknown.' % (value,))
|
|
|
|
|
|
class VdtParamError(SyntaxError):
|
|
"""An incorrect parameter was passed"""
|
|
|
|
def __init__(self, name, value):
|
|
"""
|
|
>>> raise VdtParamError('yoda', 'jedi')
|
|
Traceback (most recent call last):
|
|
VdtParamError: passed an incorrect value "jedi" for parameter "yoda".
|
|
"""
|
|
SyntaxError.__init__(self, 'passed an incorrect value "%s" for parameter "%s".' % (value, name))
|
|
|
|
|
|
class VdtTypeError(ValidateError):
|
|
"""The value supplied was of the wrong type"""
|
|
|
|
def __init__(self, value):
|
|
"""
|
|
>>> raise VdtTypeError('jedi')
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "jedi" is of the wrong type.
|
|
"""
|
|
ValidateError.__init__(self, 'the value "%s" is of the wrong type.' % (value,))
|
|
|
|
|
|
class VdtValueError(ValidateError):
|
|
"""The value supplied was of the correct type, but was not an allowed value."""
|
|
|
|
def __init__(self, value):
|
|
"""
|
|
>>> raise VdtValueError('jedi')
|
|
Traceback (most recent call last):
|
|
VdtValueError: the value "jedi" is unacceptable.
|
|
"""
|
|
ValidateError.__init__(self, 'the value "%s" is unacceptable.' % (value,))
|
|
|
|
|
|
class VdtValueTooSmallError(VdtValueError):
|
|
"""The value supplied was of the correct type, but was too small."""
|
|
|
|
def __init__(self, value):
|
|
"""
|
|
>>> raise VdtValueTooSmallError('0')
|
|
Traceback (most recent call last):
|
|
VdtValueTooSmallError: the value "0" is too small.
|
|
"""
|
|
ValidateError.__init__(self, 'the value "%s" is too small.' % (value,))
|
|
|
|
|
|
class VdtValueTooBigError(VdtValueError):
|
|
"""The value supplied was of the correct type, but was too big."""
|
|
|
|
def __init__(self, value):
|
|
"""
|
|
>>> raise VdtValueTooBigError('1')
|
|
Traceback (most recent call last):
|
|
VdtValueTooBigError: the value "1" is too big.
|
|
"""
|
|
ValidateError.__init__(self, 'the value "%s" is too big.' % (value,))
|
|
|
|
|
|
class VdtValueTooShortError(VdtValueError):
|
|
"""The value supplied was of the correct type, but was too short."""
|
|
|
|
def __init__(self, value):
|
|
"""
|
|
>>> raise VdtValueTooShortError('jed')
|
|
Traceback (most recent call last):
|
|
VdtValueTooShortError: the value "jed" is too short.
|
|
"""
|
|
ValidateError.__init__(
|
|
self,
|
|
'the value "%s" is too short.' % (value,))
|
|
|
|
|
|
class VdtValueTooLongError(VdtValueError):
|
|
"""The value supplied was of the correct type, but was too long."""
|
|
|
|
def __init__(self, value):
|
|
"""
|
|
>>> raise VdtValueTooLongError('jedie')
|
|
Traceback (most recent call last):
|
|
VdtValueTooLongError: the value "jedie" is too long.
|
|
"""
|
|
ValidateError.__init__(self, 'the value "%s" is too long.' % (value,))
|
|
|
|
|
|
class Validator(object):
|
|
"""
|
|
Validator is an object that allows you to register a set of 'checks'.
|
|
These checks take input and test that it conforms to the check.
|
|
|
|
This can also involve converting the value from a string into
|
|
the correct datatype.
|
|
|
|
The ``check`` method takes an input string which configures which
|
|
check is to be used and applies that check to a supplied value.
|
|
|
|
An example input string would be:
|
|
'int_range(param1, param2)'
|
|
|
|
You would then provide something like:
|
|
|
|
>>> def int_range_check(value, min, max):
|
|
... # turn min and max from strings to integers
|
|
... min = int(min)
|
|
... max = int(max)
|
|
... # check that value is of the correct type.
|
|
... # possible valid inputs are integers or strings
|
|
... # that represent integers
|
|
... if not isinstance(value, (int, long, basestring)):
|
|
... raise VdtTypeError(value)
|
|
... elif isinstance(value, basestring):
|
|
... # if we are given a string
|
|
... # attempt to convert to an integer
|
|
... try:
|
|
... value = int(value)
|
|
... except ValueError:
|
|
... raise VdtValueError(value)
|
|
... # check the value is between our constraints
|
|
... if not min <= value:
|
|
... raise VdtValueTooSmallError(value)
|
|
... if not value <= max:
|
|
... raise VdtValueTooBigError(value)
|
|
... return value
|
|
|
|
>>> fdict = {'int_range': int_range_check}
|
|
>>> vtr1 = Validator(fdict)
|
|
>>> vtr1.check('int_range(20, 40)', '30')
|
|
30
|
|
>>> vtr1.check('int_range(20, 40)', '60')
|
|
Traceback (most recent call last):
|
|
VdtValueTooBigError: the value "60" is too big.
|
|
|
|
New functions can be added with : ::
|
|
|
|
>>> vtr2 = Validator()
|
|
>>> vtr2.functions['int_range'] = int_range_check
|
|
|
|
Or by passing in a dictionary of functions when Validator
|
|
is instantiated.
|
|
|
|
Your functions *can* use keyword arguments,
|
|
but the first argument should always be 'value'.
|
|
|
|
If the function doesn't take additional arguments,
|
|
the parentheses are optional in the check.
|
|
It can be written with either of : ::
|
|
|
|
keyword = function_name
|
|
keyword = function_name()
|
|
|
|
The first program to utilise Validator() was Michael Foord's
|
|
ConfigObj, an alternative to ConfigParser which supports lists and
|
|
can validate a config file using a config schema.
|
|
For more details on using Validator with ConfigObj see:
|
|
http://www.voidspace.org.uk/python/configobj.html
|
|
"""
|
|
|
|
# this regex does the initial parsing of the checks
|
|
_func_re = re.compile(r'(.+?)\((.*)\)', re.DOTALL)
|
|
|
|
# this regex takes apart keyword arguments
|
|
_key_arg = re.compile(r'^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.*)$', re.DOTALL)
|
|
|
|
|
|
# this regex finds keyword=list(....) type values
|
|
_list_arg = _list_arg
|
|
|
|
# this regex takes individual values out of lists - in one pass
|
|
_list_members = _list_members
|
|
|
|
# These regexes check a set of arguments for validity
|
|
# and then pull the members out
|
|
_paramfinder = re.compile(_paramstring, re.VERBOSE | re.DOTALL)
|
|
_matchfinder = re.compile(_matchstring, re.VERBOSE | re.DOTALL)
|
|
|
|
|
|
def __init__(self, functions=None):
|
|
"""
|
|
>>> vtri = Validator()
|
|
"""
|
|
self.functions = {
|
|
'': self._pass,
|
|
'integer': is_integer,
|
|
'float': is_float,
|
|
'boolean': is_boolean,
|
|
'ip_addr': is_ip_addr,
|
|
'string': is_string,
|
|
'list': is_list,
|
|
'tuple': is_tuple,
|
|
'int_list': is_int_list,
|
|
'float_list': is_float_list,
|
|
'bool_list': is_bool_list,
|
|
'ip_addr_list': is_ip_addr_list,
|
|
'string_list': is_string_list,
|
|
'mixed_list': is_mixed_list,
|
|
'pass': self._pass,
|
|
'option': is_option,
|
|
'force_list': force_list,
|
|
}
|
|
if functions is not None:
|
|
self.functions.update(functions)
|
|
# tekNico: for use by ConfigObj
|
|
self.baseErrorClass = ValidateError
|
|
self._cache = {}
|
|
|
|
|
|
def check(self, check, value, missing=False):
|
|
"""
|
|
Usage: check(check, value)
|
|
|
|
Arguments:
|
|
check: string representing check to apply (including arguments)
|
|
value: object to be checked
|
|
Returns value, converted to correct type if necessary
|
|
|
|
If the check fails, raises a ``ValidateError`` subclass.
|
|
|
|
>>> vtor.check('yoda', '')
|
|
Traceback (most recent call last):
|
|
VdtUnknownCheckError: the check "yoda" is unknown.
|
|
>>> vtor.check('yoda()', '')
|
|
Traceback (most recent call last):
|
|
VdtUnknownCheckError: the check "yoda" is unknown.
|
|
|
|
>>> vtor.check('string(default="")', '', missing=True)
|
|
''
|
|
"""
|
|
fun_name, fun_args, fun_kwargs, default = self._parse_with_caching(check)
|
|
|
|
if missing:
|
|
if default is None:
|
|
# no information needed here - to be handled by caller
|
|
raise VdtMissingValue()
|
|
value = self._handle_none(default)
|
|
|
|
if value is None:
|
|
return None
|
|
|
|
return self._check_value(value, fun_name, fun_args, fun_kwargs)
|
|
|
|
|
|
def _handle_none(self, value):
|
|
if value == 'None':
|
|
return None
|
|
elif value in ("'None'", '"None"'):
|
|
# Special case a quoted None
|
|
value = self._unquote(value)
|
|
return value
|
|
|
|
|
|
def _parse_with_caching(self, check):
|
|
if check in self._cache:
|
|
fun_name, fun_args, fun_kwargs, default = self._cache[check]
|
|
# We call list and dict below to work with *copies* of the data
|
|
# rather than the original (which are mutable of course)
|
|
fun_args = list(fun_args)
|
|
fun_kwargs = dict(fun_kwargs)
|
|
else:
|
|
fun_name, fun_args, fun_kwargs, default = self._parse_check(check)
|
|
fun_kwargs = dict([(str(key), value) for (key, value) in fun_kwargs.items()])
|
|
self._cache[check] = fun_name, list(fun_args), dict(fun_kwargs), default
|
|
return fun_name, fun_args, fun_kwargs, default
|
|
|
|
|
|
def _check_value(self, value, fun_name, fun_args, fun_kwargs):
|
|
try:
|
|
fun = self.functions[fun_name]
|
|
except KeyError:
|
|
raise VdtUnknownCheckError(fun_name)
|
|
else:
|
|
return fun(value, *fun_args, **fun_kwargs)
|
|
|
|
|
|
def _parse_check(self, check):
|
|
fun_match = self._func_re.match(check)
|
|
if fun_match:
|
|
fun_name = fun_match.group(1)
|
|
arg_string = fun_match.group(2)
|
|
arg_match = self._matchfinder.match(arg_string)
|
|
if arg_match is None:
|
|
# Bad syntax
|
|
raise VdtParamError('Bad syntax in check "%s".' % check)
|
|
fun_args = []
|
|
fun_kwargs = {}
|
|
# pull out args of group 2
|
|
for arg in self._paramfinder.findall(arg_string):
|
|
# args may need whitespace removing (before removing quotes)
|
|
arg = arg.strip()
|
|
listmatch = self._list_arg.match(arg)
|
|
if listmatch:
|
|
key, val = self._list_handle(listmatch)
|
|
fun_kwargs[key] = val
|
|
continue
|
|
keymatch = self._key_arg.match(arg)
|
|
if keymatch:
|
|
val = keymatch.group(2)
|
|
if not val in ("'None'", '"None"'):
|
|
# Special case a quoted None
|
|
val = self._unquote(val)
|
|
fun_kwargs[keymatch.group(1)] = val
|
|
continue
|
|
|
|
fun_args.append(self._unquote(arg))
|
|
else:
|
|
# allows for function names without (args)
|
|
return check, (), {}, None
|
|
|
|
# Default must be deleted if the value is specified too,
|
|
# otherwise the check function will get a spurious "default" keyword arg
|
|
default = fun_kwargs.pop('default', None)
|
|
return fun_name, fun_args, fun_kwargs, default
|
|
|
|
|
|
def _unquote(self, val):
|
|
"""Unquote a value if necessary."""
|
|
if (len(val) >= 2) and (val[0] in ("'", '"')) and (val[0] == val[-1]):
|
|
val = val[1:-1]
|
|
return val
|
|
|
|
|
|
def _list_handle(self, listmatch):
|
|
"""Take apart a ``keyword=list('val, 'val')`` type string."""
|
|
out = []
|
|
name = listmatch.group(1)
|
|
args = listmatch.group(2)
|
|
for arg in self._list_members.findall(args):
|
|
out.append(self._unquote(arg))
|
|
return name, out
|
|
|
|
|
|
def _pass(self, value):
|
|
"""
|
|
Dummy check that always passes
|
|
|
|
>>> vtor.check('', 0)
|
|
0
|
|
>>> vtor.check('', '0')
|
|
'0'
|
|
"""
|
|
return value
|
|
|
|
|
|
def get_default_value(self, check):
|
|
"""
|
|
Given a check, return the default value for the check
|
|
(converted to the right type).
|
|
|
|
If the check doesn't specify a default value then a
|
|
``KeyError`` will be raised.
|
|
"""
|
|
fun_name, fun_args, fun_kwargs, default = self._parse_with_caching(check)
|
|
if default is None:
|
|
raise KeyError('Check "%s" has no default value.' % check)
|
|
value = self._handle_none(default)
|
|
if value is None:
|
|
return value
|
|
return self._check_value(value, fun_name, fun_args, fun_kwargs)
|
|
|
|
|
|
def _is_num_param(names, values, to_float=False):
|
|
"""
|
|
Return numbers from inputs or raise VdtParamError.
|
|
|
|
Lets ``None`` pass through.
|
|
Pass in keyword argument ``to_float=True`` to
|
|
use float for the conversion rather than int.
|
|
|
|
>>> _is_num_param(('', ''), (0, 1.0))
|
|
[0, 1]
|
|
>>> _is_num_param(('', ''), (0, 1.0), to_float=True)
|
|
[0.0, 1.0]
|
|
>>> _is_num_param(('a'), ('a'))
|
|
Traceback (most recent call last):
|
|
VdtParamError: passed an incorrect value "a" for parameter "a".
|
|
"""
|
|
fun = to_float and float or int
|
|
out_params = []
|
|
for (name, val) in zip(names, values):
|
|
if val is None:
|
|
out_params.append(val)
|
|
elif isinstance(val, (int, long, float, basestring)):
|
|
try:
|
|
out_params.append(fun(val))
|
|
except ValueError, e:
|
|
raise VdtParamError(name, val)
|
|
else:
|
|
raise VdtParamError(name, val)
|
|
return out_params
|
|
|
|
|
|
# built in checks
|
|
# you can override these by setting the appropriate name
|
|
# in Validator.functions
|
|
# note: if the params are specified wrongly in your input string,
|
|
# you will also raise errors.
|
|
|
|
def is_integer(value, min=None, max=None):
|
|
"""
|
|
A check that tests that a given value is an integer (int, or long)
|
|
and optionally, between bounds. A negative value is accepted, while
|
|
a float will fail.
|
|
|
|
If the value is a string, then the conversion is done - if possible.
|
|
Otherwise a VdtError is raised.
|
|
|
|
>>> vtor.check('integer', '-1')
|
|
-1
|
|
>>> vtor.check('integer', '0')
|
|
0
|
|
>>> vtor.check('integer', 9)
|
|
9
|
|
>>> vtor.check('integer', 'a')
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "a" is of the wrong type.
|
|
>>> vtor.check('integer', '2.2')
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "2.2" is of the wrong type.
|
|
>>> vtor.check('integer(10)', '20')
|
|
20
|
|
>>> vtor.check('integer(max=20)', '15')
|
|
15
|
|
>>> vtor.check('integer(10)', '9')
|
|
Traceback (most recent call last):
|
|
VdtValueTooSmallError: the value "9" is too small.
|
|
>>> vtor.check('integer(10)', 9)
|
|
Traceback (most recent call last):
|
|
VdtValueTooSmallError: the value "9" is too small.
|
|
>>> vtor.check('integer(max=20)', '35')
|
|
Traceback (most recent call last):
|
|
VdtValueTooBigError: the value "35" is too big.
|
|
>>> vtor.check('integer(max=20)', 35)
|
|
Traceback (most recent call last):
|
|
VdtValueTooBigError: the value "35" is too big.
|
|
>>> vtor.check('integer(0, 9)', False)
|
|
0
|
|
"""
|
|
(min_val, max_val) = _is_num_param(('min', 'max'), (min, max))
|
|
if not isinstance(value, (int, long, basestring)):
|
|
raise VdtTypeError(value)
|
|
if isinstance(value, basestring):
|
|
# if it's a string - does it represent an integer ?
|
|
try:
|
|
value = int(value)
|
|
except ValueError:
|
|
raise VdtTypeError(value)
|
|
if (min_val is not None) and (value < min_val):
|
|
raise VdtValueTooSmallError(value)
|
|
if (max_val is not None) and (value > max_val):
|
|
raise VdtValueTooBigError(value)
|
|
return value
|
|
|
|
|
|
def is_float(value, min=None, max=None):
|
|
"""
|
|
A check that tests that a given value is a float
|
|
(an integer will be accepted), and optionally - that it is between bounds.
|
|
|
|
If the value is a string, then the conversion is done - if possible.
|
|
Otherwise a VdtError is raised.
|
|
|
|
This can accept negative values.
|
|
|
|
>>> vtor.check('float', '2')
|
|
2.0
|
|
|
|
From now on we multiply the value to avoid comparing decimals
|
|
|
|
>>> vtor.check('float', '-6.8') * 10
|
|
-68.0
|
|
>>> vtor.check('float', '12.2') * 10
|
|
122.0
|
|
>>> vtor.check('float', 8.4) * 10
|
|
84.0
|
|
>>> vtor.check('float', 'a')
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "a" is of the wrong type.
|
|
>>> vtor.check('float(10.1)', '10.2') * 10
|
|
102.0
|
|
>>> vtor.check('float(max=20.2)', '15.1') * 10
|
|
151.0
|
|
>>> vtor.check('float(10.0)', '9.0')
|
|
Traceback (most recent call last):
|
|
VdtValueTooSmallError: the value "9.0" is too small.
|
|
>>> vtor.check('float(max=20.0)', '35.0')
|
|
Traceback (most recent call last):
|
|
VdtValueTooBigError: the value "35.0" is too big.
|
|
"""
|
|
(min_val, max_val) = _is_num_param(
|
|
('min', 'max'), (min, max), to_float=True)
|
|
if not isinstance(value, (int, long, float, basestring)):
|
|
raise VdtTypeError(value)
|
|
if not isinstance(value, float):
|
|
# if it's a string - does it represent a float ?
|
|
try:
|
|
value = float(value)
|
|
except ValueError:
|
|
raise VdtTypeError(value)
|
|
if (min_val is not None) and (value < min_val):
|
|
raise VdtValueTooSmallError(value)
|
|
if (max_val is not None) and (value > max_val):
|
|
raise VdtValueTooBigError(value)
|
|
return value
|
|
|
|
|
|
bool_dict = {
|
|
True: True, 'on': True, '1': True, 'true': True, 'yes': True,
|
|
False: False, 'off': False, '0': False, 'false': False, 'no': False,
|
|
}
|
|
|
|
|
|
def is_boolean(value):
|
|
"""
|
|
Check if the value represents a boolean.
|
|
|
|
>>> vtor.check('boolean', 0)
|
|
0
|
|
>>> vtor.check('boolean', False)
|
|
0
|
|
>>> vtor.check('boolean', '0')
|
|
0
|
|
>>> vtor.check('boolean', 'off')
|
|
0
|
|
>>> vtor.check('boolean', 'false')
|
|
0
|
|
>>> vtor.check('boolean', 'no')
|
|
0
|
|
>>> vtor.check('boolean', 'nO')
|
|
0
|
|
>>> vtor.check('boolean', 'NO')
|
|
0
|
|
>>> vtor.check('boolean', 1)
|
|
1
|
|
>>> vtor.check('boolean', True)
|
|
1
|
|
>>> vtor.check('boolean', '1')
|
|
1
|
|
>>> vtor.check('boolean', 'on')
|
|
1
|
|
>>> vtor.check('boolean', 'true')
|
|
1
|
|
>>> vtor.check('boolean', 'yes')
|
|
1
|
|
>>> vtor.check('boolean', 'Yes')
|
|
1
|
|
>>> vtor.check('boolean', 'YES')
|
|
1
|
|
>>> vtor.check('boolean', '')
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "" is of the wrong type.
|
|
>>> vtor.check('boolean', 'up')
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "up" is of the wrong type.
|
|
|
|
"""
|
|
if isinstance(value, basestring):
|
|
try:
|
|
return bool_dict[value.lower()]
|
|
except KeyError:
|
|
raise VdtTypeError(value)
|
|
# we do an equality test rather than an identity test
|
|
# this ensures Python 2.2 compatibilty
|
|
# and allows 0 and 1 to represent True and False
|
|
if value == False:
|
|
return False
|
|
elif value == True:
|
|
return True
|
|
else:
|
|
raise VdtTypeError(value)
|
|
|
|
|
|
def is_ip_addr(value):
|
|
"""
|
|
Check that the supplied value is an Internet Protocol address, v.4,
|
|
represented by a dotted-quad string, i.e. '1.2.3.4'.
|
|
|
|
>>> vtor.check('ip_addr', '1 ')
|
|
'1'
|
|
>>> vtor.check('ip_addr', ' 1.2')
|
|
'1.2'
|
|
>>> vtor.check('ip_addr', ' 1.2.3 ')
|
|
'1.2.3'
|
|
>>> vtor.check('ip_addr', '1.2.3.4')
|
|
'1.2.3.4'
|
|
>>> vtor.check('ip_addr', '0.0.0.0')
|
|
'0.0.0.0'
|
|
>>> vtor.check('ip_addr', '255.255.255.255')
|
|
'255.255.255.255'
|
|
>>> vtor.check('ip_addr', '255.255.255.256')
|
|
Traceback (most recent call last):
|
|
VdtValueError: the value "255.255.255.256" is unacceptable.
|
|
>>> vtor.check('ip_addr', '1.2.3.4.5')
|
|
Traceback (most recent call last):
|
|
VdtValueError: the value "1.2.3.4.5" is unacceptable.
|
|
>>> vtor.check('ip_addr', 0)
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "0" is of the wrong type.
|
|
"""
|
|
if not isinstance(value, basestring):
|
|
raise VdtTypeError(value)
|
|
value = value.strip()
|
|
try:
|
|
dottedQuadToNum(value)
|
|
except ValueError:
|
|
raise VdtValueError(value)
|
|
return value
|
|
|
|
|
|
def is_list(value, min=None, max=None):
|
|
"""
|
|
Check that the value is a list of values.
|
|
|
|
You can optionally specify the minimum and maximum number of members.
|
|
|
|
It does no check on list members.
|
|
|
|
>>> vtor.check('list', ())
|
|
[]
|
|
>>> vtor.check('list', [])
|
|
[]
|
|
>>> vtor.check('list', (1, 2))
|
|
[1, 2]
|
|
>>> vtor.check('list', [1, 2])
|
|
[1, 2]
|
|
>>> vtor.check('list(3)', (1, 2))
|
|
Traceback (most recent call last):
|
|
VdtValueTooShortError: the value "(1, 2)" is too short.
|
|
>>> vtor.check('list(max=5)', (1, 2, 3, 4, 5, 6))
|
|
Traceback (most recent call last):
|
|
VdtValueTooLongError: the value "(1, 2, 3, 4, 5, 6)" is too long.
|
|
>>> vtor.check('list(min=3, max=5)', (1, 2, 3, 4))
|
|
[1, 2, 3, 4]
|
|
>>> vtor.check('list', 0)
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "0" is of the wrong type.
|
|
>>> vtor.check('list', '12')
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "12" is of the wrong type.
|
|
"""
|
|
(min_len, max_len) = _is_num_param(('min', 'max'), (min, max))
|
|
if isinstance(value, basestring):
|
|
raise VdtTypeError(value)
|
|
try:
|
|
num_members = len(value)
|
|
except TypeError:
|
|
raise VdtTypeError(value)
|
|
if min_len is not None and num_members < min_len:
|
|
raise VdtValueTooShortError(value)
|
|
if max_len is not None and num_members > max_len:
|
|
raise VdtValueTooLongError(value)
|
|
return list(value)
|
|
|
|
|
|
def is_tuple(value, min=None, max=None):
|
|
"""
|
|
Check that the value is a tuple of values.
|
|
|
|
You can optionally specify the minimum and maximum number of members.
|
|
|
|
It does no check on members.
|
|
|
|
>>> vtor.check('tuple', ())
|
|
()
|
|
>>> vtor.check('tuple', [])
|
|
()
|
|
>>> vtor.check('tuple', (1, 2))
|
|
(1, 2)
|
|
>>> vtor.check('tuple', [1, 2])
|
|
(1, 2)
|
|
>>> vtor.check('tuple(3)', (1, 2))
|
|
Traceback (most recent call last):
|
|
VdtValueTooShortError: the value "(1, 2)" is too short.
|
|
>>> vtor.check('tuple(max=5)', (1, 2, 3, 4, 5, 6))
|
|
Traceback (most recent call last):
|
|
VdtValueTooLongError: the value "(1, 2, 3, 4, 5, 6)" is too long.
|
|
>>> vtor.check('tuple(min=3, max=5)', (1, 2, 3, 4))
|
|
(1, 2, 3, 4)
|
|
>>> vtor.check('tuple', 0)
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "0" is of the wrong type.
|
|
>>> vtor.check('tuple', '12')
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "12" is of the wrong type.
|
|
"""
|
|
return tuple(is_list(value, min, max))
|
|
|
|
|
|
def is_string(value, min=None, max=None):
|
|
"""
|
|
Check that the supplied value is a string.
|
|
|
|
You can optionally specify the minimum and maximum number of members.
|
|
|
|
>>> vtor.check('string', '0')
|
|
'0'
|
|
>>> vtor.check('string', 0)
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "0" is of the wrong type.
|
|
>>> vtor.check('string(2)', '12')
|
|
'12'
|
|
>>> vtor.check('string(2)', '1')
|
|
Traceback (most recent call last):
|
|
VdtValueTooShortError: the value "1" is too short.
|
|
>>> vtor.check('string(min=2, max=3)', '123')
|
|
'123'
|
|
>>> vtor.check('string(min=2, max=3)', '1234')
|
|
Traceback (most recent call last):
|
|
VdtValueTooLongError: the value "1234" is too long.
|
|
"""
|
|
if not isinstance(value, basestring):
|
|
raise VdtTypeError(value)
|
|
(min_len, max_len) = _is_num_param(('min', 'max'), (min, max))
|
|
try:
|
|
num_members = len(value)
|
|
except TypeError:
|
|
raise VdtTypeError(value)
|
|
if min_len is not None and num_members < min_len:
|
|
raise VdtValueTooShortError(value)
|
|
if max_len is not None and num_members > max_len:
|
|
raise VdtValueTooLongError(value)
|
|
return value
|
|
|
|
|
|
def is_int_list(value, min=None, max=None):
|
|
"""
|
|
Check that the value is a list of integers.
|
|
|
|
You can optionally specify the minimum and maximum number of members.
|
|
|
|
Each list member is checked that it is an integer.
|
|
|
|
>>> vtor.check('int_list', ())
|
|
[]
|
|
>>> vtor.check('int_list', [])
|
|
[]
|
|
>>> vtor.check('int_list', (1, 2))
|
|
[1, 2]
|
|
>>> vtor.check('int_list', [1, 2])
|
|
[1, 2]
|
|
>>> vtor.check('int_list', [1, 'a'])
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "a" is of the wrong type.
|
|
"""
|
|
return [is_integer(mem) for mem in is_list(value, min, max)]
|
|
|
|
|
|
def is_bool_list(value, min=None, max=None):
|
|
"""
|
|
Check that the value is a list of booleans.
|
|
|
|
You can optionally specify the minimum and maximum number of members.
|
|
|
|
Each list member is checked that it is a boolean.
|
|
|
|
>>> vtor.check('bool_list', ())
|
|
[]
|
|
>>> vtor.check('bool_list', [])
|
|
[]
|
|
>>> check_res = vtor.check('bool_list', (True, False))
|
|
>>> check_res == [True, False]
|
|
1
|
|
>>> check_res = vtor.check('bool_list', [True, False])
|
|
>>> check_res == [True, False]
|
|
1
|
|
>>> vtor.check('bool_list', [True, 'a'])
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "a" is of the wrong type.
|
|
"""
|
|
return [is_boolean(mem) for mem in is_list(value, min, max)]
|
|
|
|
|
|
def is_float_list(value, min=None, max=None):
|
|
"""
|
|
Check that the value is a list of floats.
|
|
|
|
You can optionally specify the minimum and maximum number of members.
|
|
|
|
Each list member is checked that it is a float.
|
|
|
|
>>> vtor.check('float_list', ())
|
|
[]
|
|
>>> vtor.check('float_list', [])
|
|
[]
|
|
>>> vtor.check('float_list', (1, 2.0))
|
|
[1.0, 2.0]
|
|
>>> vtor.check('float_list', [1, 2.0])
|
|
[1.0, 2.0]
|
|
>>> vtor.check('float_list', [1, 'a'])
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "a" is of the wrong type.
|
|
"""
|
|
return [is_float(mem) for mem in is_list(value, min, max)]
|
|
|
|
|
|
def is_string_list(value, min=None, max=None):
|
|
"""
|
|
Check that the value is a list of strings.
|
|
|
|
You can optionally specify the minimum and maximum number of members.
|
|
|
|
Each list member is checked that it is a string.
|
|
|
|
>>> vtor.check('string_list', ())
|
|
[]
|
|
>>> vtor.check('string_list', [])
|
|
[]
|
|
>>> vtor.check('string_list', ('a', 'b'))
|
|
['a', 'b']
|
|
>>> vtor.check('string_list', ['a', 1])
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "1" is of the wrong type.
|
|
>>> vtor.check('string_list', 'hello')
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "hello" is of the wrong type.
|
|
"""
|
|
if isinstance(value, basestring):
|
|
raise VdtTypeError(value)
|
|
return [is_string(mem) for mem in is_list(value, min, max)]
|
|
|
|
|
|
def is_ip_addr_list(value, min=None, max=None):
|
|
"""
|
|
Check that the value is a list of IP addresses.
|
|
|
|
You can optionally specify the minimum and maximum number of members.
|
|
|
|
Each list member is checked that it is an IP address.
|
|
|
|
>>> vtor.check('ip_addr_list', ())
|
|
[]
|
|
>>> vtor.check('ip_addr_list', [])
|
|
[]
|
|
>>> vtor.check('ip_addr_list', ('1.2.3.4', '5.6.7.8'))
|
|
['1.2.3.4', '5.6.7.8']
|
|
>>> vtor.check('ip_addr_list', ['a'])
|
|
Traceback (most recent call last):
|
|
VdtValueError: the value "a" is unacceptable.
|
|
"""
|
|
return [is_ip_addr(mem) for mem in is_list(value, min, max)]
|
|
|
|
|
|
def force_list(value, min=None, max=None):
|
|
"""
|
|
Check that a value is a list, coercing strings into
|
|
a list with one member. Useful where users forget the
|
|
trailing comma that turns a single value into a list.
|
|
|
|
You can optionally specify the minimum and maximum number of members.
|
|
A minumum of greater than one will fail if the user only supplies a
|
|
string.
|
|
|
|
>>> vtor.check('force_list', ())
|
|
[]
|
|
>>> vtor.check('force_list', [])
|
|
[]
|
|
>>> vtor.check('force_list', 'hello')
|
|
['hello']
|
|
"""
|
|
if not isinstance(value, (list, tuple)):
|
|
value = [value]
|
|
return is_list(value, min, max)
|
|
|
|
|
|
|
|
fun_dict = {
|
|
'integer': is_integer,
|
|
'float': is_float,
|
|
'ip_addr': is_ip_addr,
|
|
'string': is_string,
|
|
'boolean': is_boolean,
|
|
}
|
|
|
|
|
|
def is_mixed_list(value, *args):
|
|
"""
|
|
Check that the value is a list.
|
|
Allow specifying the type of each member.
|
|
Work on lists of specific lengths.
|
|
|
|
You specify each member as a positional argument specifying type
|
|
|
|
Each type should be one of the following strings :
|
|
'integer', 'float', 'ip_addr', 'string', 'boolean'
|
|
|
|
So you can specify a list of two strings, followed by
|
|
two integers as :
|
|
|
|
mixed_list('string', 'string', 'integer', 'integer')
|
|
|
|
The length of the list must match the number of positional
|
|
arguments you supply.
|
|
|
|
>>> mix_str = "mixed_list('integer', 'float', 'ip_addr', 'string', 'boolean')"
|
|
>>> check_res = vtor.check(mix_str, (1, 2.0, '1.2.3.4', 'a', True))
|
|
>>> check_res == [1, 2.0, '1.2.3.4', 'a', True]
|
|
1
|
|
>>> check_res = vtor.check(mix_str, ('1', '2.0', '1.2.3.4', 'a', 'True'))
|
|
>>> check_res == [1, 2.0, '1.2.3.4', 'a', True]
|
|
1
|
|
>>> vtor.check(mix_str, ('b', 2.0, '1.2.3.4', 'a', True))
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "b" is of the wrong type.
|
|
>>> vtor.check(mix_str, (1, 2.0, '1.2.3.4', 'a'))
|
|
Traceback (most recent call last):
|
|
VdtValueTooShortError: the value "(1, 2.0, '1.2.3.4', 'a')" is too short.
|
|
>>> vtor.check(mix_str, (1, 2.0, '1.2.3.4', 'a', 1, 'b'))
|
|
Traceback (most recent call last):
|
|
VdtValueTooLongError: the value "(1, 2.0, '1.2.3.4', 'a', 1, 'b')" is too long.
|
|
>>> vtor.check(mix_str, 0)
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "0" is of the wrong type.
|
|
|
|
This test requires an elaborate setup, because of a change in error string
|
|
output from the interpreter between Python 2.2 and 2.3 .
|
|
|
|
>>> res_seq = (
|
|
... 'passed an incorrect value "',
|
|
... 'yoda',
|
|
... '" for parameter "mixed_list".',
|
|
... )
|
|
>>> res_str = "'".join(res_seq)
|
|
>>> try:
|
|
... vtor.check('mixed_list("yoda")', ('a'))
|
|
... except VdtParamError, err:
|
|
... str(err) == res_str
|
|
1
|
|
"""
|
|
try:
|
|
length = len(value)
|
|
except TypeError:
|
|
raise VdtTypeError(value)
|
|
if length < len(args):
|
|
raise VdtValueTooShortError(value)
|
|
elif length > len(args):
|
|
raise VdtValueTooLongError(value)
|
|
try:
|
|
return [fun_dict[arg](val) for arg, val in zip(args, value)]
|
|
except KeyError, e:
|
|
raise VdtParamError('mixed_list', e)
|
|
|
|
|
|
def is_option(value, *options):
|
|
"""
|
|
This check matches the value to any of a set of options.
|
|
|
|
>>> vtor.check('option("yoda", "jedi")', 'yoda')
|
|
'yoda'
|
|
>>> vtor.check('option("yoda", "jedi")', 'jed')
|
|
Traceback (most recent call last):
|
|
VdtValueError: the value "jed" is unacceptable.
|
|
>>> vtor.check('option("yoda", "jedi")', 0)
|
|
Traceback (most recent call last):
|
|
VdtTypeError: the value "0" is of the wrong type.
|
|
"""
|
|
if not isinstance(value, basestring):
|
|
raise VdtTypeError(value)
|
|
if not value in options:
|
|
raise VdtValueError(value)
|
|
return value
|
|
|
|
|
|
def _test(value, *args, **keywargs):
|
|
"""
|
|
A function that exists for test purposes.
|
|
|
|
>>> checks = [
|
|
... '3, 6, min=1, max=3, test=list(a, b, c)',
|
|
... '3',
|
|
... '3, 6',
|
|
... '3,',
|
|
... 'min=1, test="a b c"',
|
|
... 'min=5, test="a, b, c"',
|
|
... 'min=1, max=3, test="a, b, c"',
|
|
... 'min=-100, test=-99',
|
|
... 'min=1, max=3',
|
|
... '3, 6, test="36"',
|
|
... '3, 6, test="a, b, c"',
|
|
... '3, max=3, test=list("a", "b", "c")',
|
|
... '''3, max=3, test=list("'a'", 'b', "x=(c)")''',
|
|
... "test='x=fish(3)'",
|
|
... ]
|
|
>>> v = Validator({'test': _test})
|
|
>>> for entry in checks:
|
|
... print v.check(('test(%s)' % entry), 3)
|
|
(3, ('3', '6'), {'test': ['a', 'b', 'c'], 'max': '3', 'min': '1'})
|
|
(3, ('3',), {})
|
|
(3, ('3', '6'), {})
|
|
(3, ('3',), {})
|
|
(3, (), {'test': 'a b c', 'min': '1'})
|
|
(3, (), {'test': 'a, b, c', 'min': '5'})
|
|
(3, (), {'test': 'a, b, c', 'max': '3', 'min': '1'})
|
|
(3, (), {'test': '-99', 'min': '-100'})
|
|
(3, (), {'max': '3', 'min': '1'})
|
|
(3, ('3', '6'), {'test': '36'})
|
|
(3, ('3', '6'), {'test': 'a, b, c'})
|
|
(3, ('3',), {'test': ['a', 'b', 'c'], 'max': '3'})
|
|
(3, ('3',), {'test': ["'a'", 'b', 'x=(c)'], 'max': '3'})
|
|
(3, (), {'test': 'x=fish(3)'})
|
|
|
|
>>> v = Validator()
|
|
>>> v.check('integer(default=6)', '3')
|
|
3
|
|
>>> v.check('integer(default=6)', None, True)
|
|
6
|
|
>>> v.get_default_value('integer(default=6)')
|
|
6
|
|
>>> v.get_default_value('float(default=6)')
|
|
6.0
|
|
>>> v.get_default_value('pass(default=None)')
|
|
>>> v.get_default_value("string(default='None')")
|
|
'None'
|
|
>>> v.get_default_value('pass')
|
|
Traceback (most recent call last):
|
|
KeyError: 'Check "pass" has no default value.'
|
|
>>> v.get_default_value('pass(default=list(1, 2, 3, 4))')
|
|
['1', '2', '3', '4']
|
|
|
|
>>> v = Validator()
|
|
>>> v.check("pass(default=None)", None, True)
|
|
>>> v.check("pass(default='None')", None, True)
|
|
'None'
|
|
>>> v.check('pass(default="None")', None, True)
|
|
'None'
|
|
>>> v.check('pass(default=list(1, 2, 3, 4))', None, True)
|
|
['1', '2', '3', '4']
|
|
|
|
Bug test for unicode arguments
|
|
>>> v = Validator()
|
|
>>> v.check(u'string(min=4)', u'test')
|
|
u'test'
|
|
|
|
>>> v = Validator()
|
|
>>> v.get_default_value(u'string(min=4, default="1234")')
|
|
u'1234'
|
|
>>> v.check(u'string(min=4, default="1234")', u'test')
|
|
u'test'
|
|
|
|
>>> v = Validator()
|
|
>>> default = v.get_default_value('string(default=None)')
|
|
>>> default == None
|
|
1
|
|
"""
|
|
return (value, args, keywargs)
|
|
|
|
|
|
def _test2():
|
|
"""
|
|
>>>
|
|
>>> v = Validator()
|
|
>>> v.get_default_value('string(default="#ff00dd")')
|
|
'#ff00dd'
|
|
>>> v.get_default_value('integer(default=3) # comment')
|
|
3
|
|
"""
|
|
|
|
def _test3():
|
|
r"""
|
|
>>> vtor.check('string(default="")', '', missing=True)
|
|
''
|
|
>>> vtor.check('string(default="\n")', '', missing=True)
|
|
'\n'
|
|
>>> print vtor.check('string(default="\n")', '', missing=True),
|
|
<BLANKLINE>
|
|
>>> vtor.check('string()', '\n')
|
|
'\n'
|
|
>>> vtor.check('string(default="\n\n\n")', '', missing=True)
|
|
'\n\n\n'
|
|
>>> vtor.check('string()', 'random \n text goes here\n\n')
|
|
'random \n text goes here\n\n'
|
|
>>> vtor.check('string(default=" \nrandom text\ngoes \n here\n\n ")',
|
|
... '', missing=True)
|
|
' \nrandom text\ngoes \n here\n\n '
|
|
>>> vtor.check("string(default='\n\n\n')", '', missing=True)
|
|
'\n\n\n'
|
|
>>> vtor.check("option('\n','a','b',default='\n')", '', missing=True)
|
|
'\n'
|
|
>>> vtor.check("string_list()", ['foo', '\n', 'bar'])
|
|
['foo', '\n', 'bar']
|
|
>>> vtor.check("string_list(default=list('\n'))", '', missing=True)
|
|
['\n']
|
|
"""
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# run the code tests in doctest format
|
|
import sys
|
|
import doctest
|
|
m = sys.modules.get('__main__')
|
|
globs = m.__dict__.copy()
|
|
globs.update({
|
|
'vtor': Validator(),
|
|
})
|
|
doctest.testmod(m, globs=globs)
|