[Zope] extension stripping fsimport.py

Ethan Fremen mindlace@majordomo.net
Mon, 29 Nov 1999 19:28:52 +0000


This is a multi-part message in MIME format.
--------------10D3DF7963E8836AE1613D0A
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Do you use fsimport.py?  Sick and tired of all the html documents and images having .blah on the end of them, forcing you to use local namespace strangeness all the time?

Use this extremely mild update (2 lines) to fsimport.py and zope-friendly objects (i.e. those that don't turn into "file" objects) will have their extensions stripped.

Thanks,
--
Ethan "mindlace" Fremen
you cannot abdicate responsibility
for your ideology.
--------------10D3DF7963E8836AE1613D0A
Content-Type: text/plain; charset=us-ascii;
 name="fsimport.py"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="fsimport.py"

"""Filesystem import utility"""
__version__='$Revision:$'[11:-2]

import sys, os, string
from Globals import MessageDialog
from OFS.Image import File


def fsimport(self, fsdir, REQUEST=None):
    """Import a filesystem directory as a new folder object into
       the current folder. """
    if not os.path.isdir(fsdir):
        raise ValueError, 'Path does not exist'
    rcimport(fsdir, self)
    if REQUEST is not None:
        return MessageDialog(title='Directory imported.',
                             message='Directory imported.',
                             action='%s/manage_main' % REQUEST['URL1']
                             )

    


def rcimport(fsdir, obdir):
    filenames=os.listdir(fsdir)
    for name in filenames:
        pathname=os.path.join(fsdir, name)
        
        if name[0] in ('.', '#', '_'):
            continue

        if name[-1] in ('~',):
            continue

        elif os.path.isfile(pathname):
            if _isdoc(pathname):
                file=open(pathname, 'r')
                data=file.read()
                file.close()
                """line below added 29/11/99 by mindlace"""
                nname=string.split(name, '.')[0]
                obdir.manage_addDocument(nname, '', data)

            elif _isimg(pathname):
                file=open(pathname, 'rb')
                data=file.read()
                file.close()
                """line below added 29/11/99 by mindlace"""
                nname=string.split(name, '.')[0]
                obdir.manage_addImage(nname, data)

            else:
                file=open(pathname, 'rb')
                data=file.read()
                file.close()
                fobj=File(name, '', data, content_type=_ftype(pathname))
                obdir._setObject(name, fobj)

        elif os.path.isdir(pathname):
            obdir.manage_addFolder(name)
            rcimport(pathname, getattr(obdir, name))

        else:
            __traceback_info__=(fsdir, obdir, name)
            raise ValueError, name





typemap={
'a': 'application/octet-stream',
'ai': 'application/postscript',
'aif': 'audio/x-aiff',
'aifc': 'audio/x-aiff',
'aiff': 'audio/x-aiff',
'au': 'audio/basic',
'avi': 'video/x-msvideo',
'bcpio': 'application/x-bcpio',
'bin': 'application/octet-stream',
'cdf': 'application/x-netcdf',
'cpio': 'application/x-cpio',
'csh': 'application/x-csh',
'dll': 'application/octet-stream',
'dvi': 'application/x-dvi',
'exe': 'application/octet-stream',
'eps': 'application/postscript',
'etx': 'text/x-setext',
'gif': 'image/gif',
'gtar': 'application/x-gtar',
'gz': 'application/x-gzip',
'hdf': 'application/x-hdf',
'htm': 'text/html',
'html': 'text/html',
'ief': 'image/ief',
'jpe': 'image/jpeg',
'jpeg': 'image/jpeg',
'jpg': 'image/jpeg',
'latex': 'application/x-latex',
'man': 'application/x-troff-man',
'me': 'application/x-troff-me',
'mif': 'application/x-mif',
'mov': 'video/quicktime',
'movie': 'video/x-sgi-movie',
'mpe': 'video/mpeg',
'mpeg': 'video/mpeg',
'mpg': 'video/mpeg',
'ms': 'application/x-troff-ms',
'nc': 'application/x-netcdf',
'o': 'application/octet-stream',
'obj': 'application/octet-stream',
'oda': 'application/oda',
'pbm': 'image/x-portable-bitmap',
'pdf': 'application/pdf',
'pgm': 'image/x-portable-graymap',
'pnm': 'image/x-portable-anymap',
'png': 'image/png',
'ppm': 'image/x-portable-pixmap',
'py': 'text/x-python',
'pyc': 'application/x-python-code',
'ps': 'application/postscript',
'qt': 'video/quicktime',
'ras': 'image/x-cmu-raster',
'rgb': 'image/x-rgb',
'roff': 'application/x-troff',
'rtf': 'application/rtf',
'rtx': 'text/richtext',
'sgm': 'text/x-sgml',
'sgml': 'text/x-sgml',
'sh': 'application/x-sh',
'shar': 'application/x-shar',
'snd': 'audio/basic',
'so': 'application/octet-stream',
'src': 'application/x-wais-source',
'sv4cpio': 'application/x-sv4cpio',
'sv4crc': 'application/x-sv4crc',
't': 'application/x-troff',
'tar': 'application/x-tar',
'tcl': 'application/x-tcl',
'tex': 'application/x-tex',
'texi': 'application/x-texinfo',
'texinfo': 'application/x-texinfo',
'tif': 'image/tiff',
'tiff': 'image/tiff',
'tr': 'application/x-troff',
'tsv': 'text/tab-separated-values',
'txt': 'text/plain',
'ustar': 'application/x-ustar',
'wav': 'audio/x-wav',
'xbm': 'image/x-xbitmap',
'xpm': 'image/x-xpixmap',
'xwd': 'image/x-xwindowdump',
'zip': 'application/zip',
'Z': 'application/x-compress',
}


def _isdoc(path):
    ext=string.split(path, '.')[-1]
    return ext in ('html', 'htm', 'shtml', 'dtml', 'txt')

def _isimg(path):
    ext=string.split(path, '.')[-1]
    return ext in ('gif', 'jpg', 'png', 'bmp', 'jpeg')

def _ftype(path):
    ext=string.split(path, '.')[-1]
    if typemap.has_key(ext):
        return typemap[ext]
    return 'application/octet-stream'

--------------10D3DF7963E8836AE1613D0A--