Skip to content
Merged
4 changes: 4 additions & 0 deletions docs/apps/info.rst
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ typer indhold i FIRE databasen.
:prog: fire info punkt
:nested: full

.. click:: fire.cli.info:koordinater
:prog: fire info koordinater
:nested: full

.. click:: fire.cli.info:sag
:prog: fire info sag
:nested: full
Expand Down
45 changes: 45 additions & 0 deletions src/fire/api/firedb/hent.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
PunktSamling,
PunktInformation,
PunktInformationType,
PunktInformationTypeAnvendelse,
GeometriObjekt,
Grafik,
Observation,
Expand Down Expand Up @@ -145,6 +146,50 @@ def hent_punkter(

return result

def hent_punkter_med_flag(
self, infotype: PunktInformationType, inkluder_historiske: bool = False
) -> list[Punkt]:
"""
Returnerer alle punkter der har en given FLAG-infotype

Bruges fx til at hente alle 5D-punkterne (NET:5D) eller alle punkter på Færøerne
(REGION:FO). Sættes `inkluder_historiske` til True, så søges der også iblandt
afregistrede attributter.

Der kan potentielt returneres mange punkter med denne, så brug den klogt. Det
frarådes derfor at søge på de meget almindelige infotyper, som fx. REGION:DK eller
ATTR:højdefikspunkt, da disse vil resultere i ca. 650.000 hhv. 250.000 punkter.

Hvis intet punkt findes udsendes en NoResultFound exception.
"""

if not infotype.anvendelse == PunktInformationTypeAnvendelse.FLAG:
raise ValueError(f"Ugyldig infotype, fik {infotype}.")

query = (
self.session.query(Punkt)
.options(
joinedload(Punkt.geometriobjekter),
joinedload(Punkt.koordinater),
)
.join(PunktInformation)
.join(PunktInformationType)
.filter(
PunktInformationType.name == infotype.name,
Punkt._registreringtil == None, # NOQA
)
)

if not inkluder_historiske:
query = query.filter(PunktInformation._registreringtil == None)

result = query.all()

if not result:
raise NoResultFound(f"Ingen punkter med attributten {infotype.name} fundet")

return result

def hent_punkter_fra_uuid_liste(self, uuids: List[str]):
"""
Hent alle punkter med punkt ID'er matchende listen `uuids`.
Expand Down
16 changes: 7 additions & 9 deletions src/fire/api/model/punkttyper.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ class Punkt(FikspunktregisterObjekt):
@reconstructor
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._identer = []
self._identer: list[Ident] = []

def _populer_identer(self):
"""
Expand Down Expand Up @@ -265,11 +265,9 @@ def tabtgået(self) -> bool:
return True
return False

def _hent_ident_af_type(self, identtype: str) -> str:
numre = []
for punktinfo in self.punktinformationer:
if punktinfo.infotype.name == identtype and not punktinfo.registreringtil:
numre.append(punktinfo.tekst)
def _hent_ident_af_type(self, identtype: Ident.IdentType) -> str:
self._populer_identer()
numre = [ident.tekst for ident in self._identer if ident._type == identtype]

if numre:
return sorted(numre)[0]
Expand All @@ -291,7 +289,7 @@ def gældende_koordinat(self, srid: str) -> Koordinat:

@property
def landsnummer(self) -> str:
_landsnummer = self._hent_ident_af_type("IDENT:landsnr")
_landsnummer = self._hent_ident_af_type(Ident.IdentType.LANDSNR)

if _landsnummer:
return _landsnummer
Expand All @@ -300,11 +298,11 @@ def landsnummer(self) -> str:

@property
def gnss_navn(self) -> str:
return self._hent_ident_af_type("IDENT:GNSS")
return self._hent_ident_af_type(Ident.IdentType.GNSS)

@property
def jessennummer(self) -> str:
return self._hent_ident_af_type("IDENT:jessen")
return self._hent_ident_af_type(Ident.IdentType.JESSEN)

def __lt__(self, other: Punkt) -> bool:
return self.landsnummer < other.landsnummer
Expand Down
29 changes: 29 additions & 0 deletions src/fire/cli/info/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import click


@click.group()
def info():
"""
Information om objekter i FIRE
"""
pass


# Udstil kommandoer
from fire.cli.info._info import (
punkt,
punktsamling,
srid,
obstype,
infotype,
sag,
sagsevent,
)
from fire.cli.info._koordinater import (
koordinater
)

# ... og visse hjælpefunktioner som bruges andre steder
from fire.cli.info._info import (
punktinforapport,
)
9 changes: 1 addition & 8 deletions src/fire/cli/info.py → src/fire/cli/info/_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from pyproj.exceptions import CRSError

import fire.cli
from fire.cli.info import info
from fire.ident import klargør_ident_til_søgning
from fire.io.geojson import skriv_sagsrapport_geojson
from fire.api.model import (
Expand All @@ -37,14 +38,6 @@
DATE_FORMAT = "%d-%m-%Y"


@click.group()
def info():
"""
Information om objekter i FIRE
"""
pass


def observation_linje(obs: Observation) -> str:
if obs.observationstypeid > 2:
return ""
Expand Down
Loading
Loading