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,
}