def get_measure_version(topic_slug, subtopic_slug, measure_slug, version):
     try:
         measure_versions_with_matching_slug_and_version = MeasureVersion.query.filter(
             MeasureVersion.measure.has(Measure.slug == measure_slug), MeasureVersion.version == version
         ).all()
         for measure_version in measure_versions_with_matching_slug_and_version:
             if (
                 measure_version.measure.subtopic.topic.slug == topic_slug
                 and measure_version.measure.subtopic.slug == subtopic_slug
             ):
                 return measure_version
         raise PageNotFoundException()
     except NoResultFound:
         raise PageNotFoundException()
 def get_subtopic(topic_slug, subtopic_slug):
     try:
         return Subtopic.query.filter(
             Subtopic.topic.has(Topic.slug == topic_slug), Subtopic.slug == subtopic_slug
         ).one()
     except NoResultFound:
         raise PageNotFoundException()
 def get_measure(topic_slug, subtopic_slug, measure_slug):
     try:
         measure = Measure.query.filter(
             Measure.subtopics.any(Subtopic.topic.has(Topic.slug == topic_slug)),
             Measure.subtopics.any(Subtopic.slug == subtopic_slug),
             Measure.slug == measure_slug,
         ).one()
         return measure
     except NoResultFound:
         raise PageNotFoundException()
    def get_page_by_uri_and_type(self, uri, page_type, version=None):
        try:
            query = Page.query.filter_by(uri=uri, page_type=page_type)

            if version:
                query = query.filter_by(version=version)

            return query.one()
        except NoResultFound as e:
            self.logger.exception(e)
            raise PageNotFoundException()
    def get_page_with_version(self, guid, version):
        try:
            page = Page.query.filter_by(guid=guid, version=version).one()

            # Temporary logging to work out issue with data deletions
            message = "Get page with version %s" % page.to_dict()
            self.logger.info(message)

            return page
        except NoResultFound as e:
            self.logger.exception(e)
            raise PageNotFoundException()
 def get_topic_with_subtopics_and_measures(topic_slug):
     """Returns a Topic, the same as `get_topic`, but pre-loads the subtopics and measures in order to avoid
     subsequent queries going back and forth to the database."""
     try:
         return (
             Topic.query.options(
                 joinedload(Topic.subtopics).joinedload(Subtopic.measures).joinedload(Measure.versions)
             )
             .filter(Topic.slug == topic_slug)
             .one()
         )
     except NoResultFound:
         raise PageNotFoundException()
 def get_latest_version(self, topic_uri, subtopic_uri, measure_uri):
     try:
         topic = Page.query.filter_by(uri=topic_uri).one()
         subtopic = Page.query.filter_by(uri=subtopic_uri,
                                         parent_guid=topic.guid).one()
         pages = Page.query.filter_by(uri=measure_uri,
                                      parent_guid=subtopic.guid).order_by(
                                          desc(Page.version)).all()
         if len(pages) > 0:
             return pages[0]
         else:
             raise NoResultFound()
     except NoResultFound as e:
         self.logger.exception(e)
         raise PageNotFoundException()
 def get_topic(topic_slug):
     try:
         return Topic.query.filter_by(slug=topic_slug).one()
     except NoResultFound:
         raise PageNotFoundException()
 def get_measure_version_by_id(measure_version_id):
     measure_version = MeasureVersion.query.get(measure_version_id)
     if measure_version:
         return measure_version
     else:
         raise PageNotFoundException()
 def get_page_with_title(self, title):
     try:
         return Page.query.filter_by(title=title).one()
     except NoResultFound as e:
         self.logger.exception(e)
         raise PageNotFoundException()
 def get_page(self, guid):
     try:
         return Page.query.filter_by(guid=guid).one()
     except NoResultFound as e:
         self.logger.exception(e)
         raise PageNotFoundException()