コード例 #1
0
    def get_provider(self, notification: Notification) -> ProviderDetails:
        template_or_service_provider_id = self._get_template_or_service_provider_id(
            notification)
        if template_or_service_provider_id:
            provider = get_provider_details_by_id(
                template_or_service_provider_id)

            if provider is None:
                raise InvalidProviderException(
                    f'provider {template_or_service_provider_id} could not be found'
                )
            elif not provider.active:
                raise InvalidProviderException(
                    f'provider {template_or_service_provider_id} is not active'
                )

        else:
            provider_selection_strategy = self._strategies[NotificationType(
                notification.notification_type)]
            provider = provider_selection_strategy.get_provider(notification)

            if provider is None:
                raise InvalidProviderException(
                    f'provider strategy {provider_selection_strategy.get_label()} could not find a suitable provider'
                )

        return provider
def is_provider_valid(provider_id: str, notification_type: str) -> bool:
    provider_details = get_provider_details_by_id(provider_id)
    return (
        provider_details is not None
        and provider_details.active
        and provider_details.notification_type == notification_type
    )
def load_provider(provider_id: str) -> ProviderDetails:
    provider_details = get_provider_details_by_id(provider_id)
    if provider_details is None:
        raise InvalidProviderException(
            f'provider {provider_id} could not be found')
    elif not provider_details.active:
        raise InvalidProviderException(f'provider {provider_id} is not active')
    else:
        return provider_details
コード例 #4
0
ファイル: rest.py プロジェクト: alphagov/notifications-api
def update_provider_details(provider_details_id):
    fetched_provider_details = get_provider_details_by_id(provider_details_id)

    current_data = dict(provider_details_schema.dump(fetched_provider_details).data.items())
    current_data.update(request.get_json())
    update_dict = provider_details_schema.load(current_data).data

    invalid_keys = {'identifier', 'version', 'updated_at'} & set(key for key in request.get_json().keys())
    if invalid_keys:
        message = "Not permitted to be updated"
        errors = {key: [message] for key in invalid_keys}
        raise InvalidRequest(errors, status_code=400)

    dao_update_provider_details(update_dict)
    return jsonify(provider_details=provider_details_schema.dump(fetched_provider_details).data), 200
コード例 #5
0
ファイル: rest.py プロジェクト: cds-snc/notification-api
def update_provider_details(provider_details_id):
    valid_keys = {"priority", "created_by", "active"}
    req_json = request.get_json()

    invalid_keys = req_json.keys() - valid_keys
    if invalid_keys:
        message = "Not permitted to be updated"
        errors = {key: [message] for key in invalid_keys}
        raise InvalidRequest(errors, status_code=400)

    provider = get_provider_details_by_id(provider_details_id)

    # Handle created_by differently due to how history entry is created
    if "created_by" in req_json:
        user = get_user_by_id(req_json["created_by"])
        provider.created_by_id = user.id
        req_json.pop("created_by")

    for key in req_json:
        setattr(provider, key, req_json[key])
    dao_update_provider_details(provider)

    return jsonify(
        provider_details=provider_details_schema.dump(provider).data), 200
コード例 #6
0
ファイル: rest.py プロジェクト: alphagov/notifications-api
def get_provider_by_id(provider_details_id):
    data = provider_details_schema.dump(get_provider_details_by_id(provider_details_id)).data
    return jsonify(provider_details=data)
コード例 #7
0
ファイル: rest.py プロジェクト: cds-snc/notification-api
def get_provider_by_id(provider_details_id):
    data = provider_details_schema.dump(
        get_provider_details_by_id(provider_details_id)).data
    return jsonify(provider_details=data)
コード例 #8
0
def load_provider(provider_id: UUID) -> ProviderDetails:
    provider_details = get_provider_details_by_id(provider_id)
    if provider_details is not None and not provider_details.active:
        raise InvalidProviderException(f'provider {provider_id} is not active')

    return provider_details