Skip to content

Commit

Permalink
Fixed saving and logging
Browse files Browse the repository at this point in the history
  • Loading branch information
kroman0 committed Jan 16, 2015
1 parent 0d7b2f7 commit c4f4503
Show file tree
Hide file tree
Showing 16 changed files with 228 additions and 230 deletions.
4 changes: 3 additions & 1 deletion src/openprocurement/api/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from openprocurement.api.migration import migrate_data
from boto.s3.connection import S3Connection, Location
from openprocurement.api.traversal import factory
from openprocurement.api.models import get_now

try:
from systemd.journal import JournalHandler
Expand Down Expand Up @@ -44,6 +45,7 @@ def set_journal_handler(event):
'DOCUMENT_ID': '',
'QUESTION_ID': '',
'TENDER_ID': '',
'TIMESTAMP': get_now().isoformat(),
}
if event.request.params:
params['PARAMS'] = str(dict(event.request.params))
Expand Down Expand Up @@ -120,7 +122,7 @@ def fix_url(item, app_url):
def beforerender(event):
for i in LOGGER.handlers:
LOGGER.removeHandler(i)
if 'data' in event.rendering_val:
if event.rendering_val and 'data' in event.rendering_val:
fix_url(event.rendering_val['data'], event['request'].application_url)


Expand Down
4 changes: 3 additions & 1 deletion src/openprocurement/api/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,8 @@ def save_tender(request):
request.errors.status = 422
except Exception, e:
request.errors.add('body', 'data', str(e))
finally:
return True


def apply_patch(request, data=None, save=True, src=None):
Expand All @@ -166,7 +168,7 @@ def apply_patch(request, data=None, save=True, src=None):
if patch:
request.context.import_data(patch)
if save:
save_tender(request)
return save_tender(request)


def add_next_award(request):
Expand Down
12 changes: 6 additions & 6 deletions src/openprocurement/api/views/auction.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,9 +84,9 @@ def get_auction(request):
def patch_auction(request):
"""Set urls for access to auction.
"""
apply_patch(request, src=request.validated['tender_src'])
LOGGER.info('Updated auction urls', extra={'MESSAGE_ID': 'tender_auction_patch'})
return {'data': request.validated['tender'].serialize("auction_view")}
if apply_patch(request, src=request.validated['tender_src']):
LOGGER.info('Updated auction urls', extra={'MESSAGE_ID': 'tender_auction_patch'})
return {'data': request.validated['tender'].serialize("auction_view")}


