Source code for ambra_sdk.service.entrypoints.generated.link

""" Link.

Do not edit this file by hand.
This is generated by parsing api.html service doc.
"""
from ambra_sdk.exceptions.service import AccountNotSet
from ambra_sdk.exceptions.service import AccountUserNotFound
from ambra_sdk.exceptions.service import ChargeFailed
from ambra_sdk.exceptions.service import ChargeRequired
from ambra_sdk.exceptions.service import DecryptFailed
from ambra_sdk.exceptions.service import Disabled
from ambra_sdk.exceptions.service import Expired
from ambra_sdk.exceptions.service import FilterNotFound
from ambra_sdk.exceptions.service import InvalidAction
from ambra_sdk.exceptions.service import InvalidCharge
from ambra_sdk.exceptions.service import InvalidCondition
from ambra_sdk.exceptions.service import InvalidCredentials
from ambra_sdk.exceptions.service import InvalidEmail
from ambra_sdk.exceptions.service import InvalidField
from ambra_sdk.exceptions.service import InvalidFieldName
from ambra_sdk.exceptions.service import InvalidJson
from ambra_sdk.exceptions.service import InvalidPhiField
from ambra_sdk.exceptions.service import InvalidPhone
from ambra_sdk.exceptions.service import InvalidPin
from ambra_sdk.exceptions.service import InvalidRegexp
from ambra_sdk.exceptions.service import InvalidSortField
from ambra_sdk.exceptions.service import InvalidSortOrder
from ambra_sdk.exceptions.service import InvalidSource
from ambra_sdk.exceptions.service import InvalidUploadMatch
from ambra_sdk.exceptions.service import IpBlocked
from ambra_sdk.exceptions.service import LinkNotFound
from ambra_sdk.exceptions.service import MissingFields
from ambra_sdk.exceptions.service import MissingInfo
from ambra_sdk.exceptions.service import MissingParameters
from ambra_sdk.exceptions.service import NoFilter
from ambra_sdk.exceptions.service import NotFound
from ambra_sdk.exceptions.service import NotHash
from ambra_sdk.exceptions.service import NotList
from ambra_sdk.exceptions.service import NotPermitted
from ambra_sdk.exceptions.service import OnlyOne
from ambra_sdk.exceptions.service import PinLockout
from ambra_sdk.exceptions.service import Validate
from ambra_sdk.exceptions.service import ValidationFailed
from ambra_sdk.service.query import QueryO
from ambra_sdk.service.query import AsyncQueryO
from ambra_sdk.service.query import QueryOPSF
from ambra_sdk.service.query import AsyncQueryOPSF

class Link:
    """Link."""

    def __init__(self, api):
        self._api = api

    
