コード例 #1
0
 def put(self):
     """Tender Document Update"""
     tender = self.request.validated['tender']
     first_document = self.request.validated['documents'][0]
     if tender.status != 'active.enquiries':
         self.request.errors.add('body', 'data', 'Can\'t update document in current tender status')
         self.request.errors.status = 403
         return
     if self.request.content_type == 'multipart/form-data':
         data = self.request.validated['file']
         filename = data.filename
         content_type = data.type
         in_file = data.file
     else:
         filename = first_document.title
         content_type = self.request.content_type
         in_file = self.request.body_file
     document = Document()
     document.id = self.request.validated['id']
     document.title = filename
     document.format = content_type
     document.datePublished = first_document.datePublished
     key = generate_id()
     document.url = self.request.route_url('Tender Documents', tender_id=tender.id, id=document.id, _query={'download': key})
     src = tender.serialize("plain")
     tender.documents.append(document)
     upload_file(tender, document, key, in_file, self.request)
     save_tender(tender, src, self.request)
     return {'data': document.serialize("view")}
コード例 #2
0
 def put(self):
     """Tender Complaint Document Update"""
     tender = self.request.validated['tender']
     if tender.status not in ['active.enquiries', 'active.tendering', 'active.auction', 'active.qualification', 'active.awarded']:
         self.request.errors.add('body', 'data', 'Can\'t update document in current tender status')
         self.request.errors.status = 403
         return
     first_document = self.request.validated['documents'][0]
     src = tender.serialize("plain")
     if self.request.content_type == 'multipart/form-data':
         data = self.request.validated['file']
         filename = data.filename
         content_type = data.type
         in_file = data.file
     else:
         filename = first_document.title
         content_type = self.request.content_type
         in_file = self.request.body_file
     document = Document()
     document.id = self.request.matchdict['id']
     document.title = filename
     document.format = content_type
     document.datePublished = first_document.datePublished
     key = generate_id()
     document.url = self.request.route_url('Tender Complaint Documents', tender_id=tender.id, complaint_id=self.request.validated['complaint_id'], id=document.id, _query={'download': key})
     self.request.validated['complaint'].documents.append(document)
     upload_file(tender, document, key, in_file, self.request)
     save_tender(tender, src, self.request)
     return {'data': document.serialize("view")}
コード例 #3
0
 def collection_post(self):
     """Tender Bid Document Upload
     """
     tender = self.request.validated['tender']
     if tender.status not in [
             'active.tendering', 'active.auction', 'active.qualification'
     ]:
         self.request.errors.add(
             'body', 'data', 'Can\'t add document in current tender status')
         self.request.errors.status = 403
         return
     src = tender.serialize("plain")
     data = self.request.validated['file']
     document = Document()
     document.id = generate_id()
     document.title = data.filename
     document.format = data.type
     key = generate_id()
     document.url = self.request.route_url(
         'Tender Bid Documents',
         tender_id=tender.id,
         bid_id=self.request.validated['bid_id'],
         id=document.id,
         _query={'download': key})
     self.request.validated['bid'].documents.append(document)
     upload_file(tender, document, key, data.file, self.request)
     save_tender(tender, src, self.request)
     self.request.response.status = 201
     self.request.response.headers['Location'] = self.request.route_url(
         'Tender Bid Documents',
         tender_id=tender.id,
         bid_id=self.request.validated['bid_id'],
         id=document.id)
     return {'data': document.serialize("view")}
コード例 #4
0
def upload_file(request):
    first_document = request.validated['documents'][0] if 'documents' in request.validated and request.validated['documents'] else None
    if request.content_type == 'multipart/form-data':
        data = request.validated['file']
        filename = get_filename(data)
        content_type = data.type
        in_file = data.file
    else:
        filename = first_document.title
        content_type = request.content_type
        in_file = request.body_file
    document = Document({
        'title': filename,
        'format': content_type
    })
    document.__parent__ = request.context
    if 'document_id' in request.validated:
        document.id = request.validated['document_id']
    if first_document:
        document.datePublished = first_document.datePublished
    key = generate_id()
    document_route = request.matched_route.name.replace("collection_", "")
    document_path = request.current_route_path(_route_name=document_route, document_id=document.id, _query={'download': key})
    document.url = '/tenders' + document_path.split('/tenders', 1)[1]
    conn = getattr(request.registry, 's3_connection', None)
    if conn:
        bucket = conn.get_bucket(request.registry.bucket_name)
        filename = "{}/{}/{}".format(request.validated['tender_id'], document.id, key)
        key = bucket.new_key(filename)
        key.set_metadata('Content-Type', document.format)
        key.set_metadata("Content-Disposition", build_header(document.title, filename_compat=quote(document.title.encode('utf-8'))))
        key.set_contents_from_file(in_file)
        key.set_acl('private')
    else:
        filename = "{}_{}".format(document.id, key)
        request.validated['tender']['_attachments'][filename] = {
            "content_type": document.format,
            "data": b64encode(in_file.read())
        }
    return document
コード例 #5
0
ファイル: utils.py プロジェクト: dvlsoft/openprocurement.api
def upload_file(request):
    first_document = request.validated['documents'][0] if 'documents' in request.validated and request.validated['documents'] else None
    if request.content_type == 'multipart/form-data':
        data = request.validated['file']
        filename = get_filename(data)
        content_type = data.type
        in_file = data.file
    else:
        filename = first_document.title
        content_type = request.content_type
        in_file = request.body_file
    document = Document({
        'title': filename,
        'format': content_type
    })
    if 'document_id' in request.validated:
        document.id = request.validated['document_id']
    if first_document:
        document.datePublished = first_document.datePublished
    key = generate_id()
    document_route = request.matched_route.name.replace("collection_", "")
    document_path = request.current_route_path(_route_name=document_route, document_id=document.id, _query={'download': key})
    document.url = '/tenders' + document_path.split('/tenders', 1)[1]
    conn = getattr(request.registry, 's3_connection', None)
    if conn:
        bucket = conn.get_bucket(request.registry.bucket_name)
        filename = "{}/{}/{}".format(request.validated['tender_id'], document.id, key)
        key = bucket.new_key(filename)
        key.set_metadata('Content-Type', document.format)
        key.set_metadata("Content-Disposition", build_header(document.title, filename_compat=quote(document.title.encode('utf-8'))))
        key.set_contents_from_file(in_file)
        key.set_acl('private')
    else:
        filename = "{}_{}".format(document.id, key)
        request.validated['tender']['_attachments'][filename] = {
            "content_type": document.format,
            "data": b64encode(in_file.read())
        }
    return document
コード例 #6
0
 def collection_post(self):
     """Tender Document Upload"""
     tender = self.request.validated['tender']
     if tender.status != 'active.enquiries':
         self.request.errors.add('body', 'data', 'Can\'t add document in current tender status')
         self.request.errors.status = 403
         return
     src = tender.serialize("plain")
     data = self.request.validated['file']
     document = Document()
     document.id = generate_id()
     document.title = data.filename
     document.format = data.type
     key = generate_id()
     document.url = self.request.route_url('Tender Documents', tender_id=tender.id, id=document.id, _query={'download': key})
     tender.documents.append(document)
     upload_file(tender, document, key, data.file, self.request)
     save_tender(tender, src, self.request)
     self.request.response.status = 201
     self.request.response.headers['Location'] = self.request.route_url('Tender Documents', tender_id=tender.id, id=document.id)
     return {'data': document.serialize("view")}