Ejemplo n.º 1
0
def lav_ident(variant, ident):
    pit = PunktInformationType(
        name=variant,
        anvendelse=PunktInformationTypeAnvendelse.TEKST,
        beskrivelse="Bare en test",
    )
    return Ident(PunktInformation(infotype=pit, tekst=ident))
Ejemplo n.º 2
0
def test_unit_tilknyt_landsnumre_fejl_punkttyper_exceptions(dummydb, mocker):
    """
    Test at der er smides en exception ved ugyldige FikspunktsTyper.
    """
    pktid = fire.uuid()

    pit_landsnr = PunktInformationType(name="IDENT:landsnr")
    mocker.patch("fire.api.FireDb.hent_punktinformationtype",
                 return_value=pit_landsnr)
    mocker.patch("fire.api.FireDb._opmålingsdistrikt_fra_punktid",
                 return_value=[("K-63", pktid)])
    mocker.patch(
        "fire.api.FireDb._løbenumre_i_distrikt",
        return_value=[str(i).zfill(5) for i in range(1, 9)],
    )

    punkter = [
        Punkt(
            id=pktid,
            geometriobjekter=[GeometriObjekt(geometri=Point((56.15, 10.20)))])
    ]
    fikspunktstyper = [FikspunktsType.VANDSTANDSBRÆT]

    with pytest.raises(NotImplementedError):
        dummydb.tilknyt_landsnumre(punkter, fikspunktstyper)

    fikspunktstyper = ["IKKE_EN_FIKSPUNKSTYPE"]
    with pytest.raises(ValueError):
        dummydb.tilknyt_landsnumre(punkter, fikspunktstyper)
Ejemplo n.º 3
0
def test_unit_tilknyt_landsnumre_har_landsnr(dummydb, mocker):
    """
    Test at punkter der allerede har et landsnummer frasorteres.
    """

    pktid = fire.uuid()

    pit_landsnr = PunktInformationType(name="IDENT:landsnr")
    mocker.patch("fire.api.FireDb.hent_punktinformationtype",
                 return_value=pit_landsnr)
    mocker.patch("fire.api.FireDb._opmålingsdistrikt_fra_punktid",
                 return_value=[("K-63", pktid)])
    mocker.patch(
        "fire.api.FireDb._løbenumre_i_distrikt",
        return_value=[str(i).zfill(5) for i in range(1, 9)],
    )

    punkter = [
        Punkt(
            id=pktid,
            geometriobjekter=[GeometriObjekt(geometri=Point((56.15, 10.20)))],
            punktinformationer=[
                PunktInformation(infotype=pit_landsnr, tekst="K-63-00001")
            ],
        )
    ]
    fikspunktstyper = [FikspunktsType.GI]
    landsnumre = dummydb.tilknyt_landsnumre(punkter, fikspunktstyper)

    assert len(landsnumre) == 0
Ejemplo n.º 4
0
def test_indset_punktinformationtype(firedb):
    infotype = PunktInformationType(
        name="ATTR:TEST",
        anvendelse=PunktInformationTypeAnvendelse.FLAG,
        beskrivelse="Bare en test",
    )
    firedb.indset_punktinformationtype(infotype)
    typ = firedb.hent_punktinformationtype("ATTR:TEST")

    assert typ.beskrivelse == infotype.beskrivelse
Ejemplo n.º 5
0
def test_hent_punktformationtype_by_id(firedb):
    infotype = PunktInformationType(
        name="NET:TEST",
        anvendelse=PunktInformationTypeAnvendelse.FLAG,
        beskrivelse="Net med testpunkter",
    )
    firedb.indset_punktinformationtype(infotype)
    typ = firedb.hent_punktinformationtype("NET:TEST")
    assert typ is not None
    assert typ.name == "NET:TEST"
