[CMF-checkins] CVS: CMF/CMFSetup - context.py:1.1 interfaces.py:1.2
Tres Seaver
tseaver at zope.com
Fri May 21 17:13:10 EDT 2004
Update of /cvs-repository/CMF/CMFSetup
In directory cvs.zope.org:/tmp/cvs-serv6424
Modified Files:
interfaces.py
Added Files:
context.py
Log Message:
- interfaces.py:
o s/readDatafile/readDataFile/g
o Expand description of error cases.
- context.py:
o Create filesystem-based implementations of IImportContext
and IExportContext.
- tests/conformance.py:
o Base classes for testing interface conformance.
=== Added File CMF/CMFSetup/context.py ===
""" Classes: ImportContext, ExportContext
Wrappers representing the state of an import / export operation.
$Id: context.py,v 1.1 2004/05/21 21:12:39 tseaver Exp $
"""
import os
from AccessControl import ClassSecurityInfo
from Acquisition import Implicit
from Acquisition import aq_inner
from Acquisition import aq_parent
from Globals import InitializeClass
from permissions import ManagePortal
from interfaces import IImportContext
from interfaces import IExportContext
class ImportContext( Implicit ):
__implements__ = ( IImportContext, )
security = ClassSecurityInfo()
def __init__( self, tool, profile_path, should_purge=False ):
self._site = aq_parent( aq_inner( tool ) )
self._profile_path = profile_path
self._should_purge = bool( should_purge )
security.declareProtected( ManagePortal, 'getSite' )
def getSite():
""" See ISetupContext.
"""
return self._site
security.declareProtected( ManagePortal, 'readDataFile' )
def readDataFile( self, filename, subdir=None ):
""" See IImportContext.
"""
if subdir is None:
full_path = os.path.join( self._profile_path, filename )
else:
full_path = os.path.join( self._profile_path, subdir, filename )
if not os.path.exists( full_path ):
return None
file = open( full_path, 'rb' )
result = file.read()
file.close()
return result
security.declareProtected( ManagePortal, 'getLastModified' )
def getLastModified( self, path ):
""" See IImportContext.
"""
full_path = os.path.join( self._profile_path, path )
if not os.path.exists( full_path ):
return None
return os.path.getmtime( full_path )
security.declareProtected( ManagePortal, 'isDirectory' )
def isDirectory( self, path ):
""" See IImportContext.
"""
full_path = os.path.join( self._profile_path, path )
if not os.path.exists( full_path ):
return None
return os.path.isdir( full_path )
security.declareProtected( ManagePortal, 'listDirectory' )
def listDirectory( self, path, skip=('CVS',) ):
""" See IImportContext.
"""
full_path = os.path.join( self._profile_path, path )
if not os.path.exists( full_path ) or not os.path.isdir( full_path ):
return None
names = os.listdir( full_path )
return [ name for name in names if name not in skip ]
security.declareProtected( ManagePortal, 'shouldPurge' )
def shouldPurge( self ):
""" See IImportContext.
"""
return self._should_purge
InitializeClass( ImportContext )
class ExportContext( Implicit ):
__implements__ = ( IExportContext, )
security = ClassSecurityInfo()
def __init__( self, tool, profile_path ):
self._site = aq_parent( aq_inner( tool ) )
self._profile_path = profile_path
security.declareProtected( ManagePortal, 'getSite' )
def getSite():
""" See ISetupContext.
"""
return self._site
security.declareProtected( ManagePortal, 'writeDataFile' )
def writeDataFile( self, filename, text, content_type, subdir=None ):
""" See IExportContext.
"""
if subdir is None:
prefix = self._profile_path
else:
prefix = os.path.join( self._profile_path, subdir )
full_path = os.path.join( prefix, filename )
if not os.path.exists( prefix ):
os.makedirs( prefix )
mode = content_type.startswith( 'text/' ) and 'w' or 'wb'
file = open( full_path, mode )
file.write( text )
file.close()
InitializeClass( ExportContext )
=== CMF/CMFSetup/interfaces.py 1.1 => 1.2 ===
--- CMF/CMFSetup/interfaces.py:1.1 Tue May 18 18:14:03 2004
+++ CMF/CMFSetup/interfaces.py Fri May 21 17:12:39 2004
@@ -16,7 +16,7 @@
class IImportContext( ISetupContext ):
- def readDatafile( filename, subdir=None ):
+ def readDataFile( filename, subdir=None ):
""" Search the current configuration for the requested file.
@@ -40,7 +40,7 @@
o If the profile is filesystem based, return the 'stat' timestamp
of the file / directory to which 'path' points.
- o If the profile is ZODB-based, return the Zopd modification time
+ o If the profile is ZODB-based, return the Zope modification time
of the object to which 'path' points.
o Return None if 'path' does not point to any object in any profile.
@@ -55,6 +55,9 @@
o If the profile is ZODB-based, check that 'path' points to a
"container" under the profile.
+
+ o Return None if 'path' does not resolve; otherwise, return a
+ bool.
"""
def listDirectory( path, skip=('CVS',) ):
@@ -62,6 +65,8 @@
""" List IDs of the contents of a profile directory / folder.
o Omit names in 'skip'.
+
+ o If 'path' does not point to a directory / folder, return None.
"""
def shouldPurge():
@@ -69,7 +74,7 @@
""" When installing, should the existing setup be purged?
"""
-def IExportContext( ISetupContext ):
+class IExportContext( ISetupContext ):
def writeDataFile( filename, text, content_type, subdir=None ):
More information about the CMF-checkins
mailing list