Skip to content

onconova.oncology.controllers.tumor_board

AnyPayloadSchemas module-attribute

AnyResponseSchemas module-attribute

PAYLOAD_SCHEMAS module-attribute

RESPONSE_SCHEMAS module-attribute

MolecularTherapeuticRecommendationController

Bases: ControllerBase

create_molecular_tumor_board_therapeutic_recommendation(tumorBoardId, payload)

Source code in onconova/oncology/controllers/tumor_board.py
@route.post(
    path="/{tumorBoardId}/therapeutic-recommendations",
    response={201: ModifiedResourceSchema, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageCases],
    operation_id="createMolecularTherapeuticRecommendation",
)
def create_molecular_tumor_board_therapeutic_recommendation(self, tumorBoardId: str, payload: scm.MolecularTherapeuticRecommendationCreate):  # type: ignore
    instance = orm.MolecularTherapeuticRecommendation(
        molecular_tumor_board=get_object_or_404(
            orm.MolecularTumorBoard, id=tumorBoardId
        )
    )
    return 201, payload.model_dump_django(instance=instance, create=True)

delete_molecular_tumor_board_therapeutic_recommendation(tumorBoardId, recommendationId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.delete(
    path="/{tumorBoardId}/therapeutic-recommendations/{recommendationId}",
    response={204: None, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageCases],
    operation_id="deleteMolecularTherapeuticRecommendation",
)
def delete_molecular_tumor_board_therapeutic_recommendation(
    self, tumorBoardId: str, recommendationId: str
):
    instance = get_object_or_404(
        orm.MolecularTherapeuticRecommendation,
        id=recommendationId,
        molecular_tumor_board__id=tumorBoardId,
    )
    instance.delete()
    return 204, None

get_all_molecular_tumor_board_therapeutic_history_events(tumorBoardId, recommendationId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.get(
    path="/{tumorBoardId}/therapeutic-recommendations/{recommendationId}/history/events",
    response={200: Paginated[HistoryEvent], 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanViewCases],
    operation_id="getAllMolecularTherapeuticRecommendationHistoryEvents",
)
@paginate()
@ordering()
def get_all_molecular_tumor_board_therapeutic_history_events(
    self, tumorBoardId: str, recommendationId: str
):
    instance = get_object_or_404(
        orm.MolecularTherapeuticRecommendation,
        id=recommendationId,
        molecular_tumor_board__id=tumorBoardId,
    )
    return pghistory.models.Events.objects.tracks(instance).all()  # type: ignore

get_molecular_tumor_board_therapeutic_history_event_by_id(tumorBoardId, recommendationId, eventId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.get(
    path="/{tumorBoardId}/therapeutic-recommendations/{recommendationId}/history/events/{eventId}",
    response={200: HistoryEvent, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanViewCases],
    operation_id="getMolecularTherapeuticRecommendationHistoryEventById",
)
def get_molecular_tumor_board_therapeutic_history_event_by_id(
    self, tumorBoardId: str, recommendationId: str, eventId: str
):
    instance = get_object_or_404(
        orm.MolecularTherapeuticRecommendation,
        id=recommendationId,
        molecular_tumor_board__id=tumorBoardId,
    )
    return get_object_or_404(
        pghistory.models.Events.objects.tracks(instance), pgh_id=eventId  # type: ignore
    )

get_molecular_tumor_board_therapeutic_recommendation_by_id(tumorBoardId, recommendationId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.get(
    path="/{tumorBoardId}/therapeutic-recommendations/{recommendationId}",
    response={200: scm.MolecularTherapeuticRecommendation, 404: None},
    exclude_none=True,
    permissions=[perms.CanViewCases],
    operation_id="getMOlecularTherapeuticRecommendationById",
)
def get_molecular_tumor_board_therapeutic_recommendation_by_id(
    self, tumorBoardId: str, recommendationId: str
):
    return get_object_or_404(
        orm.MolecularTherapeuticRecommendation,
        id=recommendationId,
        molecular_tumor_board__id=tumorBoardId,
    )

get_molecular_tumor_board_therapeutic_recommendations_matching_the_query(tumorBoardId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.get(
    path="/{tumorBoardId}/therapeutic-recommendations",
    response={
        200: List[scm.MolecularTherapeuticRecommendation],
        404: None,
        **COMMON_HTTP_ERRORS,
    },
    permissions=[perms.CanViewCases],
    operation_id="getMolecularTherapeuticRecommendations",
)
def get_molecular_tumor_board_therapeutic_recommendations_matching_the_query(self, tumorBoardId: str):  # type: ignore
    return get_object_or_404(
        orm.MolecularTumorBoard, id=tumorBoardId
    ).therapeutic_recommendations.all()  # type: ignore

revert_molecular_tumor_board_therapeutic_to_history_event(tumorBoardId, recommendationId, eventId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.put(
    path="/{tumorBoardId}/therapeutic-recommendations/{recommendationId}/history/events/{eventId}/reversion",
    response={201: ModifiedResourceSchema, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageCases],
    operation_id="revertMolecularTherapeuticRecommendationToHistoryEvent",
)
def revert_molecular_tumor_board_therapeutic_to_history_event(
    self, tumorBoardId: str, recommendationId: str, eventId: str
):
    instance = get_object_or_404(
        orm.MolecularTherapeuticRecommendation,
        id=recommendationId,
        molecular_tumor_board__id=tumorBoardId,
    )
    return 201, get_object_or_404(instance.events, pgh_id=eventId).revert()

update_molecular_tumor_board_therapeutic_recommendation(tumorBoardId, recommendationId, payload)

Source code in onconova/oncology/controllers/tumor_board.py
@route.put(
    path="/{tumorBoardId}/therapeutic-recommendations/{recommendationId}",
    response={200: ModifiedResourceSchema, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageCases],
    operation_id="updateMolecularTherapeuticRecommendation",
)
def update_molecular_tumor_board_therapeutic_recommendation(self, tumorBoardId: str, recommendationId: str, payload: scm.MolecularTherapeuticRecommendationCreate):  # type: ignore
    instance = get_object_or_404(
        orm.MolecularTherapeuticRecommendation,
        id=recommendationId,
        molecular_tumor_board__id=tumorBoardId,
    )
    return payload.model_dump_django(instance=instance)

TumorBoardController

Bases: ControllerBase

create_tumor_board(payload)

Source code in onconova/oncology/controllers/tumor_board.py
@route.post(
    path="",
    response={201: ModifiedResourceSchema, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageCases],
    operation_id="createTumorBoard",
)
def create_tumor_board(self, payload: AnyPayloadSchemas):  # type: ignore
    return 201, payload.model_dump_django()

delete_tumor_board(tumorBoardId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.delete(
    path="/{tumorBoardId}",
    response={204: None, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageCases],
    operation_id="deleteTumorBoardById",
)
def delete_tumor_board(self, tumorBoardId: str):
    instance = get_object_or_404(orm.TumorBoard, id=tumorBoardId)
    instance.delete()
    return 204, None

get_all_tumor_board_history_events(tumorBoardId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.get(
    path="/{tumorBoardId}/history/events",
    response={200: Paginated[HistoryEvent], 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanViewCases],
    operation_id="getAllTumorBoardHistoryEvents",
)
@paginate()
@ordering()
def get_all_tumor_board_history_events(self, tumorBoardId: str):
    instance = get_object_or_404(orm.TumorBoard, id=tumorBoardId)
    return pghistory.models.Events.objects.tracks(instance).all()  # type: ignore

get_all_tumor_boards_matching_the_query(query)

Source code in onconova/oncology/controllers/tumor_board.py
@route.get(
    path="",
    response={
        200: Paginated[AnyResponseSchemas],
        **COMMON_HTTP_ERRORS,
    },
    exclude_none=True,
    permissions=[perms.CanViewCases],
    operation_id="getTumorBoards",
)
@paginate()
@ordering()
@anonymize()
def get_all_tumor_boards_matching_the_query(self, query: Query[scm.TumorBoardFilters]):  # type: ignore
    queryset = orm.TumorBoard.objects.all().order_by("-date")
    return [
        cast_to_model_schema(tumorboard.specialized_tumor_board, RESPONSE_SCHEMAS)
        for tumorboard in query.filter(queryset)
    ]

get_tumor_board_by_id(tumorBoardId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.get(
    path="/{tumorBoardId}",
    response={200: AnyResponseSchemas, 404: None},
    exclude_none=True,
    permissions=[perms.CanViewCases],
    operation_id="getTumorBoardById",
)
@anonymize()
def get_tumor_board_by_id(self, tumorBoardId: str):
    instance = get_object_or_404(orm.TumorBoard, id=tumorBoardId)
    return cast_to_model_schema(instance.specialized_tumor_board, RESPONSE_SCHEMAS)

get_tumor_board_history_event_by_id(tumorBoardId, eventId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.get(
    path="/{tumorBoardId}/history/events/{eventId}",
    response={200: HistoryEvent, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanViewCases],
    operation_id="getTumorBoardHistoryEventById",
)
def get_tumor_board_history_event_by_id(self, tumorBoardId: str, eventId: str):
    instance = get_object_or_404(orm.TumorBoard, id=tumorBoardId)
    event = instance.parent_events.filter(pgh_id=eventId).first()  # type: ignore
    if not event and hasattr(instance, "events"):
        event = instance.events.filter(pgh_id=eventId).first()
    if not event:
        return 404, None
    return get_object_or_404(
        pghistory.models.Events.objects.tracks(instance), pgh_id=eventId  # type: ignore
    )

revert_tumor_board_to_history_event(tumorBoardId, eventId)

Source code in onconova/oncology/controllers/tumor_board.py
@route.put(
    path="/{tumorBoardId}/history/events/{eventId}/reversion",
    response={201: ModifiedResourceSchema, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageCases],
    operation_id="revertTumorBoardToHistoryEvent",
)
def revert_tumor_board_to_history_event(self, tumorBoardId: str, eventId: str):
    instance = get_object_or_404(orm.TumorBoard, id=tumorBoardId)
    instance = instance.specialized_tumor_board
    try:
        return 201, revert_multitable_model(instance, eventId)
    except ObjectDoesNotExist:
        return 404, None

update_tumor_board(tumorBoardId, payload)

Source code in onconova/oncology/controllers/tumor_board.py
@route.put(
    path="/{tumorBoardId}",
    response={200: ModifiedResourceSchema, 404: None, **COMMON_HTTP_ERRORS},
    permissions=[perms.CanManageCases],
    operation_id="updateTumorBoardById",
)
def update_tumor_board(self, tumorBoardId: str, payload: AnyPayloadSchemas):  # type: ignore
    instance = get_object_or_404(
        orm.TumorBoard, id=tumorBoardId
    ).specialized_tumor_board
    return payload.model_dump_django(instance=instance)

cast_to_model_schema(model_instance, schemas, payload=None)

Source code in onconova/oncology/controllers/tumor_board.py
def cast_to_model_schema(model_instance, schemas, payload=None):
    return next(
        (
            schema.model_validate(payload or model_instance)
            for schema in schemas
            if (payload or model_instance).tumor_board_specialty
            == schema.model_fields["category"].default
        )
    )
runner