Ejemplo n.º 6
0
 def indset_punktinformationtype(self, punktinfotype: PunktInformationType):
     if not self._is_new_object(punktinfotype):
         raise Exception(
             f"Cannot re-add already persistant punktinformationtype: {punktinfotype}"
         )
     n = self.session.query(func.max(PunktInformationType.infotypeid)).one()[0]
     if n is None:
         n = 0
     punktinfotype.infotypeid = n + 1
     self.session.add(punktinfotype)
     self.session.commit()
Ejemplo n.º 7
0
def punktinformationtype(firedb):
    try:
        pi = firedb.hent_punktinformationtyper()[0]
    except IndexError:
        firedb.indset_punktinformationtype(
            PunktInformationType(
                name="ATTR:fixture",
                anvendelse=PunktInformationTypeAnvendelse.FLAG,
                beskrivelse="Punktinfotype oprettet af test fixture",
            )
        )
        pi = firedb.hent_punktinformationtyper()[0]
    return pi
Ejemplo n.º 8
0
def test_punktinfoanvendelsestype(firedb: FireDb, sagsevent: Sagsevent,
                                  punkt: Punkt):
    """
    Tester validering af anvendelsestype i triggeren punktinfo_biu_trg
    """
    infotype_flag = firedb.hent_punktinformationtype("ATTR:tabtgået")
    flaginfo = PunktInformation(
        infotype=infotype_flag,
        punkt=punkt,
        tekst="tekst",
        tal=999,
    )
    sagsevent.punktinformationer = [flaginfo]
    firedb.session.add(sagsevent)

    with pytest.raises(DatabaseError):
        firedb.session.commit()
    firedb.session.rollback()

    infotype_tekst = firedb.hent_punktinformationtype("IDENT:GNSS")
    tekstinfo = PunktInformation(
        infotype=infotype_tekst,
        punkt=punkt,
        tekst=None,
        tal=None,
    )
    sagsevent.punktinformationer = [tekstinfo]
    firedb.session.add(sagsevent)

    with pytest.raises(DatabaseError):
        firedb.session.commit()
    firedb.session.rollback()

    infotype_tal = PunktInformationType(
        name="ATTR:tal",
        anvendelse=PunktInformationTypeAnvendelse.TAL,
        beskrivelse="Test",
        infotypeid=999,
    )
    talinfo = PunktInformation(
        infotype=infotype_tal,
        punkt=punkt,
        tekst=None,
        tal=None,
    )
    sagsevent.punktinformationer = [talinfo]
    firedb.session.add(sagsevent)

    with pytest.raises(DatabaseError):
        firedb.session.commit()
    firedb.session.rollback()
Ejemplo n.º 9
0
def test_unit_tilknyt_landsnumre_flere_typer(dummydb, mocker):
    """
    Test løbenummerudvælgelse for flere typer fikspunktpunkter i samme kald.
    """

    punkt_ider = [fire.uuid() for _ in range(5)]

    se = (("K-63", pid) for pid in punkt_ider)
    mocker.patch(
        "fire.api.FireDb.hent_punktinformationtype",
        return_value=PunktInformationType(name="IDENT:landsnr"),
    )
    mocker.patch("fire.api.FireDb._opmålingsdistrikt_fra_punktid",
                 return_value=se)
    mocker.patch(
        "fire.api.FireDb._løbenumre_i_distrikt",
        return_value=[],
    )

    punkter = [
        Punkt(
            id=pktid,
            geometriobjekter=[GeometriObjekt(geometri=Point((56.15, 10.20)))])
        for pktid in punkt_ider
    ]

    fikspunktstyper = [
        FikspunktsType.GI,
        FikspunktsType.MV,
        FikspunktsType.HØJDE,
        FikspunktsType.JESSEN,
        FikspunktsType.HJÆLPEPUNKT,
    ]

    print(fikspunktstyper)
    print(punkter)
    landsnumre = dummydb.tilknyt_landsnumre(punkter, fikspunktstyper)

    assert len(landsnumre) == 5

    forventede_landsnumre = [
        "K-63-00001",
        "K-63-00011",
        "K-63-09001",
        "K-63-81001",
        "K-63-90001",
    ]

    for landsnr, forventet in zip(landsnumre, forventede_landsnumre):
        assert landsnr.tekst == forventet
