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
be5b9ddf
Commit
be5b9ddf
authored
Jun 17, 2010
by
willmcgugan
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added support for xattr to MemoryFile
parent
55dd394e
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
85 additions
and
2 deletions
+85
-2
fs/memoryfs.py
+85
-2
No files found.
fs/memoryfs.py
View file @
be5b9ddf
...
@@ -117,6 +117,7 @@ class MemoryFile(object):
...
@@ -117,6 +117,7 @@ class MemoryFile(object):
return
self
.
mem_file
.
truncate
(
*
args
,
**
kwargs
)
return
self
.
mem_file
.
truncate
(
*
args
,
**
kwargs
)
def
write
(
self
,
data
):
def
write
(
self
,
data
):
self
.
memory_fs
.
_on_modify_memory_file
(
self
.
path
)
return
self
.
mem_file
.
write
(
data
)
return
self
.
mem_file
.
write
(
data
)
def
writelines
(
self
,
*
args
,
**
kwargs
):
def
writelines
(
self
,
*
args
,
**
kwargs
):
...
@@ -150,6 +151,9 @@ class DirEntry(object):
...
@@ -150,6 +151,9 @@ class DirEntry(object):
self
.
created_time
=
datetime
.
datetime
.
now
()
self
.
created_time
=
datetime
.
datetime
.
now
()
self
.
modified_time
=
self
.
created_time
self
.
modified_time
=
self
.
created_time
self
.
accessed_time
=
self
.
created_time
self
.
accessed_time
=
self
.
created_time
self
.
st_mode
=
0700
self
.
xattrs
=
{}
def
lock
(
self
):
def
lock
(
self
):
self
.
locks
+=
1
self
.
locks
+=
1
...
@@ -215,6 +219,13 @@ class MemoryFS(FS):
...
@@ -215,6 +219,13 @@ class MemoryFS(FS):
return
current_dir
return
current_dir
@synchronize
@synchronize
def
_dir_entry
(
self
,
path
):
dir_entry
=
self
.
_get_dir_entry
(
path
)
if
dir_entry
is
None
:
raise
ResourceNotFoundError
(
path
)
return
dir_entry
@synchronize
def
desc
(
self
,
path
):
def
desc
(
self
,
path
):
if
self
.
isdir
(
path
):
if
self
.
isdir
(
path
):
return
"Memory dir"
return
"Memory dir"
...
@@ -333,7 +344,6 @@ class MemoryFS(FS):
...
@@ -333,7 +344,6 @@ class MemoryFS(FS):
if
'a'
in
mode
:
if
'a'
in
mode
:
if
file_dir_entry
.
islocked
():
if
file_dir_entry
.
islocked
():
raise
ResourceLockedError
(
path
)
raise
ResourceLockedError
(
path
)
file_dir_entry
.
modified_time
=
datetime
.
datetime
.
now
()
file_dir_entry
.
accessed_time
=
datetime
.
datetime
.
now
()
file_dir_entry
.
accessed_time
=
datetime
.
datetime
.
now
()
self
.
_lock_dir_entry
(
path
)
self
.
_lock_dir_entry
(
path
)
...
@@ -351,7 +361,6 @@ class MemoryFS(FS):
...
@@ -351,7 +361,6 @@ class MemoryFS(FS):
if
file_dir_entry
.
islocked
():
if
file_dir_entry
.
islocked
():
raise
ResourceLockedError
(
path
)
raise
ResourceLockedError
(
path
)
file_dir_entry
.
accessed_time
=
datetime
.
datetime
.
now
()
file_dir_entry
.
accessed_time
=
datetime
.
datetime
.
now
()
file_dir_entry
.
modified_time
=
datetime
.
datetime
.
now
()
self
.
_lock_dir_entry
(
path
)
self
.
_lock_dir_entry
(
path
)
...
@@ -425,11 +434,13 @@ class MemoryFS(FS):
...
@@ -425,11 +434,13 @@ class MemoryFS(FS):
raise
DestinationExistsError
(
path
)
raise
DestinationExistsError
(
path
)
src_dir_entry
=
self
.
_get_dir_entry
(
src_dir
)
src_dir_entry
=
self
.
_get_dir_entry
(
src_dir
)
src_xattrs
=
src_dir_entry
.
xattrs
.
copy
()
dst_dir_entry
=
self
.
_get_dir_entry
(
dst_dir
)
dst_dir_entry
=
self
.
_get_dir_entry
(
dst_dir
)
if
dst_dir_entry
is
None
:
if
dst_dir_entry
is
None
:
raise
ParentDirectoryMissingError
(
dst
)
raise
ParentDirectoryMissingError
(
dst
)
dst_dir_entry
.
contents
[
dst_name
]
=
src_dir_entry
.
contents
[
src_name
]
dst_dir_entry
.
contents
[
dst_name
]
=
src_dir_entry
.
contents
[
src_name
]
dst_dir_entry
.
contents
[
dst_name
]
.
name
=
dst_name
dst_dir_entry
.
contents
[
dst_name
]
.
name
=
dst_name
dst_dir_entry
.
xattrs
.
update
(
src_xattrs
)
del
src_dir_entry
.
contents
[
src_name
]
del
src_dir_entry
.
contents
[
src_name
]
...
@@ -464,6 +475,12 @@ class MemoryFS(FS):
...
@@ -464,6 +475,12 @@ class MemoryFS(FS):
dir_entry
.
data
=
value
dir_entry
.
data
=
value
@synchronize
@synchronize
def
_on_modify_memory_file
(
self
,
path
):
dir_entry
=
self
.
_get_dir_entry
(
path
)
dir_entry
.
modified_time
=
datetime
.
datetime
.
now
()
@synchronize
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
):
dir_entry
=
self
.
_get_dir_entry
(
path
)
dir_entry
=
self
.
_get_dir_entry
(
path
)
if
dir_entry
is
None
:
if
dir_entry
is
None
:
...
@@ -490,5 +507,70 @@ class MemoryFS(FS):
...
@@ -490,5 +507,70 @@ class MemoryFS(FS):
if
dir_entry
.
isfile
():
if
dir_entry
.
isfile
():
info
[
'size'
]
=
len
(
dir_entry
.
data
or
''
)
info
[
'size'
]
=
len
(
dir_entry
.
data
or
''
)
info
[
'st_mode'
]
=
0666
else
:
info
[
'st_mode'
]
=
0700
return
info
return
info
@synchronize
def
copydir
(
self
,
src
,
dst
,
overwrite
=
False
,
ignore_errors
=
False
,
chunk_size
=
16384
):
src_dir_entry
=
self
.
_get_dir_entry
(
src
)
src_xattrs
=
src_dir_entry
.
xattrs
.
copy
()
super
(
MemoryFS
,
self
)
.
copydir
(
src
,
dst
,
overwrite
,
ignore_errors
=
ignore_errors
,
chunk_size
=
chunk_size
)
dst_dir_entry
=
self
.
_get_dir_entry
(
dst
)
if
dst_dir_entry
is
not
None
:
dst_dir_entry
.
xattrs
.
update
(
src_xattrs
)
@synchronize
def
movedir
(
self
,
src
,
dst
,
overwrite
=
False
,
ignore_errors
=
False
,
chunk_size
=
16384
):
src_dir_entry
=
self
.
_get_dir_entry
(
src
)
src_xattrs
=
src_dir_entry
.
xattrs
.
copy
()
super
(
MemoryFS
,
self
)
.
movedir
(
src
,
dst
,
overwrite
,
ignore_errors
=
ignore_errors
,
chunk_size
=
chunk_size
)
dst_dir_entry
=
self
.
_get_dir_entry
(
dst
)
if
dst_dir_entry
is
not
None
:
dst_dir_entry
.
xattrs
.
update
(
src_xattrs
)
@synchronize
def
copy
(
self
,
src
,
dst
,
overwrite
=
False
,
chunk_size
=
16384
):
src_dir_entry
=
self
.
_get_dir_entry
(
src
)
src_xattrs
=
src_dir_entry
.
xattrs
.
copy
()
super
(
MemoryFS
,
self
)
.
copy
(
src
,
dst
,
overwrite
,
chunk_size
)
dst_dir_entry
=
self
.
_get_dir_entry
(
dst
)
if
dst_dir_entry
is
not
None
:
dst_dir_entry
.
xattrs
.
update
(
src_xattrs
)
@synchronize
def
move
(
self
,
src
,
dst
,
overwrite
=
False
,
chunk_size
=
16384
):
src_dir_entry
=
self
.
_get_dir_entry
(
src
)
src_xattrs
=
src_dir_entry
.
xattrs
.
copy
()
super
(
MemoryFS
,
self
)
.
move
(
src
,
dst
,
overwrite
,
chunk_size
)
dst_dir_entry
=
self
.
_get_dir_entry
(
dst
)
if
dst_dir_entry
is
not
None
:
dst_dir_entry
.
xattrs
.
update
(
src_xattrs
)
@synchronize
def
setxattr
(
self
,
path
,
key
,
value
):
dir_entry
=
self
.
_dir_entry
(
path
)
key
=
unicode
(
key
)
dir_entry
.
xattrs
[
key
]
=
value
@synchronize
def
getxattr
(
self
,
path
,
key
,
default
=
None
):
key
=
unicode
(
key
)
dir_entry
=
self
.
_dir_entry
(
path
)
return
dir_entry
.
xattrs
.
get
(
key
,
default
)
@synchronize
def
delxattr
(
self
,
path
,
key
):
dir_entry
=
self
.
_dir_entry
(
path
)
try
:
del
dir_entry
.
xattrs
[
key
]
except
KeyError
:
pass
@synchronize
def
listxattrs
(
self
,
path
):
dir_entry
=
self
.
_dir_entry
(
path
)
return
dir_entry
.
xattrs
.
keys
()
\ No newline at end of file
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