pax_global_header00006660000000000000000000000064145634071660014526gustar00rootroot0000000000000052 comment=2bd82a957952c6b9dd1a4f1cdb35243d017a6282 pyroma-4.2/000077500000000000000000000000001456340716600127025ustar00rootroot00000000000000pyroma-4.2/.gitattributes000066400000000000000000000000441456340716600155730ustar00rootroot00000000000000pyroma/testdata/* linguist-vendored pyroma-4.2/.github/000077500000000000000000000000001456340716600142425ustar00rootroot00000000000000pyroma-4.2/.github/workflows/000077500000000000000000000000001456340716600162775ustar00rootroot00000000000000pyroma-4.2/.github/workflows/lint.yml000066400000000000000000000010421456340716600177650ustar00rootroot00000000000000# Run the linting suite for the pyroma package # Based on https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Lint package on: [pull_request, push] env: FORCE_COLOR: 1 jobs: build: name: Run pre-commit runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.x' - name: Run pre-commit hooks uses: pre-commit/action@v3.0.0 pyroma-4.2/.github/workflows/test.yml000066400000000000000000000016411456340716600200030ustar00rootroot00000000000000# Runs the unit tests for the pyroma package # Based on https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Test package on: [pull_request, push] env: FORCE_COLOR: 1 jobs: build: name: Run package tests runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, macos-latest, windows-latest] python-version: ['3.7', '3.11', 'pypy-3.7'] steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Upgrade pip run: python -m pip install --upgrade pip - name: Install package run: pip install -e .[test] - name: Run tests run: python -bb -X dev -W ignore::UserWarning:setuptools.dist -m unittest -v pyroma.tests pyroma-4.2/.pre-commit-config.yaml000066400000000000000000000006641456340716600171710ustar00rootroot00000000000000repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 hooks: - id: check-yaml - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/psf/black rev: 22.6.0 hooks: - id: black - repo: https://github.com/pycqa/flake8 rev: 5.0.4 hooks: - id: flake8 - repo: https://github.com/regebro/pyroma rev: '4.0' hooks: - id: pyroma pyroma-4.2/.pre-commit-hooks.yaml000066400000000000000000000003701456340716600170410ustar00rootroot00000000000000- id: pyroma name: Check package with Pyroma description: Check how well a Python package conforms to best practices. entry: pyroma args: ["-d", "--min=10", "."] language: python pass_filenames: false always_run: true pyroma-4.2/CHANGES.txt000066400000000000000000000215651456340716600145240ustar00rootroot00000000000000Changelog ========= 4.2 (2023-02-25) ---------------- - Fall back to installing project's build backend in an isolated environment if a compatible version isn't installed in the current env [CAM-Gerlach] - Fix metadata extraction failure when project ``long_description`` is included as a header rather than a payload in the ``METADTA`` file [CAM-Gerlach] - Add a fallback to restore compatibility with Setuptools <61 [CAM-Gerlach] - Fix tests failing due to invalid versions on Setuptools >=66 [CAM-Gerlach] - Add ``python_requires``, update classifiers, add implicit dependencies and remove unused deps in Pyroma's own packaging metadata [CAM-Gerlach] 4.1 (2022-11-24) ---------------- - Moved from a custom trove classifiers list to using the trove-classifiers package [hugovk] - Support checking the Requires-Python metadata [davidandreoletti] - Silence noisy build backend output when building metadata [CAM-Gerlach, wesleybl] - Official support for Python 3.11 [hugovk, radarhere] - Some string formatting bugs [hugovk, CAM-Gerlach] - Now follows black and flake8 rules - Check if author_email field contains author name [bessman] 4.0 (2022-04-14) ---------------- - No changes from 4.0b2. 4.0b2 (2022-03-29) ------------------ - The deprecation test for test_suite is no longer needed, as the patched setuptools method of gathering metadata as a whole is deprecated. - `description_content_type` also needs a mapping in the metadata map. 4.0b1 (2022-03-28) ------------------ - Added support for PEP517 by using `build` to build the metadata as a preferred build method over the old patched setuptools method. The old way is depracated and will be removed in 5.0, which also is planned to support PEP621. Thanks to Christopher A.M. Gerlach for valuable insight into the modern packaging systems. 3.3 (2022-03-28) ---------------- - Add a deprecation for `test_suite` 3.2.1 (2022-03-27) ------------------ - Fixed __getattr__-related crash in tests with python3.7 [Robert T. McGibbon] 3.2 (2021-06-22) ---------------- - Added support for pre-commit [CAM Gerlach] - Rewrote parts of the PyPI support, to avoid using the xmlrpc API, since it's being heavily rate-limited at the moment. Only one call is using it now, which seems to work fine. - Backwards incompatible change: As a result of the above change, when looking for packages on PyPI, the package name must now be spelled exactly correct, including capitalization. - Some more code cleanup/modernization [CAM Gerlach] - Added --quiet option to output only the rating [Hugo van Kemenade] - Pyroma is now an executable module, and can be called with `python -m pyroma` [RuRo] 3.1 (2021-03-06) ---------------- - Added correct detection of setup.py encoding - Code cleanup [CAM Gerlach] 3.0.1 (2021-03-02) ------------------ - Drop support for Python 2 [Florian Bruhin] - Add back official support for Python 3.6, I didn't realize it was still officially supported 2.6.1 (2021-02-16) ------------------ - Update to the current list of Trove classifiers. - Officially support Python 3.8 and 3.9 - Drop official support for Python 3.5 and 3.6 (still works though). 2.6 (2019-11-02) ---------------- - Ran flake8 and black on the code, better formatting for classifiers.py generation. - Support for PEP 517, setup.cfg-only packages. [Max Tyulin] - Adds support for Markdown long_descriptions, if you set long_description_content_type to 'text/markdown' - Installs Pygments to avoid an error message of you have syntax highlighted code in the long_description. 2.5 (2019-06-01) ---------------- - Fixed #35: Correctly restore ``sys.argv``. [maurits] - Added back the BusFactor test, the XMLRPC API supports it. - #26: Adding a test to check for a development status classifier. - #21: Accept the new project_urls distribution data. - Now verifies that classifiers are valid, and that the license field and license classifiers match. - The rating now again reflects if the long_description isn't valid ReST. - #38: Recommendations for the License field has changed. 2.4 (2018-08-15) ---------------- - Get rid of the tests that rely on HTML scraping, it's too brittle. - Update to use pypi.org instead of pypi.python.org [Andreas Lutro, Lennart Regebro] - Added -n command line option to set the minimum rating needed for pyroma to return success, useful in scripts. [Scott Colby] 2.3.1 (2018-05-28) ------------------ - Fixed #12: Installation fails with a non-UTF8 locale under Python 3. [ericof, 4383, regebro] 2.3 (2017-11-28) ---------------- - Check that a classifier specifies the project license. [4383] - Dropped support for Python 2.6, 3.3 and 3.4. - Fixed a unicode issue [gotcha] - Stopped recommending places to keep documentation. 2.2 (2016-10-26) ---------------- - Removed the TestSuite rating. I decided it was too close to looking at code quality. Pyroma no longer cares if you have tests or not. - Fixed #36: PyPI now requires https. 2.1 (2016-10-18) ---------------- - #35: Support for PEP-440. 2.0.2 (2016-03-06) ------------------ - Faked the __name__ variable to allow you to have a "if __name__" construct in the setup.py. 2.0.1 (2016-03-06) ------------------ - Fixed a bug under Python 3 with certain imports. 2.0.0 (2016-02-28) ------------------ - Stable release. 2.0.0b2 (2015-11-09) -------------------- - Made it run under Python 3 again. - PEP8 2.0.0b1 (2015-11-08) -------------------- - Big rewrite of how data is extracted from Distutils/Setuptools. 1.8.3 (2015-11-08) ------------------ - Issue #26: Checking a PyPI package could fail under Python 3. 1.8.2 (2015-06-14) ------------------ - Do not complain that the version number should be a string, when it is a basestring. [maurits] 1.8.1 (2015-04-27) ------------------ - This is what happens when you don't run the tests after merging. 1.8 (2015-04-27) ---------------- - More robust rating. [Jeff Quast] - Closed #24. 1.7 (2014-10-19) ---------------- - Package name lookup is now case insensitive. [Dmitry Vakhrushev] - Fixed yet another error in return value. [Dmitry Vakhrushev] 1.6 (2014-04-17) ---------------- - Fixed issue #17: Integration with zest.releaser stopped working. - Fixed issue #18: Pyroma returns the rating as an exit code, this was a mistake. It now returns 0 on success, 1 on incorrect options and 2 if the rating is below 8. - Fixed issue #19: Implementing a custom test class counts as having tests. - 8: Philadelphia is now considered a "success" based on practical experience. 1.5 (2013-10-18) ---------------- - Fixed issue #13: Pyroma would fail if there was no description. - Dropping support for Python 3.1. It still works, but it is unsupported. - Added support for command line options, implementing #14 and #15. 1.4 (2013-05-29) ---------------- - Issue #13: Pyroma would fail when checking a package name if no source distribution could be found. - Added a check that the package has a source distribution on PyPI. 1.3.1 (2013-05-29) ------------------ - Issue #11: pyroma would fail if long_description was a non-string. - zest.releaser now only runs Pyroma on Python packages. - Because packages that use external test-runners can not get more that 9/10, this value is now also seen as acceptable when running Pyroma through zest.releaser. 1.3 (2013-03-15) ---------------- - Added a test to make sure the version number is a string. - Made sure errors were printed also when a fatal error was encountered. - Better log messages. - The zest.releaser hook is now done before tagging, as it's more useful there. Especially in conjunction with check-manifest. - Having no long_description no longer causes pyroma to fail. 1.2 (2013-03-06) ---------------- - Removed the running of tests. I always found it a bit iffy, and getting rid of it solved a lot of issues. Pyroma is now focused solely on packaging quality. - A package on PyPI with several versions will no longer return an error. - Now looks for documentation on pythonhosted.org or readthedocs.org. - Adds a hook for zest.releaser, so it can be run after doing the checkout, before uploading to PyPI. 1.1 (2013-03-05) ---------------- - Better handling if there is no package data, for example if setup.py doesn't call setup() unless you run it as the "__main__" script. - If setup.py doesn't call setup() look for a main() script and try to run it. 1.0 (2013-03-05) ---------------- - Support for Python 3.3 - Added test for PEP 386 compliance. 0.9.3 (2011-03-17) ------------------ - It's now using a ProxyStub for the PyPI xmlrpclib during tests. - Removed the Dependency rating. - Added a rating that runs tests, to see if they run. This will also take care of checking for dependencies. 0.9.2 (2011-03-13) ------------------ - Commented out the dependency test, it was too unreliable. - Fixed the ReST. - Python 3 support. 0.9.1 (2011-03-08) ------------------ - Initial release pyroma-4.2/DEVELOPMENT.rst000066400000000000000000000021721456340716600152200ustar00rootroot00000000000000Testing ======= Run tests: $ python -m unittest pyroma.tests Some notes on developing ======================== *Note: Since pyroma no longer runs tests, this is probably no longer true.* For each Python version supported by Pyroma you need to make sure the "complete" package that is used for testing also supports that version of Python. The complete data supports both Python 2 and Python 3 and depends on the "six" package. As such it's highly unlikely you'll have to change any code. However, you have to mark the package as supporting the Python version. This is most easily done by searching the code for "Python :: 3.2" and adding the Python version that you want to support to the lists of Python versions that appear in several places in this package. Otherwise Pyroma will not run the complete-packages tests with your Python version, and you'll get errors when running Pyroma's test-suite. You also have to make new test-distributions with the updated data. You do it this way: $ cd pyroma/testdata/complete $ python setup.py sdist --formats=bztar,gztar,tar,zip $ cp dist/complete-1.0.dev1.* ../distributions/ pyroma-4.2/LICENSE.txt000066400000000000000000000020641456340716600145270ustar00rootroot00000000000000The MIT License Copyright (c) 2011 Lennart Regebro Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. pyroma-4.2/MANIFEST.in000066400000000000000000000003701456340716600144400ustar00rootroot00000000000000include *.txt recursive-include pyroma/testdata *.py *.txt *.cfg *.html *.json *.toml prune pyroma/testdata/complete/*.egg graft pyroma/testdata/distributions include tox.ini include DEVELOPMENT.rst include Makefile exclude .pre-commit-config.yaml pyroma-4.2/Makefile000066400000000000000000000017371456340716600143520ustar00rootroot00000000000000.PHONY: docs define PRINT_HELP_PYSCRIPT import re, sys for line in sys.stdin: match = re.match(r'^([a-zA-Z_-]+):.*?## (.*)$$', line) if match: target, help = match.groups() print("%-20s %s" % (target, help)) endef export PRINT_HELP_PYSCRIPT help: ## display this message @python -c "$$PRINT_HELP_PYSCRIPT" < $(MAKEFILE_LIST) generate: ## generate environment for tests cd pyroma/testdata/complete python setup.py sdist --formats=bztar,gztar,tar,zip cp pyroma/testdata/complete/dist/complete-1.0.dev1.* pyroma/testdata/distributions/ tests: generate ## run tests python -m unittest pyroma.tests clean: clean-pyc ## remove all clean-pyc: ## remove Python file artifacts find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + find . -name '*~' -exec rm -f {} + find . -name '__pycache__' -exec rm -fr {} + find . -name 'pip-selfcheck.json' -exec rm -fr {} + find . -name 'pyvenv.cfg' -exec rm -fr {} + prepare-release: python fetch_classifiers.py pyroma-4.2/README.rst000066400000000000000000000077541456340716600144060ustar00rootroot00000000000000pyroma ====== Pyroma rhymes with aroma, and is a product aimed at giving a rating of how well a Python project complies with the best practices of the Python packaging ecosystem, primarily PyPI, pip, Distribute etc, as well as a list of issues that could be improved. The aim of this is both to help people make a project that is nice and usable, but also to improve the quality of Python third-party software, making it easier and more enjoyable to use the vast array of available modules for Python. It's written so that there are a library with methods to call from Python, as well as a script, also called pyroma. It can be run on a project directory before making a release: $ pyroma . On a distribution before uploading it to the CheeseShop: $ pyroma pyroma-1.0.tar.gz Or you can give it a package name on CheeseShop: $ pyroma pyroma Giving it a name on CheeseShop is the most extensive test, as it will test for several things isn't otherwise tested. In all cases the output is similar:: ------------------------------ Checking . Found pyroma ------------------------------ The packages long_description is quite short. ------------------------------ Final rating: 9/10 Cottage Cheese ------------------------------ Tests ----- This is the list of checks that are currently performed: * The package should have a name, a version and a Description. If it does not, it will receive a rating of 0. * The version number should be a string. A floating point number will work with distutils, but most other tools will fail. * The version number should comply to PEP386. * The description should be over 10 characters, and the long_description should be over a 100 characters. * Pyroma will convert your long_description to HTML using Docutils, to verify that it is possible. This guarantees pretty formatting of your description on PyPI. As long as Docutils can convert it, this passes, even if there are warnings or error in the conversion. These warnings and errors are printed to stdout so you will see them. NB! Currently this doesn't change the rating, this is because Docutils no longer raises an error during this process, so I have to rewrite the test. Once it's reinstated, incorrect syntax will be fatal. * You should have the following meta data fields filled in: classifiers, keywords, author, author_email, url and license. * You should have classifiers specifying the supported Python versions. * You should have ``requires-python``/``python_requires`` specifying the Python versions you support. * You should have a classifier specifying the project license. * If you are checking on a PyPI package, and not a local directory or local package, pyroma will check the number of owners the package has on PyPI. It should be three or more, to minimize the "Bus factor", the risk of the index owners suddenly going off-line for whatever reason. * If you are checking on a PyPI package, and not a local directory or local package, pyroma will check that you have uploaded a source distribution, and not just binary distributions. Version control integration --------------------------- With `pre-commit `_, pyroma can be run whenever you commit your work by adding the following to your ``.pre-commit-config.yaml``: .. code-block:: yaml repos: - repo: https://github.com/regebro/pyroma rev: "3.2" hooks: - id: pyroma Credits ------- The project was created by Lennart Regebro, regebro@gmail.com The name "Pyroma" was coined by Wichert Akkerman, wichert@wiggy.net Contributors: * David Andreoletti * Godefroid Chapelle * Dmitry Vakhrushev * Hugo van Kemenade * Jeff Quast * Maurits van Rees * Hervé Beraud * Érico Andrei * Jakub Wilk * Andreas Lutro * Scott Colby * Andrew Murray * Nikita Sobolev * Charles Tapley Hoyt * Max Tyulin * Michael Howitz * Florian Bruhin * Christopher A.M. Gerlach * RuRo * Wesley Barroso Lopes * Alexander Bessman pyroma-4.2/README.txt000066400000000000000000000000171456340716600143760ustar00rootroot00000000000000See README.rst pyroma-4.2/pyproject.toml000066400000000000000000000000371456340716600156160ustar00rootroot00000000000000[tool.black] line-length = 120 pyroma-4.2/pyroma/000077500000000000000000000000001456340716600142115ustar00rootroot00000000000000pyroma-4.2/pyroma/__init__.py000066400000000000000000000101121456340716600163150ustar00rootroot00000000000000import logging import os import sys from optparse import OptionParser from pyroma import projectdata, distributiondata, pypidata, ratings logging.basicConfig(level=logging.DEBUG, stream=sys.stdout, format="%(message)s") def zester(data): main_files = set(os.listdir(data["workingdir"])) config_files = {"setup.py", "setup.cfg", "pyproject.toml"} # If there are no standard Python config files in the main files # it's likely not a Python project, so just return. if not config_files & main_files: return from zest.releaser.utils import ask if ask("Run pyroma on the package before tagging?"): rating = run("directory", os.path.abspath(data["workingdir"])) if rating < 8: if not ask("Continue?"): sys.exit(1) def main(): usage = "usage: %prog [-n N] [-a|-d|-f|-p] " parser = OptionParser(usage) parser.add_option( "-n", "--min", dest="min", default=8, action="store", type=int, help="Minimum rating for clean return between 0 and 10, inclusive", ) parser.add_option( "-a", "--auto", dest="auto", default=False, action="store_true", help="Select mode automatically (default)", ) parser.add_option( "-d", "--directory", dest="directory", action="store_true", default=False, help="Run pyroma on a module in a project directory", ) parser.add_option( "-f", "--file", dest="file", action="store_true", default=False, help="Run pyroma on a distribution file", ) parser.add_option( "-p", "--pypi", dest="pypi", action="store_true", default=False, help="Run pyroma on a package on PyPI", ) parser.add_option( "-q", "--quiet", dest="quiet", action="store_true", default=False, help="Output only the rating", ) (options, args) = parser.parse_args() if len(args) < 1: parser.print_help() sys.exit(1) if not (0 <= options.min <= 10): parser.print_help() sys.exit(1) modes = (options.auto, options.directory, options.file, options.pypi) if sum(1 if x else 0 for x in modes) > 1: print("You can only select one of the options -a, -d, -f and -p") sys.exit(1) argument = args[0] mode = "pypi" if not any(modes) or options.auto: if os.path.isdir(argument): mode = "directory" elif os.path.isfile(argument): mode = "file" elif options.directory: mode = "directory" elif options.file: mode = "file" rating = run(mode, argument, options.quiet) if rating < options.min: sys.exit(2) sys.exit(0) def run(mode, argument, quiet=False): if quiet: logger = logging.getLogger() logger.disabled = True logging.info("-" * 30) logging.info("Checking " + argument) if mode == "directory": data = projectdata.get_data(os.path.abspath(argument)) logging.info("Found " + data.get("name", "nothing")) elif mode == "file": data = distributiondata.get_data(os.path.abspath(argument)) logging.info("Found " + data.get("name", "nothing")) else: # It's probably a package name data = pypidata.get_data(argument) logging.info("Found " + data.get("name", "nothing")) rating = ratings.rate(data) logging.info("-" * 30) for problem in rating[1]: # XXX It would be nice with a * pointlist instead, but that requires # that we know how wide the terminal is and nice word-breaks, so that's # for later. logging.info(problem) if rating[1]: logging.info("-" * 30) logging.info("Final rating: " + str(rating[0]) + "/10") logging.info(ratings.LEVELS[rating[0]]) logging.info("-" * 30) if quiet: logger.disabled = False logging.info(rating[0]) return rating[0] pyroma-4.2/pyroma/__main__.py000066400000000000000000000000731456340716600163030ustar00rootroot00000000000000from . import main if __name__ == "__main__": main() pyroma-4.2/pyroma/distributiondata.py000066400000000000000000000030201456340716600201270ustar00rootroot00000000000000""" Extract information from a distribution file by unpacking in a temporary directory and then using projectdata on that. """ import os import pathlib import shutil import tarfile import tempfile import zipfile from pyroma import projectdata def _safe_extract_tar(tar, path=".", members=None, numeric_owner=False): """Safely extract a tar w/o traversing parent dirs to fix CVE-2007-4559.""" root = pathlib.Path(path).resolve() for member in tar.getmembers(): member_path = (root / member.name).resolve() if root not in member_path.parents: raise Exception(f"Attempted path traversal in tar file {tar.name!r}") tar.extractall(path, members, numeric_owner=numeric_owner) def get_data(path): filename = os.path.split(path)[-1] basename, ext = os.path.splitext(filename) if basename.endswith(".tar"): basename, ignored = os.path.splitext(basename) tempdir = tempfile.mkdtemp() try: if ext in (".bz2", ".tbz", "tb2", ".gz", ".tgz", ".tar"): with tarfile.open(name=path, mode="r:*") as tar_file: _safe_extract_tar(tar_file, path=tempdir) elif ext in (".zip", ".egg"): with zipfile.ZipFile(path, mode="r") as zip_file: zip_file.extractall(tempdir) else: raise ValueError("Unknown file type: " + ext) projectpath = os.path.join(tempdir, basename) data = projectdata.get_data(projectpath) finally: shutil.rmtree(tempdir, ignore_errors=True) return data pyroma-4.2/pyroma/projectdata.py000066400000000000000000000221001456340716600170560ustar00rootroot00000000000000# Extracts information from a project that has a distutils setup.py file. import build import build.util import logging import os import pathlib import sys import tokenize from copy import copy from distutils import core try: # config renamed to config.setupcfg on Setuptools >=61 adding pyproject.toml support from setuptools.config.setupcfg import read_configuration except ModuleNotFoundError: from setuptools.config import read_configuration METADATA_MAP = { "summary": "description", "classifier": "classifiers", "project_url": "project_urls", "home_page": "url", "description": "long_description", "description_content_type": "long_description_content_type", "requires_python": "python_requires", } def build_metadata(path, isolated=None): # If explictly specified whether to use isolation, pass it directly if isolated is not None: return build.util.project_wheel_metadata(path, isolated=isolated) # Otherwise, try without build isolation first for efficiency try: return build.util.project_wheel_metadata(path, isolated=False) # If building with build isolation fails, e.g. missing build deps, try with it except build.BuildBackendException: return build.util.project_wheel_metadata(path, isolated=True) def map_metadata_keys(metadata): data = {} if "Description" not in metadata.keys(): # Having the description as a payload tends to add two newlines, we clean that up here: long_description = metadata.get_payload().strip() + "\n" data["long_description"] = long_description for key in set(metadata.keys()): value = metadata.get_all(key) if len(value) == 1: value = value[0] if value.strip() == "UNKNOWN": continue key = key.lower().replace("-", "_") if key in METADATA_MAP: key = METADATA_MAP[key] data[key] = value return data def get_build_data(path, isolated=None): metadata = build_metadata(path, isolated=isolated) return map_metadata_keys(metadata) def get_setupcfg_data(path): # Note: By default, setup.cfg will read the pyroma.git/setup.cfg - forcing explicit setup.cfg under test's file path data = read_configuration(str(pathlib.Path(path) / "setup.cfg")) metadata = data["metadata"] return metadata def get_data(path): try: return get_build_data(path) except build.BuildException as e: if "no pyproject.toml or setup.py" in e.args[0]: # It couldn't build the package, because there is no setup.py or pyproject.toml. # Let's see if there is a setup.cfg: try: metadata = get_setupcfg_data(path) # Yes, there's a setup.cfg. Pyroma accepted this earlier, but that was probably # a mistake. For the time being, warn for it, but in a future version just fail. metadata["_missing_build_system"] = True return metadata except Exception: # No, that didn't work. Hide this second exception and raise the first: pass raise e except Exception: logging.exception("Exception raised during metadata preparation") metadata = get_setuppy_data(path) metadata["_stoneage_setuppy"] = True return metadata class FakeContext: def __init__(self, path): self._path = path def __enter__(self): self._old_path = os.path.abspath(os.curdir) if self._old_path in sys.path: sys.path.remove(self._old_path) os.chdir(self._path) if self._path not in sys.path: sys.path.insert(0, self._path) self._path_appended = True else: self._path_appended = False def __exit__(self, exc_type, exc_val, exc_tb): if self._path_appended: sys.path.remove(self._path) sys.path.append(self._old_path) os.chdir(self._old_path) class SetupMonkey: used_setuptools = False def distutils_setup_replacement(self, **kw): self._distutils_setup(**kw) def setuptools_setup_replacement(self, **kw): self.used_setuptools = True self._setuptools_setup(**kw) def get_data(self): return self._kw def __enter__(self): import distutils.core self._distutils_setup = distutils.core.setup distutils.core.setup = self.distutils_setup_replacement try: import setuptools self._setuptools_setup = setuptools.setup setuptools.setup = self.setuptools_setup_replacement except ImportError: self._setuptools_setup = None self._kw = {} return self def __exit__(self, exc_type, exc_val, exc_tb): import distutils.core distutils.core.setup = self._distutils_setup if self._setuptools_setup is not None: import setuptools setuptools.setup = self._setuptools_setup # This is a version of distutils run_setup() that doesn't give # up just because Setuptools throws errors if you try to exec it. def run_setup(script_name, script_args=None, stop_after="run"): """Run a setup script in a somewhat controlled environment, and return the Distribution instance that drives things. This is useful if you need to find out the distribution meta-data (passed as keyword args from 'script' to 'setup()', or the contents of the config files or command-line. 'script_name' is a file that will be run with 'execfile()'; 'sys.argv[0]' will be replaced with 'script' for the duration of the call. 'script_args' is a list of strings; if supplied, 'sys.argv[1:]' will be replaced by 'script_args' for the duration of the call. 'stop_after' tells 'setup()' when to stop processing; possible values: init stop after the Distribution instance has been created and populated with the keyword arguments to 'setup()' config stop after config files have been parsed (and their data stored in the Distribution instance) commandline stop after the command-line ('sys.argv[1:]' or 'script_args') have been parsed (and the data stored in the Distribution) run [default] stop after all commands have been run (the same as if 'setup()' had been called in the usual way Returns the Distribution instance, which provides all information used to drive the Distutils. """ if stop_after not in ("init", "config", "commandline", "run"): raise ValueError(f"invalid value for 'stop_after': {stop_after!r}") core._setup_stop_after = stop_after save_argv = copy(sys.argv) glocals = copy(globals()) glocals["__file__"] = script_name glocals["__name__"] = "__main__" try: try: sys.argv[0] = script_name if script_args is not None: sys.argv[1:] = script_args with tokenize.open(script_name) as f: exec(f.read(), glocals, glocals) finally: sys.argv = save_argv core._setup_stop_after = None except Exception: logging.warning("Exception when running setup.", exc_info=True) if core._setup_distribution is None: raise RuntimeError( f"'distutils.core.setup()' was never called -- perhaps '{script_name}' is not a Distutils setup script?" ) # I wonder if the setup script's namespace -- g and l -- would be of # any interest to callers? return core._setup_distribution def get_setuppy_data(path): """ Returns data from a package directory. 'path' should be an absolute path. """ metadata = {} # Run the imported setup to get the metadata. with FakeContext(path): with SetupMonkey() as sm: if os.path.isfile("setup.py"): try: distro = run_setup("setup.py", stop_after="config") metadata = {} for k, v in distro.metadata.__dict__.items(): if k[0] == "_" or not v: continue if all(not x for x in v): continue metadata[k] = v if sm.used_setuptools: for extras in ["cmdclass", "zip_safe", "test_suite"]: v = getattr(distro, extras, None) if v is not None and v not in ([], {}): metadata[extras] = v except Exception as e: # Looks like setup.py is broken. logging.exception(e) metadata = {} elif os.path.isfile("setup.cfg"): try: data = read_configuration("setup.cfg") metadata = data["metadata"] metadata["_setuptools"] = True except Exception as e: logging.exception(e) else: logging.exception("Neither setup.py nor setup.cfg was found") return metadata pyroma-4.2/pyroma/pypidata.py000066400000000000000000000044411456340716600164010ustar00rootroot00000000000000import logging import os import requests import tempfile import xmlrpc.client from pyroma import distributiondata def _get_project_data(project): # I think I should be able to monkeypatch a mock-thingy here... I think. response = requests.get(f"https://pypi.org/pypi/{project}/json") if response.status_code == 404: raise ValueError(f"Did not find '{project}' on PyPI. Did you misspell it?") if not response.ok: raise ValueError(f"Unknown http error: {response.status_code} {response.reason}") return response.json() def get_data(project): # Pick the latest release. project_data = _get_project_data(project) releases = project_data["releases"] data = project_data["info"] release = data["version"] logging.debug(f"Found {project} version {release}") # Map things around: data["long_description"] = data["description"] data["description"] = data["summary"] with xmlrpc.client.ServerProxy("https://pypi.org/pypi") as xmlrpc_client: roles = xmlrpc_client.package_roles(project) data["_owners"] = [user for (role, user) in roles if role == "Owner"] # Get download_urls: urls = releases[release] data["_pypi_downloads"] = bool(urls) # If there is a source download, download it, and get that data. # This is done mostly to do the imports check. data["_source_download"] = False data["_has_sdist"] = False for download in urls: if download["packagetype"] == "sdist": # Found a source distribution. Download and analyze it. data["_has_sdist"] = True tempdir = tempfile.gettempdir() filename = download["url"].split("/")[-1] tmp = os.path.join(tempdir, filename) logging.debug(f"Downloading {filename} to verify distribution") try: with open(tmp, "wb") as outfile: outfile.write(requests.get(download["url"]).content) ddata = distributiondata.get_data(tmp) except Exception: # Clean up the file os.unlink(tmp) raise # Combine them, with the PyPI data winning: ddata.update(data) data = ddata data["_source_download"] = True break return data pyroma-4.2/pyroma/ratings.py000066400000000000000000000372001456340716600162340ustar00rootroot00000000000000# This is a collection of "tests" done on the package data. The resut of the # tests is used to give the package a rating. # # Each test has a couple of attributes. Both attributes are checked only after # the test is performed so the test can choose to set the attributes dependning # on the severity of the failure. # # fatal: If set to True, the failure of this test will cause the # package to achieve the rating of 1, which is minimum # weight: The relative importance of the test. # If the test has fatal set to True this is ignored. # # Tests have two methods: # test(data): Performs the test on the given data. Returns True for pass # False for fail and None for not applicable (meaning it will # not be counted). import io import re from collections import defaultdict from docutils.core import publish_parts from docutils.utils import SystemMessage from trove_classifiers import classifiers as CLASSIFIERS from packaging.specifiers import InvalidSpecifier, SpecifierSet LEVELS = [ "This cheese seems to contain no dairy products", "Vieux Bologne", "Limburger", "Gorgonzola", "Stilton", "Brie", "Comté", "Jarlsberg", "Philadelphia", "Cottage Cheese", "Your cheese is so fresh most people think it's a cream: Mascarpone", ] SHORT_NAME_RE = re.compile(r"\(.*?\)") def get_code_licenses(): licenses = [each for each in list(CLASSIFIERS) if each.startswith("License")] code_map = defaultdict(set) for license in licenses: short_name = SHORT_NAME_RE.findall(license) if short_name: short_name = short_name[0][1:-1] code_map[short_name].add(license) if short_name.startswith("GPL"): code_map["GPL"].add(license) elif short_name.startswith("LGPL"): code_map["LGPL"].add(license) elif "Zope" in license: code_map["ZPL"].add(license) elif "MIT License" in license: code_map["MIT"].add(license) return code_map CODE_LICENSES = get_code_licenses() class BaseTest: fatal = False class FieldTest(BaseTest): """Tests that a specific field is in the data and is not empty or False""" def test(self, data): return bool(data.get(self.field)) def message(self): return (f"Your package does not have {self.field} data") + (self.fatal and "!" or ".") class Name(FieldTest): fatal = True field = "name" class Version(FieldTest): fatal = True field = "version" class VersionIsString(BaseTest): weight = 50 def test(self, data): # Check that the version is a string version = data.get("version") return isinstance(version, str) def message(self): return "The version number should be a string." PEP386_RE = re.compile( r""" ^ (?P\d+\.\d+) # minimum 'N.N' (?P(?:\.\d+)*) # any number of extra '.N' segments (?: (?P[abc]|rc) # 'a'=alpha, 'b'=beta, 'c'=release candidate # 'rc'= alias for release candidate (?P\d+(?:\.\d+)*) )? (?P(\.post(?P\d+))?(\.dev(?P\d+))?)? $""", re.VERBOSE | re.IGNORECASE, ) PEP440_RE = re.compile( r"""^ v? (?: (?:(?P[0-9]+)!)? # epoch (?P[0-9]+(?:\.[0-9]+)*) # release segment (?P
                                          # pre-release
            [-_\.]?
            (?P(a|b|c|rc|alpha|beta|pre|preview))
            [-_\.]?
            (?P[0-9]+)?
        )?
        (?P                                         # post release
            (?:-(?P[0-9]+))
            |
            (?:
                [-_\.]?
                (?Ppost|rev|r)
                [-_\.]?
                (?P[0-9]+)?
            )
        )?
        (?P                                          # dev release
            [-_\.]?
            (?Pdev)
            [-_\.]?
            (?P[0-9]+)?
        )?
    )
    (?:\+(?P[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
$""",
    re.VERBOSE | re.IGNORECASE,
)


class PEPVersion(BaseTest):
    weight = 50
    pep386 = False

    def test(self, data):
        # Check that the version number complies to PEP-386:
        version = data.get("version")
        self.pep386 = False
        if PEP386_RE.search(str(version)) is not None:
            # Matches the old PEP386
            self.weight = 10
            self.pep386 = True
        match = PEP440_RE.search(str(version))
        return match is not None

    def message(self):
        if self.pep386:
            return "The package's version number complies only with PEP-386 and not PEP-440."
        return "The package's version number does not comply with PEP-386 or PEP-440."


class Description(BaseTest):
    weight = 100

    def test(self, data):
        description = data.get("description")
        if not description:
            # No description at all. That's fatal.
            self.fatal = True
            return False
        self.fatal = False
        return len(description) > 10

    def message(self):
        if self.fatal:
            return "The package had no description!"
        else:
            return "The package's description should be longer than 10 characters."


class LongDescription(BaseTest):
    weight = 50

    def test(self, data):
        long_description = data.get("long_description", "")
        if not isinstance(long_description, str):
            long_description = ""
        return len(long_description) > 100

    def message(self):
        return "The package's long_description is quite short."


class Classifiers(FieldTest):
    weight = 100
    field = "classifiers"


class ClassifierVerification(BaseTest):
    weight = 20

    def test(self, data):
        self._incorrect = []
        classifiers = data.get("classifiers", [])
        for classifier in classifiers:
            if classifier not in CLASSIFIERS:
                self._incorrect.append(classifier)
        if self._incorrect:
            return False
        return True

    def message(self):
        err = "\n".join(self._incorrect)
        return "Some of your classifiers are not standard classifiers:\n" + err


class PythonClassifierVersion(BaseTest):
    def test(self, data):
        self._major_version_specified = False

        classifiers = data.get("classifiers", [])
        for classifier in classifiers:
            parts = [p.strip() for p in classifier.split("::")]
            if parts[0] == "Programming Language" and parts[1] == "Python":
                if len(parts) == 2:
                    # Specified Python, but no version.
                    continue
                version = parts[2]
                try:
                    float(version)
                except ValueError:
                    # Not a proper Python version
                    continue
                try:
                    int(version)
                except ValueError:
                    # It's a valid float, but not a valid int. Hence it's
                    # something like "2.7" or "3.3" but not just "2" or "3".
                    # This is a good specification, and we only need one.
                    # Set weight to 100 and finish.
                    self.weight = 100
                    return True

                # It's a valid int, meaning it specified "2" or "3".
                self._major_version_specified = True

        # There was some sort of failure:
        if self._major_version_specified:
            # Python 2 or 3 was specified but no more detail than that:
            self.weight = 25
        else:
            # No Python version specified at all:
            self.weight = 100
        return False

    def message(self):
        if self._major_version_specified:
            return (
                "The classifiers should specify what minor versions of "
                "Python you support as well as what major version."
            )
        return "The classifiers should specify what Python versions you support."


class PythonRequiresVersion(BaseTest):
    weight = 100

    def test(self, data):
        # https://github.com/regebro/pyroma/pull/83#discussion_r955611236
        python_requires = data.get("python_requires", None)

        if not python_requires:
            return False

        try:
            SpecifierSet(python_requires)
        except InvalidSpecifier:
            return False

        return True

    def message(self):
        return (
            "You should specify what Python versions you support with "
            "the 'requires-python'/'python_requires' metadata."
        )


class Keywords(FieldTest):
    weight = 20
    field = "keywords"


class Author(FieldTest):
    weight = 100
    field = "author"

    def test(self, data):
        """Check if author_email field contains author name."""
        email = data.get("author_email")
        # Pass if author name in email, e.g. "Author Name "
        return True if email and "<" in email else super().test(data)


class AuthorEmail(FieldTest):
    weight = 100
    field = "author_email"


class Url(BaseTest):
    weight = 20

    def test(self, data):
        return bool(data.get("url")) or bool(data.get("project_urls"))

    def message(self):
        return (
            "Your package should have a 'url' field with a link to the "
            "project home page, or a 'project_urls' field, with a "
            "dictionary of links, or both."
        )


class Licensing(BaseTest):
    weight = 50

    def test(self, data):
        license = data.get("license")
        classifiers = data.get("classifiers", [])
        licenses = set()
        for classifier in classifiers:
            parts = [p.strip() for p in classifier.split("::")]
            if parts[0] == "License":
                # license classifier exist
                licenses.add(classifier)

        if not license and not licenses:
            self._message = "Your package does neither have a license field nor any license classifiers."
            return False

        if license in CODE_LICENSES:
            if not CODE_LICENSES[license].intersection(licenses):
                self._message = f"The license '{license}' specified is not listed in your classifiers."
                return False

        return True

    def message(self):
        return self._message


class DevStatusClassifier(BaseTest):
    weight = 20

    def test(self, data):
        classifiers = data.get("classifiers", [])
        for classifier in classifiers:
            parts = [p.strip() for p in classifier.split("::")]
            if parts[0] == "Development Status":
                # license classifier exist
                return True
        return False

    def message(self):
        return "Specifying a development status in the classifiers gives users a hint of how stable your software is."


class SDist(BaseTest):
    weight = 100

    def test(self, data):
        if "_has_sdist" not in data:
            # We aren't checking on PyPI
            self.weight = 0
            return None
        return data["_has_sdist"]

    def message(self):
        return (
            "You have no source distribution on the Cheeseshop. "
            "Uploading the source distribution to the Cheeseshop ensures "
            "maximum availability of your package."
        )


class ValidREST(BaseTest):

    weight = 50

    def test(self, data):
        content_type = data.get("long_description_content_type", None)
        if content_type in ("text/plain", "text/markdown"):
            # These can't fail. Markdown will just assume everything
            # it doesn't understand is plain text.
            return True

        # This should be ReStructuredText
        source = data.get("long_description", "")
        stream = io.StringIO()
        settings = {"warning_stream": stream}

        try:
            publish_parts(source=source, writer_name="html4css1", settings_overrides=settings)
        except SystemMessage as e:
            self._message = e.args[0]
        errors = stream.getvalue().strip()
        if not errors:
            return True

        self._message = "\n" + errors
        return False

    def message(self):
        return "Your long_description is not valid ReST: " + self._message


class BusFactor(BaseTest):
    def test(self, data):
        if "_owners" not in data:
            self.weight = 0
            return None

        if len(data.get("_owners", [])) == 1:
            self.weight = 100
            return False

        if len(data.get("_owners", [])) == 2:
            self.weight = 50
            return False

        # Three or more, that's good.
        self.weight = 100
        return True

    def message(self):
        return "You should have three or more owners of the project on PyPI."


class MissingBuildSystem(BaseTest):
    def test(self, data):
        if "_missing_build_system" in data:
            # These sort of "negative only/deprecation" ratings only give you negative weight
            self.weight = 200
            return False

    def message(self):
        return (
            "You seem to have a setup.cfg, but neither a setup.py, nor a build-system defined. This makes "
            "it unclear how your project should be built. You probably want to have a pyproject.toml file "
            "with the following configuration:\n\n"
            "    [build-system]\n"
            '    requires = ["setuptools>=42"]\n'
            '    build-backend = "setuptools.build_meta"\n\n'
            'In the future this will become a hard failure and your package will be rated as "not cheese".'
        )


class StoneAgeSetupPy(BaseTest):
    def test(self, data):
        if "_stoneage_setuppy" in data:
            # These sort of "negative only/deprecation" ratings only give you negative weight
            self.weight = 200
            return False

    def message(self):
        return (
            "Your Cheese may have spoiled!! The only way to gather metadata from your package was to execute "
            "a patched setup.py. This indicates that your package is using very old packaging techniques, "
            "(or that your setup.py isn't executable at all), and Pyroma will soon regard that as a complete "
            "failure!\nPlease modernize your packaging! If it is already modern, this is a bug."
        )


ALL_TESTS = [
    Name(),
    Version(),
    VersionIsString(),
    PEPVersion(),
    Description(),
    LongDescription(),
    Classifiers(),
    ClassifierVerification(),
    PythonClassifierVersion(),
    PythonRequiresVersion(),
    Keywords(),
    Author(),
    AuthorEmail(),
    Url(),
    Licensing(),
    SDist(),
    ValidREST(),
    BusFactor(),
    DevStatusClassifier(),
    MissingBuildSystem(),
    StoneAgeSetupPy(),
]


def rate(data):
    if not data:
        # No data was gathered. Fail:
        return (0, ["I couldn't find any package data"])
    fails = []
    good = 0
    bad = 0
    fatality = False
    for test in ALL_TESTS:
        res = test.test(data)
        if res is False:
            fails.append(test.message())
            if test.fatal:
                fatality = True
            else:
                bad += test.weight
        elif res is True:
            if not test.fatal:
                good += test.weight
    # If res is None, it's ignored.
    if fatality:
        # A fatal test failed. That means we give a 0 rating:
        return 0, fails
    # Multiply good by 9, and add 1 to get a rating between
    # 1: All non-fatal tests failed.
    # 10: All tests succeeded.
    return (good * 9) // (good + bad) + 1, fails
pyroma-4.2/pyroma/testdata/000077500000000000000000000000001456340716600160225ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/complete/000077500000000000000000000000001456340716600176325ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/complete/README.txt000066400000000000000000000024461456340716600213360ustar00rootroot00000000000000Complete
========

This is a test package for pyroma that is supposed to have a complete
set of metadata and also runnable tests. It should score the maximum possible
on package tests.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at
dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget
velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam
nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla
nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin
orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing
velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac
ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus
nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis
interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit
ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et
dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed
ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit
posuere id dignissim massa molestie.
pyroma-4.2/pyroma/testdata/complete/complete/000077500000000000000000000000001456340716600214425ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/complete/complete/__init__.py000066400000000000000000000000731456340716600235530ustar00rootroot00000000000000import zope.event

# Stop pyflakes complaining:
zope.event
pyroma-4.2/pyroma/testdata/complete/complete/tests.py000066400000000000000000000002131456340716600231520ustar00rootroot00000000000000import unittest


class PackageDataTest(unittest.TestCase):
    def test_test(self):
        # Stop pyflakes from compaining:
        pass
pyroma-4.2/pyroma/testdata/complete/setup.cfg000066400000000000000000000000661456340716600214550ustar00rootroot00000000000000[egg_info]
tag_build = .dev1
tag_svn_revision = false
pyroma-4.2/pyroma/testdata/complete/setup.py000066400000000000000000000022641456340716600213500ustar00rootroot00000000000000from setuptools import setup, find_packages

version = "1.0"

with open("README.txt", encoding="UTF-8") as readme:
    long_description = readme.read()

setup(
    name="complete",
    version=version,
    description="This is a test package for pyroma.",
    long_description=long_description,
    python_requires=">=2.6",
    classifiers=[
        "Development Status :: 6 - Mature",
        "Operating System :: OS Independent",
        "Programming Language :: Python :: 2.6",
        "Programming Language :: Python :: 2.7",
        "Programming Language :: Python :: 3.1",
        "Programming Language :: Python :: 3.2",
        "Programming Language :: Python :: 3.3",
        "License :: OSI Approved :: MIT License",
    ],
    keywords=["pypi", "quality", "example"],
    author="Lennart Regebro",
    author_email="regebro@gmail.com",
    url="https://github.com/regebro/pyroma",
    project_urls={"Source Code": "https://github.com/regebro/pyroma"},
    license="MIT",
    packages=find_packages(exclude=["ez_setup", "examples", "tests"]),
    include_package_data=True,
    install_requires=["zope.event"],
    tests_require=["six"],
    setup_requires=["setuptools"],
    zip_safe=True,
)
pyroma-4.2/pyroma/testdata/custom_test/000077500000000000000000000000001456340716600203735ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/custom_test/minimal/000077500000000000000000000000001456340716600220215ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/custom_test/minimal/__init__.py000066400000000000000000000000001456340716600241200ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/custom_test/setup.cfg000066400000000000000000000000651456340716600222150ustar00rootroot00000000000000[egg_info]
tag_build = .dev1
tag_svn_revision = true
pyroma-4.2/pyroma/testdata/custom_test/setup.py000066400000000000000000000011071456340716600221040ustar00rootroot00000000000000from setuptools import setup, find_packages
from setuptools.command.test import test

version = "0.0.1"


class CustomTest(test):
    pass


setup(
    name="minimal",
    version=version,
    description="Test",
    classifiers=[],
    keywords="",
    author="",
    author_email="",
    url="",
    license="",
    packages=find_packages(exclude=["ez_setup", "examples", "tests"]),
    include_package_data=True,
    install_requires=[
        # -*- Extra requirements: -*-
    ],
    entry_points="""
      # -*- Entry points: -*-
      """,
    cmdclass={"test": CustomTest},
)
pyroma-4.2/pyroma/testdata/distributions/000077500000000000000000000000001456340716600207245ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/distributions/complete-1.0.dev1.tar000066400000000000000000001200001456340716600243670ustar00rootroot00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1661419566.674948
complete-1.0.dev1/0000755000076600000240000000000000000000000014570 5ustar00davidisstaff00000000000000././@PaxHeader0000000000000000000000000000003300000000000011451 xustar000000000000000027 mtime=1661419566.675129
complete-1.0.dev1/PKG-INFO0000644000076600000240000000376700000000000015702 0ustar00davidisstaff00000000000000Metadata-Version: 2.1
Name: complete
Version: 1.0.dev1
Summary: This is a test package for pyroma.
Home-page: https://github.com/regebro/pyroma
Author: Lennart Regebro
Author-email: regebro@gmail.com
License: MIT
Project-URL: Source Code, https://github.com/regebro/pyroma
Keywords: pypi,quality,example
Classifier: Development Status :: 6 - Mature
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.1
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: License :: OSI Approved :: MIT License
Requires-Python: >=2.6

Complete
========

This is a test package for pyroma that is supposed to have a complete
set of metadata and also runnable tests. It should score the maximum possible
on package tests.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at
dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget
velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam
nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla
nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin
orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing
velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac
ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus
nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis
interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit
ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et
dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed
ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit
posuere id dignissim massa molestie.
././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661329280.0
complete-1.0.dev1/README.txt0000644000076600000240000000244600000000000016274 0ustar00davidisstaff00000000000000Complete
========

This is a test package for pyroma that is supposed to have a complete
set of metadata and also runnable tests. It should score the maximum possible
on package tests.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at
dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget
velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam
nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla
nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin
orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing
velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac
ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus
nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis
interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit
ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et
dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed
ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit
posuere id dignissim massa molestie.
././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1661419566.6720073
complete-1.0.dev1/complete/0000755000076600000240000000000000000000000016400 5ustar00davidisstaff00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661329280.0
complete-1.0.dev1/complete/__init__.py0000644000076600000240000000007300000000000020511 0ustar00davidisstaff00000000000000import zope.event

# Stop pyflakes complaining:
zope.event
././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661329280.0
complete-1.0.dev1/complete/tests.py0000644000076600000240000000021300000000000020110 0ustar00davidisstaff00000000000000import unittest


class PackageDataTest(unittest.TestCase):
    def test_test(self):
        # Stop pyflakes from compaining:
        pass
././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1661419566.6745846
complete-1.0.dev1/complete.egg-info/0000755000076600000240000000000000000000000020072 5ustar00davidisstaff00000000000000././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661419566.0
complete-1.0.dev1/complete.egg-info/PKG-INFO0000644000076600000240000000376700000000000021204 0ustar00davidisstaff00000000000000Metadata-Version: 2.1
Name: complete
Version: 1.0.dev1
Summary: This is a test package for pyroma.
Home-page: https://github.com/regebro/pyroma
Author: Lennart Regebro
Author-email: regebro@gmail.com
License: MIT
Project-URL: Source Code, https://github.com/regebro/pyroma
Keywords: pypi,quality,example
Classifier: Development Status :: 6 - Mature
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3.1
Classifier: Programming Language :: Python :: 3.2
Classifier: Programming Language :: Python :: 3.3
Classifier: License :: OSI Approved :: MIT License
Requires-Python: >=2.6

Complete
========

This is a test package for pyroma that is supposed to have a complete
set of metadata and also runnable tests. It should score the maximum possible
on package tests.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at
dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget
velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam
nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla
nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin
orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing
velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac
ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus
nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis
interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit
ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et
dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed
ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit
posuere id dignissim massa molestie.
././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661419566.0
complete-1.0.dev1/complete.egg-info/SOURCES.txt0000644000076600000240000000037600000000000021764 0ustar00davidisstaff00000000000000README.txt
setup.cfg
setup.py
complete/__init__.py
complete/tests.py
complete.egg-info/PKG-INFO
complete.egg-info/SOURCES.txt
complete.egg-info/dependency_links.txt
complete.egg-info/requires.txt
complete.egg-info/top_level.txt
complete.egg-info/zip-safe././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661419566.0
complete-1.0.dev1/complete.egg-info/dependency_links.txt0000644000076600000240000000000100000000000024140 0ustar00davidisstaff00000000000000
././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661419566.0
complete-1.0.dev1/complete.egg-info/requires.txt0000644000076600000240000000001300000000000022464 0ustar00davidisstaff00000000000000zope.event
././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661419566.0
complete-1.0.dev1/complete.egg-info/top_level.txt0000644000076600000240000000001100000000000022614 0ustar00davidisstaff00000000000000complete
././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661413166.0
complete-1.0.dev1/complete.egg-info/zip-safe0000644000076600000240000000000100000000000021522 0ustar00davidisstaff00000000000000
././@PaxHeader0000000000000000000000000000003400000000000011452 xustar000000000000000028 mtime=1661419566.6755905
complete-1.0.dev1/setup.cfg0000644000076600000240000000010400000000000016404 0ustar00davidisstaff00000000000000[egg_info]
tag_build = .dev1
tag_svn_revision = false
tag_date = 0

././@PaxHeader0000000000000000000000000000002600000000000011453 xustar000000000000000022 mtime=1661329714.0
complete-1.0.dev1/setup.py0000644000076600000240000000226400000000000016306 0ustar00davidisstaff00000000000000from setuptools import setup, find_packages

version = "1.0"

with open("README.txt", encoding="UTF-8") as readme:
    long_description = readme.read()

setup(
    name="complete",
    version=version,
    description="This is a test package for pyroma.",
    long_description=long_description,
    python_requires=">=2.6",
    classifiers=[
        "Development Status :: 6 - Mature",
        "Operating System :: OS Independent",
        "Programming Language :: Python :: 2.6",
        "Programming Language :: Python :: 2.7",
        "Programming Language :: Python :: 3.1",
        "Programming Language :: Python :: 3.2",
        "Programming Language :: Python :: 3.3",
        "License :: OSI Approved :: MIT License",
    ],
    keywords=["pypi", "quality", "example"],
    author="Lennart Regebro",
    author_email="regebro@gmail.com",
    url="https://github.com/regebro/pyroma",
    project_urls={"Source Code": "https://github.com/regebro/pyroma"},
    license="MIT",
    packages=find_packages(exclude=["ez_setup", "examples", "tests"]),
    include_package_data=True,
    install_requires=["zope.event"],
    tests_require=["six"],
    setup_requires=["setuptools"],
    zip_safe=True,
)
pyroma-4.2/pyroma/testdata/distributions/complete-1.0.dev1.tar.bz2000066400000000000000000000050341456340716600250740ustar00rootroot00000000000000BZh91AY&SYh‡jXgo
 0`>DcQI(FyPFh4i82
ɦ! 04bb4pd4LCMAa@hhj4@h@"MҧSjd=O)j1Q4z='PDOқҞzIm&эF\zU٫qZYbW[ $Aj 
ߤ6a
hE_w41U	a^Ni2XC5hPa)2$QG
Isn;?(ɨ>Gc,8p]L4j=Oѳ۰6aP[v~&mlaa'rXaH@ن\7nͣ,?C>209:<٣#W
jӉ=o7w\nÓã݆^Aunɾm6pՖ3TZ2$<#APt90&uZaƦyN<W$f&J@B9eF(Gk/.Ll}l02գyo3#CG.
SɳG,j0__•>mCwlHno5{hRxjoYJCيHXPJFLEBez`7d*X#ç.l[c|E`QM+*zx W?T`6>VۨqʙrKo"LH/hcJeHXaNAN^eT8lc{<եO2&$2zkƻ]0EeHW!+Y[Bhj
U)	
Ʉȱ7Ed\:DC[Du!|m*9rΡw%o&jc1_KxI	ɔÙ^:hVXu2l/~Sڮ|]F@"1hɟbBN`A%^9Lkp}y
ݽcan9[
6mMX|-OW$_hrhFFh,vr,V%\U_MFseɳVn1v+dt
ۜX@'
+=|BѨq{
0nm
l&N{=d$2$I	%]0`H;j5jR[W=g^r+C4;#7E%
p7ySB2gF[wa0ц9j^7j+) Йᖖ&~`5!aK#2(P0c8*j3ͦS"5N8t!(;!ww(?/scn&e2$5nveWaD٨݄.{8eGkW˝x1]F|>Xz0C20pnpVƯc; *:]8a7{- [QzU99jDC'yx0:+KFP}}=jݔ53y9#$!:C@bV8@իx{dj²\~ûS.N~
:fX|Iaad:9!,eD+d9al{9"P6hCV~Q$5!fdQj22
ebYhC56nH>F!>٣vT}͚ĵJFm
F0ٓXau%ܮN01e"81krꤏ=<:L
vV)P%
"~
sU=fGd6rvi[24
ڲ.[Zi
Y%J-RUz0!uɑ@|<&z{N£!h?|U<^ݣ'3s6T~A7waԻ.otڶ`w%0}R/t>y2=
_!G@r&
;eF^-+/<߀[1!ݫآY·:oʹ][?$OFc7/ޯ<o?xzj_SnywT0box.&,k}h0fJ+>WZV5(ay[T`zeZϲG:!                         Նpyroma-4.2/pyroma/testdata/distributions/complete-1.0.dev1.zip000066400000000000000000000131021456340716600244070ustar00rootroot00000000000000PKCUcomplete-1.0.dev1/PKCUcomplete-1.0.dev1/complete/PKCU$complete-1.0.dev1/complete.egg-info/PKCU4rcomplete-1.0.dev1/PKG-INFOTnF}hR@@N7}[fg$Kkv$<H.hu]!{
}^>7؁֤vleԝ3 ol|7642h7>}J9v]72ԍ9N=~m}mѥfzK!9"~Oc.Z-zÑE8F'\K~_Hy8~]o_+3@͸zuƛ&~n:&6ݞ>JY*
ӻƈ9jAk!:艑d̅Žjސ9PzP>j
1$>09]\uY0%M;;gEwY
Cy,Y6%Q6{ڢR)RBȃt^๖n鴺!wN闊.c]44JqXܩ^ί2i˶@ۜVz\dKgc8\1Ss3:ܯ\͟ܫPKUz#complete-1.0.dev1/setup.pyTQk0~8@-t#vHhiRj_Jrd$SIw|58ZWdme+̈EdI;O$y~
ڠm귞UJ~/}cC,IUZY.Nsa`Ђ\צBlc,xtb̎ih`fZe_iq_WQ#sr%)Znp65*/|`2+89lL3hb<y**\1ҊPer#}e4iTũcLvµ1Vot	O7m-쌤d߅-nEh+-g3TJ<`Vcog(1ƒsq	iw"ψ;[?ulP[˜3*Cǖ7US UY;dGepaűa'#UBxT<==)=kjCwoQK9x0PKURj&complete-1.0.dev1/README.txtTIA)|V߀b}޿I,j_UnyO`G78JZtqoso_.'_.򻖄7ٲ&zkҩ\(Is P96S/oBiD=6>8.
uDl״pҭ]yW}',ڻR'bؼ׬K=h-MYj!EPO%#Q‰*ݭE0B%hcN+E;bdרMep2܅4Ltਣ}
~D`4q"MԠd0)`V,xR+&rz!E10М1m
W镧̍Y
t;MgHD0vAyK0~kԀfɺ)mE!+.*`gf8(pYm9ޑ+ZVib꥝{EݚfhC=/^'Q:]]9ad[54rgF?ɿ}9vcR=$7qkLq2?PKCUK=Dcomplete-1.0.dev1/setup.cfgNMOKˏ*ILO*IQUKI-3eg%sS)%@..PKU^"4;&complete-1.0.dev1/complete/__init__.py-/*Q/HK-K+RV./P(LIN-VH-IKBRPKUml#complete-1.0.dev1/complete/tests.pyE
@H.hu]!{
}^>7؁֤vleԝ3 ol|7642h7>}J9v]72ԍ9N=~m}mѥfzK!9"~Oc.Z-zÑE8F'\K~_Hy8~]o_+3@͸zuƛ&~n:&6ݞ>JY*
ӻƈ9jAk!:艑d̅Žjސ9PzP>j
1$>09]\uY0%M;;gEwY
Cy,Y6%Q6{ڢR)RBȃt^๖n鴺!wN闊.c]44JqXܩ^ί2i˶@ۜVz\dKgc8\1Ss3:ܯ\͟ܫPK|U2,complete-1.0.dev1/complete.egg-info/zip-safePKCUp'n?~/complete-1.0.dev1/complete.egg-info/SOURCES.txtuA
0}QDut16b= .n70ZJHމʤ0j}WȜ?	焏6n#u-U8 YϹ0qs"pC(Ó''PKCUPk
0complete-1.0.dev1/complete.egg-info/requires.txt/HK-K+PKCU1	1complete-1.0.dev1/complete.egg-info/top_level.txtK-I-IPKCU28complete-1.0.dev1/complete.egg-info/dependency_links.txtPKCUAcomplete-1.0.dev1/PKCUA0complete-1.0.dev1/complete/PKCU$Aicomplete-1.0.dev1/complete.egg-info/PKCU4rcomplete-1.0.dev1/PKG-INFOPKUz#complete-1.0.dev1/setup.pyPKURj&complete-1.0.dev1/README.txtPKCUK=D	complete-1.0.dev1/setup.cfgPKU^"4;&
complete-1.0.dev1/complete/__init__.pyPKUml#
complete-1.0.dev1/complete/tests.pyPKCU4r,=complete-1.0.dev1/complete.egg-info/PKG-INFOPK|U2,/complete-1.0.dev1/complete.egg-info/zip-safePKCUp'n?~/|complete-1.0.dev1/complete.egg-info/SOURCES.txtPKCUPk
0Gcomplete-1.0.dev1/complete.egg-info/requires.txtPKCU1	1complete-1.0.dev1/complete.egg-info/top_level.txtPKCU28complete-1.0.dev1/complete.egg-info/dependency_links.txtPKUpyroma-4.2/pyroma/testdata/jsondata/000077500000000000000000000000001456340716600176255ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/jsondata/complete.json000066400000000000000000001043071456340716600223350ustar00rootroot00000000000000{"info":{"author":"Logilab and Shoobx Team","author_email":"dev@shoobx.com","bugtrack_url":null,"classifiers":["Development Status :: 3 - Alpha","Framework :: ZODB","Intended Audience :: Developers","License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)","Natural Language :: English","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 2","Programming Language :: Python :: 2.7","Programming Language :: Python :: 3","Programming Language :: Python :: 3.5","Programming Language :: Python :: 3.6"],"description":"========\nXML Diff\n========\n\n.. image:: https://travis-ci.org/Shoobx/xmldiff.png?branch=master\n   :target: https://travis-ci.org/Shoobx/xmldiff\n\n.. image:: https://coveralls.io/repos/github/Shoobx/xmldiff/badge.svg?branch=master\n   :target: https://coveralls.io/github/Shoobx/xmldiff?branch=master\n\n.. image:: https://img.shields.io/pypi/v/xmldiff.svg\n    :target: https://pypi.python.org/pypi/xmldiff\n\n.. image:: https://img.shields.io/pypi/pyversions/xmldiff.svg\n    :target: https://pypi.python.org/pypi/xmldiff/\n\n\nXmldiff is a utility for extracting differences between two xml files. It\nreturns a set of primitives to apply on source tree to obtain the destination\ntree.\n\nThe implementation is based on `Change detection in hierarchically structured\ninformation`, by S. Chawathe, A. Rajaraman, H. Garcia-Molina and J. Widom,\nStanford University, 1996\n\nInstallation\n------------\n\nTo install the latest release:\n\n.. code:: bash\n\n    pip install xmldiff\n\n\nTo install the development version:\n\n.. code:: bash\n\n    git clone https://github.com/Shoobx/xmldiff.git\n    cd xmldiff\n    virtualenv ./.venv\n    ./.venv/bin/python setup.py install\n\nThen to compare two given XML files:\n\n.. code:: bash\n\n    ./.venv/bin/xmldiff 1.xml 2.xml\n\n\nRunning tests\n-------------\n\nTo run the test suite for all python versions:\n\n.. code:: bash\n\n    tox\n\n\nCHANGES\n=======\n\n1.1.0 (2018-06-15)\n------------------\n\n- When using namespaces, the returned xpaths are now in the form ns_prefix:tag\n  instead of the earlier {ns_uri}tag, which isn't correct xpaths.\n\n\n1.0.0 (2018-04-13)\n------------------\n\n- pep8 cleanup, added flake8 checking to tox\n\n\n1.0.0a6 (2018-04-12)\n--------------------\n\n- Removed encoding, because python does unicode just fine\n\n- Switched on namespace handling for XML input\n\n\n1.0.0a5 (2018-04-11)\n--------------------\n\n- Brownbag release to make up for bad previous ones.\n\n1.0.0a2 (2018-04-11)\n--------------------\n\n- Temporary disabling of encoding text (hopefully permanent).\n\n- Reverted bug fix: Do not remove newlines from text while parsing\n  the XML.\n\n\n1.0.0a1 (2018-04-10)\n--------------------\n\n- Bug: Fix a off-by-one issue with `insert-after` action.\n\n- Bug: Do not rename children on text node updates.\n\n- Bug: Text moves were not recorded as part of the fmes edit script.\n\n- Remove only partially implemented xmlrev script.\n\n- Removed support for xupdate, which never became a standard.\n\n- Removed deprecated ezs optional algorithm.\n\n- Removed support for Debian and RedHat packaging.\n\n- Removed Windows support\n\n- LOTS of package cleanup (setup.py, MANIFEST, proper console script, etc)\n\n- tests moved to py.test and cleaned, added tox, travis, coverage support\n\n\n0.6.10 (2010-08-27)\n-------------------\n\n- apply Daiki Ueno patch: fails when comparing minimal trees on i386\n\n\n0.6.9 (2009-04-02)\n------------------\n\n- Fixed xmldiff-xmlrev compilation error\n\n\n0.6.8 (2006-06-15)\n------------------\n\n- Fixed 64bit cleanness issues\n\n\n0.6.7 (2005-05-04)\n------------------\n\n- WARNING: xmldiff is no longer a logilab subpackage. Users may have to\n  manually remove the old logilab/xmldiff directory.\n\n- fixed debian bug #275750, also reported by Christopher R Newman on the\n  xml-projects mailing list\n\n- fixed --profile option, wrap function from maplookup when profiling so that\n  they appear in the profile information\n\n- fixed setup.py to ignore the xmlrev shell script under windows platforms\n\n- small improvements (remove recursion in object.py, minor enhancement in\n  mydifflib.py, rewrite of lcs4 in C)\n\n\n0.6.6 (2004-12-23)\n------------------\n\n- Applied patch by Bastian Kleineidam  which\n\n  - corrects the typo in  ML_DIR\n\n  - fixes the TMPFILE_XSLT/TMPFILE_XSL typo\n\n  - makes sure the files are XML or SGML files, else prints an error\n\n  - adds various missing quotes around filenames which could have\n    spaces or begin with a hyphen\n\n  - fixes typos in the usage() function\n\n  Thanks a lot, Bastian.\n\n- Fixed some problems in the xmlrev.xslt stylesheet\n\n- Fixed problems in xmlrev caused by the exit status of xmldiff when\n  successful\n\n- Added a man page for xmldiff and xmlrev\n\n\n0.6.5 (2004-09-02)\n------------------\n\n- xmlrev bugfixes\n\n- Fixed packaging problems (missing xsl stylesheets and MANIFEST file)\n\n\n0.6.4 (2003-10-02)\n------------------\n\n- fix recursive mode\n\n- rewrite regression test, add test for the recursive mode\n\n- add --help option to xlmrev\n\n- packaging fixes\n\n- turn API.txt and HELP.txt to correct ReST\n\n\n0.6.3 (2002-11-06)\n------------------\n\n- fix wrong xpath for attributes\n\n- fix bug with temporary duplicate attribute node\n\n- fix for xupdate\n\n- fix ext_pes option bug\n\n- update changelog to new format\n\n\n0.6.2 (2002-09-23)\n------------------\n\n- return number of differences on command line\n\n- reintroduce misc.list_print which caused recursive mode\n  to fail\n\n- use psyco if available (http://psyco.sf.net)\n\n- little changes in C extension\n\n\n0.6.1 (2002-08-29)\n------------------\n\n- fix packaging problems\n\n\n0.6.0 (2002-08-23)\n------------------\n\n- change of the internal representation\n\n- remove support for the EZS algorithm (no more maintened\n  for the moment)\n\n- add command line options to parse html and to control\n  entities inclusion and output encoding\n\n- fixing coalescing text nodes bug\n\n- many other bugs fixes\n\n- great speed improvement\n\n\n0.5.3 (2002-01-31)\n------------------\n\n- add __init__.py in \"logilab\" directory\n\n\n0.5.2 (2001-10-29)\n------------------\n\n- bug fixes in xupdate formatting and in the dom interface.\n\n\n0.5.1 (2001-09-07)\n------------------\n\n- Fast Match / Edit Scritp algorithm, now fully usable\n\n- fixes Unicode problem\n\n\n0.2.1 (2001-08-10)\n------------------\n\n- bug fixes, optimizations for ezs algorithm\n\n\n0.1.1 (2001-08-04)\n------------------\n\n- original revision","description_content_type":"","docs_url":null,"download_url":"","downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"home_page":"https://github.com/Shoobx/xmldiff","keywords":"xml,diff,xmldiff,tree 2 tree","license":"LGPL","maintainer":"","maintainer_email":"","name":"xmldiff","package_url":"https://pypi.org/project/xmldiff/","platform":"","project_url":"https://pypi.org/project/xmldiff/","project_urls":{"Homepage":"https://github.com/Shoobx/xmldiff"},"release_url":"https://pypi.org/project/xmldiff/1.1.0/","requires_dist":null,"requires_python":"","python_requires": ">=2.7","summary":"Tree 2 tree correction between xml documents. Extract differences between two xml files. It returns a set of primitives to apply on source tree to obtain the destination tree.","version":"1.1.0","yanked":false,"yanked_reason":null},"last_serial":5948813,"releases":{"0.6.10":[{"comment_text":"","digests":{"md5":"9ab11f838f7e0b1dcadc94bb81eb1539","sha256":"edeb13ae5d2cc1de72b58bc989f10dc006db5acc19d42f4b05309b14bc99bbe0"},"downloads":-1,"filename":"xmldiff-0.6.10.zip","has_sig":false,"md5_digest":"9ab11f838f7e0b1dcadc94bb81eb1539","packagetype":"sdist","python_version":"source","requires_python":null,"size":44447,"upload_time":"2015-04-02T16:07:22","upload_time_iso_8601":"2015-04-02T16:07:22.450850Z","url":"https://files.pythonhosted.org/packages/01/5c/e10197f6b699497bbbb32baa73a7b85b4be4f0117c8dae3d525ff5451987/xmldiff-0.6.10.zip","yanked":false,"yanked_reason":null}],"0.6.4":[{"comment_text":"","digests":{"md5":"65c173fb5adcdce1008ab3a9a39ae6bd","sha256":"678042e7d8fc249f6ae78bc5f26847b1da7705ec887dce63e01a2348bfab0664"},"downloads":-1,"filename":"xmldiff-0.6.4.tar.gz","has_sig":false,"md5_digest":"65c173fb5adcdce1008ab3a9a39ae6bd","packagetype":"sdist","python_version":"source","requires_python":null,"size":28540,"upload_time":"2015-04-02T15:37:18","upload_time_iso_8601":"2015-04-02T15:37:18.791051Z","url":"https://files.pythonhosted.org/packages/78/be/25e4c3b6e295205adcc102c72d3c182366e9adc0a42c9c641b14a710dc3c/xmldiff-0.6.4.tar.gz","yanked":false,"yanked_reason":null}],"0.6.6":[{"comment_text":"","digests":{"md5":"b4461fcf85dbcef9d2dc3f712445f1ae","sha256":"a1d4f928c955d072afcf86bc5d67e1d901a4825fc028f05a30e957693f8369ec"},"downloads":-1,"filename":"xmldiff-0.6.6.tar.gz","has_sig":false,"md5_digest":"b4461fcf85dbcef9d2dc3f712445f1ae","packagetype":"sdist","python_version":"source","requires_python":null,"size":30589,"upload_time":"2015-04-02T15:34:58","upload_time_iso_8601":"2015-04-02T15:34:58.448942Z","url":"https://files.pythonhosted.org/packages/b0/77/222543b1aa3687f4ded31948019a61ffc0e6e1713e5c7116d32a434663ff/xmldiff-0.6.6.tar.gz","yanked":false,"yanked_reason":null}],"0.6.7":[{"comment_text":"","digests":{"md5":"495afb1b4e059af9099ca90cd619e0d3","sha256":"8fa3dce3f000ed5ac97023b4a2d4e0d4aa3cd1db3885c6d0480e63617a5073d9"},"downloads":-1,"filename":"xmldiff-0.6.7.zip","has_sig":false,"md5_digest":"495afb1b4e059af9099ca90cd619e0d3","packagetype":"sdist","python_version":"source","requires_python":null,"size":44737,"upload_time":"2015-04-02T16:06:22","upload_time_iso_8601":"2015-04-02T16:06:22.122578Z","url":"https://files.pythonhosted.org/packages/2a/c1/1a009a72a524974480996e572cdad6eee1fb9c5c51c291111b1b8e240623/xmldiff-0.6.7.zip","yanked":false,"yanked_reason":null}],"0.6.8":[{"comment_text":"","digests":{"md5":"02a6192bb2bb4196077fcf66aaf67129","sha256":"7e2d1e13a991dc490d0ea70b13528b78f6a7e44d0317536d1f54950a90ae8525"},"downloads":-1,"filename":"xmldiff-0.6.8.zip","has_sig":false,"md5_digest":"02a6192bb2bb4196077fcf66aaf67129","packagetype":"sdist","python_version":"source","requires_python":null,"size":44988,"upload_time":"2015-04-02T16:06:45","upload_time_iso_8601":"2015-04-02T16:06:45.550281Z","url":"https://files.pythonhosted.org/packages/01/eb/4395ef31da4129fc1ade423d0728aee0865f85b1dc5cc58d083d805cd220/xmldiff-0.6.8.zip","yanked":false,"yanked_reason":null}],"0.6.9":[{"comment_text":"","digests":{"md5":"57b6b3f0e3c21163744b1abede196749","sha256":"7ea0451330d9e57633c0ae389cedcf30efc3925ab0c2763563bb28c558b47981"},"downloads":-1,"filename":"xmldiff-0.6.9.zip","has_sig":false,"md5_digest":"57b6b3f0e3c21163744b1abede196749","packagetype":"sdist","python_version":"source","requires_python":null,"size":44179,"upload_time":"2015-04-02T16:07:07","upload_time_iso_8601":"2015-04-02T16:07:07.388937Z","url":"https://files.pythonhosted.org/packages/bb/db/df65a8a5a09aa6fd391c2e52edf3d4ab75396f961e36a425aadc3a50dc75/xmldiff-0.6.9.zip","yanked":false,"yanked_reason":null}],"1.0.0":[{"comment_text":"","digests":{"md5":"3d7c20a999963b8f3d8651bb8a18f577","sha256":"81394752277427af4e3783846716a4780d4100724628668e6153eb3c899fa01d"},"downloads":-1,"filename":"xmldiff-1.0.0.tar.gz","has_sig":false,"md5_digest":"3d7c20a999963b8f3d8651bb8a18f577","packagetype":"sdist","python_version":"source","requires_python":null,"size":39642,"upload_time":"2018-04-13T13:22:51","upload_time_iso_8601":"2018-04-13T13:22:51.840164Z","url":"https://files.pythonhosted.org/packages/6b/d3/376909843cdb112f0ce50173fbcfcd9204efde27e1797de99706c95cde55/xmldiff-1.0.0.tar.gz","yanked":false,"yanked_reason":null}],"1.0.0a1":[{"comment_text":"","digests":{"md5":"669a8bc7160c3de61b6f8a9f4005ae53","sha256":"e882b8fb68e07c5e483b9b1395b41324ca46632c5875c61e725e8bdb9a0b97e9"},"downloads":-1,"filename":"xmldiff-1.0.0a1.tar.gz","has_sig":false,"md5_digest":"669a8bc7160c3de61b6f8a9f4005ae53","packagetype":"sdist","python_version":"source","requires_python":null,"size":37723,"upload_time":"2018-04-10T13:22:53","upload_time_iso_8601":"2018-04-10T13:22:53.589597Z","url":"https://files.pythonhosted.org/packages/5d/f3/b3de2527aaeb8d5d8c4c9c8b49fa5fb9b30463c3568fdb04c4891010d3d4/xmldiff-1.0.0a1.tar.gz","yanked":false,"yanked_reason":null}],"1.0.0a2":[{"comment_text":"","digests":{"md5":"8ca07eb4bbb09cce4b07b64e56c7d7d6","sha256":"8bb91f15ecd2a0efa11bcaf8be013df16629af7ab0c909ca4ff1330d0aacae73"},"downloads":-1,"filename":"xmldiff-1.0.0a2.tar.gz","has_sig":false,"md5_digest":"8ca07eb4bbb09cce4b07b64e56c7d7d6","packagetype":"sdist","python_version":"source","requires_python":null,"size":36836,"upload_time":"2018-04-10T15:48:43","upload_time_iso_8601":"2018-04-10T15:48:43.658000Z","url":"https://files.pythonhosted.org/packages/8b/22/88e32c7999c85a6aa97b2c36e4b366bd5e6631f03c14988124b93564bdb1/xmldiff-1.0.0a2.tar.gz","yanked":false,"yanked_reason":null}],"1.0.0a3.dev0":[{"comment_text":"","digests":{"md5":"65c035101c40d30dc0838acaa135ec41","sha256":"79a4955f3585dc8f05d07494a2a35ad41fe26192e831b6fbd062188226bd42f6"},"downloads":-1,"filename":"xmldiff-1.0.0a3.dev0.tar.gz","has_sig":false,"md5_digest":"65c035101c40d30dc0838acaa135ec41","packagetype":"sdist","python_version":"source","requires_python":null,"size":36846,"upload_time":"2018-04-10T15:56:31","upload_time_iso_8601":"2018-04-10T15:56:31.070448Z","url":"https://files.pythonhosted.org/packages/80/70/df743f6777b4a43689aaa6dfad3f8ca96c041d4f959607cb067e7903019a/xmldiff-1.0.0a3.dev0.tar.gz","yanked":false,"yanked_reason":null}],"1.0.0a4.dev0":[{"comment_text":"","digests":{"md5":"f5034450dcd8df3abe0759a62251bc65","sha256":"2ee7f0f4a86e68e537d77e6922ebc79bb3bb1b316c3a7c2e50bc8f61774ca506"},"downloads":-1,"filename":"xmldiff-1.0.0a4.dev0.tar.gz","has_sig":false,"md5_digest":"f5034450dcd8df3abe0759a62251bc65","packagetype":"sdist","python_version":"source","requires_python":null,"size":36899,"upload_time":"2018-04-10T16:02:36","upload_time_iso_8601":"2018-04-10T16:02:36.150652Z","url":"https://files.pythonhosted.org/packages/02/80/86b6e9a5fc6267e1e945734228073a42f40398ff78537d1e17c0f6f11b93/xmldiff-1.0.0a4.dev0.tar.gz","yanked":false,"yanked_reason":null}],"1.0.0a5":[{"comment_text":"","digests":{"md5":"19bbc60ebbf9d290069649f1e24e7d55","sha256":"5a38bc0e7a5daf89c0a960643fcdabbd8b24b0913c94ff1ef0de06321b4bdbbd"},"downloads":-1,"filename":"xmldiff-1.0.0a5.tar.gz","has_sig":false,"md5_digest":"19bbc60ebbf9d290069649f1e24e7d55","packagetype":"sdist","python_version":"source","requires_python":null,"size":37417,"upload_time":"2018-04-11T13:02:26","upload_time_iso_8601":"2018-04-11T13:02:26.425291Z","url":"https://files.pythonhosted.org/packages/0a/e7/d0889a2a39d214ca883873fa1547eda0672b1ef2bd6d7f5d1bb8bb1e3351/xmldiff-1.0.0a5.tar.gz","yanked":false,"yanked_reason":null}],"1.0.0a6":[{"comment_text":"","digests":{"md5":"1785ee59afdf2ff4c634276f33767302","sha256":"02a3ce91aa39a42146e7dae240cb16a6da529f8c725e53939afe1df736ea4475"},"downloads":-1,"filename":"xmldiff-1.0.0a6.tar.gz","has_sig":false,"md5_digest":"1785ee59afdf2ff4c634276f33767302","packagetype":"sdist","python_version":"source","requires_python":null,"size":38050,"upload_time":"2018-04-12T12:48:52","upload_time_iso_8601":"2018-04-12T12:48:52.719912Z","url":"https://files.pythonhosted.org/packages/4e/b4/50f65f8e77da28899e31945ae5719535e9a9e67bea961ecfba77c39399fe/xmldiff-1.0.0a6.tar.gz","yanked":false,"yanked_reason":null}],"1.1.0":[{"comment_text":"","digests":{"md5":"ee08b66cae5d77364f6deee252638b3b","sha256":"462c76c145403eb5e9a8358dc402a53b264ab202ebabf83cdc660ed2cf72c89b"},"downloads":-1,"filename":"xmldiff-1.1.0.tar.gz","has_sig":false,"md5_digest":"ee08b66cae5d77364f6deee252638b3b","packagetype":"sdist","python_version":"source","requires_python":null,"size":39258,"upload_time":"2018-06-15T12:24:36","upload_time_iso_8601":"2018-06-15T12:24:36.191454Z","url":"https://files.pythonhosted.org/packages/ab/4a/cab33ec593f433b7cded3cec85d1f7c900261fd503bd894e16782f7c0d09/xmldiff-1.1.0.tar.gz","yanked":false,"yanked_reason":null}],"1.1.1":[{"comment_text":"","digests":{"md5":"dd17d5d775b9433df64513265502cdb8","sha256":"b8dc6c36a3499e752cf5b5d2704d961be37fcf2ea5be2e4187572e18f674d053"},"downloads":-1,"filename":"xmldiff-1.1.1.tar.gz","has_sig":false,"md5_digest":"dd17d5d775b9433df64513265502cdb8","packagetype":"sdist","python_version":"source","requires_python":null,"size":39523,"upload_time":"2018-06-20T18:38:14","upload_time_iso_8601":"2018-06-20T18:38:14.221847Z","url":"https://files.pythonhosted.org/packages/35/cc/ae210f70dac681a7566f25f43740a0cbdc53a77e23684f7b9b1d71e4d918/xmldiff-1.1.1.tar.gz","yanked":false,"yanked_reason":null}],"2.0":[{"comment_text":"","digests":{"md5":"dacf1d5fe5e94e0b656e8985e2e81faa","sha256":"31f83117e38d78670e1994e7160b1463adb04ffa34ff267700b2ca61bada5e57"},"downloads":-1,"filename":"xmldiff-2.0-py2.py3-none-any.whl","has_sig":false,"md5_digest":"dacf1d5fe5e94e0b656e8985e2e81faa","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":55479,"upload_time":"2018-09-25T07:05:49","upload_time_iso_8601":"2018-09-25T07:05:49.423913Z","url":"https://files.pythonhosted.org/packages/ce/dc/7caf3ada02afcab68c7330c207f0b05b54dd5ef6ac96fb18e2fa85f1038a/xmldiff-2.0-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"982c288a450198b414363a9388631c26","sha256":"221733cfbfafff1d90756834f1f2bc8a3cfa097a57ad6ab11e83db308c1b486e"},"downloads":-1,"filename":"xmldiff-2.0.tar.gz","has_sig":false,"md5_digest":"982c288a450198b414363a9388631c26","packagetype":"sdist","python_version":"source","requires_python":null,"size":86965,"upload_time":"2018-09-25T07:05:51","upload_time_iso_8601":"2018-09-25T07:05:51.301648Z","url":"https://files.pythonhosted.org/packages/41/80/5c6ef6fc423fb7902cc7fe6d5784545559d11dc157b1dbe50de59192bd08/xmldiff-2.0.tar.gz","yanked":false,"yanked_reason":null}],"2.0b1":[{"comment_text":"","digests":{"md5":"0003996e2c8b62541743c80f1367925f","sha256":"9a15649073d795f2a742f0c46f44ebc732727ae201cf92e796ffb7b31eaebf59"},"downloads":-1,"filename":"xmldiff-2.0b1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"0003996e2c8b62541743c80f1367925f","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":53036,"upload_time":"2018-09-03T12:49:24","upload_time_iso_8601":"2018-09-03T12:49:24.676079Z","url":"https://files.pythonhosted.org/packages/65/35/0820f8a49e5812dbcdb2aee651f19df8bf7c67d379e449699ed4ede5df51/xmldiff-2.0b1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"5f60ea9a2bc0109d1828ae753c332ed2","sha256":"173ad39aa5c95e9deeb563e94174c944ffd814441b2587f5645f0119c192220c"},"downloads":-1,"filename":"xmldiff-2.0b1.tar.gz","has_sig":false,"md5_digest":"5f60ea9a2bc0109d1828ae753c332ed2","packagetype":"sdist","python_version":"source","requires_python":null,"size":70341,"upload_time":"2018-09-03T12:49:27","upload_time_iso_8601":"2018-09-03T12:49:27.080969Z","url":"https://files.pythonhosted.org/packages/54/45/006a8a3068f261dfbb543e4a4905ea1495a9deaa6b880af881e7112fe590/xmldiff-2.0b1.tar.gz","yanked":false,"yanked_reason":null}],"2.0b2":[{"comment_text":"","digests":{"md5":"e2431ed70e7c940e72b065b3c2fc4d66","sha256":"0ea1eabb994a10160cdeb3b3a93e80e09191bc971ddf10213ec4618e890a79a1"},"downloads":-1,"filename":"xmldiff-2.0b2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"e2431ed70e7c940e72b065b3c2fc4d66","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":53862,"upload_time":"2018-09-06T14:41:53","upload_time_iso_8601":"2018-09-06T14:41:53.157424Z","url":"https://files.pythonhosted.org/packages/10/db/b5e9c37e5e66e86b5f87220db5e18d4f6b79f5b57037fcb251ca1116d9d0/xmldiff-2.0b2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"0199ffb374b5378b5b3f03b23008ee31","sha256":"4d95ddf206f4c440fcace43c0a9f4d26fb704b1fd5087c6c9b903e04a008bf05"},"downloads":-1,"filename":"xmldiff-2.0b2.tar.gz","has_sig":false,"md5_digest":"0199ffb374b5378b5b3f03b23008ee31","packagetype":"sdist","python_version":"source","requires_python":null,"size":85397,"upload_time":"2018-09-06T14:41:55","upload_time_iso_8601":"2018-09-06T14:41:55.709235Z","url":"https://files.pythonhosted.org/packages/e6/ec/5c92cdd29d86e05b0938c56af54e06962a822689c5c70b5fa4eba727d799/xmldiff-2.0b2.tar.gz","yanked":false,"yanked_reason":null}],"2.0b3":[{"comment_text":"","digests":{"md5":"810ffd544e5de013bbc0ad49258d017c","sha256":"a7c2efc42f6b2e47af36d905521a0e97c5f469d3d8c4243b87db9281c056c5de"},"downloads":-1,"filename":"xmldiff-2.0b3-py2.py3-none-any.whl","has_sig":false,"md5_digest":"810ffd544e5de013bbc0ad49258d017c","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":54110,"upload_time":"2018-09-11T19:48:45","upload_time_iso_8601":"2018-09-11T19:48:45.470945Z","url":"https://files.pythonhosted.org/packages/0a/0c/fa7d475d3be9c376bb46fa7d0db1f70ee7cbce8d7328de750d06c72c1f8a/xmldiff-2.0b3-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"116600a8ebf81955bbdde9716dcb8a70","sha256":"77e234d9e9e2f274e9bd86380f2fd0bb58ad3071278ab4c9df801ff54caead01"},"downloads":-1,"filename":"xmldiff-2.0b3.tar.gz","has_sig":false,"md5_digest":"116600a8ebf81955bbdde9716dcb8a70","packagetype":"sdist","python_version":"source","requires_python":null,"size":85573,"upload_time":"2018-09-11T19:48:47","upload_time_iso_8601":"2018-09-11T19:48:47.787379Z","url":"https://files.pythonhosted.org/packages/a7/2d/22d2e86b795f85aa80676c7668a5e375b44d3239664d72b0b1c32e7291ed/xmldiff-2.0b3.tar.gz","yanked":false,"yanked_reason":null}],"2.0b4":[{"comment_text":"","digests":{"md5":"e238130940a149c44927e30216bc0f74","sha256":"88ba6fb733677579a9bd6b1b1e99808d47d17ba20038075f8731ee12d40efb41"},"downloads":-1,"filename":"xmldiff-2.0b4-py2.py3-none-any.whl","has_sig":false,"md5_digest":"e238130940a149c44927e30216bc0f74","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":54166,"upload_time":"2018-09-12T12:58:38","upload_time_iso_8601":"2018-09-12T12:58:38.798219Z","url":"https://files.pythonhosted.org/packages/f2/99/891565815619416a411b6a43dca887c575035c0dd2da374e7c87df5d9263/xmldiff-2.0b4-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"14f8369167928c97140e55af20438d95","sha256":"63bdf6265dac0213e71001b03c81171b7fb1bf2fab06cd0ea8c9d2ffd4c0cd0c"},"downloads":-1,"filename":"xmldiff-2.0b4.tar.gz","has_sig":false,"md5_digest":"14f8369167928c97140e55af20438d95","packagetype":"sdist","python_version":"source","requires_python":null,"size":87043,"upload_time":"2018-09-12T12:58:41","upload_time_iso_8601":"2018-09-12T12:58:41.083128Z","url":"https://files.pythonhosted.org/packages/eb/ca/24ff95b2da5a77f167e2113b6861f879f04629a5b1834ca221b790b36481/xmldiff-2.0b4.tar.gz","yanked":false,"yanked_reason":null}],"2.0b5":[{"comment_text":"","digests":{"md5":"8660d1531dda6f79bd48a49fbf3d5888","sha256":"01b00bcf84e8f9692215ef1f3d4cb350d076add26b70f29e4f31ac85e5f66a28"},"downloads":-1,"filename":"xmldiff-2.0b5-py2.py3-none-any.whl","has_sig":false,"md5_digest":"8660d1531dda6f79bd48a49fbf3d5888","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":54240,"upload_time":"2018-09-13T19:12:05","upload_time_iso_8601":"2018-09-13T19:12:05.832300Z","url":"https://files.pythonhosted.org/packages/ac/69/3a53d4aeb73dc20d140bdab53036572706e4cfc063d58d43cb73264b86ed/xmldiff-2.0b5-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"c8a97de8115ab5ee9c0d5e1f70ed9060","sha256":"308bff344aed37aa04aae552e9d54d0d8ba625386bd5b8817282ef75c66de407"},"downloads":-1,"filename":"xmldiff-2.0b5.tar.gz","has_sig":false,"md5_digest":"c8a97de8115ab5ee9c0d5e1f70ed9060","packagetype":"sdist","python_version":"source","requires_python":null,"size":87210,"upload_time":"2018-09-13T19:12:09","upload_time_iso_8601":"2018-09-13T19:12:09.026887Z","url":"https://files.pythonhosted.org/packages/55/83/cbd13288511af6f8c55ea340935cf17b244c485f6f776214fbc6bc41d7c4/xmldiff-2.0b5.tar.gz","yanked":false,"yanked_reason":null}],"2.0b6":[{"comment_text":"","digests":{"md5":"6e64c656bd3b495bc2d9f357c6f8901f","sha256":"9e6d41a6ebfe71a90a288ea7f3a5c8efa2b7fe313c3e1aa026fa97f345e07745"},"downloads":-1,"filename":"xmldiff-2.0b6-py2.py3-none-any.whl","has_sig":false,"md5_digest":"6e64c656bd3b495bc2d9f357c6f8901f","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":55113,"upload_time":"2018-09-13T19:14:55","upload_time_iso_8601":"2018-09-13T19:14:55.356378Z","url":"https://files.pythonhosted.org/packages/aa/39/115e4fa64aebf2c57a71c29c53740504f658b1447650a1473edb0c3ebb00/xmldiff-2.0b6-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"5c2d8fafcf16fd0fa9220da91205f696","sha256":"fa4cb24351e678dd56c9b46350cd54b1f39209e03517532a5e8fa8db9adbda56"},"downloads":-1,"filename":"xmldiff-2.0b6.tar.gz","has_sig":false,"md5_digest":"5c2d8fafcf16fd0fa9220da91205f696","packagetype":"sdist","python_version":"source","requires_python":null,"size":88205,"upload_time":"2018-09-13T19:14:58","upload_time_iso_8601":"2018-09-13T19:14:58.034821Z","url":"https://files.pythonhosted.org/packages/2c/59/c47466d69a1293a7e1587a8af04d15c875415967527e9be6b4241723d96b/xmldiff-2.0b6.tar.gz","yanked":false,"yanked_reason":null}],"2.0b7":[{"comment_text":"","digests":{"md5":"7c1beaed9081f6dca0cce01ab4957c6b","sha256":"8dbfdf93bd9d91c07ab5494d316c6083c3d71f673fd66ba497ce2b6a2011dd18"},"downloads":-1,"filename":"xmldiff-2.0b7-py2.py3-none-any.whl","has_sig":false,"md5_digest":"7c1beaed9081f6dca0cce01ab4957c6b","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":56045,"upload_time":"2018-09-14T13:31:42","upload_time_iso_8601":"2018-09-14T13:31:42.874915Z","url":"https://files.pythonhosted.org/packages/bc/6c/e71ecb88f2308d7528c687ce2982fa4dba85cdaa9ac46604af59d844ace7/xmldiff-2.0b7-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"bdc27299ae90128c3bbee2f833be2171","sha256":"e6ba88f2c2b8329d62b3aadfcb30dd782497087759673257e0f688df728a1694"},"downloads":-1,"filename":"xmldiff-2.0b7.tar.gz","has_sig":false,"md5_digest":"bdc27299ae90128c3bbee2f833be2171","packagetype":"sdist","python_version":"source","requires_python":null,"size":89558,"upload_time":"2018-09-14T13:31:45","upload_time_iso_8601":"2018-09-14T13:31:45.969375Z","url":"https://files.pythonhosted.org/packages/4b/7a/349fde975c7b6b7331da2542d0e2cf9f0b7d30054bb5684d94d90f48e12b/xmldiff-2.0b7.tar.gz","yanked":false,"yanked_reason":null}],"2.0rc1":[{"comment_text":"","digests":{"md5":"ff0d9ff18f6ad6b6951aa7f933782280","sha256":"582270dc62708af5ee2b649abde1ee1d6f0374f642f6b0b8771e203f2d4922ed"},"downloads":-1,"filename":"xmldiff-2.0rc1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"ff0d9ff18f6ad6b6951aa7f933782280","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":56194,"upload_time":"2018-09-24T20:19:16","upload_time_iso_8601":"2018-09-24T20:19:16.377778Z","url":"https://files.pythonhosted.org/packages/e6/55/1c65e555d1e952644428da85662ef9c0448becfae5487ab321048b57d339/xmldiff-2.0rc1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"eaef8d536ee4faedb15b5b6e77c84378","sha256":"e6044d6cf2bb283ad72e7fae3200d275950cbdc7245751c62c51c3a6b12391d6"},"downloads":-1,"filename":"xmldiff-2.0rc1.tar.gz","has_sig":false,"md5_digest":"eaef8d536ee4faedb15b5b6e77c84378","packagetype":"sdist","python_version":"source","requires_python":null,"size":87563,"upload_time":"2018-09-24T20:19:18","upload_time_iso_8601":"2018-09-24T20:19:18.508231Z","url":"https://files.pythonhosted.org/packages/1f/f3/31351b897f110ac00cb5a13b0ea4ca5f272602ee0db46f0f810d8a1baa69/xmldiff-2.0rc1.tar.gz","yanked":false,"yanked_reason":null}],"2.1":[{"comment_text":"","digests":{"md5":"4881924e6245797451bd27c644d5b569","sha256":"62aed6f2d1779a7f934454a897c61a1bc704f7f04d6fb533e6bfe54c17d22224"},"downloads":-1,"filename":"xmldiff-2.1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"4881924e6245797451bd27c644d5b569","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":57198,"upload_time":"2018-10-03T11:05:00","upload_time_iso_8601":"2018-10-03T11:05:00.909986Z","url":"https://files.pythonhosted.org/packages/27/23/91f3184390c709be6ce9419f2dd4e6b5bb2fd1b7a06579ea1625f8898d0b/xmldiff-2.1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"cc6b38495b180f0d1d852dd1794fef42","sha256":"528aaeff5b12aa7c1fe5909111fd7b46c14bf25f1a5ed759d6b422d45f10b40c"},"downloads":-1,"filename":"xmldiff-2.1.tar.gz","has_sig":false,"md5_digest":"cc6b38495b180f0d1d852dd1794fef42","packagetype":"sdist","python_version":"source","requires_python":null,"size":91935,"upload_time":"2018-10-03T11:05:03","upload_time_iso_8601":"2018-10-03T11:05:03.023229Z","url":"https://files.pythonhosted.org/packages/65/57/604980e6223c09e8b428c128d480ae516548f7d2bd8ad580e72f2b5dfc09/xmldiff-2.1.tar.gz","yanked":false,"yanked_reason":null}],"2.1b1":[{"comment_text":"","digests":{"md5":"3fb0bd3f94cce78d9fdf8838c8aa0313","sha256":"d58675740ed81b6f1397f3adb1fa30cc92d47a96a9e000c0b636772a20ea307c"},"downloads":-1,"filename":"xmldiff-2.1b1-py2.py3-none-any.whl","has_sig":false,"md5_digest":"3fb0bd3f94cce78d9fdf8838c8aa0313","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":56695,"upload_time":"2018-10-01T19:58:52","upload_time_iso_8601":"2018-10-01T19:58:52.535754Z","url":"https://files.pythonhosted.org/packages/a6/5a/ca949df720ed4e8754c61137c0f073452954ff32b2f50791f4a4fdc0e77a/xmldiff-2.1b1-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"a300ab4179a1b744a80d69d02997a453","sha256":"3e7180b09ad27439c295d022be6ef45e8aa3bdd00681b9556afbc8617cb31917"},"downloads":-1,"filename":"xmldiff-2.1b1.tar.gz","has_sig":false,"md5_digest":"a300ab4179a1b744a80d69d02997a453","packagetype":"sdist","python_version":"source","requires_python":null,"size":90728,"upload_time":"2018-10-01T19:58:54","upload_time_iso_8601":"2018-10-01T19:58:54.596506Z","url":"https://files.pythonhosted.org/packages/46/69/30fa7d24f48e0f77fcd4f3c811dc72127b997bb8149488123890bfb42baf/xmldiff-2.1b1.tar.gz","yanked":false,"yanked_reason":null}],"2.2":[{"comment_text":"","digests":{"md5":"381ae9b409adc01109fb4f48a15353e6","sha256":"35e688c7295ce389641bce37cd92fc3482d7d67874a67a9d0cc61a9ccc0f20ac"},"downloads":-1,"filename":"xmldiff-2.2-py2.py3-none-any.whl","has_sig":false,"md5_digest":"381ae9b409adc01109fb4f48a15353e6","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":57344,"upload_time":"2018-10-12T16:21:34","upload_time_iso_8601":"2018-10-12T16:21:34.840456Z","url":"https://files.pythonhosted.org/packages/15/b5/3e4434f95cf68e1acb398dd9c596d07cc881c2fa45ab78659689615989d1/xmldiff-2.2-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"4c5811798dbb0164e075e4026d410633","sha256":"aad7b8b00a49eeef7cd69757b2c548b88d4d7c584b95ac4ea9c0f08e167bc5a0"},"downloads":-1,"filename":"xmldiff-2.2.tar.gz","has_sig":false,"md5_digest":"4c5811798dbb0164e075e4026d410633","packagetype":"sdist","python_version":"source","requires_python":null,"size":92135,"upload_time":"2018-10-12T16:21:36","upload_time_iso_8601":"2018-10-12T16:21:36.870458Z","url":"https://files.pythonhosted.org/packages/46/20/041ec087b8288b86aa71cea6f89c9aed9fc931d543d620d383556f646366/xmldiff-2.2.tar.gz","yanked":false,"yanked_reason":null}],"2.3":[{"comment_text":"","digests":{"md5":"44c51fb9141dc9c2cb2d4a4bdbcc1acb","sha256":"4930ac8c01c5b5c94ae24ee5d26e42d537a3281291b06928529bb97cc11844e8"},"downloads":-1,"filename":"xmldiff-2.3-py2.py3-none-any.whl","has_sig":false,"md5_digest":"44c51fb9141dc9c2cb2d4a4bdbcc1acb","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":59466,"upload_time":"2019-02-27T11:49:48","upload_time_iso_8601":"2019-02-27T11:49:48.609906Z","url":"https://files.pythonhosted.org/packages/ff/37/ed2d26f5f196b6db5a7a53de1ab96c961ab0c0e42d7677ea302cc817ed7f/xmldiff-2.3-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"0510299dba157df2cbfea40426465bf5","sha256":"2727f62ab590c1fc834e86033988a76a86a67f5a78196584049b7a722bd94466"},"downloads":-1,"filename":"xmldiff-2.3.tar.gz","has_sig":false,"md5_digest":"0510299dba157df2cbfea40426465bf5","packagetype":"sdist","python_version":"source","requires_python":null,"size":95947,"upload_time":"2019-02-27T11:49:51","upload_time_iso_8601":"2019-02-27T11:49:51.261375Z","url":"https://files.pythonhosted.org/packages/e6/1c/3dd86bec66fad3a21ac9d093610f83f6e20ad1d835ebf4079af53e65ed6b/xmldiff-2.3.tar.gz","yanked":false,"yanked_reason":null}],"2.4":[{"comment_text":"","digests":{"md5":"d676c724f7e13838edd8a7dcc8cbe3e7","sha256":"213c2f4c39ed71811a9ceeec1c8bdf2e673e5527261ea11708b3acfa6c2bdb00"},"downloads":-1,"filename":"xmldiff-2.4-py2.py3-none-any.whl","has_sig":false,"md5_digest":"d676c724f7e13838edd8a7dcc8cbe3e7","packagetype":"bdist_wheel","python_version":"py2.py3","requires_python":null,"size":57463,"upload_time":"2019-10-09T09:41:14","upload_time_iso_8601":"2019-10-09T09:41:14.821316Z","url":"https://files.pythonhosted.org/packages/36/95/7d9271ae617b6c448fa244b347e4fd43ed5ad1bb35cea282f1c0fa82ea2b/xmldiff-2.4-py2.py3-none-any.whl","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"1728f65d01c5cb1f3c3838d489a1569d","sha256":"05bea20ce1f2c9678683bcce0c3ba9981f87d92b709d190e018bcbf047eccf63"},"downloads":-1,"filename":"xmldiff-2.4.tar.gz","has_sig":false,"md5_digest":"1728f65d01c5cb1f3c3838d489a1569d","packagetype":"sdist","python_version":"source","requires_python":null,"size":94826,"upload_time":"2019-10-09T09:41:17","upload_time_iso_8601":"2019-10-09T09:41:17.883138Z","url":"https://files.pythonhosted.org/packages/76/36/a3e41bf7c01f1110d7b5589ca74d2927d3736a5b43ee63053faf3483b991/xmldiff-2.4.tar.gz","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":"","digests":{"md5":"ee08b66cae5d77364f6deee252638b3b","sha256":"462c76c145403eb5e9a8358dc402a53b264ab202ebabf83cdc660ed2cf72c89b"},"downloads":-1,"filename":"xmldiff-1.1.0.tar.gz","has_sig":false,"md5_digest":"ee08b66cae5d77364f6deee252638b3b","packagetype":"sdist","python_version":"source","requires_python":null,"size":39258,"upload_time":"2018-06-15T12:24:36","upload_time_iso_8601":"2018-06-15T12:24:36.191454Z","url":"https://files.pythonhosted.org/packages/ab/4a/cab33ec593f433b7cded3cec85d1f7c900261fd503bd894e16782f7c0d09/xmldiff-1.1.0.tar.gz","yanked":false,"yanked_reason":null}]}
pyroma-4.2/pyroma/testdata/jsondata/distribute.json000066400000000000000000002337101456340716600227040ustar00rootroot00000000000000{"info":{"author":"The fellowship of the packaging","author_email":"distutils-sig@python.org","bugtrack_url":null,"classifiers":["Development Status :: 5 - Production/Stable","Intended Audience :: Developers","License :: OSI Approved :: Python Software Foundation License","License :: OSI Approved :: Zope Public License","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Topic :: Software Development :: Libraries :: Python Modules","Topic :: System :: Archiving :: Packaging","Topic :: System :: Systems Administration","Topic :: Utilities"],"description":"===============================\nInstalling and Using Distribute\n===============================\n\n.. contents:: **Table of Contents**\n\n-----------\nDisclaimers\n-----------\n\nAbout the fork\n==============\n\n`Distribute` is a fork of the `Setuptools` project.\n\nDistribute is intended to replace Setuptools as the standard method\nfor working with Python module distributions.\n\nThe fork has two goals:\n\n- Providing a backward compatible version to replace Setuptools\n  and make all distributions that depend on Setuptools work as\n  before, but with less bugs and behaviorial issues.\n\n  This work is done in the 0.6.x series.\n\n  Starting with version 0.6.2, Distribute supports Python 3.\n  Installing and using distribute for Python 3 code works exactly\n  the same as for Python 2 code, but Distribute also helps you to support\n  Python 2 and Python 3 from the same source code by letting you run 2to3\n  on the code as a part of the build process, by setting the keyword parameter\n  ``use_2to3`` to True. See http://packages.python.org/distribute for more\n  information.\n\n- Refactoring the code, and releasing it in several distributions.\n  This work is being done in the 0.7.x series but not yet released.\n\nThe roadmap is still evolving, and the page that is up-to-date is\nlocated at : `http://packages.python.org/distribute/roadmap`.\n\nIf you install `Distribute` and want to switch back for any reason to\n`Setuptools`, get to the `Uninstallation instructions`_ section.\n\nMore documentation\n==================\n\nYou can get more information in the Sphinx-based documentation, located\nat http://packages.python.org/distribute. This documentation includes the old\nSetuptools documentation that is slowly replaced, and brand new content.\n\nAbout the installation process\n==============================\n\nThe `Distribute` installer modifies your installation by de-activating an\nexisting installation of `Setuptools` in a bootstrap process. This process\nhas been tested in various installation schemes and contexts but in case of a\nbug during this process your Python installation might be left in a broken\nstate. Since all modified files and directories are copied before the\ninstallation starts, you will be able to get back to a normal state by reading\nthe instructions in the `Uninstallation instructions`_ section.\n\nIn any case, it is recommended to save you `site-packages` directory before\nyou start the installation of `Distribute`.\n\n-------------------------\nInstallation Instructions\n-------------------------\n\nDistribute is only released as a source distribution.\n\nIt can be installed using pip, and can be done so with the source tarball,\nor by using the ``distribute_setup.py`` script provided online.\n\n``distribute_setup.py`` is the simplest and preferred way on all systems.\n\ndistribute_setup.py\n===================\n\nDownload\n`distribute_setup.py `_\nand execute it, using the Python interpreter of your choice.\n\nIf your shell has the ``curl`` program you can do::\n\n    $ curl -O http://python-distribute.org/distribute_setup.py\n    $ python distribute_setup.py\n\nNotice this file is also provided in the source release.\n\npip\n===\n\nRun easy_install or pip::\n\n    $ pip install distribute\n\nSource installation\n===================\n\nDownload the source tarball, uncompress it, then run the install command::\n\n    $ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.15.tar.gz\n    $ tar -xzvf distribute-0.6.15.tar.gz\n    $ cd distribute-0.6.15\n    $ python setup.py install\n\n---------------------------\nUninstallation Instructions\n---------------------------\n\nLike other distutils-based distributions, Distribute doesn't provide an\nuninstaller yet. It's all done manually! We are all waiting for PEP 376\nsupport in Python.\n\nDistribute is installed in three steps:\n\n1. it gets out of the way an existing installation of Setuptools\n2. it installs a `fake` setuptools installation\n3. it installs distribute\n\nDistribute can be removed like this:\n\n- remove the ``distribute*.egg`` file located in your site-packages directory\n- remove the ``setuptools.pth`` file located in you site-packages directory\n- remove the easy_install script located in you ``sys.prefix/bin`` directory\n- remove the ``setuptools*.egg`` directory located in your site-packages directory,\n  if any.\n\nIf you want to get back to setuptools:\n\n- reinstall setuptools using its instruction.\n\nLastly:\n\n- remove the *.OLD.* directory located in your site-packages directory if any,\n  **once you have checked everything was working correctly again**.\n\n-------------------------\nQuick help for developers\n-------------------------\n\nTo create an egg which is compatible with Distribute, use the same\npractice as with Setuptools, e.g.::\n\n    from setuptools import setup\n\n    setup(...\n    )\n\nTo use `pkg_resources` to access data files in the egg, you should\nrequire the Setuptools distribution explicitly::\n\n    from setuptools import setup\n\n    setup(...\n        install_requires=['setuptools']\n    )\n\nOnly if you need Distribute-specific functionality should you depend\non it explicitly. In this case, replace the Setuptools dependency::\n\n    from setuptools import setup\n\n    setup(...\n        install_requires=['distribute']\n    )\n\n-----------\nInstall FAQ\n-----------\n\n- **Why is Distribute wrapping my Setuptools installation?**\n\n   Since Distribute is a fork, and since it provides the same package\n   and modules, it renames the existing Setuptools egg and inserts a\n   new one which merely wraps the Distribute code. This way, full\n   backwards compatibility is kept for packages which rely on the\n   Setuptools modules.\n\n   At the same time, packages can meet their dependency on Setuptools\n   without actually installing it (which would disable Distribute).\n\n- **How does Distribute interact with virtualenv?**\n\n  Everytime you create a virtualenv it will install setuptools by default.\n  You either need to re-install Distribute in it right after or pass the\n  ``--distribute`` option when creating it.\n\n  Once installed, your virtualenv will use Distribute transparently.\n\n  Although, if you have Setuptools installed in your system-wide Python,\n  and if the virtualenv you are in was generated without the `--no-site-packages`\n  option, the Distribute installation will stop.\n\n  You need in this case to build a virtualenv with the `--no-site-packages`\n  option or to install `Distribute` globally.\n\n- **How does Distribute interacts with zc.buildout?**\n\n  You can use Distribute in your zc.buildout, with the --distribute option,\n  starting at zc.buildout 1.4.2::\n\n  $ python bootstrap.py --distribute\n\n  For previous zc.buildout versions, *the only thing* you need to do\n  is use the bootstrap at `http://python-distribute.org/bootstrap.py`.  Run\n  that bootstrap and ``bin/buildout`` (and all other buildout-generated\n  scripts) will transparently use distribute instead of setuptools.  You do\n  not need a specific buildout release.\n\n  A shared eggs directory is no problem (since 0.6.6): the setuptools egg is\n  left in place unmodified.  So other buildouts that do not yet use the new\n  bootstrap continue to work just fine.  And there is no need to list\n  ``distribute`` somewhere in your eggs: using the bootstrap is enough.\n\n  The source code for the bootstrap script is located at\n  `http://bitbucket.org/tarek/buildout-distribute`.\n\n\n\n-----------------------------\nFeedback and getting involved\n-----------------------------\n\n- Mailing list: http://mail.python.org/mailman/listinfo/distutils-sig\n- Issue tracker: http://bitbucket.org/tarek/distribute/issues/\n- Code Repository: http://bitbucket.org/tarek/distribute\n\n=======\nCHANGES\n=======\n\n------\n0.6.15\n------\n\n* Fixed typo in bdist_egg\n* Several issues under Python 3 has been solved.\n* Issue 146: Fixed missing DLL files after easy_install of windows exe package.\n\n------\n0.6.14\n------\n\n* Issue 170: Fixed unittest failure. Thanks to Toshio.\n* Issue 171: Fixed race condition in unittests cause deadlocks in test suite.\n* Issue 143: Fixed a lookup issue with easy_install.\n  Thanks to David and Zooko.\n* Issue 174: Fixed the edit mode when its used with setuptools itself\n\n------\n0.6.13\n------\n\n* Issue 160: 2.7 gives ValueError(\"Invalid IPv6 URL\")\n* Issue 150: Fixed using ~/.local even in a --no-site-packages virtualenv\n* Issue 163: scan index links before external links, and don't use the md5 when\n  comparing two distributions\n\n------\n0.6.12\n------\n\n* Issue 149: Fixed various failures on 2.3/2.4\n\n------\n0.6.11\n------\n\n* Found another case of SandboxViolation - fixed\n* Issue 15 and 48: Introduced a socket timeout of 15 seconds on url openings\n* Added indexsidebar.html into MANIFEST.in\n* Issue 108: Fixed TypeError with Python3.1\n* Issue 121: Fixed --help install command trying to actually install.\n* Issue 112: Added an os.makedirs so that Tarek's solution will work.\n* Issue 133: Added --no-find-links to easy_install\n* Added easy_install --user\n* Issue 100: Fixed develop --user not taking '.' in PYTHONPATH into account\n* Issue 134: removed spurious UserWarnings. Patch by VanLindberg\n* Issue 138: cant_write_to_target error when setup_requires is used.\n* Issue 147: respect the sys.dont_write_bytecode flag\n\n------\n0.6.10\n------\n\n* Reverted change made for the DistributionNotFound exception because\n  zc.buildout uses the exception message to get the name of the\n  distribution.\n\n-----\n0.6.9\n-----\n\n* Issue 90: unknown setuptools version can be added in the working set\n* Issue 87: setupt.py doesn't try to convert distribute_setup.py anymore\n  Initial Patch by arfrever.\n* Issue 89: added a side bar with a download link to the doc.\n* Issue 86: fixed missing sentence in pkg_resources doc.\n* Added a nicer error message when a DistributionNotFound is raised.\n* Issue 80: test_develop now works with Python 3.1\n* Issue 93: upload_docs now works if there is an empty sub-directory.\n* Issue 70: exec bit on non-exec files\n* Issue 99: now the standalone easy_install command doesn't uses a\n  \"setup.cfg\" if any exists in the working directory. It will use it\n  only if triggered by ``install_requires`` from a setup.py call\n  (install, develop, etc).\n* Issue 101: Allowing ``os.devnull`` in Sandbox\n* Issue 92: Fixed the \"no eggs\" found error with MacPort\n  (platform.mac_ver() fails)\n* Issue 103: test_get_script_header_jython_workaround not run\n  anymore under py3 with C or POSIX local. Contributed by Arfrever.\n* Issue 104: remvoved the assertion when the installation fails,\n  with a nicer message for the end user.\n* Issue 100: making sure there's no SandboxViolation when\n  the setup script patches setuptools.\n\n-----\n0.6.8\n-----\n\n* Added \"check_packages\" in dist. (added in Setuptools 0.6c11)\n* Fixed the DONT_PATCH_SETUPTOOLS state.\n\n-----\n0.6.7\n-----\n\n* Issue 58: Added --user support to the develop command\n* Issue 11: Generated scripts now wrap their call to the script entry point\n  in the standard \"if name == 'main'\"\n* Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv\n  can drive an installation that doesn't patch a global setuptools.\n* Reviewed unladen-swallow specific change from\n  http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719\n  and determined that it no longer applies. Distribute should work fine with\n  Unladen Swallow 2009Q3.\n* Issue 21: Allow PackageIndex.open_url to gracefully handle all cases of a\n  httplib.HTTPException instead of just InvalidURL and BadStatusLine.\n* Removed virtual-python.py from this distribution and updated documentation\n  to point to the actively maintained virtualenv instead.\n* Issue 64: use_setuptools no longer rebuilds the distribute egg every\n  time it is run\n* use_setuptools now properly respects the requested version\n* use_setuptools will no longer try to import a distribute egg for the\n  wrong Python version\n* Issue 74: no_fake should be True by default.\n* Issue 72: avoid a bootstrapping issue with easy_install -U\n\n-----\n0.6.6\n-----\n\n* Unified the bootstrap file so it works on both py2.x and py3k without 2to3\n  (patch by Holger Krekel)\n\n-----\n0.6.5\n-----\n\n* Issue 65: cli.exe and gui.exe are now generated at build time,\n  depending on the platform in use.\n\n* Issue 67: Fixed doc typo (PEP 381/382)\n\n* Distribute no longer shadows setuptools if we require a 0.7-series\n  setuptools.  And an error is raised when installing a 0.7 setuptools with\n  distribute.\n\n* When run from within buildout, no attempt is made to modify an existing\n  setuptools egg, whether in a shared egg directory or a system setuptools.\n\n* Fixed a hole in sandboxing allowing builtin file to write outside of\n  the sandbox.\n\n-----\n0.6.4\n-----\n\n* Added the generation of `distribute_setup_3k.py` during the release.\n  This close http://bitbucket.org/tarek/distribute/issue/52.\n\n* Added an upload_docs command to easily upload project documentation to\n  PyPI's http://packages.python.org.\n  This close http://bitbucket.org/tarek/distribute/issue/56.\n\n* Fixed a bootstrap bug on the use_setuptools() API.\n\n-----\n0.6.3\n-----\n\nsetuptools\n==========\n\n* Fixed a bunch of calls to file() that caused crashes on Python 3.\n\nbootstrapping\n=============\n\n* Fixed a bug in sorting that caused bootstrap to fail on Python 3.\n\n-----\n0.6.2\n-----\n\nsetuptools\n==========\n\n* Added Python 3 support; see docs/python3.txt.\n  This closes http://bugs.python.org/setuptools/issue39.\n\n* Added option to run 2to3 automatically when installing on Python 3.\n  This closes http://bitbucket.org/tarek/distribute/issue/31.\n\n* Fixed invalid usage of requirement.parse, that broke develop -d.\n  This closes http://bugs.python.org/setuptools/issue44.\n\n* Fixed script launcher for 64-bit Windows.\n  This closes http://bugs.python.org/setuptools/issue2.\n\n* KeyError when compiling extensions.\n  This closes http://bugs.python.org/setuptools/issue41.\n\nbootstrapping\n=============\n\n* Fixed bootstrap not working on Windows.\n  This closes http://bitbucket.org/tarek/distribute/issue/49.\n\n* Fixed 2.6 dependencies.\n  This closes http://bitbucket.org/tarek/distribute/issue/50.\n\n* Make sure setuptools is patched when running through easy_install\n  This closes http://bugs.python.org/setuptools/issue40.\n\n-----\n0.6.1\n-----\n\nsetuptools\n==========\n\n* package_index.urlopen now catches BadStatusLine and malformed url errors.\n  This closes http://bitbucket.org/tarek/distribute/issue/16 and\n  http://bitbucket.org/tarek/distribute/issue/18.\n\n* zip_ok is now False by default. This closes\n  http://bugs.python.org/setuptools/issue33.\n\n* Fixed invalid URL error catching. http://bugs.python.org/setuptools/issue20.\n\n* Fixed invalid bootstraping with easy_install installation\n  http://bitbucket.org/tarek/distribute/issue/40.\n  Thanks to Florian Schulze for the help.\n\n* Removed buildout/bootstrap.py. A new repository will create a specific\n  bootstrap.py script.\n\n\nbootstrapping\n=============\n\n* The boostrap process leave setuptools alone if detected in the system\n  and --root or --prefix is provided, but is not in the same location.\n  This closes http://bitbucket.org/tarek/distribute/issue/10.\n\n---\n0.6\n---\n\nsetuptools\n==========\n\n* Packages required at build time where not fully present at install time.\n  This closes http://bitbucket.org/tarek/distribute/issue/12.\n\n* Protected against failures in tarfile extraction. This closes\n  http://bitbucket.org/tarek/distribute/issue/10.\n\n* Made Jython api_tests.txt doctest compatible. This closes\n  http://bitbucket.org/tarek/distribute/issue/7.\n\n* sandbox.py replaced builtin type file with builtin function open. This\n  closes http://bitbucket.org/tarek/distribute/issue/6.\n\n* Immediately close all file handles. This closes\n  http://bitbucket.org/tarek/distribute/issue/3.\n\n* Added compatibility with Subversion 1.6. This references\n  http://bitbucket.org/tarek/distribute/issue/1.\n\npkg_resources\n=============\n\n* Avoid a call to /usr/bin/sw_vers on OSX and use the official platform API\n  instead. Based on a patch from ronaldoussoren. This closes\n  http://bitbucket.org/tarek/distribute/issue/5.\n\n* Fixed a SandboxViolation for mkdir that could occur in certain cases.\n  This closes http://bitbucket.org/tarek/distribute/issue/13.\n\n* Allow to find_on_path on systems with tight permissions to fail gracefully.\n  This closes http://bitbucket.org/tarek/distribute/issue/9.\n\n* Corrected inconsistency between documentation and code of add_entry.\n  This closes http://bitbucket.org/tarek/distribute/issue/8.\n\n* Immediately close all file handles. This closes\n  http://bitbucket.org/tarek/distribute/issue/3.\n\neasy_install\n============\n\n* Immediately close all file handles. This closes\n  http://bitbucket.org/tarek/distribute/issue/3.","description_content_type":null,"docs_url":null,"download_url":"UNKNOWN","downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"home_page":"http://packages.python.org/distribute","keywords":"CPAN PyPI distutils eggs package management","license":"PSF or ZPL","maintainer":null,"maintainer_email":null,"name":"distribute","package_url":"https://pypi.org/project/distribute/","platform":"UNKNOWN","project_url":"https://pypi.org/project/distribute/","project_urls":{"Download":"UNKNOWN","Homepage":"http://packages.python.org/distribute"},"release_url":"https://pypi.org/project/distribute/0.6.15/","requires_dist":null,"requires_python":null,"python_requires":">=3.0","summary":"Easily download, build, install, upgrade, and uninstall Python packages","version":"0.6.15","yanked":false,"yanked_reason":null},"last_serial":2525930,"releases":{"0.6":[{"comment_text":"","digests":{"md5":"49b936db5d9d7fd87a5eac2d55964134","sha256":"0520df7dd20b84233dce5f8c1b284cf88a75621eb7c9b84e0358e77a6ffde68c"},"downloads":-1,"filename":"distribute-0.6.tar.gz","has_sig":false,"md5_digest":"49b936db5d9d7fd87a5eac2d55964134","packagetype":"sdist","python_version":"source","requires_python":null,"size":365198,"upload_time":"2011-09-22T18:27:32","upload_time_iso_8601":"2011-09-22T18:27:32.964060Z","url":"https://files.pythonhosted.org/packages/2b/37/8468dd6c136d01adbd031f58b62fc6a8dbd1aedcfbeca2b86f298a960849/distribute-0.6.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"ad25841e6df0c45208a1b4ffc13cac61","sha256":"2f3f6c44d398c91238658cf831773b9f8b0927c4eef694879b95b0e784e588df"},"downloads":-1,"filename":"distribute-0.6.zip","has_sig":false,"md5_digest":"ad25841e6df0c45208a1b4ffc13cac61","packagetype":"sdist","python_version":"source","requires_python":null,"size":400632,"upload_time":"2016-01-19T00:00:12","upload_time_iso_8601":"2016-01-19T00:00:12.771591Z","url":"https://files.pythonhosted.org/packages/f5/a1/5d176b200da15f6a1cbd50115d7218ddcbd8764c4ea300768b37ca123a69/distribute-0.6.zip","yanked":false,"yanked_reason":null}],"0.6.1":[{"comment_text":"","digests":{"md5":"5fb8cdfe8dc70485aa1d00a7bbb220fc","sha256":"4e2d26047c7ca7cea83d178de04ca44c40e137f412252ac59878759e37fc60ff"},"downloads":-1,"filename":"distribute-0.6.1.tar.gz","has_sig":false,"md5_digest":"5fb8cdfe8dc70485aa1d00a7bbb220fc","packagetype":"sdist","python_version":"source","requires_python":null,"size":361619,"upload_time":"2011-09-22T18:28:08","upload_time_iso_8601":"2011-09-22T18:28:08.064062Z","url":"https://files.pythonhosted.org/packages/42/2f/77365178cb4567987d0248f05d7c5adfad2b04bacfbfbc9bc6320b2575dc/distribute-0.6.1.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"c25c33e733e0a2159fcf102ac8ebcba6","sha256":"fe57c7ab40f5a8e0764f0b737a4df08dd3818f123b008e50f7493adbda7426b5"},"downloads":-1,"filename":"distribute-0.6.1.zip","has_sig":false,"md5_digest":"c25c33e733e0a2159fcf102ac8ebcba6","packagetype":"sdist","python_version":"source","requires_python":null,"size":396247,"upload_time":"2016-01-19T00:00:32","upload_time_iso_8601":"2016-01-19T00:00:32.046038Z","url":"https://files.pythonhosted.org/packages/4f/5a/2c01b3bb9fef9e6fc4673925c974f18ff9d3c6a7513208a5513d6dc2298e/distribute-0.6.1.zip","yanked":false,"yanked_reason":null}],"0.6.10":[{"comment_text":"","digests":{"md5":"0e2c14f2ec152f6454297870fc1cf499","sha256":"0c291a31248376ca76b5662c6ff4e33e7d3eba6d91b4c0a5ca663c9c954e8a1a"},"downloads":-1,"filename":"distribute-0.6.10.tar.gz","has_sig":false,"md5_digest":"0e2c14f2ec152f6454297870fc1cf499","packagetype":"sdist","python_version":"source","requires_python":null,"size":389668,"upload_time":"2011-09-22T18:30:29","upload_time_iso_8601":"2011-09-22T18:30:29.954437Z","url":"https://files.pythonhosted.org/packages/07/9d/2af576b8b199c69d839a8dfd6025b6721a18a0b771a051b2b62b3c866d0f/distribute-0.6.10.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"1fa1c316ad8f73f0620a64cf03297c2a","sha256":"ccaec91646cd6a57eae7aecc9c819fd8300c8d0005019a2ce7485e572ab485dd"},"downloads":-1,"filename":"distribute-0.6.10.zip","has_sig":false,"md5_digest":"1fa1c316ad8f73f0620a64cf03297c2a","packagetype":"sdist","python_version":"source","requires_python":null,"size":425477,"upload_time":"2016-01-19T00:01:56","upload_time_iso_8601":"2016-01-19T00:01:56.581573Z","url":"https://files.pythonhosted.org/packages/39/19/dae27189d9c1758e3db9bf27930e88cc05b0ca60c3eb5668ca6e329a6fca/distribute-0.6.10.zip","yanked":false,"yanked_reason":null}],"0.6.11":[{"comment_text":"","digests":{"md5":"6ac0431bce33d0e67b23029064ee3446","sha256":"d04390637087e25dfc0851d0c352900b64c0cf9b831d40e89de5636ec3df8bee"},"downloads":-1,"filename":"distribute-0.6.11.tar.gz","has_sig":false,"md5_digest":"6ac0431bce33d0e67b23029064ee3446","packagetype":"sdist","python_version":"source","requires_python":null,"size":393425,"upload_time":"2011-09-22T18:30:42","upload_time_iso_8601":"2011-09-22T18:30:42.159594Z","url":"https://files.pythonhosted.org/packages/60/6b/a6b6a5bfd5a04ba71a458fe50c86d10855cf3ccc04ec11a3f2b94681c67b/distribute-0.6.11.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"a0b115eff03e2086e26a9361c370a98e","sha256":"e35c3554fa5f66013ab5be1f3387146c565ec028514733d571cc6f42e1af0e1f"},"downloads":-1,"filename":"distribute-0.6.11.zip","has_sig":false,"md5_digest":"a0b115eff03e2086e26a9361c370a98e","packagetype":"sdist","python_version":"source","requires_python":null,"size":430439,"upload_time":"2016-01-19T00:02:03","upload_time_iso_8601":"2016-01-19T00:02:03.464331Z","url":"https://files.pythonhosted.org/packages/aa/37/86c4925d9fd77500599d29325f07e0c1ccd6b6bf9150a06144e7604b5c9e/distribute-0.6.11.zip","yanked":false,"yanked_reason":null}],"0.6.12":[{"comment_text":"","digests":{"md5":"d4713d07bccd48892e455fe30230f8bc","sha256":"a519e9e6a402be4d206d934885bf263f47adf1e88084eeffc3fa00fe64133a45"},"downloads":-1,"filename":"distribute-0.6.12.tar.gz","has_sig":false,"md5_digest":"d4713d07bccd48892e455fe30230f8bc","packagetype":"sdist","python_version":"source","requires_python":null,"size":393570,"upload_time":"2011-09-22T18:30:54","upload_time_iso_8601":"2011-09-22T18:30:54.440941Z","url":"https://files.pythonhosted.org/packages/cd/fb/efc926f7231e011d2abedf7cb3835dfccf2d5e08fa115a30fe9225244bb3/distribute-0.6.12.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"97186a81c6ed32f8a4c63dde930d9222","sha256":"06382930f84acc74d8dd9d15c30bdfa378532b0e6c65f391dff4d310dd0b14ea"},"downloads":-1,"filename":"distribute-0.6.12.zip","has_sig":false,"md5_digest":"97186a81c6ed32f8a4c63dde930d9222","packagetype":"sdist","python_version":"source","requires_python":null,"size":430588,"upload_time":"2016-01-19T00:02:15","upload_time_iso_8601":"2016-01-19T00:02:15.313666Z","url":"https://files.pythonhosted.org/packages/42/71/9dfd846af8d66f94ef3b32fa9c36de7d2303e6080ec21f12d9a38c72287a/distribute-0.6.12.zip","yanked":false,"yanked_reason":null}],"0.6.13":[{"comment_text":"","digests":{"md5":"e41f26aeb1f24abcc89382d4ff6881bd","sha256":"a4acfcbd37741ea5ae9510ec72a8e8c482d7d4a504cba3d72ecd3971165d7e85"},"downloads":-1,"filename":"distribute-0.6.13.tar.gz","has_sig":false,"md5_digest":"e41f26aeb1f24abcc89382d4ff6881bd","packagetype":"sdist","python_version":"source","requires_python":null,"size":395617,"upload_time":"2011-09-22T18:31:05","upload_time_iso_8601":"2011-09-22T18:31:05.994782Z","url":"https://files.pythonhosted.org/packages/0b/89/94f3ecf6767ee521962c3b128ef832d452f9b857b244bebfb0b8426d909f/distribute-0.6.13.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"3b0098545f556edc94cf69dc1da3d2ce","sha256":"4b935edc3bd049cc4c597c123e515d428619a8c8b0b477cbe95343cb479ba3a8"},"downloads":-1,"filename":"distribute-0.6.13.zip","has_sig":false,"md5_digest":"3b0098545f556edc94cf69dc1da3d2ce","packagetype":"sdist","python_version":"source","requires_python":null,"size":432855,"upload_time":"2016-01-19T00:02:27","upload_time_iso_8601":"2016-01-19T00:02:27.466194Z","url":"https://files.pythonhosted.org/packages/c6/4c/0ba3f3d7075381526f15a47ce7835e5d1577caec569cc29653dfa0231350/distribute-0.6.13.zip","yanked":false,"yanked_reason":null}],"0.6.14":[{"comment_text":"","digests":{"md5":"83ada58a83d99b28c806703597323b80","sha256":"44c92b7edbc0ff9cd5847291e7dcb4cc75e24247a306bd4b8a139abd355b0db0"},"downloads":-1,"filename":"distribute-0.6.14.tar.gz","has_sig":false,"md5_digest":"83ada58a83d99b28c806703597323b80","packagetype":"sdist","python_version":"source","requires_python":null,"size":396609,"upload_time":"2011-09-22T18:31:46","upload_time_iso_8601":"2011-09-22T18:31:46.046582Z","url":"https://files.pythonhosted.org/packages/95/f1/6128255a94f3d57e0f7ec2767c1893d1ab769bef48e847173f923d977e1d/distribute-0.6.14.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"38282c754d136a66bfdad3932f3ed33a","sha256":"4ceec6b1ec8300fe4e1a60a9781c7bc1956feee0d6a87a002254aca080a9126d"},"downloads":-1,"filename":"distribute-0.6.14.zip","has_sig":false,"md5_digest":"38282c754d136a66bfdad3932f3ed33a","packagetype":"sdist","python_version":"source","requires_python":null,"size":435162,"upload_time":"2016-01-19T00:02:41","upload_time_iso_8601":"2016-01-19T00:02:41.727306Z","url":"https://files.pythonhosted.org/packages/0b/f7/c564907eacadc3cbace0174a95c9176e5a371e19ddc38baf1919d2d8cb3d/distribute-0.6.14.zip","yanked":false,"yanked_reason":null}],"0.6.15":[{"comment_text":"","digests":{"md5":"8a5c36afe934ef90ce2da15a1c557128","sha256":"85b05942f84146d8f0ed17906b90af7662d649b922fe77a8c402da5da258a481"},"downloads":-1,"filename":"distribute-0.6.15.tar.gz","has_sig":false,"md5_digest":"8a5c36afe934ef90ce2da15a1c557128","packagetype":"sdist","python_version":"source","requires_python":null,"size":397027,"upload_time":"2011-09-22T18:32:37","upload_time_iso_8601":"2011-09-22T18:32:37.570852Z","url":"https://files.pythonhosted.org/packages/07/a6/8f6b270b7e6a1be3df78b174e2437fdb631cfcce16f82c2f8b7affb50ee2/distribute-0.6.15.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"86ca2e0a13621a9b742246b2509602a2","sha256":"a6cba0f43a70dceab680ba475df2a451b53257e5dc3267323c2a666c1673a31b"},"downloads":-1,"filename":"distribute-0.6.15.zip","has_sig":false,"md5_digest":"86ca2e0a13621a9b742246b2509602a2","packagetype":"sdist","python_version":"source","requires_python":null,"size":435492,"upload_time":"2016-01-19T00:02:50","upload_time_iso_8601":"2016-01-19T00:02:50.500500Z","url":"https://files.pythonhosted.org/packages/7f/00/9219235d4222c3da6729e6e2afa4a9080b987169bab3b2ec6cbb7c2e86da/distribute-0.6.15.zip","yanked":false,"yanked_reason":null}],"0.6.16":[{"comment_text":"","digests":{"md5":"c650a6bd418bb781f8dc90c78f36967a","sha256":"cb2de242f3af2d1aa225e514e5b8ed7d41cdb4c505d3cf5cc6e3ca0646b4dd9b"},"downloads":-1,"filename":"distribute-0.6.16.tar.gz","has_sig":false,"md5_digest":"c650a6bd418bb781f8dc90c78f36967a","packagetype":"sdist","python_version":"source","requires_python":null,"size":397684,"upload_time":"2011-09-22T18:32:56","upload_time_iso_8601":"2011-09-22T18:32:56.021001Z","url":"https://files.pythonhosted.org/packages/20/e0/6c03055f8520384b0050bb97757ab58afae5f35adb8b9a26bba2cd4de8bd/distribute-0.6.16.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"f1a91231991e26364fd3fb7d950c65c5","sha256":"5ba2f101f32861c5aa87cc50037b1c7d30a2b225c8c324afbc0b89a8660b8dbe"},"downloads":-1,"filename":"distribute-0.6.16.zip","has_sig":false,"md5_digest":"f1a91231991e26364fd3fb7d950c65c5","packagetype":"sdist","python_version":"source","requires_python":null,"size":436134,"upload_time":"2016-01-19T00:02:57","upload_time_iso_8601":"2016-01-19T00:02:57.480103Z","url":"https://files.pythonhosted.org/packages/de/f0/13745a2a99391522cd6d8eb493c0fff54754c669de5988efab80573d382d/distribute-0.6.16.zip","yanked":false,"yanked_reason":null}],"0.6.17":[{"comment_text":"","digests":{"md5":"5e9c933b84ecf1488d3a8a00ae11e82d","sha256":"8052d922eaf542e336593822c15e753248373c88ce4a1a94674952698ab7c5ac"},"downloads":-1,"filename":"distribute-0.6.17.tar.gz","has_sig":false,"md5_digest":"5e9c933b84ecf1488d3a8a00ae11e82d","packagetype":"sdist","python_version":"source","requires_python":null,"size":399075,"upload_time":"2011-09-22T18:33:15","upload_time_iso_8601":"2011-09-22T18:33:15.896157Z","url":"https://files.pythonhosted.org/packages/7f/1c/37153c8248bd510bfd573c26d5fd2b91bcf39ebc513ab8f7883294d0625b/distribute-0.6.17.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"b0e6bad948b389ac1bc8cdcb1960fea5","sha256":"5c138bca2e17c730089a1120864472c3c659fbe87d7ba65dd7a1c089c759bfa9"},"downloads":-1,"filename":"distribute-0.6.17.zip","has_sig":false,"md5_digest":"b0e6bad948b389ac1bc8cdcb1960fea5","packagetype":"sdist","python_version":"source","requires_python":null,"size":437675,"upload_time":"2016-01-19T00:03:09","upload_time_iso_8601":"2016-01-19T00:03:09.903631Z","url":"https://files.pythonhosted.org/packages/5f/d0/2c0c6142f91f75e3f3cfefe869757226742fd21db00e935b6cb9052a01bf/distribute-0.6.17.zip","yanked":false,"yanked_reason":null}],"0.6.18":[{"comment_text":"","digests":{"md5":"58ab2e41e0604be84fbfb06c46bd70e8","sha256":"160f74cd7b4125b373604b8ce84c6fa5153d46416b85aae2469255f679d6362a"},"downloads":-1,"filename":"distribute-0.6.18.tar.gz","has_sig":false,"md5_digest":"58ab2e41e0604be84fbfb06c46bd70e8","packagetype":"sdist","python_version":"source","requires_python":null,"size":399410,"upload_time":"2011-09-22T18:33:29","upload_time_iso_8601":"2011-09-22T18:33:29.113354Z","url":"https://files.pythonhosted.org/packages/b3/93/cc5e6ff77a060b5a28e3e0d8db907f4b69a546ce75ff6fd653319461cdf1/distribute-0.6.18.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"734f016b260855489532745f72b00316","sha256":"89fb195fdc09527e1d21758272ec67cad5304390aeb3ff6fe45821687aa93577"},"downloads":-1,"filename":"distribute-0.6.18.zip","has_sig":false,"md5_digest":"734f016b260855489532745f72b00316","packagetype":"sdist","python_version":"source","requires_python":null,"size":438039,"upload_time":"2016-01-19T00:03:21","upload_time_iso_8601":"2016-01-19T00:03:21.680067Z","url":"https://files.pythonhosted.org/packages/35/4f/b0564981f9dd220a6db88be661a8331523a2524caf3d01e976a0c87a6942/distribute-0.6.18.zip","yanked":false,"yanked_reason":null}],"0.6.19":[{"comment_text":"","digests":{"md5":"21e7a442c4d8f0cb0223f2ed5e4569ad","sha256":"a1c4f65170ae95c4078ca5c3e24f1df018fe6ea2d4f3a702eed0d74d70cd6722"},"downloads":-1,"filename":"distribute-0.6.19.tar.gz","has_sig":false,"md5_digest":"21e7a442c4d8f0cb0223f2ed5e4569ad","packagetype":"sdist","python_version":"source","requires_python":null,"size":399518,"upload_time":"2011-09-22T18:33:40","upload_time_iso_8601":"2011-09-22T18:33:40.623416Z","url":"https://files.pythonhosted.org/packages/86/74/d6862980635b0827a9564646fbab7386c91d46b5dc177deb7a4d5a4a74df/distribute-0.6.19.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"6236355ecade133a8def830f579d4ef6","sha256":"5ce5d0e067de948136c61b24ffc943bf01f25da22e672acf698ad17581dfdacd"},"downloads":-1,"filename":"distribute-0.6.19.zip","has_sig":false,"md5_digest":"6236355ecade133a8def830f579d4ef6","packagetype":"sdist","python_version":"source","requires_python":null,"size":438159,"upload_time":"2016-01-19T00:03:31","upload_time_iso_8601":"2016-01-19T00:03:31.753597Z","url":"https://files.pythonhosted.org/packages/e2/f5/64dedcfd63da54b05372dcf0688b9ab6dd27ac64acac40f260f96d561519/distribute-0.6.19.zip","yanked":false,"yanked_reason":null}],"0.6.2":[{"comment_text":"","digests":{"md5":"b95ed5d73a9a0e316de5a702efcd055f","sha256":"dd04265d390db326a60de73c24e50468edb7048198d43bb2a5fa74525e35d294"},"downloads":-1,"filename":"distribute-0.6.2.tar.gz","has_sig":false,"md5_digest":"b95ed5d73a9a0e316de5a702efcd055f","packagetype":"sdist","python_version":"source","requires_python":null,"size":518316,"upload_time":"2011-09-22T18:28:25","upload_time_iso_8601":"2011-09-22T18:28:25.043336Z","url":"https://files.pythonhosted.org/packages/c6/c0/e422bfe70ea4c087a3a4b10d9ca249196394fd7c7bd97d37f1c30e184cbf/distribute-0.6.2.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"75b312e41e179b70bb30296febe5010e","sha256":"5bd8ebc58dea3659ded73f1b8fd070b09e6e22acb1b5745686c743e2782d53ee"},"downloads":-1,"filename":"distribute-0.6.2.zip","has_sig":false,"md5_digest":"75b312e41e179b70bb30296febe5010e","packagetype":"sdist","python_version":"source","requires_python":null,"size":549844,"upload_time":"2016-01-19T00:00:42","upload_time_iso_8601":"2016-01-19T00:00:42.244136Z","url":"https://files.pythonhosted.org/packages/88/59/82c73ff573b7ed1b7a831cd51f81cff351fa53514bcd1851e522deb2a9ec/distribute-0.6.2.zip","yanked":false,"yanked_reason":null}],"0.6.20":[{"comment_text":"","digests":{"md5":"1909dc5bbb89793860ff9a2a23457c64","sha256":"8314683ad7cadfeb5918ff0bf7d410782a0b7f1615173c72d761cc8b43f7520e"},"downloads":-1,"filename":"distribute-0.6.20.tar.gz","has_sig":false,"md5_digest":"1909dc5bbb89793860ff9a2a23457c64","packagetype":"sdist","python_version":"source","requires_python":null,"size":400030,"upload_time":"2011-09-22T18:33:51","upload_time_iso_8601":"2011-09-22T18:33:51.968879Z","url":"https://files.pythonhosted.org/packages/ff/1b/ea2ba1b02f2ed1f80d81db35335f14480648f1f0d20be3094dbf75ff68e1/distribute-0.6.20.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"026654e2620d213f66b24324ec2d8590","sha256":"c9975d1e6ec2c73fc84440586989bf62c29ea0f8c0cade30b8b840590deb6696"},"downloads":-1,"filename":"distribute-0.6.20.zip","has_sig":false,"md5_digest":"026654e2620d213f66b24324ec2d8590","packagetype":"sdist","python_version":"source","requires_python":null,"size":438601,"upload_time":"2016-01-19T00:03:39","upload_time_iso_8601":"2016-01-19T00:03:39.528282Z","url":"https://files.pythonhosted.org/packages/fd/38/c1df29e89485ed854db98cbf89cae131244ae5624da622425f59c2fc1b7a/distribute-0.6.20.zip","yanked":false,"yanked_reason":null}],"0.6.21":[{"comment_text":"","digests":{"md5":"f783444754861f9b33e9f4083bd97b60","sha256":"5701c39864ac17d17b66aceca4ea3c92a8b9ab63d593ac491a2455d3de3e53b9"},"downloads":-1,"filename":"distribute-0.6.21.tar.gz","has_sig":false,"md5_digest":"f783444754861f9b33e9f4083bd97b60","packagetype":"sdist","python_version":"source","requires_python":null,"size":400092,"upload_time":"2011-09-22T18:34:06","upload_time_iso_8601":"2011-09-22T18:34:06.809918Z","url":"https://files.pythonhosted.org/packages/77/b5/c12c3b72749402550bbfdbc7865c6e9fee3293379096305029ee8be34126/distribute-0.6.21.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"320dc5fd46fae3ece7555a0e6550edff","sha256":"66cfd8f068da36fa5fb932968ab0378fe5716a7bd7c84016273a160fb07fa3e3"},"downloads":-1,"filename":"distribute-0.6.21.zip","has_sig":false,"md5_digest":"320dc5fd46fae3ece7555a0e6550edff","packagetype":"sdist","python_version":"source","requires_python":null,"size":438657,"upload_time":"2016-01-19T00:03:46","upload_time_iso_8601":"2016-01-19T00:03:46.305648Z","url":"https://files.pythonhosted.org/packages/64/4d/2e651f25c2feda7bbde61ce8584055a41d3a4d38fd0a83a2ec1a0ed4662c/distribute-0.6.21.zip","yanked":false,"yanked_reason":null}],"0.6.24":[{"comment_text":"","digests":{"md5":"17722b22141aba8235787f79800cc452","sha256":"c61fde9f388c9600eb8ee54bd7168039c5fb74fa334138bc49cdf6a6c1341627"},"downloads":-1,"filename":"distribute-0.6.24.tar.gz","has_sig":false,"md5_digest":"17722b22141aba8235787f79800cc452","packagetype":"sdist","python_version":"source","requires_python":null,"size":620771,"upload_time":"2011-10-16T15:09:53","upload_time_iso_8601":"2011-10-16T15:09:53.185592Z","url":"https://files.pythonhosted.org/packages/8a/4f/49f801acde031de47223a7541763b2f5ccedf88cb001694b0d3570e9dc15/distribute-0.6.24.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"d221d832a6504a263e3b392b3c4a09dd","sha256":"2f172188e1d50ed9f541b6317ba08e3028a1bdb286c55a1d36fedc717c0b4695"},"downloads":-1,"filename":"distribute-0.6.24.zip","has_sig":false,"md5_digest":"d221d832a6504a263e3b392b3c4a09dd","packagetype":"sdist","python_version":"source","requires_python":null,"size":660752,"upload_time":"2016-01-19T00:03:54","upload_time_iso_8601":"2016-01-19T00:03:54.506134Z","url":"https://files.pythonhosted.org/packages/af/1e/ebca61f90d9edb8088e5c4363a05279e572ac42ffae20229ce6af303cb8f/distribute-0.6.24.zip","yanked":false,"yanked_reason":null}],"0.6.25":[{"comment_text":"","digests":{"md5":"a690874b9964d958a3200485eb827b1d","sha256":"ed11ff44b68b8dd274f11d7d5ca1659620be0620fb7dc305b3d39b0742788c31"},"downloads":-1,"filename":"distribute-0.6.25.tar.gz","has_sig":false,"md5_digest":"a690874b9964d958a3200485eb827b1d","packagetype":"sdist","python_version":"source","requires_python":null,"size":629502,"upload_time":"2012-03-10T08:08:02","upload_time_iso_8601":"2012-03-10T08:08:02.117769Z","url":"https://files.pythonhosted.org/packages/60/63/3ed8905bef060a1654000d19d4d55ea56a87fb895bbad83d9c52cb024a50/distribute-0.6.25.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"ed5e0c4942f828fbd00790894756a555","sha256":"865a99ed213301c83396bc111c659ce6ffcd870417a6115d7e59271c74df1f2d"},"downloads":-1,"filename":"distribute-0.6.25.zip","has_sig":false,"md5_digest":"ed5e0c4942f828fbd00790894756a555","packagetype":"sdist","python_version":"source","requires_python":null,"size":671234,"upload_time":"2016-01-19T00:04:01","upload_time_iso_8601":"2016-01-19T00:04:01.531014Z","url":"https://files.pythonhosted.org/packages/2a/e5/a20bb4e1abdf71985e9a67d56136b973b41ea295ba3e756f47ad1c54953d/distribute-0.6.25.zip","yanked":false,"yanked_reason":null}],"0.6.26":[{"comment_text":"","digests":{"md5":"841f4262a70107f85260362f5def8206","sha256":"9c29c56dcbb0e88a12714071d0b64e1be2da805b650f9394e8c7c719b7675030"},"downloads":-1,"filename":"distribute-0.6.26.tar.gz","has_sig":false,"md5_digest":"841f4262a70107f85260362f5def8206","packagetype":"sdist","python_version":"source","requires_python":null,"size":621193,"upload_time":"2012-04-08T04:23:49","upload_time_iso_8601":"2012-04-08T04:23:49.904632Z","url":"https://files.pythonhosted.org/packages/03/08/16815ba1e7d7dc21289c0ea89bffea4c34cc4d10979d2f3f64837ee51087/distribute-0.6.26.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"399d086acc01d78a59537dc39a4da119","sha256":"2f3551943f8a18ece8948711a6340fafc2e57c29d921e1e3ec0caf78878ff343"},"downloads":-1,"filename":"distribute-0.6.26.zip","has_sig":false,"md5_digest":"399d086acc01d78a59537dc39a4da119","packagetype":"sdist","python_version":"source","requires_python":null,"size":661781,"upload_time":"2016-01-19T00:04:16","upload_time_iso_8601":"2016-01-19T00:04:16.549984Z","url":"https://files.pythonhosted.org/packages/2c/be/b67877f2b48db5bbcf7b5e131a69c401753c9af9b4968254ff8bfc9e1ca7/distribute-0.6.26.zip","yanked":false,"yanked_reason":null}],"0.6.27":[{"comment_text":"","digests":{"md5":"ecd75ea629fee6d59d26f88c39b2d291","sha256":"5d79e472ba49e5de17318a9c59b9adf5790ba6b186c6edc1657acd9afe55de00"},"downloads":-1,"filename":"distribute-0.6.27.tar.gz","has_sig":false,"md5_digest":"ecd75ea629fee6d59d26f88c39b2d291","packagetype":"sdist","python_version":"source","requires_python":null,"size":624016,"upload_time":"2012-05-18T21:46:16","upload_time_iso_8601":"2012-05-18T21:46:16.374366Z","url":"https://files.pythonhosted.org/packages/33/cd/b81641625955e7f13d3a02b13176f7cc7becf96da5607c3283d14e2fa0a6/distribute-0.6.27.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"5dc46141f05eff0d85e46252028392fe","sha256":"fd98fb9a36237271809533334535c369fe78a689f22ceedf8d6778f3b05a19ff"},"downloads":-1,"filename":"distribute-0.6.27.zip","has_sig":false,"md5_digest":"5dc46141f05eff0d85e46252028392fe","packagetype":"sdist","python_version":"source","requires_python":null,"size":664472,"upload_time":"2016-01-19T00:04:25","upload_time_iso_8601":"2016-01-19T00:04:25.950475Z","url":"https://files.pythonhosted.org/packages/8c/ce/7e1d6c0bb82683b74960f09651de2a536bc7b48ac74b54675bfb79cc27e2/distribute-0.6.27.zip","yanked":false,"yanked_reason":null}],"0.6.28":[{"comment_text":"","digests":{"md5":"b400b532e33f78551e6847c1f5965e56","sha256":"a42e897551aeb7600708f4aa6a0c02acb4458613976234b7d4fad7ae841a8d63"},"downloads":-1,"filename":"distribute-0.6.28.tar.gz","has_sig":false,"md5_digest":"b400b532e33f78551e6847c1f5965e56","packagetype":"sdist","python_version":"source","requires_python":null,"size":627530,"upload_time":"2012-07-22T22:58:11","upload_time_iso_8601":"2012-07-22T22:58:11.324319Z","url":"https://files.pythonhosted.org/packages/2f/f5/0ac674dd39ea80db147230362cff5e9cbe3b1e893fde9aeab5d2f72da83c/distribute-0.6.28.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"63e53db83e439afe3e5ee07816fc2f6a","sha256":"d754b7b21be61816dfddbbda234b1039a7e4f5e921201cc7bfde2d2985ef72e4"},"downloads":-1,"filename":"distribute-0.6.28.zip","has_sig":false,"md5_digest":"63e53db83e439afe3e5ee07816fc2f6a","packagetype":"sdist","python_version":"source","requires_python":null,"size":669561,"upload_time":"2016-01-19T00:04:37","upload_time_iso_8601":"2016-01-19T00:04:37.462818Z","url":"https://files.pythonhosted.org/packages/cb/0e/a58066fc4059f5b0d7dafa484aac0fcf45180800059eaf69528857237f64/distribute-0.6.28.zip","yanked":false,"yanked_reason":null}],"0.6.29":[{"comment_text":"","digests":{"md5":"1aad767bfca8bebaccafee25f85696cf","sha256":"2d74ee0360907f87e7125fe847ba541866777a1bc5315b4578bda06a4604544d"},"downloads":-1,"filename":"distribute-0.6.29.tar.gz","has_sig":false,"md5_digest":"1aad767bfca8bebaccafee25f85696cf","packagetype":"sdist","python_version":"source","requires_python":null,"size":638051,"upload_time":"2012-10-20T07:59:56","upload_time_iso_8601":"2012-10-20T07:59:56.063891Z","url":"https://files.pythonhosted.org/packages/1d/72/fe1c1eb05445595be6b653d5b282d4687528d437d6f038bfb8e69f3afd01/distribute-0.6.29.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"5a00307a5776cbc80a8d459a1b8f0c0f","sha256":"fe32fe888ea39e8f8efae20b5a47880b52b1647c2d9b7b3031d12e7461764327"},"downloads":-1,"filename":"distribute-0.6.29.zip","has_sig":false,"md5_digest":"5a00307a5776cbc80a8d459a1b8f0c0f","packagetype":"sdist","python_version":"source","requires_python":null,"size":680431,"upload_time":"2016-01-19T00:04:48","upload_time_iso_8601":"2016-01-19T00:04:48.181311Z","url":"https://files.pythonhosted.org/packages/a5/9f/54f0d4cf1a29308ea6b64c4cc8b3f5a3378fc51420c4d66e6b6485e628e9/distribute-0.6.29.zip","yanked":false,"yanked_reason":null}],"0.6.3":[{"comment_text":"","digests":{"md5":"9fee15948c9b508102b26d49653ebbec","sha256":"dc097ed5f75ed141cfe27c2c9718447b39c2c1d659bcca041302efb6384d4c41"},"downloads":-1,"filename":"distribute-0.6.3.tar.gz","has_sig":false,"md5_digest":"9fee15948c9b508102b26d49653ebbec","packagetype":"sdist","python_version":"source","requires_python":null,"size":518470,"upload_time":"2011-09-22T18:28:39","upload_time_iso_8601":"2011-09-22T18:28:39.754602Z","url":"https://files.pythonhosted.org/packages/81/a2/b6371ad2b865656293ad9d064b0bca6c32283a9acc35ec455b05d820da0f/distribute-0.6.3.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"f47d015f0a675158fa6cec3c29174cbb","sha256":"a121a30700cd2f6bb1613f71bd8a44de1fe434ca50f7b316b97d8a5b2b535914"},"downloads":-1,"filename":"distribute-0.6.3.zip","has_sig":false,"md5_digest":"f47d015f0a675158fa6cec3c29174cbb","packagetype":"sdist","python_version":"source","requires_python":null,"size":550047,"upload_time":"2016-01-19T00:00:48","upload_time_iso_8601":"2016-01-19T00:00:48.964130Z","url":"https://files.pythonhosted.org/packages/ac/c2/d271d54e5dd82d5727cac67bfe0b84ce508120082073a989943740008394/distribute-0.6.3.zip","yanked":false,"yanked_reason":null}],"0.6.30":[{"comment_text":"","digests":{"md5":"d239a2c7d40e126274dab3e2aa89d591","sha256":"7ff34c3a9a844ee881ff28efc5d1f74603b72e0a5235a9d6dc76e603149e8eab"},"downloads":-1,"filename":"distribute-0.6.30.tar.gz","has_sig":false,"md5_digest":"d239a2c7d40e126274dab3e2aa89d591","packagetype":"sdist","python_version":"source","requires_python":null,"size":638335,"upload_time":"2012-10-22T10:02:36","upload_time_iso_8601":"2012-10-22T10:02:36.332394Z","url":"https://files.pythonhosted.org/packages/d7/4b/a08384fdde2b86d0f88aa16df7b31326d90b7b3a9ff55acfa1c1c6b2c5be/distribute-0.6.30.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"b966ddad57596da71e580f115343f05f","sha256":"07a68008c9321369ea33136e9547bf330f1797764583226456e1511a32127527"},"downloads":-1,"filename":"distribute-0.6.30.zip","has_sig":false,"md5_digest":"b966ddad57596da71e580f115343f05f","packagetype":"sdist","python_version":"source","requires_python":null,"size":680582,"upload_time":"2016-01-19T00:04:55","upload_time_iso_8601":"2016-01-19T00:04:55.001883Z","url":"https://files.pythonhosted.org/packages/e7/23/507064c9ee19ecab8783248273473cff1291bce2411f51459eba5109551a/distribute-0.6.30.zip","yanked":false,"yanked_reason":null}],"0.6.31":[{"comment_text":"","digests":{"md5":"71e96d533b3b9041fcc6a9d9da34a8f4","sha256":"9716293effc8d68068ce41e287b6903cf355641d0642b44e69dd92e9699dcbcf"},"downloads":-1,"filename":"distribute-0.6.31.tar.gz","has_sig":false,"md5_digest":"71e96d533b3b9041fcc6a9d9da34a8f4","packagetype":"sdist","python_version":"source","requires_python":null,"size":643910,"upload_time":"2012-11-25T04:03:44","upload_time_iso_8601":"2012-11-25T04:03:44.865269Z","url":"https://files.pythonhosted.org/packages/e7/da/2e0f7670f9f7dbe440f5673b5b18e896d7b85b4303d4281925176a12e6bc/distribute-0.6.31.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"419e9c2108f2e22372a3358806328419","sha256":"c07d115808a76d0edb93842ac6e1015216990f21125c8f0120daeac22951a2d7"},"downloads":-1,"filename":"distribute-0.6.31.zip","has_sig":false,"md5_digest":"419e9c2108f2e22372a3358806328419","packagetype":"sdist","python_version":"source","requires_python":null,"size":686098,"upload_time":"2016-01-19T00:05:04","upload_time_iso_8601":"2016-01-19T00:05:04.312229Z","url":"https://files.pythonhosted.org/packages/73/51/21de5f4ae97310e2d34e60e7f3100929e9c461776599fb7ff527fb3ecb47/distribute-0.6.31.zip","yanked":false,"yanked_reason":null}],"0.6.32":[{"comment_text":"","digests":{"md5":"acb7a2da81e3612bfb1608abe4f0e568","sha256":"8970cd1e148b5d1fea9430584aea66c45ea22d80e0933393ec49ebc388f718df"},"downloads":-1,"filename":"distribute-0.6.32.tar.gz","has_sig":false,"md5_digest":"acb7a2da81e3612bfb1608abe4f0e568","packagetype":"sdist","python_version":"source","requires_python":null,"size":643362,"upload_time":"2012-11-26T17:18:26","upload_time_iso_8601":"2012-11-26T17:18:26.341106Z","url":"https://files.pythonhosted.org/packages/49/3f/d747add39a5fe4ceb910813c48d1c1564e40ab66f43ea41fd4ded884169a/distribute-0.6.32.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"e3d89425541c5e9a1018a4df04351685","sha256":"64b73cd34379eff02ef08c2c398677916f66b93ca5bb13f5f6a49e5031e58ad2"},"downloads":-1,"filename":"distribute-0.6.32.zip","has_sig":false,"md5_digest":"e3d89425541c5e9a1018a4df04351685","packagetype":"sdist","python_version":"source","requires_python":null,"size":685593,"upload_time":"2016-01-19T00:05:12","upload_time_iso_8601":"2016-01-19T00:05:12.306776Z","url":"https://files.pythonhosted.org/packages/8d/a6/f82b8038bf9bf36e6a565891c596bcdd5c55ff6cbb32c2e3becc6d94080b/distribute-0.6.32.zip","yanked":false,"yanked_reason":null}],"0.6.33":[{"comment_text":"","digests":{"md5":"9bc1cf2688590ffc1e20fd153babf239","sha256":"52d9bf08ddd7598fea591434188577e59f06cbaa0fbd9cf31dd09b455c18433a"},"downloads":-1,"filename":"distribute-0.6.33.tar.gz","has_sig":false,"md5_digest":"9bc1cf2688590ffc1e20fd153babf239","packagetype":"sdist","python_version":"source","requires_python":null,"size":644203,"upload_time":"2012-12-29T22:10:17","upload_time_iso_8601":"2012-12-29T22:10:17.413199Z","url":"https://files.pythonhosted.org/packages/81/a1/cc2f93e485bda7132136ffb1874068a20e6e0aad77d6063b5a17efc2383a/distribute-0.6.33.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"cf55172e00fc2e080646fed166551d68","sha256":"da0bd1a5f89549e324ad24f5050e3a992a4ba676bf7fa4abd0e3eaa896079990"},"downloads":-1,"filename":"distribute-0.6.33.zip","has_sig":false,"md5_digest":"cf55172e00fc2e080646fed166551d68","packagetype":"sdist","python_version":"source","requires_python":null,"size":686604,"upload_time":"2016-01-19T00:05:22","upload_time_iso_8601":"2016-01-19T00:05:22.988384Z","url":"https://files.pythonhosted.org/packages/2f/f9/ed567c3db5635145b672e6e6b1021e64936028dee9460e520025d5185f80/distribute-0.6.33.zip","yanked":false,"yanked_reason":null}],"0.6.34":[{"comment_text":"","digests":{"md5":"4576ab843a6db5100fb22a72deadf56d","sha256":"1a82a50f448fd963c1efade437b9ace3c47bfdd9b168fcdba7fca140df4b364e"},"downloads":-1,"filename":"distribute-0.6.34.tar.gz","has_sig":false,"md5_digest":"4576ab843a6db5100fb22a72deadf56d","packagetype":"sdist","python_version":"source","requires_python":null,"size":644358,"upload_time":"2012-12-31T15:27:12","upload_time_iso_8601":"2012-12-31T15:27:12.470300Z","url":"https://files.pythonhosted.org/packages/a2/f0/0d76f4f1e677509b5c09de2e86b7e98925730321779519eba924fa1b5199/distribute-0.6.34.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"b9729f289723f8d100e599769a5fc034","sha256":"8ffe1be0cde1d3d3a00823ff654d6c04b27d795693d59761bc7d5f6ea3de3f95"},"downloads":-1,"filename":"distribute-0.6.34.zip","has_sig":false,"md5_digest":"b9729f289723f8d100e599769a5fc034","packagetype":"sdist","python_version":"source","requires_python":null,"size":686709,"upload_time":"2016-01-19T00:05:31","upload_time_iso_8601":"2016-01-19T00:05:31.750692Z","url":"https://files.pythonhosted.org/packages/f6/29/2e1d82c8859b0330be3aa6cae1040587768506c153742ef7b8feeb4e09cd/distribute-0.6.34.zip","yanked":false,"yanked_reason":null}],"0.6.35":[{"comment_text":"","digests":{"md5":"e55298c7e3a233df1a47a4881a0c9800","sha256":"7ee7ce926e15b0066c6d241e1ff271c30ff99b9ec7648699263d36967409e804"},"downloads":-1,"filename":"distribute-0.6.35.tar.gz","has_sig":false,"md5_digest":"e55298c7e3a233df1a47a4881a0c9800","packagetype":"sdist","python_version":"source","requires_python":null,"size":644308,"upload_time":"2013-02-16T08:11:57","upload_time_iso_8601":"2013-02-16T08:11:57.777425Z","url":"https://files.pythonhosted.org/packages/e1/15/e61fd2df870382666ca800908b686932a3e1f603a9e80e93c2da7c71b2f0/distribute-0.6.35.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"ff7404870d66b74af01bfde8f182f045","sha256":"2c0a4ff54b51c2b6679400f8cbbb766e2d236eb9886acf526691a7c0cce368fe"},"downloads":-1,"filename":"distribute-0.6.35.zip","has_sig":false,"md5_digest":"ff7404870d66b74af01bfde8f182f045","packagetype":"sdist","python_version":"source","requires_python":null,"size":686580,"upload_time":"2016-01-19T00:05:39","upload_time_iso_8601":"2016-01-19T00:05:39.637079Z","url":"https://files.pythonhosted.org/packages/54/23/cdf26d55a4d5af062c49ea3d524729270452e23b726b007f11608539f3ae/distribute-0.6.35.zip","yanked":false,"yanked_reason":null}],"0.6.36":[{"comment_text":"","digests":{"md5":"a923385de72dcdca68cd4ac2b9dc1148","sha256":"2474f9d0706b476ce0e139195cc35b360adb665df968d74d3bab022003d54bc2"},"downloads":-1,"filename":"distribute-0.6.36.tar.gz","has_sig":false,"md5_digest":"a923385de72dcdca68cd4ac2b9dc1148","packagetype":"sdist","python_version":"source","requires_python":null,"size":644713,"upload_time":"2013-04-05T21:14:30","upload_time_iso_8601":"2013-04-05T21:14:30.530516Z","url":"https://files.pythonhosted.org/packages/52/ae/96f7e82c38a5517dae71ae244e3cdcfadfdb3895987a1591b2d19d6f7a9b/distribute-0.6.36.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"bae51e44b82e7d9eca568caaaa997414","sha256":"32b66b45daaf7a8e68895dbfb5457cf8d76b18ed14f0e92123ffdb4f56e70c65"},"downloads":-1,"filename":"distribute-0.6.36.zip","has_sig":false,"md5_digest":"bae51e44b82e7d9eca568caaaa997414","packagetype":"sdist","python_version":"source","requires_python":null,"size":687072,"upload_time":"2016-01-19T00:05:46","upload_time_iso_8601":"2016-01-19T00:05:46.646007Z","url":"https://files.pythonhosted.org/packages/b7/18/1faa307038d6a25a1e05ba1adfe9c67217e456bbacef5a9f0cc567da4ef3/distribute-0.6.36.zip","yanked":false,"yanked_reason":null}],"0.6.37":[{"comment_text":"","digests":{"md5":"be693b2b1888f2eae639dd0becfb2e84","sha256":"5ad9d50eaf871ddda55f68165924124ad81bfd19fc4f0730f0a3a8ca190d58c6"},"downloads":-1,"filename":"distribute-0.6.37.tar.gz","has_sig":false,"md5_digest":"be693b2b1888f2eae639dd0becfb2e84","packagetype":"sdist","python_version":"source","requires_python":null,"size":645766,"upload_time":"2013-05-05T02:17:02","upload_time_iso_8601":"2013-05-05T02:17:02.993913Z","url":"https://files.pythonhosted.org/packages/f3/36/3878909df1720f45ee0b9902e85a24db14542bde438523de10192421e582/distribute-0.6.37.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"80981f866b8ec1d751fb3284af8afb81","sha256":"d6670be471d8158ceff28cfdfa5af77aeae38d0618c5eb0d8710eb8798a1372d"},"downloads":-1,"filename":"distribute-0.6.37.zip","has_sig":false,"md5_digest":"80981f866b8ec1d751fb3284af8afb81","packagetype":"sdist","python_version":"source","requires_python":null,"size":688301,"upload_time":"2016-01-19T00:05:54","upload_time_iso_8601":"2016-01-19T00:05:54.063725Z","url":"https://files.pythonhosted.org/packages/a9/1d/f8b2d90b9deb6072cd6af885b0d006bea3cc0749cbb45b6d6da9b4a8b682/distribute-0.6.37.zip","yanked":false,"yanked_reason":null}],"0.6.38":[{"comment_text":"","digests":{"md5":"a0bc8fdb8b7b36234dcb1ff3d1fc702d","sha256":"e4805005a1983610aa86bf3affd034631163cf9f3caa7f958ae2705b26658229"},"downloads":-1,"filename":"distribute-0.6.38.tar.gz","has_sig":false,"md5_digest":"a0bc8fdb8b7b36234dcb1ff3d1fc702d","packagetype":"sdist","python_version":"source","requires_python":null,"size":645857,"upload_time":"2013-05-05T12:45:30","upload_time_iso_8601":"2013-05-05T12:45:30.555031Z","url":"https://files.pythonhosted.org/packages/44/24/f43cbc3b122aeb27405b4cb4e294535c1bab4c60c86d4846ab5657bfd528/distribute-0.6.38.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"c0ef20833051c0b7e30bbc032960af14","sha256":"122d45874a4cda46273c22031dc937f07eb850a9b882996261521427a8e8f1c2"},"downloads":-1,"filename":"distribute-0.6.38.zip","has_sig":false,"md5_digest":"c0ef20833051c0b7e30bbc032960af14","packagetype":"sdist","python_version":"source","requires_python":null,"size":688398,"upload_time":"2016-01-19T00:06:02","upload_time_iso_8601":"2016-01-19T00:06:02.238436Z","url":"https://files.pythonhosted.org/packages/56/26/745b893435e3c34fa39ca40bec216b1eef82dfef2df2e155f8b56b6603d0/distribute-0.6.38.zip","yanked":false,"yanked_reason":null}],"0.6.39":[{"comment_text":"","digests":{"md5":"b7569b356600d3347828998d55e76fea","sha256":"77d0ca76247ab9217212a0c5c3062cac4002cdeb9e02ce6b39e8a3f5b7c296b4"},"downloads":-1,"filename":"distribute-0.6.39.tar.gz","has_sig":false,"md5_digest":"b7569b356600d3347828998d55e76fea","packagetype":"sdist","python_version":"source","requires_python":null,"size":648136,"upload_time":"2013-05-12T18:32:24","upload_time_iso_8601":"2013-05-12T18:32:24.289851Z","url":"https://files.pythonhosted.org/packages/9a/6c/11f4686ac4305d23b43be59b4ce2cc2c10e00c639472300b13893a754bc7/distribute-0.6.39.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"621f7de8b41ce7a370bc7e996779f901","sha256":"132a373c6ee22054011c9d7a869c6f3e7cfc95b06168d2a04416357b331a2def"},"downloads":-1,"filename":"distribute-0.6.39.zip","has_sig":false,"md5_digest":"621f7de8b41ce7a370bc7e996779f901","packagetype":"sdist","python_version":"source","requires_python":null,"size":696200,"upload_time":"2016-01-19T00:06:17","upload_time_iso_8601":"2016-01-19T00:06:17.488833Z","url":"https://files.pythonhosted.org/packages/f8/4e/3ca573ae5d3baf4e44fa98e5b9ec3c96bf09c869fd8e4a1ab1b47c7c6f32/distribute-0.6.39.zip","yanked":false,"yanked_reason":null}],"0.6.4":[{"comment_text":"","digests":{"md5":"d3f8a22488a798fafc151b906b9bde1c","sha256":"12945da48fb1857c0ef27ba351fa76a1975c11b0d5bc4832895282fcdc4352a2"},"downloads":-1,"filename":"distribute-0.6.4.tar.gz","has_sig":false,"md5_digest":"d3f8a22488a798fafc151b906b9bde1c","packagetype":"sdist","python_version":"source","requires_python":null,"size":523079,"upload_time":"2011-09-22T18:29:00","upload_time_iso_8601":"2011-09-22T18:29:00.091781Z","url":"https://files.pythonhosted.org/packages/dc/b6/95cf18e73df8fc85ddad57ba3b49ab40104267c26edddc28bb5075b4476f/distribute-0.6.4.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"5e70cd25c41c9be559d887731020c2be","sha256":"ce60933f17febe26528b62609b922db4301d4c8d25f02fac155cae339dd1eb12"},"downloads":-1,"filename":"distribute-0.6.4.zip","has_sig":false,"md5_digest":"5e70cd25c41c9be559d887731020c2be","packagetype":"sdist","python_version":"source","requires_python":null,"size":556449,"upload_time":"2016-01-19T00:00:58","upload_time_iso_8601":"2016-01-19T00:00:58.975608Z","url":"https://files.pythonhosted.org/packages/bd/98/111ba95670f9786ba7ef9bb600f250c927335a8cc4033cd54e56762e2979/distribute-0.6.4.zip","yanked":false,"yanked_reason":null}],"0.6.40":[{"comment_text":"","digests":{"md5":"7a2dd4033999af22fe9591fa84f3e599","sha256":"5e06a3097f4150b26e4de0d4f57dbe7425ac3645ce7a337abffab8489bc80daa"},"downloads":-1,"filename":"distribute-0.6.40.tar.gz","has_sig":false,"md5_digest":"7a2dd4033999af22fe9591fa84f3e599","packagetype":"sdist","python_version":"source","requires_python":null,"size":718084,"upload_time":"2013-05-14T08:13:13","upload_time_iso_8601":"2013-05-14T08:13:13.606927Z","url":"https://files.pythonhosted.org/packages/bc/a4/df58ee742593190e4c613f15f1457be7e8408d5c9432fb41e061e0e785f0/distribute-0.6.40.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"254bc9516b8ac4b8c50b32b46d639be0","sha256":"6e1454702a1e2311cf6654b702828a0eecf73afea22e02aefde05c92f15e7280"},"downloads":-1,"filename":"distribute-0.6.40.zip","has_sig":false,"md5_digest":"254bc9516b8ac4b8c50b32b46d639be0","packagetype":"sdist","python_version":"source","requires_python":null,"size":768554,"upload_time":"2016-01-19T00:06:26","upload_time_iso_8601":"2016-01-19T00:06:26.325985Z","url":"https://files.pythonhosted.org/packages/4c/a8/9306aee26830e151e78bbfa44f0fa6d03e79c2ee76270840f05f89171e7f/distribute-0.6.40.zip","yanked":false,"yanked_reason":null}],"0.6.41":[{"comment_text":"","digests":{"md5":"a27bb04f85fd966a0b46b616dfe8b472","sha256":"7ca6e0ca3c76be3c37a9340170e531045700a5db778c5849066e24622e7f9f4b"},"downloads":-1,"filename":"distribute-0.6.41.tar.gz","has_sig":false,"md5_digest":"a27bb04f85fd966a0b46b616dfe8b472","packagetype":"sdist","python_version":"source","requires_python":null,"size":722643,"upload_time":"2013-05-24T13:58:39","upload_time_iso_8601":"2013-05-24T13:58:39.744087Z","url":"https://files.pythonhosted.org/packages/2d/d7/8a90509f92b3fcf9b0b4ea35e5f520b073814ce15d3294360f85761e3f88/distribute-0.6.41.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"d2c3de0d64ab9c36047d3cd095b6ba81","sha256":"41a6c67a5769dd522420534126af8970e9f662f22526b62fe8fed54d426f130a"},"downloads":-1,"filename":"distribute-0.6.41.zip","has_sig":false,"md5_digest":"d2c3de0d64ab9c36047d3cd095b6ba81","packagetype":"sdist","python_version":"source","requires_python":null,"size":770140,"upload_time":"2016-01-19T00:06:36","upload_time_iso_8601":"2016-01-19T00:06:36.101065Z","url":"https://files.pythonhosted.org/packages/9b/df/e30c4a713d145a3b03c4c55abb2bba44026d52a5f30deae7cd0705d6c638/distribute-0.6.41.zip","yanked":false,"yanked_reason":null}],"0.6.42":[{"comment_text":"","digests":{"md5":"53642a6e4a08d99309f1f695b02386bc","sha256":"097e6b62154966b2831f8d5d52a4106708d41f17e0074dc95b456516305b4508"},"downloads":-1,"filename":"distribute-0.6.42.tar.gz","has_sig":false,"md5_digest":"53642a6e4a08d99309f1f695b02386bc","packagetype":"sdist","python_version":"source","requires_python":null,"size":723459,"upload_time":"2013-05-24T20:04:05","upload_time_iso_8601":"2013-05-24T20:04:05.685338Z","url":"https://files.pythonhosted.org/packages/c8/52/c87242dc7f211b0ad4513772a77e9f917933eb3e80c63c3fe5a887c9f62d/distribute-0.6.42.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"d0424741f5aceea13a4e2d11fbeff05d","sha256":"881896b5d895819d6bb894de85a7e6cbd90b3d1f3894441d09d805c4c069ef3c"},"downloads":-1,"filename":"distribute-0.6.42.zip","has_sig":false,"md5_digest":"d0424741f5aceea13a4e2d11fbeff05d","packagetype":"sdist","python_version":"source","requires_python":null,"size":771266,"upload_time":"2016-01-19T00:06:46","upload_time_iso_8601":"2016-01-19T00:06:46.548560Z","url":"https://files.pythonhosted.org/packages/f6/20/ea4efea35549719673ca24987de97339961409f00f26ee04025fd032f2da/distribute-0.6.42.zip","yanked":false,"yanked_reason":null}],"0.6.43":[{"comment_text":"","digests":{"md5":"a216a46dc9bec5835fa3c6041f1c77c2","sha256":"6f9de4b0dc8120180141dd7980057eb7968dad04457ff294efae2fe6e9376fd3"},"downloads":-1,"filename":"distribute-0.6.43.tar.gz","has_sig":false,"md5_digest":"a216a46dc9bec5835fa3c6041f1c77c2","packagetype":"sdist","python_version":"source","requires_python":null,"size":723082,"upload_time":"2013-05-25T00:43:35","upload_time_iso_8601":"2013-05-25T00:43:35.796135Z","url":"https://files.pythonhosted.org/packages/71/df/0fa0a5a64ac62c1fc8f94130795c0f8841a0103c431ea30f0450a4af3b8d/distribute-0.6.43.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"b1451c8c9671fa1751bc4dcefd7a8a65","sha256":"a8a92e9fb14367cea2f2bc4723b3710d7df6be3d0c12c5ae0253f65845ccac5e"},"downloads":-1,"filename":"distribute-0.6.43.zip","has_sig":false,"md5_digest":"b1451c8c9671fa1751bc4dcefd7a8a65","packagetype":"sdist","python_version":"source","requires_python":null,"size":771503,"upload_time":"2016-01-19T00:06:55","upload_time_iso_8601":"2016-01-19T00:06:55.679517Z","url":"https://files.pythonhosted.org/packages/8b/04/0bde724600729d8a2c5df48b04a90c98f5cd366a249629cb54541648df3e/distribute-0.6.43.zip","yanked":false,"yanked_reason":null}],"0.6.44":[{"comment_text":"","digests":{"md5":"3abed5dfa036e6d8bfdbb4ccd272d553","sha256":"1a7de57e6d95c08836ba644b012ace19515824567647e81a3c105b35b6982805"},"downloads":-1,"filename":"distribute-0.6.44.tar.gz","has_sig":false,"md5_digest":"3abed5dfa036e6d8bfdbb4ccd272d553","packagetype":"sdist","python_version":"source","requires_python":null,"size":723244,"upload_time":"2013-05-28T15:19:49","upload_time_iso_8601":"2013-05-28T15:19:49.868834Z","url":"https://files.pythonhosted.org/packages/94/f1/53fee5ab8ee3bd360e30188be3a0f0e277e46c6e1927085985ae37e0cfd1/distribute-0.6.44.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"0ffc600410808e907b57744ad87129fa","sha256":"75dc4e98662c6d0cdb6752d0344c9aab1835284c58188eb374115c17221cbedd"},"downloads":-1,"filename":"distribute-0.6.44.zip","has_sig":false,"md5_digest":"0ffc600410808e907b57744ad87129fa","packagetype":"sdist","python_version":"source","requires_python":null,"size":771662,"upload_time":"2016-01-19T00:07:06","upload_time_iso_8601":"2016-01-19T00:07:06.937062Z","url":"https://files.pythonhosted.org/packages/a0/0b/29fa375b60678ead8d63c33e66001ea4625eca089ddeddc1a998c13dc97d/distribute-0.6.44.zip","yanked":false,"yanked_reason":null}],"0.6.45":[{"comment_text":"","digests":{"md5":"8953f2c07e6700dabf2ec150129b8c31","sha256":"7c0b21329bbd087410ce4be4bf64058c1085a27e5ae5886a52950ff46ab9eb66"},"downloads":-1,"filename":"distribute-0.6.45.tar.gz","has_sig":false,"md5_digest":"8953f2c07e6700dabf2ec150129b8c31","packagetype":"sdist","python_version":"source","requires_python":null,"size":723456,"upload_time":"2013-05-29T11:36:49","upload_time_iso_8601":"2013-05-29T11:36:49.203494Z","url":"https://files.pythonhosted.org/packages/ae/e2/71b808010e2cd5e627706344d0d65df2e2d31d2b52d259f0bcb7b1827bf4/distribute-0.6.45.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"f1d411325db169b5c47b0c6f285c758d","sha256":"d5e510cd44531aed207ea039455a486f2d8291dbf4b0bc7c57deef691586dd85"},"downloads":-1,"filename":"distribute-0.6.45.zip","has_sig":false,"md5_digest":"f1d411325db169b5c47b0c6f285c758d","packagetype":"sdist","python_version":"source","requires_python":null,"size":771943,"upload_time":"2016-01-19T00:07:13","upload_time_iso_8601":"2016-01-19T00:07:13.796507Z","url":"https://files.pythonhosted.org/packages/38/46/63a32f9ccc8724a5e36b6bcde2c2429ead90edbc646f7481a5357a3e1d1c/distribute-0.6.45.zip","yanked":false,"yanked_reason":null}],"0.6.46":[{"comment_text":"","digests":{"md5":"73d21ec34a683af697ceeb5199bf4bef","sha256":"6eed4e5ec5369d91e90c3d16713728b619423b8b02c2526cefb0602c086236c7"},"downloads":-1,"filename":"distribute-0.6.46.tar.gz","has_sig":false,"md5_digest":"73d21ec34a683af697ceeb5199bf4bef","packagetype":"sdist","python_version":"source","requires_python":null,"size":723786,"upload_time":"2013-06-29T14:26:43","upload_time_iso_8601":"2013-06-29T14:26:43.310381Z","url":"https://files.pythonhosted.org/packages/e2/af/422a5b1ebfe6d8f54dcd1d846eaed1c71c85ebaa87d7ed8c22bcc974be99/distribute-0.6.46.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"d9586bbfc029154d4cc1e087d2de2bdd","sha256":"08feb3fb8dc22cd610ecc9674eb014e91bc89fcc6e7156443dbafb6b49d96477"},"downloads":-1,"filename":"distribute-0.6.46.zip","has_sig":false,"md5_digest":"d9586bbfc029154d4cc1e087d2de2bdd","packagetype":"sdist","python_version":"source","requires_python":null,"size":771747,"upload_time":"2016-01-19T00:07:22","upload_time_iso_8601":"2016-01-19T00:07:22.272767Z","url":"https://files.pythonhosted.org/packages/06/b9/74d0d48befa2bd9c32e06b5e69cda4ca5c8293ccb76ad862eaca1657518d/distribute-0.6.46.zip","yanked":false,"yanked_reason":null}],"0.6.47":[{"comment_text":"","digests":{"md5":"bfa191de8c0578eb65212436b73f72c2","sha256":"89bb51db38a69bdd6099a8b487f8365d45e786596076f3f9fe17caa07a846774"},"downloads":-1,"filename":"distribute-0.6.47.tar.gz","has_sig":false,"md5_digest":"bfa191de8c0578eb65212436b73f72c2","packagetype":"sdist","python_version":"source","requires_python":null,"size":723849,"upload_time":"2013-07-02T12:27:25","upload_time_iso_8601":"2013-07-02T12:27:25.573448Z","url":"https://files.pythonhosted.org/packages/b4/f8/92222dccdb72d3b6f43b18ebcb93aa7f46849c44d23a5e98efe53c5eff55/distribute-0.6.47.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"554f9aa8efe56f1d94a607c0ff27d74e","sha256":"22d4920651da97ce023c3ac22b32464b9c6dd2d8d22d447534cfaf41fb2faac0"},"downloads":-1,"filename":"distribute-0.6.47.zip","has_sig":false,"md5_digest":"554f9aa8efe56f1d94a607c0ff27d74e","packagetype":"sdist","python_version":"source","requires_python":null,"size":771853,"upload_time":"2016-01-19T00:07:34","upload_time_iso_8601":"2016-01-19T00:07:34.555378Z","url":"https://files.pythonhosted.org/packages/5d/5f/3938baf3c82179d1850a9ea2c5939377a81d644acccb094d64d1e1118f75/distribute-0.6.47.zip","yanked":false,"yanked_reason":null}],"0.6.48":[{"comment_text":"","digests":{"md5":"8043b862d69b7c553c8899276babd602","sha256":"3b88a8b7eb585718f4647360f2ed80a2eed3c544ec59c641dea4ff29310cd6bc"},"downloads":-1,"filename":"distribute-0.6.48.tar.gz","has_sig":false,"md5_digest":"8043b862d69b7c553c8899276babd602","packagetype":"sdist","python_version":"source","requires_python":null,"size":723799,"upload_time":"2013-07-02T15:42:40","upload_time_iso_8601":"2013-07-02T15:42:40.563075Z","url":"https://files.pythonhosted.org/packages/80/c0/c97660e5e4b13d999d150b1f55d88e3bf7e103a8eebd9d24ef7a2307741c/distribute-0.6.48.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"1da627bccbb1b51b1aee94b3e64de341","sha256":"89d9f1e9c8f9ff3c96c1292f5e4511b3b30462caabafcf7cc1ee7264c6df755f"},"downloads":-1,"filename":"distribute-0.6.48.zip","has_sig":false,"md5_digest":"1da627bccbb1b51b1aee94b3e64de341","packagetype":"sdist","python_version":"source","requires_python":null,"size":771897,"upload_time":"2016-01-19T00:07:47","upload_time_iso_8601":"2016-01-19T00:07:47.855562Z","url":"https://files.pythonhosted.org/packages/8e/5d/a47e0d4891cd8aff83e331440732972661541320e92dbb05e38dd17c29e2/distribute-0.6.48.zip","yanked":false,"yanked_reason":null}],"0.6.49":[{"comment_text":"","digests":{"md5":"89e68df89faf1966bcbd99a0033fbf8e","sha256":"b877a9f155fc13cbf409d4fdbf709d25c24f28dfe3531ecb419eb069bd80e878"},"downloads":-1,"filename":"distribute-0.6.49.tar.gz","has_sig":false,"md5_digest":"89e68df89faf1966bcbd99a0033fbf8e","packagetype":"sdist","python_version":"source","requires_python":null,"size":724005,"upload_time":"2013-07-05T01:59:40","upload_time_iso_8601":"2013-07-05T01:59:40.819770Z","url":"https://files.pythonhosted.org/packages/f3/2b/e97c01487b7636ba3fcff5e73db995c66c524d54d0907d238311524f67c8/distribute-0.6.49.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"2b65b6881f064e9f54d427c8e1f555e7","sha256":"2e6ef91d00784f9680b413e2a2f4d7c1456927cd9a34ebce99448cd4fbf6fbb8"},"downloads":-1,"filename":"distribute-0.6.49.zip","has_sig":false,"md5_digest":"2b65b6881f064e9f54d427c8e1f555e7","packagetype":"sdist","python_version":"source","requires_python":null,"size":772156,"upload_time":"2016-01-19T00:08:08","upload_time_iso_8601":"2016-01-19T00:08:08.054628Z","url":"https://files.pythonhosted.org/packages/67/58/fb1902ce3aee9d868648bb1bb44ca6fdeac04726a6053741bf0485390ec4/distribute-0.6.49.zip","yanked":false,"yanked_reason":null}],"0.6.5":[{"comment_text":"","digests":{"md5":"2545856b22598749581ef8647d352e58","sha256":"e97fea8207f09ef729f21ae2be49a0692d5e0f169945ee89113dbcc0efcd8c4d"},"downloads":-1,"filename":"distribute-0.6.5.tar.gz","has_sig":false,"md5_digest":"2545856b22598749581ef8647d352e58","packagetype":"sdist","python_version":"source","requires_python":null,"size":526528,"upload_time":"2011-09-22T18:29:11","upload_time_iso_8601":"2011-09-22T18:29:11.597775Z","url":"https://files.pythonhosted.org/packages/2a/cd/71002045b4ba17c96e5965459216962bf0a1d2e11262b0831e0abb021d23/distribute-0.6.5.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"be0dad9bd3619dbe818a70e786f41cdc","sha256":"659461027e71c0e501c033a6dd07fd3eda2e68bf4211af8c38ac3062d5f5c6a4"},"downloads":-1,"filename":"distribute-0.6.5.zip","has_sig":false,"md5_digest":"be0dad9bd3619dbe818a70e786f41cdc","packagetype":"sdist","python_version":"source","requires_python":null,"size":561022,"upload_time":"2016-01-19T00:01:15","upload_time_iso_8601":"2016-01-19T00:01:15.341067Z","url":"https://files.pythonhosted.org/packages/b1/de/0332e445bdbb7022852d5a2435c064c167fc4943b76383ad4e30a9d7ca07/distribute-0.6.5.zip","yanked":false,"yanked_reason":null}],"0.6.6":[{"comment_text":"","digests":{"md5":"b7ba298108026fd71f87874be5256d20","sha256":"ca9fcf7477d655f4e72ddbe1a15d1aacb066462e77ff5af0654eeda2c777c922"},"downloads":-1,"filename":"distribute-0.6.6.tar.gz","has_sig":false,"md5_digest":"b7ba298108026fd71f87874be5256d20","packagetype":"sdist","python_version":"source","requires_python":null,"size":526682,"upload_time":"2011-09-22T18:29:28","upload_time_iso_8601":"2011-09-22T18:29:28.860840Z","url":"https://files.pythonhosted.org/packages/f0/f3/f020debdcd692437d235a93194c649273d6a46d815254c366cbf4ed9e029/distribute-0.6.6.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"e10dbc789c34d89e1d57901915e43645","sha256":"b6c545bf6d1ac79ad73ff8d3fb8a6e9cf25bd7393f1cd93d617128cef3d08ecd"},"downloads":-1,"filename":"distribute-0.6.6.zip","has_sig":false,"md5_digest":"e10dbc789c34d89e1d57901915e43645","packagetype":"sdist","python_version":"source","requires_python":null,"size":561258,"upload_time":"2016-01-19T00:01:24","upload_time_iso_8601":"2016-01-19T00:01:24.486155Z","url":"https://files.pythonhosted.org/packages/dd/34/01ceefc58caf5e1b4be0fc917b539bf456c78b77005d201a10306372dddf/distribute-0.6.6.zip","yanked":false,"yanked_reason":null}],"0.6.7":[{"comment_text":"","digests":{"md5":"32f1e942d0186605756e386171c92429","sha256":"0ad2916d5821a2b8adecee3bd2ff03399f7ebe69a7eab2341528089c1e4b77ca"},"downloads":-1,"filename":"distribute-0.6.7.tar.gz","has_sig":false,"md5_digest":"32f1e942d0186605756e386171c92429","packagetype":"sdist","python_version":"source","requires_python":null,"size":381232,"upload_time":"2011-09-22T18:29:40","upload_time_iso_8601":"2011-09-22T18:29:40.157129Z","url":"https://files.pythonhosted.org/packages/c9/db/1c44a07d77ea84886f666a6201db043e979f94c990e6e796e0cf4d57c63d/distribute-0.6.7.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"df9da54c7515f37bbb988c0d74d3cdf2","sha256":"c8ea44c881a0a0c2f29e506800abfa236ea0704dc565ce19c436fd7912952025"},"downloads":-1,"filename":"distribute-0.6.7.zip","has_sig":false,"md5_digest":"df9da54c7515f37bbb988c0d74d3cdf2","packagetype":"sdist","python_version":"source","requires_python":null,"size":420341,"upload_time":"2016-01-19T00:01:32","upload_time_iso_8601":"2016-01-19T00:01:32.026655Z","url":"https://files.pythonhosted.org/packages/0d/7e/82122b2b6371655491ec668737daf5b278efaab082de13adbd100207f6b9/distribute-0.6.7.zip","yanked":false,"yanked_reason":null}],"0.6.8":[{"comment_text":"","digests":{"md5":"f8caf091fbc2d581274bca0c87ec5ea8","sha256":"f75b3a011be311186d1bddfb3cc1767537eb35332fbf1fc19309dd36ebc737bf"},"downloads":-1,"filename":"distribute-0.6.8.tar.gz","has_sig":false,"md5_digest":"f8caf091fbc2d581274bca0c87ec5ea8","packagetype":"sdist","python_version":"source","requires_python":null,"size":381421,"upload_time":"2011-09-22T18:30:01","upload_time_iso_8601":"2011-09-22T18:30:01.075794Z","url":"https://files.pythonhosted.org/packages/f3/ae/7a31bd7a09548f3fc57408837b4a183ff48e60085b5d0f08026e375ebbd0/distribute-0.6.8.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"8da017dc10e48e51310c235f5584b126","sha256":"781a6f1ba19d85d7067b919a6b31b8fff6d0f513581f7586eac60480be0277ce"},"downloads":-1,"filename":"distribute-0.6.8.zip","has_sig":false,"md5_digest":"8da017dc10e48e51310c235f5584b126","packagetype":"sdist","python_version":"source","requires_python":null,"size":420599,"upload_time":"2016-01-19T00:01:38","upload_time_iso_8601":"2016-01-19T00:01:38.872052Z","url":"https://files.pythonhosted.org/packages/f2/ea/f708dba54ba7ad36d6b032554cc45d2ded60df8f806387aff7ea89dfa028/distribute-0.6.8.zip","yanked":false,"yanked_reason":null}],"0.6.9":[{"comment_text":"","digests":{"md5":"2e8bea1ef6f7b972387715cc465d56a9","sha256":"aa59755d040a466fc0bb5b15f5a7ae711994a39723ab23a3b75fa4dcc4986543"},"downloads":-1,"filename":"distribute-0.6.9.tar.gz","has_sig":false,"md5_digest":"2e8bea1ef6f7b972387715cc465d56a9","packagetype":"sdist","python_version":"source","requires_python":null,"size":389380,"upload_time":"2011-09-22T18:30:14","upload_time_iso_8601":"2011-09-22T18:30:14.580650Z","url":"https://files.pythonhosted.org/packages/a9/a1/06b34f4fa52e35059f582572f7de5592744897f88ac488c97a715bfa71c9/distribute-0.6.9.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"ef70bb0efc48cb1d6689cf32e0312c4c","sha256":"e2f411eda7535eb7af0cc032c6e104733c3d3afbd7d79de25b925d740eb9cbd4"},"downloads":-1,"filename":"distribute-0.6.9.zip","has_sig":false,"md5_digest":"ef70bb0efc48cb1d6689cf32e0312c4c","packagetype":"sdist","python_version":"source","requires_python":null,"size":424999,"upload_time":"2016-01-19T00:01:48","upload_time_iso_8601":"2016-01-19T00:01:48.635990Z","url":"https://files.pythonhosted.org/packages/e8/1f/746778ad7044fe4767a3e3122ad75d0487441342ae00940d2b333f53c03f/distribute-0.6.9.zip","yanked":false,"yanked_reason":null}],"0.7.3":[{"comment_text":"","digests":{"md5":"c6c59594a7b180af57af8a0cc0cf5b4a","sha256":"3dc7a8d059dcf72f0ead2fa2144a24ee0ef07dce816e8c3545d7345767138c5e"},"downloads":-1,"filename":"distribute-0.7.3.zip","has_sig":false,"md5_digest":"c6c59594a7b180af57af8a0cc0cf5b4a","packagetype":"sdist","python_version":"source","requires_python":null,"size":145378,"upload_time":"2013-07-05T18:19:57","upload_time_iso_8601":"2013-07-05T18:19:57.876141Z","url":"https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip","yanked":false,"yanked_reason":null}]},"urls":[{"comment_text":"","digests":{"md5":"8a5c36afe934ef90ce2da15a1c557128","sha256":"85b05942f84146d8f0ed17906b90af7662d649b922fe77a8c402da5da258a481"},"downloads":-1,"filename":"distribute-0.6.15.tar.gz","has_sig":false,"md5_digest":"8a5c36afe934ef90ce2da15a1c557128","packagetype":"sdist","python_version":"source","requires_python":null,"size":397027,"upload_time":"2011-09-22T18:32:37","upload_time_iso_8601":"2011-09-22T18:32:37.570852Z","url":"https://files.pythonhosted.org/packages/07/a6/8f6b270b7e6a1be3df78b174e2437fdb631cfcce16f82c2f8b7affb50ee2/distribute-0.6.15.tar.gz","yanked":false,"yanked_reason":null},{"comment_text":"","digests":{"md5":"86ca2e0a13621a9b742246b2509602a2","sha256":"a6cba0f43a70dceab680ba475df2a451b53257e5dc3267323c2a666c1673a31b"},"downloads":-1,"filename":"distribute-0.6.15.zip","has_sig":false,"md5_digest":"86ca2e0a13621a9b742246b2509602a2","packagetype":"sdist","python_version":"source","requires_python":null,"size":435492,"upload_time":"2016-01-19T00:02:50","upload_time_iso_8601":"2016-01-19T00:02:50.500500Z","url":"https://files.pythonhosted.org/packages/7f/00/9219235d4222c3da6729e6e2afa4a9080b987169bab3b2ec6cbb7c2e86da/distribute-0.6.15.zip","yanked":false,"yanked_reason":null}]}
pyroma-4.2/pyroma/testdata/lacking/000077500000000000000000000000001456340716600174325ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/lacking/lacking/000077500000000000000000000000001456340716600210425ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/lacking/lacking/__init__.py000066400000000000000000000000001456340716600231410ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/lacking/setup.cfg000066400000000000000000000000651456340716600212540ustar00rootroot00000000000000[egg_info]
tag_build = .dev1
tag_svn_revision = true
pyroma-4.2/pyroma/testdata/lacking/setup.py000066400000000000000000000002101456340716600211350ustar00rootroot00000000000000from setuptools import setup

