def _move_to_log(self, redeem_time=CodeLog.EXPIRED_REDEEM_TIME, redeem_info='', user_id=0): with db.transaction(): code_log = CodeLog.create( text=self.text, gen_event=self.gen_event, redeem_time=redeem_time, start_time=self.start_time, redeem_info=redeem_info, user_id=user_id) rows_affected = self.delete_instance() if rows_affected != 1: raise Exception('concurrent request has happened') return code_log
def create_event(ncodes, extra_info, start_time, expire_time, prefix, rand_len): rand_limit = 36 ** rand_len if ncodes > rand_limit / 2: raise Exception('ncodes and rand_len must satisfy ncodes > 36 ** rand_len / 2') with db.transaction(): event = CodeGenEvent.create(extra_info=extra_info, start_time=start_time, expire_time=expire_time) while ncodes > 0: rand = int_to_str(random.randrange(0, rand_limit), base=36) code_text = prefix + rand code = None try: code = Code.get(text=code_text) except Code.DoesNotExist: pass if code and code.clean_up_if_expired(): code = None if code is None: Code.create(text=code_text, gen_event=event, start_time=start_time, expire_time=expire_time) ncodes -= 1 return event