MCPcopy Index your code
hub / github.com/fastapi/sqlmodel / get_column_from_field

Function get_column_from_field

sqlmodel/main.py:740–796  ·  view source on GitHub ↗
(field: Any)

Source from the content-addressed store, hash-verified

738
739
740def 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

Callers 1

__new__Method · 0.85

Calls 4

get_sqlalchemy_typeFunction · 0.85
is_field_noneableFunction · 0.85
castFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…