summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwillmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f>2010-12-11 20:55:56 +0000
committerwillmcgugan <willmcgugan@67cdc799-7952-0410-af00-57a81ceafa0f>2010-12-11 20:55:56 +0000
commitae7768bf6756a21bdfc4748018efeb024adc938d (patch)
tree8849e24eb4f80de66627c6a190e8dc36be6e7eeb
parenteed3b3544dc21837a17bbb08d741f68aee4ab1d1 (diff)
downloadpyfilesystem-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/fsmkdir4
-rw-r--r--fs/commands/fsmkdir.py24
-rw-r--r--fs/commands/fsserve.py72
-rw-r--r--fs/commands/runner.py4
-rw-r--r--fs/expose/http.py13
-rw-r--r--fs/opener.py21
-rw-r--r--setup.py3
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,
diff --git a/setup.py b/setup.py
index 4f12436..2b9bdc8 100644
--- a/setup.py
+++ b/setup.py
@@ -11,7 +11,8 @@ COMMANDS = ['fscat',
'fscp',
'fsrm',
'fsserve',
- 'fstree']
+ 'fstree',
+ 'fsmkdir']
classifiers = [