From 58a3855697c6058850f5ae3d4b9998a8d3d0236b Mon Sep 17 00:00:00 2001 From: collerek Date: Sat, 14 Nov 2020 13:57:04 +0100 Subject: [PATCH] add saved property to avoid private prop access --- ormar/models/newbasemodel.py | 7 ++- tests/test_save_status.py | 96 ++++++++++++++++++------------------ 2 files changed, 54 insertions(+), 49 deletions(-) diff --git a/ormar/models/newbasemodel.py b/ormar/models/newbasemodel.py index 971bba4..5acf4ca 100644 --- a/ormar/models/newbasemodel.py +++ b/ormar/models/newbasemodel.py @@ -193,6 +193,10 @@ class NewBaseModel( def pk_column(self) -> sqlalchemy.Column: return self.Meta.table.primary_key.columns.values()[0] + @property + def saved(self) -> bool: + return self._orm_saved + @classmethod def pk_type(cls) -> Any: return cls.Meta.model_fields[cls.Meta.pkname].__type__ @@ -220,7 +224,8 @@ class NewBaseModel( prop for prop in dir(cls) if isinstance(getattr(cls, prop), property) - and prop not in ("__values__", "__fields__", "fields", "pk_column") + and prop + not in ("__values__", "__fields__", "fields", "pk_column", "saved") ] cls._props = props if include: diff --git a/tests/test_save_status.py b/tests/test_save_status.py index c94a171..ec15ccf 100644 --- a/tests/test_save_status.py +++ b/tests/test_save_status.py @@ -69,9 +69,9 @@ async def test_instantation_false_save_true(): async with database: async with database.transaction(force_rollback=True): comp = Company(name="Banzai", founded=1988) - assert not comp._orm_saved + assert not comp.saved await comp.save() - assert comp._orm_saved + assert comp.saved @pytest.mark.asyncio @@ -79,21 +79,21 @@ async def test_saved_edited_not_saved(): async with database: async with database.transaction(force_rollback=True): comp = await Company.objects.create(name="Banzai", founded=1988) - assert comp._orm_saved + assert comp.saved comp.name = "Banzai2" - assert not comp._orm_saved + assert not comp.saved await comp.update() - assert comp._orm_saved + assert comp.saved await comp.update(name="Banzai3") - assert comp._orm_saved + assert comp.saved comp.pk = 999 - assert not comp._orm_saved + assert not comp.saved await comp.update() - assert comp._orm_saved + assert comp.saved @pytest.mark.asyncio @@ -102,25 +102,25 @@ async def test_adding_related_gets_dirty(): async with database.transaction(force_rollback=True): hq = await HQ.objects.create(name="Main") comp = await Company.objects.create(name="Banzai", founded=1988) - assert comp._orm_saved + assert comp.saved comp.hq = hq - assert not comp._orm_saved + assert not comp.saved await comp.update() - assert comp._orm_saved + assert comp.saved comp = await Company.objects.select_related("hq").get(name="Banzai") - assert comp._orm_saved + assert comp.saved assert comp.hq.pk == hq.pk - assert comp.hq._orm_saved + assert comp.hq.saved comp.hq.name = "Suburbs" - assert not comp.hq._orm_saved - assert comp._orm_saved + assert not comp.hq.saved + assert comp.saved await comp.hq.update() - assert comp.hq._orm_saved + assert comp.hq.saved @pytest.mark.asyncio @@ -131,25 +131,25 @@ async def test_adding_many_to_many_does_not_gets_dirty(): nick2 = await NickNames.objects.create(name="Bazinga2", is_lame=True) hq = await HQ.objects.create(name="Main") - assert hq._orm_saved + assert hq.saved await hq.nicks.add(nick1) - assert hq._orm_saved + assert hq.saved await hq.nicks.add(nick2) - assert hq._orm_saved + assert hq.saved hq = await HQ.objects.select_related("nicks").get(name="Main") - assert hq._orm_saved - assert hq.nicks[0]._orm_saved + assert hq.saved + assert hq.nicks[0].saved await hq.nicks.remove(nick1) - assert hq._orm_saved + assert hq.saved hq.nicks[0].name = "Kabucha" - assert not hq.nicks[0]._orm_saved + assert not hq.nicks[0].saved await hq.nicks[0].update() - assert hq.nicks[0]._orm_saved + assert hq.nicks[0].saved @pytest.mark.asyncio @@ -157,12 +157,12 @@ async def test_delete(): async with database: async with database.transaction(force_rollback=True): comp = await Company.objects.create(name="Banzai", founded=1988) - assert comp._orm_saved + assert comp.saved await comp.delete() - assert not comp._orm_saved + assert not comp.saved await comp.update() - assert comp._orm_saved + assert comp.saved @pytest.mark.asyncio @@ -170,12 +170,12 @@ async def test_load(): async with database: async with database.transaction(force_rollback=True): comp = await Company.objects.create(name="Banzai", founded=1988) - assert comp._orm_saved + assert comp.saved comp.name = "AA" - assert not comp._orm_saved + assert not comp.saved await comp.load() - assert comp._orm_saved + assert comp.saved assert comp.name == "Banzai" @@ -189,30 +189,30 @@ async def test_queryset_methods(): await Company.objects.create(name="Sumaaa", founded=1991) comp = await Company.objects.get(name="Banzai") - assert comp._orm_saved + assert comp.saved comp = await Company.objects.first() - assert comp._orm_saved + assert comp.saved comps = await Company.objects.all() - assert [comp._orm_saved for comp in comps] + assert [comp.saved for comp in comps] comp2 = await Company.objects.get_or_create(name="Banzai_new", founded=2001) - assert comp2._orm_saved + assert comp2.saved comp3 = await Company.objects.get_or_create(name="Banzai", founded=1988) - assert comp3._orm_saved + assert comp3.saved assert comp3.pk == comp.pk update_dict = comp.dict() update_dict["founded"] = 2010 comp = await Company.objects.update_or_create(**update_dict) - assert comp._orm_saved + assert comp.saved assert comp.founded == 2010 create_dict = {"name": "Yoko", "founded": 2005} comp = await Company.objects.update_or_create(**create_dict) - assert comp._orm_saved + assert comp.saved assert comp.founded == 2005 @@ -224,36 +224,36 @@ async def test_bulk_methods(): c2 = Company(name="Yuhu", founded=1989) await Company.objects.bulk_create([c1, c2]) - assert c1._orm_saved - assert c2._orm_saved + assert c1.saved + assert c2.saved c1, c2 = await Company.objects.all() c1.name = "Banzai2" c2.name = "Yuhu2" - assert not c1._orm_saved - assert not c2._orm_saved + assert not c1.saved + assert not c2.saved await Company.objects.bulk_update([c1, c2]) - assert c1._orm_saved - assert c2._orm_saved + assert c1.saved + assert c2.saved c3 = Company(name="Cobra", founded=2088) - assert not c3._orm_saved + assert not c3.saved with pytest.raises(ModelPersistenceError): await c3.update() await c3.upsert() - assert c3._orm_saved + assert c3.saved c3.name = "Python" - assert not c3._orm_saved + assert not c3.saved await c3.upsert() - assert c3._orm_saved + assert c3.saved assert c3.name == "Python" await c3.upsert(founded=2077) - assert c3._orm_saved + assert c3.saved assert c3.founded == 2077