Ejemplo n.º 10
0
def test_unit_tilknyt_landsnumre_gi(dummydb, mocker):
    """
    Test løbenummerudvælgelse for GI-punkter hvor der er løbenumrene
    befinder sig i to intervaller. Specifikt testes om overgangen fra
    det første interval til det andet forløber som det skal.
    """

    punkt_ider = [fire.uuid() for _ in range(4)]

    se = (("K-63", pid) for pid in punkt_ider)
    mocker.patch(
        "fire.api.FireDb.hent_punktinformationtype",
        return_value=PunktInformationType(name="IDENT:landsnr"),
    )
    mocker.patch("fire.api.FireDb._opmålingsdistrikt_fra_punktid",
                 return_value=se)
    mocker.patch(
        "fire.api.FireDb._løbenumre_i_distrikt",
        return_value=[str(i).zfill(5) for i in range(1, 9)],
    )

    punkter = [
        Punkt(
            id=pktid,
            geometriobjekter=[GeometriObjekt(geometri=Point((56.15, 10.20)))])
        for pktid in punkt_ider
    ]

    fikspunktstyper = [
        FikspunktsType.GI,
        FikspunktsType.GI,
        FikspunktsType.GI,
        FikspunktsType.GI,
    ]

    print(fikspunktstyper)
    print(punkter)
    landsnumre = dummydb.tilknyt_landsnumre(punkter, fikspunktstyper)

    assert len(landsnumre) == 4

    forventede_landsnumre = [
        "K-63-00009",
        "K-63-00010",
        "K-63-00801",
        "K-63-00802",
    ]

    for landsnr, forventet in zip(landsnumre, forventede_landsnumre):
        assert landsnr.tekst == forventet
Ejemplo n.º 11
0
def indset_punktinformationtype(self,
                                punktinfotype: PunktInformationType,
                                commit: bool = True):
    if not self._is_new_object(punktinfotype):
        raise Exception(
            f"PunktInformationType allerede tilføjet databasen: {punktinfotype}"
        )
    n = self.session.query(func.max(PunktInformationType.infotypeid)).one()[0]
    if n is None:
        n = 0
    punktinfotype.infotypeid = n + 1
    self.session.add(punktinfotype)

    if commit:
        self.session.commit()
Ejemplo n.º 12
0
def test_unit_tilknyt_landsnumre_fejl_ved_manglende_geometri(dummydb, mocker):
    """
    Test at der er smides en exception når et Punkt mangler en geometri.
    """
    pktid = fire.uuid()

    pit_landsnr = PunktInformationType(name="IDENT:landsnr")
    mocker.patch("fire.api.FireDb.hent_punktinformationtype",
                 return_value=pit_landsnr)

    punkter = [Punkt(id=pktid)]
    fikspunktstyper = [FikspunktsType.GI]

    with pytest.raises(AttributeError):
        dummydb.tilknyt_landsnumre(punkter, fikspunktstyper)
Ejemplo n.º 13
0
def main():
    infotype = firedb.hent_punktinformationtype(ATTRIBUT)
    if infotype is None:
        firedb.indset_punktinformationtype(
            PunktInformationType(
                name=ATTRIBUT,
                anvendelse=fire.api.model.PunktInformationTypeAnvendelse.TEKST,
                beskrivelse="Fundamentalpunkt i referencesystemet angivet i TEKST",
            )
        )
        infotype = firedb.hent_punktinformationtype(ATTRIBUT)

    print(infotype)

    sagsinfo = Sagsinfo(
        aktiv="true",
        behandler="Kristian Evers",
        beskrivelse=sagsbeskrivelse
    )
    sagid = str(uuid.uuid4())
    firedb.indset_sag(Sag(id=sagid, sagsinfos=[sagsinfo]))
    sag =  firedb.hent_sag(sagid)

    punktinformationer =  []

    for srid, identer in PUNKTER.items():
        for ident in identer:
            try:
                punkt = firedb.hent_punkt(ident)
            except NoResultFound:
                print(f'fejl: {ident}')
                continue
            pi = PunktInformation(infotype=infotype, punkt=punkt, tekst=srid)
            punktinformationer.append(pi)

    sagseventinfo = SagseventInfo(beskrivelse=f"Indsættelse af {ATTRIBUT} attributter")
    sagsevent = Sagsevent(
        id=str(uuid.uuid4()),
        sag=sag,
        eventtype=fire.api.model.EventType.PUNKTINFO_TILFOEJET,
        sagseventinfos=[sagseventinfo],
        punktinformationer=punktinformationer,
    )
    firedb.indset_sagsevent(sagsevent)
