예제 #1
0
 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
예제 #2
0
    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