def parse_spec(spec, keys=None):
        if keys is None:
            keys = []
        if not isinstance(keys, list):
            keys = [keys]
        key = keys and keys[-1] or None

        if isinstance(spec, yaql_expression.YaqlExpression):
            return key, fields.RawProperty(key, spec)
        elif isinstance(spec, dict):
            items = []
            for k, v in six.iteritems(spec):
                k = helpers.decamelize(k)
                new_key, v = parse_spec(v, keys + [k])
                if new_key:
                    k = new_key
                items.append((k, v))
            return key, dict(items)
        elif isinstance(spec, list):
            return key, [parse_spec(_spec, keys)[1] for _spec in spec]
        elif isinstance(spec,
                        six.string_types) and helpers.is_localizable(keys):
            return key, spec
        else:
            if key == 'hidden':
                if spec:
                    return 'widget', forms.HiddenInput
                else:
                    return 'widget', None
            elif key == 'regexp_validator':
                return 'validators', [helpers.prepare_regexp(spec)]
            else:
                return key, spec
Example #2
0
    def parse_spec(spec, keys=None):
        if keys is None:
            keys = []

        if not isinstance(keys, types.ListType):
            keys = [keys]
        key = keys and keys[-1] or None
        if isinstance(spec, yaql_expression.YaqlExpression):
            return key, fields.RawProperty(key, spec)
        elif isinstance(spec, types.DictType):
            items = []
            for k, v in spec.iteritems():
                if not k in ('type', 'name'):
                    k = helpers.decamelize(k)
                    new_key, v = parse_spec(v, keys + [k])
                    if new_key:
                        k = new_key
                    items.append((k, v))
            return key, dict(items)
        elif isinstance(spec, types.ListType):
            return key, [parse_spec(_spec, keys)[1] for _spec in spec]
        elif isinstance(spec, basestring) and helpers.is_localizable(keys):
            return key, _(spec)
        else:
            if key == 'type':
                return key, TYPES[spec]
            elif key == 'hidden' and spec is True:
                return 'widget', forms.HiddenInput
            elif key == 'regexp_validator':
                return 'validators', [helpers.prepare_regexp(spec)]
            else:
                return key, spec
Example #3
0
def import_app(request, app_id):
    app_data = get_apps_data(request).setdefault(app_id, {})

    ui_desc = pkg_api.get_app_ui(request, app_id)
    fqn = pkg_api.get_app_fqn(request, app_id)
    LOG.debug('Using data {0} for app {1}'.format(app_data, fqn))
    version.check_version(ui_desc.pop('Version', 1))
    service = dict(
        (helpers.decamelize(k), v) for (k, v) in ui_desc.iteritems())

    global _apps  # In-memory caching of dynamic UI forms
    if app_id in _apps:
        LOG.debug('Using in-memory forms for app {0}'.format(fqn))
        app = _apps[app_id]
        app.set_data(app_data)
    else:
        LOG.debug('Creating new forms for app {0}'.format(fqn))
        app = _apps[app_id] = Service(app_data, **service)
    return app
def import_app(request, app_id):
    app_data = get_apps_data(request).setdefault(app_id, {})

    ui_desc = pkg_api.get_app_ui(request, app_id)
    fqn = pkg_api.get_app_fqn(request, app_id)
    LOG.debug('Using data {0} for app {1}'.format(app_data, fqn))
    app_version = ui_desc.pop('Version', version.LATEST_FORMAT_VERSION)
    version.check_version(app_version)
    service = dict(
        (helpers.decamelize(k), v) for (k, v) in six.iteritems(ui_desc))
    parameters = service.pop('parameters', {})
    parameters_source = service.pop('parameters_source', None)
    if parameters_source is not None:
        parts = parameters_source.rsplit('.', 1)
        if 2 >= len(parts) > 0:
            if len(parts) == 2:
                class_name, method_name = parts
            else:
                method_name = parts[0]
                class_name = service.get('application',
                                         {}).get('?', {}).get('type', fqn)

            details = pkg_api.get_package_details(request, app_id)
            pkg_version = getattr(details, 'version', '*')
            request_body = {
                'className': class_name,
                'methodName': method_name,
                'packageName': fqn,
                'classVersion': pkg_version,
                'parameters': {}
            }

            result = api.muranoclient(request).static_actions.call(
                request_body).get_result()
            if result and isinstance(result, dict):
                parameters.update(result)

    return Service(app_data,
                   app_version,
                   fqn,
                   parameters=parameters,
                   **service)
Example #5
0
def import_app(request, app_id):
    app_data = get_apps_data(request).setdefault(app_id, {})

    ui_desc = pkg_api.get_app_ui(request, app_id)
    fqn = pkg_api.get_app_fqn(request, app_id)
    LOG.debug('Using data {0} for app {1}'.format(app_data, fqn))
    app_version = ui_desc.pop('Version', version.LATEST_FORMAT_VERSION)
    version.check_version(app_version)
    service = dict(
        (helpers.decamelize(k), v) for (k, v) in ui_desc.iteritems())

    global _apps  # In-memory caching of dynamic UI forms
    if app_id in _apps:
        LOG.debug('Using in-memory forms for app {0}'.format(fqn))
        app = _apps[app_id]
        app.set_data(app_data)
    else:
        LOG.debug('Creating new forms for app {0}'.format(fqn))
        app = _apps[app_id] = Service(app_data, app_version, **service)
    return app
Example #6
0
def import_app(request, app_id):
    app_data = get_apps_data(request).setdefault(app_id, {})

    ui_desc = pkg_api.get_app_ui(request, app_id)
    fqn = pkg_api.get_app_fqn(request, app_id)
    LOG.debug('Using data {0} for app {1}'.format(app_data, fqn))
    app_version = ui_desc.pop('Version', version.LATEST_FORMAT_VERSION)
    version.check_version(app_version)
    service = dict(
        (helpers.decamelize(k), v) for (k, v) in six.iteritems(ui_desc))
    parameters = service.pop('parameters', {})
    parameters_source = service.pop('parameters_source', None)
    if parameters_source is not None:
        parts = parameters_source.rsplit('.', 1)
        if 2 >= len(parts) > 0:
            if len(parts) == 2:
                class_name, method_name = parts
            else:
                method_name = parts[0]
                class_name = service.get('application', {}).get('?', {}).get(
                    'type', fqn)

            details = pkg_api.get_package_details(request, app_id)
            pkg_version = getattr(details, 'version', '*')
            request_body = {
                'className': class_name,
                'methodName': method_name,
                'packageName': fqn,
                'classVersion': pkg_version,
                'parameters': {}
            }

            result = api.muranoclient(request).static_actions.call(
                request_body).get_result()
            if result and isinstance(result, dict):
                parameters.update(result)

    return Service(app_data, app_version, fqn, parameters=parameters,
                   **service)