(cls: Type['Model'], value: Any)
| 704 | |
| 705 | @classmethod |
| 706 | def validate(cls: Type['Model'], value: Any) -> 'Model': |
| 707 | if isinstance(value, cls): |
| 708 | copy_on_model_validation = cls.__config__.copy_on_model_validation |
| 709 | # whether to deep or shallow copy the model on validation, None means do not copy |
| 710 | deep_copy: Optional[bool] = None |
| 711 | if copy_on_model_validation not in {'deep', 'shallow', 'none'}: |
| 712 | # Warn about deprecated behavior |
| 713 | warnings.warn( |
| 714 | "`copy_on_model_validation` should be a string: 'deep', 'shallow' or 'none'", DeprecationWarning |
| 715 | ) |
| 716 | if copy_on_model_validation: |
| 717 | deep_copy = False |
| 718 | |
| 719 | if copy_on_model_validation == 'shallow': |
| 720 | # shallow copy |
| 721 | deep_copy = False |
| 722 | elif copy_on_model_validation == 'deep': |
| 723 | # deep copy |
| 724 | deep_copy = True |
| 725 | |
| 726 | if deep_copy is None: |
| 727 | return value |
| 728 | else: |
| 729 | return value._copy_and_set_values(value.__dict__, value.__fields_set__, deep=deep_copy) |
| 730 | |
| 731 | value = cls._enforce_dict_if_root(value) |
| 732 | |
| 733 | if isinstance(value, dict): |
| 734 | return cls(**value) |
| 735 | elif cls.__config__.orm_mode: |
| 736 | return cls.from_orm(value) |
| 737 | else: |
| 738 | try: |
| 739 | value_as_dict = dict(value) |
| 740 | except (TypeError, ValueError) as e: |
| 741 | raise DictError() from e |
| 742 | return cls(**value_as_dict) |
| 743 | |
| 744 | @classmethod |
| 745 | def _decompose_class(cls: Type['Model'], obj: Any) -> GetterDict: |
no test coverage detected