Merge "refactor: Allow site_by_params to take in list of fields"

This commit is contained in:
Zuul 2018-10-29 16:53:58 +00:00 committed by Gerrit Code Review
commit 313c4ed86c
3 changed files with 27 additions and 33 deletions

View File

@ -183,9 +183,7 @@ def _verify_no_unexpected_files(*, sitenames=None):
expected_directories = set()
for site_name in sitenames:
params = util.definition.load_as_params(site_name)
expected_directories.update(
util.files.directories_for(
site_name=params['site_name'], site_type=params['site_type']))
expected_directories.update(util.files.directories_for(**params))
LOG.debug('expected_directories: %s', expected_directories)
found_directories = util.files.existing_directories()
LOG.debug('found_directories: %s', found_directories)

View File

@ -117,20 +117,12 @@ def list_(output_stream):
# Create a table to output site information for all sites for a given repo
site_table = PrettyTable()
site_table.field_names = ['site_name', 'site_type']
field_names = ['site_name', 'site_type']
site_table.field_names = field_names
for site_name in util.files.list_sites():
params = util.definition.load_as_params(site_name)
# TODO(felipemonteiro): This is a temporary hack around legacy manifest
# repositories containing the name of a directory that symbolizes a
# repository. Once all these manifest repositories migrate over to Git
# references instead, remove this hack.
# NOTE(felipemonteiro): The 'revision' information can instead be
# computed using :func:`process_site_repository` and storing into
# a configuration via a "set_site_revision" function, for example.
if 'revision' in params:
params.pop('revision')
site_table.add_row([params['site_name'], params['site_type']])
params = util.definition.load_as_params(site_name, *field_names)
site_table.add_row(list(map(lambda k: params[k], field_names)))
# Write table to specified output_stream
output_stream.write(site_table.get_string() + "\n")
@ -141,6 +133,8 @@ def show(site_name, output_stream):
# Create a table to output site information for specific site
site_table = PrettyTable()
site_table.field_names = ['revision', 'site_name', 'site_type', 'files']
# TODO(felipemonteiro): Drop support for 'revision' once manifest
# repositories have removed it altogether.
if 'revision' in data.keys():
for file in data['files']:
site_table.add_row(

View File

@ -30,18 +30,25 @@ def load(site, primary_repo_base=None):
return files.slurp(path(site, primary_repo_base))
def load_as_params(site_name, primary_repo_base=None):
def load_as_params(site_name, *fields, primary_repo_base=None):
"""Load site definition for given ``site_name`` and return data as params.
:param str site_name: Name of the site.
:param iterable fields: List of parameter fields to return. Defaults to
``('site_name', 'site_type')``.
:param str primary_repo_base: Path to primary repository.
:returns: key-value pairs of parameters, whose keys are a subset of those
specified by ``fields``.
:rtype: dict
"""
if not fields:
# Default legacy fields.
fields = ('site_name', 'site_type')
definition = load(site_name, primary_repo_base)
# TODO(felipemonteiro): Currently we are filtering out "revision" from
# the params that are returned by this function because it is no longer
# supported. This is a workaround. As soon as the site definition repos
# switch to real repository format, then we can drop that workaround.
# Ideally, we should:
# 1) validate the site-definition.yaml format using lint module
# 2) extract only the required params here
params = definition.get('data', {})
params['site_name'] = site_name
return params
return {k: v for k, v in params.items() if k in fields}
def path(site_name, primary_repo_base=None):
@ -63,17 +70,14 @@ def pluck(site_definition, key):
def site_files(site_name):
params = load_as_params(site_name)
for filename in files.search(
files.directories_for(
site_name=params['site_name'], site_type=params['site_type'])):
for filename in files.search(files.directories_for(**params)):
yield filename
def site_files_by_repo(site_name):
"""Yield tuples of repo_base, file_name."""
params = load_as_params(site_name)
dir_map = files.directories_for_each_repo(
site_name=params['site_name'], site_type=params['site_type'])
dir_map = files.directories_for_each_repo(**params)
for repo, dl in dir_map.items():
for filename in files.search(dl):
yield (repo, filename)
@ -93,8 +97,7 @@ def documents_for_each_site():
for sitename in sitenames:
params = load_as_params(sitename)
paths = files.directories_for(
site_name=params['site_name'], site_type=params['site_type'])
paths = files.directories_for(**params)
filenames = set(files.search(paths))
for filename in filenames:
with open(filename) as f:
@ -116,8 +119,7 @@ def documents_for_site(sitename):
documents = []
params = load_as_params(sitename)
paths = files.directories_for(
site_name=params['site_name'], site_type=params['site_type'])
paths = files.directories_for(**params)
filenames = set(files.search(paths))
for filename in filenames:
with open(filename) as f: