Additionally: * Consistently use `freeze()` in test --------- Co-authored-by: Patrick Cloke <clokep@users.noreply.github.com> Co-authored-by: 6543 <6543@obermui.de>tags/v1.81.0rc1
@@ -0,0 +1 @@ | |||
Use `immutabledict` instead of `frozendict`. |
@@ -160,23 +160,16 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] | |||
[[package]] | |||
name = "canonicaljson" | |||
version = "1.6.5" | |||
version = "2.0.0" | |||
description = "Canonical JSON" | |||
category = "main" | |||
optional = false | |||
python-versions = ">=3.7" | |||
files = [ | |||
{file = "canonicaljson-1.6.5-py3-none-any.whl", hash = "sha256:806ea6f2cbb7405d20259e1c36dd1214ba5c242fa9165f5bd0bf2081f82c23fb"}, | |||
{file = "canonicaljson-1.6.5.tar.gz", hash = "sha256:68dfc157b011e07d94bf74b5d4ccc01958584ed942d9dfd5fdd706609e81cd4b"}, | |||
{file = "canonicaljson-2.0.0-py3-none-any.whl", hash = "sha256:c38a315de3b5a0532f1ec1f9153cd3d716abfc565a558d00a4835428a34fca5b"}, | |||
{file = "canonicaljson-2.0.0.tar.gz", hash = "sha256:e2fdaef1d7fadc5d9cb59bd3d0d41b064ddda697809ac4325dced721d12f113f"}, | |||
] | |||
[package.dependencies] | |||
simplejson = ">=3.14.0" | |||
typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.8\""} | |||
[package.extras] | |||
frozendict = ["frozendict (>=1.0)"] | |||
[[package]] | |||
name = "certifi" | |||
version = "2022.12.7" | |||
@@ -453,33 +446,6 @@ files = [ | |||
[package.extras] | |||
dev = ["Sphinx", "coverage", "flake8", "lxml", "memory-profiler", "mypy (==0.910)", "tox", "xmlschema (>=1.8.0)"] | |||
[[package]] | |||
name = "frozendict" | |||
version = "2.3.4" | |||
description = "A simple immutable dictionary" | |||
category = "main" | |||
optional = false | |||
python-versions = ">=3.6" | |||
files = [ | |||
{file = "frozendict-2.3.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4a3b32d47282ae0098b9239a6d53ec539da720258bd762d62191b46f2f87c5fc"}, | |||
{file = "frozendict-2.3.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c9887179a245a66a50f52afa08d4d92ae0f269839fab82285c70a0fa0dd782"}, | |||
{file = "frozendict-2.3.4-cp310-cp310-win_amd64.whl", hash = "sha256:b98a0d65a59af6da03f794f90b0c3085a7ee14e7bf8f0ef36b079ee8aa992439"}, | |||
{file = "frozendict-2.3.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:3d8042b7dab5e992e30889c9b71b781d5feef19b372d47d735e4d7d45846fd4a"}, | |||
{file = "frozendict-2.3.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a6d2e8b7cf6b6e5677a1a4b53b4073e5d9ec640d1db30dc679627668d25e90"}, | |||
{file = "frozendict-2.3.4-cp36-cp36m-win_amd64.whl", hash = "sha256:dbbe1339ac2646523e0bb00d1896085d1f70de23780e4927ca82b36ab8a044d3"}, | |||
{file = "frozendict-2.3.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95bac22f7f09d81f378f2b3f672b7a50a974ca180feae1507f5e21bc147e8bc8"}, | |||
{file = "frozendict-2.3.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dae686722c144b333c4dbdc16323a5de11406d26b76d2be1cc175f90afacb5ba"}, | |||
{file = "frozendict-2.3.4-cp37-cp37m-win_amd64.whl", hash = "sha256:389f395a74eb16992217ac1521e689c1dea2d70113bcb18714669ace1ed623b9"}, | |||
{file = "frozendict-2.3.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ccb6450a416c9cc9acef7683e637e28356e3ceeabf83521f74cc2718883076b7"}, | |||
{file = "frozendict-2.3.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca59108b77cadc13ba7dfea7e8f50811208c7652a13dc6c7f92d7782a24d299"}, | |||
{file = "frozendict-2.3.4-cp38-cp38-win_amd64.whl", hash = "sha256:3ec86ebf143dd685184215c27ec416c36e0ba1b80d81b1b9482f7d380c049b4e"}, | |||
{file = "frozendict-2.3.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5809e6ff6b7257043a486f7a3b73a7da71cf69a38980b4171e4741291d0d9eb3"}, | |||
{file = "frozendict-2.3.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c550ed7fdf1962984bec21630c584d722b3ee5d5f57a0ae2527a0121dc0414a"}, | |||
{file = "frozendict-2.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:3e93aebc6e69a8ef329bbe9afb8342bd33c7b5c7a0c480cb9f7e60b0cbe48072"}, | |||
{file = "frozendict-2.3.4-py3-none-any.whl", hash = "sha256:d722f3d89db6ae35ef35ecc243c40c800eb344848c83dba4798353312cd37b15"}, | |||
{file = "frozendict-2.3.4.tar.gz", hash = "sha256:15b4b18346259392b0d27598f240e9390fafbff882137a9c48a1e0104fb17f78"}, | |||
] | |||
[[package]] | |||
name = "gitdb" | |||
version = "4.0.9" | |||
@@ -725,6 +691,18 @@ files = [ | |||
{file = "ijson-3.2.0.post0.tar.gz", hash = "sha256:80a5bd7e9923cab200701f67ad2372104328b99ddf249dbbe8834102c852d316"}, | |||
] | |||
[[package]] | |||
name = "immutabledict" | |||
version = "2.2.3" | |||
description = "Immutable wrapper around dictionaries (a fork of frozendict)" | |||
category = "main" | |||
optional = false | |||
python-versions = ">=3.7,<4.0" | |||
files = [ | |||
{file = "immutabledict-2.2.3-py3-none-any.whl", hash = "sha256:a7b078ebcc4a58ddc73b55f808b26e7c8c2d5183fad325615112689e1a63e714"}, | |||
{file = "immutabledict-2.2.3.tar.gz", hash = "sha256:0e1e8a3f2b3ff062daa19795f947e9ec7a58add269d44e34d3ab4319e1343853"}, | |||
] | |||
[[package]] | |||
name = "importlib-metadata" | |||
version = "6.0.0" | |||
@@ -2174,77 +2152,6 @@ unpaddedbase64 = ">=1.0.1" | |||
[package.extras] | |||
dev = ["typing-extensions (>=3.5)"] | |||
[[package]] | |||
name = "simplejson" | |||
version = "3.17.6" | |||
description = "Simple, fast, extensible JSON encoder/decoder for Python" | |||
category = "main" | |||
optional = false | |||
python-versions = ">=2.5, !=3.0.*, !=3.1.*, !=3.2.*" | |||
files = [ | |||
{file = "simplejson-3.17.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a89acae02b2975b1f8e4974cb8cdf9bf9f6c91162fb8dec50c259ce700f2770a"}, | |||
{file = "simplejson-3.17.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:82ff356ff91be0ab2293fc6d8d262451eb6ac4fd999244c4b5f863e049ba219c"}, | |||
{file = "simplejson-3.17.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:0de783e9c2b87bdd75b57efa2b6260c24b94605b5c9843517577d40ee0c3cc8a"}, | |||
{file = "simplejson-3.17.6-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:d24a9e61df7a7787b338a58abfba975414937b609eb6b18973e25f573bc0eeeb"}, | |||
{file = "simplejson-3.17.6-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:e8603e691580487f11306ecb066c76f1f4a8b54fb3bdb23fa40643a059509366"}, | |||
{file = "simplejson-3.17.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:9b01e7b00654115965a206e3015f0166674ec1e575198a62a977355597c0bef5"}, | |||
{file = "simplejson-3.17.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:37bc0cf0e5599f36072077e56e248f3336917ded1d33d2688624d8ed3cefd7d2"}, | |||
{file = "simplejson-3.17.6-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:cf6e7d5fe2aeb54898df18db1baf479863eae581cce05410f61f6b4188c8ada1"}, | |||
{file = "simplejson-3.17.6-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:bdfc54b4468ed4cd7415928cbe782f4d782722a81aeb0f81e2ddca9932632211"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd16302d39c4d6f4afde80edd0c97d4db643327d355a312762ccd9bd2ca515ed"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:deac4bdafa19bbb89edfb73b19f7f69a52d0b5bd3bb0c4ad404c1bbfd7b4b7fd"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8bbdb166e2fb816e43ab034c865147edafe28e1b19c72433147789ac83e2dda"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a7854326920d41c3b5d468154318fe6ba4390cb2410480976787c640707e0180"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:04e31fa6ac8e326480703fb6ded1488bfa6f1d3f760d32e29dbf66d0838982ce"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f63600ec06982cdf480899026f4fda622776f5fabed9a869fdb32d72bc17e99a"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e03c3b8cc7883a54c3f34a6a135c4a17bc9088a33f36796acdb47162791b02f6"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a2d30d6c1652140181dc6861f564449ad71a45e4f165a6868c27d36745b65d40"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a1aa6e4cae8e3b8d5321be4f51c5ce77188faf7baa9fe1e78611f93a8eed2882"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-win32.whl", hash = "sha256:97202f939c3ff341fc3fa84d15db86156b1edc669424ba20b0a1fcd4a796a045"}, | |||
{file = "simplejson-3.17.6-cp310-cp310-win_amd64.whl", hash = "sha256:80d3bc9944be1d73e5b1726c3bbfd2628d3d7fe2880711b1eb90b617b9b8ac70"}, | |||
{file = "simplejson-3.17.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9fa621b3c0c05d965882c920347b6593751b7ab20d8fa81e426f1735ca1a9fc7"}, | |||
{file = "simplejson-3.17.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd2fb11922f58df8528adfca123f6a84748ad17d066007e7ac977720063556bd"}, | |||
{file = "simplejson-3.17.6-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:724c1fe135aa437d5126138d977004d165a3b5e2ee98fc4eb3e7c0ef645e7e27"}, | |||
{file = "simplejson-3.17.6-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4ff4ac6ff3aa8f814ac0f50bf218a2e1a434a17aafad4f0400a57a8cc62ef17f"}, | |||
{file = "simplejson-3.17.6-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:67093a526e42981fdd954868062e56c9b67fdd7e712616cc3265ad0c210ecb51"}, | |||
{file = "simplejson-3.17.6-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5d6b4af7ad7e4ac515bc6e602e7b79e2204e25dbd10ab3aa2beef3c5a9cad2c7"}, | |||
{file = "simplejson-3.17.6-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:1c9b1ed7ed282b36571638297525f8ef80f34b3e2d600a56f962c6044f24200d"}, | |||
{file = "simplejson-3.17.6-cp36-cp36m-win32.whl", hash = "sha256:632ecbbd2228575e6860c9e49ea3cc5423764d5aa70b92acc4e74096fb434044"}, | |||
{file = "simplejson-3.17.6-cp36-cp36m-win_amd64.whl", hash = "sha256:4c09868ddb86bf79b1feb4e3e7e4a35cd6e61ddb3452b54e20cf296313622566"}, | |||
{file = "simplejson-3.17.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4b6bd8144f15a491c662f06814bd8eaa54b17f26095bb775411f39bacaf66837"}, | |||
{file = "simplejson-3.17.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5decdc78849617917c206b01e9fc1d694fd58caa961be816cb37d3150d613d9a"}, | |||
{file = "simplejson-3.17.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:521877c7bd060470806eb6335926e27453d740ac1958eaf0d8c00911bc5e1802"}, | |||
{file = "simplejson-3.17.6-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:65b998193bd7b0c7ecdfffbc825d808eac66279313cb67d8892bb259c9d91494"}, | |||
{file = "simplejson-3.17.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ac786f6cb7aa10d44e9641c7a7d16d7f6e095b138795cd43503769d4154e0dc2"}, | |||
{file = "simplejson-3.17.6-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3ff5b3464e1ce86a8de8c88e61d4836927d5595c2162cab22e96ff551b916e81"}, | |||
{file = "simplejson-3.17.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:69bd56b1d257a91e763256d63606937ae4eb890b18a789b66951c00062afec33"}, | |||
{file = "simplejson-3.17.6-cp37-cp37m-win32.whl", hash = "sha256:b81076552d34c27e5149a40187a8f7e2abb2d3185576a317aaf14aeeedad862a"}, | |||
{file = "simplejson-3.17.6-cp37-cp37m-win_amd64.whl", hash = "sha256:07ecaafc1b1501f275bf5acdee34a4ad33c7c24ede287183ea77a02dc071e0c0"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:068670af975247acbb9fc3d5393293368cda17026db467bf7a51548ee8f17ee1"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4d1c135af0c72cb28dd259cf7ba218338f4dc027061262e46fe058b4e6a4c6a3"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:23fe704da910ff45e72543cbba152821685a889cf00fc58d5c8ee96a9bad5f94"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f444762fed1bc1fd75187ef14a20ed900c1fbb245d45be9e834b822a0223bc81"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:681eb4d37c9a9a6eb9b3245a5e89d7f7b2b9895590bb08a20aa598c1eb0a1d9d"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8e8607d8f6b4f9d46fee11447e334d6ab50e993dd4dbfb22f674616ce20907ab"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b10556817f09d46d420edd982dd0653940b90151d0576f09143a8e773459f6fe"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e1ec8a9ee0987d4524ffd6299e778c16cc35fef6d1a2764e609f90962f0b293a"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0b4126cac7d69ac06ff22efd3e0b3328a4a70624fcd6bca4fc1b4e6d9e2e12bf"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-win32.whl", hash = "sha256:35a49ebef25f1ebdef54262e54ae80904d8692367a9f208cdfbc38dbf649e00a"}, | |||
{file = "simplejson-3.17.6-cp38-cp38-win_amd64.whl", hash = "sha256:743cd768affaa508a21499f4858c5b824ffa2e1394ed94eb85caf47ac0732198"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fb62d517a516128bacf08cb6a86ecd39fb06d08e7c4980251f5d5601d29989ba"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:12133863178a8080a3dccbf5cb2edfab0001bc41e5d6d2446af2a1131105adfe"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5540fba2d437edaf4aa4fbb80f43f42a8334206ad1ad3b27aef577fd989f20d9"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d74ee72b5071818a1a5dab47338e87f08a738cb938a3b0653b9e4d959ddd1fd9"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:28221620f4dcabdeac310846629b976e599a13f59abb21616356a85231ebd6ad"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b09bc62e5193e31d7f9876220fb429ec13a6a181a24d897b9edfbbdbcd678851"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7255a37ff50593c9b2f1afa8fafd6ef5763213c1ed5a9e2c6f5b9cc925ab979f"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:401d40969cee3df7bda211e57b903a534561b77a7ade0dd622a8d1a31eaa8ba7"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a649d0f66029c7eb67042b15374bd93a26aae202591d9afd71e111dd0006b198"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-win32.whl", hash = "sha256:522fad7be85de57430d6d287c4b635813932946ebf41b913fe7e880d154ade2e"}, | |||
{file = "simplejson-3.17.6-cp39-cp39-win_amd64.whl", hash = "sha256:3fe87570168b2ae018391e2b43fbf66e8593a86feccb4b0500d134c998983ccc"}, | |||
{file = "simplejson-3.17.6.tar.gz", hash = "sha256:cf98038d2abf63a1ada5730e91e84c642ba6c225b0198c3684151b1f80c5f8a6"}, | |||
] | |||
[[package]] | |||
name = "six" | |||
version = "1.16.0" | |||
@@ -3013,4 +2920,4 @@ user-search = ["pyicu"] | |||
[metadata] | |||
lock-version = "2.0" | |||
python-versions = "^3.7.1" | |||
content-hash = "de2c4c8de336593478ce02581a5336afe2544db93ea82f3955b34c3653c29a26" | |||
content-hash = "0ca92e52a1952f9485172efe25a039351280c28f0a158869557dc2f8855786fe" |
@@ -153,15 +153,13 @@ python = "^3.7.1" | |||
# ---------------------- | |||
# we use the TYPE_CHECKER.redefine method added in jsonschema 3.0.0 | |||
jsonschema = ">=3.0.0" | |||
# frozendict 2.1.2 is broken on Debian 10: https://github.com/Marco-Sulla/python-frozendict/issues/41 | |||
# We cannot test our wheels against the 2.3.5 release in CI. Putting in an upper bound for this | |||
# because frozendict has been more trouble than it's worth; we would like to move to immutabledict. | |||
frozendict = ">=1,!=2.1.2,<2.3.5" | |||
# We choose 2.0 as a lower bound: the most recent backwards incompatible release. | |||
# It seems generally available, judging by https://pkgs.org/search/?q=immutabledict | |||
immutabledict = ">=2.0" | |||
# We require 2.1.0 or higher for type hints. Previous guard was >= 1.1.0 | |||
unpaddedbase64 = ">=2.1.0" | |||
# We require 1.5.0 to work around an issue when running against the C implementation of | |||
# frozendict: https://github.com/matrix-org/python-canonicaljson/issues/36 | |||
canonicaljson = "^1.5.0" | |||
# We require 2.0.0 for immutabledict support. | |||
canonicaljson = "^2.0.0" | |||
# we use the type definitions added in signedjson 1.1. | |||
signedjson = "^1.1.0" | |||
# validating SSL certs for IP addresses requires service_identity 18.1. | |||
@@ -1,39 +0,0 @@ | |||
# Copyright 2020 The Matrix.org Foundation C.I.C. | |||
# | |||
# Licensed under the Apache License, Version 2.0 (the "License"); | |||
# you may not use this file except in compliance with the License. | |||
# You may obtain a copy of the License at | |||
# | |||
# http://www.apache.org/licenses/LICENSE-2.0 | |||
# | |||
# Unless required by applicable law or agreed to in writing, software | |||
# distributed under the License is distributed on an "AS IS" BASIS, | |||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
# Stub for frozendict. | |||
from __future__ import annotations | |||
from typing import Any, Hashable, Iterable, Iterator, Mapping, Tuple, TypeVar, overload | |||
_KT = TypeVar("_KT", bound=Hashable) # Key type. | |||
_VT = TypeVar("_VT") # Value type. | |||
class frozendict(Mapping[_KT, _VT]): | |||
@overload | |||
def __init__(self, **kwargs: _VT) -> None: ... | |||
@overload | |||
def __init__(self, __map: Mapping[_KT, _VT], **kwargs: _VT) -> None: ... | |||
@overload | |||
def __init__( | |||
self, __iterable: Iterable[Tuple[_KT, _VT]], **kwargs: _VT | |||
) -> None: ... | |||
def __getitem__(self, key: _KT) -> _VT: ... | |||
def __contains__(self, key: Any) -> bool: ... | |||
def copy(self, **add_or_replace: Any) -> frozendict: ... | |||
def __iter__(self) -> Iterator[_KT]: ... | |||
def __len__(self) -> int: ... | |||
def __repr__(self) -> str: ... | |||
def __hash__(self) -> int: ... |
@@ -17,9 +17,9 @@ | |||
""" This is an implementation of a Matrix homeserver. | |||
""" | |||
import json | |||
import os | |||
import sys | |||
from typing import Any, Dict | |||
from synapse.util.rust import check_rust_lib_up_to_date | |||
from synapse.util.stringutils import strtobool | |||
@@ -61,11 +61,20 @@ try: | |||
except ImportError: | |||
pass | |||
# Use the standard library json implementation instead of simplejson. | |||
# Teach canonicaljson how to serialise immutabledicts. | |||
try: | |||
from canonicaljson import set_json_library | |||
set_json_library(json) | |||
from canonicaljson import register_preserialisation_callback | |||
from immutabledict import immutabledict | |||
def _immutabledict_cb(d: immutabledict) -> Dict[str, Any]: | |||
try: | |||
return d._dict | |||
except Exception: | |||
# Paranoia: fall back to a `dict()` call, in case a future version of | |||
# immutabledict removes `_dict` from the implementation. | |||
return dict(d) | |||
register_preserialisation_callback(immutabledict, _immutabledict_cb) | |||
except ImportError: | |||
pass | |||
@@ -51,7 +51,7 @@ def check_event_content_hash( | |||
# some malformed events lack a 'hashes'. Protect against it being missing | |||
# or a weird type by basically treating it the same as an unhashed event. | |||
hashes = event.get("hashes") | |||
# nb it might be a frozendict or a dict | |||
# nb it might be a immutabledict or a dict | |||
if not isinstance(hashes, collections.abc.Mapping): | |||
raise SynapseError( | |||
400, "Malformed 'hashes': %s" % (type(hashes),), Codes.UNAUTHORIZED | |||
@@ -15,7 +15,7 @@ from abc import ABC, abstractmethod | |||
from typing import TYPE_CHECKING, List, Optional, Tuple | |||
import attr | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
from synapse.appservice import ApplicationService | |||
from synapse.events import EventBase | |||
@@ -489,4 +489,4 @@ def _decode_state_dict( | |||
if input is None: | |||
return None | |||
return frozendict({(etype, state_key): v for etype, state_key, v in input}) | |||
return immutabledict({(etype, state_key): v for etype, state_key, v in input}) |
@@ -567,7 +567,7 @@ PowerLevelsContent = Mapping[str, Union[_PowerLevel, Mapping[str, _PowerLevel]]] | |||
def copy_and_fixup_power_levels_contents( | |||
old_power_levels: PowerLevelsContent, | |||
) -> Dict[str, Union[int, Dict[str, int]]]: | |||
"""Copy the content of a power_levels event, unfreezing frozendicts along the way. | |||
"""Copy the content of a power_levels event, unfreezing immutabledicts along the way. | |||
We accept as input power level values which are strings, provided they represent an | |||
integer, e.g. `"`100"` instead of 100. Such strings are converted to integers | |||
@@ -258,7 +258,7 @@ POWER_LEVELS_SCHEMA = { | |||
def _create_power_level_validator() -> Type[jsonschema.Draft7Validator]: | |||
validator = jsonschema.validators.validator_for(POWER_LEVELS_SCHEMA) | |||
# by default jsonschema does not consider a frozendict to be an object so | |||
# by default jsonschema does not consider a immutabledict to be an object so | |||
# we need to use a custom type checker | |||
# https://python-jsonschema.readthedocs.io/en/stable/validate/?highlight=object#validating-with-additional-types | |||
type_checker = validator.TYPE_CHECKER.redefine( | |||
@@ -33,7 +33,7 @@ from typing import ( | |||
) | |||
import attr | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
from prometheus_client import Counter, Histogram | |||
from synapse.api.constants import EventTypes | |||
@@ -105,14 +105,18 @@ class _StateCacheEntry: | |||
# | |||
# This can be None if we have a `state_group` (as then we can fetch the | |||
# state from the DB.) | |||
self._state = frozendict(state) if state is not None else None | |||
self._state: Optional[StateMap[str]] = ( | |||
immutabledict(state) if state is not None else None | |||
) | |||
# the ID of a state group if one and only one is involved. | |||
# otherwise, None otherwise? | |||
self.state_group = state_group | |||
self.prev_group = prev_group | |||
self.delta_ids = frozendict(delta_ids) if delta_ids is not None else None | |||
self.delta_ids: Optional[StateMap[str]] = ( | |||
immutabledict(delta_ids) if delta_ids is not None else None | |||
) | |||
async def get_state( | |||
self, | |||
@@ -50,7 +50,7 @@ from typing import ( | |||
) | |||
import attr | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
from typing_extensions import Literal | |||
from twisted.internet import defer | |||
@@ -557,7 +557,7 @@ class StreamWorkerStore(EventsWorkerStore, SQLBaseStore): | |||
if p > min_pos | |||
} | |||
return RoomStreamToken(None, min_pos, frozendict(positions)) | |||
return RoomStreamToken(None, min_pos, immutabledict(positions)) | |||
async def get_room_events_stream_for_rooms( | |||
self, | |||
@@ -35,7 +35,7 @@ from typing import ( | |||
) | |||
import attr | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
from signedjson.key import decode_verify_key_bytes | |||
from signedjson.types import VerifyKey | |||
from typing_extensions import Final, TypedDict | |||
@@ -490,12 +490,12 @@ class RoomStreamToken: | |||
) | |||
stream: int = attr.ib(validator=attr.validators.instance_of(int)) | |||
instance_map: "frozendict[str, int]" = attr.ib( | |||
factory=frozendict, | |||
instance_map: "immutabledict[str, int]" = attr.ib( | |||
factory=immutabledict, | |||
validator=attr.validators.deep_mapping( | |||
key_validator=attr.validators.instance_of(str), | |||
value_validator=attr.validators.instance_of(int), | |||
mapping_validator=attr.validators.instance_of(frozendict), | |||
mapping_validator=attr.validators.instance_of(immutabledict), | |||
), | |||
) | |||
@@ -531,7 +531,7 @@ class RoomStreamToken: | |||
return cls( | |||
topological=None, | |||
stream=stream, | |||
instance_map=frozendict(instance_map), | |||
instance_map=immutabledict(instance_map), | |||
) | |||
except CancelledError: | |||
raise | |||
@@ -566,7 +566,7 @@ class RoomStreamToken: | |||
for instance in set(self.instance_map).union(other.instance_map) | |||
} | |||
return RoomStreamToken(None, max_stream, frozendict(instance_map)) | |||
return RoomStreamToken(None, max_stream, immutabledict(instance_map)) | |||
def as_historical_tuple(self) -> Tuple[int, int]: | |||
"""Returns a tuple of `(topological, stream)` for historical tokens. | |||
@@ -28,7 +28,7 @@ from typing import ( | |||
) | |||
import attr | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
from synapse.api.constants import EventTypes | |||
from synapse.types import MutableStateMap, StateKey, StateMap | |||
@@ -56,7 +56,7 @@ class StateFilter: | |||
appear in `types`. | |||
""" | |||
types: "frozendict[str, Optional[FrozenSet[str]]]" | |||
types: "immutabledict[str, Optional[FrozenSet[str]]]" | |||
include_others: bool = False | |||
def __attrs_post_init__(self) -> None: | |||
@@ -67,7 +67,7 @@ class StateFilter: | |||
object.__setattr__( | |||
self, | |||
"types", | |||
frozendict({k: v for k, v in self.types.items() if v is not None}), | |||
immutabledict({k: v for k, v in self.types.items() if v is not None}), | |||
) | |||
@staticmethod | |||
@@ -112,7 +112,7 @@ class StateFilter: | |||
type_dict.setdefault(typ, set()).add(s) # type: ignore | |||
return StateFilter( | |||
types=frozendict( | |||
types=immutabledict( | |||
(k, frozenset(v) if v is not None else None) | |||
for k, v in type_dict.items() | |||
) | |||
@@ -139,7 +139,7 @@ class StateFilter: | |||
The new state filter | |||
""" | |||
return StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset(members)}), | |||
types=immutabledict({EventTypes.Member: frozenset(members)}), | |||
include_others=True, | |||
) | |||
@@ -159,7 +159,7 @@ class StateFilter: | |||
types_with_frozen_values[state_types] = None | |||
return StateFilter( | |||
frozendict(types_with_frozen_values), include_others=include_others | |||
immutabledict(types_with_frozen_values), include_others=include_others | |||
) | |||
def return_expanded(self) -> "StateFilter": | |||
@@ -217,7 +217,7 @@ class StateFilter: | |||
# We want to return all non-members, but only particular | |||
# memberships | |||
return StateFilter( | |||
types=frozendict({EventTypes.Member: self.types[EventTypes.Member]}), | |||
types=immutabledict({EventTypes.Member: self.types[EventTypes.Member]}), | |||
include_others=True, | |||
) | |||
else: | |||
@@ -381,14 +381,16 @@ class StateFilter: | |||
if state_keys is None: | |||
member_filter = StateFilter.all() | |||
else: | |||
member_filter = StateFilter(frozendict({EventTypes.Member: state_keys})) | |||
member_filter = StateFilter( | |||
immutabledict({EventTypes.Member: state_keys}) | |||
) | |||
elif self.include_others: | |||
member_filter = StateFilter.all() | |||
else: | |||
member_filter = StateFilter.none() | |||
non_member_filter = StateFilter( | |||
types=frozendict( | |||
types=immutabledict( | |||
{k: v for k, v in self.types.items() if k != EventTypes.Member} | |||
), | |||
include_others=self.include_others, | |||
@@ -578,8 +580,8 @@ class StateFilter: | |||
return False | |||
_ALL_STATE_FILTER = StateFilter(types=frozendict(), include_others=True) | |||
_ALL_STATE_FILTER = StateFilter(types=immutabledict(), include_others=True) | |||
_ALL_NON_MEMBER_STATE_FILTER = StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset()}), include_others=True | |||
types=immutabledict({EventTypes.Member: frozenset()}), include_others=True | |||
) | |||
_NONE_STATE_FILTER = StateFilter(types=frozendict(), include_others=False) | |||
_NONE_STATE_FILTER = StateFilter(types=immutabledict(), include_others=False) |
@@ -18,7 +18,7 @@ import typing | |||
from typing import Any, Callable, Dict, Generator, Optional, Sequence | |||
import attr | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
from matrix_common.versionstring import get_distribution_version_string | |||
from typing_extensions import ParamSpec | |||
@@ -41,22 +41,18 @@ def _reject_invalid_json(val: Any) -> None: | |||
raise ValueError("Invalid JSON value: '%s'" % val) | |||
def _handle_frozendict(obj: Any) -> Dict[Any, Any]: | |||
"""Helper for json_encoder. Makes frozendicts serializable by returning | |||
def _handle_immutabledict(obj: Any) -> Dict[Any, Any]: | |||
"""Helper for json_encoder. Makes immutabledicts serializable by returning | |||
the underlying dict | |||
""" | |||
if type(obj) is frozendict: | |||
if type(obj) is immutabledict: | |||
# fishing the protected dict out of the object is a bit nasty, | |||
# but we don't really want the overhead of copying the dict. | |||
try: | |||
# Safety: we catch the AttributeError immediately below. | |||
# See https://github.com/matrix-org/python-canonicaljson/issues/36#issuecomment-927816293 | |||
# for discussion on how frozendict's internals have changed over time. | |||
return obj._dict # type: ignore[attr-defined] | |||
return obj._dict | |||
except AttributeError: | |||
# When the C implementation of frozendict is used, | |||
# there isn't a `_dict` attribute with a dict | |||
# so we resort to making a copy of the frozendict | |||
# If all else fails, resort to making a copy of the immutabledict | |||
return dict(obj) | |||
raise TypeError( | |||
"Object of type %s is not JSON serializable" % obj.__class__.__name__ | |||
@@ -64,11 +60,11 @@ def _handle_frozendict(obj: Any) -> Dict[Any, Any]: | |||
# A custom JSON encoder which: | |||
# * handles frozendicts | |||
# * handles immutabledicts | |||
# * produces valid JSON (no NaNs etc) | |||
# * reduces redundant whitespace | |||
json_encoder = json.JSONEncoder( | |||
allow_nan=False, separators=(",", ":"), default=_handle_frozendict | |||
allow_nan=False, separators=(",", ":"), default=_handle_immutabledict | |||
) | |||
# Create a custom decoder to reject Python extensions to JSON. | |||
@@ -14,14 +14,14 @@ | |||
import collections.abc | |||
from typing import Any | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
def freeze(o: Any) -> Any: | |||
if isinstance(o, dict): | |||
return frozendict({k: freeze(v) for k, v in o.items()}) | |||
return immutabledict({k: freeze(v) for k, v in o.items()}) | |||
if isinstance(o, frozendict): | |||
if isinstance(o, immutabledict): | |||
return o | |||
if isinstance(o, (bytes, str)): | |||
@@ -18,7 +18,6 @@ from typing import List | |||
from unittest.mock import patch | |||
import jsonschema | |||
from frozendict import frozendict | |||
from twisted.test.proto_helpers import MemoryReactor | |||
@@ -29,6 +28,7 @@ from synapse.api.presence import UserPresenceState | |||
from synapse.server import HomeServer | |||
from synapse.types import JsonDict | |||
from synapse.util import Clock | |||
from synapse.util.frozenutils import freeze | |||
from tests import unittest | |||
from tests.events.test_utils import MockEvent | |||
@@ -343,12 +343,12 @@ class FilteringTestCase(unittest.HomeserverTestCase): | |||
self.assertFalse(Filter(self.hs, definition)._check(event)) | |||
# check it works with frozendicts too | |||
# check it works with frozen dictionaries too | |||
event = MockEvent( | |||
sender="@foo:bar", | |||
type="m.room.message", | |||
room_id="!secretbase:unknown", | |||
content=frozendict({EventContentFields.LABELS: ["#fun"]}), | |||
content=freeze({EventContentFields.LABELS: ["#fun"]}), | |||
) | |||
self.assertTrue(Filter(self.hs, definition)._check(event)) | |||
@@ -14,14 +14,14 @@ | |||
from typing import Any, Mapping, Optional | |||
from unittest.mock import Mock | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
from synapse.config import ConfigError | |||
from synapse.config.workers import WorkerConfig | |||
from tests.unittest import TestCase | |||
_EMPTY_FROZENDICT: Mapping[str, Any] = frozendict() | |||
_EMPTY_IMMUTABLEDICT: Mapping[str, Any] = immutabledict() | |||
class WorkerDutyConfigTestCase(TestCase): | |||
@@ -29,7 +29,7 @@ class WorkerDutyConfigTestCase(TestCase): | |||
self, | |||
worker_app: str, | |||
worker_name: Optional[str], | |||
extras: Mapping[str, Any] = _EMPTY_FROZENDICT, | |||
extras: Mapping[str, Any] = _EMPTY_IMMUTABLEDICT, | |||
) -> WorkerConfig: | |||
root_config = Mock() | |||
root_config.worker_app = worker_app | |||
@@ -14,8 +14,6 @@ | |||
from typing import Any, Dict, List, Optional, Union, cast | |||
import frozendict | |||
from twisted.test.proto_helpers import MemoryReactor | |||
import synapse.rest.admin | |||
@@ -318,11 +316,11 @@ class PushRuleEvaluatorTestCase(unittest.TestCase): | |||
"pattern should only match at the start/end of the value", | |||
) | |||
# it should work on frozendicts too | |||
# it should work on frozen dictionaries too | |||
self._assert_matches( | |||
condition, | |||
frozendict.frozendict({"value": "FoobaZ"}), | |||
"patterns should match on frozendicts", | |||
freeze({"value": "FoobaZ"}), | |||
"patterns should match on frozen dictionaries", | |||
) | |||
# wildcards should match | |||
@@ -425,11 +423,11 @@ class PushRuleEvaluatorTestCase(unittest.TestCase): | |||
"incorrect types should not match", | |||
) | |||
# it should work on frozendicts too | |||
# it should work on frozen dictionaries too | |||
self._assert_matches( | |||
condition, | |||
frozendict.frozendict({"value": "foobaz"}), | |||
"values should match on frozendicts", | |||
freeze({"value": "foobaz"}), | |||
"values should match on frozen dictionaries", | |||
) | |||
def test_exact_event_match_boolean(self) -> None: | |||
@@ -546,11 +544,11 @@ class PushRuleEvaluatorTestCase(unittest.TestCase): | |||
"does not search in a string", | |||
) | |||
# it should work on frozendicts too | |||
# it should work on frozen dictionaries too | |||
self._assert_matches( | |||
condition, | |||
freeze({"value": ["foobaz"]}), | |||
"values should match on frozendicts", | |||
"values should match on frozen dictionaries", | |||
) | |||
def test_no_body(self) -> None: | |||
@@ -14,7 +14,7 @@ | |||
import logging | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
from twisted.test.proto_helpers import MemoryReactor | |||
@@ -198,7 +198,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.storage.state.get_state_for_event( | |||
e5.event_id, | |||
state_filter=StateFilter( | |||
types=frozendict( | |||
types=immutabledict( | |||
{EventTypes.Member: frozenset({self.u_alice.to_string()})} | |||
), | |||
include_others=True, | |||
@@ -220,7 +220,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.storage.state.get_state_for_event( | |||
e5.event_id, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset()}), | |||
types=immutabledict({EventTypes.Member: frozenset()}), | |||
include_others=True, | |||
), | |||
) | |||
@@ -246,7 +246,8 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset()}), include_others=True | |||
types=immutabledict({EventTypes.Member: frozenset()}), | |||
include_others=True, | |||
), | |||
) | |||
@@ -263,7 +264,8 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_members_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset()}), include_others=True | |||
types=immutabledict({EventTypes.Member: frozenset()}), | |||
include_others=True, | |||
), | |||
) | |||
@@ -276,7 +278,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: None}), include_others=True | |||
types=immutabledict({EventTypes.Member: None}), include_others=True | |||
), | |||
) | |||
@@ -293,7 +295,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_members_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: None}), include_others=True | |||
types=immutabledict({EventTypes.Member: None}), include_others=True | |||
), | |||
) | |||
@@ -313,7 +315,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset({e5.state_key})}), | |||
types=immutabledict({EventTypes.Member: frozenset({e5.state_key})}), | |||
include_others=True, | |||
), | |||
) | |||
@@ -331,7 +333,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_members_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset({e5.state_key})}), | |||
types=immutabledict({EventTypes.Member: frozenset({e5.state_key})}), | |||
include_others=True, | |||
), | |||
) | |||
@@ -345,7 +347,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_members_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset({e5.state_key})}), | |||
types=immutabledict({EventTypes.Member: frozenset({e5.state_key})}), | |||
include_others=False, | |||
), | |||
) | |||
@@ -396,7 +398,8 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset()}), include_others=True | |||
types=immutabledict({EventTypes.Member: frozenset()}), | |||
include_others=True, | |||
), | |||
) | |||
@@ -408,7 +411,8 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_members_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset()}), include_others=True | |||
types=immutabledict({EventTypes.Member: frozenset()}), | |||
include_others=True, | |||
), | |||
) | |||
@@ -421,7 +425,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: None}), include_others=True | |||
types=immutabledict({EventTypes.Member: None}), include_others=True | |||
), | |||
) | |||
@@ -432,7 +436,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_members_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: None}), include_others=True | |||
types=immutabledict({EventTypes.Member: None}), include_others=True | |||
), | |||
) | |||
@@ -451,7 +455,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset({e5.state_key})}), | |||
types=immutabledict({EventTypes.Member: frozenset({e5.state_key})}), | |||
include_others=True, | |||
), | |||
) | |||
@@ -463,7 +467,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_members_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset({e5.state_key})}), | |||
types=immutabledict({EventTypes.Member: frozenset({e5.state_key})}), | |||
include_others=True, | |||
), | |||
) | |||
@@ -477,7 +481,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset({e5.state_key})}), | |||
types=immutabledict({EventTypes.Member: frozenset({e5.state_key})}), | |||
include_others=False, | |||
), | |||
) | |||
@@ -489,7 +493,7 @@ class StateStoreTestCase(HomeserverTestCase): | |||
self.state_datastore._state_group_members_cache, | |||
group, | |||
state_filter=StateFilter( | |||
types=frozendict({EventTypes.Member: frozenset({e5.state_key})}), | |||
types=immutabledict({EventTypes.Member: frozenset({e5.state_key})}), | |||
include_others=False, | |||
), | |||
) | |||
@@ -1,4 +1,4 @@ | |||
from frozendict import frozendict | |||
from immutabledict import immutabledict | |||
from synapse.api.constants import EventTypes | |||
from synapse.types.state import StateFilter | |||
@@ -172,7 +172,7 @@ class StateFilterDifferenceTestCase(TestCase): | |||
}, | |||
include_others=False, | |||
), | |||
StateFilter(types=frozendict(), include_others=True), | |||
StateFilter(types=immutabledict(), include_others=True), | |||
) | |||
# (wildcard on state keys) - (no state keys) | |||
@@ -188,7 +188,7 @@ class StateFilterDifferenceTestCase(TestCase): | |||
include_others=False, | |||
), | |||
StateFilter( | |||
types=frozendict(), | |||
types=immutabledict(), | |||
include_others=True, | |||
), | |||
) | |||
@@ -279,7 +279,7 @@ class StateFilterDifferenceTestCase(TestCase): | |||
{EventTypes.Member: None, EventTypes.CanonicalAlias: None}, | |||
include_others=True, | |||
), | |||
StateFilter(types=frozendict(), include_others=False), | |||
StateFilter(types=immutabledict(), include_others=False), | |||
) | |||
# (wildcard on state keys) - (specific state keys) | |||
@@ -332,7 +332,7 @@ class StateFilterDifferenceTestCase(TestCase): | |||
include_others=True, | |||
), | |||
StateFilter( | |||
types=frozendict(), | |||
types=immutabledict(), | |||
include_others=False, | |||
), | |||
) | |||
@@ -403,7 +403,7 @@ class StateFilterDifferenceTestCase(TestCase): | |||
{EventTypes.Member: None, EventTypes.CanonicalAlias: None}, | |||
include_others=True, | |||
), | |||
StateFilter(types=frozendict(), include_others=False), | |||
StateFilter(types=immutabledict(), include_others=False), | |||
) | |||
# (wildcard on state keys) - (specific state keys) | |||
@@ -450,7 +450,7 @@ class StateFilterDifferenceTestCase(TestCase): | |||
include_others=True, | |||
), | |||
StateFilter( | |||
types=frozendict(), | |||
types=immutabledict(), | |||
include_others=False, | |||
), | |||
) | |||