def post(self): # paramters, assume failure, response type params = {} params['response'] = "error" self.response.headers['Content-Type'] = "application/json" # get appliance variables try: packet = json.loads(self.request.body) apitoken = packet['appliance']['apitoken'] except: params['message'] = "You must submit a valid JSON object with a token." self.response.set_status(401) return self.render_template('api/response.json', **params) # load the appliance appliance = Appliance.get_by_token(apitoken) if not appliance: params['message'] = "Token is not valid." self.response.set_status(401) return self.render_template('api/response.json', **params) if appliance.activated == False: # appliance not activated params['message'] = "Appliance has been disabled by pool controller. Please contact support." self.response.set_status(409) return self.render_template('api/response.json', **params) # update appliance info latitude = float(packet['appliance']['location']['latitude']) longitude = float(packet['appliance']['location']['longitude']) appliance.location = ndb.GeoPt(latitude, longitude) appliance.dynamicimages = bool(packet['appliance']['dynamicimages']) appliance.put() # loop through instances being advertised for sale for appliance_instance in packet['instances']: # pass in appliance_instance and appliance object #logging.info("instance: %s" % appliance_instance['name']) instance = Instance.push(appliance_instance, appliance) # build parameter list params = {} params['response'] = "success" params['message'] = "Instances accepted for sale." self.response.headers['Content-Type'] = 'application/json' return self.render_template('api/response.json', **params)