Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/seis_lab_data/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ class SeisLabDataIconSettings(BaseModel):
expand_less: str = "expand_less"
expand_more: str = "expand_more"
status_draft: str = "design_services"
status_other: str = "question_mark"
status_published: str = "public"
status_under_validation: str = "sync"
survey_missions: str = "directions_boat"
Expand Down
1 change: 1 addition & 0 deletions src/seis_lab_data/dispatch.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ async def __call__(self, event: events.SeisLabDataEvent) -> None:
await self._redis.publish(
channel=event.resource_type.get_topic_name(),
message=messages.ResourceStatusChangedMessage(
request_id=event.request_id,
resource_type=event.resource_type,
resource_id=event.resource_id,
succeeded=event.succeeded,
Expand Down
30 changes: 19 additions & 11 deletions src/seis_lab_data/operations/projects.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import asyncio
import logging

import pydantic
Expand Down Expand Up @@ -94,6 +93,7 @@ async def change_project_status(
await event_dispatcher(
event_schemas.ResourceStatusChangedEvent(
initiator=initiator.id,
request_id=request_id,
resource_type=constants.ResourceType.PROJECT,
resource_id=str(project_id),
succeeded=False,
Expand All @@ -105,6 +105,7 @@ async def change_project_status(
await event_dispatcher(
event_schemas.ResourceStatusChangedEvent(
initiator=initiator.id,
request_id=request_id,
resource_type=constants.ResourceType.PROJECT,
resource_id=str(project_id),
succeeded=True,
Expand All @@ -115,6 +116,7 @@ async def change_project_status(


async def validate_project(
*,
request_id: identifiers.RequestId,
project_id: identifiers.ProjectId,
initiator: user_schemas.User,
Expand Down Expand Up @@ -153,8 +155,7 @@ async def validate_project(
session=session,
event_dispatcher=event_dispatcher,
)
await asyncio.sleep(3)
validation_schemas.ValidProject.model_validate(project)
validation_schemas.ValidProject.model_validate(project, from_attributes=True)
except pydantic.ValidationError as err:
for error in err.errors():
validation_errors.append(
Expand All @@ -177,6 +178,14 @@ async def validate_project(
session, project, validation_result={"is_valid": True, "errors": None}
)
finally:
await change_project_status(
request_id=request_id,
target_status=constants.ProjectStatus.DRAFT,
project_id=project_id,
initiator=initiator,
session=session,
event_dispatcher=event_dispatcher,
)
await event_dispatcher(
event_schemas.ValidationEvent(
initiator=initiator.id,
Expand All @@ -189,14 +198,6 @@ async def validate_project(
details=str(validation_errors),
)
)
await change_project_status(
request_id=request_id,
target_status=constants.ProjectStatus.DRAFT,
project_id=project_id,
initiator=initiator,
session=session,
event_dispatcher=event_dispatcher,
)
return project


Expand Down Expand Up @@ -236,6 +237,13 @@ async def update_project(
)
return None

await validate_project(
request_id=request_id,
project_id=project_id,
initiator=initiator,
session=session,
event_dispatcher=event_dispatcher,
)
await event_dispatcher(
event_schemas.ResourceModificationEvent(
initiator=initiator.id,
Expand Down
16 changes: 13 additions & 3 deletions src/seis_lab_data/operations/surveymissions.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import asyncio
import logging

import pydantic
Expand Down Expand Up @@ -120,6 +119,7 @@ async def change_survey_mission_status(
except errors.SeisLabDataError as err:
await event_dispatcher(
event_schemas.ResourceStatusChangedEvent(
request_id=request_id,
initiator=initiator.id,
resource_type=constants.ResourceType.MISSION,
resource_id=str(survey_mission_id),
Expand All @@ -131,6 +131,7 @@ async def change_survey_mission_status(
return None
await event_dispatcher(
event_schemas.ResourceStatusChangedEvent(
request_id=request_id,
initiator=initiator.id,
resource_type=constants.ResourceType.MISSION,
resource_id=str(survey_mission_id),
Expand All @@ -142,6 +143,7 @@ async def change_survey_mission_status(


async def validate_survey_mission(
*,
request_id: identifiers.RequestId,
survey_mission_id: identifiers.SurveyMissionId,
initiator: user_schemas.User,
Expand Down Expand Up @@ -188,8 +190,9 @@ async def validate_survey_mission(
session=session,
event_dispatcher=event_dispatcher,
)
await asyncio.sleep(3)
validation_schemas.ValidSurveyMission.model_validate(survey_mission)
validation_schemas.ValidSurveyMission.model_validate(
survey_mission, from_attributes=True
)
except pydantic.ValidationError as err:
for error in err.errors():
validation_errors.append(
Expand Down Expand Up @@ -284,6 +287,13 @@ async def update_survey_mission(
)
return None

await validate_survey_mission(
request_id=request_id,
survey_mission_id=survey_mission_id,
initiator=initiator,
session=session,
event_dispatcher=event_dispatcher,
)
await event_dispatcher(
event_schemas.ResourceModificationEvent(
resource_type=constants.ResourceType.MISSION,
Expand Down
13 changes: 10 additions & 3 deletions src/seis_lab_data/operations/surveyrelatedrecords.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import asyncio
import logging

import pydantic
Expand Down Expand Up @@ -149,6 +148,7 @@ async def change_survey_related_record_status(
return None
await event_dispatcher(
event_schemas.ResourceStatusChangedEvent(
request_id=request_id,
initiator=initiator.id,
resource_type=constants.ResourceType.RECORD,
resource_id=str(survey_related_record_id),
Expand All @@ -160,6 +160,7 @@ async def change_survey_related_record_status(


async def validate_survey_related_record(
*,
request_id: identifiers.RequestId,
survey_related_record_id: identifiers.SurveyRelatedRecordId,
initiator: user_schemas.User,
Expand Down Expand Up @@ -206,9 +207,8 @@ async def validate_survey_related_record(
session=session,
event_dispatcher=event_dispatcher,
)
await asyncio.sleep(3)
validation_schemas.ValidSurveyRelatedRecord.model_validate(
survey_related_record
survey_related_record, from_attributes=True
)
except pydantic.ValidationError as err:
for error in err.errors():
Expand Down Expand Up @@ -437,6 +437,13 @@ async def update_survey_related_record(
updated_survey_related_record = await record_commands.update_survey_related_record(
session, survey_related_record, to_update
)
await validate_survey_related_record(
request_id=request_id,
survey_related_record_id=survey_related_record_id,
initiator=initiator,
session=session,
event_dispatcher=event_dispatcher,
)
await event_dispatcher(
event_schemas.ResourceModificationEvent(
initiator=initiator.id,
Expand Down
1 change: 1 addition & 0 deletions src/seis_lab_data/schemas/events.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class BulkResourceModificationEvent(_EventBase):

@dataclasses.dataclass(frozen=True, kw_only=True)
class ResourceStatusChangedEvent(_EventBase):
request_id: identifiers.RequestId
resource_type: constants.ResourceType
resource_id: str | None
succeeded: bool
Expand Down
1 change: 1 addition & 0 deletions src/seis_lab_data/schemas/messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class BulkResourceModificationMessage(pydantic.BaseModel):

class ResourceStatusChangedMessage(pydantic.BaseModel):
type: Literal["resource_status_changed"] = "resource_status_changed"
request_id: identifiers.RequestId
resource_type: constants.ResourceType
resource_id: str | None
succeeded: bool
Expand Down
5 changes: 2 additions & 3 deletions src/seis_lab_data/schemas/validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ class ValidSurveyMission(pydantic.BaseModel):
status: constants.SurveyMissionStatus
temporal_extent_begin: dt.date | None
temporal_extent_end: dt.date | None
owner: identifiers.UserId
owner_id: identifiers.UserId
relative_path: Annotated[str, pydantic.PlainValidator(ensure_relative_path_exists)]
links: list[ValidLinkSchema] = []
bbox_4326: Annotated[
Expand All @@ -138,8 +138,7 @@ class ValidSurveyRelatedRecord(pydantic.BaseModel):
status: constants.SurveyMissionStatus
temporal_extent_begin: dt.date | None
temporal_extent_end: dt.date | None
owner: identifiers.UserId
relative_path: Annotated[str, pydantic.PlainValidator(ensure_relative_path_exists)]
owner_id: identifiers.UserId
links: list[ValidLinkSchema] = []
bbox_4326: Annotated[
shapely.Polygon,
Expand Down
19 changes: 0 additions & 19 deletions src/seis_lab_data/tasks/projects.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,22 +75,3 @@ async def delete_project(
session=session,
event_dispatcher=settings.get_event_dispatcher(),
)


@dramatiq.actor
@decorators.sld_settings
async def validate_project(
raw_request_id: str,
raw_project_id: str,
raw_initiator: str,
*,
settings: config.SeisLabDataSettings,
):
async with settings.get_db_session_maker()() as session:
await project_ops.validate_project(
request_id=identifiers.RequestId(uuid.UUID(raw_request_id)),
project_id=identifiers.ProjectId(uuid.UUID(raw_project_id)),
initiator=user_schemas.User(**json.loads(raw_initiator)),
session=session,
event_dispatcher=settings.get_event_dispatcher(),
)
21 changes: 0 additions & 21 deletions src/seis_lab_data/tasks/surveymissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,24 +83,3 @@ async def delete_survey_mission(
session=session,
event_dispatcher=settings.get_event_dispatcher(),
)


@dramatiq.actor
@decorators.sld_settings
async def validate_survey_mission(
raw_request_id: str,
raw_survey_mission_id: str,
raw_initiator: str,
*,
settings: config.SeisLabDataSettings,
):
async with settings.get_db_session_maker()() as session:
await survey_mission_ops.validate_survey_mission(
request_id=identifiers.RequestId(uuid.UUID(raw_request_id)),
survey_mission_id=identifiers.SurveyMissionId(
uuid.UUID(raw_survey_mission_id)
),
initiator=user_schemas.User(**json.loads(raw_initiator)),
session=session,
event_dispatcher=settings.get_event_dispatcher(),
)
21 changes: 0 additions & 21 deletions src/seis_lab_data/tasks/surveyrelatedrecords.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,24 +119,3 @@ async def bulk_update_survey_related_records(
temporal_extent=selection.temporal_extent,
asset_path_fragment_filter=selection.asset_path_fragment_filter,
)


@dramatiq.actor
@decorators.sld_settings
async def validate_survey_related_record(
raw_request_id: str,
raw_survey_related_record_id: str,
raw_initiator: str,
*,
settings: config.SeisLabDataSettings,
):
async with settings.get_db_session_maker()() as session:
await record_ops.validate_survey_related_record(
request_id=identifiers.RequestId(uuid.UUID(raw_request_id)),
survey_related_record_id=identifiers.SurveyRelatedRecordId(
uuid.UUID(raw_survey_related_record_id)
),
initiator=user_schemas.User(**json.loads(raw_initiator)),
session=session,
event_dispatcher=settings.get_event_dispatcher(),
)
2 changes: 1 addition & 1 deletion src/seis_lab_data/webapp/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ async def lifespan(app: Starlette) -> AsyncIterator[State]:
)
jinja_env.filters["secondary_language"] = jinjafilters.get_secondary_language_value
jinja_env.filters["translate_enum"] = jinjafilters.translate_enum
jinja_env.filters["get_status_icon_name"] = jinjafilters.get_status_icon_name
jinja_env.filters["status_icon"] = jinjafilters.get_status_icon_name
jinja_env.filters["highlight_json"] = jinjafilters.highlight_json
jinja_env.filters["asset_url"] = jinjafilters.get_url_for_asset
configure_jinja_env(jinja_env)
Expand Down
Loading
Loading