version = "1.0"

setup(name="lacking", version=version, long_description="``error", packages=["lacking"])
pyroma-4.2/pyroma/testdata/minimal/000077500000000000000000000000001456340716600174505ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/minimal/minimal/000077500000000000000000000000001456340716600210765ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/minimal/minimal/__init__.py000066400000000000000000000000001456340716600231750ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/minimal/setup.cfg000066400000000000000000000000651456340716600212720ustar00rootroot00000000000000[egg_info]
tag_build = .dev1
tag_svn_revision = true
pyroma-4.2/pyroma/testdata/minimal/setup.py000066400000000000000000000007271456340716600211700ustar00rootroot00000000000000from setuptools import setup, find_packages

version = "0.0.1"

setup(
    name="minimal",
    version=version,
    description="Test",
    classifiers=[],
    keywords="",
    author="",
    author_email="",
    url="",
    license="",
    packages=find_packages(exclude=["ez_setup", "examples", "tests"]),
    include_package_data=True,
    install_requires=[
        # -*- Extra requirements: -*-
    ],
    entry_points="""
      # -*- Entry points: -*-
      """,
)
pyroma-4.2/pyroma/testdata/only_config/000077500000000000000000000000001456340716600203305ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/only_config/README.txt000066400000000000000000000024461456340716600220340ustar00rootroot00000000000000Complete
========

