Fixed the status and write methods on devtools.py

I need to review the whole code and refactor some sections to meet
the specifications, optimize performance and minimize filesize.

Thorough checking of this module is needed. Expect unused variables
and functions.
This commit is contained in:
Santiago Torres 2014-01-25 12:04:56 -05:00
parent 44d4acdd77
commit e4de851d28

View file

@ -55,9 +55,12 @@
from tuf.repository_tool import import_ed25519_publickey_from_file
from tuf.repository_tool import import_ed25519_privatekey_from_file
#from tuf.import _generate_and_write_metadata
from tuf.repository_tool import _remove_invalid_and_duplicate_signatures
from tuf.repository_tool import _check_role_keys
from tuf.repository_tool import _delete_obsolete_metadata
from tuf.repository_tool import generate_targets_metadata
from tuf.repository_tool import sign_metadata
#from tuf.repository-tool import write_delegated_metadata_file
from tuf.repository_tool import write_metadata_file
# See 'log.py' to learn how logging is handled in TUF.
logger = logging.getLogger('tuf.devtools')
@ -233,7 +236,7 @@ def write(self, write_partial=False, consistent_snapshots=False):
# Generate the 'targets.txt' metadata file.
targets_filename = 'targets' + METADATA_EXTENSION
targets_filename = os.path.join(self._metadata_directory, targets_filename)
signable_junk, targets_filename = \
release_signable, targets_filename = \
_generate_and_write_metadata('targets', targets_filename, write_partial,
self._targets_directory,
self._metadata_directory,
@ -293,7 +296,6 @@ def status(self):
<Returns>
None.
"""
temp_project_directory = None
try:
@ -302,8 +304,11 @@ def status(self):
METADATA_STAGED_DIRECTORY_NAME)
os.mkdir(metadata_directory)
filenames = get_metadata_filenames(metadata_directory)
#filenames = get_metadata_filenames(metadata_directory)A
# we should do the schema check
filenames = {}
filenames['targets'] = os.path.join(metadata_directory,TARGETS_FILENAME)
# Delegated roles.
delegated_roles = tuf.roledb.get_delegated_rolenames('targets')
insufficient_keys = []
@ -345,14 +350,13 @@ def status(self):
return
try:
signable = _generate_and_write_metadata(self.targets.rolename,
filenames, False,
signable = _generate_and_write_metadata(self.targets.rolename,
filenames['targets'], False,
self._targets_directory,
self._metadata_directory,
False)
#_print_status(self.targets.rolename, signable)
#_print_status(self.targets.rolename, signable)
except tuf.Error, e:
print(str(e))
signable = e[1]
#_print_status(self.targets.rolename, signable)
return
@ -424,13 +428,8 @@ def get_filepaths_in_directory(self, files_directory, recursive_walk=False,
return targets
def _delete_obsolete_metadata(metadata_directory, release_metadata,
consistent_snapshots):
print("missing implementation")
def _check_role_keys(rolename):
print("missing implementation")
def _print_status(rolename, signable):
@ -460,7 +459,7 @@ def _generate_and_write_metadata(rolename, metadata_filename, write_partial,
"""
metadata = None
print("we do get here")
# Retrieve the roleinfo of 'rolename' to extract the needed metadata
# attributes, such as version number, expiration, etc.
roleinfo = tuf.roledb.get_roleinfo(rolename)
@ -472,10 +471,8 @@ def _generate_and_write_metadata(rolename, metadata_filename, write_partial,
roleinfo['expires'],
roleinfo['delegations'],
consistent_snapshots)
print(metadata)
signable = sign_metadata(metadata, roleinfo['signing_keyids'],
metadata_filename)
# Check if the version number of 'rolename' may be automatically incremented,
# depending on whether if partial metadata is loaded or if the metadata is
# written with write() / write_partial().
@ -499,20 +496,13 @@ def _generate_and_write_metadata(rolename, metadata_filename, write_partial,
# Write the metadata to file if contains a threshold of signatures.
signable['signatures'].extend(roleinfo['signatures'])
#import pdb; pdb.set_trace()
if tuf.sig.verify(signable, rolename) or write_partial:
_remove_invalid_and_duplicate_signatures(signable)
compressions = roleinfo['compressions']
filename = write_metadata_file(signable, metadata_filename, compressions,
consistent_snapshots)
# The root and timestamp files should also be written without a digest if
# 'consistent_snaptshots' is True. Client may request a timestamp and root
# file without knowing its digest and file size.
if rolename == 'root' or rolename == 'timestamp':
write_metadata_file(signable, metadata_filename, compressions,
consistent_snapshots=False)
return signable, filename
# 'signable' contains an invalid threshold of signatures.
else:
@ -520,6 +510,10 @@ def _generate_and_write_metadata(rolename, metadata_filename, write_partial,
raise tuf.Error(message, signable)
# The root and timestamp files should also be written without a digest if
# 'consistent_snaptshots' is True. Client may request a timestamp and root
# file without knowing its digest and file size.
return signable, filename
def _prompt(message, result_type=str):