def _post(self, request, response, id=None): response.content_type = "application/json" try: user = TextyUser.find(challenge=request.params["challenge"]).next() except StopIteration: raise NotFound("Invalid challenge code.") user.is_active = True user.put() user.sms('Thanks for signing up with Texty! Text HLP for commands.') response.body = json.dumps(user.to_dict()) return response
def _put(self, request, response, id=None): required_params = ["email", "refresh"] missing_fields = [] for param in required_params: if param not in request.params: missing_fields.append(param) if missing_fields: raise BadRequest("Missing required field(s): %s" % " ".join(missing_fields)) try: user = TextyUser.find(email=request.params.email).next() except StopIteration: raise NotFound("No such user.") user.refresh_token = request.params["refresh"] user.put() return response
def run(self): while self.running: msg = self.text_queue.read() if msg: self.backoff_level = 0 # Create and set up the connection to SkyDrive # client_secret and client_id do not change from user to user sd = skydrive.api_v5.SkyDriveAPI() sd.client_id = CLIENT_ID sd.client_secret = CLIENT_SECRET #Consists of a phone number and a text message body body = json.loads(msg.get_body()) phone_num = body[0] txt = body[1].split(' ', 1) command = txt[0].lower() if len(txt) > 1: args = txt[1] else: args = "" try: user = TextyUser.find(phone=phone_num).next() sd.auth_access_token = user.auth_token sd.auth_refresh_token = user.refresh_token if command in self.VALID_COMMANDS: self.log.info(command) return_msg = self.VALID_COMMANDS[command](sd, user, args) elif command.isdigit(): return_msg = self.choose_command(sd, user, command) else: return_msg = 'Error: Command not found or incorrectly formated' try: self.log.info(return_msg) if len(return_msg) >= MAX_MESSAGE_LENGTH: messages = self.split_message(return_msg) for message in messages: user.sms(message) else: user.sms(return_msg) except: # failed to send message self.log.exception('Failed sending sms to %s.' % phone_num) except StopIteration: self.log.info("Didn't recognize number: %s" % phone_num) except: import traceback traceback.print_exc() self.text_queue.delete_message(msg) else: if self.backoff_level < BACKOFF_MAX: self.backoff_level += BACKOFF_STEP self.log.info("Sleeping %d seconds." % self.backoff_level) time.sleep(self.backoff_level)