This is a test package for pyroma that is supposed to have a complete
set of metadata and also runnable tests. It should score the maximum possible
on package tests.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at
dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget
velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam
nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla
nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin
orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing
velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac
ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus
nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis
interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit
ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et
dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed
ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit
posuere id dignissim massa molestie.
pyroma-4.2/pyroma/testdata/only_config/only_config/000077500000000000000000000000001456340716600226365ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/only_config/only_config/__init__.py000066400000000000000000000000001456340716600247350ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/only_config/setup.cfg000066400000000000000000000012071456340716600221510ustar00rootroot00000000000000[metadata]
name = only_config
version = 1.0
description = This is a test package for pyroma
long_description = file: README.txt
author = Lennart Regebro
author_email = regebro@gmail.com
url = https://github.com/regebro/pyroma
classifiers =
    Development Status :: 6 - Mature
    Operating System :: OS Independent
    Programming Language :: Python :: 2.6
    Programming Language :: Python :: 2.7
    Programming Language :: Python :: 3.1
    Programming Language :: Python :: 3.2
    Programming Language :: Python :: 3.3
    License :: OSI Approved :: MIT License
keywords =
    pypi
    quality
    example
[options]
python_requires = >=2.6
pyroma-4.2/pyroma/testdata/pep517/000077500000000000000000000000001456340716600170435ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/pep517/README.txt000066400000000000000000000024461456340716600205470ustar00rootroot00000000000000Complete
========

