| 48 | |
| 49 | |
| 50 | class ProviderToken(BaseModel): |
| 51 | token: SecretStr | None = Field(default=None) |
| 52 | user_id: str | None = Field(default=None) |
| 53 | host: str | None = Field(default=None) |
| 54 | |
| 55 | model_config = ConfigDict( |
| 56 | frozen=True, # Makes the entire model immutable |
| 57 | validate_assignment=True, |
| 58 | ) |
| 59 | |
| 60 | @classmethod |
| 61 | def from_value(cls, token_value: ProviderToken | dict[str, str]) -> ProviderToken: |
| 62 | """Factory method to create a ProviderToken from various input types""" |
| 63 | if isinstance(token_value, cls): |
| 64 | return token_value |
| 65 | elif isinstance(token_value, dict): |
| 66 | token_str = token_value.get('token', '') |
| 67 | # Override with empty string if it was set to None |
| 68 | # Cannot pass None to SecretStr |
| 69 | if token_str is None: |
| 70 | token_str = '' # type: ignore[unreachable] |
| 71 | user_id = token_value.get('user_id') |
| 72 | host = token_value.get('host') |
| 73 | return cls(token=SecretStr(token_str), user_id=user_id, host=host) |
| 74 | |
| 75 | else: |
| 76 | raise ValueError('Unsupported Provider token type') |
| 77 | |
| 78 | |
| 79 | class CustomSecret(BaseModel): |
no outgoing calls