def templates_paths(self): """Calculate Templates Paths""" join = os.path.join if self._templates_paths: return self._templates_paths site = self.site if self.theme: template_path = existing(join(site.themes_path, self.theme, 'templates')) theme_path = existing(join(site.themes_path, self.theme)) paths = list(filter(bool, [ template_path, theme_path, ])) else: paths = [] self._templates_paths = paths return paths
def __init__(self, request): logger = logging.getLogger(__name__) self.request = request instance = request.instance self.name = name = request.domain self.__apps = None self.__settings = None # TODO: consider getting site to do this calculation instead of reqeust site_path = request.site_path if os.path.exists(site_path): self.name = name self.path = site_path self.config = zoom.config.Config(site_path, 'site.ini') self.conf = SiteConfig(self.config) get = self.config.get self.url = get('site', 'url', '') self.title = get('site', 'name', self.name) self.system = get('site', 'system', self.name) self.link = '<a href="{}">{}</a>'.format(self.url, self.name) self.csrf_validation = get('site', 'csrf_validation', True) in zoom.utils.POSITIVE self.tracking_id = get('site', 'tracking_id', '') self.owner = get('site', 'owner', 'Company Name') self.owner_name = get('site', 'owner', 'Company Name') self.owner_url = get('site', 'owner_url', DEFAULT_OWNER_URL) self.owner_email = get('site', 'owner_email', '*****@*****.**') self.admin_email = get('site', 'admin_email', '*****@*****.**') self.home_app_name = get('apps', 'home', 'home') self.index_app_name = get('apps', 'index', 'content') self.login_app_name = get('apps', 'login', '') self.auth_app_name = get('apps', 'authorize', '') self.locate_app_name = get('apps', 'locate', '') self.smtp_host = get('mail', 'smtp_host', '') self.smtp_port = get('mail', 'smtp_port', '') self.smtp_user = get('mail', 'smtp_user', '') self.smtp_passwd = get('mail', 'smtp_passwd', '') self.mail_logo = get('mail', 'logo', '') self.mail_from_addr = get('mail', 'from_addr', '') self.mail_from_name = get('mail', 'from_name', self.title + ' Support') self.mail_delivery = get('mail', 'delivery', '') self.guest = get('users', 'default', 'guest') self.administrators_group = get('users', 'administrator_group', 'administrators') self.developers_group = get('users', 'developer_group', 'developers') self.secure_cookies = (request.protocol == 'https' and get('sessions', 'secure_cookies', True)) theme_dir = realpath(get('theme', 'path', join(instance, 'themes'))) theme = get('theme', 'name', 'default') # establish main theme location = locate_theme(theme_dir, theme) if not location: raise zoom.exceptions.ThemeTemplateMissingException( 'theme %r not found in %r' % (theme, theme_dir)) self.themes_path, self.theme = location self.theme_path = join(self.themes_path, self.theme) # establish default theme if self.theme == 'default': # same as main theme self.default_theme_path = self.theme_path else: default_location = locate_theme(theme_dir, 'default') if not default_location: raise zoom.exceptions.ThemeTemplateMissingException( 'theme %r not found in %r' % (theme, theme_dir)) self.default_theme_path = default_location[0] # theme options self.theme_comments = get('theme', 'comments', 'name') self.default_template = (get('theme', 'template', 'default')) # theme templates self.template_path = existing(self.theme_path, 'templates') self.default_template_path = existing(self.default_theme_path, 'templates') self.templates_paths = list( filter( bool, dedup([ self.template_path, self.default_template_path, self.theme_path, self.default_theme_path, ]))) self.templates = {} self.packages = zoom.packages.load( join(site_path, 'packages.json'), ) self.apps_paths = [ realpath(join(self.path, p)) for p in str(get('apps', 'path')).split(';') if exists(realpath(join(self.path, p))) ] basic_apps = zoompath('zoom', '_assets', 'standard_apps') positive = zoom.utils.POSITIVE if self.conf.section('apps').get( 'include_basics' ) in positive and basic_apps not in self.apps_paths: logger.debug('including default apps (%r)', basic_apps) self.apps_paths.append(basic_apps) else: logger.debug('not including default apps') self.data_path = realpath( get('data', 'path', join(self.path, 'data'))) self.logging = get('monitoring', 'logging', True) in positive self.profiling = get('monitoring', 'profiling', False) in positive self.monitor_app_database = get('monitoring', 'app_database', False) in positive self.monitor_system_database = get('monitoring', 'system_database', False) in positive logger.debug('instance path: %r', instance) logger.debug('site path: %r', site_path) logger.debug('site themes path: %r', self.themes_path) logger.debug('site theme path: %r', self.theme_path) else: logger.error('Site directory missing: %r', site_path) raise zoom.exceptions.SiteMissingException( 'site {!r} does not exist'.format(site_path))