示例#1
0
def validate_patch_tender_stage2_data(request):
    data = validate_json_data(request)
    if request.context.status == 'draft':
        default_statuses = ['active.tendering', STAGE2_STATUS]
        if data.get('status') not in default_statuses:
            raise_operation_error(request, 'Can\'t update tender in current ({0}) status'.format(data['status']))
        request.validated['data'] = {'status': data.get('status')}
        request.context.status = data.get('status')
        return
    if data:
        if 'items' in data:
            items = request.context.items
            cpv_group_lists = [i.classification.id[:3] for i in items]
            for item in data['items']:
                if 'classification' in item and 'id' in item['classification']:
                    cpv_group_lists.append(item['classification']['id'][:3])
            if len(set(cpv_group_lists)) != 1:
                request.errors.add('body', 'item', 'Can\'t change classification')
                request.errors.status = 403
                raise error_handler(request.errors)
        if 'enquiryPeriod' in data:
            if apply_data_patch(request.context.enquiryPeriod.serialize(), data['enquiryPeriod']):
                request.errors.add('body', 'item', 'Can\'t change enquiryPeriod')
                request.errors.status = 403
                raise error_handler(request.errors)
    if request.context.status == STAGE2_STATUS and data.get('status') == 'active.tendering':
        data = validate_data(request, type(request.tender), True, data)
        if data:  # if no error then add status to validate data
            request.context.status = 'active.tendering'
            data['status'] = 'active.tendering'
    else:
        data = validate_data(request, type(request.tender), True, data)

    return data
def validate_complaint_data(request, **kwargs):
    err_msg = 'Broker Accreditation level does not permit complaint creation'
    if not check_subresource_create_accredetation(request, err_msg):
        return
    update_logging_context(request, {'complaint_id': '__new__'})
    model = type(request.auction).complaints.model_class
    return validate_data(request, model, "complaint")
def validate_bid_data(request):
    if not request.check_accreditation(request.tender.edit_accreditation):
        request.errors.add(
            'procurementMethodType', 'accreditation',
            'Broker Accreditation level does not permit bid creation')
        request.errors.status = 403
        raise error_handler(request.errors)
    if request.tender.get('mode',
                          None) is None and request.check_accreditation('t'):
        request.errors.add(
            'procurementMethodType', 'mode',
            'Broker Accreditation level does not permit bid creation')
        request.errors.status = 403
        raise error_handler(request.errors)
    update_logging_context(request, {'bid_id': '__new__'})
    model = type(request.tender).bids.model_class
    bid = validate_data(request, model)
    validated_bid = request.validated.get('bid')
    if validated_bid:
        if any([
                key == 'documents' or 'Documents' in key
                for key in validated_bid.keys()
        ]):
            bid_documents = validate_bid_documents(request)
            if not bid_documents:
                return
            for documents_type, documents in bid_documents.items():
                validated_bid[documents_type] = documents
    return bid
示例#4
0
def validate_patch_tender_ua_data(request):
    data = validate_json_data(request)
    # TODO try to use original code openprocurement.tender.core.validation.validate_patch_tender_data
    if request.context.status == 'draft':
        default_status = type(request.tender).fields['status'].default
        if data and data.get('status') != default_status:
            raise_operation_error(
                request, 'Can\'t update tender in current (draft) status')
        request.validated['data'] = {'status': default_status}
        request.context.status = default_status
        return
    if data:
        if 'items' in data:
            items = request.context.items
            cpv_group_lists = [i.classification.id[:3] for i in items]
            for item in data['items']:
                if 'classification' in item and 'id' in item['classification']:
                    cpv_group_lists.append(item['classification']['id'][:3])
            if len(set(cpv_group_lists)) != 1:
                request.errors.add('body', 'item',
                                   'Can\'t change classification')
                request.errors.status = 403
                raise error_handler(request.errors)
        if 'enquiryPeriod' in data:
            if apply_data_patch(request.context.enquiryPeriod.serialize(),
                                data['enquiryPeriod']):
                request.errors.add('body', 'item',
                                   'Can\'t change enquiryPeriod')
                request.errors.status = 403
                raise error_handler(request.errors)

    return validate_data(request, type(request.tender), True, data)
