diff options
author | willmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f> | 2010-12-11 20:55:56 +0000 |
---|---|---|
committer | willmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f> | 2010-12-11 20:55:56 +0000 |
commit | ae7768bf6756a21bdfc4748018efeb024adc938d (patch) | |
tree | 8849e24eb4f80de66627c6a190e8dc36be6e7eeb | |
parent | eed3b3544dc21837a17bbb08d741f68aee4ab1d1 (diff) | |
download | pyfilesystem-ae7768bf6756a21bdfc4748018efeb024adc938d.tar.gz |
Added fsmkdir command
git-svn-id: http://pyfilesystem.googlecode.com/svn/trunk@547 67cdc799-7952-0410-af00-57a81ceafa0f
-rw-r--r-- | fs/commands/fsmkdir | 4 | ||||
-rw-r--r-- | fs/commands/fsmkdir.py | 24 | ||||
-rw-r--r-- | fs/commands/fsserve.py | 72 | ||||
-rw-r--r-- | fs/commands/runner.py | 4 | ||||
-rw-r--r-- | fs/expose/http.py | 13 | ||||
-rw-r--r-- | fs/opener.py | 21 | ||||
-rw-r--r-- | setup.py | 3 |
7 files changed, 85 insertions, 56 deletions
diff --git a/fs/commands/fsmkdir b/fs/commands/fsmkdir new file mode 100644 index 0000000..13b4241 --- /dev/null +++ b/fs/commands/fsmkdir @@ -0,0 +1,4 @@ +#!/usr/bin/env python +import sys +from fs.commands.fsmkdir import run +sys.exit(run()) diff --git a/fs/commands/fsmkdir.py b/fs/commands/fsmkdir.py new file mode 100644 index 0000000..d5a5729 --- /dev/null +++ b/fs/commands/fsmkdir.py @@ -0,0 +1,24 @@ +#!/usr/bin/env python + +from fs.opener import opener +from fs.commands.runner import Command +import sys + +class FSMkdir(Command): + + usage = """fsmkdir [PATH] +Make a directory""" + + version = "1.0" + + def do_run(self, options, args): + + for fs_url in args: + fs, path = self.open_fs(fs_url, create=True) + +def run(): + return FSMkdir().run() + +if __name__ == "__main__": + sys.exit(run()) +
\ No newline at end of file diff --git a/fs/commands/fsserve.py b/fs/commands/fsserve.py index 5da0ef8..10b4b9f 100644 --- a/fs/commands/fsserve.py +++ b/fs/commands/fsserve.py @@ -26,43 +26,49 @@ Serves the contents of PATH with one of a number of methods""" try: fs_url = args[0] except IndexError: - self.error('FS path required\n') - return 1 + fs_url = './' fs, path = self.open_fs(fs_url) - if path and fs.isdir(path): - fs, path = fs.opendir(path), '/' - + port = options.port - - if options.type == 'http': - from fs.expose.http import serve_fs - if port is None: - port = 80 - serve_fs(fs, options.addr, port) - - elif options.type == 'rpc': - from fs.expose.xmlrpc import RPCFSServer - if port is None: - port = 80 - s = RPCFSServer(fs, (options.addr, port)) - s.serve_forever() - - elif options.type == 'sftp': - from fs.expose.sftp import BaseSFTPServer - if port is None: - port = 22 - server = BaseSFTPServer((options.addr, port), fs) - try: - server.serve_forever() - except Exception, e: - pass - finally: - server.server_close() - - else: - self.error("Server type '%s' not recognised\n" % options.type) + try: + + if options.type == 'http': + from fs.expose.http import serve_fs + if port is None: + port = 80 + serve_fs(fs, options.addr, port) + + elif options.type == 'rpc': + from fs.expose.xmlrpc import RPCFSServer + if port is None: + port = 80 + s = RPCFSServer(fs, (options.addr, port)) + s.serve_forever() + + elif options.type == 'sftp': + from fs.expose.sftp import BaseSFTPServer + if port is None: + port = 22 + server = BaseSFTPServer((options.addr, port), fs) + try: + server.serve_forever() + except Exception, e: + pass + finally: + server.server_close() + + else: + self.error("Server type '%s' not recognised\n" % options.type) + + except IOError, e: + if e.errno == 13: + self.error('Permission denied\n') + return 1 + else: + self.error(e.strerror + '\n') + return 1 def run(): return FSServe().run() diff --git a/fs/commands/runner.py b/fs/commands/runner.py index 4bb3970..8a27b1a 100644 --- a/fs/commands/runner.py +++ b/fs/commands/runner.py @@ -225,9 +225,7 @@ class Command(object): #except ValueError: # pass except SystemExit: - return 0 - except IOError: - return 1 + return 0 except Exception, e: self.error(self.wrap_error('Internal Error - %s\n' % unicode(e))) return 1 diff --git a/fs/expose/http.py b/fs/expose/http.py index 0f7086b..1d4fe50 100644 --- a/fs/expose/http.py +++ b/fs/expose/http.py @@ -124,24 +124,21 @@ class FSHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): return path -def serve_fs(fs, address='', port=8000): +def serve_fs(fs, address='', port=8000): def Handler(request, client_address, server): return FSHTTPRequestHandler(fs, request, client_address, server) #class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer): - # pass - - httpd = SocketServer.TCPServer((address, port), Handler, bind_and_activate=False) + # pass + httpd = SocketServer.TCPServer((address, port), Handler, bind_and_activate=False) #httpd = ThreadedTCPServer((address, port), Handler, bind_and_activate=False) httpd.allow_reuse_address = True httpd.server_bind() httpd.server_activate() - server_thread = threading.Thread(target=httpd.serve_forever) - server_thread.setDaemon(True) - server_thread.start() - + server_thread = threading.Thread(target=httpd.serve_forever) + server_thread.start() try: while True: time.sleep(0.1) diff --git a/fs/opener.py b/fs/opener.py index 8f51411..0111834 100644 --- a/fs/opener.py +++ b/fs/opener.py @@ -131,8 +131,7 @@ class OpenerRegistry(object): fs = fs.opendir(pathname) fs_path = resourcename - return fs, fs_path - + return fs, fs_path def parse_credentials(self, url): @@ -154,7 +153,7 @@ class OpenerRegistry(object): return fs_name, None def open(self, fs_url, mode='r'): - writeable = 'w' in mode or 'a' in mode + writeable = 'w' in mode or 'a' in mode or '+' in mode fs, path = self.parse(fs_url, writeable=writeable) file_object = fs.open(path, mode) return file_object @@ -179,12 +178,11 @@ class OSFSOpener(Opener): @classmethod def get_fs(cls, registry, fs_name, fs_name_params, fs_path, writeable, create): from fs.osfs import OSFS - username, password, fs_path = registry.parse_credentials(fs_path) - - + path = _expand_syspath(fs_path) if create: - sys.makedirs(fs_path) + from fs.osfs import _os_makedirs + _os_makedirs(fs_path) if os.path.isdir(path): osfs = OSFS(path) filepath = None @@ -236,6 +234,7 @@ class ZipOpener(Opener): zipfs = ZipFS(zip_file, mode=mode, allow_zip_64=allow_zip_64) return zipfs, None + class RPCOpener(Opener): names = ['rpc'] @@ -255,6 +254,7 @@ class RPCOpener(Opener): return rpcfs, path or None + class FTPOpener(Opener): names = ['ftp'] @@ -320,9 +320,6 @@ class SFTPOpener(Opener): else: host = (addr, port) - #if not username or not password: - # raise OpenerError('SFTP requires authentication') - if create: sftpfs = SFTPFS(host, root_path='/', **credentials) if not sftpfs._transport.is_authenticated(): @@ -350,6 +347,7 @@ class MemOpener(Opener): memfs = memfs.makeopendir(fs_path) return memfs, None + class DebugOpener(Opener): names = ['debug'] @@ -366,13 +364,14 @@ class DebugOpener(Opener): from fs.tempfs import TempFS return DebugFS(TempFS(), identifier=fs_name_params, verbose=False), None + class TempOpener(Opener): names = ['temp'] @classmethod def get_fs(cls, registry, fs_name, fs_name_params, fs_path, writeable, create): from fs.tempfs import TempFS - return TempFS(identifier=fs_name_params, temp_dir=fs_path), None + return TempFS(identifier=fs_name_params, temp_dir=fs_path, create=create), None opener = OpenerRegistry([OSFSOpener, @@ -11,7 +11,8 @@ COMMANDS = ['fscat', 'fscp', 'fsrm', 'fsserve', - 'fstree'] + 'fstree', + 'fsmkdir'] classifiers = [ |