@auction.post(content_type="application/json", permission='auction', validators=(validate_tender_auction_data), renderer='json')
Expand Down Expand Up @@ -163,6 +163,6 @@ def post_auction(request):
"""
apply_patch(request, save=False, src=request.validated['tender_src'])
add_next_award(request)
save_tender(request)
LOGGER.info('Report auction results', extra={'MESSAGE_ID': 'tender_auction_post'})
return {'data': request.context.serialize(request.context.status)}
if save_tender(request):
LOGGER.info('Report auction results', extra={'MESSAGE_ID': 'tender_auction_post'})
return {'data': request.context.serialize(request.context.status)}
34 changes: 16 additions & 18 deletions src/openprocurement/api/views/award.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from cornice.resource import resource, view
from openprocurement.api.models import Award, Contract, get_now
from openprocurement.api.utils import (
apply_data_patch,
apply_patch,
save_tender,
add_next_award,
error_handler,
Expand Down Expand Up @@ -172,11 +172,11 @@ def collection_post(self):
award_data = self.request.validated['data']
award = Award(award_data)
tender.awards.append(award)
save_tender(self.request)
LOGGER.info('Created tender award {}'.format(award.id), extra={'MESSAGE_ID': 'tender_award_create'})
self.request.response.status = 201
self.request.response.headers['Location'] = self.request.route_url('Tender Awards', tender_id=tender.id, award_id=award['id'])
return {'data': award.serialize("view")}
if save_tender(self.request):
LOGGER.info('Created tender award {}'.format(award.id), extra={'MESSAGE_ID': 'tender_award_create'})
self.request.response.status = 201
self.request.response.headers['Location'] = self.request.route_url('Tender Awards', tender_id=tender.id, award_id=award['id'])
return {'data': award.serialize("view")}

@view(renderer='json', permission='view_tender')
def get(self):
Expand Down Expand Up @@ -293,20 +293,18 @@ def patch(self):
self.request.errors.add('body', 'data', 'Can\'t update award in current ({}) tender status'.format(tender.status))
self.request.errors.status = 403
return
award = self.request.validated['award']
award = self.request.context
if award.status != 'pending':
self.request.errors.add('body', 'data', 'Can\'t update award in current ({}) status'.format(award.status))
self.request.errors.status = 403
return
award_data = self.request.validated['data']
if award_data:
award.import_data(apply_data_patch(award.serialize(), award_data))
if award.status == 'active':
award.contracts.append(Contract({'awardID': award.id}))
tender.awardPeriod.endDate = get_now()
tender.status = 'active.awarded'
elif award.status == 'unsuccessful':
add_next_award(self.request)
save_tender(self.request)
apply_patch(self.request, save=False, src=self.request.context.serialize())
if award.status == 'active':
award.contracts.append(Contract({'awardID': award.id}))
tender.awardPeriod.endDate = get_now()
tender.status = 'active.awarded'
elif award.status == 'unsuccessful':
add_next_award(self.request)
if save_tender(self.request):
LOGGER.info('Updated tender award {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_patch'})
return {'data': award.serialize("view")}
return {'data': award.serialize("view")}
100 changes: 49 additions & 51 deletions src/openprocurement/api/views/award_complaint.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from cornice.resource import resource, view
from openprocurement.api.models import Complaint, STAND_STILL_TIME, get_now
from openprocurement.api.utils import (
apply_data_patch,
apply_patch,
save_tender,
add_next_award,
error_handler,
Expand Down Expand Up @@ -40,11 +40,11 @@ def collection_post(self):
complaint_data = self.request.validated['data']
complaint = Complaint(complaint_data)
self.request.validated['award'].complaints.append(complaint)
save_tender(self.request)
LOGGER.info('Created tender award complaint {}'.format(complaint.id), extra={'MESSAGE_ID': 'tender_award_complaint_create'})
self.request.response.status = 201
self.request.response.headers['Location'] = self.request.route_url('Tender Award Complaints', tender_id=tender.id, award_id=self.request.validated['award_id'], complaint_id=complaint['id'])
return {'data': complaint.serialize("view")}
if save_tender(self.request):
LOGGER.info('Created tender award complaint {}'.format(complaint.id), extra={'MESSAGE_ID': 'tender_award_complaint_create'})
self.request.response.status = 201
self.request.response.headers['Location'] = self.request.route_url('Tender Award Complaints', tender_id=tender.id, award_id=self.request.validated['award_id'], complaint_id=complaint['id'])
return {'data': complaint.serialize("view")}

@view(renderer='json', permission='view_tender')
def collection_get(self):
Expand All @@ -67,56 +67,54 @@ def patch(self):
self.request.errors.add('body', 'data', 'Can\'t update complaint in current ({}) tender status'.format(tender.status))
self.request.errors.status = 403
return
complaint = self.request.validated['complaint']
complaint = self.request.context
if complaint.status != 'pending':
self.request.errors.add('body', 'data', 'Can\'t update complaint in current ({}) status'.format(complaint.status))
self.request.errors.status = 403
return
complaint_data = self.request.validated['data']
if complaint_data:
if complaint_data.get('status', '') == 'cancelled':
self.request.errors.add('body', 'data', 'Can\'t cancel complaint')
self.request.errors.status = 403
return
complaint.import_data(apply_data_patch(complaint.serialize(), complaint_data))
if complaint.status == 'resolved':
award = self.request.validated['award']
if tender.status == 'active.awarded':
tender.status = 'active.qualification'
tender.awardPeriod.endDate = None
if award.status == 'unsuccessful':
for i in tender.awards[tender.awards.index(award):]:
i.status = 'cancelled'
for j in i.complaints:
if j.status == 'pending':
j.status = 'cancelled'
for i in award.contracts:
apply_patch(self.request, save=False, src=complaint.serialize())
if complaint.status == 'cancelled':
self.request.errors.add('body', 'data', 'Can\'t cancel complaint')
self.request.errors.status = 403
return
if complaint.status == 'resolved':
award = self.request.validated['award']
if tender.status == 'active.awarded':
tender.status = 'active.qualification'
tender.awardPeriod.endDate = None
if award.status == 'unsuccessful':
for i in tender.awards[tender.awards.index(award):]:
i.status = 'cancelled'
award.status = 'cancelled'
add_next_award(self.request)
elif complaint.status in ['declined', 'invalid'] and tender.status == 'active.awarded':
pending_complaints = [
i
for i in tender.complaints
if i.status == 'pending'
]
pending_awards_complaints = [
i
for j in i.complaints:
if j.status == 'pending':
j.status = 'cancelled'
for i in award.contracts:
i.status = 'cancelled'
award.status = 'cancelled'
add_next_award(self.request)
elif complaint.status in ['declined', 'invalid'] and tender.status == 'active.awarded':
pending_complaints = [
i
for i in tender.complaints
if i.status == 'pending'
]
pending_awards_complaints = [
i
for a in tender.awards
for i in a.complaints
if i.status == 'pending'
]
stand_still_time_expired = tender.awardPeriod.endDate + STAND_STILL_TIME < get_now()
if not pending_complaints and not pending_awards_complaints and stand_still_time_expired:
active_awards = [
a
for a in tender.awards
for i in a.complaints
if i.status == 'pending'
if a.status == 'active'
]
stand_still_time_expired = tender.awardPeriod.endDate + STAND_STILL_TIME < get_now()
if not pending_complaints and not pending_awards_complaints and stand_still_time_expired:
active_awards = [
a
for a in tender.awards
if a.status == 'active'
]
if active_awards:
tender.status = 'complete'
else:
tender.status = 'unsuccessful'
save_tender(self.request)
if active_awards:
tender.status = 'complete'
else:
tender.status = 'unsuccessful'
if save_tender(self.request):
LOGGER.info('Updated tender award complaint {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_complaint_patch'})
return {'data': complaint.serialize("view")}
return {'data': complaint.serialize("view")}
24 changes: 12 additions & 12 deletions src/openprocurement/api/views/award_complaint_document.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,12 @@ def collection_post(self):
return
document = upload_file(self.request)
self.request.validated['complaint'].documents.append(document)
save_tender(self.request)
LOGGER.info('Created tender award complaint document {}'.format(document.id), extra={'MESSAGE_ID': 'tender_award_complaint_document_create'})
self.request.response.status = 201
document_route = self.request.matched_route.name.replace("collection_", "")
self.request.response.headers['Location'] = self.request.current_route_url(_route_name=document_route, document_id=document.id, _query={})
return {'data': document.serialize("view")}
if save_tender(self.request):
LOGGER.info('Created tender award complaint document {}'.format(document.id), extra={'MESSAGE_ID': 'tender_award_complaint_document_create'})
self.request.response.status = 201
document_route = self.request.matched_route.name.replace("collection_", "")
self.request.response.headers['Location'] = self.request.current_route_url(_route_name=document_route, document_id=document.id, _query={})
return {'data': document.serialize("view")}

@view(renderer='json', permission='view_tender')
def get(self):
Expand All @@ -82,9 +82,9 @@ def put(self):
return
document = upload_file(self.request)
self.request.validated['complaint'].documents.append(document)
save_tender(self.request)
LOGGER.info('Updated tender award complaint document {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_complaint_document_put'})
return {'data': document.serialize("view")}
if save_tender(self.request):
LOGGER.info('Updated tender award complaint document {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_complaint_document_put'})
return {'data': document.serialize("view")}

@view(renderer='json', validators=(validate_patch_document_data,), permission='review_complaint')
def patch(self):
Expand All @@ -93,6 +93,6 @@ def patch(self):
self.request.errors.add('body', 'data', 'Can\'t update document in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
apply_patch(self.request, src=self.request.context.serialize())
LOGGER.info('Updated tender award complaint document {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_complaint_document_patch'})
return {'data': self.request.context.serialize("view")}
if apply_patch(self.request, src=self.request.context.serialize()):
LOGGER.info('Updated tender award complaint document {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_complaint_document_patch'})
return {'data': self.request.context.serialize("view")}
16 changes: 8 additions & 8 deletions src/openprocurement/api/views/award_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ def collection_post(self):
contract = Contract(contract_data)
contract.awardID = self.request.validated['award_id']
self.request.validated['award'].contracts.append(contract)
save_tender(self.request)
LOGGER.info('Created tender award contract {}'.format(contract.id), extra={'MESSAGE_ID': 'tender_award_contract_create'})
self.request.response.status = 201
self.request.response.headers['Location'] = self.request.route_url('Tender Award Contracts', tender_id=tender.id, award_id=self.request.validated['award_id'], contract_id=contract['id'])
return {'data': contract.serialize()}
if save_tender(self.request):
LOGGER.info('Created tender award contract {}'.format(contract.id), extra={'MESSAGE_ID': 'tender_award_contract_create'})
self.request.response.status = 201
self.request.response.headers['Location'] = self.request.route_url('Tender Award Contracts', tender_id=tender.id, award_id=self.request.validated['award_id'], contract_id=contract['id'])
return {'data': contract.serialize()}

@view(renderer='json', permission='view_tender')
def collection_get(self):
Expand All @@ -66,6 +66,6 @@ def patch(self):
self.request.errors.add('body', 'data', 'Can\'t update contract in current ({}) tender status'.format(self.request.validated['tender_status']))
self.request.errors.status = 403
return
apply_patch(self.request, src=self.request.context.serialize())
LOGGER.info('Updated tender award contract {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_contract_patch'})
return {'data': self.request.context.serialize()}
if apply_patch(self.request, src=self.request.context.serialize()):
LOGGER.info('Updated tender award contract {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_contract_patch'})
return {'data': self.request.context.serialize()}
24 changes: 12 additions & 12 deletions src/openprocurement/api/views/award_contract_document.py
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,12 @@ def collection_post(self):
return
document = upload_file(self.request)
self.request.validated['contract'].documents.append(document)
save_tender(self.request)
LOGGER.info('Created tender award contract document {}'.format(document.id), extra={'MESSAGE_ID': 'tender_award_contract_document_create'})
self.request.response.status = 201
document_route = self.request.matched_route.name.replace("collection_", "")
self.request.response.headers['Location'] = self.request.current_route_url(_route_name=document_route, document_id=document.id, _query={})
return {'data': document.serialize("view")}
if save_tender(self.request):
LOGGER.info('Created tender award contract document {}'.format(document.id), extra={'MESSAGE_ID': 'tender_award_contract_document_create'})
self.request.response.status = 201
document_route = self.request.matched_route.name.replace("collection_", "")
self.request.response.headers['Location'] = self.request.current_route_url(_route_name=document_route, document_id=document.id, _query={})
return {'data': document.serialize("view")}

@view(renderer='json', permission='view_tender')
def get(self):
Expand Down Expand Up @@ -92,9 +92,9 @@ def put(self):
return
document = upload_file(self.request)
self.request.validated['contract'].documents.append(document)
save_tender(self.request)
LOGGER.info('Updated tender award contract document {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_contract_document_put'})
return {'data': document.serialize("view")}
if save_tender(self.request):
LOGGER.info('Updated tender award contract document {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_contract_document_put'})
return {'data': document.serialize("view")}

@view(renderer='json', validators=(validate_patch_document_data,), permission='edit_tender')
def patch(self):
Expand All @@ -107,6 +107,6 @@ def patch(self):
self.request.errors.add('body', 'data', 'Can\'t update document in current contract status')
self.request.errors.status = 403
return
apply_patch(self.request, src=self.request.context.serialize())
LOGGER.info('Updated tender award contract document {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_contract_document_patch'})
return {'data': self.request.context.serialize("view")}
if apply_patch(self.request, src=self.request.context.serialize()):
LOGGER.info('Updated tender award contract document {}'.format(self.request.context.id), extra={'MESSAGE_ID': 'tender_award_contract_document_patch'})
return {'data': self.request.context.serialize("view")}

0 comments on commit c4f4503

Please sign in to comment.