Show which modules are available in module group details
Also process modules as sets to avoid duplicates. Change-Id: I5f09af93b60e3610145f9c4221d47bf2e2ef3a38
This commit is contained in:
@@ -128,7 +128,7 @@ def extend_user(user):
|
||||
return user
|
||||
|
||||
|
||||
def extend_module(module_id):
|
||||
def extend_module(module_id, project_type, release):
|
||||
module_id_index = vault.get_vault()['module_id_index']
|
||||
module_id = module_id.lower()
|
||||
|
||||
@@ -142,13 +142,20 @@ def extend_module(module_id):
|
||||
if name[0].islower():
|
||||
name = name.capitalize()
|
||||
|
||||
# (module, release) pairs
|
||||
own_sub_modules = set(vault.resolve_modules([module_id], [release]))
|
||||
visible_sub_modules = own_sub_modules & set(vault.resolve_modules(
|
||||
vault.resolve_project_types([project_type]), [release]))
|
||||
|
||||
child_modules = []
|
||||
for m in module['modules']:
|
||||
child = {'module_name': m}
|
||||
for m, r in own_sub_modules:
|
||||
child = {'module_name': m, 'visible': (m, r) in visible_sub_modules}
|
||||
if m in repos_index:
|
||||
child['repo_uri'] = repos_index[m]['uri']
|
||||
child_modules.append(child)
|
||||
|
||||
child_modules.sort(key=lambda x: x['module_name'])
|
||||
|
||||
return {
|
||||
'id': module_id,
|
||||
'name': name,
|
||||
|
||||
@@ -503,3 +503,7 @@ div.stackamenu li.current-menu-item a span {
|
||||
width: 99%;
|
||||
height: 350px;
|
||||
}
|
||||
|
||||
.disabled {
|
||||
color: grey;
|
||||
}
|
||||
@@ -10,7 +10,6 @@
|
||||
for (var i=0; i < module.modules.length; i++) {
|
||||
module.modules[i].uri = makeURI('/', {module: module.modules[i].module_name});
|
||||
}
|
||||
console.log(module);
|
||||
$("#module_details_template").tmpl(data["module"]).appendTo("#module_details_container");
|
||||
}
|
||||
});
|
||||
@@ -42,7 +41,9 @@
|
||||
{%else%}
|
||||
Modules:
|
||||
{%each(index,module) modules %}{%if index>0 %}, {%/if%}
|
||||
<a href="${module.uri}">${module.module_name}</a>{%/each%}
|
||||
{%if module.visible %}
|
||||
<a href="${module.uri}">${module.module_name}</a>{%else%}
|
||||
<span title="Not available in current project type and release" class="disabled">${module.module_name}</span>{%/if%}{%/each%}
|
||||
{%/if%}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -341,7 +341,9 @@ def get_company(company_name, **kwargs):
|
||||
@decorators.cached()
|
||||
@decorators.jsonify('module')
|
||||
def get_module(module_id, **kwargs):
|
||||
module = helpers.extend_module(module_id)
|
||||
project_type = parameters.get_single_parameter(kwargs, 'project_type')
|
||||
release = parameters.get_single_parameter(kwargs, 'release')
|
||||
module = helpers.extend_module(module_id, project_type, release)
|
||||
if not module:
|
||||
flask.abort(404)
|
||||
return module
|
||||
|
||||
@@ -30,7 +30,7 @@ def _make_module_group(module_groups, name):
|
||||
m = module_groups[name] # object created by defaultdict
|
||||
m['tag'] = 'project_type'
|
||||
m['module_group_name'] = name
|
||||
m['releases'] = collections.defaultdict(list)
|
||||
m['releases'] = collections.defaultdict(set)
|
||||
return m
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ def read_legacy_programs_yaml(module_groups, release_name, content):
|
||||
mn = module['repo'].split('/')[1] # module_name
|
||||
|
||||
# module_groups[group_id]['releases'][release_name].append(mn)
|
||||
all_official['releases'][release_name].append(mn)
|
||||
all_official['releases'][release_name].add(mn)
|
||||
|
||||
|
||||
def read_early_big_tent_projects_yaml(module_groups, release_name, content):
|
||||
@@ -56,7 +56,7 @@ def read_early_big_tent_projects_yaml(module_groups, release_name, content):
|
||||
mn = repo_split[1]
|
||||
|
||||
# module_groups[group_id]['releases'][release_name].append(mn)
|
||||
all_official['releases'][release_name].append(mn)
|
||||
all_official['releases'][release_name].add(mn)
|
||||
|
||||
|
||||
def read_big_tent_projects_yaml(module_groups, release_name, content):
|
||||
@@ -76,18 +76,18 @@ def read_big_tent_projects_yaml(module_groups, release_name, content):
|
||||
|
||||
mn = repo_split[1] # module_name
|
||||
|
||||
module_groups[group_id]['modules'].append(mn)
|
||||
all_official['releases'][release_name].append(mn)
|
||||
module_groups[group_id]['modules'].add(mn)
|
||||
all_official['releases'][release_name].add(mn)
|
||||
|
||||
tags = deliverable.get('tags', [])
|
||||
for tag in tags:
|
||||
if tag in TAGS:
|
||||
module_groups[tag]['releases'][release_name].append(mn)
|
||||
module_groups[tag]['releases'][release_name].add(mn)
|
||||
|
||||
|
||||
def _make_default_module_groups():
|
||||
# create default module groups
|
||||
module_groups = collections.defaultdict(lambda: {'modules': []})
|
||||
module_groups = collections.defaultdict(lambda: {'modules': set()})
|
||||
|
||||
# openstack official
|
||||
_make_module_group(module_groups, 'openstack-official')
|
||||
@@ -130,10 +130,5 @@ def process_official_list(releases):
|
||||
# set ids for module groups
|
||||
for group_id, group in six.iteritems(module_groups):
|
||||
group['id'] = group_id
|
||||
group['modules'].sort()
|
||||
|
||||
if 'releases' in group:
|
||||
for gr in six.itervalues(group['releases']):
|
||||
gr.sort()
|
||||
|
||||
return module_groups
|
||||
|
||||
@@ -263,7 +263,7 @@ def process_project_list(runtime_storage_inst):
|
||||
for module in module_groups['openstack']['modules']:
|
||||
for r, off_m in six.iteritems(official):
|
||||
if module not in off_m:
|
||||
others['releases'][r].append(module)
|
||||
others['releases'][r].add(module)
|
||||
|
||||
# register modules as module groups
|
||||
repos = runtime_storage_inst.get_by_key('repos') or []
|
||||
|
||||
@@ -290,7 +290,7 @@ def keep_safe_chars(s):
|
||||
def make_module_group(module_group_id, name=None, modules=None, tag='module'):
|
||||
return {'id': module_group_id,
|
||||
'module_group_name': name or module_group_id,
|
||||
'modules': modules or [module_group_id],
|
||||
'modules': modules or {module_group_id},
|
||||
'tag': tag}
|
||||
|
||||
BAD_NAME_SUFFIXES = ['Ltd', 'Pvt', 'Inc', 'GmbH', 'AG', 'Corporation', 'Corp',
|
||||
|
||||
@@ -104,6 +104,7 @@ class TestAPIModules(test_api.TestAPI):
|
||||
{'id': 'nova',
|
||||
'modules': [
|
||||
{'module_name': 'nova',
|
||||
'visible': True,
|
||||
'repo_uri': 'git://git.openstack.org/openstack/nova.git'}
|
||||
],
|
||||
'name': 'Nova', 'tag': 'module'}, module)
|
||||
@@ -112,9 +113,10 @@ class TestAPIModules(test_api.TestAPI):
|
||||
module = test_api.load_json(response)['module']
|
||||
self.assertEqual(
|
||||
{'id': 'nova-group',
|
||||
'modules': [
|
||||
{'module_name': 'nova-cli'},
|
||||
{'module_name': 'nova',
|
||||
'repo_uri': 'git://git.openstack.org/openstack/nova.git'}
|
||||
'modules': [{
|
||||
'module_name': 'nova',
|
||||
'visible': True,
|
||||
'repo_uri': 'git://git.openstack.org/openstack/nova.git'},
|
||||
{'module_name': 'nova-cli', 'visible': False},
|
||||
],
|
||||
'name': 'Nova-group', 'tag': 'group'}, module)
|
||||
|
||||
@@ -69,55 +69,55 @@ class TestGovernance(testtools.TestCase):
|
||||
'sahara-group': {
|
||||
'id': 'sahara-group',
|
||||
'module_group_name': 'Sahara Official',
|
||||
'modules': ['python-saharaclient', 'sahara',
|
||||
'modules': {'python-saharaclient', 'sahara',
|
||||
'sahara-dashboard', 'sahara-extra',
|
||||
'sahara-image-elements', 'sahara-specs'],
|
||||
'sahara-image-elements', 'sahara-specs'},
|
||||
'tag': 'program'
|
||||
},
|
||||
'tc-approved-release': {
|
||||
'id': 'tc-approved-release',
|
||||
'module_group_name': 'tc-approved-release',
|
||||
'modules': [],
|
||||
'modules': set(),
|
||||
'releases': {
|
||||
'liberty': ['sahara', 'sahara-extra',
|
||||
'sahara-image-elements'],
|
||||
'liberty': {'sahara', 'sahara-extra',
|
||||
'sahara-image-elements'},
|
||||
},
|
||||
'tag': 'project_type'
|
||||
},
|
||||
'type:library': {
|
||||
'id': 'type:library',
|
||||
'module_group_name': 'type:library',
|
||||
'modules': [],
|
||||
'modules': set(),
|
||||
'releases': {
|
||||
'liberty': ['python-saharaclient', 'sahara-dashboard'],
|
||||
'liberty': {'python-saharaclient', 'sahara-dashboard'},
|
||||
},
|
||||
'tag': 'project_type'
|
||||
},
|
||||
'type:service': {
|
||||
'id': 'type:service',
|
||||
'module_group_name': 'type:service',
|
||||
'modules': [],
|
||||
'modules': set(),
|
||||
'releases': {
|
||||
'liberty': ['sahara', 'sahara-extra',
|
||||
'sahara-image-elements'],
|
||||
'liberty': {'sahara', 'sahara-extra',
|
||||
'sahara-image-elements'},
|
||||
},
|
||||
'tag': 'project_type'
|
||||
},
|
||||
'openstack-official': {
|
||||
'id': 'openstack-official',
|
||||
'module_group_name': 'openstack-official',
|
||||
'modules': [],
|
||||
'modules': set(),
|
||||
'releases': {
|
||||
'liberty': ['python-saharaclient', 'sahara',
|
||||
'liberty': {'python-saharaclient', 'sahara',
|
||||
'sahara-dashboard', 'sahara-extra',
|
||||
'sahara-image-elements', 'sahara-specs'],
|
||||
'sahara-image-elements', 'sahara-specs'},
|
||||
},
|
||||
'tag': 'project_type'
|
||||
},
|
||||
'openstack-others': {
|
||||
'id': 'openstack-others',
|
||||
'module_group_name': 'openstack-others',
|
||||
'modules': [],
|
||||
'modules': set(),
|
||||
'releases': {},
|
||||
'tag': 'project_type'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user