From: Mike Bayer Date: Mon, 24 Feb 2020 18:54:37 +0000 (-0500) Subject: Deprecate row.keys() for 2.0, not 1.x X-Git-Tag: rel_1_4_0b1~505 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5d42051c2e575713ffb8ea4f43ef1c2145b83c97;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Deprecate row.keys() for 2.0, not 1.x row.keys() is used by any use case that applies dict() to a row. Access of elements by string key is also a 2.0 deprecation not 1.4 so for rudimental dict(row) support make sure that is all a 2.0 thing. Fixes current Alembic test suite. Change-Id: I895496324133d615676cd76bc5f2c5f4a83e9131 --- diff --git a/lib/sqlalchemy/engine/row.py b/lib/sqlalchemy/engine/row.py index b4347a5988..55d8c2249d 100644 --- a/lib/sqlalchemy/engine/row.py +++ b/lib/sqlalchemy/engine/row.py @@ -222,10 +222,9 @@ class Row(BaseRow, collections_abc.Sequence): def __repr__(self): return repr(sql_util._repr_row(self)) - @util.deprecated( - "1.4", - "The :meth:`.Row.keys` method is deprecated and will be removed in a " - "future release. Use the namedtuple standard accessor " + @util.deprecated_20( + ":meth:`.Row.keys`", + alternative="Use the namedtuple standard accessor " ":attr:`.Row._fields`, or for full mapping behavior use " "row._mapping.keys() ", ) diff --git a/test/sql/test_deprecations.py b/test/sql/test_deprecations.py index 8bdba27931..06fe22fed2 100644 --- a/test/sql/test_deprecations.py +++ b/test/sql/test_deprecations.py @@ -1582,9 +1582,8 @@ class ResultProxyTest(fixtures.TablesTest): text("select * from users where user_id=2") ).first() - with testing.expect_deprecated( - r"The Row.keys\(\) method is deprecated and will be " - "removed in a future release." + with testing.expect_deprecated_20( + r"The Row.keys\(\) function/method is considered legacy " ): eq_(r.keys(), ["user_id", "user_name"]) diff --git a/test/sql/test_resultset.py b/test/sql/test_resultset.py index 2a6851a99f..87886c4faf 100644 --- a/test/sql/test_resultset.py +++ b/test/sql/test_resultset.py @@ -1030,6 +1030,16 @@ class ResultProxyTest(fixtures.TablesTest): eq_(list(row._mapping.keys()), ["user_id", "user_name"]) eq_(row._fields, ("user_id", "user_name")) + def test_row_keys_legacy_dont_warn(self): + users = self.tables.users + + users.insert().execute(user_id=1, user_name="foo") + result = users.select().execute() + row = result.first() + # DO NOT WARN DEPRECATED IN 1.x, ONLY 2.0 WARNING + eq_(dict(row), {"user_id": 1, "user_name": "foo"}) + eq_(row.keys(), ["user_id", "user_name"]) + def test_keys_anon_labels(self): """test [ticket:3483]"""