Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-copr for openSUSE:Factory 
checked in at 2026-01-13 21:26:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-copr (Old)
 and      /work/SRC/openSUSE:Factory/.python-copr.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-copr"

Tue Jan 13 21:26:22 2026 rev:11 rq:1326750 version:2.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-copr/python-copr.changes  2025-04-07 
18:56:03.796282328 +0200
+++ /work/SRC/openSUSE:Factory/.python-copr.new.1928/python-copr.changes        
2026-01-13 21:26:25.839800157 +0100
@@ -1,0 +2,10 @@
+Fri Jan  9 22:25:53 UTC 2026 - Marius Grossu <[email protected]>
+
+- Update to 2.5:
+  * The wait() helper has become an official part of the python-copr API
+  * Copr now allows storing wildcard strings in the "Packit allowed forge 
projects" field
+  * The Fedora Copr Frontend is now protected by Anubis to defend against 
unreasonable bot load
+- complete changelog:
+  * 
https://github.com/fedora-copr/copr/compare/python-copr-2.1-1...python-copr-2.5-1
+
+-------------------------------------------------------------------

Old:
----
  copr-2.1.tar.gz

New:
----
  copr-2.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-copr.spec ++++++
--- /var/tmp/diff_new_pack.EEAM8M/_old  2026-01-13 21:26:26.483826738 +0100
+++ /var/tmp/diff_new_pack.EEAM8M/_new  2026-01-13 21:26:26.483826738 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-copr
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-copr
-Version:        2.1
+Version:        2.5
 Release:        0
 Summary:        Python client for copr service
 License:        GPL-2.0-or-later

++++++ copr-2.1.tar.gz -> copr-2.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/PKG-INFO new/copr-2.5/PKG-INFO
--- old/copr-2.1/PKG-INFO       2025-03-26 18:16:22.536998000 +0100
+++ new/copr-2.5/PKG-INFO       2025-12-15 12:50:53.327138200 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: copr
-Version: 2.1
+Version: 2.5
 Summary: Python client for copr service.
 Home-page: https://github.com/fedora-copr/copr
 Author: Valentin Gologuzov
@@ -19,6 +19,15 @@
 Requires-Dist: requests-toolbelt
 Requires-Dist: setuptools
 Requires-Dist: munch
+Dynamic: author
+Dynamic: author-email
+Dynamic: classifier
+Dynamic: description
+Dynamic: home-page
+Dynamic: license
+Dynamic: license-file
+Dynamic: requires-dist
+Dynamic: summary
 
 Copr is designed to be a lightweight buildsystem that allows contributors
 to create packages, put them in repositories, and make it easy for users
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/test/client_v3/test_modules.py 
new/copr-2.5/copr/test/client_v3/test_modules.py
--- old/copr-2.1/copr/test/client_v3/test_modules.py    2024-12-01 
22:14:17.000000000 +0100
+++ new/copr-2.5/copr/test/client_v3/test_modules.py    1970-01-01 
01:00:00.000000000 +0100
@@ -1,69 +0,0 @@
-import os
-import pytest
-import tempfile
-import shutil
-from json import loads
-from copr.test import mock
-from copr.test.client_v3.test_auth import FakeCache
-from copr.v3 import ModuleProxy
-
-
-class TestModuleProxy(object):
-    config_auth = {
-        "copr_url": "http://copr";,
-        "login": "test_api_login",
-        "token": "test_api_token",
-    }
-
-    def setup_method(self, method):
-        self.tmpdir = tempfile.mkdtemp(prefix='test-python-copr-modules')
-        self.yaml_file = os.path.join(self.tmpdir, 'test.yaml')
-        with open(self.yaml_file, 'w') as f:
-            f.write("")
-
-    def teardown_method(self, method):
-        shutil.rmtree(self.tmpdir)
-
-    @pytest.mark.parametrize('distgit_opt', [None, 'fedora'])
-    @mock.patch('copr.v3.requests.requests.Session.request')
-    def test_module_dist_git_choice_url(self, request, distgit_opt):
-        proxy = ModuleProxy(self.config_auth)
-        proxy.auth.cache = FakeCache(None)
-        proxy.build_from_url('owner', 'project', 'http://test.yaml',
-                             distgit=distgit_opt)
-
-        assert len(request.call_args_list) == 1
-        call = request.call_args_list[0]
-        kwargs = call[1]
-        json = kwargs['json']
-        if distgit_opt is None:
-            assert 'distgit' not in json
-        else:
-            assert json['distgit'] == distgit_opt
-
-        assert json['scmurl'] == 'http://test.yaml'
-
-    @pytest.mark.parametrize('distgit_opt', [None, 'fedora'])
-    @mock.patch('copr.v3.requests.requests.Session.request')
-    def test_module_dist_git_choice_upload(self, request, distgit_opt):
-        proxy = ModuleProxy(self.config_auth)
-        proxy.auth.cache = FakeCache(None)
-        proxy.build_from_file('owner', 'project',
-                              self.yaml_file,
-                              distgit=distgit_opt)
-
-        assert len(request.call_args_list) == 1
-        call = request.call_args_list[0]
-        kwargs = call[1]
-        json = kwargs['json']
-
-        assert json is None
-
-        # ('json', 'jsonstr', 'application/json')
-        json_encoded = kwargs['data'].encoder.fields['json']
-        json = loads(json_encoded[1])
-
-        if distgit_opt is None:
-            assert json is None
-        else:
-            assert json['distgit'] == distgit_opt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/v3/__init__.py 
new/copr-2.5/copr/v3/__init__.py
--- old/copr-2.1/copr/v3/__init__.py    2024-12-01 22:14:17.000000000 +0100
+++ new/copr-2.5/copr/v3/__init__.py    2025-12-09 15:09:38.000000000 +0100
@@ -1,6 +1,6 @@
 from __future__ import absolute_import
 