This is a test package for pyroma that is supposed to have a complete
set of metadata and also runnable tests. It should score the maximum possible
on package tests.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at
dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget
velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam
nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla
nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin
orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing
velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac
ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus
nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis
interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit
ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et
dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed
ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit
posuere id dignissim massa molestie.
pyroma-4.2/pyroma/testdata/pep517/only_config/000077500000000000000000000000001456340716600213515ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/pep517/only_config/__init__.py000066400000000000000000000000001456340716600234500ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/pep517/pyproject.toml000066400000000000000000000001251456340716600217550ustar00rootroot00000000000000[build-system]
requires = ["setuptools>=42"]
build-backend = "setuptools.build_meta"
pyroma-4.2/pyroma/testdata/pep517/setup.cfg000066400000000000000000000012021456340716600206570ustar00rootroot00000000000000[metadata]
name = pep517
version = 1.0
description = This is a test package for pyroma
long_description = file: README.txt
author = Lennart Regebro
author_email = regebro@gmail.com
url = https://github.com/regebro/pyroma
classifiers =
    Development Status :: 6 - Mature
    Operating System :: OS Independent
    Programming Language :: Python :: 2.6
    Programming Language :: Python :: 2.7
    Programming Language :: Python :: 3.1
    Programming Language :: Python :: 3.2
    Programming Language :: Python :: 3.3
    License :: OSI Approved :: MIT License