def validate_tender_data(request):
    update_logging_context(request, {'tender_id': '__new__'})

    data = validate_json_data(request)

    model = request.tender_from_data(data, create=False)
    #if not request.check_accreditation(model.create_accreditation):
    #if not any([request.check_accreditation(acc) for acc in getattr(model, 'create_accreditations', [getattr(model, 'create_accreditation', '')])]):
    if not any([
            request.check_accreditation(acc)
            for acc in iter(str(model.create_accreditation))
    ]):
        request.errors.add(
            'procurementMethodType', 'accreditation',
            'Broker Accreditation level does not permit tender creation')
        request.errors.status = 403
        raise error_handler(request.errors)
    data = validate_data(request, model, data=data)
    if data and data.get('mode',
                         None) is None and request.check_accreditation('t'):
        request.errors.add(
            'procurementMethodType', 'mode',
            'Broker Accreditation level does not permit tender creation')
        request.errors.status = 403
        raise error_handler(request.errors)
    if data and data.get('procuringEntity', {}).get(
            'kind', '') not in model.procuring_entity_kinds:
        request.errors.add(
            'procuringEntity', 'kind',
            '{kind!r} procuringEntity cannot publish this type of procedure. '
            'Only {kinds} are allowed.'.format(
                kind=data.get('procuringEntity', {}).get('kind', ''),
                kinds=', '.join(model.procuring_entity_kinds)))
        request.errors.status = 403
def validate_patch_tender_ua_data(request):
    data = validate_json_data(request)
    if request.context.status == 'draft':
        default_status = type(request.tender).fields['status'].default
        if data and data.get('status') != default_status:
            request.errors.add('body', 'data', 'Can\'t update tender in current (draft) status')
            request.errors.status = 403
            return
        request.validated['data'] = {'status': default_status}
        request.context.status = default_status
        return
    if data:
        if 'items' in data:
            items = request.context.items
            cpv_group_lists = [i.classification.id[:3] for i in items]
            for item in data['items']:
                if 'classification' in item and 'id' in item['classification']:
                    cpv_group_lists.append(item['classification']['id'][:3])
            if len(set(cpv_group_lists)) != 1:
                request.errors.add('body', 'item', 'Can\'t change classification')
                request.errors.status = 403
                return None
        if 'enquiryPeriod' in data:
            if apply_data_patch(request.context.enquiryPeriod.serialize(), data['enquiryPeriod']):
                request.errors.add('body', 'item', 'Can\'t change enquiryPeriod')
                request.errors.status = 403
                return None

    return validate_data(request, type(request.tender), True, data)
def validate_monitor_data(request):
    update_logging_context(request, {'monitor_id': '__new__'})
    data = validate_json_data(request)
    if data is None:
        return
    data = validate_data(request, Monitor, data=data)
    return data
def validate_patch_tender_ua_data(request):
    data = validate_json_data(request)
    classification_id = request.context.items[0].classification.id
    if 'items' in data:
        for item in data['items']:
            if 'classification' in item:
                if item['classification'].get('id', '') != classification_id:
                    request.errors.add('body', 'item', 'Can\'t change classification')
                    request.errors.status = 403
                    return None
    if 'enquiryPeriod' in data:
        request.errors.add('body', 'item', 'Can\'t change enquiryPeriod')
        request.errors.status = 403
        return None
    if 'tenderPeriod' in data:
        data["auctionPeriod"] = {'startDate': None}
        if len(request.context.lots) > 0:
            lots = list(data['lots']) if 'lots' in data else []
            data['lots'] = []
            for index, lot in enumerate(request.context.lots):
                lot_data = lots[index] if lots else {}

                lot_data['auctionPeriod'] = {'startDate': None}
                data['lots'].append(lot_data)

    return validate_data(request, request.tender.__class__, True, data)
示例#9
0
def validate_qualification_complaint_post_data(request):
    update_logging_context(request, {"post_id": "__new__"})
    validate_post_accreditation_level(request)
    model = type(
        request.tender
    ).qualifications.model_class.complaints.model_class.posts.model_class
    return validate_data(request, model)
示例#10
0
def validate_patch_tender_ua_data(request):
    data = validate_json_data(request)
    if request.context.status == "draft":
        validate_patch_tender_data_draft(request)
        return
    if data:
        if "items" in data:
            items = request.context.items
            cpv_group_lists = [i.classification.id[:3] for i in items]
            for item in data["items"]:
                if "classification" in item and "id" in item["classification"]:
                    cpv_group_lists.append(item["classification"]["id"][:3])
            if len(set(cpv_group_lists)) != 1:
                request.errors.add("body", "item",
                                   "Can't change classification")
                request.errors.status = 403
                raise error_handler(request.errors)
        if "enquiryPeriod" in data:
            if apply_data_patch(request.context.enquiryPeriod.serialize(),
                                data["enquiryPeriod"]):
                request.errors.add("body", "item",
                                   "Can't change enquiryPeriod")
                request.errors.status = 403
                raise error_handler(request.errors)

    return validate_data(request, type(request.tender), True, data)