-from .helpers import config_from_file
+from .helpers import config_from_file, wait
 from .client import Client
 from .proxies import BaseProxy
 from .proxies.project import ProjectProxy
@@ -9,7 +9,6 @@
 from .proxies.mock_chroot import MockChrootProxy
 from .proxies.project_chroot import ProjectChrootProxy
 from .proxies.build_chroot import BuildChrootProxy
-from .proxies.module import ModuleProxy
 from .exceptions import (CoprException,
                          CoprRequestException,
                          CoprNoResultException,
@@ -21,6 +20,7 @@
 
 __all__ = [
     "config_from_file",
+    "wait",
     "Client",
 
     "BaseProxy",
@@ -29,7 +29,6 @@
     "MockChrootProxy",
     "ProjectChrootProxy",
     "BuildChrootProxy",
-    "ModuleProxy",
 
     "CoprException",
     "CoprRequestException",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/v3/client.py 
new/copr-2.5/copr/v3/client.py
--- old/copr-2.1/copr/v3/client.py      2024-12-01 22:14:17.000000000 +0100
+++ new/copr-2.5/copr/v3/client.py      2025-12-09 15:09:38.000000000 +0100
@@ -3,7 +3,6 @@
 from .proxies.project import ProjectProxy
 from .proxies.build import BuildProxy
 from .proxies.package import PackageProxy
-from .proxies.module import ModuleProxy
 from .proxies.mock_chroot import MockChrootProxy
 from .proxies.monitor import MonitorProxy
 from .proxies.project_chroot import ProjectChrootProxy
@@ -18,7 +17,6 @@
         self.project_proxy = ProjectProxy(config)
         self.build_proxy = BuildProxy(config)
         self.package_proxy = PackageProxy(config)
-        self.module_proxy = ModuleProxy(config)
         self.mock_chroot_proxy = MockChrootProxy(config)
         self.monitor_proxy = MonitorProxy(config)
         self.project_chroot_proxy = ProjectChrootProxy(config)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/v3/proxies/__init__.py 
new/copr-2.5/copr/v3/proxies/__init__.py
--- old/copr-2.1/copr/v3/proxies/__init__.py    2024-12-01 22:14:17.000000000 
+0100
+++ new/copr-2.5/copr/v3/proxies/__init__.py    2025-12-09 15:09:38.000000000 
+0100
@@ -1,7 +1,7 @@
 import os
 
 from copr.v3.auth import auth_from_config
-from copr.v3.requests import munchify, Request
+from copr.v3.requests import munchify, Request, POST
 from ..helpers import for_all_methods, bind_proxy, config_from_file
 
 
@@ -62,3 +62,17 @@
         if not self.auth.username:
             self.auth.make()
         return self.auth.username
+
+    def new_api_token(self):
+        """
+        Generate a new API token
+
+        :return: Munch
+        """
+        endpoint = "/api-token"
+        response = self.request.send(
+            endpoint=endpoint,
+            method=POST,
+            auth=self.auth,
+        )
+        return munchify(response)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/v3/proxies/build.py 
new/copr-2.5/copr/v3/proxies/build.py
--- old/copr-2.1/copr/v3/proxies/build.py       2024-12-01 22:14:17.000000000 
+0100
+++ new/copr-2.5/copr/v3/proxies/build.py       2025-12-09 15:09:38.000000000 
+0100
@@ -2,7 +2,7 @@
 
 import os
 from . import BaseProxy
-from ..requests import FileRequest, munchify, POST
+from ..requests import FileRequest, munchify, DELETE, POST, PUT
 from ..exceptions import CoprValidationException
 from ..helpers import for_all_methods, bind_proxy
 
@@ -85,7 +85,7 @@
         """
         endpoint = "/build/cancel/{0}".format(build_id)
         response = self.request.send(
-            endpoint=endpoint, method=POST, auth=self.auth)
+            endpoint=endpoint, method=PUT, auth=self.auth)
         return munchify(response)
 
     def create_from_urls(self, ownername, projectname, urls, buildopts=None, 
project_dirname=None):
@@ -356,7 +356,7 @@
         """
         endpoint = "/build/delete/{0}".format(build_id)
         response = self.request.send(
-            endpoint=endpoint, method=POST, auth=self.auth)
+            endpoint=endpoint, method=DELETE, auth=self.auth)
         return munchify(response)
 
     def delete_list(self, build_ids):
@@ -370,5 +370,5 @@
         endpoint = "/build/delete/list"
         data = {"builds": build_ids}
         response = self.request.send(
-            endpoint=endpoint, data=data, method=POST, auth=self.auth)
+            endpoint=endpoint, data=data, method=DELETE, auth=self.auth)
         return munchify(response)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/v3/proxies/module.py 
