def get(self): random.seed() hash = random.getrandbits(128) channel_name = "%016x" % hash iterations = 0 found = False while not found: pin_code = random.randint(1000, 9999) q = Pin.all() q.filter('code = ', pin_code) pin = q.get() if pin: time = datetime.utcnow() - timedelta(minutes=5) if pin.date <= time: pin.code = pin_code pin.channel = channel_name pin.date = datetime.utcnow() pin.put() found = True else: pin = None else: pin = Pin() pin.code = pin_code pin.channel = channel_name pin.put() found = True iterations += 1 if iterations >= 10: found = True pin = None if not pin: self.response.set_status(409) # Conflict self.response.headers.add_header("Content-Type", 'application/json; charset=utf-8') self.response.out.write(simplejson.dumps("Try again.")) else: token = channel.create_channel(pin.channel) self.response.headers.add_header("Content-Type", 'application/json; charset=utf-8') self.response.out.write(simplejson.dumps({ 'token': token, 'channel': pin.channel, 'pin': pin.code, }))