# CMless imports
import debug, config, template
-# Accepts a string containing a filesystem path to a text file.
-# Returns a string containing the contents of that file.
def load_file(path):
+ """Open the text file at 'path' and return the contents as a string."""
try:
with open(path) as f:
contents = f.read()
sys.exit("Unable to open " + path + " for reading.")
return contents
-# Accepts a string containing markup'ed text
-# Returns a string containing HTML'ed text
def process_markup(text):
+ """Execute external markup processor and return processed 'text'.
+
+ Markup processor is specified by config.markup_processor variable
+ and should accept markup on stdin while returning HTML on stdout.
+ """
try:
p = subprocess.Popen(config.markup_processor,
stdout=subprocess.PIPE,stdin=subprocess.PIPE)
return(text.decode('UTF-8'))
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:
else:
return content
-def lookup_page_metadata(key):
- page_file = load_file(config.site_data_prefix + os.environ['REQUEST_URI'] +
- config.markup_file_extension)
+def lookup_current_metadata(key):
+ """Wrapper for lookup_file_metadata() supplying the current REQUEST_URI as 'file'."""
+ file = 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()
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 ""