new/copr-2.5/copr/v3/proxies/module.py
--- old/copr-2.1/copr/v3/proxies/module.py      2024-12-01 22:14:17.000000000 
+0100
+++ new/copr-2.5/copr/v3/proxies/module.py      1970-01-01 01:00:00.000000000 
+0100
@@ -1,76 +0,0 @@
-from __future__ import absolute_import
-
-import os
-from . import BaseProxy
-from ..requests import FileRequest, munchify, POST
-from ..helpers import for_all_methods, bind_proxy
-
-
-@for_all_methods(bind_proxy)
-class ModuleProxy(BaseProxy):
-
-    def build_from_url(self, ownername, projectname, url, branch="master",
-                       distgit=None):
-        """
-        Build a module from a URL pointing to a modulemd YAML file
-
-        :param str ownername:
-        :param str projectname:
-        :param str url: URL pointing to a raw .yaml file
-        :param str branch:
-        :return: Munch
-        """
-        endpoint = "/module/build/{ownername}/{projectname}"
-        params = {
-            "ownername": ownername,
-            "projectname": projectname,
-        }
-        data = {
-            "scmurl": url,
-            "branch": branch,
-        }
-        if distgit is not None:
-            data["distgit"] = distgit
-        response = self.request.send(
-            endpoint=endpoint,
-            method=POST,
-            params=params,
-            data=data,
-            auth=self.auth,
-        )
-        return munchify(response)
-
-    def build_from_file(self, ownername, projectname, path, distgit=None):
-        """
-        Build a module from a local modulemd YAML file
-
-        :param str ownername:
-        :param str projectname:
-        :param str path:
-        :return: Munch
-        """
-        endpoint = "/module/build/{ownername}/{projectname}"
-        f = open(path, "rb")
-        params = {
-            "ownername": ownername,
-            "projectname": projectname,
-        }
-        files = {
-            "modulemd": (os.path.basename(f.name), f, "application/x-rpm")
-        }
-        data = None
-        if distgit is not None:
-            data = {"distgit": distgit}
-        request = FileRequest(
-            files=files,
-            api_base_url=self.api_base_url,
-            connection_attempts=self.config.get("connection_attempts", 1)
-        )
-        response = request.send(
-            endpoint=endpoint,
-            method=POST,
-            params=params,
-            data=data,
-            auth=self.auth,
-        )
-        return munchify(response)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/v3/proxies/package.py 
new/copr-2.5/copr/v3/proxies/package.py
--- old/copr-2.1/copr/v3/proxies/package.py     2024-12-01 22:14:17.000000000 
+0100
+++ new/copr-2.5/copr/v3/proxies/package.py     2025-12-09 15:09:38.000000000 
+0100
@@ -1,7 +1,7 @@
 from __future__ import absolute_import
 from . import BaseProxy
 from .build import BuildProxy
