def lav_ident(variant, ident): pit = PunktInformationType( name=variant, anvendelse=PunktInformationTypeAnvendelse.TEKST, beskrivelse="Bare en test", ) return Ident(PunktInformation(infotype=pit, tekst=ident))
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)
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
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
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"
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()
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
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()
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
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
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()
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)
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)
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)
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}"