def factory(request):
    request.validated['tender_src'] = {}
    root = Root(request)
    if not request.matchdict or not request.matchdict.get('tender_id'):
        return root
    request.validated['tender_id'] = request.matchdict['tender_id']
    tender = Tender.load(root.db, request.matchdict['tender_id'])
    if not tender:
        request.errors.add('url', 'tender_id', 'Not Found')
        request.errors.status = 404
        raise error_handler(request.errors)
    tender.__parent__ = root
    request.validated['tender'] = tender
    request.validated['tender_status'] = tender.status
    if request.method != 'GET':
        request.validated['tender_src'] = tender.serialize('plain')
    if request.matchdict.get('award_id'):
        award = get_item(tender, 'award', request, root)
        if request.matchdict.get('complaint_id'):
            complaint = get_item(award, 'complaint', request, root)
            if request.matchdict.get('document_id'):
                return get_item(complaint, 'document', request, root)
            else:
                return complaint
        elif request.matchdict.get('document_id'):
            return get_item(award, 'document', request, root)
        else:
            return award
    elif request.matchdict.get('contract_id'):
        contract = get_item(tender, 'contract', request, root)
        if request.matchdict.get('document_id'):
            return get_item(contract, 'document', request, root)
        else:
            return contract
    elif request.matchdict.get('bid_id'):
        bid = get_item(tender, 'bid', request, root)
        if request.matchdict.get('document_id'):
            return get_item(bid, 'document', request, root)
        else:
            return bid
    elif request.matchdict.get('complaint_id'):
        complaint = get_item(tender, 'complaint', request, root)
        if request.matchdict.get('document_id'):
            return get_item(complaint, 'document', request, root)
        else:
            return complaint
    elif request.matchdict.get('cancellation_id'):
        cancellation = get_item(tender, 'cancellation', request, root)
        if request.matchdict.get('document_id'):
            return get_item(cancellation, 'document', request, root)
        else:
            return cancellation
    elif request.matchdict.get('document_id'):
        return get_item(tender, 'document', request, root)
    elif request.matchdict.get('question_id'):
        return get_item(tender, 'question', request, root)
    elif request.matchdict.get('lot_id'):
        return get_item(tender, 'lot', request, root)
    request.validated['id'] = request.matchdict['tender_id']
    return tender
def validate_tender_exists(request, key='id'):
    tender = request.matchdict.get(key) and Tender.load(request.registry.db, request.matchdict[key])
    if tender:
        request.validated[key] = request.matchdict[key]
        request.validated['tender'] = tender
        return tender
    else:
        request.errors.add('url', key, 'Not Found')
        request.errors.status = 404
Esempio n. 3
0
def factory(request):
    request.validated['tender_src'] = {}
    root = Root(request)
    if not request.matchdict or not request.matchdict.get('tender_id'):
        return root
    request.validated['tender_id'] = request.matchdict['tender_id']
    tender = Tender.load(root.db, request.matchdict['tender_id'])
    if not tender:
        request.errors.add('url', 'tender_id', 'Not Found')
        request.errors.status = 404
        raise error_handler(request.errors)
    tender.__parent__ = root
    request.validated['tender'] = tender
    request.validated['tender_status'] = tender.status
    if request.method != 'GET':
        request.validated['tender_src'] = tender.serialize('plain')
    if request.matchdict.get('award_id'):
        award = get_item(tender, 'award', request, root)
        if request.matchdict.get('complaint_id'):
            complaint = get_item(award, 'complaint', request, root)
            if request.matchdict.get('document_id'):
                return get_item(complaint, 'document', request, root)
            else:
                return complaint
        elif request.matchdict.get('contract_id'):
            contract = get_item(award, 'contract', request, root)
            if request.matchdict.get('document_id'):
                return get_item(contract, 'document', request, root)
            else:
                return contract
        elif request.matchdict.get('document_id'):
            return get_item(award, 'document', request, root)
        else:
            return award
    elif request.matchdict.get('bid_id'):
        bid = get_item(tender, 'bid', request, root)
        if request.matchdict.get('document_id'):
            return get_item(bid, 'document', request, root)
        else:
            return bid
    elif request.matchdict.get('complaint_id'):
        complaint = get_item(tender, 'complaint', request, root)
        if request.matchdict.get('document_id'):
            return get_item(complaint, 'document', request, root)
        else:
            return complaint
    elif request.matchdict.get('document_id'):
        return get_item(tender, 'document', request, root)
    elif request.matchdict.get('question_id'):
        return get_item(tender, 'question', request, root)
    request.validated['id'] = request.matchdict['tender_id']
    return tender