-from ..requests import munchify, POST
+from ..requests import munchify, DELETE, POST, PUT
 from ..helpers import for_all_methods, bind_proxy
 
 
@@ -141,7 +141,7 @@
             "package_name": packagename,
         }
         response = self.request.send(
-            endpoint=endpoint, data=data, method=POST, auth=self.auth)
+            endpoint=endpoint, data=data, method=PUT, auth=self.auth)
         return munchify(response)
 
     def build(self, ownername, projectname, packagename, buildopts=None, 
project_dirname=None):
@@ -181,5 +181,5 @@
             "package_name": packagename,
         }
         response = self.request.send(
-            endpoint=endpoint, data=data, method=POST, auth=self.auth)
+            endpoint=endpoint, data=data, method=DELETE, auth=self.auth)
         return munchify(response)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/v3/proxies/project.py 
new/copr-2.5/copr/v3/proxies/project.py
--- old/copr-2.1/copr/v3/proxies/project.py     2025-03-10 16:48:35.000000000 
+0100
+++ new/copr-2.5/copr/v3/proxies/project.py     2025-12-09 15:09:38.000000000 
+0100
@@ -3,7 +3,7 @@
 import warnings
 
 from . import BaseProxy
-from ..requests import munchify, POST, GET, PUT
+from ..requests import munchify, DELETE, POST, PUT
 from ..helpers import for_all_methods, bind_proxy
 
 
