Prepare the mapping -> and update `sub_fields` Note that this process can be aborted if a `ForwardRef` is encountered
(self)
| 756 | self.sub_fields = [self._create_sub_type(self.type_, '_' + self.name)] |
| 757 | |
| 758 | def prepare_discriminated_union_sub_fields(self) -> None: |
| 759 | """ |
| 760 | Prepare the mapping <discriminator key> -> <ModelField> and update `sub_fields` |
| 761 | Note that this process can be aborted if a `ForwardRef` is encountered |
| 762 | """ |
| 763 | assert self.discriminator_key is not None |
| 764 | |
| 765 | if self.type_.__class__ is DeferredType: |
| 766 | return |
| 767 | |
| 768 | assert self.sub_fields is not None |
| 769 | sub_fields_mapping: Dict[str, 'ModelField'] = {} |
| 770 | all_aliases: Set[str] = set() |
| 771 | |
| 772 | for sub_field in self.sub_fields: |
| 773 | t = sub_field.type_ |
| 774 | if t.__class__ is ForwardRef: |
| 775 | # Stopping everything...will need to call `update_forward_refs` |
| 776 | return |
| 777 | |
| 778 | alias, discriminator_values = get_discriminator_alias_and_values(t, self.discriminator_key) |
| 779 | all_aliases.add(alias) |
| 780 | for discriminator_value in discriminator_values: |
| 781 | sub_fields_mapping[discriminator_value] = sub_field |
| 782 | |
| 783 | self.sub_fields_mapping = sub_fields_mapping |
| 784 | self.discriminator_alias = get_unique_discriminator_alias(all_aliases, self.discriminator_key) |
| 785 | |
| 786 | def _create_sub_type(self, type_: Type[Any], name: str, *, for_keys: bool = False) -> 'ModelField': |
| 787 | if for_keys: |
no test coverage detected