[Zope3-checkins] CVS: Zope3/src/zope/server/interfaces - ftp.py:1.3 vfs.py:NONE

Jim Fulton jim@zope.com
Mon, 3 Feb 2003 10:09:38 -0500


Update of /cvs-repository/Zope3/src/zope/server/interfaces
In directory cvs.zope.org:/tmp/cvs-serv15846/src/zope/server/interfaces

Modified Files:
	ftp.py 
Removed Files:
	vfs.py 
Log Message:
Refactored the ftp framework to make it much simpler, less general,
and easier to maintain.  This included ripping out the vfs framework.


=== Zope3/src/zope/server/interfaces/ftp.py 1.2 => 1.3 ===
--- Zope3/src/zope/server/interfaces/ftp.py:1.2	Wed Dec 25 09:15:26 2002
+++ Zope3/src/zope/server/interfaces/ftp.py	Mon Feb  3 10:09:04 2003
@@ -1,4 +1,21 @@
-
+##############################################################################
+# Copyright (c) 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+# 
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+##############################################################################
+"""XXX short summary goes here.
+
+XXX longer description goes here.
+
+$Id$
+"""
+__metaclass__ = type
 
 from zope.interface import Interface
 
@@ -172,3 +189,204 @@
         'xpwd':        'print the current working directory (deprecated)',
         'xrmd':        'remove a directory (deprecated)',                            #!
 }
+
+
+class IFileSystemAccess(Interface):
+    """Provides authenticated access to a filesystem.
+    """
+
+    def authenticate(credentials):
+        """Verifies filesystem access based on the presented credentials.
+
+        Should raise Unauthorized if the user can not be authenticated.
+
+        This method only checks general access and is not used for each
+        call to open().  Rather, open() should do its own verification.
+
+        Credentials are passed as username/password tuples.
+        
+        """
+
+    def open(credentials):
+        """Returns an IFileSystem.
+
+        Should raise Unauthorized if the user can not be authenticated.
+
+        Credentials are passed as username/password tuples.
+
+        """
+
+
+class IFileSystem(Interface):
+    """We want to provide a complete wrapper around any and all read
+       filesystem operations.
+
+       Opening files for reading, and listing directories, should
+       return a producer.
+
+       All paths are POSIX paths, even when run on Windows,
+       which mainly means that FS implementations always expect forward
+       slashes, and filenames are case-sensitive.
+
+       Note: A file system should *not* store any state!
+    """
+
+    def type(path):
+        """Return the file type at path
+
+        The return valie is 'd', for a directory, 'f', for a file, and
+        None if there is no file at the path.
+
+        This method doesn't raise exceptions.
+        """
+
+    def names(path, filter=None):
+        """Return a sequence of the names in a directory
+
+        If the filter is not None, include only those names for which
+        the filter returns a true value.
+        """
+
+    def ls(path, filter=None):
+        """Return a sequence of information objects
+
+        Returm item info objects (see ls_info) for the files in a directory.
+
+        If the filter is not None, include only those names for which
+        the filter returns a true value.
+        """
+        return list(tuple(str, str))
+
+    def readfile(path, outstream, start=0, end=None):
+        """Outputs the file at path to a stream.
+
+        Data are copied starting from start. If end is not None,
+        data are copied up to end.
+        
+        """
+
+    def lsinfo(path):
+        """Return information for a unix-style ls listing for the path
+
+        Data are returned as a dictionary containing the following keys:
+
+        type
+
+           The path type, either 'd' or 'f'.
+
+        owner_name
+
+           Defaults to "na". Must not include spaces.
+
+        owner_readable
+
+           defaults to True
+
+        owner_writable
+
+           defaults to True
+
+        owner_executable
+
+           defaults to True for directories and false otherwise.
+
+        group_name
+
+           Defaults to "na". Must not include spaces.
+
+        group_readable
+
+           defaults to True
+
+        group_writable
+
+           defaults to True
+
+        group_executable
+
+           defaults to True for directories and false otherwise.
+
+        other_readable
+
+           defaults to False
+
+        other_writable
+
+           defaults to False
+
+        other_executable
+
+           defaults to True for directories and false otherwise.
+
+        mtime
+
+           Optional time, as a datetime. 
+
+        nlinks
+
+           The number of links. Defaults to 1.
+
+        size
+
+           The file size.  Defaults to 0.
+
+        name
+
+           The file name.           
+        """
+
+    def mtime(path):
+        """Return the modification time for the file
+
+        Return None if it is unknown.
+        """
+
+    def size(path):
+        """Return the size of the file at path
+        """
+
+    def mkdir(path):
+        """Create a directory.
+        """
+
+    def remove(path):
+        """Remove a file. Same as unlink.
+        """
+
+    def rmdir(path):
+        """Remove a directory.
+        """
+
+    def rename(old, new):
+        """Rename a file or directory.
+        """
+
+    def writefile(path, instream, start=None, end=None, append=False):
+        """Write data to a file.
+
+        If start or end is not None, then only part of the file is
+        written. The remainder of the file is unchanged.
+        If start or end are specified, they must ne non-negative.
+
+        If end is None, then the file is truncated after the data are
+        written.  If end is not None, parts of the file after end, if
+        any, are unchanged.  If end is not None and there isn't enough
+        data in instream to fill out the file, then the missing data
+        are undefined.
+        
+        If neither start nor end are specified, then the file contents
+        are overwritten.
+
+        If start is specified and the file doesn't exist or is shorter
+        than start, the file will contain undefined data before start.
+
+        If append is true, start and end are ignored.
+        """
+
+    def writable(path):
+        """Return boolean indicating whether a file at path is writable
+
+        Note that a true value should be returned if the file doesn't
+        exist but it's directory is writable.
+
+        """

=== Removed File Zope3/src/zope/server/interfaces/vfs.py ===