Source code for ambra_sdk.storage.image.image

"""Storage image namespace."""

from typing import Optional, Union

from box import Box
from requests import Response

from ambra_sdk.storage.image.base_image import BaseImage
from ambra_sdk.storage.request import PreparedRequest
from ambra_sdk.types import RequestsFileType


[docs]class Image(BaseImage): """Storage Image commands."""
[docs] def upload( self, engine_fqdn: str, namespace: str, opened_file: RequestsFileType, study_uid: Optional[str] = None, use_box: bool = True, x_ambrahealth_job_id: Optional[str] = None, only_prepare: bool = False, ) -> Union[Box, Response, PreparedRequest]: """Upload image to a namespace. URL: /namespace/{namespace}/image?sid={sid} :param engine_fqdn: Engine FQDN (Required). :param namespace: Namespace (Required). :param opened_file: Opened file (like in requests) (Required). File object, or may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype) or 4-tuples (filename, fileobj, contentype, custom_headers). :param study_uid: study uid :param use_box: Use box for response. :param x_ambrahealth_job_id: X-AmbraHealth-Job-Id headers argument :param only_prepare: Get prepared request. :returns: image object attributes """ prepared_request = self._upload( engine_fqdn=engine_fqdn, namespace=namespace, opened_file=opened_file, study_uid=study_uid, x_ambrahealth_job_id=x_ambrahealth_job_id, ) if only_prepare is True: return prepared_request response = prepared_request.execute() if use_box is True: return Box(response.json()) return response
[docs] def wrap( self, engine_fqdn: str, namespace: str, opened_file: RequestsFileType, tags: Optional[str] = None, render_wrapped_pdf: Optional[bool] = None, x_ambrahealth_job_id: Optional[str] = None, only_prepare: bool = False, ) -> Union[Response, PreparedRequest]: """Upload a non DICOM image. URL: /namespace/{namespace}/wrap?sid={sid}&render_wrapped_pdf={0,1} :param engine_fqdn: Engine FQDN (Required). :param namespace: Namespace (Required). :param tags: Any DICOM tags to be overwrite or added should be provided as a form-data field. :param opened_file: The multipart file to be uploaded should be provided as a form-data field. File object, or may be 2-tuples (filename, fileobj), 3-tuples (filename, fileobj, contentype) or 4-tuples (filename, fileobj, contentype, custom_headers). :param render_wrapped_pdf: An integer value of either 0 or 1. :param x_ambrahealth_job_id: X-AmbraHealth-Job-Id headers argument :param only_prepare: Get prepared request. :returns: image object attributes """ prepared_request = self._wrap( engine_fqdn=engine_fqdn, namespace=namespace, opened_file=opened_file, tags=tags, render_wrapped_pdf=render_wrapped_pdf, x_ambrahealth_job_id=x_ambrahealth_job_id, ) if only_prepare is True: return prepared_request return prepared_request.execute()
[docs] def cadsr( self, engine_fqdn: str, namespace: str, study_uid: str, image_uid: str, image_version: str, phi_namespace: Optional[str] = None, only_prepare: bool = False, ) -> Union[Response, PreparedRequest]: """Gets graphical annotations according to vendor definitions for CAD SR object. URL: /study/{namespace}/{studyUid}/image/{imageUid}/version/{imageVersion}/cadsr?sid={sid} :param engine_fqdn: Engine FQDN (Required). :param namespace: Namespace (Required). :param study_uid: Study uid (Required). :param image_uid: Image uid (Required). :param image_version: image version (Required). :param phi_namespace: A string, set to the UUID of the namespace where the file was attached if it was attached to a shared instance of the study outside of the original storage namespace :param only_prepare: Get prepared request. :returns: the vendor-specified graphical \ annotations, empty if not implemented for the vendor or generating device. """ prepared_request = self._cadsr( engine_fqdn=engine_fqdn, namespace=namespace, study_uid=study_uid, image_uid=image_uid, image_version=image_version, phi_namespace=phi_namespace, ) if only_prepare is True: return prepared_request return prepared_request.execute()
[docs] def dicom_payload( self, engine_fqdn: str, namespace: str, study_uid: str, image_uid: str, # In external api this is a hash parameter image_version: str, phi_namespace: Optional[str] = None, pretranscode: Optional[bool] = None, transfer_syntax: Optional[str] = None, only_prepare: bool = False, ) -> Union[Response, PreparedRequest]: """Gets dicom payload. URL: {namespace}/{studyUid}/image/{imageUid}/version/{hash} :param engine_fqdn: Engine FQDN (Required). :param namespace: Namespace (Required). :param study_uid: Study uid (Required). :param image_uid: Image uid (Required). :param image_version: image version (Required). :param phi_namespace: A string, set to the UUID If set, specifies the phi namespace from which to pull PHI. Will overlay the values onto the phiSource. :param pretranscode: Get pretranscoded dicom. :param transfer_syntax: Transfer syntax. :param only_prepare: Get prepared request. :returns: dicom. """ prepared_request = self._dicom_payload( engine_fqdn=engine_fqdn, namespace=namespace, study_uid=study_uid, image_uid=image_uid, image_version=image_version, phi_namespace=phi_namespace, pretranscode=pretranscode, transfer_syntax=transfer_syntax, ) if only_prepare is True: return prepared_request return prepared_request.execute()
[docs] def multipart_initiate( self, engine_fqdn: str, use_box: bool = True, only_prepare: bool = False, ) -> Union[Box, Response, PreparedRequest]: """Initiate the multipart upload. URL: /multipart/initiate?sid={sid} :param engine_fqdn: Engine FQDN (Required). :param use_box: Use box for response. :param only_prepare: Get prepared request. :returns: uuid of multipart upload """ prepared_request = self._multipart_initiate( engine_fqdn=engine_fqdn, ) if only_prepare is True: return prepared_request response = prepared_request.execute() if use_box is True: return Box(response.json()) return response
[docs] def multipart_chunk_upload( self, engine_fqdn: str, upload_uuid: str, bytes_part: bytes, chunk_number: int, only_prepare: bool = False, ) -> Union[Response, PreparedRequest]: """Upload a part of image. URL: multipart/{upload_uuid} :param engine_fqdn: Engine FQDN (Required). :param upload_uuid: UUID of the initiated multipart upload (Required). :param bytes_part: part of image (Required). :param chunk_number: sequence number, first part has number 0 (Required). :param only_prepare: Get prepared request. :returns: status code """ prepared_request = self._multipart_chunk_upload( engine_fqdn=engine_fqdn, upload_uuid=upload_uuid, bytes_part=bytes_part, chunk_number=chunk_number, ) if only_prepare is True: return prepared_request return prepared_request.execute()
[docs] def multipart_complete( self, engine_fqdn: str, namespace: str, upload_uuid: str, file_size: int, endpoint: str = 'image', tags='', study_uid: Optional[str] = None, render_wrapped_pdf='', only_prepare: bool = False, ) -> Union[Box, Response, PreparedRequest]: """Finish the multipart upload process. URL: multipart/{upload_uuid}/complete :param engine_fqdn: Engine FQDN (Required). :param namespace: Namespace (Required). :param upload_uuid: UUID of the initiated multipart upload (Required). :param file_size: size of whole file (Required). :param endpoint: the endpoint to which the reconstructed file needs to be submitted. Only the image and wrap endpoint are supported at the moment. :param tags: the tags to be used to submit reconstructed file. :param study_uid: study uid. :param render_wrapped_pdf: if the file to be submitted should be treated as wrapped pdf. :param only_prepare: Get prepared request. :returns: status code """ prepared_request = self._multipart_complete( engine_fqdn=engine_fqdn, namespace=namespace, upload_uuid=upload_uuid, file_size=file_size, endpoint=endpoint, tags=tags, study_uid=study_uid, render_wrapped_pdf=render_wrapped_pdf, ) if only_prepare is True: return prepared_request return prepared_request.execute()