def gcm_send(uid, send_func): gcm_tokens = GcmTokenDao.get_from_uid(uid) tokens = [t.token for t in gcm_tokens] try: resp = send_func(tokens) except HTTPError as e: # TODO: handle it raise if resp["failure"] == 0 and resp["canonical_ids"] == 0: return for i in range(len(tokens)): result = resp["results"][i] if "message_id" in result: if "registration_id" in result: GcmTokenDao.update_token(uid, tokens[i], result["registration_id"]) else: error = result["error"] if error == "Unavailable": # TODO: handle it pass elif error == "NotRegistered": token = tokens[i] logging.info("delete not registered gcm token %s" % token) GcmTokenDao.del_gcm_token(uid, token) else: raise Exception("unknown error: %s" % error)
def post(self, username): user = UserDao.get_from_username(username) if user is None: self.send_error(400) return action = self.get_body_argument("action") if action == "set_ntf_token": token = self.get_body_argument("token") nid = NtfTokenDao.set_for_user(user.id, token) FetcherManager.add_task(nid) elif action == "add_gcm_token": token = self.get_body_argument("token") GcmTokenDao.add_gcm_token(user.id, token) elif action == "del_gcm_token": token = self.get_body_argument("token") GcmTokenDao.del_gcm_token(user.id, token) self.set_status(200)