--- a +++ b/qiita_pet/portal.py @@ -0,0 +1,86 @@ +# ----------------------------------------------------------------------------- +# Copyright (c) 2014--, The Qiita Development Team. +# +# Distributed under the terms of the BSD 3-clause License. +# +# The full license is in the file LICENSE, distributed with this software. +# ----------------------------------------------------------------------------- +from os.path import join, dirname, abspath + +from qiita_core.exceptions import MissingConfigSection +from qiita_core.qiita_settings import qiita_config + +from configparser import ConfigParser + + +class PortalStyleManager(object): + """Holds the portal style information + + Parameters + ---------- + conf_fp: str, optional + Filepath to the configuration file. Default: portal.txt + + Attributes + ---------- + logo : str + Path from base URL to the site logo + title : str + Site title + index header : str + Welcome text header for the website + index_text : str + Welcome text for the website + example_search : str + Example search to be shown on the study listing page + custom_css : str + custom CSS for the portal + conf_fp : str + The filepath to the portal styling config file + css_fp : str + The filepath to the portal styling custom CSS + """ + def __init__(self): + if qiita_config.portal_fp: + self.conf_fp = qiita_config.portal_fp + else: + self.conf_fp = join(dirname(abspath(__file__)), + 'support_files/config_portal.cfg') + + # Parse the configuration file + config = ConfigParser() + with open(self.conf_fp, newline=None) as conf_file: + config.read_file(conf_file) + + _required_sections = {'sitebase', 'index', 'study_list'} + if not _required_sections.issubset(set(config.sections())): + missing = _required_sections - set(config.sections()) + raise MissingConfigSection(', '.join(missing)) + + self.css_fp = config.get('sitebase', 'CSS_FP') + # Load the custom CSS if needed + self.custom_css = '' + if self.css_fp: + with open(self.css_fp, newline=None) as f: + self.custom_css = f.read() + + self._get_sitebase(config) + self._get_index(config) + self._get_study_list(config) + + def _get_sitebase(self, config): + """Get the configuration of the sitebase section""" + self.logo = config.get('sitebase', 'LOGO') + self.title = config.get('sitebase', 'TITLE') + + def _get_index(self, config): + """Get the configuration of the index section""" + self.index_header = config.get('index', 'HEADER') + self.index_text = config.get('index', 'TEXT') + + def _get_study_list(self, config): + """Get the configuration of the study_list section""" + self.example_search = config.get('study_list', 'EXAMPLE_SEARCH') + + +portal_styling = PortalStyleManager()