(field: Any)
| 738 | |
| 739 | |
| 740 | def get_column_from_field(field: Any) -> Column: |
| 741 | field_info = field |
| 742 | sa_column = _get_sqlmodel_field_value(field_info, "sa_column", Undefined) |
| 743 | if isinstance(sa_column, Column): |
| 744 | return sa_column |
| 745 | sa_type = get_sqlalchemy_type(field) |
| 746 | primary_key = _get_sqlmodel_field_value(field_info, "primary_key", Undefined) |
| 747 | if primary_key is Undefined: |
| 748 | primary_key = False |
| 749 | index = _get_sqlmodel_field_value(field_info, "index", Undefined) |
| 750 | if index is Undefined: |
| 751 | index = False |
| 752 | nullable = not primary_key and is_field_noneable(field) |
| 753 | # Override derived nullability if the nullable property is set explicitly |
| 754 | # on the field |
| 755 | field_nullable = _get_sqlmodel_field_value(field_info, "nullable", Undefined) |
| 756 | if field_nullable is not Undefined: |
| 757 | assert not isinstance(field_nullable, UndefinedType) |
| 758 | nullable = field_nullable |
| 759 | args = [] |
| 760 | foreign_key = _get_sqlmodel_field_value(field_info, "foreign_key", Undefined) |
| 761 | if foreign_key is Undefined: |
| 762 | foreign_key = None |
| 763 | unique = _get_sqlmodel_field_value(field_info, "unique", Undefined) |
| 764 | if unique is Undefined: |
| 765 | unique = False |
| 766 | if foreign_key: |
| 767 | ondelete_value = _get_sqlmodel_field_value(field_info, "ondelete", Undefined) |
| 768 | if ondelete_value is Undefined: |
| 769 | ondelete_value = None |
| 770 | if ondelete_value == "SET NULL" and not nullable: |
| 771 | raise RuntimeError('ondelete="SET NULL" requires nullable=True') |
| 772 | assert isinstance(foreign_key, str) |
| 773 | assert isinstance(ondelete_value, (str, type(None))) # for typing |
| 774 | args.append(ForeignKey(foreign_key, ondelete=ondelete_value)) |
| 775 | kwargs: dict[str, Any] = { |
| 776 | "primary_key": primary_key, |
| 777 | "nullable": nullable, |
| 778 | "index": index, |
| 779 | "unique": unique, |
| 780 | } |
| 781 | sa_default = Undefined |
| 782 | if field_info.default_factory: |
| 783 | sa_default = field_info.default_factory |
| 784 | elif field_info.default is not Undefined: |
| 785 | sa_default = field_info.default |
| 786 | if sa_default is not Undefined: |
| 787 | kwargs["default"] = sa_default |
| 788 | sa_column_args = _get_sqlmodel_field_value(field_info, "sa_column_args", Undefined) |
| 789 | if sa_column_args is not Undefined: |
| 790 | args.extend(list(cast(Sequence[Any], sa_column_args))) |
| 791 | sa_column_kwargs = _get_sqlmodel_field_value( |
| 792 | field_info, "sa_column_kwargs", Undefined |
| 793 | ) |
| 794 | if sa_column_kwargs is not Undefined: |
| 795 | kwargs.update(cast(dict[Any, Any], sa_column_kwargs)) |
| 796 | return Column(sa_type, *args, **kwargs) |
| 797 |
no test coverage detected
searching dependent graphs…