diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cf95e1be91c18765a9b8ba98c83dcd77fd91ad93..a637f9c7d62ddba7b5e1f312da14a8d0e7143c34 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -32,6 +32,7 @@ type-checking: - medium image: "$CI_REGISTRY_IMAGE/qbcontainer" script: + - find -name '__pycache__' -type d -exec rm {} + - python3 -m mypy --install-types --non-interactive querybuilder/ test: diff --git a/querybuilder/helpers/schema.py b/querybuilder/helpers/schema.py index 9ca9c06736ac87117d56422902697d2f2a0f4b1a..cf37fcca6ee696284996782d53cd1cf7242a5385 100644 --- a/querybuilder/helpers/schema.py +++ b/querybuilder/helpers/schema.py @@ -320,25 +320,26 @@ class Field: def to_named_column( self: NamedColumn | ColumnSpec, - relation_name: Optional[str] = None, - schema_name: Optional[str] = None, + relation_name: str | None | _MISSING_TYPE = MISSING, + schema_name: str | None | _MISSING_TYPE = MISSING, ) -> NamedColumn: assert self.name assert self.sqltype - assert ( - not self.relation_name - or not relation_name - or self.relation_name == relation_name - ) - assert ( - not self.schema_name or not schema_name or self.schema_name == schema_name - ) - return NamedColumn( - self.sqltype, - self.name, - self.relation_name or relation_name, - self.schema_name or schema_name, - ) + if relation_name is MISSING: + relation_name = self.relation_name + elif relation_name is None: + schema_name = None + relation_name = cast(Optional[str], relation_name) + if schema_name is MISSING: + schema_name = self.schema_name + schema_name = cast(Optional[str], schema_name) + if relation_name: + assert not self.relation_name or self.relation_name == relation_name + if schema_name: + assert relation_name + assert not self.schema_name or self.schema_name == schema_name + + return NamedColumn(self.sqltype, self.name, relation_name, schema_name) @classmethod def _resolve_str_spec( @@ -506,7 +507,7 @@ class Field: ) -> Optional[qb.atoms.constraints.ColumnCheck]: check: Optional[str | Column | qb.atoms.constraints.ColumnCheck | tuple | dict] if callable(self.check): - check = self.check(self.to_named_column(), relation) + check = self.check(self.to_named_column(relation_name=None), rel) else: check = self.check if check is None: @@ -540,6 +541,7 @@ class Field: qb.atoms.constraints.ColumnDefault, ] if callable(self.default): + # TODO: when is a callable default useful? default = self.default(self.to_named_column()) else: default = self.default