Initial commit: breakpilot-lehrer - Lehrer KI Platform
Services: Admin-Lehrer, Backend-Lehrer, Studio v2, Website, Klausur-Service, School-Service, Voice-Service, Geo-Service, BreakPilot Drive, Agent-Core Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
97
geo-service/models/attribution.py
Normal file
97
geo-service/models/attribution.py
Normal file
@@ -0,0 +1,97 @@
|
||||
"""
|
||||
Attribution Models
|
||||
Models for license and attribution tracking
|
||||
"""
|
||||
from typing import Optional
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class AttributionSource(BaseModel):
|
||||
"""
|
||||
Attribution information for a data source.
|
||||
|
||||
All geographic data requires proper attribution per their licenses.
|
||||
"""
|
||||
name: str = Field(..., description="Source name")
|
||||
license: str = Field(..., description="License name")
|
||||
url: str = Field(..., description="License or source URL")
|
||||
attribution: str = Field(..., description="Required attribution text")
|
||||
required: bool = Field(True, description="Whether attribution is legally required")
|
||||
logo_url: Optional[str] = Field(None, description="Optional logo URL")
|
||||
|
||||
|
||||
class Attribution(BaseModel):
|
||||
"""
|
||||
Complete attribution information for an AOI bundle.
|
||||
|
||||
Ensures DSGVO/GDPR compliance and proper data source attribution.
|
||||
"""
|
||||
sources: list[AttributionSource] = Field(
|
||||
...,
|
||||
description="List of data sources requiring attribution",
|
||||
)
|
||||
generated_at: str = Field(..., description="Timestamp when attribution was generated")
|
||||
notice: str = Field(
|
||||
"This data must be attributed according to the licenses above when used publicly.",
|
||||
description="General attribution notice",
|
||||
)
|
||||
|
||||
class Config:
|
||||
json_schema_extra = {
|
||||
"example": {
|
||||
"sources": [
|
||||
{
|
||||
"name": "OpenStreetMap",
|
||||
"license": "Open Database License (ODbL) v1.0",
|
||||
"url": "https://www.openstreetmap.org/copyright",
|
||||
"attribution": "© OpenStreetMap contributors",
|
||||
"required": True,
|
||||
},
|
||||
{
|
||||
"name": "Copernicus DEM",
|
||||
"license": "Copernicus Data License",
|
||||
"url": "https://spacedata.copernicus.eu/",
|
||||
"attribution": "© Copernicus Service Information 2024",
|
||||
"required": True,
|
||||
},
|
||||
],
|
||||
"generated_at": "2024-01-15T12:00:00Z",
|
||||
"notice": "This data must be attributed according to the licenses above when used publicly.",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Predefined attribution sources
|
||||
OSM_ATTRIBUTION = AttributionSource(
|
||||
name="OpenStreetMap",
|
||||
license="Open Database License (ODbL) v1.0",
|
||||
url="https://www.openstreetmap.org/copyright",
|
||||
attribution="© OpenStreetMap contributors",
|
||||
required=True,
|
||||
)
|
||||
|
||||
COPERNICUS_ATTRIBUTION = AttributionSource(
|
||||
name="Copernicus DEM",
|
||||
license="Copernicus Data License",
|
||||
url="https://spacedata.copernicus.eu/",
|
||||
attribution="© Copernicus Service Information 2024",
|
||||
required=True,
|
||||
)
|
||||
|
||||
OPENAERIAL_ATTRIBUTION = AttributionSource(
|
||||
name="OpenAerialMap",
|
||||
license="CC-BY 4.0",
|
||||
url="https://openaerialmap.org/",
|
||||
attribution="© OpenAerialMap contributors",
|
||||
required=True,
|
||||
)
|
||||
|
||||
|
||||
def get_default_attribution() -> Attribution:
|
||||
"""Get default attribution with standard sources."""
|
||||
from datetime import datetime
|
||||
|
||||
return Attribution(
|
||||
sources=[OSM_ATTRIBUTION, COPERNICUS_ATTRIBUTION],
|
||||
generated_at=datetime.utcnow().isoformat(),
|
||||
)
|
||||
Reference in New Issue
Block a user