keywords =
    pypi
    quality
    example
[options]
python_requires = >=2.6
pyroma-4.2/pyroma/testdata/pep621/000077500000000000000000000000001456340716600170375ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/pep621/README.txt000066400000000000000000000024461456340716600205430ustar00rootroot00000000000000Complete
========

This is a test package for pyroma that is supposed to have a complete
set of metadata and also runnable tests. It should score the maximum possible
on package tests.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at
dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget
velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam
nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla
nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin
orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing
velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac
ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus
nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis
interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit
ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et
dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed
ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit
posuere id dignissim massa molestie.
pyroma-4.2/pyroma/testdata/pep621/pyproject.toml000066400000000000000000000015121456340716600217520ustar00rootroot00000000000000[build-system]
requires = ["flit_core >=3.4,<4"]
build-backend = "flit_core.buildapi"

[project]
name = "pyroma_pep621_test_pkg"
version = "1.0"
description = "This is a test package for pyroma"
readme = "README.txt"
authors = [{name = "Lennart Regebro", email = "regebro@gmail.com"}]
classifiers = [
    "Development Status :: 6 - Mature",
    "Operating System :: OS Independent",
    "Programming Language :: Python :: 2.6",
    "Programming Language :: Python :: 2.7",
    "Programming Language :: Python :: 3.1",
    "Programming Language :: Python :: 3.2",
    "Programming Language :: Python :: 3.3",
    "License :: OSI Approved :: MIT License",
]
keywords = [
    "pypi",
    "quality",
    "example",
]
urls = {Homepage = "https://github.com/regebro/pyroma"}
requires-python = ">3.8"

