diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py index d71f0f89..8a8aebe6 100644 --- a/tests/integration/conftest.py +++ b/tests/integration/conftest.py @@ -9,6 +9,7 @@ from pipenv.vendor import delegator from pipenv.vendor import requests from pipenv.vendor import six from pipenv.vendor import toml +from pytest_pypi.app import prepare_packages as prepare_pypi_packages if six.PY2: class ResourceWarning(Warning): @@ -30,6 +31,8 @@ def check_internet(): WE_HAVE_INTERNET = check_internet() TESTS_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +PYPI_VENDOR_DIR = os.path.join(TESTS_ROOT, 'pypi') +prepare_pypi_packages(PYPI_VENDOR_DIR) def pytest_runtest_setup(item): @@ -68,7 +71,6 @@ class _PipenvInstance(object): os.environ['PIPENV_DONT_USE_PYENV'] = '1' os.environ['PIPENV_IGNORE_VIRTUALENVS'] = '1' os.environ['PIPENV_VENV_IN_PROJECT'] = '1' - os.environ['PYPI_VENDOR_DIR'] = os.path.join(TESTS_ROOT, 'pypi') if self.chdir: os.chdir(self.path) return self diff --git a/tests/pytest-pypi/pytest_pypi/app.py b/tests/pytest-pypi/pytest_pypi/app.py index 57a368b8..7ac1bc4b 100644 --- a/tests/pytest-pypi/pytest_pypi/app.py +++ b/tests/pytest-pypi/pytest_pypi/app.py @@ -4,9 +4,6 @@ import json import requests from flask import Flask, redirect, abort, render_template, send_file, jsonify -PYPI_VENDOR_DIR = os.environ.get('PYPI_VENDOR_DIR', './pypi') -PYPI_VENDOR_DIR = os.path.abspath(PYPI_VENDOR_DIR) - app = Flask(__name__) session = requests.Session() @@ -14,41 +11,49 @@ packages = {} class Package(object): - """docstring for Package""" + """Package represents a collection of releases from one or more directories""" def __init__(self, name): super(Package, self).__init__() self.name = name - self._releases = [] + self.releases = {} + self._package_dirs = set() @property - def releases(self): - r = [] - for release in self._releases: - release = release[len(PYPI_VENDOR_DIR):].replace('\\', '/') - r.append(release) - return r + def json(self): + for path in self._package_dirs: + try: + with open(os.path.join(path, 'api.json')) as f: + return json.load(f) + except FileNotFoundError: + pass def __repr__(self): return "/json') def json_for_package(package): try: - with open(os.path.sep.join([PYPI_VENDOR_DIR, package, 'api.json'])) as f: - return jsonify(json.load(f)) + return jsonify(packages[package].json) except Exception: pass r = session.get('https://pypi.org/pypi/{0}/json'.format(package)) return jsonify(r.json()) + if __name__ == '__main__': + PYPI_VENDOR_DIR = os.environ.get('PYPI_VENDOR_DIR', './pypi') + PYPI_VENDOR_DIR = os.path.abspath(PYPI_VENDOR_DIR) + prepare_packages(PYPI_VENDOR_DIR) + app.run() diff --git a/tests/pytest-pypi/pytest_pypi/templates/package.html b/tests/pytest-pypi/pytest_pypi/templates/package.html index 36e70a88..26ba9eca 100644 --- a/tests/pytest-pypi/pytest_pypi/templates/package.html +++ b/tests/pytest-pypi/pytest_pypi/templates/package.html @@ -7,8 +7,8 @@

Links for {{ package.name }}

{% for release in package.releases %} - {{ release }} + {{ release }}
{% endfor %} - \ No newline at end of file +