__revision__ = "$Id: slash.py 988 2008-03-20 09:49:56Z mario $"
from qpy import h8
from qp.fill.static import StaticFile, StaticDirectory
from gz.pub.common import get_publisher, page, get_dhi
from gz.fill.directory import Directory
from gz.fill.exportable import X
from gz.fill.login_dir import LoginDir
from gz.fill.admin import Admin
from gz.fill.debug import format_p_obj
from gz.pub.durus_publisher import DurusPublisher
from gz.skin.evoque_templating import EvoqueTemplating
from pages.register import RegisterDir
from pages.basics import BasicsDir
from pages.specials import SpecialsDir
from pages.gizmos import GizmosDir
from pages.nav import Navigation
from configuration import configuration
from skin_custom import site_CCode, site_ViewSrc, site_running_header
class SitePublisher(DurusPublisher):
skin_class = EvoqueTemplating
configuration = configuration
def __init__(self, connection=None, site=None, **kw):
DurusPublisher.__init__(self, connection=connection, site=site, **kw)
skin = self.skin
skin.set_domain(self.get_file_path_for('templates'))
skin.setup_globals()
# Add custom callables to globals 'site' bunch
globals = skin.domain.globals
globals['html'].format_p_obj = format_p_obj
globals['site'].CCode = site_CCode
globals['site'].ViewSrc = site_ViewSrc
globals['site'].running_header = site_running_header
# set site css as a global variable
globals["site_css"] = "site.css"
#
skin.domain.set_collection("demo", self.get_file_path_for("demo"))
skin.domain.set_collection("gz", self.get_file_path_for("gz"))
skin.domain.set_collection("pages", self.get_file_path_for("pages"))
#
collection = skin.domain.get_collection()
collection.set_template("", "_template.html#body", from_string=False)
# alias "system" templates to default template
for name in ("login", "register", "admin", "durus"):
skin.aliases[name] = ""
def set_live_configuration(self):
from configuration import configuration_live
self.update_configuration(configuration_live)
def ensure_database_initialized(self):
super(SitePublisher, self).ensure_database_initialized()
users = self.get_users()
realm = self.get_default_realm()
if users.get('admin') is None:
admin = users['admin'] = self.create_user('admin')
admin.email = self.get_webmaster_address()
admin.set_password('admin', realm=realm)
admin.get_permissions().grant('administrator', True)
self.commit()
if users.get('normal') is None:
normal = users['normal'] = self.create_user('normal')
normal.email = '%s@%s.%s' % ('mario', 'ruggier', 'org')
normal.set_password('normal', realm=realm)
self.commit()
class SiteDirectory(Directory):
def __init__(self):
super(SiteDirectory, self).__init__()
publisher = get_publisher()
cache_time = publisher.get('static_cache_time', 600)
self.favicon = StaticFile(publisher.get_file_path_for('favicon'),
mime_type="image/png", cache_time=cache_time)
self.assets = StaticDirectory(publisher.get_file_path_for('assets'),
list_directory=True, cache_time=cache_time)
self.gza = StaticDirectory(publisher.get_file_path_for('gza'),
list_directory=True,
cache_time=cache_time,
follow_links=True)
exportables = [
# X(component, attribute, crumb, title, allow=None, dhi=None)
# Exportables with no access restriction are included in menu
# (unless crumb is None) and accessible to all users.
X('robots.txt', 'robots', None, None),
X('favicon.ico', 'favicon', None, None),
X('assets', 'assets', None, None),
X('gza', 'gza', None, None),
X('', 'index', 'Home', 'a Gizmo(QP) demo site'),
X('basics/', 'basics', 'Basics', 'Some Basics'),
X('specials/', 'specials', 'Special Types', 'Special Types'),
X('configuration', 'configuration', 'Configuration',
'Site Configuration'),
X('access', 'access', 'Access Control',
'Access Control for Pages and Menus'),
# 'anonymous' restricted exportables are included in menu only for
# users that are no logged in, but are accessible to all users
X('login/', 'login', 'Login', 'Login', ('anonymous',)),
X('register/', 'register', 'Register', 'Register', ('anonymous',)),
# 'authenticated' restricted exportables are included in menu for all
# users but are accessible ony to authenticated users
X('gizmos/', 'gizmos', 'Gizmos', 'Gizmo Objects', ('authenticated',),),
X('gform', 'gform', 'GForm', 'Gizmo Form', ('authenticated',)),
X('nav/', 'nav', 'Navigation', 'Hierarchical Navigation',
('authenticated',),),
X('templating', 'templating', 'Templating', 'Templating', ('authenticated',)),
# 'admin' restricted exportables are only included in menu and
# accessible to a user that is an administrator
X('admin/', 'admin', 'Admin', 'Admin', ('administrator',)),
]
login = LoginDir()
register = RegisterDir()
basics = BasicsDir()
specials = SpecialsDir()
gizmos = GizmosDir()
nav = Navigation()
admin = Admin()
def robots(self):
get_publisher().respond_robotstxt()
def index(self):
return page(get_dhi().x.title, template='slash_.html')
def configuration(self):
return page(get_dhi().x.title, template='configuration.html')
def access(self):
return page(get_dhi().x.title, template='access.html')
def gform(self):
return page(get_dhi().x.title, template='gform.html')
def templating(self):
return page(get_dhi().x.title, template="templating.html")