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
4ad6737d
Commit
4ad6737d
authored
Aug 15, 2012
by
gcode@loowis.durge.org
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactored/simplified the compatibility.copy_file_to_fs function.
parent
ef89627b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
42 additions
and
132 deletions
+42
-132
fs/base.py
+8
-83
fs/compatibility.py
+34
-49
No files found.
fs/base.py
View file @
4ad6737d
...
@@ -38,8 +38,7 @@ from fs.errors import *
...
@@ -38,8 +38,7 @@ from fs.errors import *
from
fs.local_functools
import
wraps
from
fs.local_functools
import
wraps
import
compatibility
import
compatibility
import
six
from
six
import
b
from
six
import
PY3
,
b
class
DummyLock
(
object
):
class
DummyLock
(
object
):
"""A dummy lock object that doesn't do anything.
"""A dummy lock object that doesn't do anything.
...
@@ -772,89 +771,15 @@ class FS(object):
...
@@ -772,89 +771,15 @@ class FS(object):
"""
"""
if
progress_callback
is
None
:
progress_callback
=
lambda
bytes_written
:
None
finished_event
=
threading
.
Event
()
finished_event
=
threading
.
Event
()
def
do_setcontents
():
def
do_setcontents
():
if
PY3
:
try
:
try
:
compatibility
.
copy_file_to_fs
(
data
,
self
,
path
,
chunk_size
=
chunk_size
,
progress_callback
=
progress_callback
,
finished_callback
=
finished_callback
)
f
=
None
except
Exception
,
e
:
try
:
if
error_callback
is
not
None
:
progress_callback
(
0
)
error_callback
(
e
)
finally
:
if
hasattr
(
data
,
"read"
):
finished_event
.
set
()
bytes_written
=
0
read
=
data
.
read
chunk
=
read
(
chunk_size
)
if
isinstance
(
chunk
,
six
.
text_type
):
f
=
self
.
open
(
path
,
'w'
)
else
:
f
=
self
.
open
(
path
,
'wb'
)
write
=
f
.
write
while
chunk
:
write
(
chunk
)
bytes_written
+=
len
(
chunk
)
progress_callback
(
bytes_written
)
chunk
=
read
(
chunk_size
)
else
:
if
isinstance
(
data
,
six
.
text_type
):
f
=
self
.
open
(
path
,
'w'
)
else
:
f
=
self
.
open
(
path
,
'wb'
)
f
.
write
(
data
)
progress_callback
(
len
(
data
))
if
finished_callback
is
not
None
:
finished_callback
()
finally
:
if
f
is
not
None
:
f
.
close
()
except
Exception
,
e
:
if
error_callback
is
not
None
:
error_callback
(
e
)
raise
finally
:
finished_event
.
set
()
else
:
try
:
f
=
None
try
:
f
=
self
.
open
(
path
,
'wb'
)
progress_callback
(
0
)
if
hasattr
(
data
,
"read"
):
bytes_written
=
0
read
=
data
.
read
write
=
f
.
write
chunk
=
read
(
chunk_size
)
while
chunk
:
write
(
chunk
)
bytes_written
+=
len
(
chunk
)
progress_callback
(
bytes_written
)
chunk
=
read
(
chunk_size
)
else
:
f
.
write
(
data
)
progress_callback
(
len
(
data
))
if
finished_callback
is
not
None
:
finished_callback
()
finally
:
if
f
is
not
None
:
f
.
close
()
except
Exception
,
e
:
if
error_callback
is
not
None
:
error_callback
(
e
)
finally
:
finished_event
.
set
()
threading
.
Thread
(
target
=
do_setcontents
)
.
start
()
threading
.
Thread
(
target
=
do_setcontents
)
.
start
()
return
finished_event
return
finished_event
...
...
fs/compatibility.py
View file @
4ad6737d
...
@@ -8,56 +8,41 @@ Not for general usage, the functionality in this file is exposed elsewhere
...
@@ -8,56 +8,41 @@ Not for general usage, the functionality in this file is exposed elsewhere
import
six
import
six
from
six
import
PY3
from
six
import
PY3
if
PY3
:
def
copy_file_to_fs
(
data
,
dst_fs
,
dst_path
,
chunk_size
=
64
*
1024
,
progress_callback
=
None
,
finished_callback
=
None
):
def
copy_file_to_fs
(
data
,
dst_fs
,
dst_path
,
chunk_size
=
64
*
1024
):
"""Copy data from a string or a file-like object to a given fs/path"""
"""Copy data from a string or a file-like object to a given fs/path"""
if
progress_callback
is
None
:
if
hasattr
(
data
,
"read"
):
progress_callback
=
lambda
bytes_written
:
None
bytes_written
=
0
f
=
None
try
:
progress_callback
(
bytes_written
)
if
hasattr
(
data
,
"read"
):
read
=
data
.
read
read
=
data
.
read
chunk
=
read
(
chunk_size
)
chunk
=
read
(
chunk_size
)
f
=
None
if
PY3
and
isinstance
(
chunk
,
six
.
text_type
):
try
:
f
=
dst_fs
.
open
(
dst_path
,
'w'
)
if
isinstance
(
chunk
,
six
.
text_type
):
else
:
f
=
dst_fs
.
open
(
dst_path
,
'w'
)
f
=
dst_fs
.
open
(
dst_path
,
'wb'
)
else
:
write
=
f
.
write
f
=
dst_fs
.
open
(
dst_path
,
'wb'
)
while
chunk
:
write
(
chunk
)
write
=
f
.
write
bytes_written
+=
len
(
chunk
)
while
chunk
:
progress_callback
(
bytes_written
)
write
(
chunk
)
chunk
=
read
(
chunk_size
)
finally
:
if
f
is
not
None
:
f
.
close
()
else
:
f
=
None
try
:
if
isinstance
(
data
,
six
.
text_type
):
f
=
dst_fs
.
open
(
dst_path
,
'w'
)
else
:
f
=
dst_fs
.
open
(
dst_path
,
'wb'
)
f
.
write
(
data
)
finally
:
if
f
is
not
None
:
f
.
close
()
else
:
def
copy_file_to_fs
(
data
,
dst_fs
,
dst_path
,
chunk_size
=
64
*
1024
):
"""Copy data from a string or a file-like object to a given fs/path"""
f
=
None
try
:
f
=
dst_fs
.
open
(
dst_path
,
'wb'
)
if
hasattr
(
data
,
"read"
):
read
=
data
.
read
write
=
f
.
write
chunk
=
read
(
chunk_size
)
chunk
=
read
(
chunk_size
)
while
chunk
:
else
:
write
(
chunk
)
if
PY3
and
isinstance
(
data
,
six
.
text_type
):
chunk
=
read
(
chunk_size
)
f
=
dst_fs
.
open
(
dst_path
,
'w'
)
else
:
else
:
f
.
write
(
data
)
f
=
dst_fs
.
open
(
dst_path
,
'wb'
)
if
hasattr
(
f
,
'flush'
):
f
.
write
(
data
)
f
.
flush
()
bytes_written
+=
len
(
data
)
finally
:
progress_callback
(
bytes_written
)
if
f
is
not
None
:
f
.
close
()
if
hasattr
(
f
,
'flush'
):
f
.
flush
()
if
finished_callback
is
not
None
:
finished_callback
()
finally
:
if
f
is
not
None
:
f
.
close
()
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