@@ -236,7 +236,7 @@
 
         response = self.request.send(
             endpoint=endpoint,
-            method=POST,
+            method=PUT,
             params=params,
             data=data,
             auth=self.auth,
@@ -261,7 +261,7 @@
         }
         response = self.request.send(
             endpoint=endpoint,
-            method=POST,
+            method=DELETE,
             params=params,
             data=data,
             auth=self.auth,
@@ -301,12 +301,12 @@
 
     def can_build_in(self, who, ownername, projectname):
         """
-        Return `True` a user can submit builds for a ownername/projectname
+        Return ``True`` a user can submit builds for a ownername/projectname
 
         :param str who: name of the user checking their permissions
         :param str ownername: owner of the project
         :param str projectname: name of the project
-        :return Bool: `True` or raise
+        :return Bool: ``True`` or raise
         """
         endpoint = ("/project/permissions/can_build_in/"
                     "{who}/{ownername}/{projectname}/")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/v3/proxies/project_chroot.py 
new/copr-2.5/copr/v3/proxies/project_chroot.py
--- old/copr-2.1/copr/v3/proxies/project_chroot.py      2024-12-01 
22:14:17.000000000 +0100
+++ new/copr-2.5/copr/v3/proxies/project_chroot.py      2025-12-09 
15:09:38.000000000 +0100
@@ -2,7 +2,7 @@
 
 import os
 from . import BaseProxy
-from ..requests import FileRequest, munchify, POST
+from ..requests import FileRequest, munchify, PUT
 from ..helpers import for_all_methods, bind_proxy
 
 
@@ -72,7 +72,7 @@
             Possible values are 'default', 'simple', 'nspawn'.
         :param list reset_fields: list of chroot attributes, that should be
             reseted to their respective defaults. Possible values are
-            `additional_packages`, `additional_modules`, `isolation`, etc. See
+            ``additional_packages``, ``additional_modules``, ``isolation``, 
etc. See
             the output of `ProjectProxy.get` for all the possible field names.
         :return: Munch
         """
@@ -110,7 +110,7 @@
         )
         response = request.send(
             endpoint=endpoint,
-            method=POST,
+            method=PUT,
             params=params,
             data=data,
             auth=self.auth,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr/v3/requests.py 
new/copr-2.5/copr/v3/requests.py
--- old/copr-2.1/copr/v3/requests.py    2025-03-10 16:48:35.000000000 +0100
+++ new/copr-2.5/copr/v3/requests.py    2025-12-09 15:09:38.000000000 +0100
@@ -13,6 +13,7 @@
 GET = "GET"
 POST = "POST"
 PUT = "PUT"
+DELETE = "DELETE"
 
 
 class Request(object):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr.egg-info/PKG-INFO 
new/copr-2.5/copr.egg-info/PKG-INFO
--- old/copr-2.1/copr.egg-info/PKG-INFO 2025-03-26 18:16:22.000000000 +0100
+++ new/copr-2.5/copr.egg-info/PKG-INFO 2025-12-15 12:50:53.000000000 +0100
@@ -1,6 +1,6 @@
-Metadata-Version: 2.1
+Metadata-Version: 2.4
 Name: copr
-Version: 2.1
+Version: 2.5
 Summary: Python client for copr service.
 Home-page: https://github.com/fedora-copr/copr
 Author: Valentin Gologuzov
@@ -19,6 +19,15 @@
 Requires-Dist: requests-toolbelt
 Requires-Dist: setuptools
 Requires-Dist: munch
+Dynamic: author
+Dynamic: author-email
+Dynamic: classifier
+Dynamic: description
+Dynamic: home-page
+Dynamic: license
+Dynamic: license-file
+Dynamic: requires-dist
+Dynamic: summary
 
 Copr is designed to be a lightweight buildsystem that allows contributors
 to create packages, put them in repositories, and make it easy for users
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/copr.egg-info/SOURCES.txt 
new/copr-2.5/copr.egg-info/SOURCES.txt
--- old/copr-2.1/copr.egg-info/SOURCES.txt      2025-03-26 18:16:22.000000000 
+0100
+++ new/copr-2.5/copr.egg-info/SOURCES.txt      2025-12-15 12:50:53.000000000 
+0100
@@ -21,7 +21,6 @@
 copr/test/client_v3/test_builds.py
 copr/test/client_v3/test_general.py
 copr/test/client_v3/test_helpers.py
-copr/test/client_v3/test_modules.py
 copr/test/client_v3/test_packages.py
 copr/test/client_v3/test_requests.py
 copr/test/resources/build_config.200.json
@@ -42,7 +41,6 @@
 copr/v3/proxies/build.py
 copr/v3/proxies/build_chroot.py
 copr/v3/proxies/mock_chroot.py
-copr/v3/proxies/module.py
 copr/v3/proxies/monitor.py
 copr/v3/proxies/package.py
 copr/v3/proxies/project.py
@@ -73,4 +71,5 @@
 docs/client_v3/package_source_types.rst
 docs/client_v3/pagination.rst
 docs/client_v3/proxies.rst
+docs/client_v3/utilities.rst
 docs/client_v3/working_with_proxies_directly.rst
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/docs/ClientV1.rst 
new/copr-2.5/docs/ClientV1.rst
--- old/copr-2.1/docs/ClientV1.rst      2024-12-01 22:14:17.000000000 +0100
+++ new/copr-2.5/docs/ClientV1.rst      2025-12-09 15:09:38.000000000 +0100
@@ -1,7 +1,8 @@
+:orphan:
+
 .. warning::
     Legacy client is obsolete, please use Client version 3 instead. :ref:`This 
document <migration>` describes the migration process.
 
-
 Legacy client
 =============
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/docs/ClientV2.rst 
new/copr-2.5/docs/ClientV2.rst
--- old/copr-2.1/docs/ClientV2.rst      2024-12-01 22:14:17.000000000 +0100
+++ new/copr-2.5/docs/ClientV2.rst      2025-12-09 15:09:38.000000000 +0100
@@ -1,3 +1,5 @@
+:orphan:
+
 .. warning::
     Client version 2 is obsolete, please use Client version 3 instead.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/docs/ClientV3.rst 
new/copr-2.5/docs/ClientV3.rst
--- old/copr-2.1/docs/ClientV3.rst      2024-12-01 22:14:17.000000000 +0100
+++ new/copr-2.5/docs/ClientV3.rst      2025-12-09 15:09:38.000000000 +0100
@@ -38,6 +38,7 @@
     client_v3/data_structures.rst
     client_v3/error_handling.rst
     client_v3/pagination.rst
+    client_v3/utilities.rst
     client_v3/working_with_proxies_directly.rst
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/docs/client_v3/migration.rst 
new/copr-2.5/docs/client_v3/migration.rst
--- old/copr-2.1/docs/client_v3/migration.rst   2024-12-01 22:14:17.000000000 
+0100
+++ new/copr-2.5/docs/client_v3/migration.rst   2025-12-09 15:09:38.000000000 
+0100
@@ -1,3 +1,5 @@
+:orphan:
+
 .. _migration:
 
 Migration
@@ -96,4 +98,3 @@
 | ``build_module(...)``               | ``module_proxy.build_from_url``,       
                     |
 |                                     | ``module_proxy.build_from_file``       
                     |
 
+-------------------------------------+-------------------------------------------------------------+
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/docs/client_v3/package_source_types.rst 
new/copr-2.5/docs/client_v3/package_source_types.rst
--- old/copr-2.1/docs/client_v3/package_source_types.rst        2024-12-01 
22:14:17.000000000 +0100
+++ new/copr-2.5/docs/client_v3/package_source_types.rst        2025-12-09 
15:09:38.000000000 +0100
@@ -2,14 +2,14 @@
 ===================
 
 Read more about source types in the
-`User Documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#build-source-types>`_.
+`User Documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#build-source-types>`__.
 
 
 SCM
 ---
 
 Parameters when ``source_type=scm`` is used.
-See `User Documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#scm>`_ for more 
information.
+See `User Documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#scm>`__ for more 
information.
 
 =====================  ==================== ===============
 Field                  Type                 Description
@@ -19,7 +19,7 @@
 subdirectory           str
 spec                   str
 scm_type               str                  "git", "svn"
-source_build_method    str                  See `User documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#scm>`_ for more info
+source_build_method    str                  See `User documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#scm>`__ for more info
 =====================  ==================== ===============
 
 
@@ -27,7 +27,7 @@
 --------
 
 Parameters when ``source_type=rubygems`` is used.
-See `User Documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#rubygems>`_ for more 
information.
+See `User Documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#rubygems>`__ for 
more information.
 
 ==================  ==================== ===============
 Field               Type                 Description
@@ -40,7 +40,7 @@
 ----
 
 Parameters when ``source_type=pypi`` is used.
-See `User Documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#pypi>`_ for more 
information.
+See `User Documentation 
<https://docs.pagure.org/copr.copr/user_documentation.html#pypi>`__ for more 
information.
 
 =====================  ==================== ===============
 Field                  Type                 Description
@@ -56,7 +56,7 @@
 ------
 
 Parameters when ``source_type=custom`` is used.
-See `User Documentation 
<https://docs.pagure.org/copr.copr/custom_source_method.html#custom-source-method>`_
 for more information.
+See `User Documentation 
<https://docs.pagure.org/copr.copr/custom_source_method.html#custom-source-method>`__
 for more information.
 
 =====================  ==================== ===============
 Field                  Type                 Description
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/docs/client_v3/proxies.rst 
new/copr-2.5/docs/client_v3/proxies.rst
--- old/copr-2.1/docs/client_v3/proxies.rst     2024-12-01 22:14:17.000000000 
+0100
+++ new/copr-2.5/docs/client_v3/proxies.rst     2025-12-09 15:09:38.000000000 
+0100
@@ -40,13 +40,6 @@
    :members:
 
 
-Module
-------
-
-.. autoclass:: copr.v3.proxies.module.ModuleProxy
-   :members:
-
-
 Monitor
 -------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/docs/client_v3/utilities.rst 
new/copr-2.5/docs/client_v3/utilities.rst
--- old/copr-2.1/docs/client_v3/utilities.rst   1970-01-01 01:00:00.000000000 
+0100
+++ new/copr-2.5/docs/client_v3/utilities.rst   2025-12-09 15:09:38.000000000 
+0100
@@ -0,0 +1,53 @@
+.. _utilities:
+
+Helper Functions
+================
+
+The copr.v3 module provides several utility functions that make working with 
builds and other operations more convenient.
+
+wait function
+-------------
+
+The ``wait`` function allows you to wait for builds to complete before 
continuing execution.
+
+.. autofunction:: copr.v3.wait
+
+Usage Example
+~~~~~~~~~~~~~
+
+.. code-block:: python
+
+    from copr.v3 import Client, wait
+
+    # Create a client
+    client = Client.create_from_config_file()
+
+    # Submit builds
+    build1 = client.build_proxy.create_from_file("@user", "project", 
"/path/to/file.src.rpm")
+    build2 = client.build_proxy.create_from_url("@user", "project", 
"http://example.com/package.src.rpm";)
+
+    # Wait for both builds to finish
+    finished_builds = wait([build1, build2])
+
+    # Check the results
+    for build in finished_builds:
+        print(f"Build {build.id} finished with state: {build.state}")
+
+With Callback
+~~~~~~~~~~~~~
+
+You can provide a callback function to monitor progress:
+
+.. code-block:: python
+
+    from copr.v3 import Client, wait
+
+    def progress_callback(builds):
+        for build in builds:
+            print(f"Build {build.id}: {build.state}")
+
+    client = Client.create_from_config_file()
+    build = client.build_proxy.create_from_file("@user", "project", 
"/path/to/file.src.rpm")
+    
+    # Wait with progress updates every 30 seconds
+    wait(build, callback=progress_callback)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/docs/conf.py new/copr-2.5/docs/conf.py
--- old/copr-2.1/docs/conf.py   2024-12-01 22:14:17.000000000 +0100
+++ new/copr-2.5/docs/conf.py   2025-12-09 15:09:38.000000000 +0100
@@ -11,9 +11,9 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
-import sys, os
-
-
+import importlib
+import os
+import sys
 
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
@@ -27,7 +27,13 @@
 
 # Add any Sphinx extension module names here, as strings. They can be 
extensions
 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
-extensions = ['sphinx.ext.autodoc', 'sphinx.ext.coverage', 
'sphinx.ext.ifconfig', 'sphinx.ext.viewcode']
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.coverage',
+    'sphinx.ext.ifconfig',
+    'sphinx.ext.viewcode',
+    'sphinx.ext.todo'
+]
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
@@ -100,11 +106,7 @@
 # Use readthedocs theme if it is installed
 # Ideally, we want to develop the documentation in the same theme
 # that will be used in the production
-try:
-    import sphinx_rtd_theme
-    html_theme = "sphinx_rtd_theme"
-    html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
-except ImportError:
+if not importlib.util.find_spec("sphinx_rtd_theme"):
     print("Please install the readthedocs theme with:")
     print("dnf install python*-sphinx_rtd_theme")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/python-copr.spec 
new/copr-2.5/python-copr.spec
--- old/copr-2.1/python-copr.spec       2025-03-26 08:57:56.000000000 +0100
+++ new/copr-2.5/python-copr.spec       2025-12-09 15:45:42.000000000 +0100
@@ -1,13 +1,7 @@
 %global srcname copr
 
-%if 0%{?rhel} && 0%{?rhel} <= 7
-%global with_python2 1
-%else
-%global with_python3 1
-%endif
-
 Name:       python-copr
-Version:    2.1
+Version:    2.5
 Release:    1%{?dist}
 Summary:    Python interface for Copr
 
@@ -24,36 +18,6 @@
 BuildRequires: libxslt
 BuildRequires: util-linux
 
-%if %{with python2}
-%if 0%{?rhel} && 0%{?rhel} <= 7
-BuildRequires: python-setuptools
-BuildRequires: python-requests
-BuildRequires: python-requests-toolbelt
-BuildRequires: python-mock
-BuildRequires: python-munch
-BuildRequires: python-filelock
-BuildRequires: python-configparser
-BuildRequires: pytest
-BuildRequires: python2-devel
-BuildRequires: python2-requests-gssapi
-# for doc package
-BuildRequires: python-sphinx
-BuildRequires: python-docutils
-%else
-BuildRequires: python2-setuptools
-BuildRequires: python2-requests
-BuildRequires: python2-requests-toolbelt
-BuildRequires: python2-pytest
-BuildRequires: python2-devel
-BuildRequires: python-munch
-BuildRequires: python2-filelock
-BuildRequires: python2-configparser
-BuildRequires: python2-requests-gssapi
-# for doc package
-BuildRequires: python2-sphinx
-BuildRequires: python2-docutils
-%endif
-%endif
 #doc
 BuildRequires: make
 
@@ -67,35 +31,6 @@
 
 %description %_description
 
-%if %{with python2}
-%package -n python2-copr
-Summary: %summary
-
-%if 0%{?rhel} == 7
-Requires: python-configparser
-Requires: python-munch
-Requires: python-filelock
-Requires: python-requests
-Requires: python-requests-toolbelt
-Requires: python-requests-gssapi
-Requires: python-setuptools
-%else
-Requires: python2-configparser
-Requires: python2-munch
-Requires: python2-filelock
-Requires: python2-requests
-Requires: python2-requests-toolbelt
-Requires: python2-setuptools
-Requires: python2-requests-gssapi
-%endif
-
-%{?python_provide:%python_provide python2-copr}
-
-%description -n python2-copr %_description
-%endif
-# with python2
-
-%if %{with python3}
 %package -n python3-copr
 Summary:        Python interface for Copr
 
@@ -144,9 +79,6 @@
 This package contains python interface to access Copr service. Mostly useful
 for developers only.
 
-%endif
-# with python3
-
 
 %package -n python-copr-doc
 Summary:    Code documentation for python-copr package
@@ -164,13 +96,12 @@
 
 
 %build
-%if %{with python3}
+%if 0%{?rhel} && 0%{?rhel} <= 8
 version=%version %py3_build
+%else
+version=%version %pyproject_wheel
 %endif
 
-%if %{with python2}
-version=%version %py2_build
-%endif
 
 mv copr/README.rst ./
 
@@ -179,12 +110,10 @@
 
 
 %install
-%if %{with python3}
+%if 0%{?rhel} && 0%{?rhel} <= 8
 version=%version %py3_install
-%endif
-
-%if %{with python2}
-version=%version %py2_install
+%else
+version=%version %pyproject_install
 %endif
 
 find %{buildroot} -name '*.exe' -delete
@@ -193,36 +122,35 @@
 cp -a docs/_build/html %{buildroot}%{_pkgdocdir}/
 
 %check
-%if %{with python3}
 %{__python3} -m pytest -vv copr/test
-%endif
-
-%if %{with python2}
-%{__python2} -m pytest -vv copr/test
-%endif
 
 
-%if %{with python3}
 %files -n python3-copr
 %license LICENSE
 %doc README.rst
 %{python3_sitelib}/*
-%endif
-# with python3
 
-%if %{with python2}
-%files -n python2-copr
-%license LICENSE
-%doc README.rst
-%{python2_sitelib}/*
-%endif
-# with python2
 
 %files -n python-copr-doc
 %license LICENSE
 %doc %{_pkgdocdir}
 
 %changelog
+* Tue Dec 09 2025 Jiri Kyjovsky <[email protected]> 2.5-1
+- Add API endpoint for generating a new token
+- Make copr.v3.helpers.wait official part of API
+
+* Mon Sep 29 2025 Jakub Kadlcik <[email protected]> 2.4-1
+- Drop support for building modules
+
+* Tue Sep 16 2025 Jakub Kadlcik <[email protected]> 2.3-1
+- Use correct used HTTP methods for delete and update requests
+- Introduce v3.requests.DELETE method
+
+* Tue Aug 26 2025 Jakub Kadlcik <[email protected]> 2.2-1
+- Stop using deprecated %%py3_build/%%py3_install macros
+- Remove rhel7 conditions and remove python2 support
+
 * Tue Mar 25 2025 Pavel Raiskup <[email protected]> 2.1-1
 - doc: remove a non existent parameter from docstring
 - drop six dependency
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/copr-2.1/setup.py new/copr-2.5/setup.py
--- old/copr-2.1/setup.py       2025-03-26 08:57:56.000000000 +0100
+++ new/copr-2.5/setup.py       2025-12-09 15:45:42.000000000 +0100
@@ -29,7 +29,7 @@
 
 setup(
     name='copr',
-    version="2.1",
+    version="2.5",
     description=__description__,
     long_description=long_description,
     author=__author__,

Reply via email to