Prepare dashboard for a new metadata package file structure.

New file structure allows for using same form definition file for
several services. Fields 'type', 'name' and 'description' are taken
from form definition file, as before, but now these fields should be
inferred from 'full_service_name', 'service_display_name' and
'description' fields, appropriately, from service manifest by metadata
repository.

Change-Id: Icd8b3ffbaef6432a0ba12c21d5f34d96c6b03b2e
This commit is contained in:
Timur Sufiev 2013-12-02 19:55:19 +04:00
parent 6baef757a9
commit dc564630d8
2 changed files with 18 additions and 12 deletions

View File

@ -64,7 +64,7 @@ class Service(object):
return self.cleaned_data
def import_service(filename, service_file):
def import_service(full_service_name, service_file):
from muranodashboard.environments.services.helpers import decamelize
try:
with open(service_file) as stream:
@ -74,9 +74,9 @@ def import_service(filename, service_file):
" reason: {1!s}".format(service_file, e))
else:
service = dict((decamelize(k), v) for (k, v) in yaml_desc.iteritems())
_all_services[filename] = Service(**service)
_all_services[full_service_name] = Service(**service)
log.info("Added service '{0}' from '{1}'".format(
_all_services[filename].name, service_file))
_all_services[full_service_name].name, service_file))
def import_all_services(request):
@ -86,6 +86,13 @@ def import_all_services(request):
times for each form in dynamicUI is inevitable, so to avoid significant
delays all metadata-related stuff is actually performed no more often than
each CACHE_REFRESH_SECONDS_INTERVAL.
Expected contents of metadata package is:
- <full_service_name1>/<form_definitionA>.yaml
- <full_service_name2>/<form_definitionB>.yaml
...
If there is no YAMLs with form definitions inside <full_service_nameN>
dir, then <full_service_nameN> won't be shown in Create Service first step.
"""
global _last_check_time
global _all_services
@ -94,10 +101,13 @@ def import_all_services(request):
directory, modified = metadata.get_ui_metadata(request)
if modified or not len(_all_services):
_all_services = {}
for filename in os.listdir(directory):
if not filename.endswith('.yaml'):
continue
import_service(filename, os.path.join(directory, filename))
for full_service_name in os.listdir(directory):
final_dir = os.path.join(directory, full_service_name)
if os.path.isdir(final_dir) and len(os.listdir(final_dir)):
filename = os.listdir(final_dir)[0]
if filename.endswith('.yaml'):
import_service(full_service_name,
os.path.join(final_dir, filename))
def iterate_over_services(request):

View File

@ -101,11 +101,7 @@ def unpack_ui_package(archive_path):
tar = tarfile.open(archive_path, 'r:gz')
try:
log.debug('Extracting metadata archive')
# extract files without containing folder
for tarinfo in tar:
if tarinfo.isreg():
tarinfo.name = os.path.basename(tarinfo.name)
tar.extract(tarinfo, dst_dir)
tar.extractall(dst_dir)
finally:
tar.close()
return dst_dir