def validate_transfer_data(request):
    update_logging_context(request, {'transfer_id': '__new__'})
    data = validate_json_data(request)
    if data is None:
        return
    model = Transfer
    return validate_data(request, model, data=data)
示例#12
0
def validate_plan_data(request):
    update_logging_context(request, {"plan_id": "__new__"})
    data = validate_json_data(request)
    model = request.plan_from_data(data, create=False)
    validate_plan_accreditation_level(request, model)
    data = validate_data(request, model, data=data)
    validate_plan_accreditation_level_mode(request)
    return data
示例#13
0
def validate_framework_data(request, **kwargs):
    update_logging_context(request, {"framework_id": "__new__"})
    data = validate_json_data(request)
    model = request.framework_from_data(data, create=False)
    validate_framework_accreditation_level_central(request, model)
    data = validate_data(request, model, data=data)
    validate_doc_accreditation_level_mode(request, "frameworkType", "framework")
    return data
示例#14
0
def validate_patch_tender_data(request):
    data = validate_json_data(request)
    if request.context.status != 'draft':
        return validate_data(request, type(request.tender), True, data)
    default_status = type(request.tender).fields['status'].default
    if data.get('status') != default_status:
        raise_operation_error(request, 'Can\'t update tender in current (draft) status')
    request.validated['data'] = {'status': default_status}
    request.context.status = default_status
def validate_plan_data(request):
    update_logging_context(request, {'plan_id': '__new__'})

    data = validate_json_data(request)
    if data is None:
        return

    model = request.plan_from_data(data, create=False)
    return validate_data(request, model, data=data)
示例#16
0
def validate_lot_data(request, **kwargs):
    update_logging_context(request, {'lot_id': '__new__'})
    data = validate_json_data(request)
    model = request.lot_from_data(data, create=False)

    validate_accreditations(request, model, 'lot')

    data = validate_data(request, model, "lot", data=data)
    validate_t_accreditation(request, data, 'lot')
def validate_file_transaction_upload(request, **kwargs):
    transaction = get_transaction_by_id(request)
    if not transaction:
        raise_operation_error(request, "Can't add document contract to nonexistent transaction", status=404)

    update_logging_context(request, {"document_id": "__new__"})
    if request.registry.docservice_url and request.content_type == "application/json":
        model = type(transaction).documents.model_class
        return validate_data(request, model)
示例#18
0
def validate_asset_data(request, error_handler, **kwargs):
    update_logging_context(request, {'asset_id': '__new__'})

    data = validate_json_data(request)

    model = request.asset_from_data(data, create=False)
    validate_accreditations(request, model, 'asset')
    data = validate_data(request, model, "asset", data=data)
    validate_t_accreditation(request, data, 'asset')
示例#19
0
def validate_patch_complaint_data_stage2(request):
    model = type(request.tender).complaints.model_class
    data = validate_data(request, model, True)
    if data:
        if validate_author(request, request.tender['shortlistedFirms'], request.validated['complaint']):
            return data  # validate is OK
        else:
            return None  # we catch errors
    return data
def validate_contract_data(request):
    update_logging_context(request, {'contract_id': '__new__'})
    data = request.validated['json_data'] = validate_json_data(request)
    model = request.contract_from_data(data, create=False)
    if hasattr(request, 'check_accreditation') and not request.check_accreditation(model.create_accreditation):
        request.errors.add('contract', 'accreditation', 'Broker Accreditation level does not permit contract creation')
        request.errors.status = 403
        raise error_handler(request.errors)
    return validate_data(request, model, data=data)
def validate_milestone_data(request, **kwargs):
    update_logging_context(request, {"milestone_id": "__new__"})
    model = type(request.plan).milestones.model_class
    milestone = validate_data(request, model)
    upload_objects_documents(
        request,
        request.validated["milestone"],
        route_kwargs={"milestone_id": request.validated["milestone"].id})
    return milestone
def validate_qualification_complaint_post_data(request):
    update_logging_context(request, {"post_id": "__new__"})
    validate_post_accreditation_level(request)
    model = type(request.tender).qualifications.model_class.complaints.model_class.posts.model_class
    post = validate_data(request, model)
    upload_objects_documents(
        request, request.validated["post"],
        route_kwargs={"post_id": request.validated["post"].id}
    )
    return post
