Skip to content

Commit 19bcf78

Browse files
committed
moving to models
1 parent a1ce4ea commit 19bcf78

File tree

5 files changed

+59
-52
lines changed

5 files changed

+59
-52
lines changed

services/web/server/src/simcore_service_webserver/login/_controller/rest/registration_schemas.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import logging
22
from typing import Annotated, Literal
33

4-
from models_library.api_schemas_webserver.users import PhoneNumberStr
54
from models_library.emails import LowerCaseEmailStr
65
from pydantic import (
76
BaseModel,
@@ -12,6 +11,7 @@
1211
field_validator,
1312
)
1413

14+
from ....models import PhoneNumberStr
1515
from ....utils_aiohttp import NextPage
1616
from ..._models import InputSchema, check_confirm_password_match
1717

services/web/server/src/simcore_service_webserver/models.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
1-
from typing import Annotated
1+
from typing import Annotated, TypeAlias
22

33
from models_library.products import ProductName
44
from models_library.rest_base import RequestParameters
55
from models_library.users import UserID
66
from pydantic import ConfigDict, Field
7+
from pydantic_extra_types.phone_numbers import PhoneNumberValidator
78
from servicelib.request_keys import RQT_USERID_KEY
89

910
from .constants import RQ_PRODUCT_KEY
1011

12+
PhoneNumberStr: TypeAlias = Annotated[
13+
# NOTE: validator require installing `phonenumbers``
14+
str,
15+
PhoneNumberValidator(number_format="E164"),
16+
]
17+
1118

1219
class AuthenticatedRequestContext(RequestParameters):
1320
"""Fields expected in the request context for authenticated endpoints"""

services/web/server/src/simcore_service_webserver/users/_controller/rest/_rest_schemas.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import re
88
import sys
99
from contextlib import suppress
10-
from typing import Annotated, Any, Final, TypeAlias
10+
from typing import Annotated, Any, Final
1111

1212
import pycountry
1313
from common_library.basic_types import DEFAULT_FACTORY
@@ -21,9 +21,8 @@
2121
field_validator,
2222
model_validator,
2323
)
24-
from pydantic_extra_types.phone_numbers import PhoneNumberValidator
2524

26-
from ....models import AuthenticatedRequestContext
25+
from ....models import AuthenticatedRequestContext, PhoneNumberStr
2726

2827
MAX_BYTES_SIZE_EXTRAS: Final[int] = 512
2928

@@ -36,13 +35,6 @@ class UsersRequestContext(AuthenticatedRequestContext): ...
3635
#
3736

3837

39-
PhoneNumberStr: TypeAlias = Annotated[
40-
# NOTE: validator require installing `phonenumbers``
41-
str,
42-
PhoneNumberValidator(number_format="E164"),
43-
]
44-
45-
4638
class MyPhoneRegister(InputSchema):
4739
phone: Annotated[
4840
PhoneNumberStr,
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# pylint: disable=protected-access
2+
# pylint: disable=redefined-outer-name
3+
# pylint: disable=too-many-arguments
4+
# pylint: disable=unused-argument
5+
# pylint: disable=unused-variable
6+
7+
8+
import pytest
9+
from pydantic import TypeAdapter, ValidationError
10+
from simcore_service_webserver.users._controller.rest._rest_schemas import (
11+
MyPhoneRegister,
12+
PhoneNumberStr,
13+
)
14+
15+
16+
@pytest.mark.parametrize(
17+
"phone",
18+
["+41763456789", "+19104630364", "+1 301-304-4567"],
19+
)
20+
def test_valid_phone_numbers(phone: str):
21+
# This test is used to tune options of PhoneNumberValidator
22+
assert MyPhoneRegister.model_validate({"phone": phone}).phone == TypeAdapter(
23+
PhoneNumberStr
24+
).validate_python(phone)
25+
26+
27+
@pytest.mark.parametrize(
28+
"phone",
29+
[
30+
"+41763456789",
31+
"+41 76 345 67 89",
32+
"tel:+41-76-345-67-89",
33+
],
34+
ids=["E.164", "INTERNATIONAL", "RFC3966"],
35+
)
36+
def test_autoformat_phone_number_to_e164(phone: str):
37+
# This test is used to tune options of PhoneNumberValidator formatting to E164
38+
assert TypeAdapter(PhoneNumberStr).validate_python(phone) == "+41763456789"
39+
40+
41+
@pytest.mark.parametrize(
42+
"phone",
43+
["41763456789", "+09104630364", "+1 111-304-4567"],
44+
)
45+
def test_invalid_phone_numbers(phone: str):
46+
# This test is used to tune options of PhoneNumberValidator
47+
with pytest.raises(ValidationError):
48+
MyPhoneRegister.model_validate({"phone": phone})

services/web/server/tests/unit/isolated/test_users_models.py

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,8 @@
1616
)
1717
from models_library.generics import Envelope
1818
from models_library.utils.fastapi_encoders import jsonable_encoder
19-
from pydantic import TypeAdapter, ValidationError
2019
from servicelib.rest_constants import RESPONSE_MODEL_POLICY
2120
from simcore_postgres_database import utils_users
22-
from simcore_service_webserver.users._controller.rest._rest_schemas import (
23-
MyPhoneRegister,
24-
PhoneNumberStr,
25-
)
2621
from simcore_service_webserver.users._models import UserModelAdapter
2722

2823

@@ -155,38 +150,3 @@ def test_utils_user_generates_valid_myprofile_patch():
155150
MyProfileRestPatch.model_validate(
156151
{"userName": utils_users.generate_alternative_username(username)}
157152
)
158-
159-
160-
@pytest.mark.parametrize(
161-
"phone",
162-
["+41763456789", "+19104630364", "+1 301-304-4567"],
163-
)
164-
def test_valid_phone_numbers(phone: str):
165-
# This test is used to tune options of PhoneNumberValidator
166-
assert MyPhoneRegister.model_validate({"phone": phone}).phone == TypeAdapter(
167-
PhoneNumberStr
168-
).validate_python(phone)
169-
170-
171-
@pytest.mark.parametrize(
172-
"phone",
173-
[
174-
"+41763456789",
175-
"+41 76 345 67 89",
176-
"tel:+41-76-345-67-89",
177-
],
178-
ids=["E.164", "INTERNATIONAL", "RFC3966"],
179-
)
180-
def test_autoformat_phone_number_to_e164(phone: str):
181-
# This test is used to tune options of PhoneNumberValidator formatting to E164
182-
assert TypeAdapter(PhoneNumberStr).validate_python(phone) == "+41763456789"
183-
184-
185-
@pytest.mark.parametrize(
186-
"phone",
187-
["41763456789", "+09104630364", "+1 111-304-4567"],
188-
)
189-
def test_invalid_phone_numbers(phone: str):
190-
# This test is used to tune options of PhoneNumberValidator
191-
with pytest.raises(ValidationError):
192-
MyPhoneRegister.model_validate({"phone": phone})

0 commit comments

Comments
 (0)