def test_has_lot(self): self.assertTrue( logic.has_lot(account_id=self.account_1.id, good_uid=self.good_1.uid)) self.assertFalse( logic.has_lot(account_id=666, good_uid=self.good_1.uid)) self.assertFalse( logic.has_lot(account_id=self.account_1.id, good_uid='666')) self.assertFalse(logic.has_lot(account_id=666, good_uid='666'))
def new_dialog(context): if logic.has_lot(context.account.id, context.good.uid): raise dext_utils_exceptions.ViewError(code='lot_exists', message='Вы уже выставили этот предмет на продажу') return dext_views.Page('market/new_dialog.html', content={'context': context, 'form': forms.PriceForm(initial={'price': conf.settings.MINIMUM_PRICE}), 'resource': context.resource, 'commission': conf.settings.COMMISSION})
def create(context): if logic.has_lot(context.account.id, context.good.uid): raise dext_utils_exceptions.ViewError( code='lot_exists', message=u'Вы уже выставили этот предмет на продажу') task = logic.send_good_to_market(seller_id=context.account.id, good=context.good, price=context.form.c.price) return dext_views.AjaxProcessing(status_url=task.status_url)
def new_dialog(context): if logic.has_lot(context.account.id, context.good.uid): raise dext_utils_exceptions.ViewError( code='lot_exists', message=u'Вы уже выставили этот предмет на продажу') return dext_views.Page( 'market/new_dialog.html', content={ 'context': context, 'form': forms.PriceForm(initial={'price': conf.settings.MINIMUM_PRICE}), 'resource': context.resource, 'commission': conf.settings.COMMISSION })
def process(self, main_task, storage=None): # pylint: disable=R0911 good_type = goods_types.get_type(self.good_type) if self.step.is_UNPROCESSED: account = account_prototypes.AccountPrototype.get_by_id( self.account_id) if account.is_ban_game: main_task.comment = 'account is banned' self.state = self.STATE.BANNED return POSTPONED_TASK_LOGIC_RESULT.ERROR goods = logic.load_goods(self.account_id) if not goods.has_good(self.good_uid): main_task.comment = 'account has no good %s' % self.good_uid self.state = self.STATE.NO_GOOD return POSTPONED_TASK_LOGIC_RESULT.ERROR if logic.has_lot(self.account_id, self.good_uid): main_task.comment = 'account %d has lot for <%s> %s' % ( self.account_id, self.good_type, self.good_uid) self.state = self.STATE.ALREADY_RESERVED return POSTPONED_TASK_LOGIC_RESULT.ERROR lot = logic.reserve_lot(self.account_id, goods.get_good(self.good_uid), price=self.price) self.lot_id = lot.id main_task.extend_postsave_actions( (lambda: environment.workers.supervisor.cmd_logic_task( self.account_id, main_task.id), )) self.step = self.STEP.RESERVED return POSTPONED_TASK_LOGIC_RESULT.CONTINUE if self.step.is_RESERVED: hero = storage.accounts_to_heroes[self.account_id] if not good_type.has_good(hero, self.good_uid): main_task.comment = 'hero has no good %s' % self.good_uid self.state = self.STATE.NO_GOOD self.step = self.STEP.ROLLBACK main_task.extend_postsave_actions( (lambda: environment.workers.market_manager.cmd_logic_task( self.account_id, main_task.id), )) return POSTPONED_TASK_LOGIC_RESULT.CONTINUE good_type.extract_good(hero, self.good_uid) storage.save_bundle_data(hero.actions.current_action.bundle_id) main_task.extend_postsave_actions( (lambda: environment.workers.market_manager.cmd_logic_task( self.account_id, main_task.id), )) self.step = self.STEP.GOTTEN return POSTPONED_TASK_LOGIC_RESULT.CONTINUE if self.step.is_ROLLBACK: goods = logic.load_goods(self.account_id) lot = logic.load_lot(self.lot_id) lot.state = relations.LOT_STATE.CLOSED_BY_ERROR logic.save_lot(lot) self.step = self.STEP.ROLLBACKED self.state = self.STATE.PROCESSED return POSTPONED_TASK_LOGIC_RESULT.SUCCESS if self.step.is_GOTTEN: goods = logic.load_goods(self.account_id) lot = logic.load_lot(self.lot_id) lot.state = relations.LOT_STATE.ACTIVE logic.save_lot(lot) goods.remove_good(self.good_uid) logic.save_goods(goods) self.step = self.STEP.ACTIVATED self.state = self.STATE.PROCESSED return POSTPONED_TASK_LOGIC_RESULT.SUCCESS
def process(self, main_task, storage=None): # pylint: disable=R0911 good_type = goods_types.get_type(self.good_type) if self.step.is_UNPROCESSED: account = account_prototypes.AccountPrototype.get_by_id(self.account_id) if account.is_ban_game: main_task.comment = 'account is banned' self.state = self.STATE.BANNED return POSTPONED_TASK_LOGIC_RESULT.ERROR goods = logic.load_goods(self.account_id) if not goods.has_good(self.good_uid): main_task.comment = 'account has no good %s' % self.good_uid self.state = self.STATE.NO_GOOD return POSTPONED_TASK_LOGIC_RESULT.ERROR if logic.has_lot(self.account_id, self.good_uid): main_task.comment = 'account %d has lot for <%s> %s' % (self.account_id, self.good_type, self.good_uid) self.state = self.STATE.ALREADY_RESERVED return POSTPONED_TASK_LOGIC_RESULT.ERROR lot = logic.reserve_lot(self.account_id, goods.get_good(self.good_uid), price=self.price) self.lot_id = lot.id main_task.extend_postsave_actions((lambda: environment.workers.supervisor.cmd_logic_task(self.account_id, main_task.id),)) self.step = self.STEP.RESERVED return POSTPONED_TASK_LOGIC_RESULT.CONTINUE if self.step.is_RESERVED: hero = storage.accounts_to_heroes[self.account_id] if not good_type.has_good(hero, self.good_uid): main_task.comment = 'hero has no good %s' % self.good_uid self.state = self.STATE.NO_GOOD self.step = self.STEP.ROLLBACK main_task.extend_postsave_actions((lambda: environment.workers.market_manager.cmd_logic_task(self.account_id, main_task.id),)) return POSTPONED_TASK_LOGIC_RESULT.CONTINUE good_type.extract_good(hero, self.good_uid) storage.save_bundle_data(hero.actions.current_action.bundle_id) main_task.extend_postsave_actions((lambda: environment.workers.market_manager.cmd_logic_task(self.account_id, main_task.id),)) self.step = self.STEP.GOTTEN return POSTPONED_TASK_LOGIC_RESULT.CONTINUE if self.step.is_ROLLBACK: goods = logic.load_goods(self.account_id) lot = logic.load_lot(self.lot_id) lot.state = relations.LOT_STATE.CLOSED_BY_ERROR logic.save_lot(lot) self.step = self.STEP.ROLLBACKED self.state = self.STATE.PROCESSED return POSTPONED_TASK_LOGIC_RESULT.SUCCESS if self.step.is_GOTTEN: goods = logic.load_goods(self.account_id) lot = logic.load_lot(self.lot_id) lot.state = relations.LOT_STATE.ACTIVE logic.save_lot(lot) goods.remove_good(self.good_uid) logic.save_goods(goods) self.step = self.STEP.ACTIVATED self.state = self.STATE.PROCESSED return POSTPONED_TASK_LOGIC_RESULT.SUCCESS
def create(context): if logic.has_lot(context.account.id, context.good.uid): raise dext_utils_exceptions.ViewError(code='lot_exists', message='Вы уже выставили этот предмет на продажу') task = logic.send_good_to_market(seller_id=context.account.id, good=context.good, price=context.form.c.price) return dext_views.AjaxProcessing(status_url=task.status_url)
def test_has_lot(self): self.assertTrue(logic.has_lot(account_id=self.account_1.id, good_uid=self.good_1.uid)) self.assertFalse(logic.has_lot(account_id=666, good_uid=self.good_1.uid)) self.assertFalse(logic.has_lot(account_id=self.account_1.id, good_uid='666')) self.assertFalse(logic.has_lot(account_id=666, good_uid='666'))