[tool.setuptools]
include-package-data = false
pyroma-4.2/pyroma/testdata/pep621/pyroma_pep621_test_pkg/000077500000000000000000000000001456340716600233435ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/pep621/pyroma_pep621_test_pkg/__init__.py000066400000000000000000000001001456340716600254430ustar00rootroot00000000000000"""This is a test package for pyroma."""

__version__ = "1.0.0"
pyroma-4.2/pyroma/testdata/setup_config/000077500000000000000000000000001456340716600205075ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/setup_config/README.txt000066400000000000000000000024461456340716600222130ustar00rootroot00000000000000Complete
========

This is a test package for pyroma that is supposed to have a complete
set of metadata and also runnable tests. It should score the maximum possible
on package tests.

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at
dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget
velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam
nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla
nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin
orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing
velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac
ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus
nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis
interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit
ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et
dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum
dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed
ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit
posuere id dignissim massa molestie.
pyroma-4.2/pyroma/testdata/setup_config/setup.cfg000066400000000000000000000012201456340716600223230ustar00rootroot00000000000000[metadata]
name = only_config
version = 1.0
description = This is a test package for pyroma
long_description = file: README.txt
author = Lennart Regebro
author_email = regebro@gmail.com
url = https://github.com/regebro/pyroma
classifiers =
    Development Status :: 6 - Mature
    Operating System :: OS Independent
    Programming Language :: Python :: 2.6
    Programming Language :: Python :: 2.7
    Programming Language :: Python :: 3.1
    Programming Language :: Python :: 3.2
    Programming Language :: Python :: 3.3
    License :: OSI Approved :: MIT License
