Skip to content

Commit 3781d3f

Browse files
committed
Merge remote-tracking branch 'origin/main' into add_street_tree
2 parents 2b0f3d1 + 7950784 commit 3781d3f

4 files changed

Lines changed: 25 additions & 20 deletions

File tree

app/main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from .api.school import route_school
1919
from .api.police import route_police
2020
from .api.xplan import route_xplan
21+
from .api.tree import route_street_tree
2122

2223

2324
app = FastAPI(
@@ -78,3 +79,4 @@ async def custom_validation_error_handler(
7879
app.include_router(route_administrative)
7980
app.include_router(route_demographic)
8081
app.include_router(route_energy)
82+
app.include_router(route_street_tree)

app/models/tree.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
from sqlmodel import SQLModel, Field
22
from geoalchemy2 import Geometry
33
from sqlalchemy import Column, Numeric, String, Date
4+
from typing import Optional
5+
import datetime
46

5-
class StreetTreeRegister(SQLModel):
6-
__tablename__ = "flensburg.street_tree_register"
7+
class StreetTreeRegister(SQLModel, table=True):
8+
__tablename__ = "street_tree_register"
9+
__table_args__ = {'schema': 'flensburg'}
710

8-
id: int = Field(primary_key=True, nullable=False)
9-
tree_number = Column(String, nullable=False)
10-
street = Column(String, nullable=False)
11-
area_type = Column(String)
12-
species = Column(String, nullable=False)
13-
north = Column(Numeric, nullable=False)
14-
east = Column(Numeric, nullable=False)
15-
register_date = Column(Date, nullable=False)
16-
type = Column(String, nullable=False)
17-
geom = Column(Geometry('POINT', srid=4326))
11+
id: int = Field(primary_key=True) # nullable=False implied for primary_key
12+
tree_number: str = Field(nullable=False) # simple field, no sa_column so nullable allowed here
13+
street: str = Field(sa_column=Column(String, nullable=False))
14+
area_type: Optional[str] = Field(sa_column=Column(String, nullable=True), default=None)
15+
species: str = Field(sa_column=Column(String, nullable=False))
16+
north: float = Field(sa_column=Column(Numeric, nullable=False))
17+
east: float = Field(sa_column=Column(Numeric, nullable=False))
18+
registration_date: datetime.date = Field(sa_column=Column(Date(), nullable=False))
19+
type: str = Field(sa_column=Column(String, nullable=False))
20+
geom: object = Field(sa_column=Column(Geometry('POINT', srid=31467), nullable=True)) # nullable depends on DB column

app/schemas/tree.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,14 @@ class StreetTreeResponse(BaseModel):
99
id: int
1010
tree_number: str
1111
street: str
12-
area_type: str
12+
area_type: Optional[str]
1313
species: str
1414
north: float
1515
east: float
16-
register_date: str
16+
registration_date: str
1717
type: str
18-
geom = GeoPoint
18+
geom: GeoPoint # Correctly typed attribute
19+
1920

2021
class CrsProperties(BaseModel):
2122
name: str

app/services/tree.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
from sqlalchemy.ext.asyncio import AsyncSession
2-
from sqlalchemy.future import select
3-
4-
from ..models.tree import StreetTreeRegister
2+
from sqlmodel import select
3+
from app.models.tree import StreetTreeRegister
54

65
async def get_tree_by_id(session: AsyncSession, tree_id: int):
76
model = StreetTreeRegister
87

9-
stmt = select(model.id).where(model.id == tree_id)
8+
stmt = select(model).where(model.id == tree_id)
109
result = await session.execute(stmt)
11-
row = result.mappings().one_or_none()
10+
row = result.scalars().first()
1211

1312
return row

0 commit comments

Comments
 (0)