def wrapped(handler):
        cache_key = handler.request.uri
        cache_item = cache.get(cache_key)
        if cache_item is None:
            cache_item = responder(handler)
            cache.set(cache_key, cache_item, time=settings.CACHE_TIME)
        else:
            logger.info("Using cache for '%s' query" % cache_key)

        return cache_item
Exemple #2
0
    def _query_recipes(self, spec):
        logger.info("Querying db with %s" % repr(spec))

        recipe_results = db.recipes.find(spec)
        result_count = recipe_results.count()
        logger.info("Found %d results for '%s' (capping at %d)" % \
            (result_count, self.terms, settings.RESULTS_CAP))
        
        # limit results so we don't search within every result (would not scale)
        recipe_results = recipe_results.limit(settings.RESULTS_CAP)

        return recipe_results
Exemple #3
0
    def search(self):
        self.results = []

        for allergen in self.allergens:
            # query
            spec = self._get_query_spec()
            matching_recipes = self._query_recipes(spec)
            full_count = matching_recipes.count()
            allergen_presence = self._query_allergen_presence(matching_recipes, allergen)
            allergen_presence_count = allergen_presence.count()
            logger.info("%d results of %d containing allergen '%s'" % 
                (allergen_presence_count, full_count, allergen))
            result = AllergenPresenceResult(allergen, 
                                            self.terms, 
                                            full_count, 
                                            allergen_presence_count)
            self.results.append(result)

        return self.results
def start_api(port):
    logger.info("Starting allergy assassin api on port %d" % port)
    application.listen(port)
    tornado.ioloop.IOLoop.instance().start()