Ejemplo n.º 14
0
def main():

    firedb.indset_punktinformationtype(
        PunktInformationType(
            name=ATTRIBUT,
            anvendelse=fire.api.model.PunktInformationTypeAnvendelse.FLAG,
            beskrivelse="Punkter i den oprindelige DVR90-udjævning",
        ))
    infotype = firedb.hent_punktinformationtype(ATTRIBUT)

    sagsinfo = Sagsinfo(aktiv="true",
                        behandler="Kristian Evers",
                        beskrivelse=sagsbeskrivelse)
    sagid = str(uuid.uuid4())
    firedb.indset_sag(Sag(id=sagid, sagsinfos=[sagsinfo]))
    sag = firedb.hent_sag(sagid)

    with open(POINT_FILE) as f:
        punkter = [punkt.strip() for punkt in f.readlines()]

        punktinformationer = []
        # interaktion med databasen er pokkers langsomt, vis fremdrift
        with click.progressbar(punkter, label="Punkter") as punkter_progress:
            for ident in punkter_progress:
                try:
                    punkt = get_punkt(ident)
                except sqlalchemy.orm.exc.NoResultFound:
                    print(f"Ident ikke fundet: {ident}")
                    continue

                pi = PunktInformation(infotype=infotype, punkt=punkt)
                punktinformationer.append(pi)

    sagseventinfo = SagseventInfo(
        beskrivelse=f"Indsættelse af {ATTRIBUT} attibutter")
    sagsevent = Sagsevent(
        id=str(uuid.uuid4()),
        sag=sag,
        eventtype=fire.api.model.EventType.PUNKTINFO_TILFOEJET,
        sagseventinfos=[sagseventinfo],
        punktinformationer=punktinformationer,
    )
    firedb.indset_sagsevent(sagsevent)
Ejemplo n.º 15
0
def test_unit_tilknyt_landsnumre(dummydb, mocker):
    """
    Test at løbenumre tildeles korrekt med afsæt i allerede tildelte
    løbenumre.
    """
    punkt_ider = [fire.uuid() for _ in range(3)]

    se = (("K-63", pid) for pid in punkt_ider)
    mocker.patch(
        "fire.api.FireDb.hent_punktinformationtype",
        return_value=PunktInformationType(name="IDENT:landsnr"),
    )
    mocker.patch("fire.api.FireDb._opmålingsdistrikt_fra_punktid",
                 return_value=se)
    mocker.patch(
        "fire.api.FireDb._løbenumre_i_distrikt",
        return_value=["09001", "09002", "09003"],
    )

    punkter = [
        Punkt(
            id=pktid,
            geometriobjekter=[GeometriObjekt(geometri=Point((56.15, 10.20)))])
        for pktid in punkt_ider
    ]

    fikspunktstyper = [
        FikspunktsType.HØJDE,
        FikspunktsType.HØJDE,
        FikspunktsType.HØJDE,
    ]

    print(fikspunktstyper)
    print(punkter)
    landsnumre = dummydb.tilknyt_landsnumre(punkter, fikspunktstyper)

    assert len(landsnumre) == 3

    for i, landsnummer in enumerate(landsnumre, 4):
        assert landsnummer.tekst == f"K-63-0900{i}"