keywords =
    pypi
    quality
    example
[options]
python_requires = >=2.6, !=3.1.*
pyroma-4.2/pyroma/testdata/setup_config/setup.py000066400000000000000000000000461456340716600222210ustar00rootroot00000000000000import setuptools

setuptools.setup()
pyroma-4.2/pyroma/testdata/setup_config/setup_config/000077500000000000000000000000001456340716600231745ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/setup_config/setup_config/__init__.py000066400000000000000000000000001456340716600252730ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/xmlrpcdata/000077500000000000000000000000001456340716600201615ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/xmlrpcdata/complete/000077500000000000000000000000001456340716600217715ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/xmlrpcdata/complete/1.0.dev1.html000066400000000000000000001437021456340716600240220ustar00rootroot00000000000000








  
    
    
    

    
    



    xmldiff · PyPI
    

    
    
    
    
    
    
    



    

    
    

    


    
    
    
    
    
    

    


    

    


    
    
  

  


    
    Skip to main content

    

    

Tree 2 tree correction between xml documents. Extract differences between two xml files. It returns a set of primitives to apply on source tree to obtain the destination tree.

Project description

https://travis-ci.org/Shoobx/xmldiff.png?branch=master https://coveralls.io/repos/github/Shoobx/xmldiff/badge.svg?branch=master

Xmldiff is a utility for extracting differences between two xml files. It returns a set of primitives to apply on source tree to obtain the destination tree.

The implementation is based on Change detection in hierarchically structured information, by S. Chawathe, A. Rajaraman, H. Garcia-Molina and J. Widom, Stanford University, 1996

Installation

To install the latest release:

pip install xmldiff

To install the development version:

git clone https://github.com/Shoobx/xmldiff.git
cd xmldiff
virtualenv ./.venv
./.venv/bin/python setup.py install

Then to compare two given XML files:

./.venv/bin/xmldiff 1.xml 2.xml

Running tests

To run the test suite for all python versions:

tox

CHANGES

1.1.1 (2018-06-20)

  • When moving attributes the secondary rename action xpath was ‘//LogilabXmldiffTmpAttr<attrib>’ which is a tag specification. Changed this to ‘//@LogilabXmldiffTmpAttr<attrib>’, so an attribute is specified.

1.1.0 (2018-06-15)

  • When using namespaces, the returned xpaths are now in the form ns_prefix:tag instead of the earlier {ns_uri}tag, which isn’t correct xpaths.

1.0.0 (2018-04-13)

  • pep8 cleanup, added flake8 checking to tox

1.0.0a6 (2018-04-12)

  • Removed encoding, because python does unicode just fine
  • Switched on namespace handling for XML input

1.0.0a5 (2018-04-11)

  • Brownbag release to make up for bad previous ones.

1.0.0a2 (2018-04-11)

  • Temporary disabling of encoding text (hopefully permanent).
  • Reverted bug fix: Do not remove newlines from text while parsing the XML.

