Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE
/
storagedriver
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
2
Merge Requests
4
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
f3a27e66
authored
Jun 25, 2014
by
Guba Sándor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
disk: wrong status codes raise exceptions
parent
cde8c7b2
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
62 additions
and
60 deletions
+62
-60
disk.py
+62
-60
No files found.
disk.py
View file @
f3a27e66
...
...
@@ -138,67 +138,69 @@ class Disk(object):
disk_path
=
self
.
get_path
()
logger
.
info
(
"Downloading image from
%
s to
%
s"
,
url
,
disk_path
)
r
=
requests
.
get
(
url
,
stream
=
True
)
if
r
.
status_code
==
200
:
class
AbortException
(
Exception
):
pass
if
task
.
is_aborted
():
raise
AbortException
()
if
parent_id
is
None
:
parent_id
=
task
.
request
.
id
chunk_size
=
256
*
1024
ext
=
url
.
split
(
'.'
)[
-
1
]
.
lower
()
if
ext
==
'gz'
:
decompressor
=
decompressobj
(
16
+
MAX_WBITS
)
# undocumented zlib feature http://stackoverflow.com/a/2424549
elif
ext
==
'bz2'
:
decompressor
=
BZ2Decompressor
()
clen
=
max
(
int
(
r
.
headers
.
get
(
'content-length'
,
700000000
)),
1
)
percent
=
0
try
:
with
open
(
disk_path
,
'wb'
)
as
f
:
for
chunk
in
r
.
iter_content
(
chunk_size
=
chunk_size
):
if
ext
in
(
'gz'
,
'bz'
):
chunk
=
decompressor
.
decompress
(
chunk
)
f
.
write
(
chunk
)
actsize
=
f
.
tell
()
new_percent
=
min
(
100
,
round
(
actsize
*
100.0
/
clen
))
if
new_percent
>
percent
:
percent
=
new_percent
if
not
task
.
is_aborted
():
task
.
update_state
(
task_id
=
parent_id
,
state
=
task
.
AsyncResult
(
parent_id
)
.
state
,
meta
=
{
'size'
:
actsize
,
'percent'
:
percent
})
else
:
raise
AbortException
()
if
ext
==
'gz'
:
f
.
write
(
decompressor
.
flush
())
f
.
flush
()
self
.
size
=
os
.
path
.
getsize
(
disk_path
)
logger
.
debug
(
"Download finished
%
s (
%
s bytes)"
,
self
.
name
,
self
.
size
)
except
AbortException
:
# Cleanup file:
os
.
unlink
(
disk_path
)
logger
.
info
(
"Download
%
s aborted
%
s removed."
,
url
,
disk_path
)
except
:
if
r
.
status_code
!=
200
:
raise
Exception
(
"Invalid response status code:
%
s"
%
r
.
status_code
)
class
AbortException
(
Exception
):
pass
if
task
.
is_aborted
():
raise
AbortException
()
if
parent_id
is
None
:
parent_id
=
task
.
request
.
id
chunk_size
=
256
*
1024
ext
=
url
.
split
(
'.'
)[
-
1
]
.
lower
()
if
ext
==
'gz'
:
decompressor
=
decompressobj
(
16
+
MAX_WBITS
)
# undocumented zlib feature http://stackoverflow.com/a/2424549
elif
ext
==
'bz2'
:
decompressor
=
BZ2Decompressor
()
clen
=
max
(
int
(
r
.
headers
.
get
(
'content-length'
,
700000000
)),
1
)
percent
=
0
try
:
with
open
(
disk_path
,
'wb'
)
as
f
:
for
chunk
in
r
.
iter_content
(
chunk_size
=
chunk_size
):
if
ext
in
(
'gz'
,
'bz'
):
chunk
=
decompressor
.
decompress
(
chunk
)
f
.
write
(
chunk
)
actsize
=
f
.
tell
()
new_percent
=
min
(
100
,
round
(
actsize
*
100.0
/
clen
))
if
new_percent
>
percent
:
percent
=
new_percent
if
not
task
.
is_aborted
():
task
.
update_state
(
task_id
=
parent_id
,
state
=
task
.
AsyncResult
(
parent_id
)
.
state
,
meta
=
{
'size'
:
actsize
,
'percent'
:
percent
})
else
:
raise
AbortException
()
if
ext
==
'gz'
:
f
.
write
(
decompressor
.
flush
())
f
.
flush
()
self
.
size
=
os
.
path
.
getsize
(
disk_path
)
logger
.
debug
(
"Download finished
%
s (
%
s bytes)"
,
self
.
name
,
self
.
size
)
except
AbortException
:
# Cleanup file:
os
.
unlink
(
disk_path
)
logger
.
info
(
"Download
%
s aborted
%
s removed."
,
url
,
disk_path
)
except
:
os
.
unlink
(
disk_path
)
logger
.
error
(
"Download
%
s failed,
%
s removed."
,
url
,
disk_path
)
raise
else
:
if
ext
==
'zip'
and
is_zipfile
(
disk_path
):
task
.
update_state
(
task_id
=
parent_id
,
state
=
task
.
AsyncResult
(
parent_id
)
.
state
,
meta
=
{
'size'
:
actsize
,
'extracting'
:
'zip'
,
'percent'
:
99
})
self
.
extract_iso_from_zip
(
disk_path
)
if
not
self
.
check_valid_image
():
os
.
unlink
(
disk_path
)
logger
.
error
(
"Download
%
s failed,
%
s removed."
,
url
,
disk_path
)
raise
else
:
if
ext
==
'zip'
and
is_zipfile
(
disk_path
):
task
.
update_state
(
task_id
=
parent_id
,
state
=
task
.
AsyncResult
(
parent_id
)
.
state
,
meta
=
{
'size'
:
actsize
,
'extracting'
:
'zip'
,
'percent'
:
99
})
self
.
extract_iso_from_zip
(
disk_path
)
if
not
self
.
check_valid_image
():
os
.
unlink
(
disk_path
)
raise
Exception
(
"Invalid file format. Only qcow and "
"iso files are allowed."
)
raise
Exception
(
"Invalid file format. Only qcow and "
"iso files are allowed."
)
def
extract_iso_from_zip
(
self
,
disk_path
):
with
ZipFile
(
disk_path
,
'r'
)
as
z
:
...
...
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