Skip to content

Commit 0f2a4e9

Browse files
authored
Merge pull request #28 from dudil/upgrade_pydantic
Upgrade to pydantic version 2
2 parents ccf5215 + fe0f903 commit 0f2a4e9

5 files changed

Lines changed: 17 additions & 18 deletions

File tree

fastapi_msal/clients/async_conf_client.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,14 @@ async def __execute_async__(func: Callable[..., T], **kwargs: Any) -> T:
4242
def decode_id_token(id_token: str) -> Optional[IDTokenClaims]:
4343
decoded: OptStrsDict = json.loads(oidc.decode_part(id_token.split(".")[1]))
4444
if decoded:
45-
return IDTokenClaims.parse_obj(decoded)
45+
return IDTokenClaims.model_validate(decoded)
4646
return None
4747

4848
async def validate_id_token(self, id_token: str, nonce: OptStr = None) -> IDTokenClaims:
4949
token_claims: OptStrsDict = await self.__execute_async__(
5050
self._cca.client.decode_id_token, id_token=id_token, nonce=nonce
5151
)
52-
return IDTokenClaims.parse_obj(token_claims)
52+
return IDTokenClaims.model_validate(token_claims)
5353

5454
async def get_application_token(self, claims_challenge: OptStrsDict = None) -> AuthToken:
5555
token: StrsDict = await self.__execute_async__(
@@ -92,14 +92,14 @@ async def initiate_auth_flow(
9292
async def finalize_auth_flow(self, auth_code_flow: AuthCode, auth_response: AuthResponse) -> AuthToken:
9393
auth_token: StrsDict = await self.__execute_async__(
9494
self._cca.acquire_token_by_auth_code_flow,
95-
auth_code_flow=auth_code_flow.dict(exclude_none=True),
96-
auth_response=auth_response.dict(exclude_none=True),
95+
auth_code_flow=auth_code_flow.model_dump(exclude_none=True),
96+
auth_response=auth_response.model_dump(exclude_none=True),
9797
scopes=self.client_config.scopes,
9898
)
9999
return AuthToken.parse_obj_debug(to_parse=auth_token)
100100

101101
async def remove_account(self, account: LocalAccount) -> None:
102-
await self.__execute_async__(self._cca.remove_account, account=account.dict(exclude_none=True))
102+
await self.__execute_async__(self._cca.remove_account, account=account.model_dump(exclude_none=True))
103103

104104
async def get_accounts(self, username: OptStr = None) -> list[LocalAccount]:
105105
accounts_objects: list[StrsDict] = await self.__execute_async__(self._cca.get_accounts, username=username)
@@ -117,7 +117,7 @@ async def acquire_token_silent(
117117
token = await self.__execute_async__(
118118
self._cca.acquire_token_silent,
119119
scopes=self.client_config.scopes,
120-
account=(account.dict(exclude_none=True) if account else None),
120+
account=(account.model_dump(exclude_none=True) if account else None),
121121
authority=authority,
122122
force_refresh=force_refresh,
123123
claims_challenge=claims_challenge,

fastapi_msal/core/msal_client_config.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
from enum import Enum
2+
from typing import ClassVar
23

3-
from pydantic import BaseSettings
4+
from pydantic_settings import BaseSettings
45

5-
from .utils import OptStr, StrList
6+
from .utils import OptStr
67

78

89
class MSALPolicies(str, Enum):
@@ -16,14 +17,14 @@ class MSALPolicies(str, Enum):
1617
class MSALClientConfig(BaseSettings):
1718
# The following params must be set according to the app registration data recieved from AAD
1819
# https://docs.microsoft.com/azure/active-directory/develop/quickstart-v2-register-an-app
19-
client_id: OptStr
20-
client_credential: OptStr
21-
tenant: OptStr
20+
client_id: OptStr = None
21+
client_credential: OptStr = None
22+
tenant: OptStr = None
2223

2324
# Optional to set, see MSALPolicies for different options, default is single AAD (B2B)
2425
policy: MSALPolicies = MSALPolicies.AAD_SINGLE
2526
# Optional to set - If you are unsure don't set - it will be filled by MSAL as required
26-
scopes: StrList = []
27+
scopes: ClassVar[list[str]] = []
2728
# Not in use - for future support
2829
session_type: str = "filesystem"
2930

fastapi_msal/core/session_manager.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,15 @@ def save(self, model: M) -> None:
7171
if session is None:
7272
msg = "No session id, (Make sure you initialized the session by calling init_session)"
7373
raise OSError(msg)
74-
session.update({model.__repr_name__(): model.json(exclude_none=True, by_alias=True)})
74+
session.update({model.__repr_name__(): model.model_dump_json(exclude_none=True, by_alias=True)}) # type: ignore
7575
self._write_session(session=session)
7676

7777
def load(self, model_cls: type[M]) -> Optional[M]:
7878
session: OptStrsDict = self._read_session()
7979
if session:
8080
raw_model: OptStr = session.get(model_cls.__name__, None)
8181
if raw_model:
82-
return model_cls.parse_raw(raw_model)
82+
return model_cls.model_validate_json(raw_model)
8383
return None
8484

8585
def clear(self) -> None:

fastapi_msal/models/base_auth_model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class BaseAuthModel(BaseModel):
1212

1313
@classmethod
1414
def parse_obj_debug(cls: type[AuthModel], to_parse: StrsDict) -> AuthModel:
15-
debug_model: AuthModel = cls.parse_obj(obj=to_parse)
15+
debug_model: AuthModel = cls.model_validate(obj=to_parse)
1616
debug_model.__setattr__("_recieved", to_parse)
1717
return debug_model
1818

pyproject.toml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ classifiers = [
3030
"Programming Language :: Python :: 3.10",
3131
"Programming Language :: Python :: 3.11",
3232
]
33-
dependencies = ["pydantic==1.*", "starlette", "fastapi", "msal"]
3433
dynamic = ["version"]
34+
dependencies = ["pydantic>=2.4", "pydantic_settings>=2.0", "starlette", "fastapi", "msal"]
3535

3636
[project.urls]
3737
Homepage = "https://github.com/dudil/fastapi_msal"
@@ -69,12 +69,10 @@ test = "pytest {args:tests}"
6969
all = ["style", "typing"]
7070

7171
[tool.black]
72-
target-version = ["py39"]
7372
line-length = 122
7473
skip-string-normalization = true
7574

7675
[tool.ruff]
77-
target-version = "py39"
7876
line-length = 122
7977
select = [
8078
"A",

0 commit comments

Comments
 (0)