예제 #1
0
파일: apps.py 프로젝트: zodman/ZoomFoundry
 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
예제 #2
0
파일: site.py 프로젝트: zodman/ZoomFoundry
    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))