Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pyfs
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
pyfs
Commits
9c879d04
Commit
9c879d04
authored
Dec 12, 2010
by
willmcgugan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Command fixes
parent
155f51dc
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
65 additions
and
66 deletions
+65
-66
fs/base.py
+2
-0
fs/commands/fscp.py
+1
-1
fs/commands/fsmkdir.py
+3
-2
fs/commands/fsmv.py
+1
-1
fs/commands/fsrm.py
+1
-1
fs/commands/fsserve.py
+7
-0
fs/commands/fstree.py
+1
-1
fs/commands/runner.py
+2
-4
fs/opener.py
+26
-30
fs/osfs/__init__.py
+1
-1
fs/rpcfs.py
+7
-10
fs/utils.py
+4
-11
fs/wrapfs/__init__.py
+6
-1
fs/wrapfs/subfs.py
+3
-3
No files found.
fs/base.py
View file @
9c879d04
...
@@ -649,6 +649,8 @@ class FS(object):
...
@@ -649,6 +649,8 @@ class FS(object):
:rtype: An FS object
:rtype: An FS object
"""
"""
if
path
in
(
''
,
'/'
):
return
self
from
fs.wrapfs.subfs
import
SubFS
from
fs.wrapfs.subfs
import
SubFS
if
not
self
.
exists
(
path
):
if
not
self
.
exists
(
path
):
raise
ResourceNotFoundError
(
path
)
raise
ResourceNotFoundError
(
path
)
...
...
fs/commands/fscp.py
View file @
9c879d04
...
@@ -124,7 +124,7 @@ Copy SOURCE to DESTINATION"""
...
@@ -124,7 +124,7 @@ Copy SOURCE to DESTINATION"""
self
.
total_files
=
len
(
copy_fs_paths
)
self
.
total_files
=
len
(
copy_fs_paths
)
self
.
done_files
=
0
self
.
done_files
=
0
file_queue
=
queue
.
Queue
()
file_queue
=
queue
.
Queue
()
threads
=
[
FileOpThread
(
self
.
get_action
(),
threads
=
[
FileOpThread
(
self
.
get_action
(),
'T
%
i'
%
i
,
'T
%
i'
%
i
,
dst_fs
,
dst_fs
,
...
...
fs/commands/fsmkdir.py
View file @
9c879d04
...
@@ -13,8 +13,9 @@ Make a directory"""
...
@@ -13,8 +13,9 @@ Make a directory"""
def
do_run
(
self
,
options
,
args
):
def
do_run
(
self
,
options
,
args
):
for
fs_url
in
args
:
for
fs_url
in
args
:
fs
,
path
=
self
.
open_fs
(
fs_url
,
create
=
True
)
fs
,
path
=
self
.
open_fs
(
fs_url
,
create
=
True
)
print
fs
,
path
def
run
():
def
run
():
return
FSMkdir
()
.
run
()
return
FSMkdir
()
.
run
()
...
...
fs/commands/fsmv.py
View file @
9c879d04
...
@@ -2,7 +2,7 @@ from fs.utils import movefile, contains_files
...
@@ -2,7 +2,7 @@ from fs.utils import movefile, contains_files
from
fs.commands
import
fscp
from
fs.commands
import
fscp
import
sys
import
sys
class
FSMove
(
fscp
.
FS
Copy
):
class
FSMove
(
fscp
.
FS
cp
):
usage
=
"""fsmv [OPTION]... [SOURCE] [DESTINATION]
usage
=
"""fsmv [OPTION]... [SOURCE] [DESTINATION]
Move files from SOURCE to DESTINATION"""
Move files from SOURCE to DESTINATION"""
...
...
fs/commands/fsrm.py
View file @
9c879d04
...
@@ -25,7 +25,7 @@ Remove a file or directory at PATH"""
...
@@ -25,7 +25,7 @@ Remove a file or directory at PATH"""
interactive
=
options
.
interactive
interactive
=
options
.
interactive
verbose
=
options
.
verbose
verbose
=
options
.
verbose
for
fs
,
path
,
is_dir
in
self
.
get_resources
(
args
):
for
fs
,
path
,
is_dir
in
self
.
get_resources
(
args
):
if
interactive
:
if
interactive
:
if
is_dir
:
if
is_dir
:
msg
=
"remove directory '
%
s'?"
%
path
msg
=
"remove directory '
%
s'?"
%
path
...
...
fs/commands/fsserve.py
View file @
9c879d04
...
@@ -29,6 +29,13 @@ Serves the contents of PATH with one of a number of methods"""
...
@@ -29,6 +29,13 @@ Serves the contents of PATH with one of a number of methods"""
fs_url
=
'./'
fs_url
=
'./'
fs
,
path
=
self
.
open_fs
(
fs_url
)
fs
,
path
=
self
.
open_fs
(
fs_url
)
if
fs
.
isdir
(
path
):
fs
=
fs
.
opendir
(
path
)
path
=
'/'
if
options
.
verbose
:
print
"Serving
\"
%
s
\"
in
%
s"
%
(
path
,
fs
)
port
=
options
.
port
port
=
options
.
port
...
...
fs/commands/fstree.py
View file @
9c879d04
...
@@ -13,7 +13,7 @@ Recursively display the contents of PATH in an ascii tree"""
...
@@ -13,7 +13,7 @@ Recursively display the contents of PATH in an ascii tree"""
def
get_optparse
(
self
):
def
get_optparse
(
self
):
optparse
=
super
(
FSTree
,
self
)
.
get_optparse
()
optparse
=
super
(
FSTree
,
self
)
.
get_optparse
()
optparse
.
add_option
(
'-
L
'
,
'--level'
,
dest
=
'depth'
,
type
=
"int"
,
default
=
5
,
optparse
.
add_option
(
'-
l
'
,
'--level'
,
dest
=
'depth'
,
type
=
"int"
,
default
=
5
,
help
=
"Descend only LEVEL directories deep"
,
metavar
=
"LEVEL"
)
help
=
"Descend only LEVEL directories deep"
,
metavar
=
"LEVEL"
)
optparse
.
add_option
(
'-a'
,
'--all'
,
dest
=
'all'
,
action
=
'store_true'
,
default
=
False
,
optparse
.
add_option
(
'-a'
,
'--all'
,
dest
=
'all'
,
action
=
'store_true'
,
default
=
False
,
help
=
"do not hide dot files"
)
help
=
"do not hide dot files"
)
...
...
fs/commands/runner.py
View file @
9c879d04
...
@@ -221,13 +221,11 @@ class Command(object):
...
@@ -221,13 +221,11 @@ class Command(object):
except
KeyboardInterrupt
:
except
KeyboardInterrupt
:
if
self
.
is_terminal
():
if
self
.
is_terminal
():
self
.
output
(
"
\n
"
)
self
.
output
(
"
\n
"
)
return
0
return
0
#except ValueError:
# pass
except
SystemExit
:
except
SystemExit
:
return
0
return
0
except
Exception
,
e
:
except
Exception
,
e
:
self
.
error
(
self
.
wrap_error
(
'
Internal
Error -
%
s
\n
'
%
unicode
(
e
)))
self
.
error
(
self
.
wrap_error
(
'Error -
%
s
\n
'
%
unicode
(
e
)))
return
1
return
1
...
...
fs/opener.py
View file @
9c879d04
...
@@ -79,7 +79,7 @@ class OpenerRegistry(object):
...
@@ -79,7 +79,7 @@ class OpenerRegistry(object):
for
name
in
opener
.
names
:
for
name
in
opener
.
names
:
self
.
registry
[
name
]
=
index
self
.
registry
[
name
]
=
index
def
parse
(
self
,
fs_url
,
default_fs_name
=
None
,
writeable
=
False
,
create
=
False
):
def
parse
(
self
,
fs_url
,
default_fs_name
=
None
,
open_dir
=
True
,
writeable
=
False
,
create
=
False
):
orig_url
=
fs_url
orig_url
=
fs_url
match
=
self
.
split_segments
(
fs_url
)
match
=
self
.
split_segments
(
fs_url
)
...
@@ -110,27 +110,27 @@ class OpenerRegistry(object):
...
@@ -110,27 +110,27 @@ class OpenerRegistry(object):
if
fs_url
is
None
:
if
fs_url
is
None
:
raise
OpenerError
(
"Unable to parse '
%
s'"
%
orig_url
)
raise
OpenerError
(
"Unable to parse '
%
s'"
%
orig_url
)
#wildcard = None
#if iswildcard(fs_url):
# fs_url, wildcard = pathsplit(fs_url)
fs
,
fs_path
=
opener
.
get_fs
(
self
,
fs_name
,
fs_name_params
,
fs_url
,
writeable
,
create
)
fs
,
fs_path
=
opener
.
get_fs
(
self
,
fs_name
,
fs_name_params
,
fs_url
,
writeable
,
create
)
pathname
,
resourcename
=
pathsplit
(
fs_path
or
''
)
if
pathname
:
fs
=
fs
.
opendir
(
pathname
)
fs_path
=
resourcename
if
fs_path
and
iswildcard
(
fs_path
):
if
fs_path
and
iswildcard
(
fs_path
):
return
fs
,
fs_path
pathname
,
resourcename
=
pathsplit
(
fs_path
or
''
)
if
pathname
:
fs
=
fs
.
opendir
(
pathname
)
return
fs
,
resourcename
#pathname, resourcename = pathsplit(fs_path or '')
#if pathname and resourcename:
# fs = fs.opendir(pathname)
# fs_path = resourcename
fs_path
=
join
(
fs_path
,
path
)
fs_path
=
join
(
fs_path
,
path
)
pathname
,
resourcename
=
pathsplit
(
fs_path
or
''
)
pathname
,
resourcename
=
pathsplit
(
fs_path
or
''
)
if
pathname
:
if
pathname
and
resourcename
:
fs
=
fs
.
opendir
(
pathname
)
fs
=
fs
.
opendir
(
pathname
)
fs_path
=
resourcename
fs_path
=
resourcename
return
fs
,
fs_path
return
fs
,
fs_path
def
parse_credentials
(
self
,
url
):
def
parse_credentials
(
self
,
url
):
...
@@ -180,17 +180,12 @@ class OSFSOpener(Opener):
...
@@ -180,17 +180,12 @@ class OSFSOpener(Opener):
from
fs.osfs
import
OSFS
from
fs.osfs
import
OSFS
path
=
_expand_syspath
(
fs_path
)
path
=
_expand_syspath
(
fs_path
)
if
create
:
if
create
and
not
os
.
path
.
exists
(
path
):
from
fs.osfs
import
_os_makedirs
from
fs.osfs
import
_os_makedirs
_os_makedirs
(
fs_path
)
_os_makedirs
(
path
)
if
os
.
path
.
isdir
(
path
):
dirname
,
resourcename
=
pathsplit
(
fs_path
)
osfs
=
OSFS
(
path
)
osfs
=
OSFS
(
dirname
)
filepath
=
None
return
osfs
,
resourcename
else
:
path
,
filepath
=
pathsplit
(
path
)
osfs
=
OSFS
(
path
,
create
=
create
)
return
osfs
,
filepath
class
ZipOpener
(
Opener
):
class
ZipOpener
(
Opener
):
names
=
[
'zip'
,
'zip64'
]
names
=
[
'zip'
,
'zip64'
]
...
@@ -210,8 +205,7 @@ class ZipOpener(Opener):
...
@@ -210,8 +205,7 @@ class ZipOpener(Opener):
else
:
else
:
open_mode
=
'rb'
open_mode
=
'rb'
zip_file
=
zip_fs
.
open
(
zip_path
,
mode
=
open_mode
)
zip_file
=
zip_fs
.
open
(
zip_path
,
mode
=
open_mode
)
username
,
password
,
fs_path
=
registry
.
parse_credentials
(
fs_path
)
username
,
password
,
fs_path
=
registry
.
parse_credentials
(
fs_path
)
...
@@ -251,7 +245,7 @@ class RPCOpener(Opener):
...
@@ -251,7 +245,7 @@ class RPCOpener(Opener):
if
create
and
path
:
if
create
and
path
:
rpcfs
.
makedir
(
path
,
recursive
=
True
,
allow_recreate
=
True
)
rpcfs
.
makedir
(
path
,
recursive
=
True
,
allow_recreate
=
True
)
return
rpcfs
,
path
or
None
return
rpcfs
,
path
or
None
...
@@ -387,7 +381,9 @@ opener = OpenerRegistry([OSFSOpener,
...
@@ -387,7 +381,9 @@ opener = OpenerRegistry([OSFSOpener,
def
main
():
def
main
():
fs
,
path
=
opener
.
parse
(
'zip:zip://~/zips.zip!t.zip!'
)
#fs, path = opener.parse('zip:zip://~/zips.zip!t.zip!')
fs
,
path
=
opener
.
parse
(
'rpc://127.0.0.1/a/*.JPG'
)
print
fs
,
path
print
fs
,
path
if
__name__
==
"__main__"
:
if
__name__
==
"__main__"
:
...
...
fs/osfs/__init__.py
View file @
9c879d04
...
@@ -230,7 +230,7 @@ class OSFS(OSFSXAttrMixin, OSFSWatchMixin, FS):
...
@@ -230,7 +230,7 @@ class OSFS(OSFSXAttrMixin, OSFSWatchMixin, FS):
@convert_os_errors
@convert_os_errors
def
remove
(
self
,
path
):
def
remove
(
self
,
path
):
sys_path
=
self
.
getsyspath
(
path
)
sys_path
=
self
.
getsyspath
(
path
)
try
:
try
:
os
.
remove
(
sys_path
)
os
.
remove
(
sys_path
)
except
OSError
,
e
:
except
OSError
,
e
:
if
e
.
errno
==
errno
.
EACCES
and
sys
.
platform
==
"win32"
:
if
e
.
errno
==
errno
.
EACCES
and
sys
.
platform
==
"win32"
:
...
...
fs/rpcfs.py
View file @
9c879d04
...
@@ -27,21 +27,18 @@ def re_raise_faults(func):
...
@@ -27,21 +27,18 @@ def re_raise_faults(func):
#import traceback
#import traceback
#traceback.print_exc()
#traceback.print_exc()
# Make sure it's in a form we can handle
# Make sure it's in a form we can handle
bits
=
f
.
faultString
.
split
(
" "
)
bits
=
f
.
faultString
.
split
(
" "
)
if
bits
[
0
]
not
in
[
"<type"
,
"<class"
]:
if
bits
[
0
]
not
in
[
"<type"
,
"<class"
]:
raise
f
raise
f
# Find the class/type object
# Find the class/type object
bits
=
" "
.
join
(
bits
[
1
:])
.
split
(
">:"
)
bits
=
" "
.
join
(
bits
[
1
:])
.
split
(
">:"
)
cls
=
bits
[
0
]
cls
=
bits
[
0
]
msg
=
">:"
.
join
(
bits
[
1
:])
msg
=
">:"
.
join
(
bits
[
1
:])
while
cls
[
0
]
in
[
"'"
,
'"'
]:
cls
=
cls
.
strip
(
'
\'
'
)
cls
=
cls
[
1
:]
while
cls
[
-
1
]
in
[
"'"
,
'"'
]:
cls
=
cls
[:
-
1
]
cls
=
_object_by_name
(
cls
)
cls
=
_object_by_name
(
cls
)
# Re-raise using the remainder of the fault code as message
# Re-raise using the remainder of the fault code as message
if
cls
:
if
cls
:
raise
cls
(
msg
)
raise
cls
(
msg
=
msg
)
raise
f
raise
f
except
socket
.
error
,
e
:
except
socket
.
error
,
e
:
raise
RemoteConnectionError
(
str
(
e
),
details
=
e
)
raise
RemoteConnectionError
(
str
(
e
),
details
=
e
)
...
@@ -210,7 +207,7 @@ class RPCFS(FS):
...
@@ -210,7 +207,7 @@ class RPCFS(FS):
path
=
self
.
encode_path
(
path
)
path
=
self
.
encode_path
(
path
)
return
self
.
proxy
.
isfile
(
path
)
return
self
.
proxy
.
isfile
(
path
)
def
listdir
(
self
,
path
=
"./"
,
wildcard
=
None
,
full
=
False
,
absolute
=
False
,
dirs_only
=
False
,
files_only
=
False
):
def
listdir
(
self
,
path
=
"./"
,
wildcard
=
None
,
full
=
False
,
absolute
=
False
,
dirs_only
=
False
,
files_only
=
False
):
path
=
self
.
encode_path
(
path
)
path
=
self
.
encode_path
(
path
)
entries
=
self
.
proxy
.
listdir
(
path
,
wildcard
,
full
,
absolute
,
dirs_only
,
files_only
)
entries
=
self
.
proxy
.
listdir
(
path
,
wildcard
,
full
,
absolute
,
dirs_only
,
files_only
)
return
[
self
.
decode_path
(
e
)
for
e
in
entries
]
return
[
self
.
decode_path
(
e
)
for
e
in
entries
]
...
...
fs/utils.py
View file @
9c879d04
...
@@ -56,10 +56,7 @@ def copyfile(src_fs, src_path, dst_fs, dst_path, overwrite=True, chunk_size=64*1
...
@@ -56,10 +56,7 @@ def copyfile(src_fs, src_path, dst_fs, dst_path, overwrite=True, chunk_size=64*1
src
=
None
src
=
None
try
:
try
:
# Chunk copy
# Chunk copy
if
src_fs
.
getsize
(
src_path
)
<
chunk_size
:
src
=
src_fs
.
open
(
src_path
,
'rb'
)
src
=
src_fs
.
getcontents
(
src_path
)
else
:
src
=
src_fs
.
open
(
src_path
,
'rb'
)
dst_fs
.
setcontents
(
dst_path
,
src
,
chunk_size
=
chunk_size
)
dst_fs
.
setcontents
(
dst_path
,
src
,
chunk_size
=
chunk_size
)
finally
:
finally
:
if
src
is
not
None
and
hasattr
(
src
,
'close'
):
if
src
is
not
None
and
hasattr
(
src
,
'close'
):
...
@@ -92,19 +89,15 @@ def movefile(src_fs, src_path, dst_fs, dst_path, overwrite=True, chunk_size=64*1
...
@@ -92,19 +89,15 @@ def movefile(src_fs, src_path, dst_fs, dst_path, overwrite=True, chunk_size=64*1
FS
.
_shutil_movefile
(
src_syspath
,
dst_syspath
)
FS
.
_shutil_movefile
(
src_syspath
,
dst_syspath
)
return
return
src
=
None
src
=
None
try
:
try
:
# Chunk copy
# Chunk copy
if
src_fs
.
getsize
(
src_path
)
<
chunk_size
:
src
=
src_fs
.
open
(
src_path
,
'rb'
)
src
=
src_fs
.
getcontents
(
src_path
)
dst_fs
.
setcontents
(
dst_path
,
src
,
chunk_size
=
chunk_size
)
else
:
src
=
src_fs
.
open
(
src_path
,
'rb'
)
dst_fs
.
setcontents
(
dst_path
,
src
,
chunk_size
=
chunk_size
)
src_fs
.
remove
(
src_path
)
finally
:
finally
:
if
src
is
not
None
and
hasattr
(
src
,
'close'
):
if
src
is
not
None
and
hasattr
(
src
,
'close'
):
src
.
close
()
src
.
close
()
src_fs
.
remove
(
src_path
)
def
movedir
(
fs1
,
fs2
,
overwrite
=
False
,
ignore_errors
=
False
,
chunk_size
=
64
*
1024
):
def
movedir
(
fs1
,
fs2
,
overwrite
=
False
,
ignore_errors
=
False
,
chunk_size
=
64
*
1024
):
"""Moves contents of a directory from one filesystem to another.
"""Moves contents of a directory from one filesystem to another.
...
...
fs/wrapfs/__init__.py
View file @
9c879d04
...
@@ -164,7 +164,12 @@ class WrapFS(FS):
...
@@ -164,7 +164,12 @@ class WrapFS(FS):
return
self
.
wrapped_fs
.
isfile
(
self
.
_encode
(
path
))
return
self
.
wrapped_fs
.
isfile
(
self
.
_encode
(
path
))
@rewrite_errors
@rewrite_errors
def
listdir
(
self
,
path
=
""
,
**
kwds
):
def
listdir
(
self
,
path
=
""
,
wildcard
=
None
,
full
=
False
,
absolute
=
False
,
dirs_only
=
False
,
files_only
=
False
):
kwds
=
dict
(
wildcard
=
wildcard
,
full
=
full
,
absolute
=
absolute
,
dirs_only
=
dirs_only
,
files_only
=
files_only
)
full
=
kwds
.
pop
(
"full"
,
False
)
full
=
kwds
.
pop
(
"full"
,
False
)
absolute
=
kwds
.
pop
(
"absolute"
,
False
)
absolute
=
kwds
.
pop
(
"absolute"
,
False
)
wildcard
=
kwds
.
pop
(
"wildcard"
,
None
)
wildcard
=
kwds
.
pop
(
"wildcard"
,
None
)
...
...
fs/wrapfs/subfs.py
View file @
9c879d04
...
@@ -30,16 +30,16 @@ class SubFS(WrapFS):
...
@@ -30,16 +30,16 @@ class SubFS(WrapFS):
return
abspath
(
normpath
(
path
))[
len
(
self
.
sub_dir
):]
return
abspath
(
normpath
(
path
))[
len
(
self
.
sub_dir
):]
def
__str__
(
self
):
def
__str__
(
self
):
return
"
<SubFS:
%
s in
%
s>"
%
(
self
.
sub_dir
,
self
.
wrapped_fs
)
return
"
%
s/
%
s"
%
(
self
.
wrapped_fs
,
self
.
sub_dir
.
lstrip
(
'/'
)
)
def
__unicode__
(
self
):
def
__unicode__
(
self
):
return
u"
<SubFS:
%
s in
%
s>"
%
(
self
.
sub_dir
,
self
.
wrapped_fs
)
return
u"
%
s/
%
s"
%
(
self
.
wrapped_fs
,
self
.
sub_dir
.
lstrip
(
'/'
)
)
def
__repr__
(
self
):
def
__repr__
(
self
):
return
str
(
self
)
return
str
(
self
)
def
desc
(
self
,
path
):
def
desc
(
self
,
path
):
desc
=
"
%
s
in sub dir
%
s of
%
s"
%
(
path
,
self
.
sub_dir
,
str
(
self
.
wrapped_fs
)
)
desc
=
"
%
s
!
%
s"
%
(
str
(
self
),
path
)
return
desc
return
desc
def
setcontents
(
self
,
path
,
data
,
chunk_size
=
64
*
1024
):
def
setcontents
(
self
,
path
,
data
,
chunk_size
=
64
*
1024
):
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment