+
+def strip_page_metadata(content):
+ """Strip metadata from the beginning of 'content' and return whatever remains."""
+ keyword = template.add_delimiter("END_PAGE_METADATA")
+ index = content.find(keyword)
+ if index != -1:
+ return content[index+len(keyword):]
+ else:
+ return content
+
+def lookup_current_metadata(key):
+ """Wrapper for lookup_file_metadata() supplying the current REQUEST_URI as 'file'."""
+ file = os.path.join(config.site_data_prefix + os.environ['REQUEST_URI'] +
+ config.markup_file_extension)
+ return lookup_file_metadata(key,file)
+
+def lookup_file_metadata(key,file):
+ """Read 'key' metadata in 'file' and return corresponding value.
+
+ Assumes key is contained in the [DEFAULT] category.
+ Returns empty string if key is not present.
+ """
+ page_file = load_file(file)
+
+ # Extract just the metadata block so we can pass it to ConfigParser.
+ keyword_begin = template.add_delimiter("BEGIN_PAGE_METADATA")
+ keyword_end = template.add_delimiter("END_PAGE_METADATA")
+ index = page_file.find(keyword_end)
+ if index != -1:
+ page_file = page_file[len(keyword_begin):index]
+ else:
+ # ConfigParser will accept an empty string so use that as fallback.
+ page_file = ""
+
+ page_metadata = configparser.ConfigParser()
+ page_metadata.read_string(page_file)
+
+ if 'DEFAULT' in page_metadata and key in page_metadata['DEFAULT']:
+ return page_metadata['DEFAULT'][key]
+ else:
+ # An empty string is technically a valid value for a key but we will
+ # overload it as also indicating 'key' wasn't present since a key
+ # without a value is functionally equivalent to no key at all for our
+ # purposes.
+ return ""