[docs] def list( self, account_id=None, study_id=None, user_id=None, ): """List. :param account_id: account_id :param study_id: study_id :param user_id: user_id """ request_data = { 'account_id': account_id, 'study_id': study_id, 'user_id': user_id, } errors_mapping = {} errors_mapping[('FILTER_NOT_FOUND', None)] = FilterNotFound('The filter can not be found. The error_subtype will hold the filter UUID') errors_mapping[('INVALID_CONDITION', None)] = InvalidCondition('The condition is not support. The error_subtype will hold the filter expression this applies to') errors_mapping[('INVALID_FIELD', None)] = InvalidField('The field is not valid for this object. The error_subtype will hold the filter expression this applies to') errors_mapping[('INVALID_SORT_FIELD', None)] = InvalidSortField('The field is not valid for this object. The error_subtype will hold the field name this applies to') errors_mapping[('INVALID_SORT_ORDER', None)] = InvalidSortOrder('The sort order for the field is invalid. The error_subtype will hold the field name this applies to') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The account can not be found') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to view this list') query_data = { 'api': self._api, 'url': '/link/list', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } query_data['paginated_field'] = 'links' return QueryOPSF(**query_data)
[docs] def add( self, action, prompt_for_anonymize, acceptance_required=None, account_id=None, anonymize=None, charge_amount=None, charge_currency=None, charge_description=None, email=None, filter=None, include_priors=None, inherit_permissions=None, max_hits=None, meeting_id=None, message=None, mfm_page=None, minutes_alive=None, mobile_phone=None, namespace_id=None, notify=None, parameters=None, password=None, password_is_dob=None, password_max_attempts=None, pin_auth=None, referer=None, share_code=None, share_on_view=None, skip_email_prompt=None, study_id=None, ui_json=None, upload_match=None, upload_study_customfields=None, use_share_code=None, user_id=None, workflow=None, ): """Add. :param action: Link action (STUDY_LIST|STUDY_VIEW|STUDY_UPLOAD) :param prompt_for_anonymize: Flag to prompt if the anonymization rules should be applied on ingress :param acceptance_required: Flag that acceptance of TOS is required (optional) :param account_id: account_id :param anonymize: Anonymization rules to the applied to any STUDY_UPLOAD done with this link. Rules are formatted as per the rules parameter in /namespace/anonymize (optional) :param charge_amount: Amount to charge in pennies before the link can be accessed (optional) :param charge_currency: Charge currency (optional) :param charge_description: Charge description (optional) :param email: Email the link to these addresses (optional) :param filter: filter :param include_priors: Include prior studies (optional) :param inherit_permissions: Flag for the link sessions to inherit permissions from the user stored in the user_id link attribute (optional) :param max_hits: The maximum number of times the link can be used (optional) :param meeting_id: UUID of the meeting to associate the link with (optional) :param message: Message to include in the email (optional) :param mfm_page: Flag to launch the MFM page instead of the viewer (optional) :param minutes_alive: The maximum number of minutes the link will be alive for (optional) :param mobile_phone: Send the link to this phone number (optional) :param namespace_id: namespace_id :param notify: Comma or space separated list of additional emails to notify of link usage (optional) :param parameters: JSON array of parameters to add to the redirect URL or return in /namespace/share_code if an upload e.g. ["integration_key","abc"] Where abc is integration key. (optional) :param password: Link password (optional) :param password_is_dob: Flag that the password is the patient_birth_date for the study (study_id is required) (optional) :param password_max_attempts: The maximum number of failed password attempt (optional) :param pin_auth: An account member email and PIN authentication is required (optional) :param referer: The link can only be accessed from the specified referer. The referer can be a regexp to match multiple referers (optional) :param share_code: share code for a STUDY_UPLOAD (optional) :param share_on_view: Flag to share the study with the email after it is viewed (optional) :param skip_email_prompt: Skip the prompt for email step (optional) :param study_id: study_id :param ui_json: JSON for UI settings (optional) :param upload_match: A JSON hash of DICOM tags and regular expressions they must match uploaded against this link (optional) :param upload_study_customfields: A JSON hash of customfields that will be mapped to a study on study upload. A key is a customfield UUID, a value is a value for the field (optional) :param use_share_code: Flag to use the namespace share code settings for a STUDY_UPLOAD (optional) :param user_id: The link user. Any filter is applied in this users context (optional) :param workflow: The workflow this link is intended for (patient_studies) (optional) """ request_data = { 'acceptance_required': acceptance_required, 'account_id': account_id, 'action': action, 'anonymize': anonymize, 'charge_amount': charge_amount, 'charge_currency': charge_currency, 'charge_description': charge_description, 'email': email, 'filter': filter, 'include_priors': include_priors, 'inherit_permissions': inherit_permissions, 'max_hits': max_hits, 'meeting_id': meeting_id, 'message': message, 'mfm_page': mfm_page, 'minutes_alive': minutes_alive, 'mobile_phone': mobile_phone, 'namespace_id': namespace_id, 'notify': notify, 'parameters': parameters, 'password': password, 'password_is_dob': password_is_dob, 'password_max_attempts': password_max_attempts, 'pin_auth': pin_auth, 'prompt_for_anonymize': prompt_for_anonymize, 'referer': referer, 'share_code': share_code, 'share_on_view': share_on_view, 'skip_email_prompt': skip_email_prompt, 'study_id': study_id, 'ui_json': ui_json, 'upload_match': upload_match, 'upload_study_customfields': upload_study_customfields, 'use_share_code': use_share_code, 'user_id': user_id, 'workflow': workflow, } errors_mapping = {} errors_mapping[('INVALID_ACTION', None)] = InvalidAction('An invalid action was passed') errors_mapping[('INVALID_CHARGE', None)] = InvalidCharge('The charge is invalid. The error_subtype holds the details on the error') errors_mapping[('INVALID_EMAIL', None)] = InvalidEmail('An invalid email address was passed') errors_mapping[('INVALID_FIELD_NAME', None)] = InvalidFieldName('The field name in the rules hash is invalid. The error_subtype holds the invalid field name') errors_mapping[('INVALID_JSON', None)] = InvalidJson('The field is not in valid JSON format. The error_subtype holds the name of the field') errors_mapping[('INVALID_PHI_FIELD', None)] = InvalidPhiField('The password_is_phi field is invalid or a study_id was not passed') errors_mapping[('INVALID_PHONE', None)] = InvalidPhone('An invalid cellular phone number was passed') errors_mapping[('INVALID_REGEXP', None)] = InvalidRegexp('Invalid regular expression. The error_subtype holds the invalid regexp.') errors_mapping[('INVALID_UPLOAD_MATCH', None)] = InvalidUploadMatch('The upload_match is invalid. The error_subtype holds the details on the error') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The patient or study could not be found. The error_subtype holds the type of object not found') errors_mapping[('NOT_HASH', None)] = NotHash('The rules field is not a hash') errors_mapping[('NOT_LIST', None)] = NotList('The field is not a JSON array. The error_subtype holds the name of the field') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to create links') errors_mapping[('VALIDATE', None)] = Validate('A validation error. The error_subtype holds the details on the error') errors_mapping[('VALIDATION_FAILED', None)] = ValidationFailed('The workflow parameter validation failed') query_data = { 'api': self._api, 'url': '/link/add', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return QueryO(**query_data)
[docs] def get( self, acceptance_required, account_id, action, anonymize, charge_amount, charge_currency, charge_description, created, description, email, filter, has_password, include_priors, inherit_permissions, is_meeting, max_hits, message, mfm_page, minutes_alive, mobile_phone, namespace_id, namespace_name, notify, parameters, password_is_dob, password_max_attempts, pin_auth, prompt_for_anonymize, redirect_url, referer, share_on_view, short_id, skip_email_prompt, study_id, ui_json, upload_match, upload_study_customfields, url, use_share_code, user_id, uuid, workflow, ): """Get. :param acceptance_required: Flag that acceptance of TOS is required :param account_id: The account id :param action: Link action :param anonymize: Any anonymization rules :param charge_amount: Amount to charge in pennies before the link can be accessed :param charge_currency: Charge currency :param charge_description: Charge description :param created: Created datetime stamp of the link :param description: Description of the link :param email: Email address the link was sent to :param filter: The filter expression :param has_password: Flag if the link has a password or not :param include_priors: Include prior studies :param inherit_permissions: Flag for the link sessions to inherit permissions from the user stored in the user_id link attribute :param is_meeting: Flag if the link is for a meeting :param max_hits: The maximum number of times the link can be used :param message: Message to include in the email :param mfm_page: Flag to launch the MFM page instead of the viewer :param minutes_alive: The maximum number of minutes the link will be alive for :param mobile_phone: Cellular phone number the link was sent to :param namespace_id: Id of the namespace for upload links :param namespace_name: Name of the namespace for upload links :param notify: Comma or space separated list of additional emails to notify of link usage :param parameters: JSON array parameters to add to the redirect URL :param password_is_dob: Flag that the password is the patient_birth_date for the study :param password_max_attempts: The maximum number of failed password attempt :param pin_auth: An account member email and PIN authentication is required :param prompt_for_anonymize: Flag to prompt if the anonymization rules should be applied on ingress :param redirect_url: URL for the /link/redirect API which will take you directly to the study viewer or uploader :param referer: The link can only be accessed from the specified referer :param share_on_view: Flag to share the study with the email after it is viewed :param short_id: Short ID of the link for the 'patient_studies' workflow :param skip_email_prompt: Skip the prompt for email step :param study_id: uuid of the study :param ui_json: JSON for UI settings :param upload_match: A JSON hash of DICOM tags and regular expressions they must match uploaded against this link :param upload_study_customfields: A JSON hash of customfields that will be mapped to a study on study upload :param url: URL for the link which will take you to the UI entry point for links to enter email, password etc. :param use_share_code: Flag to use the namespace share code settings for a STUDY_UPLOAD :param user_id: The user id :param uuid: Id of the link :param workflow: The workflow this link is intended for """ request_data = { 'acceptance_required': acceptance_required, 'account_id': account_id, 'action': action, 'anonymize': anonymize, 'charge_amount': charge_amount, 'charge_currency': charge_currency, 'charge_description': charge_description, 'created': created, 'description': description, 'email': email, 'filter': filter, 'has_password': has_password, 'include_priors': include_priors, 'inherit_permissions': inherit_permissions, 'is_meeting': is_meeting, 'max_hits': max_hits, 'message': message, 'mfm_page': mfm_page, 'minutes_alive': minutes_alive, 'mobile_phone': mobile_phone, 'namespace_id': namespace_id, 'namespace_name': namespace_name, 'notify': notify, 'parameters': parameters, 'password_is_dob': password_is_dob, 'password_max_attempts': password_max_attempts, 'pin_auth': pin_auth, 'prompt_for_anonymize': prompt_for_anonymize, 'redirect_url': redirect_url, 'referer': referer, 'share_on_view': share_on_view, 'short_id': short_id, 'skip_email_prompt': skip_email_prompt, 'study_id': study_id, 'ui_json': ui_json, 'upload_match': upload_match, 'upload_study_customfields': upload_study_customfields, 'url': url, 'use_share_code': use_share_code, 'user_id': user_id, 'uuid': uuid, 'workflow': workflow, } errors_mapping = {} errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to view the link') query_data = { 'api': self._api, 'url': '/link/get', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return QueryO(**query_data)
[docs] def delete( self, uuid, ): """Delete. :param uuid: Id of the link """ request_data = { 'uuid': uuid, } errors_mapping = {} errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to delete the link') query_data = { 'api': self._api, 'url': '/link/delete', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return QueryO(**query_data)
[docs] def status( self, link_charge_id=None, pin=None, uuid=None, ): """Status. :param link_charge_id: The uuid of the prior charge against this link (optional) :param pin: pin :param uuid: uuid """ request_data = { 'link_charge_id': link_charge_id, 'pin': pin, 'uuid': uuid, } errors_mapping = {} errors_mapping[('INVALID_PIN', None)] = InvalidPin('An invalid PIN was entered') errors_mapping[('INVALID_SOURCE', None)] = InvalidSource('The referer is invalid') errors_mapping[('IP_BLOCKED', None)] = IpBlocked('An IP whitelist blocked access') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('PIN_LOCKOUT', None)] = PinLockout('Too many invalid PIN entries') query_data = { 'api': self._api, 'url': '/link/status', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return QueryO(**query_data)
[docs] def session( self, email_address=None, link_charge_id=None, password=None, pin=None, short_id=None, uuid=None, ): """Session. :param email_address: The users email (optional) :param link_charge_id: The uuid of the prior charge against this link (optional) :param password: Password if needed (optional) :param pin: pin :param short_id: short_id :param uuid: uuid """ request_data = { 'email_address': email_address, 'link_charge_id': link_charge_id, 'password': password, 'pin': pin, 'short_id': short_id, 'uuid': uuid, } errors_mapping = {} errors_mapping[('CHARGE_REQUIRED', None)] = ChargeRequired('A charge is required to access this link') errors_mapping[('DISABLED', None)] = Disabled('This call is disabled for the account, you must use /link/redirect') errors_mapping[('INVALID_CREDENTIALS', None)] = InvalidCredentials('Invalid password or email if pin_auth is required.') errors_mapping[('INVALID_PIN', None)] = InvalidPin('An invalid PIN was entered') errors_mapping[('INVALID_SOURCE', None)] = InvalidSource('The referer is invalid') errors_mapping[('IP_BLOCKED', None)] = IpBlocked('An IP whitelist blocked access') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('ONLY_ONE', None)] = OnlyOne('You can pass either uuid or short_id, not both') errors_mapping[('PIN_LOCKOUT', None)] = PinLockout('Too many invalid PIN entries') query_data = { 'api': self._api, 'url': '/link/session', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return QueryO(**query_data)
[docs] def redirect( self, link_charge_id=None, password=None, pin=None, short_id=None, uuid=None, v=None, ): """Redirect. :param link_charge_id: The uuid of the prior charge against this link (optional) :param password: Password if needed (optional) :param pin: pin :param short_id: short_id :param uuid: uuid :param v: A JSON hash with the following keys pairs. The JSON must be encrypted (optional) context_user_id - an account user id for eUnity """ request_data = { 'link_charge_id': link_charge_id, 'password': password, 'pin': pin, 'short_id': short_id, 'uuid': uuid, 'v': v, } errors_mapping = {} errors_mapping[('EXPIRED', None)] = Expired('The link has expired') errors_mapping[('INVALID_CREDENTIALS', None)] = InvalidCredentials('Invalid password.') errors_mapping[('INVALID_PIN', None)] = InvalidPin('An invalid PIN was entered') errors_mapping[('INVALID_SOURCE', None)] = InvalidSource('The referer is invalid') errors_mapping[('IP_BLOCKED', None)] = IpBlocked('An IP whitelist blocked access') errors_mapping[('LINK_NOT_FOUND', None)] = LinkNotFound('The link was not found') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('The configuration of this link requires the link UI be used instead of direct access') errors_mapping[('ONLY_ONE', None)] = OnlyOne('You can pass either uuid or short_id, not both') errors_mapping[('PIN_LOCKOUT', None)] = PinLockout('Too many invalid PIN entries') query_data = { 'api': self._api, 'url': '/link/redirect', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return QueryO(**query_data)
[docs] def external( self, u, v, ): """External. :param u: The uuid of the user_account record to create the guest link as :param v: A JSON hash with the following keys pairs. The JSON must be encrypted and base64 encoded filter.*=>Filter field(s) as per the /study/list to specify the study(s) to construct the link for The include_priors link option value can be passed as a key Any additional fields will the saved in the study audit trail and the following fields email_address, redirect_url, integration_key and skip_email_prompt will be available in /namespace/share_code if this is an upload link """ request_data = { 'u': u, 'v': v, } errors_mapping = {} errors_mapping[('ACCOUNT_NOT_SET', None)] = AccountNotSet('The account is not setup for the integration') errors_mapping[('ACCOUNT_USER_NOT_FOUND', None)] = AccountUserNotFound('The account user record was not found') errors_mapping[('DECRYPT_FAILED', None)] = DecryptFailed('The decryption failed') errors_mapping[('INVALID_SOURCE', None)] = InvalidSource('The referer is invalid') errors_mapping[('MISSING_PARAMETERS', None)] = MissingParameters('The u or v parameter is missing') errors_mapping[('NOT_HASH', None)] = NotHash('The v parameter is not a JSON hash') errors_mapping[('NO_FILTER', None)] = NoFilter('A filter expressions was not passed') query_data = { 'api': self._api, 'url': '/link/external', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return QueryO(**query_data)
[docs] def sso( self, u, v, ): """Sso. :param u: The uuid of the user_account record :param v: An encrypted JSON hash as per the instructions in the SSO to a PHR account with a study share section of the documentation """ request_data = { 'u': u, 'v': v, } errors_mapping = {} errors_mapping[('ACCOUNT_NOT_SET', None)] = AccountNotSet('The account is not setup for the integration') errors_mapping[('ACCOUNT_USER_NOT_FOUND', None)] = AccountUserNotFound('The account user record was not found') errors_mapping[('DECRYPT_FAILED', None)] = DecryptFailed('The decryption failed') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('MISSING_INFO', None)] = MissingInfo('User information is missing from the hash') errors_mapping[('NOT_HASH', None)] = NotHash('The v parameter is not a JSON hash') query_data = { 'api': self._api, 'url': '/link/sso', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return QueryO(**query_data)
[docs] def sid( self, email, uuid, ): """Sid. :param email: Email address to associate with this usage :param uuid: The uuid of the link usage """ request_data = { 'email': email, 'uuid': uuid, } errors_mapping = {} errors_mapping[('NOT_FOUND', None)] = NotFound('The usage was not found') query_data = { 'api': self._api, 'url': '/link/sid', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return QueryO(**query_data)
[docs] def mail( self, email, uuid, ): """Mail. :param email: Email address :param uuid: The uuid of the link """ request_data = { 'email': email, 'uuid': uuid, } errors_mapping = {} errors_mapping[('INVALID_EMAIL', None)] = InvalidEmail('Enter a valid email address') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to do this') query_data = { 'api': self._api, 'url': '/link/mail', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return QueryO(**query_data)
[docs] def charge( self, charge_token, uuid, ): """Charge. :param charge_token: The stripe charge token :param uuid: The uuid of the link """ request_data = { 'charge_token': charge_token, 'uuid': uuid, } errors_mapping = {} errors_mapping[('CHARGE_FAILED', None)] = ChargeFailed('The charge failed. The error_subtype holds the details on the error') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') query_data = { 'api': self._api, 'url': '/link/charge', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return QueryO(**query_data)
[docs] def pin( self, uuid, ): """Pin. :param uuid: The uuid of the link """ request_data = { 'uuid': uuid, } errors_mapping = {} errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') query_data = { 'api': self._api, 'url': '/link/pin', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return QueryO(**query_data)
class AsyncLink: """AsyncLink.""" def __init__(self, api): self._api = api
[docs] def list( self, account_id=None, study_id=None, user_id=None, ): """List. :param account_id: account_id :param study_id: study_id :param user_id: user_id """ request_data = { 'account_id': account_id, 'study_id': study_id, 'user_id': user_id, } errors_mapping = {} errors_mapping[('FILTER_NOT_FOUND', None)] = FilterNotFound('The filter can not be found. The error_subtype will hold the filter UUID') errors_mapping[('INVALID_CONDITION', None)] = InvalidCondition('The condition is not support. The error_subtype will hold the filter expression this applies to') errors_mapping[('INVALID_FIELD', None)] = InvalidField('The field is not valid for this object. The error_subtype will hold the filter expression this applies to') errors_mapping[('INVALID_SORT_FIELD', None)] = InvalidSortField('The field is not valid for this object. The error_subtype will hold the field name this applies to') errors_mapping[('INVALID_SORT_ORDER', None)] = InvalidSortOrder('The sort order for the field is invalid. The error_subtype will hold the field name this applies to') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The account can not be found') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to view this list') query_data = { 'api': self._api, 'url': '/link/list', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } query_data['paginated_field'] = 'links' return AsyncQueryOPSF(**query_data)
[docs] def add( self, action, prompt_for_anonymize, acceptance_required=None, account_id=None, anonymize=None, charge_amount=None, charge_currency=None, charge_description=None, email=None, filter=None, include_priors=None, inherit_permissions=None, max_hits=None, meeting_id=None, message=None, mfm_page=None, minutes_alive=None, mobile_phone=None, namespace_id=None, notify=None, parameters=None, password=None, password_is_dob=None, password_max_attempts=None, pin_auth=None, referer=None, share_code=None, share_on_view=None, skip_email_prompt=None, study_id=None, ui_json=None, upload_match=None, upload_study_customfields=None, use_share_code=None, user_id=None, workflow=None, ): """Add. :param action: Link action (STUDY_LIST|STUDY_VIEW|STUDY_UPLOAD) :param prompt_for_anonymize: Flag to prompt if the anonymization rules should be applied on ingress :param acceptance_required: Flag that acceptance of TOS is required (optional) :param account_id: account_id :param anonymize: Anonymization rules to the applied to any STUDY_UPLOAD done with this link. Rules are formatted as per the rules parameter in /namespace/anonymize (optional) :param charge_amount: Amount to charge in pennies before the link can be accessed (optional) :param charge_currency: Charge currency (optional) :param charge_description: Charge description (optional) :param email: Email the link to these addresses (optional) :param filter: filter :param include_priors: Include prior studies (optional) :param inherit_permissions: Flag for the link sessions to inherit permissions from the user stored in the user_id link attribute (optional) :param max_hits: The maximum number of times the link can be used (optional) :param meeting_id: UUID of the meeting to associate the link with (optional) :param message: Message to include in the email (optional) :param mfm_page: Flag to launch the MFM page instead of the viewer (optional) :param minutes_alive: The maximum number of minutes the link will be alive for (optional) :param mobile_phone: Send the link to this phone number (optional) :param namespace_id: namespace_id :param notify: Comma or space separated list of additional emails to notify of link usage (optional) :param parameters: JSON array of parameters to add to the redirect URL or return in /namespace/share_code if an upload e.g. ["integration_key","abc"] Where abc is integration key. (optional) :param password: Link password (optional) :param password_is_dob: Flag that the password is the patient_birth_date for the study (study_id is required) (optional) :param password_max_attempts: The maximum number of failed password attempt (optional) :param pin_auth: An account member email and PIN authentication is required (optional) :param referer: The link can only be accessed from the specified referer. The referer can be a regexp to match multiple referers (optional) :param share_code: share code for a STUDY_UPLOAD (optional) :param share_on_view: Flag to share the study with the email after it is viewed (optional) :param skip_email_prompt: Skip the prompt for email step (optional) :param study_id: study_id :param ui_json: JSON for UI settings (optional) :param upload_match: A JSON hash of DICOM tags and regular expressions they must match uploaded against this link (optional) :param upload_study_customfields: A JSON hash of customfields that will be mapped to a study on study upload. A key is a customfield UUID, a value is a value for the field (optional) :param use_share_code: Flag to use the namespace share code settings for a STUDY_UPLOAD (optional) :param user_id: The link user. Any filter is applied in this users context (optional) :param workflow: The workflow this link is intended for (patient_studies) (optional) """ request_data = { 'acceptance_required': acceptance_required, 'account_id': account_id, 'action': action, 'anonymize': anonymize, 'charge_amount': charge_amount, 'charge_currency': charge_currency, 'charge_description': charge_description, 'email': email, 'filter': filter, 'include_priors': include_priors, 'inherit_permissions': inherit_permissions, 'max_hits': max_hits, 'meeting_id': meeting_id, 'message': message, 'mfm_page': mfm_page, 'minutes_alive': minutes_alive, 'mobile_phone': mobile_phone, 'namespace_id': namespace_id, 'notify': notify, 'parameters': parameters, 'password': password, 'password_is_dob': password_is_dob, 'password_max_attempts': password_max_attempts, 'pin_auth': pin_auth, 'prompt_for_anonymize': prompt_for_anonymize, 'referer': referer, 'share_code': share_code, 'share_on_view': share_on_view, 'skip_email_prompt': skip_email_prompt, 'study_id': study_id, 'ui_json': ui_json, 'upload_match': upload_match, 'upload_study_customfields': upload_study_customfields, 'use_share_code': use_share_code, 'user_id': user_id, 'workflow': workflow, } errors_mapping = {} errors_mapping[('INVALID_ACTION', None)] = InvalidAction('An invalid action was passed') errors_mapping[('INVALID_CHARGE', None)] = InvalidCharge('The charge is invalid. The error_subtype holds the details on the error') errors_mapping[('INVALID_EMAIL', None)] = InvalidEmail('An invalid email address was passed') errors_mapping[('INVALID_FIELD_NAME', None)] = InvalidFieldName('The field name in the rules hash is invalid. The error_subtype holds the invalid field name') errors_mapping[('INVALID_JSON', None)] = InvalidJson('The field is not in valid JSON format. The error_subtype holds the name of the field') errors_mapping[('INVALID_PHI_FIELD', None)] = InvalidPhiField('The password_is_phi field is invalid or a study_id was not passed') errors_mapping[('INVALID_PHONE', None)] = InvalidPhone('An invalid cellular phone number was passed') errors_mapping[('INVALID_REGEXP', None)] = InvalidRegexp('Invalid regular expression. The error_subtype holds the invalid regexp.') errors_mapping[('INVALID_UPLOAD_MATCH', None)] = InvalidUploadMatch('The upload_match is invalid. The error_subtype holds the details on the error') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The patient or study could not be found. The error_subtype holds the type of object not found') errors_mapping[('NOT_HASH', None)] = NotHash('The rules field is not a hash') errors_mapping[('NOT_LIST', None)] = NotList('The field is not a JSON array. The error_subtype holds the name of the field') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to create links') errors_mapping[('VALIDATE', None)] = Validate('A validation error. The error_subtype holds the details on the error') errors_mapping[('VALIDATION_FAILED', None)] = ValidationFailed('The workflow parameter validation failed') query_data = { 'api': self._api, 'url': '/link/add', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return AsyncQueryO(**query_data)
[docs] def get( self, acceptance_required, account_id, action, anonymize, charge_amount, charge_currency, charge_description, created, description, email, filter, has_password, include_priors, inherit_permissions, is_meeting, max_hits, message, mfm_page, minutes_alive, mobile_phone, namespace_id, namespace_name, notify, parameters, password_is_dob, password_max_attempts, pin_auth, prompt_for_anonymize, redirect_url, referer, share_on_view, short_id, skip_email_prompt, study_id, ui_json, upload_match, upload_study_customfields, url, use_share_code, user_id, uuid, workflow, ): """Get. :param acceptance_required: Flag that acceptance of TOS is required :param account_id: The account id :param action: Link action :param anonymize: Any anonymization rules :param charge_amount: Amount to charge in pennies before the link can be accessed :param charge_currency: Charge currency :param charge_description: Charge description :param created: Created datetime stamp of the link :param description: Description of the link :param email: Email address the link was sent to :param filter: The filter expression :param has_password: Flag if the link has a password or not :param include_priors: Include prior studies :param inherit_permissions: Flag for the link sessions to inherit permissions from the user stored in the user_id link attribute :param is_meeting: Flag if the link is for a meeting :param max_hits: The maximum number of times the link can be used :param message: Message to include in the email :param mfm_page: Flag to launch the MFM page instead of the viewer :param minutes_alive: The maximum number of minutes the link will be alive for :param mobile_phone: Cellular phone number the link was sent to :param namespace_id: Id of the namespace for upload links :param namespace_name: Name of the namespace for upload links :param notify: Comma or space separated list of additional emails to notify of link usage :param parameters: JSON array parameters to add to the redirect URL :param password_is_dob: Flag that the password is the patient_birth_date for the study :param password_max_attempts: The maximum number of failed password attempt :param pin_auth: An account member email and PIN authentication is required :param prompt_for_anonymize: Flag to prompt if the anonymization rules should be applied on ingress :param redirect_url: URL for the /link/redirect API which will take you directly to the study viewer or uploader :param referer: The link can only be accessed from the specified referer :param share_on_view: Flag to share the study with the email after it is viewed :param short_id: Short ID of the link for the 'patient_studies' workflow :param skip_email_prompt: Skip the prompt for email step :param study_id: uuid of the study :param ui_json: JSON for UI settings :param upload_match: A JSON hash of DICOM tags and regular expressions they must match uploaded against this link :param upload_study_customfields: A JSON hash of customfields that will be mapped to a study on study upload :param url: URL for the link which will take you to the UI entry point for links to enter email, password etc. :param use_share_code: Flag to use the namespace share code settings for a STUDY_UPLOAD :param user_id: The user id :param uuid: Id of the link :param workflow: The workflow this link is intended for """ request_data = { 'acceptance_required': acceptance_required, 'account_id': account_id, 'action': action, 'anonymize': anonymize, 'charge_amount': charge_amount, 'charge_currency': charge_currency, 'charge_description': charge_description, 'created': created, 'description': description, 'email': email, 'filter': filter, 'has_password': has_password, 'include_priors': include_priors, 'inherit_permissions': inherit_permissions, 'is_meeting': is_meeting, 'max_hits': max_hits, 'message': message, 'mfm_page': mfm_page, 'minutes_alive': minutes_alive, 'mobile_phone': mobile_phone, 'namespace_id': namespace_id, 'namespace_name': namespace_name, 'notify': notify, 'parameters': parameters, 'password_is_dob': password_is_dob, 'password_max_attempts': password_max_attempts, 'pin_auth': pin_auth, 'prompt_for_anonymize': prompt_for_anonymize, 'redirect_url': redirect_url, 'referer': referer, 'share_on_view': share_on_view, 'short_id': short_id, 'skip_email_prompt': skip_email_prompt, 'study_id': study_id, 'ui_json': ui_json, 'upload_match': upload_match, 'upload_study_customfields': upload_study_customfields, 'url': url, 'use_share_code': use_share_code, 'user_id': user_id, 'uuid': uuid, 'workflow': workflow, } errors_mapping = {} errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to view the link') query_data = { 'api': self._api, 'url': '/link/get', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return AsyncQueryO(**query_data)
[docs] def delete( self, uuid, ): """Delete. :param uuid: Id of the link """ request_data = { 'uuid': uuid, } errors_mapping = {} errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to delete the link') query_data = { 'api': self._api, 'url': '/link/delete', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return AsyncQueryO(**query_data)
[docs] def status( self, link_charge_id=None, pin=None, uuid=None, ): """Status. :param link_charge_id: The uuid of the prior charge against this link (optional) :param pin: pin :param uuid: uuid """ request_data = { 'link_charge_id': link_charge_id, 'pin': pin, 'uuid': uuid, } errors_mapping = {} errors_mapping[('INVALID_PIN', None)] = InvalidPin('An invalid PIN was entered') errors_mapping[('INVALID_SOURCE', None)] = InvalidSource('The referer is invalid') errors_mapping[('IP_BLOCKED', None)] = IpBlocked('An IP whitelist blocked access') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('PIN_LOCKOUT', None)] = PinLockout('Too many invalid PIN entries') query_data = { 'api': self._api, 'url': '/link/status', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return AsyncQueryO(**query_data)
[docs] def session( self, email_address=None, link_charge_id=None, password=None, pin=None, short_id=None, uuid=None, ): """Session. :param email_address: The users email (optional) :param link_charge_id: The uuid of the prior charge against this link (optional) :param password: Password if needed (optional) :param pin: pin :param short_id: short_id :param uuid: uuid """ request_data = { 'email_address': email_address, 'link_charge_id': link_charge_id, 'password': password, 'pin': pin, 'short_id': short_id, 'uuid': uuid, } errors_mapping = {} errors_mapping[('CHARGE_REQUIRED', None)] = ChargeRequired('A charge is required to access this link') errors_mapping[('DISABLED', None)] = Disabled('This call is disabled for the account, you must use /link/redirect') errors_mapping[('INVALID_CREDENTIALS', None)] = InvalidCredentials('Invalid password or email if pin_auth is required.') errors_mapping[('INVALID_PIN', None)] = InvalidPin('An invalid PIN was entered') errors_mapping[('INVALID_SOURCE', None)] = InvalidSource('The referer is invalid') errors_mapping[('IP_BLOCKED', None)] = IpBlocked('An IP whitelist blocked access') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('ONLY_ONE', None)] = OnlyOne('You can pass either uuid or short_id, not both') errors_mapping[('PIN_LOCKOUT', None)] = PinLockout('Too many invalid PIN entries') query_data = { 'api': self._api, 'url': '/link/session', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return AsyncQueryO(**query_data)
[docs] def redirect( self, link_charge_id=None, password=None, pin=None, short_id=None, uuid=None, v=None, ): """Redirect. :param link_charge_id: The uuid of the prior charge against this link (optional) :param password: Password if needed (optional) :param pin: pin :param short_id: short_id :param uuid: uuid :param v: A JSON hash with the following keys pairs. The JSON must be encrypted (optional) context_user_id - an account user id for eUnity """ request_data = { 'link_charge_id': link_charge_id, 'password': password, 'pin': pin, 'short_id': short_id, 'uuid': uuid, 'v': v, } errors_mapping = {} errors_mapping[('EXPIRED', None)] = Expired('The link has expired') errors_mapping[('INVALID_CREDENTIALS', None)] = InvalidCredentials('Invalid password.') errors_mapping[('INVALID_PIN', None)] = InvalidPin('An invalid PIN was entered') errors_mapping[('INVALID_SOURCE', None)] = InvalidSource('The referer is invalid') errors_mapping[('IP_BLOCKED', None)] = IpBlocked('An IP whitelist blocked access') errors_mapping[('LINK_NOT_FOUND', None)] = LinkNotFound('The link was not found') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('The configuration of this link requires the link UI be used instead of direct access') errors_mapping[('ONLY_ONE', None)] = OnlyOne('You can pass either uuid or short_id, not both') errors_mapping[('PIN_LOCKOUT', None)] = PinLockout('Too many invalid PIN entries') query_data = { 'api': self._api, 'url': '/link/redirect', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return AsyncQueryO(**query_data)
[docs] def external( self, u, v, ): """External. :param u: The uuid of the user_account record to create the guest link as :param v: A JSON hash with the following keys pairs. The JSON must be encrypted and base64 encoded filter.*=>Filter field(s) as per the /study/list to specify the study(s) to construct the link for The include_priors link option value can be passed as a key Any additional fields will the saved in the study audit trail and the following fields email_address, redirect_url, integration_key and skip_email_prompt will be available in /namespace/share_code if this is an upload link """ request_data = { 'u': u, 'v': v, } errors_mapping = {} errors_mapping[('ACCOUNT_NOT_SET', None)] = AccountNotSet('The account is not setup for the integration') errors_mapping[('ACCOUNT_USER_NOT_FOUND', None)] = AccountUserNotFound('The account user record was not found') errors_mapping[('DECRYPT_FAILED', None)] = DecryptFailed('The decryption failed') errors_mapping[('INVALID_SOURCE', None)] = InvalidSource('The referer is invalid') errors_mapping[('MISSING_PARAMETERS', None)] = MissingParameters('The u or v parameter is missing') errors_mapping[('NOT_HASH', None)] = NotHash('The v parameter is not a JSON hash') errors_mapping[('NO_FILTER', None)] = NoFilter('A filter expressions was not passed') query_data = { 'api': self._api, 'url': '/link/external', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return AsyncQueryO(**query_data)
[docs] def sso( self, u, v, ): """Sso. :param u: The uuid of the user_account record :param v: An encrypted JSON hash as per the instructions in the SSO to a PHR account with a study share section of the documentation """ request_data = { 'u': u, 'v': v, } errors_mapping = {} errors_mapping[('ACCOUNT_NOT_SET', None)] = AccountNotSet('The account is not setup for the integration') errors_mapping[('ACCOUNT_USER_NOT_FOUND', None)] = AccountUserNotFound('The account user record was not found') errors_mapping[('DECRYPT_FAILED', None)] = DecryptFailed('The decryption failed') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('MISSING_INFO', None)] = MissingInfo('User information is missing from the hash') errors_mapping[('NOT_HASH', None)] = NotHash('The v parameter is not a JSON hash') query_data = { 'api': self._api, 'url': '/link/sso', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return AsyncQueryO(**query_data)
[docs] def sid( self, email, uuid, ): """Sid. :param email: Email address to associate with this usage :param uuid: The uuid of the link usage """ request_data = { 'email': email, 'uuid': uuid, } errors_mapping = {} errors_mapping[('NOT_FOUND', None)] = NotFound('The usage was not found') query_data = { 'api': self._api, 'url': '/link/sid', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return AsyncQueryO(**query_data)
[docs] def mail( self, email, uuid, ): """Mail. :param email: Email address :param uuid: The uuid of the link """ request_data = { 'email': email, 'uuid': uuid, } errors_mapping = {} errors_mapping[('INVALID_EMAIL', None)] = InvalidEmail('Enter a valid email address') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') errors_mapping[('NOT_PERMITTED', None)] = NotPermitted('You are not permitted to do this') query_data = { 'api': self._api, 'url': '/link/mail', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return AsyncQueryO(**query_data)
[docs] def charge( self, charge_token, uuid, ): """Charge. :param charge_token: The stripe charge token :param uuid: The uuid of the link """ request_data = { 'charge_token': charge_token, 'uuid': uuid, } errors_mapping = {} errors_mapping[('CHARGE_FAILED', None)] = ChargeFailed('The charge failed. The error_subtype holds the details on the error') errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') query_data = { 'api': self._api, 'url': '/link/charge', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': False, } return AsyncQueryO(**query_data)
[docs] def pin( self, uuid, ): """Pin. :param uuid: The uuid of the link """ request_data = { 'uuid': uuid, } errors_mapping = {} errors_mapping[('MISSING_FIELDS', None)] = MissingFields('A required field is missing or does not have data in it. The error_subtype holds a array of all the missing fields') errors_mapping[('NOT_FOUND', None)] = NotFound('The link was not found') query_data = { 'api': self._api, 'url': '/link/pin', 'request_data': request_data, 'errors_mapping': errors_mapping, 'required_sid': True, } return AsyncQueryO(**query_data)