Source code for

[docs]class SiteConfig: """Basic class for SiteConfig. Since this is specific to a project, this particular class isn't implemented, but exists to define an interface for the 2 variables that need to be declared in SiteConfig. """ #: URL of the home page SITE_URL = '' #: Base URL for site pages (followed by a '/') BASE_URL = ''
[docs] @classmethod def parse_relative_url_dict(cls, url_dict): """Takes a URL dictionary and returns a full URL based on the values. Used to parse :ref:`YAML URL dictionaries <yaml-relative-urls>` :param url_dict: A dictionary with the following keys: * 'path': The path to a page, relative ot the ``SiteConfig`` attribute specified in 'relative_to' * 'relative_to': A valid attribute in the ``SiteConfig`` class to use as a base URL. If the value of that attribute does not have a trailing '/', one will be added before appending the value of 'path' :return: A full URL based on the values of the URL dictionary :raises ValueError: if ``url_dict['relative_to']`` is not a valid attribute name in this class :raises KeyError: if 'path' or 'relative_to' are not keys in ``url_dict`` """ relative_to = url_dict['relative_to'] try: base_url = getattr(cls, relative_to) except AttributeError as e: error_msg = "Invalid URL 'relative_to' value (relative_to: {}). ".format(relative_to) error_msg += 'Must be a valid attribute declared in SiteConfig class' raise ValueError(error_msg) # Append a '/' if not present if not base_url.endswith('/'): base_url += '/' return base_url + url_dict['path']