Sări la conținutul principal

SDK Python

SDK Python complet tipizat pentru API-ul Layers construit pe httpx și Pydantic v2.

Descărcare

Descarcă layers-sdk-python.zip

Instalare

# Dezarhivează, apoi instalează
unzip layers-sdk-python.zip
pip install .

Sau instalează dependențele direct:

pip install httpx pydantic

Apoi plasează directorul layers_sdk/ în proiectul tău.

Cerințe

  • Python >= 3.10
  • httpx >= 0.27
  • pydantic >= 2.0

Pornire rapidă

from layers_sdk import LayersClient, PortfolioFilter, Feature, Geometry, GeometryType

client = LayersClient(base_url="https://your-api-host.com", api_key="your-api-key")

# Geocodifică o adresă
result = client.location.geocode(q="10 Downing Street, London")
print(result.lat, result.lon)

# Interogă puncte în interiorul unui poligon
shape = Feature(
type="Feature",
geometry=Geometry(
type=GeometryType.POLYGON,
polygon=[[[13.0, 52.0], [14.0, 52.0], [14.0, 53.0], [13.0, 53.0], [13.0, 52.0]]],
),
)
points = client.reports_v1.points_selection(source="my_source", shape=shape)

# Îmbogățeşte un singur punct
enriched = client.enrichment.enrich_single(
lat=48.8, lng=2.3, layers=["flood"], operation="enhance"
)

# Generează un raport de riscuri ca PDF
from layers_sdk import PointRiskRequestPayload, PointRiskLayers

pdf = client.risk.point_risk(PointRiskRequestPayload(
point=Geometry(type=GeometryType.POINT, point=[13.4, 52.5]),
layers=PointRiskLayers(source="flood", names=["flood_zone"]),
))
with open("report.pdf", "wb") as f:
f.write(pdf)

Referință API

SDK expune toate serviciile prin obiectul LayersClient:

ProprietateDescriere
client.locationCompletare automată, geocodificare, geocodificare inversă
client.reports_v1Rapoarte portofoliu cu filtre V1 (PortfolioFilter)
client.reports_v2Rapoarte portofoliu cu filtre V2 (RequestFilter)
client.riskGenerare raport riscuri (PDF/HTML)
client.enrichmentÎmbogățire punct singular și batch
client.wfsOGC WFS GetFeature
client.wmsOGC WMS GetCapabilities, GetMap, GetFeatureInfo, GetLegendGraphic, DescribeLayer

Locație

# Completare automată
results = client.location.autocomplete(q="Berlin")

# Geocodificare
result = client.location.geocode(q="10 Downing Street, London")

# Geocodificare inversă
result = client.location.reverse_geocode(lat="51.5034", lon="-0.1276")

Rapoarte V1

from layers_sdk import PortfolioFilter, Feature, Buffer, Coordinates

filters = [PortfolioFilter(field="oe_id", value="my-oe")]

# Acumulare în interiorul unei forme
results = client.reports_v1.accumulation_selection(
source="my_source", shape=my_feature, filters=filters,
aggregation_columns=["insured_value"],
)

# Acumulare în interiorul unui buffer
buffer = Buffer(type="circle", coordinates=[Coordinates(lat=52.52, long=13.405)])
results = client.reports_v1.accumulation_buffer(
source="my_source", shape=buffer, radiuses=[1000, 5000], filters=filters,
)

# Intrări (JSON sau CSV)
entries = client.reports_v1.entries_selection(source="src", shape=my_feature)
csv_bytes = client.reports_v1.entries_selection(
source="src", shape=my_feature, accept="text/csv"
)

# Puncte
points = client.reports_v1.points_selection(source="src", shape=my_feature)

# Atribute punct
attrs = client.reports_v1.points_attributes(source="src", value=123)

# Aprovizionare
provision = client.reports_v1.get_provision()

Rapoarte V2

Aceleași metode ca V1, dar utilizează RequestFilter în loc de PortfolioFilter:

from layers_sdk import RequestFilter

filters_v2 = [RequestFilter(field="oe_id", value="my-oe")]

results = client.reports_v2.accumulation_selection(
source="my_source", shape=my_feature, filters_v2=filters_v2,
)

