diff --git a/swh/loader/package/__init__.py b/swh/loader/package/__init__.py --- a/swh/loader/package/__init__.py +++ b/swh/loader/package/__init__.py @@ -6,9 +6,12 @@ from typing import Any, Dict, Mapping +import pkg_resources + + try: - from swh.loader.core._version import __version__ # type: ignore -except ImportError: + __version__ = pkg_resources.get_distribution('swh.loader.core').version +except pkg_resources.DistributionNotFound: __version__ = 'devel' diff --git a/swh/loader/package/tests/test_utils.py b/swh/loader/package/tests/test_utils.py --- a/swh/loader/package/tests/test_utils.py +++ b/swh/loader/package/tests/test_utils.py @@ -7,9 +7,16 @@ import os import pytest + +import swh.loader.package from swh.loader.package.utils import download, api_info, release_name +def test_version_generation(): + assert swh.loader.package.__version__ != 'devel', \ + "Make sure swh.loader.core is installed (e.g. pip install -e .)" + + @pytest.mark.fs def test_download_fail_to_download(tmp_path, requests_mock): url = 'https://pypi.org/pypi/arrow/json' @@ -64,6 +71,26 @@ '1d9224378d77925d612c9f926eb9fb92850e6551def8328011b6a972323298d5') +@pytest.mark.fs +def test_download_headers(tmp_path, requests_mock): + """Check that we send proper headers when downloading files""" + filename = 'requests-0.0.1.tar.gz' + url = 'https://pypi.org/pypi/requests/%s' % filename + data = 'this is something' + requests_mock.get(url, text=data, headers={ + 'content-length': str(len(data)) + }) + + actual_filepath, actual_hashes = download(url, dest=str(tmp_path)) + + assert len(requests_mock.request_history) == 1 + req = requests_mock.request_history[0] + assert 'User-Agent' in req.headers + user_agent = req.headers['User-Agent'] + assert 'Software Heritage Loader' in user_agent + assert swh.loader.package.__version__ in user_agent + + @pytest.mark.fs def test_download_ok_with_hashes(tmp_path, requests_mock): """Download without issue should provide filename and hashes"""