def get(self): user_key = self.get_current_user_key() queries = models.Query.get(self.request.get_all('q')[:2]) user_key_0 = queries[0].parent_key() user_key_1 = queries[1].parent_key() if len(queries) != 2 \ or user_key_0 == user_key_1 \ or (user_key_0 != user_key and user_key_1 != user_key): self.response.set_status(403) return if user_key_0 == user_key: my_query = queries[0] peer_query = queries[1] peer_key = user_key_1 else: my_query = queries[1] peer_query = queries[0] peer_key = user_key_0 title_1 = peer_query.query_string title_2 = my_query.query_string my_userchat, peer_userchat = create_chat(user_key, peer_key, title_1 = title_1, title_2 = title_2) self.redirect('/chat/' + my_userchat.name)
def random_chat(user_key): def hookup(user_key, queue_key): now = datetime.datetime.now() q = db.get(queue_key) timediff = now - q.timestamp if q is not None: if q.timestamp < ( now - datetime.timedelta(seconds=config.RANDOM_CHAT_WAIT)): db.delete(q) return False if common.get_ref_key(q, 'peer') is None: q.peer = user_key q.put() return True return False peer_key = None q_key = db.Key.from_path('RandomChatQueue', user_key.id_or_name()) q = models.RandomChatQueue.get(q_key) if q: peer_key = common.get_ref_key(q, 'peer') else: peers = db.Query(models.RandomChatQueue, keys_only=True).filter('peer =', None) for p in peers: if db.run_in_transaction(hookup, user_key, p): peer_key = db.Key.from_path('User', p.id_or_name()) break if not peer_key: q = models.RandomChatQueue(key=q_key) q.put() if peer_key is None: return None if q: db.delete(q) time.sleep(0.05) # wait for peer to finish creating UserChat instances my_userchat, peer_userchat = create_chat(user_key, peer_key, title_1="random", title_2="random") return my_userchat.name
def random_chat(user_key): def hookup(user_key, queue_key): now = datetime.datetime.now() q = db.get(queue_key) timediff = now - q.timestamp if q is not None: if q.timestamp < (now - datetime.timedelta(seconds = config.RANDOM_CHAT_WAIT)): db.delete(q) return False if common.get_ref_key(q, 'peer') is None: q.peer = user_key q.put() return True return False peer_key = None q_key = db.Key.from_path('RandomChatQueue', user_key.id_or_name()) q = models.RandomChatQueue.get(q_key) if q: peer_key = common.get_ref_key(q, 'peer') else: peers = db.Query(models.RandomChatQueue, keys_only = True).filter('peer =', None) for p in peers: if db.run_in_transaction(hookup, user_key, p): peer_key = db.Key.from_path('User', p.id_or_name()) break if not peer_key: q = models.RandomChatQueue(key = q_key) q.put() if peer_key is None: return None if q: db.delete(q) time.sleep(0.05) # wait for peer to finish creating UserChat instances my_userchat, peer_userchat = create_chat(user_key, peer_key, title_1 = "random", title_2 = "random") return my_userchat.name