entries = client.reports_v2.entries_selection(
source="src", shape=my_feature, filters_v2=filters_v2,
)

Rapoarte riscuri

from layers_sdk import (
PointRiskRequestPayload, PointRiskLayers,
PointBufferRiskRequestPayload, PointBufferRiskLayers, ReportBuffer,
Geometry, GeometryType,
)

# Raport riscuri punct (PDF)
pdf = client.risk.point_risk(PointRiskRequestPayload(
point=Geometry(type=GeometryType.POINT, point=[13.4, 52.5]),
layers=PointRiskLayers(source="flood", names=["flood_zone"]),
))

# Raport riscuri punct (previzualizare HTML)
html = client.risk.point_risk(payload, accept="text/html")

# Raport riscuri punct-buffer
pdf = client.risk.point_buffer_risk(PointBufferRiskRequestPayload(
point=Geometry(type=GeometryType.POINT, point=[13.4, 52.5]),
source="my_source",
buffer=ReportBuffer(radiuses=[1000, 5000], style="solid"),
))

# Variante V2
pdf = client.risk.point_risk_v2(payload)
pdf = client.risk.point_buffer_risk_v2(payload)

Îmbogățire

from layers_sdk import PointRequest

# Punct singular
result = client.enrichment.enrich_single(
lat=48.8, lng=2.3, layers=["flood", "earthquake"], operation="enhance"
)

# Batch
results = client.enrichment.enrich_batch(
points=[PointRequest(id="p1", lat=48.8, lng=2.3)],
layers=["flood"],
operation="count",
)

WFS

features = client.wfs.get_feature(
type_names="namespace:featuretype",
count=100,
bbox="0,0,10,10,EPSG:4326",
cql_filter="population > 1000",
)

WMS

# Capabilități XML
xml = client.wms.get_capabilities()

# Imagine hartă
png_bytes = client.wms.get_map(
layers="GRAPHRASTER:light_pollution",
srs="EPSG:3857",
bbox="975947,6657970,1533632,7037098",
width=256, height=256,
)

# Informații caracteristică
info = client.wms.get_feature_info(
layers="GRAPHRASTER:light_pollution", styles="", srs="EPSG:3857",
bbox="2554219,5763351,2554220,5763352", width=10, height=10,
query_layers="GRAPHRASTER:light_pollution", x=5, y=5,
)

# Grafic legendă
legend = client.wms.get_legend_graphic(
layer="GRAPHRASTER:light_pollution", styles="default",
)

# Descrie strat
desc = client.wms.describe_layer(layers="GRAPHRASTER:light_pollution")

Gestionare erori

from layers_sdk.exceptions import BadRequestError, ForbiddenError, ServerError

try:
client.reports_v1.entries_selection(source="src", shape=my_feature)
except BadRequestError as e:
print(f"Bad request: {e.message}")
except ForbiddenError:
print("Access denied")
except ServerError as e:
print(f"Server error ({e.status_code}): {e.message}")

Structura pachet

layers_sdk/
├── __init__.py # Exporuri pachet
├── client.py # LayersClient + _BaseAPI
├── exceptions.py # Ierarhie excepție
├── py.typed # Marcator PEP 561
├── models/
│ ├── __init__.py
│ ├── geojson.py # Feature, Geometry, GeometryType, Buffer, Coordinates
│ ├── filters.py # PortfolioFilter, RequestFilter, FiltersPayload
│ ├── errors.py # ErrorMessage, ErrorMessageResponse, ErrorResponse
│ ├── location.py # AutocompleteResult, GeocodeResult, ReverseGeocodeResult
│ ├── enrichment.py # PointRequest, BatchRequestOptions
│ ├── provisioning.py # PortfolioProvisionResponse + modele sub-config
│ ├── reports.py # Toate modelele cerere/răspuns V1/V2
│ └── risk.py # Sarcini raport riscuri
├── api/
│ ├── __init__.py
│ ├── location.py # LocationAPI
│ ├── reports_v1.py # ReportsV1API
│ ├── reports_v2.py # ReportsV2API
│ ├── risk.py # RiskAPI
│ ├── enrichment.py # EnrichmentAPI
│ ├── wfs.py # WFSAPI
│ └── wms.py # WMSAPI
pyproject.toml # Configurație pachet instalabil pip