Example #1
0
    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()
Example #2
0
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()
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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}")
Example #7
0
    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()
Example #8
0
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
Example #9
0
    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}"
            )