def validate_tender_plan_data(request):
    data = validate_data(request, type(request.tender).plans.model_class)
    plan_id = data["id"]
    update_logging_context(request, {"plan_id": plan_id})

    plan = extract_plan_adapter(request, plan_id)
    with handle_data_exceptions(request):
        plan.validate()
    request.validated["plan"] = plan
    request.validated["plan_src"] = plan.serialize("plain")
def validate_patch_framework_data(request, **kwargs):
    data = validate_json_data(request)
    data = validate_data(request, type(request.framework), True, data)
    framework = request.validated["framework"]
    if framework.agreementID:
        agreement = get_agreement_by_id(request.registry.db, framework.agreementID)
        request.validated["agreement_src"] = agreement
        request.validated["agreement"] = Agreement(agreement)
        request.validated["agreement"].__parent__ = framework.__parent__
    return data
示例#25
0
def validate_qualification_data(request, **kwargs):
    update_logging_context(request, {"qualification_id": "__new__"})
    data = validate_json_data(request)
    model = request.qualification_from_data(data, create=False)
    data = validate_data(request, model, data=data)
    submission = get_submission_by_id(request, data["submissionID"])
    framework = get_framework_by_id(request, data["frameworkID"])
    request.validated["submission"] = submission
    request.validated["framework"] = framework
    return data
def validate_agreement_patch(request, **kwargs):
    data = validate_json_data(request)
    if data:
        if "features" in data:
            if apply_data_patch([f.serialize() for f in request.context.features], data["features"]):
                request.errors.add("body", "features", "Can't change features")
                request.errors.status = 403
                raise error_handler(request)

    return validate_data(request, type(request.agreement), True, data=data)
def validate_plan_data(request, **kwargs):
    update_logging_context(request, {"plan_id": "__new__"})
    data = validate_json_data(request)
    model = request.plan_from_data(data, create=False)
    _validate_plan_accreditation_level(request, model)
    data = validate_data(request, model, data=data)
    _validate_plan_availability(request)
    _validate_plan_accreditation_level_mode(request)
    _validate_tender_procurement_method_type(request)
    return data
def validate_tender_data(request):
    update_logging_context(request, {"tender_id": "__new__"})
    data = validate_json_data(request)
    model = request.tender_from_data(data, create=False)
    validate_tender_accreditation_level(request, model)
    validate_tender_accreditation_level_central(request, model)
    data = validate_data(request, model, data=data)
    validate_tender_accreditation_level_mode(request)
    validate_tender_kind(request, model)
    return data
def validate_patch_lot_data(request, error_handler, **kwargs):
    data = validate_json_data(request)
    editing_roles = request.content_configurator.available_statuses[request.context.status]['editing_permissions']
    if request.authenticated_role not in editing_roles:
        msg = 'Can\'t update {} in current ({}) status'.format(request.validated['resource_type'],
                                                               request.context.status)
        raise_operation_error(request, error_handler, msg)
    default_status = type(request.lot).fields['status'].default
    if data.get('status') == default_status and data.get('status') != request.context.status:
        raise_operation_error(request, error_handler, 'Can\'t switch lot to {} status'.format(default_status))
    return validate_data(request, type(request.lot), data=data)
示例#30
0
文件: validation.py 项目: lttga/op2
def validate_complaint_data_stage2(request):
    update_logging_context(request, {"complaint_id": "__new__"})
    validate_complaint_accreditation_level(request)
    data = validate_data(request, type(request.tender).complaints.model_class)
    if data:
        if validate_author(request, request.tender["shortlistedFirms"],
                           request.validated["complaint"]):
            return data  # validate is OK
        else:
            return None  # we catch errors
    return data
def validate_auction_data(request, **kwargs):
    update_logging_context(request, {'auction_id': '__new__'})

    data = validate_json_data(request)
    if data is None:
        return

    model = request.auction_from_data(data, create=False)
    validate_accreditations(request, model, 'auction')
    data = validate_data(request, model, "auction", data=data)
    validate_t_accreditation(request, data, 'auction')
def validate_plan_data(request):
    update_logging_context(request, {'plan_id': '__new__'})
    data = validate_json_data(request)
    if data is None:
        return
    model = request.plan_from_data(data, create=False)
    if hasattr(request, 'check_accreditation') \
            and not any([request.check_accreditation(acc) for acc in model.create_accreditations]):
        request.errors.add('plan', 'accreditation', 'Broker Accreditation level does not permit plan creation')
        request.errors.status = 403
        return
    return validate_data(request, model, data=data)
