mirror of
https://github.com/element-hq/synapse.git
synced 2024-11-21 17:15:38 +03:00
import pydantic objects from the _pydantic_compat
module (#17667)
This PR changes `from pydantic import BaseModel` to `from synapse._pydantic_compat import BaseModel` (as well as `constr`, `conbytes`, `conint`, `confloat`). It allows `check_pydantic_models.py` to mock those pydantic objects only in the synapse module, and not interfere with pydantic objects in external dependencies. This should solve the CI problems for #17144, which breaks because `check_pydantic_models.py` patches pydantic models from [scim2-models](https://scim2-models.readthedocs.io/). /cc @DMRobertson @gotmax23 fixes #17659 ### Pull Request Checklist <!-- Please read https://element-hq.github.io/synapse/latest/development/contributing_guide.html before submitting your pull request --> * [x] Pull request is based on the develop branch * [x] Pull request includes a [changelog file](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#changelog). The entry should: - Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from `EventStore` to `EventWorkerStore`.". - Use markdown where necessary, mostly for `code blocks`. - End with either a period (.) or an exclamation mark (!). - Start with a capital letter. - Feel free to credit yourself, by adding a sentence "Contributed by @github_username." or "Contributed by [Your Name]." to the end of the entry. * [x] [Code style](https://element-hq.github.io/synapse/latest/code_style.html) is correct (run the [linters](https://element-hq.github.io/synapse/latest/development/contributing_guide.html#run-the-linters))
This commit is contained in:
parent
16af80b8fb
commit
ebad618bf0
18 changed files with 126 additions and 161 deletions
5
changelog.d/17667.misc
Normal file
5
changelog.d/17667.misc
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Import pydantic objects from the `_pydantic_compat` module.
|
||||||
|
|
||||||
|
This allows `check_pydantic_models.py` to mock those pydantic objects
|
||||||
|
only in the synapse module, and not interfere with pydantic objects in
|
||||||
|
external dependencies.
|
|
@ -45,7 +45,6 @@ import traceback
|
||||||
import unittest.mock
|
import unittest.mock
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from typing import (
|
from typing import (
|
||||||
TYPE_CHECKING,
|
|
||||||
Any,
|
Any,
|
||||||
Callable,
|
Callable,
|
||||||
Dict,
|
Dict,
|
||||||
|
@ -57,30 +56,17 @@ from typing import (
|
||||||
)
|
)
|
||||||
|
|
||||||
from parameterized import parameterized
|
from parameterized import parameterized
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import (
|
|
||||||
BaseModel as PydanticBaseModel,
|
|
||||||
conbytes,
|
|
||||||
confloat,
|
|
||||||
conint,
|
|
||||||
constr,
|
|
||||||
)
|
|
||||||
from pydantic.v1.typing import get_args
|
|
||||||
else:
|
|
||||||
from pydantic import (
|
|
||||||
BaseModel as PydanticBaseModel,
|
|
||||||
conbytes,
|
|
||||||
confloat,
|
|
||||||
conint,
|
|
||||||
constr,
|
|
||||||
)
|
|
||||||
from pydantic.typing import get_args
|
|
||||||
|
|
||||||
from typing_extensions import ParamSpec
|
from typing_extensions import ParamSpec
|
||||||
|
|
||||||
|
from synapse._pydantic_compat import (
|
||||||
|
BaseModel as PydanticBaseModel,
|
||||||
|
conbytes,
|
||||||
|
confloat,
|
||||||
|
conint,
|
||||||
|
constr,
|
||||||
|
get_args,
|
||||||
|
)
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
CONSTRAINED_TYPE_FACTORIES_WITH_STRICT_FLAG: List[Callable] = [
|
CONSTRAINED_TYPE_FACTORIES_WITH_STRICT_FLAG: List[Callable] = [
|
||||||
|
@ -183,22 +169,16 @@ def monkeypatch_pydantic() -> Generator[None, None, None]:
|
||||||
# Most Synapse code ought to import the patched objects directly from
|
# Most Synapse code ought to import the patched objects directly from
|
||||||
# `pydantic`. But we also patch their containing modules `pydantic.main` and
|
# `pydantic`. But we also patch their containing modules `pydantic.main` and
|
||||||
# `pydantic.types` for completeness.
|
# `pydantic.types` for completeness.
|
||||||
patch_basemodel1 = unittest.mock.patch(
|
patch_basemodel = unittest.mock.patch(
|
||||||
"pydantic.BaseModel", new=PatchedBaseModel
|
"synapse._pydantic_compat.BaseModel", new=PatchedBaseModel
|
||||||
)
|
)
|
||||||
patch_basemodel2 = unittest.mock.patch(
|
patches.enter_context(patch_basemodel)
|
||||||
"pydantic.main.BaseModel", new=PatchedBaseModel
|
|
||||||
)
|
|
||||||
patches.enter_context(patch_basemodel1)
|
|
||||||
patches.enter_context(patch_basemodel2)
|
|
||||||
for factory in CONSTRAINED_TYPE_FACTORIES_WITH_STRICT_FLAG:
|
for factory in CONSTRAINED_TYPE_FACTORIES_WITH_STRICT_FLAG:
|
||||||
wrapper: Callable = make_wrapper(factory)
|
wrapper: Callable = make_wrapper(factory)
|
||||||
patch1 = unittest.mock.patch(f"pydantic.{factory.__name__}", new=wrapper)
|
patch = unittest.mock.patch(
|
||||||
patch2 = unittest.mock.patch(
|
f"synapse._pydantic_compat.{factory.__name__}", new=wrapper
|
||||||
f"pydantic.types.{factory.__name__}", new=wrapper
|
|
||||||
)
|
)
|
||||||
patches.enter_context(patch1)
|
patches.enter_context(patch)
|
||||||
patches.enter_context(patch2)
|
|
||||||
yield
|
yield
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
from packaging.version import Version
|
from packaging.version import Version
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -30,4 +32,64 @@ except ImportError:
|
||||||
|
|
||||||
HAS_PYDANTIC_V2: bool = Version(pydantic_version).major == 2
|
HAS_PYDANTIC_V2: bool = Version(pydantic_version).major == 2
|
||||||
|
|
||||||
__all__ = ("HAS_PYDANTIC_V2",)
|
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
||||||
|
from pydantic.v1 import (
|
||||||
|
BaseModel,
|
||||||
|
Extra,
|
||||||
|
Field,
|
||||||
|
MissingError,
|
||||||
|
PydanticValueError,
|
||||||
|
StrictBool,
|
||||||
|
StrictInt,
|
||||||
|
StrictStr,
|
||||||
|
ValidationError,
|
||||||
|
conbytes,
|
||||||
|
confloat,
|
||||||
|
conint,
|
||||||
|
constr,
|
||||||
|
parse_obj_as,
|
||||||
|
validator,
|
||||||
|
)
|
||||||
|
from pydantic.v1.error_wrappers import ErrorWrapper
|
||||||
|
from pydantic.v1.typing import get_args
|
||||||
|
else:
|
||||||
|
from pydantic import (
|
||||||
|
BaseModel,
|
||||||
|
Extra,
|
||||||
|
Field,
|
||||||
|
MissingError,
|
||||||
|
PydanticValueError,
|
||||||
|
StrictBool,
|
||||||
|
StrictInt,
|
||||||
|
StrictStr,
|
||||||
|
ValidationError,
|
||||||
|
conbytes,
|
||||||
|
confloat,
|
||||||
|
conint,
|
||||||
|
constr,
|
||||||
|
parse_obj_as,
|
||||||
|
validator,
|
||||||
|
)
|
||||||
|
from pydantic.error_wrappers import ErrorWrapper
|
||||||
|
from pydantic.typing import get_args
|
||||||
|
|
||||||
|
__all__ = (
|
||||||
|
"HAS_PYDANTIC_V2",
|
||||||
|
"BaseModel",
|
||||||
|
"constr",
|
||||||
|
"conbytes",
|
||||||
|
"conint",
|
||||||
|
"confloat",
|
||||||
|
"ErrorWrapper",
|
||||||
|
"Extra",
|
||||||
|
"Field",
|
||||||
|
"get_args",
|
||||||
|
"MissingError",
|
||||||
|
"parse_obj_as",
|
||||||
|
"PydanticValueError",
|
||||||
|
"StrictBool",
|
||||||
|
"StrictInt",
|
||||||
|
"StrictStr",
|
||||||
|
"ValidationError",
|
||||||
|
"validator",
|
||||||
|
)
|
||||||
|
|
|
@ -18,17 +18,11 @@
|
||||||
# [This file includes modifications made by New Vector Limited]
|
# [This file includes modifications made by New Vector Limited]
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
from typing import TYPE_CHECKING, Any, Dict, Type, TypeVar
|
from typing import Any, Dict, Type, TypeVar
|
||||||
|
|
||||||
import jsonschema
|
import jsonschema
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import BaseModel, ValidationError, parse_obj_as
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import BaseModel, ValidationError, parse_obj_as
|
|
||||||
else:
|
|
||||||
from pydantic import BaseModel, ValidationError, parse_obj_as
|
|
||||||
|
|
||||||
from synapse.config._base import ConfigError
|
from synapse.config._base import ConfigError
|
||||||
from synapse.types import JsonDict, StrSequence
|
from synapse.types import JsonDict, StrSequence
|
||||||
|
|
||||||
|
|
|
@ -22,17 +22,17 @@
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import logging
|
import logging
|
||||||
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
|
from typing import Any, Dict, List, Optional, Union
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import (
|
||||||
|
BaseModel,
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
Extra,
|
||||||
from pydantic.v1 import BaseModel, Extra, StrictBool, StrictInt, StrictStr
|
StrictBool,
|
||||||
else:
|
StrictInt,
|
||||||
from pydantic import BaseModel, Extra, StrictBool, StrictInt, StrictStr
|
StrictStr,
|
||||||
|
)
|
||||||
from synapse.config._base import (
|
from synapse.config._base import (
|
||||||
Config,
|
Config,
|
||||||
ConfigError,
|
ConfigError,
|
||||||
|
|
|
@ -19,17 +19,11 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
import collections.abc
|
import collections.abc
|
||||||
from typing import TYPE_CHECKING, List, Type, Union, cast
|
from typing import List, Type, Union, cast
|
||||||
|
|
||||||
import jsonschema
|
import jsonschema
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import Field, StrictBool, StrictStr
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import Field, StrictBool, StrictStr
|
|
||||||
else:
|
|
||||||
from pydantic import Field, StrictBool, StrictStr
|
|
||||||
|
|
||||||
from synapse.api.constants import (
|
from synapse.api.constants import (
|
||||||
MAX_ALIAS_LENGTH,
|
MAX_ALIAS_LENGTH,
|
||||||
EventContentFields,
|
EventContentFields,
|
||||||
|
|
|
@ -37,19 +37,17 @@ from typing import (
|
||||||
overload,
|
overload,
|
||||||
)
|
)
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import BaseModel, MissingError, PydanticValueError, ValidationError
|
|
||||||
from pydantic.v1.error_wrappers import ErrorWrapper
|
|
||||||
else:
|
|
||||||
from pydantic import BaseModel, MissingError, PydanticValueError, ValidationError
|
|
||||||
from pydantic.error_wrappers import ErrorWrapper
|
|
||||||
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
|
||||||
from twisted.web.server import Request
|
from twisted.web.server import Request
|
||||||
|
|
||||||
|
from synapse._pydantic_compat import (
|
||||||
|
BaseModel,
|
||||||
|
ErrorWrapper,
|
||||||
|
MissingError,
|
||||||
|
PydanticValueError,
|
||||||
|
ValidationError,
|
||||||
|
)
|
||||||
from synapse.api.errors import Codes, SynapseError
|
from synapse.api.errors import Codes, SynapseError
|
||||||
from synapse.http import redact_uri
|
from synapse.http import redact_uri
|
||||||
from synapse.http.server import HttpServer
|
from synapse.http.server import HttpServer
|
||||||
|
|
|
@ -27,7 +27,7 @@ from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import StrictBool
|
||||||
from synapse.api.constants import Direction, UserTypes
|
from synapse.api.constants import Direction, UserTypes
|
||||||
from synapse.api.errors import Codes, NotFoundError, SynapseError
|
from synapse.api.errors import Codes, NotFoundError, SynapseError
|
||||||
from synapse.http.servlet import (
|
from synapse.http.servlet import (
|
||||||
|
@ -56,11 +56,6 @@ from synapse.types.rest import RequestBodyModel
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import StrictBool
|
|
||||||
else:
|
|
||||||
from pydantic import StrictBool
|
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -24,18 +24,12 @@ import random
|
||||||
from typing import TYPE_CHECKING, List, Optional, Tuple
|
from typing import TYPE_CHECKING, List, Optional, Tuple
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import StrictBool, StrictStr, constr
|
|
||||||
else:
|
|
||||||
from pydantic import StrictBool, StrictStr, constr
|
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
|
||||||
from twisted.web.server import Request
|
from twisted.web.server import Request
|
||||||
|
|
||||||
|
from synapse._pydantic_compat import StrictBool, StrictStr, constr
|
||||||
from synapse.api.constants import LoginType
|
from synapse.api.constants import LoginType
|
||||||
from synapse.api.errors import (
|
from synapse.api.errors import (
|
||||||
Codes,
|
Codes,
|
||||||
|
|
|
@ -24,13 +24,7 @@ import logging
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from typing import TYPE_CHECKING, List, Optional, Tuple
|
from typing import TYPE_CHECKING, List, Optional, Tuple
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import Extra, StrictStr
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import Extra, StrictStr
|
|
||||||
else:
|
|
||||||
from pydantic import Extra, StrictStr
|
|
||||||
|
|
||||||
from synapse.api import errors
|
from synapse.api import errors
|
||||||
from synapse.api.errors import NotFoundError, SynapseError, UnrecognizedRequestError
|
from synapse.api.errors import NotFoundError, SynapseError, UnrecognizedRequestError
|
||||||
from synapse.handlers.device import DeviceHandler
|
from synapse.handlers.device import DeviceHandler
|
||||||
|
|
|
@ -22,17 +22,11 @@
|
||||||
import logging
|
import logging
|
||||||
from typing import TYPE_CHECKING, List, Optional, Tuple
|
from typing import TYPE_CHECKING, List, Optional, Tuple
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import StrictStr
|
|
||||||
else:
|
|
||||||
from pydantic import StrictStr
|
|
||||||
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
|
||||||
from twisted.web.server import Request
|
from twisted.web.server import Request
|
||||||
|
|
||||||
|
from synapse._pydantic_compat import StrictStr
|
||||||
from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
|
from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
|
||||||
from synapse.http.server import HttpServer
|
from synapse.http.server import HttpServer
|
||||||
from synapse.http.servlet import (
|
from synapse.http.servlet import (
|
||||||
|
|
|
@ -23,7 +23,7 @@ import logging
|
||||||
from http import HTTPStatus
|
from http import HTTPStatus
|
||||||
from typing import TYPE_CHECKING, Tuple
|
from typing import TYPE_CHECKING, Tuple
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import StrictStr
|
||||||
from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
|
from synapse.api.errors import AuthError, Codes, NotFoundError, SynapseError
|
||||||
from synapse.http.server import HttpServer
|
from synapse.http.server import HttpServer
|
||||||
from synapse.http.servlet import (
|
from synapse.http.servlet import (
|
||||||
|
@ -40,10 +40,6 @@ from ._base import client_patterns
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import StrictStr
|
|
||||||
else:
|
|
||||||
from pydantic import StrictStr
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -23,17 +23,11 @@ import logging
|
||||||
import re
|
import re
|
||||||
from typing import TYPE_CHECKING, Dict, Mapping, Optional, Set, Tuple
|
from typing import TYPE_CHECKING, Dict, Mapping, Optional, Set, Tuple
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import Extra, StrictInt, StrictStr
|
|
||||||
else:
|
|
||||||
from pydantic import Extra, StrictInt, StrictStr
|
|
||||||
|
|
||||||
from signedjson.sign import sign_json
|
from signedjson.sign import sign_json
|
||||||
|
|
||||||
from twisted.web.server import Request
|
from twisted.web.server import Request
|
||||||
|
|
||||||
|
from synapse._pydantic_compat import Extra, StrictInt, StrictStr
|
||||||
from synapse.crypto.keyring import ServerKeyFetcher
|
from synapse.crypto.keyring import ServerKeyFetcher
|
||||||
from synapse.http.server import HttpServer
|
from synapse.http.server import HttpServer
|
||||||
from synapse.http.servlet import (
|
from synapse.http.servlet import (
|
||||||
|
|
|
@ -40,7 +40,7 @@ from typing import (
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import BaseModel
|
||||||
from synapse.metrics.background_process_metrics import run_as_background_process
|
from synapse.metrics.background_process_metrics import run_as_background_process
|
||||||
from synapse.storage.engines import PostgresEngine
|
from synapse.storage.engines import PostgresEngine
|
||||||
from synapse.storage.types import Connection, Cursor
|
from synapse.storage.types import Connection, Cursor
|
||||||
|
@ -49,11 +49,6 @@ from synapse.util import Clock, json_encoder
|
||||||
|
|
||||||
from . import engines
|
from . import engines
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import BaseModel
|
|
||||||
else:
|
|
||||||
from pydantic import BaseModel
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from synapse.server import HomeServer
|
from synapse.server import HomeServer
|
||||||
from synapse.storage.database import (
|
from synapse.storage.database import (
|
||||||
|
|
|
@ -37,23 +37,20 @@ from typing import (
|
||||||
|
|
||||||
import attr
|
import attr
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import Extra
|
||||||
from synapse.api.constants import EventTypes
|
from synapse.api.constants import EventTypes
|
||||||
from synapse.types import MultiWriterStreamToken, RoomStreamToken, StrCollection, UserID
|
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import Extra
|
|
||||||
else:
|
|
||||||
from pydantic import Extra
|
|
||||||
|
|
||||||
from synapse.events import EventBase
|
from synapse.events import EventBase
|
||||||
from synapse.types import (
|
from synapse.types import (
|
||||||
DeviceListUpdates,
|
DeviceListUpdates,
|
||||||
JsonDict,
|
JsonDict,
|
||||||
JsonMapping,
|
JsonMapping,
|
||||||
|
MultiWriterStreamToken,
|
||||||
Requester,
|
Requester,
|
||||||
|
RoomStreamToken,
|
||||||
SlidingSyncStreamToken,
|
SlidingSyncStreamToken,
|
||||||
|
StrCollection,
|
||||||
StreamToken,
|
StreamToken,
|
||||||
|
UserID,
|
||||||
)
|
)
|
||||||
from synapse.types.rest.client import SlidingSyncBody
|
from synapse.types.rest.client import SlidingSyncBody
|
||||||
|
|
||||||
|
|
|
@ -18,14 +18,7 @@
|
||||||
# [This file includes modifications made by New Vector Limited]
|
# [This file includes modifications made by New Vector Limited]
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
from typing import TYPE_CHECKING
|
from synapse._pydantic_compat import BaseModel, Extra
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import BaseModel, Extra
|
|
||||||
else:
|
|
||||||
from pydantic import BaseModel, Extra
|
|
||||||
|
|
||||||
|
|
||||||
class RequestBodyModel(BaseModel):
|
class RequestBodyModel(BaseModel):
|
||||||
|
|
|
@ -20,29 +20,15 @@
|
||||||
#
|
#
|
||||||
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union
|
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Union
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import (
|
||||||
|
Extra,
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
StrictBool,
|
||||||
from pydantic.v1 import (
|
StrictInt,
|
||||||
Extra,
|
StrictStr,
|
||||||
StrictBool,
|
conint,
|
||||||
StrictInt,
|
constr,
|
||||||
StrictStr,
|
validator,
|
||||||
conint,
|
)
|
||||||
constr,
|
|
||||||
validator,
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
from pydantic import (
|
|
||||||
Extra,
|
|
||||||
StrictBool,
|
|
||||||
StrictInt,
|
|
||||||
StrictStr,
|
|
||||||
conint,
|
|
||||||
constr,
|
|
||||||
validator,
|
|
||||||
)
|
|
||||||
|
|
||||||
from synapse.types.rest import RequestBodyModel
|
from synapse.types.rest import RequestBodyModel
|
||||||
from synapse.util.threepids import validate_email
|
from synapse.util.threepids import validate_email
|
||||||
|
|
||||||
|
@ -384,7 +370,7 @@ class SlidingSyncBody(RequestBodyModel):
|
||||||
receipts: Optional[ReceiptsExtension] = None
|
receipts: Optional[ReceiptsExtension] = None
|
||||||
typing: Optional[TypingExtension] = None
|
typing: Optional[TypingExtension] = None
|
||||||
|
|
||||||
conn_id: Optional[str]
|
conn_id: Optional[StrictStr]
|
||||||
|
|
||||||
# mypy workaround via https://github.com/pydantic/pydantic/issues/156#issuecomment-1130883884
|
# mypy workaround via https://github.com/pydantic/pydantic/issues/156#issuecomment-1130883884
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
|
@ -19,18 +19,12 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
import unittest as stdlib_unittest
|
import unittest as stdlib_unittest
|
||||||
from typing import TYPE_CHECKING
|
|
||||||
|
|
||||||
from typing_extensions import Literal
|
from typing_extensions import Literal
|
||||||
|
|
||||||
from synapse._pydantic_compat import HAS_PYDANTIC_V2
|
from synapse._pydantic_compat import BaseModel, ValidationError
|
||||||
from synapse.types.rest.client import EmailRequestTokenBody
|
from synapse.types.rest.client import EmailRequestTokenBody
|
||||||
|
|
||||||
if TYPE_CHECKING or HAS_PYDANTIC_V2:
|
|
||||||
from pydantic.v1 import BaseModel, ValidationError
|
|
||||||
else:
|
|
||||||
from pydantic import BaseModel, ValidationError
|
|
||||||
|
|
||||||
|
|
||||||
class ThreepidMediumEnumTestCase(stdlib_unittest.TestCase):
|
class ThreepidMediumEnumTestCase(stdlib_unittest.TestCase):
|
||||||
class Model(BaseModel):
|
class Model(BaseModel):
|
||||||
|
|
Loading…
Reference in a new issue