def luk_punkt(self, punkt: Punkt, sagsevent: Sagsevent): """ Luk et punkt. Lukker udover selve punktet også tilhørende geometriobjekt, koordinater og punktinformationer. Alle lukkede objekter tilknyttes samme sagsevent af typen EventType.PUNKT_NEDLAGT. Dette er den ultimative udrensning. BRUG MED OMTANKE! """ if not isinstance(punkt, Punkt): raise TypeError("'punkt' is not an instance of Punkt") sagsevent.eventtype = EventType.PUNKT_NEDLAGT self._luk_fikspunkregisterobjekt(punkt, sagsevent, commit=False) self._luk_fikspunkregisterobjekt( punkt.geometriobjekter[-1], sagsevent, commit=False ) for koordinat in punkt.koordinater: self._luk_fikspunkregisterobjekt(koordinat, sagsevent, commit=False) for punktinfo in punkt.punktinformationer: self._luk_fikspunkregisterobjekt(punktinfo, sagsevent, commit=False) for observation in punkt.observationer_fra: self._luk_fikspunkregisterobjekt(observation, sagsevent, commit=False) for observation in punkt.observationer_til: self._luk_fikspunkregisterobjekt(observation, sagsevent, commit=False) self.session.commit()
def test_grafik_unikke_filnavne(firedb: FireDb, sag: Sag, sagsevent: Sagsevent): """Test at der ikke kan oprettes filnavnedupletter""" filnavn = f"{fire.uuid()}.png" sagsevent.eventtype = EventType.PUNKT_OPRETTET p1 = Punkt(sagsevent=sagsevent) p2 = Punkt(sagsevent=sagsevent) g1 = Grafik( punkt=p1, filnavn=filnavn, mimetype="image/png", type="skitse", grafik=b"\xf3\xf5\xf8\x98", ) g2 = Grafik( punkt=p2, filnavn=filnavn, mimetype="image/png", type="skitse", grafik=b"\xf3\xf5\xf8\x98", ) with pytest.raises(DatabaseError): firedb.indset_sagsevent( Sagsevent( sag=sag, sagseventinfos=[ SagseventInfo(beskrivelse="Test fejl ved filnavnduplet") ], eventtype=EventType.GRAFIK_INDSAT, grafikker=[g1, g2], ) ) firedb.session.rollback()
def luk_punktinfo(self, punktinfo: PunktInformation, sagsevent: Sagsevent): """ Luk en punktinformation. Hvis ikke allerede sat, ændres sagseventtypen til EventType.PUNKTINFO_FJERNET. """ if not isinstance(punktinfo, PunktInformation): raise TypeError("'punktinfo' is not an instance of PunktInformation") sagsevent.eventtype = EventType.PUNKTINFO_FJERNET self._luk_fikspunkregisterobjekt(punktinfo, sagsevent)
def luk_observation(self, observation: Observation, sagsevent: Sagsevent): """ Luk en observation. Hvis ikke allerede sat, ændres sagseventtypen til EventType.OBSERVATION_NEDLAGT. """ if not isinstance(observation, Observation): raise TypeError("'observation' is not an instance of Observation") sagsevent.eventtype = EventType.OBSERVATION_NEDLAGT self._luk_fikspunkregisterobjekt(observation, sagsevent)
def luk_koordinat(self, koordinat: Koordinat, sagsevent: Sagsevent): """ Luk en koordinat. Hvis ikke allerede sat, ændres sagseventtypen til EventType.KOORDINAT_NEDLAGT. """ if not isinstance(koordinat, Koordinat): raise TypeError("'koordinat' is not an instance of Koordinat") sagsevent.eventtype = EventType.KOORDINAT_NEDLAGT self._luk_fikspunkregisterobjekt(koordinat, sagsevent)
def _check_and_prepare_sagsevent(self, sagsevent: Sagsevent, eventtype: EventType): """Checks that the given Sagsevent is valid in the context given by eventtype. The sagsevent must be a "new" object (ie not persisted ot the database). It must have the specified eventtype. If the sagsevent doesnt have an id, this method will assign a guid. """ if not self._is_new_object(sagsevent): raise Exception("Do not attach new objects to an existing Sagsevent") if sagsevent.eventtype is None: sagsevent.eventtype = eventtype elif sagsevent.eventtype != eventtype: raise Exception(f"'{sagsevent.eventtype}' sagsevent. Should be {eventtype}")
def luk_beregning(self, beregning: Beregning, sagsevent: Sagsevent): """ Luk en beregning. Lukker alle koordinater der er tilknyttet beregningen. Hvis ikke allerede sat, ændres sagseventtypen til EventType.KOORDINAT_NEDLAGT. """ if not isinstance(beregning, Beregning): raise TypeError("'beregning' is not an instance of Beregning") sagsevent.eventtype = EventType.KOORDINAT_NEDLAGT for koordinat in beregning.koordinater: self._luk_fikspunkregisterobjekt(koordinat, sagsevent, commit=False) self._luk_fikspunkregisterobjekt(beregning, sagsevent, commit=False) self.session.commit()
def test_fejlmeld_koordinat_enlig_koordinat(firedb: FireDb, sag: Sag, sagsevent: Sagsevent, koordinat: Koordinat): sagsevent.eventtype = EventType.KOORDINAT_BEREGNET sagsevent.sagsid = sag.id koordinat.sagsevent = sagsevent firedb.session.add(sag) firedb.session.add(sagsevent) firedb.session.add(koordinat) firedb.session.commit() firedb.fejlmeld_koordinat( Sagsevent(eventtype=EventType.KOORDINAT_BEREGNET, sag=sag), koordinat) assert koordinat.fejlmeldt is True assert koordinat.registreringtil is not None
def _check_and_prepare_sagsevent(self, sagsevent: Sagsevent, eventtype: EventType): """ Tjek at et Sagsevent er gyldigt i den sammehæng som eventtype angiver. sagsevent skal være et "nyt" objekt, forstået på den måde at det ikke må være tilføjet databasen allerede. Det skal have samme eventtype som angivet. """ if not self._is_new_object(sagsevent): raise Exception( "Nye objekter kan ikke tilføjes et allerede eksisterende Sagsevent" ) if sagsevent.eventtype is None: sagsevent.eventtype = eventtype elif sagsevent.eventtype != eventtype: raise Exception( f"'{sagsevent.eventtype}' sagsevent. Burde være {eventtype}" )