Пример #1
0
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_