def _validate_monitoring_statuses(request, obj_name, valid_statuses): monitoring = request.validated["monitoring"] if monitoring.status not in valid_statuses: raise_operation_error( request, "{} can't be added to monitoring in current ({}) status".format( obj_name, monitoring.status))
def _validate_document_status(request, status): status_current = request.validated['monitoring'].status statuses = status if isinstance(status, tuple) else (status, ) if status_current not in statuses: raise_operation_error( request, 'Can\'t add document in current {} monitoring status.'.format( status_current))
def _validate_patch_monitoring_status_active_to_declined(request): _validate_patch_monitoring_status_active_to_addressed_or_declined(request) if request.validated.get('data', {}).get('conclusion').get('violationOccurred'): raise_operation_error( request, 'Can\'t set {} status to monitoring if violation occurred.'.format( DECLINED_STATUS))
def validate_elimination_report_data(request): """ Validate elimination report data POST """ if request.validated["monitoring"].eliminationReport is not None: raise_operation_error(request, "Can't post another elimination report.") _validate_elimination_report_status(request) return validate_data(request, EliminationReport)
def _validate_patch_monitoring_status_addressed_to_completed(request): monitoring = request.validated['monitoring'] if not get_now() > monitoring.eliminationPeriod.endDate: raise_operation_error( request, 'Can\'t change status to completed before elimination period ends.' ) if not request.validated.get('data', {}).get('eliminationResolution'): request.errors.status = 422 request.errors.add('body', 'eliminationResolution', 'This field is required.')
def validate_appeal_data(request): """ Validate appeal report data POST """ monitoring = request.validated['monitoring'] _validate_monitoring_statuses(request, "Appeal", (ADDRESSED_STATUS, DECLINED_STATUS)) if monitoring.appeal is not None: raise_operation_error(request, "Can't post another appeal.") return validate_data(request, Appeal)
def validate_posting_elimination_resolution(request): monitoring = request.validated['monitoring'] monitoring.eliminationResolution.datePublished = monitoring.eliminationResolution.dateCreated if not monitoring.eliminationReport: accelerator = get_monitoring_accelerator(request.context) allow_post_since = calculate_normalized_business_date( monitoring.conclusion.datePublished, RESOLUTION_WAIT_PERIOD, accelerator) if get_now() < allow_post_since: raise_operation_error( request, "Can't post eliminationResolution without eliminationReport " "earlier than {} business days since conclusion.datePublished". format(RESOLUTION_WAIT_PERIOD.days))
def validate_appeal_data(request): """ Validate appeal report data POST """ monitoring = request.validated['monitoring'] if monitoring.appeal is not None: raise_operation_error(request, "Can't post another appeal.") if monitoring.conclusion is None or monitoring.conclusion.datePublished is None: request.errors.status = 422 request.errors.add('body', 'appeal', 'Can\'t post before conclusion is published.') raise error_handler(request.errors) return validate_data(request, Appeal)
def validate_patch_liability_data(request): """ Validate liability report data PATCH """ _validate_monitoring_statuses( request, "Liability proceeding", (ADDRESSED_STATUS, COMPLETED_STATUS), ) if request.context.proceeding: raise_operation_error(request, "Can't post another proceeding.") return validate_data(request, Liability, partial=True)
def validate_credentials_generate(request): try: token = get_access_token(request) except ValueError: raise_operation_error(request, 'No access token was provided.') try: response = TendersClient( request.registry.api_token, host_url=request.registry.api_server, api_version=request.registry.api_version, ).extract_credentials(request.validated['monitoring'].tender_id) except ResourceNotFound: raise_operation_error( request, 'Tender {} not found'.format( request.validated['monitoring'].tender_id)) else: if sha512(token).hexdigest() != response['data']['tender_token']: raise forbidden(request)
def validate_patch_appeal_data(request): """ Validate appeal report data PATCH """ monitoring = request.validated['monitoring'] if monitoring.appeal is None: raise_operation_error(request, "Appeal not found", status=404) _validate_monitoring_statuses( request, "Appeal proceeding", (ADDRESSED_STATUS, DECLINED_STATUS, COMPLETED_STATUS, CLOSED_STATUS, STOPPED_STATUS), ) if request.context.proceeding is not None: raise_operation_error(request, "Can't post another proceeding.") return validate_data(request, Appeal, partial=True)
def _validate_post_post_status(request): post = request.validated['post'] monitoring = request.validated['monitoring'] status_current = monitoring.status if status_current in (ADDRESSED_STATUS, DECLINED_STATUS): if request.authenticated_userid == monitoring.tender_owner: if any(post.postOf == CONCLUSION_OBJECT_TYPE and post.relatedPost is None for post in monitoring.posts): raise_operation_error( request, 'Can\'t add more than one {} post in current {} monitoring status.' .format(CONCLUSION_OBJECT_TYPE, status_current)) elif post.relatedPost is None: raise_operation_error( request, 'Can\'t add post in current {} monitoring status.'.format( status_current)) elif status_current not in (ACTIVE_STATUS, ): raise_operation_error( request, 'Can\'t add post in current {} monitoring status.'.format( status_current))
def _validate_patch_monitoring_status_declined_to_closed(request): monitoring = request.validated['monitoring'] if not get_now() > monitoring.eliminationPeriod.endDate: raise_operation_error( request, 'Can\'t change status to closed before elimination period ends.')