aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/multidict/tests/test_update.py
diff options
context:
space:
mode:
authorrekby <rekby@ydb.tech>2023-12-14 16:56:50 +0300
committerrekby <rekby@ydb.tech>2023-12-14 18:09:44 +0300
commitb2b2bb5997507072ca64548efe64447dd6395426 (patch)
treebbfbf77d11f1972c93ae4101fe561fd440d6ad6a /contrib/python/multidict/tests/test_update.py
parent8b8678a6a4f57c62e348cdad8afd3849011a5f11 (diff)
downloadydb-b2b2bb5997507072ca64548efe64447dd6395426.tar.gz
KIKIMR-19900 switch arcadia to python ydb sdk from contrib
Этот PR создан скриптом - для переключения зависимостей на python ydb sdk с версии внутри ydb на код, приезжающий через контриб. Код в обеих версиях одинаковый, так что поломок/изменения функционала на ожидается. На всякий случай посмотрите свои проекты и если будут возражения пишите сюда в issues или в тикет KIKIMR-19900. Если всё ок - шипните, для определённости. При отсутствии блокеров PR будет перегенерирован и влит с force-мёрджем в четверг, 14 декабря.
Diffstat (limited to 'contrib/python/multidict/tests/test_update.py')
-rw-r--r--contrib/python/multidict/tests/test_update.py147
1 files changed, 147 insertions, 0 deletions
diff --git a/contrib/python/multidict/tests/test_update.py b/contrib/python/multidict/tests/test_update.py
new file mode 100644
index 0000000000..4bacdbce77
--- /dev/null
+++ b/contrib/python/multidict/tests/test_update.py
@@ -0,0 +1,147 @@
+from collections import deque
+
+import pytest
+
+from multidict._compat import USE_EXTENSIONS
+from multidict._multidict_py import CIMultiDict as PyCIMultiDict
+from multidict._multidict_py import MultiDict as PyMultiDict # noqa: E402
+
+if USE_EXTENSIONS:
+ from multidict._multidict import CIMultiDict, MultiDict # type: ignore
+
+
+@pytest.fixture(
+ params=([MultiDict, CIMultiDict] if USE_EXTENSIONS else [])
+ + [PyMultiDict, PyCIMultiDict],
+ ids=(["MultiDict", "CIMultiDict"] if USE_EXTENSIONS else [])
+ + ["PyMultiDict", "PyCIMultiDict"],
+)
+def cls(request):
+ return request.param
+
+
+@pytest.fixture
+def md_cls(_multidict):
+ return _multidict.MultiDict
+
+
+@pytest.fixture
+def ci_md_cls(_multidict):
+ return _multidict.CIMultiDict
+
+
+@pytest.fixture
+def istr(_multidict):
+ return _multidict.istr
+
+
+def test_update_replace(cls):
+ obj1 = cls([("a", 1), ("b", 2), ("a", 3), ("c", 10)])
+ obj2 = cls([("a", 4), ("b", 5), ("a", 6)])
+ obj1.update(obj2)
+ expected = [("a", 4), ("b", 5), ("a", 6), ("c", 10)]
+ assert list(obj1.items()) == expected
+
+
+def test_update_append(cls):
+ obj1 = cls([("a", 1), ("b", 2), ("a", 3), ("c", 10)])
+ obj2 = cls([("a", 4), ("a", 5), ("a", 6)])
+ obj1.update(obj2)
+ expected = [("a", 4), ("b", 2), ("a", 5), ("c", 10), ("a", 6)]
+ assert list(obj1.items()) == expected
+
+
+def test_update_remove(cls):
+ obj1 = cls([("a", 1), ("b", 2), ("a", 3), ("c", 10)])
+ obj2 = cls([("a", 4)])
+ obj1.update(obj2)
+ expected = [("a", 4), ("b", 2), ("c", 10)]
+ assert list(obj1.items()) == expected
+
+
+def test_update_replace_seq(cls):
+ obj1 = cls([("a", 1), ("b", 2), ("a", 3), ("c", 10)])
+ obj2 = [("a", 4), ("b", 5), ("a", 6)]
+ obj1.update(obj2)
+ expected = [("a", 4), ("b", 5), ("a", 6), ("c", 10)]
+ assert list(obj1.items()) == expected
+
+
+def test_update_replace_seq2(cls):
+ obj1 = cls([("a", 1), ("b", 2), ("a", 3), ("c", 10)])
+ obj1.update([("a", 4)], b=5, a=6)
+ expected = [("a", 4), ("b", 5), ("a", 6), ("c", 10)]
+ assert list(obj1.items()) == expected
+
+
+def test_update_append_seq(cls):
+ obj1 = cls([("a", 1), ("b", 2), ("a", 3), ("c", 10)])
+ obj2 = [("a", 4), ("a", 5), ("a", 6)]
+ obj1.update(obj2)
+ expected = [("a", 4), ("b", 2), ("a", 5), ("c", 10), ("a", 6)]
+ assert list(obj1.items()) == expected
+
+
+def test_update_remove_seq(cls):
+ obj1 = cls([("a", 1), ("b", 2), ("a", 3), ("c", 10)])
+ obj2 = [("a", 4)]
+ obj1.update(obj2)
+ expected = [("a", 4), ("b", 2), ("c", 10)]
+ assert list(obj1.items()) == expected
+
+
+def test_update_md(md_cls):
+ d = md_cls()
+ d.add("key", "val1")
+ d.add("key", "val2")
+ d.add("key2", "val3")
+
+ d.update(key="val")
+
+ assert [("key", "val"), ("key2", "val3")] == list(d.items())
+
+
+def test_update_istr_ci_md(ci_md_cls, istr):
+ d = ci_md_cls()
+ d.add(istr("KEY"), "val1")
+ d.add("key", "val2")
+ d.add("key2", "val3")
+
+ d.update({istr("key"): "val"})
+
+ assert [("key", "val"), ("key2", "val3")] == list(d.items())
+
+
+def test_update_ci_md(ci_md_cls):
+ d = ci_md_cls()
+ d.add("KEY", "val1")
+ d.add("key", "val2")
+ d.add("key2", "val3")
+
+ d.update(Key="val")
+
+ assert [("Key", "val"), ("key2", "val3")] == list(d.items())
+
+
+def test_update_list_arg_and_kwds(cls):
+ obj = cls()
+ arg = [("a", 1)]
+ obj.update(arg, b=2)
+ assert list(obj.items()) == [("a", 1), ("b", 2)]
+ assert arg == [("a", 1)]
+
+
+def test_update_tuple_arg_and_kwds(cls):
+ obj = cls()
+ arg = (("a", 1),)
+ obj.update(arg, b=2)
+ assert list(obj.items()) == [("a", 1), ("b", 2)]
+ assert arg == (("a", 1),)
+
+
+def test_update_deque_arg_and_kwds(cls):
+ obj = cls()
+ arg = deque([("a", 1)])
+ obj.update(arg, b=2)
+ assert list(obj.items()) == [("a", 1), ("b", 2)]
+ assert arg == deque([("a", 1)])