1.0.0a1 (2018-04-10)

  • Bug: Fix a off-by-one issue with insert-after action.
  • Bug: Do not rename children on text node updates.
  • Bug: Text moves were not recorded as part of the fmes edit script.
  • Remove only partially implemented xmlrev script.
  • Removed support for xupdate, which never became a standard.
  • Removed deprecated ezs optional algorithm.
  • Removed support for Debian and RedHat packaging.
  • Removed Windows support
  • LOTS of package cleanup (setup.py, MANIFEST, proper console script, etc)
  • tests moved to py.test and cleaned, added tox, travis, coverage support

0.6.10 (2010-08-27)

  • apply Daiki Ueno patch: fails when comparing minimal trees on i386

0.6.9 (2009-04-02)

  • Fixed xmldiff-xmlrev compilation error

0.6.8 (2006-06-15)

  • Fixed 64bit cleanness issues

0.6.7 (2005-05-04)

  • WARNING: xmldiff is no longer a logilab subpackage. Users may have to manually remove the old logilab/xmldiff directory.
  • fixed debian bug #275750, also reported by Christopher R Newman on the xml-projects mailing list
  • fixed –profile option, wrap function from maplookup when profiling so that they appear in the profile information
  • fixed setup.py to ignore the xmlrev shell script under windows platforms
  • small improvements (remove recursion in object.py, minor enhancement in mydifflib.py, rewrite of lcs4 in C)

0.6.6 (2004-12-23)

  • Applied patch by Bastian Kleineidam <calvin@debian.org> which

    • corrects the typo in ML_DIR
    • fixes the TMPFILE_XSLT/TMPFILE_XSL typo
    • makes sure the files are XML or SGML files, else prints an error
    • adds various missing quotes around filenames which could have spaces or begin with a hyphen
    • fixes typos in the usage() function

    Thanks a lot, Bastian.

  • Fixed some problems in the xmlrev.xslt stylesheet

  • Fixed problems in xmlrev caused by the exit status of xmldiff when successful

  • Added a man page for xmldiff and xmlrev

0.6.5 (2004-09-02)

  • xmlrev bugfixes
  • Fixed packaging problems (missing xsl stylesheets and MANIFEST file)

0.6.4 (2003-10-02)

  • fix recursive mode
  • rewrite regression test, add test for the recursive mode
  • add –help option to xlmrev
  • packaging fixes
  • turn API.txt and HELP.txt to correct ReST

0.6.3 (2002-11-06)

  • fix wrong xpath for attributes
  • fix bug with temporary duplicate attribute node
  • fix for xupdate
  • fix ext_pes option bug
  • update changelog to new format

0.6.2 (2002-09-23)

  • return number of differences on command line
  • reintroduce misc.list_print which caused recursive mode to fail
  • use psyco if available (http://psyco.sf.net)
  • little changes in C extension

0.6.1 (2002-08-29)

  • fix packaging problems

0.6.0 (2002-08-23)

  • change of the internal representation
  • remove support for the EZS algorithm (no more maintened for the moment)
  • add command line options to parse html and to control entities inclusion and output encoding
  • fixing coalescing text nodes bug
  • many other bugs fixes
  • great speed improvement

0.5.3 (2002-01-31)

  • add __init__.py in “logilab” directory

0.5.2 (2001-10-29)

  • bug fixes in xupdate formatting and in the dom interface.

0.5.1 (2001-09-07)

  • Fast Match / Edit Scritp algorithm, now fully usable
  • fixes Unicode problem

0.2.1 (2001-08-10)

  • bug fixes, optimizations for ezs algorithm

0.1.1 (2001-08-04)

  • original revision

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
xmldiff-1.1.1.tar.gz (39.5 kB) Copy SHA256 hash SHA256 Source None Jun 20, 2018
pyroma-4.2/pyroma/testdata/xmlrpcdata/completedata.py000066400000000000000000000071721456340716600232040ustar00rootroot00000000000000from datetime import datetime args = ("https://pypi.org/pypi",) kw = {} data = { "package_releases": {("complete",): ["1.0.dev1"]}, "release_data": { ("complete", "1.0.dev1"): { "maintainer": None, "requires_python": None, "maintainer_email": None, "cheesecake_code_kwalitee_id": None, "keywords": ["pypi", "quality", "example"], "package_url": "http://pypi.org/project/complete", "author": "Lennart Regebro", "author_email": "regebro@gmail.com", "download_url": "UNKNOWN", "platform": "UNKNOWN", "version": "1.0.dev1", "cheesecake_documentation_id": None, "_pypi_hidden": False, "description": """Complete ======== This is a test package for pyroma that is supposed to have a complete set of metadata and also runnable tests. It should score the maximum possible on package tests. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed porttitor, neque at dignissim condimentum, libero est dictum dolor, sit amet tempor urna diam eget velit. Suspendisse at odio quam, ut vestibulum ipsum. Nulla facilisi. Nullam nunc dolor, tempus in vulputate id, fringilla eget metus. Pellentesque nulla nisl, imperdiet ac vulputate non, commodo tincidunt purus. Aenean sollicitudin orci eget diam dignissim scelerisque. Donec quis neque nisl, eu adipiscing velit. Aenean convallis ante sapien. Etiam vitae viverra libero. Nullam ac ligula erat. Aliquam pellentesque, est eget faucibus pharetra, urna orci rhoncus nisi, adipiscing elementum libero lectus ut odio. Duis tincidunt mi quam, quis interdum enim. Nunc sed urna urna, id lacinia turpis. Quisque malesuada, velit ut tincidunt lacinia, dolor augue varius velit, in ultrices lectus enim et dolor. Fusce augue eros, aliquet ac dapibus at, tincidunt vitae leo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus sapien neque, fermentum sed ultrices sit amet, fermentum nec est. Pellentesque imperdiet enim nec velit posuere id dignissim massa molestie.""", "release_url": "http://pypi.org/project/distribute/1.0.dev1", "_pypi_ordering": 115, "classifiers": [ "Development Status :: 6 - Mature", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "License :: OSI Approved :: MIT License", ], "name": "complete", "license": "MIT", "summary": "This is a test package for pyroma.", "home_page": "https://github.com/regebro/pyroma", "stable_version": None, "cheesecake_installability_id": None, } }, "release_urls": { ("complete", "1.0.dev1"): [ { "has_sig": False, "upload_time": datetime(2011, 3, 16, 16, 31, 39), "comment_text": "", "python_version": "source", "url": "http://pypi.python.org/packages/source/c/complete/complete-1.0.dev1.tar.gz", "md5_digest": "ea52e1412e7ff560c290266ed400e216", "downloads": 0, "filename": "complete-1.0.dev1.tar.gz", "packagetype": "sdist", "size": 289103, } ] }, "package_roles": {("complete",): [["Owner", "someone"], ["Owner", "me"], ["Owner", "other"]]}, } pyroma-4.2/pyroma/testdata/xmlrpcdata/distribute/000077500000000000000000000000001456340716600223375ustar00rootroot00000000000000pyroma-4.2/pyroma/testdata/xmlrpcdata/distribute/0.6.15.html000066400000000000000000001307061456340716600237630ustar00rootroot00000000000000 Python Package Index : distribute 0.6.15

skip to navigation
skip to content

distribute 0.6.15

Easily download, build, install, upgrade, and uninstall Python packages

Downloads ↓ | Package Documentation

Installing and Using Distribute

Disclaimers

About the fork

Distribute is a fork of the Setuptools project.

Distribute is intended to replace Setuptools as the standard method for working with Python module distributions.

The fork has two goals:

  • Providing a backward compatible version to replace Setuptools and make all distributions that depend on Setuptools work as before, but with less bugs and behaviorial issues.

    This work is done in the 0.6.x series.

    Starting with version 0.6.2, Distribute supports Python 3. Installing and using distribute for Python 3 code works exactly the same as for Python 2 code, but Distribute also helps you to support Python 2 and Python 3 from the same source code by letting you run 2to3 on the code as a part of the build process, by setting the keyword parameter use_2to3 to True. See http://packages.python.org/distribute for more information.

  • Refactoring the code, and releasing it in several distributions. This work is being done in the 0.7.x series but not yet released.

The roadmap is still evolving, and the page that is up-to-date is located at : http://packages.python.org/distribute/roadmap.

If you install Distribute and want to switch back for any reason to Setuptools, get to the Uninstallation instructions section.

More documentation

You can get more information in the Sphinx-based documentation, located at http://packages.python.org/distribute. This documentation includes the old Setuptools documentation that is slowly replaced, and brand new content.

About the installation process

The Distribute installer modifies your installation by de-activating an existing installation of Setuptools in a bootstrap process. This process has been tested in various installation schemes and contexts but in case of a bug during this process your Python installation might be left in a broken state. Since all modified files and directories are copied before the installation starts, you will be able to get back to a normal state by reading the instructions in the Uninstallation instructions section.

In any case, it is recommended to save you site-packages directory before you start the installation of Distribute.

Installation Instructions

Distribute is only released as a source distribution.

It can be installed using pip, and can be done so with the source tarball, or by using the distribute_setup.py script provided online.

distribute_setup.py is the simplest and preferred way on all systems.

distribute_setup.py

Download distribute_setup.py and execute it, using the Python interpreter of your choice.

If your shell has the curl program you can do:

$ curl -O http://python-distribute.org/distribute_setup.py
$ python distribute_setup.py

Notice this file is also provided in the source release.

pip

Run easy_install or pip:

$ pip install distribute

Source installation

Download the source tarball, uncompress it, then run the install command:

$ curl -O http://pypi.python.org/packages/source/d/distribute/distribute-0.6.15.tar.gz
$ tar -xzvf distribute-0.6.15.tar.gz
$ cd distribute-0.6.15
$ python setup.py install

Uninstallation Instructions

Like other distutils-based distributions, Distribute doesn't provide an uninstaller yet. It's all done manually! We are all waiting for PEP 376 support in Python.

Distribute is installed in three steps:

  1. it gets out of the way an existing installation of Setuptools
  2. it installs a fake setuptools installation
  3. it installs distribute

Distribute can be removed like this:

  • remove the distribute*.egg file located in your site-packages directory
  • remove the setuptools.pth file located in you site-packages directory
  • remove the easy_install script located in you sys.prefix/bin directory
  • remove the setuptools*.egg directory located in your site-packages directory, if any.

If you want to get back to setuptools:

  • reinstall setuptools using its instruction.

Lastly:

  • remove the .OLD. directory located in your site-packages directory if any, once you have checked everything was working correctly again.

Quick help for developers

To create an egg which is compatible with Distribute, use the same practice as with Setuptools, e.g.:

from setuptools import setup

setup(...
)

To use pkg_resources to access data files in the egg, you should require the Setuptools distribution explicitly:

from setuptools import setup

setup(...
    install_requires=['setuptools']
)

Only if you need Distribute-specific functionality should you depend on it explicitly. In this case, replace the Setuptools dependency:

from setuptools import setup

setup(...
    install_requires=['distribute']
)

Install FAQ

  • Why is Distribute wrapping my Setuptools installation?

    Since Distribute is a fork, and since it provides the same package and modules, it renames the existing Setuptools egg and inserts a new one which merely wraps the Distribute code. This way, full backwards compatibility is kept for packages which rely on the Setuptools modules.

    At the same time, packages can meet their dependency on Setuptools without actually installing it (which would disable Distribute).

  • How does Distribute interact with virtualenv?

    Everytime you create a virtualenv it will install setuptools by default. You either need to re-install Distribute in it right after or pass the --distribute option when creating it.

    Once installed, your virtualenv will use Distribute transparently.

    Although, if you have Setuptools installed in your system-wide Python, and if the virtualenv you are in was generated without the --no-site-packages option, the Distribute installation will stop.

    You need in this case to build a virtualenv with the --no-site-packages option or to install Distribute globally.

  • How does Distribute interacts with zc.buildout?

    You can use Distribute in your zc.buildout, with the --distribute option, starting at zc.buildout 1.4.2:

    $ python bootstrap.py --distribute
    

    For previous zc.buildout versions, the only thing you need to do is use the bootstrap at http://python-distribute.org/bootstrap.py. Run that bootstrap and bin/buildout (and all other buildout-generated scripts) will transparently use distribute instead of setuptools. You do not need a specific buildout release.

    A shared eggs directory is no problem (since 0.6.6): the setuptools egg is left in place unmodified. So other buildouts that do not yet use the new bootstrap continue to work just fine. And there is no need to list distribute somewhere in your eggs: using the bootstrap is enough.

    The source code for the bootstrap script is located at http://bitbucket.org/tarek/buildout-distribute.

CHANGES

0.6.15

  • Fixed typo in bdist_egg
  • Several issues under Python 3 has been solved.
  • Issue 146: Fixed missing DLL files after easy_install of windows exe package.

0.6.14

  • Issue 170: Fixed unittest failure. Thanks to Toshio.
  • Issue 171: Fixed race condition in unittests cause deadlocks in test suite.
  • Issue 143: Fixed a lookup issue with easy_install. Thanks to David and Zooko.
  • Issue 174: Fixed the edit mode when its used with setuptools itself

0.6.13

  • Issue 160: 2.7 gives ValueError("Invalid IPv6 URL")
  • Issue 150: Fixed using ~/.local even in a --no-site-packages virtualenv
  • Issue 163: scan index links before external links, and don't use the md5 when comparing two distributions

0.6.12

  • Issue 149: Fixed various failures on 2.3/2.4

0.6.11

  • Found another case of SandboxViolation - fixed
  • Issue 15 and 48: Introduced a socket timeout of 15 seconds on url openings
  • Added indexsidebar.html into MANIFEST.in
  • Issue 108: Fixed TypeError with Python3.1
  • Issue 121: Fixed --help install command trying to actually install.
  • Issue 112: Added an os.makedirs so that Tarek's solution will work.
  • Issue 133: Added --no-find-links to easy_install
  • Added easy_install --user
  • Issue 100: Fixed develop --user not taking '.' in PYTHONPATH into account
  • Issue 134: removed spurious UserWarnings. Patch by VanLindberg
  • Issue 138: cant_write_to_target error when setup_requires is used.
  • Issue 147: respect the sys.dont_write_bytecode flag

0.6.10

  • Reverted change made for the DistributionNotFound exception because zc.buildout uses the exception message to get the name of the distribution.

0.6.9

  • Issue 90: unknown setuptools version can be added in the working set
  • Issue 87: setupt.py doesn't try to convert distribute_setup.py anymore Initial Patch by arfrever.
  • Issue 89: added a side bar with a download link to the doc.
  • Issue 86: fixed missing sentence in pkg_resources doc.
  • Added a nicer error message when a DistributionNotFound is raised.
  • Issue 80: test_develop now works with Python 3.1
  • Issue 93: upload_docs now works if there is an empty sub-directory.
  • Issue 70: exec bit on non-exec files
  • Issue 99: now the standalone easy_install command doesn't uses a "setup.cfg" if any exists in the working directory. It will use it only if triggered by install_requires from a setup.py call (install, develop, etc).
  • Issue 101: Allowing os.devnull in Sandbox
  • Issue 92: Fixed the "no eggs" found error with MacPort (platform.mac_ver() fails)
  • Issue 103: test_get_script_header_jython_workaround not run anymore under py3 with C or POSIX local. Contributed by Arfrever.
  • Issue 104: remvoved the assertion when the installation fails, with a nicer message for the end user.
  • Issue 100: making sure there's no SandboxViolation when the setup script patches setuptools.

0.6.8

  • Added "check_packages" in dist. (added in Setuptools 0.6c11)
  • Fixed the DONT_PATCH_SETUPTOOLS state.

0.6.7

  • Issue 58: Added --user support to the develop command
  • Issue 11: Generated scripts now wrap their call to the script entry point in the standard "if name == 'main'"
  • Added the 'DONT_PATCH_SETUPTOOLS' environment variable, so virtualenv can drive an installation that doesn't patch a global setuptools.
  • Reviewed unladen-swallow specific change from http://code.google.com/p/unladen-swallow/source/detail?spec=svn875&r=719 and determined that it no longer applies. Distribute should work fine with Unladen Swallow 2009Q3.
  • Issue 21: Allow PackageIndex.open_url to gracefully handle all cases of a httplib.HTTPException instead of just InvalidURL and BadStatusLine.
  • Removed virtual-python.py from this distribution and updated documentation to point to the actively maintained virtualenv instead.
  • Issue 64: use_setuptools no longer rebuilds the distribute egg every time it is run
  • use_setuptools now properly respects the requested version
  • use_setuptools will no longer try to import a distribute egg for the wrong Python version
  • Issue 74: no_fake should be True by default.
  • Issue 72: avoid a bootstrapping issue with easy_install -U

0.6.6

  • Unified the bootstrap file so it works on both py2.x and py3k without 2to3 (patch by Holger Krekel)

0.6.5

  • Issue 65: cli.exe and gui.exe are now generated at build time, depending on the platform in use.
  • Issue 67: Fixed doc typo (PEP 381/382)
  • Distribute no longer shadows setuptools if we require a 0.7-series setuptools. And an error is raised when installing a 0.7 setuptools with distribute.
  • When run from within buildout, no attempt is made to modify an existing setuptools egg, whether in a shared egg directory or a system setuptools.
  • Fixed a hole in sandboxing allowing builtin file to write outside of the sandbox.

0.6.4

0.6.3

setuptools

  • Fixed a bunch of calls to file() that caused crashes on Python 3.

bootstrapping

  • Fixed a bug in sorting that caused bootstrap to fail on Python 3.

0.6.2

setuptools

bootstrapping

0.6.1

setuptools

bootstrapping

0.6

setuptools

pkg_resources

easy_install

 
File Type Py Version Uploaded on Size # downloads
distribute-0.6.15.tar.gz (md5) Source 2011-03-16 282KB 973
Rate this release: 0 5 (best)
Review: (Please use the package's bug reporting channels
(trackers, mailing lists) for bug reports and requests for help
)
pyroma-4.2/pyroma/testdata/xmlrpcdata/distributedata.py000066400000000000000000000057701456340716600235540ustar00rootroot00000000000000from datetime import datetime args = ("https://pypi.org/pypi",) kw = {} data = { "package_releases": {("distribute",): ["0.6.15"]}, "release_data": { ("distribute", "0.6.15"): { "maintainer": None, "requires_python": None, "maintainer_email": None, "cheesecake_code_kwalitee_id": None, "keywords": "CPAN PyPI distutils eggs package management", "package_url": "http://pypi.org/project/distribute", "author": "The fellowship of the packaging", "author_email": "distutils-sig@python.org", "download_url": "UNKNOWN", "platform": "UNKNOWN", "version": "0.6.15", "cheesecake_documentation_id": None, "_pypi_hidden": False, "description": """=============================== Installing and Using Distribute =============================== .. contents:: **Table of Contents** ----------- Disclaimers ----------- This is an example of a long_description ======================================== It doesn't need to be much longer than this, I think. """, "release_url": "http://pypi.org/project/distribute/0.6.15", "_pypi_ordering": 115, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: Python Software Foundation License", "License :: OSI Approved :: Zope Public License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Archiving :: Packaging", "Topic :: System :: Systems Administration", "Topic :: Utilities", ], "name": "distribute", "license": "PSF or ZPL", "summary": "Easily download, build, install, upgrade, and uninstall Python packages", "home_page": "http://packages.python.org/distribute", "stable_version": None, "cheesecake_installability_id": None, } }, "release_urls": { ("distribute", "0.6.15"): [ { "has_sig": False, "upload_time": datetime(2011, 3, 16, 16, 31, 39), "comment_text": "", "python_version": "source", "url": "http://pypi.python.org/packages/source/d/distribute/distribute-0.6.15.tar.gz", "md5_digest": "ea52e1412e7ff560c290266ed400e216", "downloads": 0, "filename": "distribute-0.6.15.tar.gz", "packagetype": "sdist", "size": 289103, } ] }, "package_roles": { ("distribute",): [ ["Owner", "someone"], ["Owner", "me"], ["Maintainer", "other"], ] }, } pyroma-4.2/pyroma/tests.py000066400000000000000000000310701456340716600157260ustar00rootroot00000000000000import io import json import os import unittest import unittest.mock from pkg_resources import resource_filename, resource_string from xmlrpc import client as xmlrpclib from pyroma import projectdata, distributiondata, pypidata from pyroma.ratings import rate long_description = resource_string(__name__, os.path.join("testdata", "complete", "README.txt")) if not isinstance(long_description, str): long_description = long_description.decode() # Translate newlines to universal format long_description = io.StringIO(long_description, newline=None).read() COMPLETE = { "metadata_version": "2.1", "name": "complete", "version": "1.0.dev1", "description": "This is a test package for pyroma.", "long_description": long_description, "classifiers": [ "Development Status :: 6 - Mature", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.1", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "License :: OSI Approved :: MIT License", ], "keywords": "pypi,quality,example", "author": "Lennart Regebro", "author_email": "regebro@gmail.com", "url": "https://github.com/regebro/pyroma", "project_urls": "Source Code, https://github.com/regebro/pyroma", "requires_dist": "zope.event", "python_requires": ">=2.6", "license": "MIT", } class ProxyStub: def set_debug_context(self, dataname, real_class, developmode): filename = resource_filename(__name__, os.path.join("testdata", "xmlrpcdata", dataname)) data = {} with open(filename, encoding="UTF-8") as f: exec(f.read(), None, data) self.args = data["args"] self.kw = data["kw"] self._data = data["data"] if developmode: self._real = real_class(*self.args, **self.kw) else: self._real = None def __call__(self, *args, **kw): assert args == self.args assert kw == self.kw return self def _make_proxy(self, name): def _proxy_method(*args, **kw): return self._data[name][args] return _proxy_method def _make_unknown_proxy(self, name): def _proxy_method(*args, **kw): if self._real is None: raise AttributeError("ProxyStub unkown method " + name) print() print("== ProxyStub unknown method ==") print(name, ":", args, kw) result = getattr(self._real, name)(*args, **kw) print("Result :") print(result) return result return _proxy_method def __getattr__(self, attr): if attr in ("_data", "_make_proxy", "_make_unknown_proxy"): raise AttributeError("Break infinite recursion chain") if attr in self._data: return self._make_proxy(attr) return self._make_unknown_proxy(attr) def __enter__(self): return self def __exit__(self, type, value, traceback): return proxystub = ProxyStub() class RatingsTest(unittest.TestCase): maxDiff = None def _get_file_rating(self, dirname): directory = resource_filename(__name__, os.path.join("testdata", dirname)) data = projectdata.get_data(directory) return rate(data) def test_complete(self): rating = self._get_file_rating("complete") # Should have a perfect score self.assertEqual(rating, (10, [])) def test_setup_config(self): rating = self._get_file_rating("setup_config") self.assertEqual(rating, (10, [])) def test_only_config(self): rating = self._get_file_rating("only_config") self.assertEqual( rating, ( 7, [ ( "You should specify what Python versions you support with " "the 'requires-python'/'python_requires' metadata." ), "You seem to have a setup.cfg, but neither a setup.py, nor a build-system defined. " "This makes it unclear how your project should be built. You probably want to " "have a pyproject.toml file with the following configuration:\n\n" " [build-system]\n" ' requires = ["setuptools>=42"]\n' ' build-backend = "setuptools.build_meta"\n\n' "In the future this will become a hard failure and your package will be " 'rated as "not cheese".', ], ), ) def test_pep517(self): rating = self._get_file_rating("pep517") self.assertEqual( rating, ( 10, [], ), ) def test_pep621(self): rating = self._get_file_rating("pep621") self.assertEqual( rating, ( 10, [], ), ) def test_minimal(self): rating = self._get_file_rating("minimal") self.assertEqual( rating, ( 2, [ "The package's description should be longer than 10 characters.", "The package's long_description is quite short.", "Your package does not have classifiers data.", "The classifiers should specify what Python versions you support.", ( "You should specify what Python versions you support with " "the 'requires-python'/'python_requires' metadata." ), "Your package does not have keywords data.", "Your package does not have author data.", "Your package does not have author_email data.", "Your package should have a 'url' field with a link to the project home page, or a " "'project_urls' field, with a dictionary of links, or both.", "Your package does neither have a license field nor any license classifiers.", "Specifying a development status in the classifiers gives users " "a hint of how stable your software is.", ], ), ) def test_lacking(self): rating = self._get_file_rating("lacking") self.assertEqual( rating, ( 0, [ "The package had no description!", "The package's long_description is quite short.", "Your package does not have classifiers data.", "The classifiers should specify what Python versions you support.", ( "You should specify what Python versions you support with " "the 'requires-python'/'python_requires' metadata." ), "Your package does not have keywords data.", "Your package does not have author data.", "Your package does not have author_email data.", "Your package should have a 'url' field with a link to the project home page, or a " "'project_urls' field, with a dictionary of links, or both.", "Your package does neither have a license field nor any license classifiers.", "Your long_description is not valid ReST: \n:1: (WARNING/2) Inline literal " "start-string without end-string.", "Specifying a development status in the classifiers gives users " "a hint of how stable your software is.", ], ), ) def test_custom_test(self): rating = self._get_file_rating("custom_test") self.assertEqual( rating, ( 2, [ "The package's description should be longer than 10 characters.", "The package's long_description is quite short.", "Your package does not have classifiers data.", "The classifiers should specify what Python versions you support.", ( "You should specify what Python versions you support with " "the 'requires-python'/'python_requires' metadata." ), "Your package does not have keywords data.", "Your package does not have author data.", "Your package does not have author_email data.", "Your package should have a 'url' field with a link to the project home page, or a " "'project_urls' field, with a dictionary of links, or both.", "Your package does neither have a license field nor any license classifiers.", "Specifying a development status in the classifiers gives users " "a hint of how stable your software is.", ], ), ) def test_markdown(self): # Markdown and text shouldn't get ReST errors testdata = COMPLETE.copy() testdata["long_description"] = "# Broken ReST\n\n``Valid Markdown\n" testdata["long_description_content_type"] = "text/markdown" rating = rate(testdata) self.assertEqual(rating, (9, ["The package's long_description is quite short."])) testdata["long_description_content_type"] = "text/plain" rating = rate(testdata) self.assertEqual(rating, (9, ["The package's long_description is quite short."])) class PyPITest(unittest.TestCase): maxDiff = None @unittest.mock.patch("xmlrpc.client.ServerProxy", proxystub) @unittest.mock.patch("pyroma.pypidata._get_project_data") def test_distribute(self, projectdatamock): datafile = resource_filename(__name__, os.path.join("testdata", "jsondata", "distribute.json")) with open(datafile, "rt", encoding="UTF-8") as file: projectdatamock.return_value = json.load(file) proxystub.set_debug_context("distributedata.py", xmlrpclib.ServerProxy, False) data = pypidata.get_data("distribute") rating = rate(data) # build + older versions of setuptools works, later setuptools does not, so # we can get two different results here: self.assertEqual( rating, ( 7, [ "The classifiers should specify what minor versions of Python " "you support as well as what major version.", "You should have three or more owners of the project on PyPI.", "Your Cheese may have spoiled!! The only way to gather metadata from your package was to execute " "a patched setup.py. This indicates that your package is using very old packaging techniques, " "(or that your setup.py isn't executable at all), and Pyroma will soon regard that as a " "complete failure!\nPlease modernize your packaging! If it is already modern, this is a bug.", ], ), ) @unittest.mock.patch("xmlrpc.client.ServerProxy", proxystub) @unittest.mock.patch("pyroma.pypidata._get_project_data") def test_complete(self, projectdatamock): datafile = resource_filename(__name__, os.path.join("testdata", "jsondata", "complete.json")) with open(datafile, "rt", encoding="UTF-8") as file: projectdatamock.return_value = json.load(file) proxystub.set_debug_context("completedata.py", xmlrpclib.ServerProxy, False) data = pypidata.get_data("complete") rating = rate(data) self.assertEqual(rating, (10, [])) class ProjectDataTest(unittest.TestCase): maxDiff = None def test_complete(self): directory = resource_filename(__name__, os.path.join("testdata", "complete")) data = projectdata.get_data(directory) self.assertEqual(data, COMPLETE) class DistroDataTest(unittest.TestCase): maxDiff = None def test_complete(self): directory = resource_filename(__name__, os.path.join("testdata", "distributions")) for filename in os.listdir(directory): if filename.startswith("complete"): data = distributiondata.get_data(os.path.join(directory, filename)) self.assertEqual(data, COMPLETE) pyroma-4.2/setup.cfg000066400000000000000000000032061456340716600145240ustar00rootroot00000000000000[metadata] name = pyroma version = 4.2 description = Test your project's packaging friendliness long_description = file: README.rst, CHANGES.txt classifiers = Development Status :: 5 - Production/Stable Intended Audience :: Developers License :: OSI Approved :: MIT License Operating System :: OS Independent Programming Language :: Python Programming Language :: Python :: 3 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3 :: Only Programming Language :: Python :: Implementation :: CPython Programming Language :: Python :: Implementation :: PyPy keywords = pypi, quality, testing author = Lennart Regebro author_email = regebro@gmail.com url = https://github.com/regebro/pyroma license = MIT project_urls = Source Code = https://github.com/regebro/pyroma [options] zip_safe = True include_package_data = True packages = find: package_dir = = . python_requires = >=3.7 install_requires = build>=0.7.0 docutils packaging pygments requests setuptools>=42 trove-classifiers>=2022.6.26 [options.packages.find] where = . [options.extras_require] test = setuptools>=60 zest.releaser[recommended] [options.entry_points] console_scripts = pyroma = pyroma:main zest.releaser.prereleaser.before = pyroma = pyroma:zester [flake8] max-line-length=120 [tool:pytest] testpaths = pyroma/tests.py [check-manifest] ignore = .pre-commit-hooks.yaml [zest.releaser] create-wheel = yes pyroma-4.2/setup.py000066400000000000000000000000461456340716600144140ustar00rootroot00000000000000from setuptools import setup setup()