def bookmarklet(self, request): """ Fetches the recipe for the url, saves the recipe, and returns a response to the chrome extension """ u = ICurrentUser(request) url = request.args['uri'][0] pageSource = yield treq.get(url).addCallback(treq.content) items = microdata.get_items(pageSource) recipesSaved = [] for i in items: itemTypeArray = [x.string for x in i.itemtype] if RECIPE_SCHEMA in itemTypeArray: recipe = i saveItem = Recipe.fromMicrodata(recipe, u.email) Recipe.saveOnlyOnce(saveItem) recipesSaved.append({ "name": saveItem.name, "urlKey": saveItem.urlKey }) break if len(recipesSaved) == 0: defer.returnValue( ClipResponse(status=RS.error, message=ResponseMsg.noRecipe)) defer.returnValue(ClipResponse(status=RS.ok, recipes=recipesSaved))
def bookmarklet(self, request): """ Fetches the recipe for the url, saves the recipe, and returns a response to the chrome extension """ def returnResponse(status, recipes, message): """ Return the appropriate data structure to the http response """ data = {'status': status, 'recipes': recipes, 'message': message} defer.returnValue(json.dumps(data)) userEmail = self.user(request).email if not userEmail: returnResponse(status="error", recipes=[], message=ResponseMsg.not_logged_in) url = request.args['uri'][0] pageSource = yield treq.get(url).addCallback(treq.content) items = microdata.get_items(pageSource) recipeSaved = [] for i in items: itemTypeArray = [x.string for x in i.itemtype] if RECIPE_SCHEMA in itemTypeArray: recipe = i saveItem = Recipe.fromMicrodata(recipe, userEmail) Recipe.saveOnlyOnce(saveItem) recipeSaved.append({"name": saveItem.name, "urlKey": saveItem.urlKey}) break if len(recipeSaved) == 0: returnResponse(status="error", recipes=[], message=ResponseMsg.no_recipe) returnResponse(status="ok", recipes=recipeSaved, message=ResponseMsg.blank)