From a2c1b8992f5d153c6210178cda47b8ae96b91fb5 Mon Sep 17 00:00:00 2001 From: Tom Ritchford Date: Sun, 5 Dec 2021 18:59:56 +0100 Subject: [PATCH] Add __copy__, __deepcopy__ to URL. Fixes: #7400 --- lib/sqlalchemy/engine/url.py | 14 ++++++++++++++ test/engine/test_parseconnect.py | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/sqlalchemy/engine/url.py b/lib/sqlalchemy/engine/url.py index 7cdf25c21a..9dad7fad23 100644 --- a/lib/sqlalchemy/engine/url.py +++ b/lib/sqlalchemy/engine/url.py @@ -560,6 +560,20 @@ class URL( def __repr__(self): return self.render_as_string() + def __copy__(self): + return __class__.create( + self.drivername, + self.username, + self.password, + self.host, + self.port, + self.database, + self.query, + ) + + def __deepcopy__(self, memo): + return self.__copy__() + def __hash__(self): return hash(str(self)) diff --git a/test/engine/test_parseconnect.py b/test/engine/test_parseconnect.py index f12d32d5d0..ed701f8173 100644 --- a/test/engine/test_parseconnect.py +++ b/test/engine/test_parseconnect.py @@ -1,6 +1,8 @@ from unittest.mock import call from unittest.mock import MagicMock from unittest.mock import Mock +import copy +import warnings import sqlalchemy as tsa from sqlalchemy import create_engine @@ -196,6 +198,18 @@ class URLTest(fixtures.TestBase): is_true(url1 != url3) is_false(url1 == url3) + def test_warnings(self): + assert_raises( + exc.SADeprecationWarning, + url.URL, + "dbtype" + ) + url1 = url.URL.create("dbtype") + url2 = copy.copy(url1) + url3 = copy.deepcopy(url2) + is_true(url1 == url2) + is_true(url2 == url3) + @testing.combinations( "drivername", "username", -- 2.47.3