Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.package
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Boxiang Sun
slapos.package
Commits
d522e886
Commit
d522e886
authored
Jun 12, 2014
by
Rafael Monnerat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
slapos.package: Extend NetworkcacheClient wrapper
parent
c7cdee8f
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
65 additions
and
59 deletions
+65
-59
slapos/package/signature.py
slapos/package/signature.py
+65
-59
No files found.
slapos/package/signature.py
View file @
d522e886
...
...
@@ -33,36 +33,12 @@ import time
import
traceback
import
tempfile
import
datetime
import
shutil
from
slapos.networkcachehelper
import
helper_download_network_cached_to_file
from
slapos.networkcachehelper
import
NetworkcacheClient
from
slapos.networkcachehelper
import
NetworkcacheClient
,
\
helper_download_network_cached
def
helper_upload_network_cached_from_file
(
dir_url
,
cache_url
,
path
,
directory_key
,
metadata_dict
,
signature_private_key_file
,
shacache_cert_file
,
shacache_key_file
,
shadir_cert_file
,
shadir_key_file
):
"""
Upload an existing file, using a file_descriptor.
"""
file_descriptor
=
open
(
path
,
'r'
)
if
not
(
dir_url
and
cache_url
):
return
False
# backward compatibility
metadata_dict
.
setdefault
(
'file'
,
'notused'
)
metadata_dict
.
setdefault
(
'urlmd5'
,
'notused'
)
# convert '' into None in order to call nc nicely
with
NetworkcacheClient
(
cache_url
,
dir_url
,
signature_private_key_file
=
signature_private_key_file
or
None
,
shacache_cert_file
=
shacache_cert_file
or
None
,
shacache_key_file
=
shacache_key_file
or
None
,
shadir_cert_file
=
shadir_cert_file
or
None
,
shadir_key_file
=
shadir_key_file
or
None
,
)
as
nc
:
return
nc
.
upload
(
file_descriptor
,
directory_key
,
**
metadata_dict
)
class
NetworkCache
:
def
__init__
(
self
,
configuration_path
):
if
not
os
.
path
.
exists
(
configuration_path
):
...
...
@@ -97,6 +73,64 @@ class NetworkCache:
else
:
self
.
directory_key
=
"slapos-upgrade-testing-key"
def
upload
(
self
,
path
,
metadata_dict
):
"""
Upload an existing file, using a file_descriptor.
"""
file_descriptor
=
open
(
path
,
'r'
)
if
not
(
self
.
dir_url
and
self
.
cache_url
):
return
False
# backward compatibility
metadata_dict
.
setdefault
(
'file'
,
'notused'
)
metadata_dict
.
setdefault
(
'urlmd5'
,
'notused'
)
# convert '' into None in order to call nc nicely
with
NetworkcacheClient
(
self
.
cache_url
,
self
.
dir_url
,
signature_private_key_file
=
self
.
signature_private_key_file
or
None
,
shacache_cert_file
=
self
.
shacache_cert_file
or
None
,
shacache_key_file
=
self
.
shacache_key_file
or
None
,
shadir_cert_file
=
self
.
shadir_cert_file
or
None
,
shadir_key_file
=
self
.
shadir_key_file
or
None
,
)
as
nc
:
return
nc
.
upload
(
file_descriptor
,
self
.
directory_key
,
**
metadata_dict
)
def
download
(
self
,
path
,
wanted_metadata_dict
=
{},
required_key_list
=
[],
strategy
=
None
):
result
=
helper_download_network_cached
(
self
.
download_binary_dir_url
,
self
.
download_binary_cache_url
,
self
.
signature_certificate_list
,
self
.
directory_key
,
wanted_metadata_dict
,
required_key_list
,
strategy
)
if
result
:
# XXX check if nc filters signature_certificate_list!
# Creates a file with content to desired path.
file_descriptor
,
metadata_dict
=
result
f
=
open
(
path
,
'w+b'
)
try
:
shutil
.
copyfileobj
(
file_descriptor
,
f
)
# XXX method should check MD5.
return
metadata_dict
finally
:
f
.
close
()
file_descriptor
.
close
()
return
False
def
strategy
(
entry_list
):
"""Get the latest entry. """
timestamp
=
0
best_entry
=
None
for
entry
in
entry_list
:
if
entry
[
'timestamp'
]
>
timestamp
:
best_entry
=
entry
timestamp
=
entry
[
'timestamp'
]
return
best_entry
def
get_yes_no
(
prompt
):
while
True
:
answer
=
raw_input
(
prompt
+
" [y,n]: "
)
...
...
@@ -126,26 +160,9 @@ class Signature:
if
shacache
.
signature_certificate_list
is
None
:
raise
ValueError
(
"You need at least one valid signature for download"
)
def
strategy
(
entry_list
):
"""Get the latest entry. """
timestamp
=
0
best_entry
=
None
for
entry
in
entry_list
:
if
entry
[
'timestamp'
]
>
timestamp
:
best_entry
=
entry
return
best_entry
return
helper_download_network_cached_to_file
(
path
=
path
,
directory_key
=
shacache
.
directory_key
,
return
shacache
.
download
(
path
=
path
,
required_key_list
=
[
'timestamp'
],
strategy
=
strategy
,
# Then we give a lot of not interesting things
dir_url
=
shacache
.
download_binary_dir_url
,
cache_url
=
shacache
.
download_binary_cache_url
,
signature_certificate_list
=
shacache
.
signature_certificate_list
,
)
strategy
=
strategy
)
def
download
(
self
):
"""
...
...
@@ -170,19 +187,8 @@ class Signature:
'timestamp'
:
time
.
time
(),
}
try
:
if
helper_upload_network_cached_from_file
(
path
=
path
,
directory_key
=
shacache
.
directory_key
,
metadata_dict
=
metadata_dict
,
# Then we give a lot of not interesting things
dir_url
=
shacache
.
dir_url
,
cache_url
=
shacache
.
cache_url
,
signature_private_key_file
=
shacache
.
signature_private_key_file
,
shacache_cert_file
=
shacache
.
shacache_cert_file
,
shacache_key_file
=
shacache
.
shacache_key_file
,
shadir_cert_file
=
shacache
.
shadir_cert_file
,
shadir_key_file
=
shacache
.
shadir_key_file
,
):
if
shacache
.
upload
(
path
=
path
,
metadata_dict
=
metadata_dict
):
self
.
log
(
'Uploaded update file to cache.'
)
except
Exception
:
self
.
log
(
'Unable to upload to cache:
\
n
%s.'
%
traceback
.
format_exc
())
...
...
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