All pastes #231953 Raw Edit

page_main.ptl

public python v1 · immutable
·published 2006-11-01 03:49 UTC
rendered paste body
# -*- coding: iso-latin-1 -*-## Copyright (C) 2005 by Holger Schurig# # This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; either version 2 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA#from Templates import *import sys, os, quixote, backendfrom quixote import get_session, get_session_managerfrom quixote.util import StaticDirectoryfrom quixote.directory import Directory, AccessControlled######################################################################### This boilerplate is only in main_page.ptl. It automatically loads# all page_*.py/page_*.ptl files and creates a hierarchical menu with# them. For this it needs this variables in each page_*-module.##    _q_link    = 'blah'             # link name for the page#    _q_title   = 'Some title'       # must be present, if it is '', then no menu#                                    # entry will be generated#    _q_desc    = 'Long description' # may be empty#    _q_menupos = 0                  # used for sorting the generated menu#    _q_level   = 3                  # access level needed for the page#    _q_parent  = 'page_blah'        # this means: we should be put into#                                    # page_blah's menu#    _q_exports = []                 # may contain local things, but will be#                                    # automatically created/populated#    _q_menu    = []                 # will be automatically created/populated#    def _q_index(request):          # the method that will generate the web page#    def _q_test():                  # option, if this func return False, then#                                    # the menu entry won't be generated#	#######################################################################class PageMain(AccessControlled, Directory): #order matters	_q_exports = ['', 'static', 'graphs']        _q_parent  = ''        _q_title   = _("Main menu")        _q_desc    = _("DeStar main page")        _q_level   = 0	def __init__(self):		print "init"		# Import all cfg_*.py files once when the module loads.		for s in os.listdir(backend.CONFIGLETS_DIR):			#continue			if not s.startswith('page_main') and not s.startswith('page_login'):				continue			m = None			if s.endswith('.ptl'):				s= s[:-4]				#print "Importing", s				m = __import__(s)			elif s.endswith('.py'):				s = s[:-3]				#print "Importing", s				m =  __import__(s)			if m:				for a in ('_q_parent', '_q_title', '_q_access'):					if not m.PageMain.__dict__.has_key(a):						print "Error: '%s' doesn't define %s" % (s,a)						sys.exit(1)				# instantiate eventually missing variables				if not m.PageMain.__dict__.has_key('_q_menu'):					m.PageMain._q_menu = []				if not m.PageMain.__dict__.has_key('_q_menupos'):					m.PageMain._q_menupos = 0				if not m.PageMain.__dict__.has_key('_q_exports'):					m.PageMain._q_exports = []				if not m.PageMain.__dict__.has_key('_q_desc'):					m.PageMain._q_desc = ''				if not m.PageMain.__dict__.has_key('_q_level'):					m.PageMain._q_level = 4				if not m.PageMain.__dict__.has_key('_q_link'):					m.PageMain._q_link = s[5:]						# Build the menu structure for all page modules		for s in sys.modules:			if not s.startswith('page_'):				continue			if s == 'page_main':				continue						print "modulo %s" % s						this_mod = sys.modules[s].PageMain			if this_mod.__dict__.has_key('_q_test') and not this_mod._q_test():				continue			try:				parent_mod = sys.modules[this_mod._q_parent].PageMain				print "parent %s" % parent_mod			except KeyError:				print "Note: %s does not exist, menu is now garbled" % this_mod._q_parent				parent_mod = sys.modules['page_main'].PageMain			s = s[5:]	# strip 'page_'			#print s			#print "this:", this_mod			#print "parent:", parent_mod			# Append module to parent's menu and export-list			link = this_mod._q_link			print "link %s %s" % (this_mod, this_mod._q_link)			#parent_mod._q_menu.append( (link, this_mod._q_title, this_mod._q_desc, this_mod._q_level, this_mod))			if this_mod._q_title:				print "aadiendo %s a %s" % (this_mod, parent_mod)				parent_mod._q_menu.append( this_mod )			parent_mod._q_exports.append( link )			# Make this module known in the parent's module namespace			parent_mod.__dict__[link] = this_mod			#setattr(parent_mod, link, this_mod)			print parent_mod.__dict__			# 'Convert' the _q_parent from type String to type Module			this_mod._q_parent = parent_mod			#print parent_mod._q_exports			#print dir(parent_mod)######################################################################### End of boilerplate, now comes the contents of 'page_main':#########################################################################class PageMain(AccessControlled, Directory): #order matters##	_q_exports = ['', 'static', 'graphs']#        _q_parent  = ''#        _q_title   = _("Main menu")#        _q_desc    = _("DeStar main page")#        #_q_level   = 0#        _q_level   = -1        # Our main page		def _q_index [plain] (self):                #session = get_session()		#if session.level < 1:		#	return get_request().redirect(str('/login'))		header(self._q_desc)		'<p>'		'This page is empty. Please select one option from the menu on the left side.'		'</p>'		footer()		#import configlets		#print len(configlets.configlet_tree)        def _q_access(self):                if get_session().level < self._q_level:                        cantAccessPage()	                #raise AccessError(htmltext(_("You don't have access to this page")))        def _q_exception_handler [plain] (self, exc):                if isinstance(exc, quixote.errors.AccessError) or isinstance(exc, quixote.errors.PublishError):                        if (exc.title == "Access denied"):                                #header(htmltext(_('Access Denied')))                                '<p>'                                htmltext(_("You don't have access to this page."))                                '</p>'                                footer()                        else:                                #header(_(exc.title))                                '<p>'                                _(exc.public_msg)                                '</p>'                                footer()                else:                        raise exc	#from page_login import PageMain as Page	#login = Page()	#login = __import__("page_main", "", "", "PageMain")# Out static things like images and style-sheets:	static = StaticDirectory(os.path.abspath(os.getenv('STATICPAGES_DIR','static')), list_directory=1, follow_symlinks=1)	graphs = StaticDirectory(os.path.abspath('/tmp'), list_directory=1, follow_symlinks=1)