overwrite unique constraints as old are bind to table

This commit is contained in:
collerek
2020-12-15 15:23:22 +01:00
parent 48b40d5a3c
commit 6e0da072db
2 changed files with 57 additions and 47 deletions

View File

@ -583,7 +583,9 @@ def update_attrs_and_fields(
model_fields.update(new_model_fields) model_fields.update(new_model_fields)
def update_attrs_from_base_meta(base_class: "Model", attrs: Dict, ) -> None: def update_attrs_from_base_meta( # noqa: CCR001
base_class: "Model", attrs: Dict,
) -> None:
""" """
Updates Meta parameters in child from parent if needed. Updates Meta parameters in child from parent if needed.
@ -594,16 +596,22 @@ def update_attrs_from_base_meta(base_class: "Model", attrs: Dict, ) -> None:
""" """
params_to_update = ["metadata", "database", "constraints"] params_to_update = ["metadata", "database", "constraints"]
for param in params_to_update: for param in params_to_update:
current_value = attrs.get('Meta', {}).__dict__.get(param, ormar.Undefined) current_value = attrs.get("Meta", {}).__dict__.get(param, ormar.Undefined)
parent_value = base_class.Meta.__dict__.get(param) if hasattr(base_class, 'Meta') else None parent_value = (
base_class.Meta.__dict__.get(param) if hasattr(base_class, "Meta") else None
)
if parent_value: if parent_value:
if param == "constraints":
parent_value = [
ormar.UniqueColumns(*x._pending_colargs) for x in parent_value
]
if isinstance(current_value, list): if isinstance(current_value, list):
current_value.extend(parent_value) current_value.extend(parent_value)
else: else:
setattr(attrs["Meta"], param, parent_value) setattr(attrs["Meta"], param, parent_value)
def extract_from_parents_definition( def extract_from_parents_definition( # noqa: CCR001
base_class: type, base_class: type,
curr_class: type, curr_class: type,
attrs: Dict, attrs: Dict,

View File

@ -92,6 +92,7 @@ def test_init_of_abstract_model():
def test_field_redefining_raises_error(): def test_field_redefining_raises_error():
with pytest.raises(ModelDefinitionError): with pytest.raises(ModelDefinitionError):
class WrongField(DateFieldsModel): # pragma: no cover class WrongField(DateFieldsModel): # pragma: no cover
class Meta(ormar.ModelMeta): class Meta(ormar.ModelMeta):
tablename = "wrongs" tablename = "wrongs"
@ -104,6 +105,7 @@ def test_field_redefining_raises_error():
def test_model_subclassing_non_abstract_raises_error(): def test_model_subclassing_non_abstract_raises_error():
with pytest.raises(ModelDefinitionError): with pytest.raises(ModelDefinitionError):
class WrongField2(DateFieldsModelNoSubclass): # pragma: no cover class WrongField2(DateFieldsModelNoSubclass): # pragma: no cover
class Meta(ormar.ModelMeta): class Meta(ormar.ModelMeta):
tablename = "wrongs" tablename = "wrongs"