def get_content()

in bedrock/contentful/api.py [0:0]


    def get_content(self):
        # Check if it is a page or a connector
        entry_type = self.page.content_type.id
        seo_obj = None
        if entry_type == "connectHomepage":
            # Legacy - TODO: remove me once we're no longer using Connect: Homepage
            entry_obj = self.page.fields()["entry"]
        elif entry_type.startswith("page"):  # WARNING: this requires a consistent naming of page types in Contentful, too
            entry_obj = self.page
            seo_obj = getattr(self.page, "seo", None)
        else:
            raise ValueError(f"{entry_type} is not a recognized page type")

        if not entry_obj:
            raise Exception(f"No 'Entry' detected for {self.page.content_type.id}")

        self.request.page_info = self.get_info_data(
            entry_obj,
            seo_obj,
        )
        page_type = entry_obj.content_type.id
        page_css = set()
        page_js = set()
        fields = entry_obj.fields()
        content = None
        entries = []

        def proc(item):
            content_type = item.sys.get("content_type").id
            ctype_info = self.CONTENT_TYPE_MAP.get(content_type)
            if ctype_info:
                processor = getattr(self, ctype_info["proc"])
                entries.append(processor(item))

                css = ctype_info.get("css")
                if css:
                    if isinstance(css, str):
                        css = (css,)
                    page_css.update(css)

                js = ctype_info.get("js")
                if js:
                    if isinstance(js, str):
                        js = (js,)

                    page_js.update(js)

        if page_type == CONTENT_TYPE_PAGE_GENERAL:
            # look through all entries and find content ones
            for key, value in fields.items():
                if key == "body":
                    entries.append(self.get_text_data(value))
                elif key == "component_callout":
                    proc(value)

        elif page_type == CONTENT_TYPE_PAGE_RESOURCE_CENTER:
            # TODO: can we actually make this generic? Poss not: main_content is a custom field name
            _content = fields.get("main_content", {})
            entries.append(self.get_text_data(_content))

        else:
            # This covers pageVersatile, pageHome, etc
            content = fields.get("content")

        if content:
            # get components from content
            for item in content:
                proc(item)

        return {
            "page_type": page_type,
            "page_css": list(page_css),
            "page_js": list(page_js),
            "info": self.request.page_info,
            "entries": entries,
        }