diff --git a/create-local-tld-cache.py b/create-local-tld-cache.py new file mode 100644 index 0000000..c57a6c6 --- /dev/null +++ b/create-local-tld-cache.py @@ -0,0 +1,38 @@ +#!/usr/bin/python3 + +from pathlib import Path +import json +import os +import subprocess +import sys + +if len(sys.argv) != 2: + sys.stderr.write('usage: %s \n' % sys.argv[0]) + +buildroot_sitelib_dir = sys.argv[1] +sys.path.insert(0, buildroot_sitelib_dir) + +from tldextract.cache import get_cache_dir, DiskCache + +if 'TLDEXTRACT_CACHE' not in os.environ: + raise ValueError('must set "TLDEXTRACT_CACHE" environment variable') + +local_cache = Path('/usr/share/publicsuffix/public_suffix_list.dat') +if not local_cache.exists(): + raise FileNotFoundError(local_cache) + +url_local_cache = f'file://{local_cache}' +subprocess.run(['/usr/bin/tldextract', '--update', f'--suffix_list_url={url_local_cache}'], check=True) + +cache = DiskCache(cache_dir=get_cache_dir()) +namespace = 'publicsuffix.org-tlds' +cache_with_local_data = cache._key_to_cachefile_path(namespace, {'urls': (url_local_cache,), 'fallback_to_snapshot': True}) +func = lambda **kwargs: json.loads(Path(cache_with_local_data).read_text()) + +kwargs = { + 'cache': cache, + 'urls': ('https://publicsuffix.org/list/public_suffix_list.dat', 'https://raw.githubusercontent.com/publicsuffix/list/master/public_suffix_list.dat'), + 'fallback_to_snapshot': True, +} +cache.run_and_cache(func, namespace=namespace, kwargs=kwargs, hashed_argnames=('urls', 'fallback_to_snapshot')) + diff --git a/python-dns-lexicon-tox-config.patch b/python-dns-lexicon-tox-config.patch new file mode 100644 index 0000000..039c798 --- /dev/null +++ b/python-dns-lexicon-tox-config.patch @@ -0,0 +1,14 @@ +diff --git a/pyproject.toml b/pyproject.toml +index 4122ff9..936bbdc 100644 +--- a/pyproject.toml ++++ b/pyproject.toml +@@ -126,8 +126,7 @@ extend-ignore = [ "E203", "E501" ] + envlist = [ "cover", "lint" , "mypy" ] + + [tool.tox.env_run_base] +-runner = "uv-venv-lock-runner" +-with_dev = true ++with_dev = false + extras = [ "full" ] + setenv.PYTEST_ADDOPTS = "--numprocesses auto" + setenv.PYTHONHASHSEED = "0" diff --git a/python-dns-lexicon.spec b/python-dns-lexicon.spec index c224e93..de3d1f0 100644 --- a/python-dns-lexicon.spec +++ b/python-dns-lexicon.spec @@ -1,13 +1,14 @@ -%global forgeurl https://github.com/AnalogJ/lexicon -Version: 3.17.0 +%global forgeurl https://github.com/dns-lexicon/dns-lexicon +%global forgeversion 3.21.1 +Version: %{forgeversion} %forgemeta %global pypi_name dns-lexicon %if 0%{?rhel} >= 8 # EPEL is currently missing dependencies used by the extras metapackages -# EPEL is currently missing dependancies used by the tests +# EPEL is currently missing dependencies used by the tests %bcond_with tests %bcond_with extras %else @@ -15,14 +16,19 @@ Version: 3.17.0 %bcond_without extras %endif +# disable tests for now +%bcond_without tests + Name: python-%{pypi_name} -Release: 6%{?dist} +Release: 5%{?dist} Summary: Manipulate DNS records on various DNS providers in a standardized/agnostic way License: MIT URL: %{forgeurl} # pypi releases don't contain necessary data to run the tests Source0: %{forgesource} +Source1: create-local-tld-cache.py +Patch: python-dns-lexicon-tox-config.patch BuildArch: noarch BuildRequires: python3-devel @@ -36,6 +42,9 @@ BuildRequires: python3-devel %if %{with tests} BuildRequires: python3-pytest BuildRequires: python3-pytest-vcr +BuildRequires: python3-pytest-xdist +BuildRequires: publicsuffix-list +BuildRequires: python3-tldextract %endif @@ -134,9 +143,10 @@ dependencies necessary to use the Route 53 provider. %prep -%autosetup -n lexicon-%{version} -p1 +%autosetup -n %{pypi_name}-%{version} -p1 # Remove bundled egg-info rm -rf %{pypi_name}.egg-info +rm -f uv.lock %generate_buildrequires %if %{with extras} @@ -153,30 +163,32 @@ sed -i '1d' src/lexicon/_private/cli.py %if %{with tests} %check -# The following tests use tldextract which tries to fetch -# https://raw.githubusercontent.com/publicsuffix/list/master/public_suffix_list.dat -# on first invocation +export TLDEXTRACT_CACHE=%{_builddir}/tldextract-cache + +# tldextract tries to fetch "public_suffix_list.dat" from the internet on first +# invocation. # (see https://github.com/john-kurkowski/tldextract/tree/master#note-about-caching) -# - AutoProviderTests -# - NamecheapProviderTests -# - NamecheapManagedProviderTests -# Disabling those until tldextract 3.3.0+ is available on Fedora. -# With tldextract 3.3.0+ we can use Fedora's public suffix list by running -# tldextract --update --suffix_list_url "file:///usr/share/publicsuffix/public_suffix_list.dat" -# prior to running the tests -TEST_SELECTOR="not AutoProviderTests and not NamecheapProviderTests and not NamecheapManagedProviderTests and not Route53Provider and not AliyunProviderTests and not AuroraProviderTests and not Route53ProviderTests" +# The "publicsuffix-list" package provides that data however we need to use +# that to populate a local cache directory.Most of the work is done via: +# $ tldextract --update --suffix_list_url "file:///usr/share/publicsuffix/public_suffix_list.dat" +# +# However tldextract uses the "file://" url as cache key while the tests use +# "https://publicsuffix.org/list/public_suffix_list.dat". I did not find a way +# get tldextract to use the https url so a small Python script will handle that. +/usr/bin/python3 %{SOURCE1} %{buildroot}%{python3_sitelib} # lexicon providers which do not work in Fedora due to missing dependencies: # - SoftLayerProviderTests -TEST_SELECTOR+=" and not SoftLayerProviderTests" +TEST_SELECTOR="not SoftLayerProviderTests" + %if %{without extras} -TEST_SELECTOR+=" and not DDNSProviderTests and not DuckdnsProviderTests and not GransyProviderTests and not LocalzoneProviderTests and not OciProviderTests and not OciInstancePrincipalProviderTests and not Route53ProviderTests" +TEST_SELECTOR+=" and not GransyProviderTests and not LocalzoneProviderTests and not OciProviderTests and not OciInstancePrincipalProviderTests and not Route53ProviderTests" %endif -# The %%tox macro lacks features so we need to use pytest directly: -# Miro HronĨok, 2020-09-11: -# > I am afraid the %%tox macro can only work with "static" deps declaration, -# > not with arbitrary installers invoked as commands, sorry about that. -%pytest -v -k "${TEST_SELECTOR}" + +# We do not use "--xfail-providers-with-missing-deps" because we want to detect +# missing dependencies unless we already know that a certain provider will not +# work. +%pytest -v -k "${TEST_SELECTOR}" -n auto --dist=loadfile tests/ %endif %install @@ -184,7 +196,6 @@ TEST_SELECTOR+=" and not DDNSProviderTests and not DuckdnsProviderTests and not install -pm 0755 %{buildroot}/%{_bindir}/lexicon %{buildroot}/%{_bindir}/lexicon-%{python3_version} cd %{buildroot}/%{_bindir} ln -s lexicon-%{python3_version} lexicon-3 -rm -rf %{buildroot}%{python3_sitelib}/lexicon/tests %files -n python3-%{pypi_name} @@ -216,6 +227,33 @@ rm -rf %{buildroot}%{python3_sitelib}/lexicon/tests # }}} %changelog +* Fri Sep 19 2025 Python Maint - 3.21.1-5 +- Rebuilt for Python 3.14.0rc3 bytecode + +* Fri Aug 15 2025 Python Maint - 3.21.1-4 +- Rebuilt for Python 3.14.0rc2 bytecode + +* Fri Jul 25 2025 Fedora Release Engineering - 3.21.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Fri Jun 06 2025 Python Maint - 3.21.1-2 +- Rebuilt for Python 3.14 + +* Mon Apr 28 2025 Felix Schwarz - 3.21.1-1 +- update to 3.21.1 + +* Sat Apr 19 2025 Felix Schwarz - 3.21.0-1 +- update to 3.21.0 + +* Thu Jan 23 2025 Felix Schwarz - 3.20.1-1 +- update to 3.20.1 + +* Sat Jan 18 2025 Fedora Release Engineering - 3.18.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Sat Nov 23 2024 Ben Maconi - 3.18.0-1 +- Updated to 3.18.0 + * Fri Jul 19 2024 Fedora Release Engineering - 3.17.0-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild diff --git a/sources b/sources index 31f2a59..490f57d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (lexicon-3.17.0.tar.gz) = 1bc182f5881d6acfac72b84331ba50da1219178d274c92e532ed11e73aa79696681d28a002cd1e23f48590953f48e50b62c2ef2db020a07ecf88547717508c0c +SHA512 (dns-lexicon-3.21.1.tar.gz) = 0f53001edf2425afe7b7c4315e974ee47c956b659964998b942943788711c57634eea2d7974e21005be7f0edf16800e6577c49c8789e34f2133c4f5be8ac7ac1