<pre style='margin:0'>
Renee Otten (reneeotten) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/fee0353da65d8510de99b265e48a0da229035a93">https://github.com/macports/macports-ports/commit/fee0353da65d8510de99b265e48a0da229035a93</a></p>
<pre style="white-space: pre; background: #F8F8F8"><span style='display:block; white-space:pre;color:#808000;'>commit fee0353da65d8510de99b265e48a0da229035a93
</span>Author: Mark Mentovai <mark@mentovai.com>
AuthorDate: Tue Oct 22 00:46:05 2024 -0400

<span style='display:block; white-space:pre;color:#404040;'>    py-requests-oauthlib: update to 2.0.0, add py313 subport
</span>---
 python/py-requests-oauthlib/Portfile               |  13 ++-
 .../files/patch-no_selenium_tests.diff             | 121 +++++++++++++++++++++
 2 files changed, 129 insertions(+), 5 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-requests-oauthlib/Portfile b/python/py-requests-oauthlib/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index acdd9bd627d..324a2320dfa 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-requests-oauthlib/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-requests-oauthlib/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -4,7 +4,7 @@ PortSystem          1.0
</span> PortGroup           github 1.0
 PortGroup           python 1.0
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup        requests requests-oauthlib 1.3.1 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        requests requests-oauthlib 2.0.0 v
</span> name                py-${name}
 categories-append   devel net
 platforms           {darwin any}
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -16,11 +16,11 @@ description         OAuth for Humans
</span> long_description    {*}${description}: an easy-to-use Python interface for building \
                     OAuth1 and OAuth2 clients.
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums           rmd160  ca29983b1c777d1b89d12f16d571177c918322ad \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  6807c32046ac493d51e4efe236803413871de3ce34bf97b9e36ae578287ac1f1 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    48352
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           rmd160  5745b9c2ca02e8a1a07380c05c45ab5e34bebf8a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  91dedcfb4d577aaba88122496d16927150accf12b641f9d75078c59b66171a66 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    51366
</span> 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-python.versions     27 38 39 310 311 312
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+python.versions     27 38 39 310 311 312 313
</span> 
 if {${name} ne ${subport}} {
     depends_build-append \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -34,6 +34,9 @@ if {${name} ne ${subport}} {
</span>                     port:py${python.version}-mock \
                     port:py${python.version}-requests-mock
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    patchfiles-append \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    patch-no_selenium_tests.diff
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     test.run        yes
 
     livecheck.type  none
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-requests-oauthlib/files/patch-no_selenium_tests.diff b/python/py-requests-oauthlib/files/patch-no_selenium_tests.diff
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..4c85c346614
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-requests-oauthlib/files/patch-no_selenium_tests.diff
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,121 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From af35e7a110268a7f5112aef79c068652358cec67 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+From: Mark Mentovai <mark@mentovai.com>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Date: Tue, 29 Oct 2024 11:23:34 -0400
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Subject: [PATCH] Disable Selenium WebDriver-based test
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+MIME-Version: 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Content-Type: text/plain; charset=UTF-8
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+Content-Transfer-Encoding: 8bit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+As of this writing, MacPorts’ py-selenium package is quite outdated
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+(4.3.0, 2022-06-23 vs. current 4.25.0, 2024-09-20) and does not support
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+recent Python versions (through 3.10 vs. current 3.13). Selenium is a
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+tricky upgrade, so just disable the one test that uses Selenium.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+---
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tests/examples/base.py                       | 40 --------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ tests/examples/test_native_spa_pkce_auth0.py | 39 -------------------
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 2 files changed, 79 deletions(-)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ delete mode 100644 tests/examples/test_native_spa_pkce_auth0.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git tests/examples/base.py tests/examples/base.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 2efa5dd74653..1e3d436bfd2d 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- tests/examples/base.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ tests/examples/base.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -3,11 +3,6 @@ import os
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ import subprocess
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ import shlex
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ import shutil
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-from selenium import webdriver
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-from selenium.webdriver.common.by import By
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-from selenium.webdriver.common.keys import Keys
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-from selenium.webdriver.support import expected_conditions as EC
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-from selenium.webdriver.support.wait import WebDriverWait
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ cwd = os.path.dirname(os.path.realpath(__file__))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -69,38 +64,3 @@ class Sample():
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             self.assertTrue(False, "timeout when looking for output")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         return self.outputs[-1]
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+             
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-class Browser():
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    def setUp(self):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        super().setUp()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        options = webdriver.ChromeOptions()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        options.add_argument("--headless=new")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.driver = webdriver.Chrome(options=options)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.user_username = os.environ.get("AUTH0_USERNAME")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.user_password = os.environ.get("AUTH0_PASSWORD")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if not self.user_username or not self.user_password:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            self.skipTest("auth0 is not configured properly")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    def tearDown(self):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        super().tearDown()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.driver.quit()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    def authorize_auth0(self, authorize_url, expected_redirect_uri):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.driver.get(authorize_url)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        username = self.driver.find_element(By.ID, "username")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        password = self.driver.find_element(By.ID, "password")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        wait = WebDriverWait(self.driver, timeout=2)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        wait.until(lambda d : username.is_displayed())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        wait.until(lambda d : password.is_displayed())
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        username.clear()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        username.send_keys(self.user_username)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        password.send_keys(self.user_password)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        username.send_keys(Keys.RETURN)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        wait.until(EC.url_contains(expected_redirect_uri))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        return self.driver.current_url
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+diff --git tests/examples/test_native_spa_pkce_auth0.py tests/examples/test_native_spa_pkce_auth0.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+deleted file mode 100644
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+index 6ff41e251ca4..000000000000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- tests/examples/test_native_spa_pkce_auth0.py
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -1,39 +0,0 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-import os
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-import unittest
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-from . import base
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-class TestNativeAuth0Test(base.Sample, base.Browser, unittest.TestCase):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    def setUp(self):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        super().setUp()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.client_id = os.environ.get("AUTH0_PKCE_CLIENT_ID")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.idp_domain = os.environ.get("AUTH0_DOMAIN")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        if not self.client_id or not self.idp_domain:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            self.skipTest("native auth0 is not configured properly")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-    def test_login(self):
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        # redirect_uri is http://
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = "1"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.run_sample(
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            "native_spa_pkce_auth0.py", {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                "OAUTH_CLIENT_ID": self.client_id,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-                "OAUTH_IDP_DOMAIN": self.idp_domain,
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-            }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        )
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        authorize_url = self.wait_for_pattern("https://")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        redirect_uri = self.authorize_auth0(authorize_url, "http://")
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.write(redirect_uri)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        last_line = self.wait_for_end()
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        import ast
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        response = ast.literal_eval(last_line)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.assertIn("access_token", response)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.assertIn("id_token", response)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.assertIn("scope", response)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.assertIn("openid", response["scope"])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.assertIn("expires_in", response)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.assertIn("expires_at", response)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.assertIn("token_type", response)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-        self.assertEqual("Bearer", response["token_type"])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+-- 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+2.47.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span></pre><pre style='margin:0'>

</pre>