def change_lot(self, request): self._validate(request, self.change_validation) if request.authenticated_role == 'chronograph': apply_patch(request, save=False, src=request.validated['lot_src']) check_status(request) save_lot(request) elif request.validated['data'].get('status') == 'pending' and not request.context.rectificationPeriod: self._set_rectificationPeriod(request)
def change_lot(self, request): self._validate(request, self.change_validation) if request.authenticated_role == 'chronograph': apply_patch(request, save=False, src=request.validated['lot_src']) check_status(request) save_lot(request) elif request.validated['data'].get( 'status' ) == 'pending' and not request.context.rectificationPeriod: self._set_rectificationPeriod(request) if request.authenticated_role in ('concierge', 'Administrator'): process_lot_status_change(request) request.validated['lot_src'] = self.context.serialize('plain')
def post(self): """This API request is targeted to creating new Lot.""" lot_id = generate_id() lot = self.request.validated['lot'] lot.id = lot_id if not lot.get('lotID'): lot.lotID = generate_lot_id(get_now(), self.db, self.server_id) self.request.registry.notify(LotInitializeEvent(lot)) default_status = type(lot).fields['status'].default status = self.request.json_body['data'].get('status', default_status) if status == 'draft': lot.status = status else: self.request.errors.add('body', 'status', 'You can create only in draft status') self.request.errors.status = 403 return acc = set_ownership(lot, self.request) self.request.validated['lot'] = lot self.request.validated['lot_src'] = {} if save_lot(self.request): self.LOGGER.info('Created lot {} ({})'.format(lot_id, lot.lotID), extra=context_unpack(self.request, {'MESSAGE_ID': 'lot_create'}, { 'lot_id': lot_id, 'lotID': lot.lotID })) self.request.response.status = 201 self.request.response.headers['Location'] = self.request.route_url( '{}:Lot'.format(lot.lotType), lot_id=lot_id) return {'data': lot.serialize(lot.status), 'access': acc}
def test_when_get_revision_changes_return_none(self, mocked_set_modetest_titles, mocked_store_lot, mocked_get_revision_changes): self.mocked_lot.mode = u'notTest' mocked_get_revision_changes.side_effect = iter([None]) self.mocked_lot.serialize.side_effect = iter([lot_serialize]) self.mocked_request.validated = {'lot': self.mocked_lot, 'lot_src': self.lot_src} save_lot(self.mocked_request) assert mocked_set_modetest_titles.call_count == 0 assert mocked_get_revision_changes.call_count == 1 mocked_get_revision_changes.assert_called_with(lot_serialize, self.lot_src) assert self.mocked_lot.serialize.call_count == 1 self.mocked_lot.serialize.assert_called_with('plain') assert mocked_store_lot.call_count == 0
def post(self): """This API request is targeted to creating new Lot.""" lot_id = generate_id() lot = self.request.validated['lot'] lot.id = lot_id if not lot.get('lotID'): lot.lotID = generate_lot_id(get_now(), self.db, self.server_id) self.request.registry.notify(LotInitializeEvent(lot)) if self.request.json_body['data'].get('status') == 'draft': lot.status = 'draft' set_ownership(lot, self.request) # rewrite as subscriber? self.request.validated['lot'] = lot self.request.validated['lot_src'] = {} if save_lot(self.request): self.LOGGER.info('Created lot {} ({})'.format(lot_id, lot.lotID), extra=context_unpack(self.request, {'MESSAGE_ID': 'lot_create'}, { 'lot_id': lot_id, 'lotID': lot.lotID })) self.request.response.status = 201 self.request.response.headers['Location'] = self.request.route_url( '{}:Lot'.format(lot.lotType), lot_id=lot_id) return { 'data': lot.serialize(lot.status), 'access': { 'token': lot.owner_token } }
def test_mode_equal_test(self, mocked_set_modetest_titles, mocked_store_lot, mocked_get_revision_changes): self.mocked_lot.mode = u'test' mocked_get_revision_changes.side_effect = iter([self.patch]) self.mocked_lot.serialize.side_effect = iter([lot_serialize]) self.mocked_request.validated = {'lot': self.mocked_lot, 'lot_src': self.lot_src} save_lot(self.mocked_request) assert mocked_set_modetest_titles.call_count == 1 mocked_set_modetest_titles.assert_called_with(self.mocked_lot) assert mocked_get_revision_changes.call_count == 1 mocked_get_revision_changes.assert_called_with(lot_serialize, self.lot_src) assert self.mocked_lot.serialize.call_count == 1 self.mocked_lot.serialize.assert_called_with('plain') assert mocked_store_lot.call_count == 1 mocked_store_lot.assert_called_with(self.mocked_lot, self.patch, self.mocked_request)
def put(self): """Auction Document Update""" document = self.request.validated['document'] self.request.validated['auction'].documents.append(document) if save_lot(self.request): self.LOGGER.info( 'Updated auction document {}'.format(self.request.context.id), extra=context_unpack(self.request, {'MESSAGE_ID': 'auction_document_put'})) return {'data': document.serialize("view")}
def patch(self): """Lot Contract Update""" apply_patch(self.request, save=False, src=self.request.context.serialize()) if self.request.authenticated_role == 'caravan': process_caravan_contract_report_result(self.request) if save_lot(self.request): self.LOGGER.info( 'Updated lot contract {}'.format(self.request.context.id), extra=context_unpack(self.request, {'MESSAGE_ID': 'lot_contract_patch'}) ) return {'data': self.request.context.serialize("view")}
def post(self): lot = self.request.validated['lot'] location = self.request.route_path('Lot', lot_id=lot.id) location = location[len(ROUTE_PREFIX):] # strips /api/<version> ownership_changed = self.request.change_ownership(location) if ownership_changed and save_lot(self.request): self.LOGGER.info('Updated ownership of lot {}'.format(lot.id), extra=context_unpack( self.request, {'MESSAGE_ID': 'auction_ownership_update'})) return {'data': self.request.context.serialize('view')}
def patch(self): """Lot Auction Update""" apply_patch(self.request, save=False, src=self.request.context.serialize()) if self.request.authenticated_role == 'convoy': process_convoy_auction_report_result(self.request) elif self.request.authenticated_role == 'concierge': process_concierge_auction_status_change(self.request) if save_lot(self.request): self.LOGGER.info( 'Updated lot auction {}'.format(self.request.context.id), extra=context_unpack(self.request, {'MESSAGE_ID': 'lot_auction_patch'}) ) return {'data': self.request.context.serialize("view")}
def collection_post(self): """Lot Item Upload""" item = self.request.validated['item'] self.context.items.append(item) if save_lot(self.request): self.LOGGER.info( 'Created lot item {}'.format(item.id), extra=context_unpack(self.request, {'MESSAGE_ID': 'lot_item_create'}, {'item_id': item.id})) self.request.response.status = 201 item_route = self.request.matched_route.name.replace( "collection_", "") self.request.response.headers[ 'Location'] = self.request.current_route_url( _route_name=item_route, item_id=item.id, _query={}) return {'data': item.serialize("view")}
def collection_post(self): """Lot Document Upload""" document = self.request.validated['document'] document.author = self.request.authenticated_role self.context.documents.append(document) if save_lot(self.request): self.LOGGER.info( 'Created lot document {}'.format(document.id), extra=context_unpack(self.request, {'MESSAGE_ID': 'lot_document_create'}, {'document_id': document.id}) ) 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")}
def collection_post(self): """Lot Decision Upload""" decision = self.request.validated['decision'] self.context.decisions.append(decision) if save_lot(self.request): self.LOGGER.info( 'Created lot decision {}'.format(decision.id), extra=context_unpack(self.request, {'MESSAGE_ID': 'lot_decision_create'}, {'decision_id': decision.id})) self.request.response.status = 201 decision_route = self.request.matched_route.name.replace( "collection_", "") self.request.response.headers[ 'Location'] = self.request.current_route_url( _route_name=decision_route, decision_id=decision.id, _query={}) return {'data': decision.serialize("view")}
def delete(self, request): self.lot.relatedProcesses.remove(request.validated['relatedProcess']) self.lot.modified = False return save_lot(request)
def create(self, request): self.lot.relatedProcesses.append(request.validated['relatedProcess']) return save_lot(request)