[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[OpenTAL-checkins] opental/OpenPT FSOPT.py ZOPT.py __init__.py ref...
From: |
Fernando Lalo Martins |
Subject: |
[OpenTAL-checkins] opental/OpenPT FSOPT.py ZOPT.py __init__.py ref... |
Date: |
Mon, 27 Jan 2003 00:11:11 -0500 |
CVSROOT: /cvsroot/opental
Module name: opental
Changes by: Fernando Lalo Martins <address@hidden> 03/01/27 00:11:10
Modified files:
OpenPT : FSOPT.py ZOPT.py __init__.py refresh.txt
Added files:
OpenPT : OpenPTBase.py OpenPTFile.py
Log message:
Cleaned up ZOPT, it was too big for my taste. Still need some cleaning
up.
Created OpenPTBase; now FSOPT, ZOPT and OpenPTFile all inherit from this
common class
Created OpenPTFile; this kills our last dependency on ZPT
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/opental/opental/OpenPT/OpenPTBase.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/opental/opental/OpenPT/OpenPTFile.py?rev=1.1
http://savannah.gnu.org/cgi-bin/viewcvs/opental/opental/OpenPT/FSOPT.py.diff?tr1=1.10&tr2=1.11&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/opental/opental/OpenPT/ZOPT.py.diff?tr1=1.40&tr2=1.41&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/opental/opental/OpenPT/__init__.py.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/opental/opental/OpenPT/refresh.txt.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
Patches:
Index: opental/OpenPT/FSOPT.py
diff -u opental/OpenPT/FSOPT.py:1.10 opental/OpenPT/FSOPT.py:1.11
--- opental/OpenPT/FSOPT.py:1.10 Thu Jan 16 18:09:50 2003
+++ opental/OpenPT/FSOPT.py Mon Jan 27 00:11:10 2003
@@ -15,9 +15,12 @@
# 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
+__version__='$Revision: 1.11 $'[11:-2]
+
from Products.CMFCore import FSPageTemplate as cmfFSPT
from Products.CMFCore.FSPageTemplate import *
-from ZOPT import ZopePageTemplate, compiler_registry
+from OpenPTBase import OpenPageTemplate, compiler_registry
+from ZOPT import ZopePageTemplate # for zodb clones
from Products.CMFCore import utils
from OFS.SimpleItem import SimpleItem
import Globals, AccessControl
@@ -34,8 +37,8 @@
except KeyError:
raise NameError, name
-class FSPageTemplate(ZopePageTemplate, FSObject, Script):
- "Wrapper for Page Template"
+class FSPageTemplate(OpenPageTemplate, FSObject):
+ "CMF FSObject Wrapper for Open Page Template"
meta_type = 'Filesystem Page Template (OpenPT)'
_icon = 'misc_/OpenPT/fsopt.png'
@@ -68,21 +71,19 @@
def __init__(self, id, filepath, fullname=None, properties=None):
FSObject.__init__(self, id, filepath, fullname, properties)
+ OpenPageTemplate.__init__(self, id)
self.ZBindings_edit(self._default_bindings)
self.macros = MacroCollection()
self.macros.__roles__ = None
self.macros.__allow_access_to_unprotected_subobjects__ = 1
- def manage_afterAdd(self, item, container):
- # do nothing here for FSObjects
- pass
-
def _createZODBClone(self):
"""Create a ZODB (editable) equivalent of this object."""
t = ZopePageTemplate(self.getId(), self.read())
t.handlers = self.handlers
return t
+ # unneeded, since this doesn't inherit from Cacheable, but won't hurt
def ZCacheable_isCachingEnabled(self):
return 0
@@ -113,16 +114,14 @@
def read(self):
# Tie in on an opportunity to auto-update
self._updateFromFS()
- return ZopePageTemplate.read(self)
+ return OpenPageTemplate.read(self)
def paxtree(self):
'fetch the pax tree from the zodb'
if self._compiled != repr(compiler_registry):
self._parsed = None
self._updateFromFS()
- return ZopePageTemplate.paxtree(self)
-
-
+ return OpenPageTemplate.paxtree(self)
Globals.InitializeClass(FSPageTemplate)
#cmfFSPT.FSPageTemplate = FSPageTemplate
Index: opental/OpenPT/ZOPT.py
diff -u opental/OpenPT/ZOPT.py:1.40 opental/OpenPT/ZOPT.py:1.41
--- opental/OpenPT/ZOPT.py:1.40 Sun Jan 26 21:04:16 2003
+++ opental/OpenPT/ZOPT.py Mon Jan 27 00:11:10 2003
@@ -15,208 +15,19 @@
# 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
-import OpenTAL, pax, PTmetal_handler, pax.paxtransform
-from pax.backwards_compatibility import *
-from ZPythonExpr import PythonExpr, SecureModuleImporter
-import cPickle as pickle
-#import pickle
-
-import os, AccessControl, Acquisition, sys, fnmatch
-from App.FactoryDispatcher import FactoryDispatcher
-from Acquisition import aq_base
-from Globals import DTMLFile, ImageFile, MessageDialog, package_home
-from zLOG import LOG, ERROR, INFO
-from OFS.SimpleItem import SimpleItem
-from DateTime.DateTime import DateTime
-from string import join, strip, rstrip, split, replace, lower
-from Shared.DC.Scripts.Script import Script, BindingsUI
-from Shared.DC.Scripts.Signature import FuncCode
-from Shared.DC.Scripts.Bindings import NameAssignments, Bindings
-from AccessControl import getSecurityManager
-try:
- from AccessControl import Unauthorized
-except ImportError:
- Unauthorized = "Unauthorized"
-from OFS.History import Historical, html_diff
-from OFS.Cache import Cacheable
-from OFS.Traversable import Traversable
-from OFS.PropertyManager import PropertyManager
-from Products.PageTemplates.PageTemplateFile import PageTemplateFile
-from webdav.Lockable import ResourceLockedError
-from webdav.WriteLockInterface import WriteLockInterface
-from ZODB.PersistentMapping import PersistentMapping
-from OFS.SimpleItem import SimpleItem
-import Globals
-from DocumentTemplate.DT_Util import TemplateDict, InstanceDict
-from AccessControl.DTML import RestrictedDTML
-class Rtd(RestrictedDTML, TemplateDict):
- this = None
-
-def call_with_ns(f, ns, arg=1):
- td = Rtd()
- td.this = ns['here']
- td._push(ns['request'])
- td._push(InstanceDict(td.this, td))
- td._push(ns)
- try:
- if arg==2:
- return f(None, td)
- else:
- return f(td)
- finally:
- td._pop(3)
-
-class PTNameAssignments(NameAssignments):
- # this should emulate the following ugly zpt code:
-## c = {'template': self,
-## 'here': self._getContext(),
-## 'container': self._getContainer(),
-## 'nothing': None,
-## 'options': {},
-## 'root': root,
-## 'request': getattr(root, 'REQUEST', None),
-## 'modules': SecureModuleImporter,
-## }
- _exprs = NameAssignments._exprs + (
- ('name_none', 'None'),
- ('name_options', '{}'),
- ('name_root', 'self._getRoot()'),
- ('name_request', 'getattr(self, "REQUEST", None)'),
- ('name_modules', 'self._getModuleImporter()'),
- )
-
-class PTRuntimeError(RuntimeError):
- '''The Page Template has template errors that prevent it from rendering.'''
- pass
-
-def make_macro_collection():
- col = PersistentMapping()
- col.__roles__ = None
- col.__allow_access_to_unprotected_subobjects__ = 1
- #col.__altpt_0_2__ = 1
- return col
-
-def fetchmacros(template, tree, context):
- macros = getattr(context, 'metal_macros', {})
- col = template.macros
- col.clear()
- for name, macro in macros.items():
- col[name] = pickle.dumps(macro)
- return tree
-
-
-ZopeExprEngine = OpenTAL.Expressions.Engine()
-ZopeExprEngine.registerType('python', PythonExpr)
-ZopeExprEngine.Undefs += (Unauthorized,)
-
-class ZopeContext(OpenTAL.Context.Context):
- def __init__(self, bindings=None):
- OpenTAL.Context.Context.__init__(self, ZopeExprEngine, bindings)
- self._securityManager = getSecurityManager()
-
- def validate(self, accessed=None, container=None, name=None, value=None,
*a):
- if not self._securityManager.validate(accessed, container, name,
value, *a):
- raise Unauthorized, name
-
- def render(self, ob):
- """
- Calls the object, possibly a document template, or just returns it if
- not callable. (From DT_Util.py)
- """
- ns = self.vars
- if hasattr(ob, '__render_with_namespace__'):
- ob = call_with_ns(ob.__render_with_namespace__, ns)
- else:
- base = aq_base(ob)
- if callable(base):
- try:
- if getattr(base, 'isDocTemp', 0):
- ob = call_with_ns(ob, ns, 2)
- else:
- ob = ob()
- except AttributeError, n:
- if str(n) != '__call__':
- raise
- return ob
+__version__='$Revision: 1.41 $'[11:-2]
+# FIXME: determine what exactly has to be imported.
+# some imports probably aren't needed by Base anymore.
+from OpenPTBase import *
+from OpenPTFile import OpenPTFile
+import os
-# paxtransform handlers
-handler_registry = [OpenTAL.metal_handler, OpenTAL.tal_handler]
-# paxtransform handlers
-compiler_registry = [OpenTAL.metal_compiler, OpenTAL.tal_compiler]
-# functions!
-postcompiler_registry = [fetchmacros]
-
-def _registry_replace(registry, new_item, position):
- name = new_item.name
- for index, item in enumerate(registry):
- if item.name == name:
- del registry[index]
- registry.insert(position, new_item)
-
-def register_handlers(handler=None, compiler=None, position=None):
- if position is None:
- position = max(len(handler_registry), len(compiler_registry))
- if handler:
- _registry_replace(handler_registry, handler, position)
- if compiler:
- _registry_replace(compiler_registry, compiler, position)
-
-# these are calculated automatically, don't touch them
-handler_namespaces = {}
-handler_namespaces_rev = {}
-
-def PT_initial_namespaces():
- if len(handler_namespaces) != len(handler_registry):
- handler_namespaces.clear()
- for handler in handler_registry:
- handler_namespaces[handler.name] = handler.ns
- return handler_namespaces
-
-source_types = {'HTML':pax.html2pax, 'Text':pax.text2pax}
-if hasattr(pax, 'xml2pax'):
- source_types['XML'] = pax.xml2pax
-
-default_text_dir = os.path.join(package_home(globals()), 'default_text')
-
-# FIXME: lots of stuff below can probably be refactored out -
-# there is still a lot of cruft pasted from ZPT
-
-# FIXME2: it would be interesting to check if a non-zope OpenPT class
-# is doable. If not, all claims to its existence should be removed.
-
-class ZopePageTemplate(Script, Historical, Cacheable,
- Traversable, PropertyManager):
- "Zope Open Page Template using TAL, TALES, and METAL"
-
- __implements__ = (WriteLockInterface,)
-
- content_type = 'text/html'
- source_type = 'HTML'
- handlers = ('tal', 'metal')
- encoding = 'utf-8'
- _errors = ()
- _warnings = ()
- _text = ''
- _error_start = '<!-- Page Template Diagnostics'
- _paxtree = ''
- meta_type = 'Page Template (OpenPT)'
- _icon = 'misc_/OpenPT/opt.png'
-
- func_defaults = None
- func_code = FuncCode((), 0)
-
- _default_bindings = {'name_context': 'here',
- 'name_container': 'container',
- 'name_m_self': 'template',
- 'name_subpath': 'traverse_subpath',
- 'name_none': 'nothing',
- 'name_options': 'options',
- 'name_root': 'root',
- 'name_request': 'request',
- 'name_modules': 'modules',
- }
+my_home = package_home(globals())
+default_text_dir = os.path.join(my_home, 'default_text')
+class ZopePageTemplate(OpenPageTemplate, PropertyManager):
+ "Normal (ZMI-managed) Open Page Template"
manage_options = (
{'label':'Edit', 'action':'pt_editForm',
'help': ('PageTemplates', 'PageTemplate_Edit.stx')},
@@ -236,59 +47,13 @@
)
def __init__(self, id, text_fn):
- self.id = str(id)
- self.ZBindings_edit(self._default_bindings)
- if text_fn is None:
- text = '<openpt />'
- else:
+ OpenPageTemplate.__init__(self, id)
+ if text_fn is not None:
text = open(os.path.join(default_text_dir, text_fn)+'.pt').read()
- self.macros = make_macro_collection()
- self.pt_edit(text)
-
- def manage_afterAdd(self, item, container):
- try:
- self.encoding = container.default_zope_data_encoding
- except:
- pass
-
- def __setstate__(self, state):
- ZopePageTemplate.inheritedAttribute('__setstate__')(self, state)
- ###backward compatibility
- #col = getattr(self, 'macros', None)
- #if not hasattr(col, '__altpt_0_2__'):
- # self.macros = make_macro_collection()
- #if not self._bind_names.isNameAssigned('here'):
- #x self.ZBindings_edit(self._default_bindings)
- ###/backward compatibility
-
- def _setupBindings(self, names={}):
- self._bind_names = names = PTNameAssignments(names)
- return names
-
- def _getModuleImporter(self):
- return SecureModuleImporter
-
- def _getRoot(self):
- root = getattr(self, 'getPhysicalRoot', None)
- # don't know how this happens, but it does: sometimes root is a string
- if callable(root):
- root = root()
- return root
-
- def _getContext(self):
- if hasattr(self, 'aq_parent'):
- return ZopePageTemplate.inheritedAttribute('_getContext')(self)
- return self
-
- def _setPropValue(self, id, value):
- PropertyManager._setPropValue(self, id, value)
- self.ZCacheable_invalidate()
+ self.write(text)
security = AccessControl.ClassSecurityInfo()
- security.declareObjectProtected('View')
- security.declareProtected('View', '__call__')
-
security.declareProtected('View management screens',
'pt_editForm', 'manage_main', 'read',
'ZScriptHTML_tryForm', 'PrincipiaSearchSource',
@@ -297,11 +62,13 @@
security.declareProtected('FTP access',
'manage_FTPstat','manage_FTPget','manage_FTPlist')
- pt_editForm = PageTemplateFile('www/ptEdit.pt', globals(),
- __name__='pt_editForm')
- pt_editForm._owner = None
+ pt_editForm = OpenPTFile('pt_editForm', my_home, 'www', 'ptEdit')
manage = manage_main = pt_editForm
+ def _setPropValue(self, id, value):
+ PropertyManager._setPropValue(self, id, value)
+ self.ZCacheable_invalidate()
+
security.declareProtected('Change Page Templates',
'pt_editAction', 'pt_setTitle', 'pt_edit', 'pt_expand',
'pt_upload', 'pt_changePrefs')
@@ -355,219 +122,11 @@
REQUEST.form.update({'dtpref_cols': cols, 'dtpref_rows': rows})
return self.manage_main()
- def paxtree(self):
- 'fetch the pax tree from the zodb'
- if not hasattr(self, '_v_paxtree'):
- self._v_paxtree = pickle.loads(self._paxtree)
- return self._v_paxtree
-
- def read(self, *args, **kw):
- if not self._errors:
- return self._text
-
- return ('%s\n %s\n-->\n%s' % (self._error_start,
- join(self._errors, '\n '),
- self._text))
-
- def write(self, text):
- self.ZCacheable_invalidate()
- assert type(text) in (type(''), type(u''))
- if text.startswith(self._error_start):
- errend = text.find('-->')
- if errend >= 0:
- text = text[errend + 4:]
- if self._text != text:
- self._text = text
-
- # "cooking" only ever happens when the template changes
- parser = source_types[self.source_type]
-
- self._errors = ()
- try:
- tree = parser(text, PT_initial_namespaces(), self.encoding)
- tr_engine = pax.paxtransform.Engine()
- for handler in compiler_registry:
- tr_engine.add_handler(handler)
- # empty context:
- # compilers and postcompilers shouldn't access the context anyway
- context = ZopeContext()
- context.template = self
- try:
- context.encoding = self.default_zope_data_encoding
- except:
- context.encoding = self.encoding
- tr_engine.initialize(context)
- tree = tr_engine.transform(tree, context)
- for handler in postcompiler_registry:
- tree = handler(self, tree, context)
- self._paxtree = pickle.dumps(tree)
- if hasattr(self, '_v_paxtree'):
- del self._v_paxtree
- except:
- import traceback, zLOG
- #zLOG.LOG('OpenPT', 0, 'Compilation error',
- try:
- exc = sys.exc_info()
- traceback.print_exception(*exc)
- self._errors = ["Compilation failed",
- "%s: %s" % exc[:2]]
- finally:
- del exc
- if not self._errors:
- self._errors = ['something very wicked happened.']
-
- def pt_edit(self, text):
- if hasattr(text, 'read'):
- text = text.read()
- self.write(text)
-
- def pt_errors(self):
- return self._errors
-
- def pt_warnings(self):
- return self._warnings
-
- def pt_parser_list(self):
- return source_types.keys()
-
- def pt_handler_list(self):
- return [handler.name for handler in handler_registry]
-
- security.declareProtected('Change Page Templates',
- 'PUT', 'manage_FTPput', 'write',
- 'manage_historyCopy',
- 'manage_beforeHistoryCopy', 'manage_afterHistoryCopy')
-
- def PUT(self, REQUEST, RESPONSE):
- """ Handle HTTP PUT requests """
- self.dav__init(REQUEST, RESPONSE)
- self.dav__simpleifhandler(REQUEST, RESPONSE, refresh=1)
- self.write(REQUEST.get('BODY', ''))
- RESPONSE.setStatus(204)
- return RESPONSE
-
- manage_FTPput = PUT
-
- def manage_FTPget(self):
- "Get source for FTP download"
- self.REQUEST.RESPONSE.setHeader('Content-Type', self.content_type)
- return self.read()
-
- def get_size(self):
- return len(self.read())
- getSize = get_size
-
- def PrincipiaSearchSource(self):
- "Support for searching - the document's contents are searched."
- return self.read()
-
- def document_src(self, REQUEST=None, RESPONSE=None):
- """Return document source."""
-
- if RESPONSE is not None:
- RESPONSE.setHeader('Content-Type', 'text/plain')
- if REQUEST is not None and REQUEST.get('raw'):
- return self._text
- return self.read()
-
- def pt_src(self, REQUEST=None, RESPONSE=None):
- """Return (rendered) document source."""
-
- if RESPONSE is not None:
- RESPONSE.setHeader('Content-Type', 'text/plain')
-
- if hasattr(REQUEST, 'pax') and REQUEST.pax:
- return str(self.paxtree())
- return pax.XML(self.paxtree())
-
- def om_icons(self):
- """Return a list of icon URLs to be displayed by an ObjectManager"""
- icons = ({'path': self._icon,
- 'alt': self.meta_type, 'title': self.meta_type},)
- if self._errors:
- icons = icons + ({'path': 'misc_/OpenPT/exclamation.gif',
- 'alt': 'Error',
- 'title': 'This template has an error'},)
- return icons
-
- def _exec(self, bound_names, args, kw, handlers=None, root_ns_map={}):
- """Call a Page Template"""
- __traceback_info__ = 'bindings: %s;\n args: %s;\n kw: %s' % (
- repr(bound_names), repr(args), repr(kw))
- tr_engine = pax.paxtransform.Engine()
- if handlers is None:
- handlers = [h for h in handler_registry if h.name in self.handlers]
- for handler in handlers:
- tr_engine.add_handler(handler)
-
- if self._errors:
- raise PTRuntimeError, 'Page Template %s has errors.' % self.id
-
- if not kw.has_key('args'):
- kw['args'] = args
- bound_names['options'] = kw
-
- security=getSecurityManager()
- bound_names['user'] = security.getUser()
-
- # Retrieve the value from the cache.
- keyset = {}
- if self.ZCacheable_isCachingEnabled():
- for n in ('traverse_subpath', 'options'):
- keyset[n] = bound_names[n]
- keyset['here'] = bound_names['here'].absolute_url()
- result = self.ZCacheable_get(keywords=bound_names)
- if result is not None:
- # Got a cached value.
- return result
-
- # Execute the template in a new security context.
- security.addContext(self)
- try:
- context = ZopeContext(bound_names)
- try:
- context.encoding = self.default_zope_data_encoding
- except:
- context.encoding = self.encoding
- context.root_xmlns_map = root_ns_map
- tr_engine.initialize(context)
- result = pax.XML(tr_engine.transform(self.paxtree(), context),
- root_ns_map, self.encoding)
- if keyset is not None:
- # Store the result in the cache.
- self.ZCacheable_set(result, keywords=keyset)
- try:
- self.REQUEST.RESPONSE.setHeader('content-type',
- '%s; charset=%s' % (
- self.content_type,
- context.encoding))
- except AttributeError:
- pass
- return result
- finally:
- security.removeContext(self)
-
- def pt_expand(self, REQUEST=None):
- """Expand macros"""
- if len(handler_namespaces_rev) != len(handler_registry):
- handler_namespaces_rev.clear()
- for handler in handler_registry:
- handler_namespaces_rev[handler.ns] = handler.name
- # FIXME: should catch exceptions (?)
- expanded = self._exec({},(),{},
- (PTmetal_handler.metal_expander,),
- handler_namespaces_rev)
- self.write(expanded)
- if REQUEST is not None:
- REQUEST.set('text', self.read()) # May not equal 'text'!
- return self.pt_editForm(manage_tabs_message='Macros expanded')
Globals.InitializeClass(ZopePageTemplate)
-manage_addPageTemplateForm = ZopePageTemplate('manage_addPageTemplateForm',
None)
-manage_addPageTemplateForm.write(
- open(os.path.join(package_home(globals()), 'www', 'ptAdd.pt')).read())
-manage_addPageTemplateForm.__name__ = manage_addPageTemplateForm.id
+manage_addPageTemplateForm = OpenPTFile('manage_addPageTemplateForm',
+ my_home, 'www', 'ptAdd.pt')
from urllib import quote
@@ -599,30 +158,3 @@
if submit==" Add and Edit ": u="%s/%s" % (u,quote(id))
REQUEST.RESPONSE.redirect(u+'/manage_main')
return ''
-
-
-class __FactoryDispatcher__(FactoryDispatcher):
- "customized FactoryDispatcher for OpenPT"
- security = AccessControl.ClassSecurityInfo()
- security.declareObjectProtected('Add Page Templates')
- security.declareProtected('Add Page Templates', 'default_text_dir')
- def default_text_dir(*a, **kw):
- return [name[:-3] for name in os.listdir(default_text_dir) if
- fnmatch.fnmatch(name, '*.pt')]
-Globals.InitializeClass(__FactoryDispatcher__)
-
-
-def initialize(context):
- context.registerClass(
- ZopePageTemplate,
- permission='Add Page Templates',
- constructors=(manage_addPageTemplateForm,
- manage_addPageTemplate),
- icon='www/opt.png',
- )
- try:
- # hook OpenPT up CMF's brain
- import FSOPT
- FSOPT.initialize(context)
- except ImportError:
- pass
Index: opental/OpenPT/__init__.py
diff -u opental/OpenPT/__init__.py:1.5 opental/OpenPT/__init__.py:1.6
--- opental/OpenPT/__init__.py:1.5 Sun Jan 26 21:04:16 2003
+++ opental/OpenPT/__init__.py Mon Jan 27 00:11:10 2003
@@ -15,4 +15,35 @@
# 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 ZOPT import initialize, __FactoryDispatcher__
+__version__='$Revision: 1.6 $'[11:-2]
+
+from ZOPT import ZopePageTemplate, default_text_dir, \
+ manage_addPageTemplateForm, manage_addPageTemplate
+from App.FactoryDispatcher import FactoryDispatcher
+import Globals, AccessControl, os, fnmatch
+
+class __FactoryDispatcher__(FactoryDispatcher):
+ "customized FactoryDispatcher for OpenPT"
+ security = AccessControl.ClassSecurityInfo()
+ security.declareObjectProtected('Add Page Templates')
+ security.declareProtected('Add Page Templates', 'default_text_dir')
+ def default_text_dir(*a, **kw):
+ return [name[:-3] for name in os.listdir(default_text_dir) if
+ fnmatch.fnmatch(name, '*.pt')]
+Globals.InitializeClass(__FactoryDispatcher__)
+
+
+def initialize(context):
+ context.registerClass(
+ ZopePageTemplate,
+ permission='Add Page Templates',
+ constructors=(manage_addPageTemplateForm,
+ manage_addPageTemplate),
+ icon='www/opt.png',
+ )
+ try:
+ # hook OpenPT up CMF's brain
+ import FSOPT
+ FSOPT.initialize(context)
+ except ImportError:
+ pass
Index: opental/OpenPT/refresh.txt
diff -u opental/OpenPT/refresh.txt:1.1 opental/OpenPT/refresh.txt:1.2
--- opental/OpenPT/refresh.txt:1.1 Mon Aug 5 12:19:25 2002
+++ opental/OpenPT/refresh.txt Mon Jan 27 00:11:10 2003
@@ -0,0 +1,3 @@
+**WARNING**: refreshing this product currently renders it unusable, for
reasons yet unknown.
+I did't disable refreshing because it's still useful to me (so that I know if
it imports),
+but after refreshing you have to restart zope.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [OpenTAL-checkins] opental/OpenPT FSOPT.py ZOPT.py __init__.py ref...,
Fernando Lalo Martins <=