Skip to content

Commit 8c56128

Browse files
committed
manual edits
1 parent 669b827 commit 8c56128

File tree

8 files changed

+35
-36
lines changed

8 files changed

+35
-36
lines changed

backend/app/app/api/api_v1/endpoints/jobs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ async def create_job(job: schemas.JobCreate, db: Session = Depends(get_db)):
2727

2828
job = crud.create_job(db=db, job=job)
2929

30-
scan = schemas.Scan.from_orm(scan)
31-
job = schemas.Job.from_orm(job)
30+
scan = schemas.Scan.model_validate(scan)
31+
job = schemas.Job.model_validate(job)
3232

3333
await send_submit_job_event_to_kafka(SubmitJobEvent(scan=scan, job=job))
3434

backend/app/app/api/api_v1/endpoints/scans.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ async def create_scan_from_file(
8686
status_code=status.HTTP_409_CONFLICT, detail="Scan in SHA already exists"
8787
)
8888

89-
scan_from_file = schemas.ScanFromFile(sha=sha, **meta.dict())
89+
scan_from_file = schemas.ScanFromFile(sha=sha, **meta.model_dump())
9090

9191
scan = crud.create_scan(db=db, scan=scan_from_file)
9292
ext = Path(file_upload.filename).suffix
@@ -138,7 +138,7 @@ async def create_scan(
138138
try:
139139
content_type = request.headers["content-type"]
140140
if content_type == "application/json":
141-
scan = schemas.Scan4DCreate.parse_obj(await request.json())
141+
scan = schemas.Scan4DCreate.model_validate(await request.json())
142142
scan = await create_4d_scan(db, scan)
143143
elif content_type.startswith("multipart/form-data"):
144144
form_data = await request.form()
@@ -156,7 +156,7 @@ async def create_scan(
156156
detail="Invalid request, scan metadata is required",
157157
)
158158

159-
scan_metadata = schemas.ScanFromFileMetadata.parse_raw(scan_metadata_str)
159+
scan_metadata = schemas.ScanFromFileMetadata.model_validate_json(scan_metadata_str)
160160

161161
# See if we have an associated ser file
162162
file_stem = Path(file.filename).stem.replace("%20", "\\ ")
@@ -175,7 +175,7 @@ async def create_scan(
175175
)
176176

177177
await send_scan_event_to_kafka(
178-
ScanCreatedEvent(**schemas.Scan.from_orm(scan).dict())
178+
ScanCreatedEvent(**schemas.Scan.model_validate(scan).model_dump())
179179
)
180180

181181
return scan
@@ -293,7 +293,7 @@ async def update_scan(
293293
scan_updated_event.progress = cast(int, scan.progress)
294294

295295
scan_updated_event.locations = [
296-
schemas.scan.Location.from_orm(l) for l in scan.locations
296+
schemas.scan.Location.model_validate(l) for l in scan.locations
297297
]
298298

299299
if scan.notes is not None and scan.notes == payload.notes:
@@ -319,7 +319,7 @@ async def _remove_scan_files(db_scan: Scan, host: Optional[str] = None):
319319
status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid request"
320320
)
321321

322-
scan = schemas.Scan.from_orm(db_scan)
322+
scan = schemas.Scan.model_validate(db_scan)
323323
await send_remove_scan_files_event_to_kafka(
324324
RemoveScanFilesEvent(scan=scan, host=host)
325325
)

backend/app/app/core/config.py

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import secrets
22
from typing import Any, Dict, List, Literal, Optional, Union
33

4-
from pydantic import AnyHttpUrl, BaseSettings, PostgresDsn, validator
5-
64
from app.schemas import Machine
5+
from pydantic import AnyHttpUrl, PostgresDsn, field_validator, ValidationInfo
6+
from pydantic_settings import BaseSettings, SettingsConfigDict
77

88

99
class Settings(BaseSettings):
@@ -18,7 +18,8 @@ class Settings(BaseSettings):
1818
# "http://localhost:8080", "http://local.dockertoolbox.tiangolo.com"]'
1919
BACKEND_CORS_ORIGINS: List[Union[AnyHttpUrl, Literal["*"]]] = []
2020

21-
@validator("BACKEND_CORS_ORIGINS", pre=True)
21+
@field_validator("BACKEND_CORS_ORIGINS", mode="before")
22+
@classmethod
2223
def assemble_cors_origins(cls, v: Union[str, List[str]]) -> Union[List[str], str]:
2324
if isinstance(v, str) and not v.startswith("["):
2425
return [i.strip() for i in v.split(",")]
@@ -32,19 +33,20 @@ def assemble_cors_origins(cls, v: Union[str, List[str]]) -> Union[List[str], str
3233
POSTGRES_USER: str
3334
POSTGRES_PASSWORD: str
3435
POSTGRES_DB: str
35-
SQLALCHEMY_DATABASE_URI: Optional[PostgresDsn] = None
36+
SQLALCHEMY_DATABASE_URI: Optional[str] = None
3637

37-
@validator("SQLALCHEMY_DATABASE_URI", pre=True)
38-
def assemble_db_connection(cls, v: Optional[str], values: Dict[str, Any]) -> Any:
38+
@field_validator("SQLALCHEMY_DATABASE_URI", mode="before")
39+
def assemble_db_connection(cls, v: Optional[str], info: ValidationInfo) -> Any:
3940
if isinstance(v, str):
4041
return v
41-
return PostgresDsn.build(
42+
postgres_build = PostgresDsn.build(
4243
scheme="postgresql",
43-
user=values.get("POSTGRES_USER"),
44-
password=values.get("POSTGRES_PASSWORD"),
45-
host=values.get("POSTGRES_SERVER"),
46-
path=f"/{values.get('POSTGRES_DB') or ''}",
44+
username=info.data.get("POSTGRES_USER"),
45+
password=info.data.get("POSTGRES_PASSWORD"),
46+
host=info.data.get("POSTGRES_SERVER"),
47+
path=f"{info.data.get('POSTGRES_DB') or ''}",
4748
)
49+
return postgres_build.unicode_string()
4850

4951
API_KEY_NAME: str
5052
API_KEY: str
@@ -53,7 +55,7 @@ def assemble_db_connection(cls, v: Optional[str], values: Dict[str, Any]) -> Any
5355
JWT_ALGORITHM: str
5456
JWT_ACCESS_TOKEN_EXPIRE_MINUTES: int
5557
JWT_REFRESH_TOKEN_EXPIRE_MINUTES: int
56-
JWT_REFRESH_COOKIE_DOMAIN: str = None
58+
JWT_REFRESH_COOKIE_DOMAIN: Optional[str] = None
5759
JWT_REFRESH_COOKIE_SECURE: bool = False
5860

5961
KAFKA_BOOTSTRAP_SERVERS: List[str]
@@ -67,15 +69,12 @@ def assemble_db_connection(cls, v: Optional[str], values: Dict[str, Any]) -> Any
6769
# have been reset in in the detector software.
6870
HAADF_SCAN_AGE_LIMIT: int = 1
6971

70-
SENTRY_DSN_URL: AnyHttpUrl = None
72+
SENTRY_DSN_URL: Optional[AnyHttpUrl] = None
7173

7274
MACHINES: List[Machine]
7375
NCEMHUB_PATH: str
7476
NOTEBOOKS: List[str] = ["DPC", "vacuum_scan_prepare", "vacuum_scan_subtract"]
75-
76-
class Config:
77-
case_sensitive = True
78-
env_file = ".env"
77+
model_config = SettingsConfigDict(case_sensitive=True, env_file=".env", extra="allow")
7978

8079

8180
settings = Settings()

backend/app/app/crud/job.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def get_jobs(
3232

3333

3434
def create_job(db: Session, job: schemas.JobCreate):
35-
db_job = models.Job(**job.dict())
35+
db_job = models.Job(**job.model_dump())
3636
db.add(db_job)
3737
db.commit()
3838
db.refresh(db_job)

backend/app/app/crud/scan.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,10 @@ def create_scan(
147147
scan.microscope_id = microscope_ids[0]
148148

149149
# Note: We have to pass metadata as metadata_ as metadata is reserved!
150-
db_scan = models.Scan(**scan.dict(), image_path=image_path, metadata_=scan.metadata)
150+
db_scan = models.Scan(**scan.model_dump(), image_path=image_path, metadata_=scan.metadata)
151151
db.add(db_scan)
152152
for l in locations:
153-
l = models.Location(**l.dict())
153+
l = models.Location(**l.model_dump())
154154
db_scan.locations.append(l)
155155
db.add(l)
156156
db.commit()
@@ -192,7 +192,7 @@ def update_scan(
192192
is not None
193193
)
194194
if not exists:
195-
l = models.Location(**l.dict(), scan_id=id)
195+
l = models.Location(**l.model_dump(), scan_id=id)
196196
db.add(l)
197197
locations_updated = True
198198

backend/app/app/schemas/scan.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ class ScanCreatedEvent(ScanEvent):
117117
microscope_id: int
118118
scan_id: Optional[int] = None
119119
created: datetime
120-
event_type = ScanEventType.CREATED
120+
event_type: ScanEventType = ScanEventType.CREATED
121121
image_path: Optional[str] = None
122122

123123

124124
class ScanUpdateEvent(ScanEvent):
125-
event_type = ScanEventType.UPDATED
125+
event_type: ScanEventType = ScanEventType.UPDATED
126126
jobs: Optional[List[Job]] = None
127127
image_path: Optional[str] = None
128128
notes: Optional[str] = None

backend/faust/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class Settings(BaseSettings):
2424
JOB_QOS: str
2525
JOB_QOS_FILTER: str
2626
JOB_BBCP_EXECUTABLE_PATH: str
27-
JOB_MACHINE_OVERRIDES_PATH: Optional[str]
27+
JOB_MACHINE_OVERRIDES_PATH: Optional[str] = None
2828

2929
IMAGE_UPLOAD_DIR: str
3030
HAADF_IMAGE_UPLOAD_DIR_EXPIRATION_HOURS: int
@@ -40,7 +40,7 @@ class Settings(BaseSettings):
4040
CUSTODIAN_USER: str
4141
CUSTODIAN_PRIVATE_KEY: str
4242
CUSTODIAN_VALID_HOSTS: List[str] = []
43-
model_config = SettingsConfigDict(case_sensitive=True, env_file=".env")
43+
model_config = SettingsConfigDict(case_sensitive=True, env_file=".env", extra="allow")
4444

4545

4646
settings = Settings()

backend/faust/scan_worker.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ async def process_status_file(
164164
if event.content is None:
165165
raise Exception("Status file not included!")
166166

167-
status_file = ScanStatusFile.parse_raw(event.content)
167+
status_file = ScanStatusFile.model_validate_json(event.content)
168168
scan_id = status_file.last_scan_number
169169
new_scan = scan_id not in scan_id_to_distiller_id
170170
primary_status_file = (
@@ -337,7 +337,7 @@ async def watch_for_event(file_events):
337337
raise Exception("Status file not included!")
338338

339339
try:
340-
status_file = ScanStatusFile.parse_raw(event.content)
340+
status_file = ScanStatusFile.model_validate_json(event.content)
341341
except ValidationError:
342342
logger.warning(f"Skipping {path}, with validation error.")
343343
continue
@@ -373,7 +373,7 @@ async def process_sync_event(session: aiohttp.ClientSession, event: SyncEvent) -
373373
)
374374

375375
try:
376-
status = ScanStatusFile.parse_raw(f.content)
376+
status = ScanStatusFile.model_validate_json(f.content)
377377
except ValidationError:
378378
logger.warning(f"Skipping {path}, with validation error.")
379379
continue

0 commit comments

Comments
 (0)