diff --git a/.gitignore b/.gitignore index d017d44..6e740f3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,3 @@ -/dns-lexicon-2.1.19.tar.gz -/dns-lexicon-2.2.1.tar.gz -/dns-lexicon-2.2.2.tar.gz -/dns-lexicon-2.2.3.tar.gz -/dns-lexicon-2.3.0.tar.gz -/dns-lexicon-2.4.0.tar.gz -/dns-lexicon-2.4.3.tar.gz -/dns-lexicon-2.4.4.tar.gz -/dns-lexicon-2.4.5.tar.gz -/dns-lexicon-2.7.0.tar.gz -/dns-lexicon-2.7.9.tar.gz -/dns-lexicon-3.0.2.tar.gz -/dns-lexicon-3.0.6.tar.gz -/dns-lexicon-3.1.5.tar.gz -/dns-lexicon-3.2.6.tar.gz -/dns-lexicon-3.2.8.tar.gz -/dns-lexicon-3.3.4.tar.gz +/dns-lexicon-*.tar.gz +/lexicon-*.tar.gz + diff --git a/0000-remove-shebang.patch b/0000-remove-shebang.patch deleted file mode 100644 index dd0a7d5..0000000 --- a/0000-remove-shebang.patch +++ /dev/null @@ -1,9 +0,0 @@ -diff --git a/lexicon/cli.py b/lexicon/cli.py -index dbef1ae..32a0f6f 100644 ---- a/lexicon/cli.py -+++ b/lexicon/cli.py -@@ -1,4 +1,3 @@ --#!/usr/bin/env python - """Module for Lexicon command-line interface""" - from __future__ import absolute_import, print_function - import json diff --git a/0001-fix-requirements.patch b/0001-fix-requirements.patch deleted file mode 100644 index c99135d..0000000 --- a/0001-fix-requirements.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/setup.py b/setup.py -index b4b3865..6eda18d 100644 ---- a/setup.py -+++ b/setup.py -@@ -82,7 +82,7 @@ setup( - # requirements files see: - # https://packaging.python.org/en/latest/requirements.html - install_requires=[ -- 'requests[security]', -+ 'requests', - 'tldextract', - 'future', - 'cryptography', 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/disable-poetry-light.patch b/disable-poetry-light.patch new file mode 100644 index 0000000..1b71fb8 --- /dev/null +++ b/disable-poetry-light.patch @@ -0,0 +1,85 @@ +diff -uNr lexicon-3.17.0/pyproject.toml lexicon-3.17.0.mod/pyproject.toml +--- lexicon-3.17.0/pyproject.toml 2023-11-06 16:21:46.000000000 -0600 ++++ lexicon-3.17.0.mod/pyproject.toml 2024-02-01 04:28:53.861285119 -0600 +@@ -61,32 +61,6 @@ + # Extra "full" list must contain all other extras + full = ["boto3", "localzone", "softlayer", "zeep", "oci"] + +-[tool.poetry.group.dev.dependencies] +-esbonio = "*" +-packaging = "*" +-pytest = "*" +-pytest-cov = "*" +-pytest-xdist = "*" +-vcrpy = "*" +-# We add flake8 conditionally to recent Python version to get modern versions +-# of flake8 cleaned of several issues. It just means that linting cannot be done +-# on the initial release of Python 3.8 (version 3.8.0). This is a decent constraint. +-flake8 = { version = "*", python = ">=3.8.1" } +-isort = "*" +-tox = ">=4" +-black = "*" +-mypy = "*" +-toml = "*" +-types-PyYAML = "*" +-types-pytz = "*" +-types-requests = "*" +-types-toml = "*" +- +-[tool.poetry.group.docs.dependencies] +-sphinx = "*" +-sphinx_rtd_theme = "*" +-toml = "*" +- + [tool.poetry.scripts] + lexicon = "lexicon._private.cli:main" + +diff -uNr lexicon-3.17.0/setup.cfg lexicon-3.17.0.mod/setup.cfg +--- lexicon-3.17.0/setup.cfg 2023-11-06 16:21:46.000000000 -0600 ++++ lexicon-3.17.0.mod/setup.cfg 2024-02-01 04:05:39.191101574 -0600 +@@ -5,45 +5,3 @@ + [tox:tox] + envlist = cover,lint,mypy + isolated_build = true +- +-# Standard env will run all test available for all providers. +-[testenv] +-allowlist_externals = poetry +-extras = +- full +-setenv = +- PYTEST_ADDOPTS = {env:PYTEST_ADDOPTS:--numprocesses auto} +- PYTHONHASHSEED = 0 +-commands_pre = +- poetry install --extras full --no-root --sync +-commands = +- poetry run pytest tests/ \ +- --junitxml=junit/test-results.xml --dist=loadfile +- +-# Cover env will run all test available for all providers with coverage enabled. +-[testenv:cover] +-commands = +- poetry run pytest tests/ \ +- --junitxml=junit/test-results.xml --dist=loadfile \ +- --cov=lexicon --cov-report=term-missing --cov-report=xml +- +-# Light env will run all tests except for providers with optional dependencies. +-[testenv:light] +-extras = +-commands_pre = +- poetry install --no-root --sync +-commands = +- poetry run pytest tests/ \ +- --junitxml=junit/test-results.xml --dist=loadfile \ +- --xfail-providers-with-missing-deps +- +-# Lint env will check for code quality and errors, and fails if it does not match the minimal requirements. +-[testenv:lint] +-commands = +- poetry run flake8 src tests +- +- +-# Mypy env will check for types in the Lexicon codebase. +-[testenv:mypy] +-commands = +- poetry run mypy src tests 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 8ba51a8..de3d1f0 100644 --- a/python-dns-lexicon.spec +++ b/python-dns-lexicon.spec @@ -1,441 +1,406 @@ + +%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} && 0%{?rhel} <= 7 -%global rhel7 1 -%bcond_with python3 -%else -%bcond_without python3 -%endif - -%if 0%{?fedora} >= 30 || 0%{?rhel} >= 8 -%bcond_with python2 -%else -%bcond_without python2 -%endif - %if 0%{?rhel} >= 8 -# EPEL8 is currently missing dependencies used by the extras metapackages +# EPEL is currently missing dependencies used by the extras metapackages +# EPEL is currently missing dependencies used by the tests +%bcond_with tests %bcond_with extras %else +%bcond_without tests %bcond_without extras %endif +# disable tests for now +%bcond_without tests + Name: python-%{pypi_name} -Version: 3.3.17 -Release: 1%{?dist} +Release: 5%{?dist} Summary: Manipulate DNS records on various DNS providers in a standardized/agnostic way License: MIT -URL: https://github.com/AnalogJ/lexicon -Source0: %{pypi_source} +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 -Patch0: 0000-remove-shebang.patch - -%if 0%{?rhel7} -Patch1: 0001-fix-requirements.patch -%endif - -%if %{with python2} -BuildRequires: python2-devel -BuildRequires: python2-setuptools -BuildRequires: python2-cryptography -BuildRequires: python2-future -BuildRequires: python2-pyyaml -BuildRequires: python2-tldextract - -%if 0%{?rhel7} -# EL7 has an unversioned name for this package -BuildRequires: pyOpenSSL -%else -BuildRequires: python2-pyOpenSSL -%endif - -# Extras requirements -# {{{ -%if %{with extras} -%if 0%{?rhel7} -# EL7 has unversioned names for these packages -BuildRequires: python-beautifulsoup4 -BuildRequires: python-boto3 -BuildRequires: python-xmltodict -%else -BuildRequires: python2-beautifulsoup4 -BuildRequires: python2-boto3 -BuildRequires: python2-xmltodict - -# EL7 doesn't have a current enough version of this package -BuildRequires: python2-dns -%endif -%endif -# }}} -%endif - -%if %{with python3} BuildRequires: python3-devel -BuildRequires: python3-setuptools -BuildRequires: python3-cryptography -BuildRequires: python3-future -BuildRequires: python3-pyOpenSSL + +# epel is missing full poetry and light packages needed for tests +%if 0%{?rhel >= 8} +#Patch: disable-poetry-light.patch +%endif + +# required to run the test suite +%if %{with tests} +BuildRequires: python3-pytest +BuildRequires: python3-pytest-vcr +BuildRequires: python3-pytest-xdist +BuildRequires: publicsuffix-list BuildRequires: python3-tldextract -BuildRequires: python3-pyyaml - -# Extras requirements -# {{{ -%if %{with extras} -BuildRequires: python3-beautifulsoup4 -BuildRequires: python3-boto3 -BuildRequires: python3-dns -BuildRequires: python3-xmltodict %endif -# }}} -%endif %description Lexicon provides a way to manipulate DNS records on multiple DNS providers in a standardized way. Lexicon has a CLI but it can also be used as a python library. -%if %{with python2} -%package -n python2-%{pypi_name} -Summary: %{summary} -%{?python_provide:%python_provide python2-%{pypi_name}} - -Requires: python2-cryptography -Requires: python2-future -Requires: python2-requests -Requires: python2-setuptools -Requires: python2-pyyaml -Requires: python2-tldextract - -%if 0%{?rhel7} -# EL7 has an unversioned name for this package -Requires: pyOpenSSL -%else -Requires: python2-pyOpenSSL -%endif - -# Both packages install a Python module named lexicon -# TODO: Remove this once resolved upstream (see upstream #222) -%if 0%{?rhel7} -Conflicts: python-lexicon -%else -Conflicts: python2-lexicon -%endif - -%description -n python2-%{pypi_name} -Lexicon provides a way to manipulate DNS records on multiple DNS providers in a -standardized way. Lexicon has a CLI but it can also be used as a python -library. - -This is the Python 2 version of the package. -%endif - -%if %{with python3} %package -n python3-%{pypi_name} Summary: %{summary} %{?python_provide:%python_provide python3-%{pypi_name}} -Requires: python3-cryptography -Requires: python3-future -Requires: python3-requests -Requires: python3-setuptools -Requires: python3-pyOpenSSL -Requires: python3-tldextract -Requires: python3-pyyaml # Both packages install a Python module named lexicon # TODO: Remove this once resolved upstream (see upstream #222) Conflicts: python3-lexicon +# These "extras" were previously present in upstream lexicon but are not there +# anymore. +# {{{ +%if %{with extras} +Obsoletes: python3-%{pypi_name}+easyname < 3.4 +Provides: python3dist(%{pypi_name}[easyname]) = %{version} +Provides: python%{python3_version}dist(%{pypi_name}[easyname]) = %{version} + +Obsoletes: python3-%{pypi_name}+gratisdns < 3.4 +Provides: python3dist(%{pypi_name}[gratisdns]) = %{version} +Provides: python%{python3_version}dist(%{pypi_name}[gratisdns]) = %{version} + +Obsoletes: python3-%{pypi_name}+henet < 3.4 +Provides: python3dist(%{pypi_name}[henet]) = %{version} +Provides: python%{python3_version}dist(%{pypi_name}[henet]) = %{version} + +Obsoletes: python3-%{pypi_name}+hetzner < 3.4 +Provides: python3dist(%{pypi_name}[hetzner]) = %{version} +Provides: python%{python3_version}dist(%{pypi_name}[hetzner]) = %{version} + +# lexicon 3.6.0 removed the xmltodict dependency (and the "plesk" extra) +Obsoletes: python3-%{pypi_name}+plesk < 3.6 +Provides: python3dist(%{pypi_name}[plesk]) = %{version} +Provides: python%{python3_version}dist(%{pypi_name}[plesk]) = %{version} +%endif +# }}} + %description -n python3-%{pypi_name} Lexicon provides a way to manipulate DNS records on multiple DNS providers in a standardized way. Lexicon has a CLI but it can also be used as a python library. This is the Python 3 version of the package. -%endif -# Extras meta-packages -# {{{ -%if %{with extras} -%if %{with python2} -%package -n python2-%{pypi_name}+easyname -Summary: Meta-package for python2-%{pypi_name} and easyname provider -%{?python_provide:%python_provide python2-%{pypi_name}+easyname} - -Requires: python2-%{pypi_name} = %{version}-%{release} - -%if 0%{?rhel7} -# EL7 has an unversioned name for this package -Requires: python-beautifulsoup4 -%else -Requires: python2-beautifulsoup4 -%endif - -%description -n python2-%{pypi_name}+easyname -This package installs no files. It requires python2-%{pypi_name} and all -dependencies necessary to use the easyname provider. -%endif - -%if %{with python3} -%package -n python3-%{pypi_name}+easyname -Summary: Meta-package for python3-%{pypi_name} and easyname provider -%{?python_provide:%python_provide python3-%{pypi_name}+easyname} +%package -n python3-%{pypi_name}+gransy +Summary: Meta-package for python3-%{pypi_name} and gransy provider +%{?python_provide:%python_provide python3-%{pypi_name}+gransy} Requires: python3-%{pypi_name} = %{version}-%{release} -Requires: python3-beautifulsoup4 -%description -n python3-%{pypi_name}+easyname +%description -n python3-%{pypi_name}+gransy This package installs no files. It requires python3-%{pypi_name} and all -dependencies necessary to use the easyname provider. -%endif +dependencies necessary to use the gransy provider. -%if %{with python2} -%package -n python2-%{pypi_name}+gratisdns -Summary: Meta-package for python2-%{pypi_name} and gratisdns provider -%{?python_provide:%python_provide python2-%{pypi_name}+gratisdns} -Requires: python2-%{pypi_name} = %{version}-%{release} - -%if 0%{?rhel7} -# EL7 has an unversioned name for this package -Requires: python-beautifulsoup4 -%else -Requires: python2-beautifulsoup4 -%endif - -%description -n python2-%{pypi_name}+gratisdns -This package installs no files. It requires python2-%{pypi_name} and all -dependencies necessary to use the gratisdns provider. -%endif - -%if %{with python3} -%package -n python3-%{pypi_name}+gratisdns -Summary: Meta-package for python3-%{pypi_name} and gratisdns provider -%{?python_provide:%python_provide python3-%{pypi_name}+gratisdns} +%package -n python3-%{pypi_name}+localzone +Summary: Meta-package for python3-%{pypi_name} and localzone provider +%{?python_provide:%python_provide python3-%{pypi_name}+localzone} Requires: python3-%{pypi_name} = %{version}-%{release} -Requires: python3-beautifulsoup4 -%description -n python3-%{pypi_name}+gratisdns +%description -n python3-%{pypi_name}+localzone This package installs no files. It requires python3-%{pypi_name} and all -dependencies necessary to use the gratisdns provider. -%endif +dependencies necessary to use the localzone provider. -%if %{with python2} -%package -n python2-%{pypi_name}+henet -Summary: Meta-package for python2-%{pypi_name} and Hurricane Electric provider -%{?python_provide:%python_provide python2-%{pypi_name}+henet} -Requires: python2-%{pypi_name} = %{version}-%{release} - -%if 0%{?rhel7} -# EL7 has an unversioned name for this package -Requires: python-beautifulsoup4 -%else -Requires: python2-beautifulsoup4 -%endif - -%description -n python2-%{pypi_name}+henet -This package installs no files. It requires python2-%{pypi_name} and all -dependencies necessary to use the Hurricane Electric provider. -%endif - -%if %{with python3} -%package -n python3-%{pypi_name}+henet -Summary: Meta-package for python3-%{pypi_name} and Hurricane Electric provider -%{?python_provide:%python_provide python3-%{pypi_name}+henet} +%package -n python3-%{pypi_name}+oci +Summary: Meta-package for python3-%{pypi_name} and oci provider +%{?python_provide:%python_provide python3-%{pypi_name}+oci} Requires: python3-%{pypi_name} = %{version}-%{release} -Requires: python3-beautifulsoup4 -%description -n python3-%{pypi_name}+henet +%description -n python3-%{pypi_name}+oci This package installs no files. It requires python3-%{pypi_name} and all -dependencies necessary to use the Hurricane Electric provider. -%endif +dependencies necessary to use the oci provider. -%if %{with python2} -%package -n python2-%{pypi_name}+plesk -Summary: Meta-package for python2-%{pypi_name} and Plesk provider -%{?python_provide:%python_provide python2-%{pypi_name}+plesk} -Requires: python2-%{pypi_name} = %{version}-%{release} -%if 0%{?rhel7} -# EL7 has an unversioned name for this package -Requires: python-xmltodict -%else -Requires: python2-xmltodict -%endif - -%description -n python2-%{pypi_name}+plesk -This package installs no files. It requires python2-%{pypi_name} and all -dependencies necessary to use the Plesk provider. -%endif - -%if %{with python3} -%package -n python3-%{pypi_name}+plesk -Summary: Meta-package for python3-%{pypi_name} and Plesk provider -%{?python_provide:%python_provide python3-%{pypi_name}+plesk} - -Requires: python3-%{pypi_name} = %{version}-%{release} -Requires: python3-xmltodict - -%description -n python3-%{pypi_name}+plesk -This package installs no files. It requires python3-%{pypi_name} and all -dependencies necessary to use the Plesk provider. -%endif - -%if %{with python2} -%package -n python2-%{pypi_name}+route53 -Summary: Meta-package for python2-%{pypi_name} and Route 53 provider -%{?python_provide:%python_provide python2-%{pypi_name}+route53} - -Requires: python2-%{pypi_name} = %{version}-%{release} - -%if 0%{?rhel7} -# EL7 has an unversioned name for this package -Requires: python-boto3 -%else -Requires: python2-boto3 -%endif - -%description -n python2-%{pypi_name}+route53 -This package installs no files. It requires python2-%{pypi_name} and all -dependencies necessary to use the Route 53 provider. -%endif - -%if %{with python3} %package -n python3-%{pypi_name}+route53 Summary: Meta-package for python3-%{pypi_name} and Route 53 provider %{?python_provide:%python_provide python3-%{pypi_name}+route53} - Requires: python3-%{pypi_name} = %{version}-%{release} -Requires: python3-boto3 %description -n python3-%{pypi_name}+route53 This package installs no files. It requires python3-%{pypi_name} and all dependencies necessary to use the Route 53 provider. -%endif -%if ! 0%{?rhel7} -# EL7 does not have the dependencies necessary for this meta-package -# {{{ -%if %{with python2} -%package -n python2-%{pypi_name}+hetzner -Summary: Meta-package for python2-%{pypi_name} and Hetzner provider -%{?python_provide:%python_provide python2-%{pypi_name}+hetzner} - -Requires: python2-%{pypi_name} = %{version}-%{release} -Requires: python2-beautifulsoup4 -Requires: python2-dns - -%description -n python2-%{pypi_name}+hetzner -This package installs no files. It requires python2-%{pypi_name} and all -dependencies necessary to use the Hetzner provider. -%endif - -%if %{with python3} -%package -n python3-%{pypi_name}+hetzner -Summary: Meta-package for python3-%{pypi_name} and Hetzner provider -%{?python_provide:%python_provide python3-%{pypi_name}+hetzner} - -Requires: python3-%{pypi_name} = %{version}-%{release} -Requires: python3-beautifulsoup4 -Requires: python3-dns - -%description -n python3-%{pypi_name}+hetzner -This package installs no files. It requires python3-%{pypi_name} and all -dependencies necessary to use the Hetzner provider. -%endif -# }}} -%endif - -%endif -# }}} %prep -%autosetup -p1 -n %{pypi_name}-%{version} +%autosetup -n %{pypi_name}-%{version} -p1 # Remove bundled egg-info rm -rf %{pypi_name}.egg-info +rm -f uv.lock -%build -%if %{with python2} -%py2_build +%generate_buildrequires +%if %{with extras} +%pyproject_buildrequires -r -t -e light -x gransy,localzone,oci,route53 +%else +%pyproject_buildrequires -r %endif -%if %{with python3} -%py3_build + +%build +# remove shebang +sed -i '1d' src/lexicon/_private/cli.py +%pyproject_wheel + +%if %{with tests} +%check +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) +# 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="not SoftLayerProviderTests" + +%if %{without extras} +TEST_SELECTOR+=" and not GransyProviderTests and not LocalzoneProviderTests and not OciProviderTests and not OciInstancePrincipalProviderTests and not Route53ProviderTests" +%endif + +# 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 -%if %{with python2} -%py2_install -install -pm 0755 %{buildroot}/%{_bindir}/lexicon %{buildroot}/%{_bindir}/lexicon-%{python2_version} -ln -s %{_bindir}/lexicon-%{python2_version} %{buildroot}/%{_bindir}/lexicon-2 -%endif - -%if %{with python3} -%py3_install +%pyproject_install install -pm 0755 %{buildroot}/%{_bindir}/lexicon %{buildroot}/%{_bindir}/lexicon-%{python3_version} -ln -s %{_bindir}/lexicon-%{python3_version} %{buildroot}/%{_bindir}/lexicon-3 -%endif +cd %{buildroot}/%{_bindir} +ln -s lexicon-%{python3_version} lexicon-3 -%if %{with python2} -%files -n python2-%{pypi_name} -%license LICENSE -%doc README.md -%if ! %{with python3} -%{_bindir}/lexicon -%endif -%{_bindir}/lexicon-2 -%{_bindir}/lexicon-%{python2_version} -%{python2_sitelib}/lexicon -%{python2_sitelib}/dns_lexicon-%{version}-py?.?.egg-info -# Extras meta-packages -# {{{ -%files -n python2-%{pypi_name}+easyname -%files -n python2-%{pypi_name}+gratisdns -%files -n python2-%{pypi_name}+henet -%files -n python2-%{pypi_name}+plesk -%files -n python2-%{pypi_name}+route53 - -%if ! 0%{?rhel7} -# EL7 does not have the necessary dependencies for this meta-package -%files -n python2-%{pypi_name}+hetzner -%endif -# }}} -%endif - -%if %{with python3} %files -n python3-%{pypi_name} %license LICENSE -%doc README.md +%doc README.rst %{_bindir}/lexicon %{_bindir}/lexicon-3 %{_bindir}/lexicon-%{python3_version} %{python3_sitelib}/lexicon -%{python3_sitelib}/dns_lexicon-%{version}-py?.?.egg-info +%{python3_sitelib}/dns_lexicon-%{version}.dist-info # Extras meta-packages # {{{ %if %{with extras} -%files -n python3-%{pypi_name}+easyname -%files -n python3-%{pypi_name}+gratisdns -%files -n python3-%{pypi_name}+henet -%files -n python3-%{pypi_name}+hetzner -%files -n python3-%{pypi_name}+plesk + +%files -n python3-%{pypi_name}+gransy +%{?python_extras_subpkg:%ghost %{python3_sitelib}/dns_lexicon-%{version}.dist-info} + +%files -n python3-%{pypi_name}+localzone +%{?python_extras_subpkg:%ghost %{python3_sitelib}/dns_lexicon-%{version}.dist-info} + +%files -n python3-%{pypi_name}+oci +%{?python_extras_subpkg:%ghost %{python3_sitelib}/dns_lexicon-%{version}.dist-info} + %files -n python3-%{pypi_name}+route53 +%{?python_extras_subpkg:%ghost %{python3_sitelib}/dns_lexicon-%{version}.dist-info} + %endif # }}} -%endif %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 + +* Thu Jun 27 2024 Python Maint - 3.17.0-5 +- Rebuilt for Python 3.13 + +* Thu Feb 29 2024 Jonathan Wright - 3.17.0-4 +- Update spec for building on epel9 + +* Fri Jan 26 2024 Fedora Release Engineering - 3.17.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Mon Jan 22 2024 Fedora Release Engineering - 3.17.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Thu Nov 16 2023 Nick Bebout - 3.17.0-1 +- Update to 3.17.0 + +* Fri Oct 13 2023 Jonathan Wright - 3.15.1-1 +- Update to 3.15.1 rhbz#2232054 + +* Tue Aug 8 2023 Christian Schuermann 3.13.0-1 +- Update to 3.13.0 + +* Fri Jul 21 2023 Fedora Release Engineering - 3.12.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jul 04 2023 Python Maint - 3.12.0-2 +- Rebuilt for Python 3.12 + +* Sun Jun 11 2023 Christian Schuermann 3.12.0-1 +- Update to 3.12.0 +- Add new duckdns extra package +- Add localzone and oci extra packages since dependancies are now available on Fedora + +* Fri Jan 20 2023 Fedora Release Engineering - 3.11.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Thu Oct 27 2022 Christian Schuermann 3.11.7-1 +- Update to 3.11.7 + +* Wed Oct 12 2022 Christian Schuermann 3.11.6-1 +- Update to 3.11.6 + +* Fri Jul 22 2022 Fedora Release Engineering - 3.11.4-1 +- Update to 3.11.4 +- rhbz#2117798 + +* Fri Jul 22 2022 Fedora Release Engineering - 3.11.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jun 23 2022 Christian Schuermann 3.11.3-1 +- Update to 3.11.3 + +* Wed Jun 15 2022 Python Maint - 3.11.2-2 +- Rebuilt for Python 3.11 + +* Wed May 18 2022 Christian Schuermann 3.11.2-1 +- Update to 3.11.2 +- Disable OciInstancePrincipalProviderTests + +* Mon May 9 2022 Christian Schuermann 3.11.0-2 +- Disable tests that use tldextract until "suffix_list_url" cli flag is available + +* Mon May 9 2022 Christian Schuermann 3.11.0-1 +- Update to 3.11.0 + +* Sun May 1 2022 Christian Schuermann 3.10.0-1 +- Update to 3.10.0 + +* Thu Apr 28 2022 Christian Schuermann 3.9.5-3 +- Add "tests" conditional to make tests optional on EPEL +- Ensure that BuildRequires resolve correctly and only relevant tests run when building without extras + +* Tue Apr 26 2022 Christian Schuermann 3.9.5-2 +- Reenable tests for GoDady, Transip, Namecheap and NamecheapManaged providers +- Add gransy and ddns extra packages +- Remove explicit BuildRequires (handled by the pyproject_buildrequires macro) +- Remove explicit extra package Requires (handled by automatic dependency generator) +- Remove unused rhel7 macro + +* Tue Apr 19 2022 Christian Schuermann 3.9.5-1 +- update to 3.9.5 + +* Tue Feb 15 2022 Christian Schuermann 3.9.4-1 +- update to 3.9.4 + +* Fri Jan 21 2022 Fedora Release Engineering - 3.9.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Jan 17 2022 Christian Schuermann 3.9.2-1 +- update to 3.9.2 + +* Mon Jan 17 2022 Christian Schuermann 3.9.1-1 +- update to 3.9.1 + +* Thu Jan 6 2022 Christian Schuermann 3.9.0-1 +- update to 3.9.0 + +* Wed Dec 29 2021 Christian Schuermann 3.8.5-1 +- update to 3.8.5 + +* Tue Dec 28 2021 Christian Schuermann 3.8.4-1 +- update to 3.8.4 + +* Sat Nov 13 2021 Felix Schwarz - 3.8.3-1 +- update to 3.8.3 (#2020433) + +* Sat Oct 16 2021 Felix Schwarz - 3.8.1-1 +- update to 3.8.1 (#2014726) + +* Mon Oct 04 2021 Felix Schwarz - 3.8.0-1 +- update to 3.8.0 + +* Thu Aug 19 2021 Felix Schwarz - 3.7.0-1 +- update to 3.7.0 + +* Fri Jul 23 2021 Fedora Release Engineering - 3.5.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Fri Jun 04 2021 Python Maint - 3.5.3-3 +- Rebuilt for Python 3.10 + +* Wed Jan 27 2021 Fedora Release Engineering - 3.5.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Tue Jan 5 2021 Felix Schwarz - 3.5.3-1 +- update to 3.5.3 + +* Tue Nov 24 2020 Felix Schwarz - 3.5.2-1 +- update to 3.5.2 + +* Mon Nov 16 2020 Felix Schwarz - 3.5.1-1 +- update to 3.5.1 + +* Wed Jul 29 2020 Fedora Release Engineering - 3.3.17-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Fri Jul 10 2020 Miro Hrončok - 3.3.17-4 +- Add metadata for Python extras subpackages + +* Tue May 26 2020 Miro Hrončok - 3.3.17-3 +- Rebuilt for Python 3.9 + +* Wed Mar 04 2020 Felix Schwarz - 3.3.17-2 +- add missing sources + * Tue Mar 03 2020 Felix Schwarz - 3.3.17-1 - Update to 3.3.17 (#1764339) diff --git a/sources b/sources index 6927388..490f57d 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (dns-lexicon-3.3.4.tar.gz) = 274a1a4ffd1d767623723b6e9aee1e9f07022f3985cbc15f75cc410f477e1dcb7a674fa847119bdccab7332d058f77ef85771bd7bcdadbe2dd9483415a365a6d +SHA512 (dns-lexicon-3.21.1.tar.gz) = 0f53001edf2425afe7b7c4315e974ee47c956b659964998b942943788711c57634eea2d7974e21005be7f0edf16800e6577c49c8789e34f2133c4f5be8ac7ac1