def validate_complaint_data(request):
    if not request.check_accreditation(request.tender.edit_accreditation):
        request.errors.add('procurementMethodType', 'accreditation', 'Broker Accreditation level does not permit complaint creation')
        request.errors.status = 403
        return
    if request.tender.get('mode', None) is None and request.check_accreditation('t'):
        request.errors.add('procurementMethodType', 'mode', 'Broker Accreditation level does not permit complaint creation')
        request.errors.status = 403
        return
    update_logging_context(request, {'complaint_id': '__new__'})
    model = type(request.context).complaints.model_class
    return validate_data(request, model)
def validate_patch_tender_data(request):
    data = validate_json_data(request)
    if request.context.status != 'draft':
        return validate_data(request, type(request.tender), True, data)
    default_status = type(request.tender).fields['status'].default
    if data.get('status') != default_status:
        request.errors.add('body', 'data',
                           'Can\'t update tender in current (draft) status')
        request.errors.status = 403
        raise error_handler(request.errors)
    request.validated['data'] = {'status': default_status}
    request.context.status = default_status
示例#35
0
文件: validation.py 项目: lttga/op2
def validate_post_question_data_stage2(request):
    update_logging_context(request, {"question_id": "__new__"})
    validate_question_accreditation_level(request)
    model = type(request.tender).questions.model_class
    data = validate_data(request, model)
    if data:
        if validate_author(request, request.tender["shortlistedFirms"],
                           request.validated["question"]):
            return data  # validate is OK
        else:
            return None  # we catch errors
    return data
def validate_complaint_data(request):
    if not request.check_accreditation(request.auction.edit_accreditation):
        request.errors.add('procurementMethodType', 'accreditation', 'Broker Accreditation level does not permit complaint creation')
        request.errors.status = 403
        return
    if request.auction.get('mode', None) is None and request.check_accreditation('t'):
        request.errors.add('procurementMethodType', 'mode', 'Broker Accreditation level does not permit complaint creation')
        request.errors.status = 403
        return
    update_logging_context(request, {'complaint_id': '__new__'})
    model = type(request.auction).complaints.model_class
    return validate_data(request, model)
def validate_complaint_data_stage2(request):
    if not request.check_accreditation(request.tender.edit_accreditation):
        request.errors.add('procurementMethodType', 'accreditation', 'Broker Accreditation level does not permit complaint creation')
        request.errors.status = 403
        raise error_handler(request.errors)
    if request.tender.get('mode', None) is None and request.check_accreditation('t'):
        request.errors.add('procurementMethodType', 'mode', 'Broker Accreditation level does not permit complaint creation')
        request.errors.status = 403
        raise error_handler(request.errors)

    update_logging_context(request, {'complaint_id': '__new__'})
    data = validate_data(request, type(request.tender).complaints.model_class)
    if data:
        if validate_author(request, request.tender['shortlistedFirms'], request.validated['complaint']):
            return data  # validate is OK
        else:
            return None  # we catch errors
    return data
def validate_patch_tender_ua_data(request):
    data = validate_json_data(request)
    items = request.context.items
    if data:
        if 'items' in data:
            cpv_group_lists = [i.classification.id[:3] for i in items]
            for item in data['items']:
                if 'classification' in item and 'id' in item['classification']:
                    cpv_group_lists.append(item['classification']['id'][:3])
            if len(set(cpv_group_lists)) != 1:
                request.errors.add('body', 'item', 'Can\'t change classification')
                request.errors.status = 403
                return None
        if 'enquiryPeriod' in data:
            if apply_data_patch(request.context.enquiryPeriod.serialize(), data['enquiryPeriod']):
                request.errors.add('body', 'item', 'Can\'t change enquiryPeriod')
                request.errors.status = 403
                return None

    return validate_data(request, request.tender.__class__, True, data)
def validate_patch_change_data(request):
    return validate_data(request, Change, True)
def validate_patch_plan_data(request):
    return validate_data(request, Plan, True)
def validate_change_data(request):
    update_logging_context(request, {'change_id': '__new__'})
    data = validate_json_data(request)
    return validate_data(request, Change, data=data)
def validate_patch_contract_data(request):
    return validate_data(request, Contract, True)
def validate_patch_award_data(request):
    return validate_data(request, Award, True)
def validate_patch_complaint_data(request):
    model = type(request.context.__parent__).complaints.model_class
    return validate_data(request, model, True)
def validate_complaint_data(request):
    update_logging_context(request, {'complaint_id': '__new__'})
    model = type(request.context).complaints.model_class
    return validate_data(request, model)
def validate_plan_data(request):
    update_logging_context(request, {'plan_id': '__new__'})
    return validate_data(request, Plan)
def validate_patch_qualification_data(request):
    return validate_data(request, Qualification, True)