class BrutalBankProtocol(BasicBankProtocol): def __init__(self): self.handlers = {} self.handlers['list_services'] = self.list_services self.handlers['list_buyable_services'] = self.list_buyable_services self.handlers['request_service'] = self.request_service self.handlers['request_loan'] = self.request_loan self.handlers['buy_service'] = self.buy_service self.handlers['user_data'] = self.user_data self.handlers['request_history'] = self.request_history self.handlers['rate_history_event'] = self.rate_history_event self.db = DB() @handlermethod def list_services(self, protocol, request): id_ = self._get_user_id(request) return self.db.get_services(id_) @handlermethod def list_buyable_services(self, protocol, request): id_ = self._get_user_id(request) return self.db.get_buyable_services(id_) @handlermethod @store_in_history def request_service(self, protocol, request): id_ = self._get_user_id(request) if 'service_id' not in request: return {'error': 'No service id'} return self.db.request_service(id_, request['service_id']) @handlermethod def user_data(self, protocol, request): id_ = self._get_user_id(request) return self.db.get_user_info(id_) @handlermethod @store_in_history def buy_service(self, protocol, request): id_ = self._get_user_id(request) if 'service_id' not in request: return {'error': 'No service id'} return self.db.buy_service(id_, request['service_id']) @handlermethod @store_in_history def request_loan(self, protocol, request): id_ = self._get_user_id(request) if 'amount' not in request: return {'error': 'No amount'} return self.db.request_loan(id_, request['amount']) @handlermethod def request_history(self, protocol, request): id_ = self._get_user_id(request) return self.db.request_history(id_) @handlermethod def rate_history_event(self, protocol, request): id_ = self._get_user_id(request) if 'event_id' not in request and 'stars' not in request: return {'error': 'No event id or stars'} return self.db.rate_history_event(id_, request['event_id'], request['stars']) def _get_user_id(self, request): if 'id' in request and request['id'] in self.db.users.keys(): return request['id'] return self.db.get_user_id(request['login'], request['pass']).id_