コード例 #1
0
ファイル: xml.py プロジェクト: GreenIDer-Donati/wirecloud
    def _parse_basic_info(self):

        self._info['vendor'] = self._get_field(VENDOR_XPATH, self._resource_description).strip()
        if not is_valid_vendor(self._info['vendor']):
            raise TemplateParseException(_('The format of the vendor is invalid.'))

        self._info['name'] = self._get_field(NAME_XPATH, self._resource_description).strip()
        if not is_valid_name(self._info['name']):
            raise TemplateParseException(_('The format of the name is invalid.'))

        self._info['version'] = self._get_field(VERSION_XPATH, self._resource_description).strip()
        if not is_valid_version(self._info['version']):
            raise TemplateParseException(_('ERROR: the format of the version number is invalid. Format: X.X.X where X is an integer. Ex. "0.1", "1.11" NOTE: "1.01" should be changed to "1.0.1" or "1.1"'))

        self._info['title'] = self._get_field(DISPLAY_NAME_XPATH, self._resource_description, required=False)
        self._add_translation_index(self._info['title'], type='resource', field='title')

        self._info['description'] = self._get_field(DESCRIPTION_XPATH, self._resource_description, required=False)
        self._add_translation_index(self._info['description'], type='resource', field='description')
        self._info['longdescription'] = self._get_field(LONG_DESCRIPTION_XPATH, self._resource_description, required=False)

        self._info['authors'] = parse_contacts_info(self._get_field(AUTHOR_XPATH, self._resource_description, required=False))
        self._info['contributors'] = parse_contacts_info(self._get_field(CONTRIBUTORS_XPATH, self._resource_description, required=False))
        self._info['email'] = self._get_field(MAIL_XPATH, self._resource_description, required=False)
        self._info['image'] = self._get_field(IMAGE_URI_XPATH, self._resource_description, required=False)
        self._info['smartphoneimage'] = self._get_field(IPHONE_IMAGE_URI_XPATH, self._resource_description, required=False)
        self._info['homepage'] = self._get_field(HOMEPAGE_URI_XPATH, self._resource_description, required=False)
        self._info['doc'] = self._get_field(DOC_URI_XPATH, self._resource_description, required=False)
        self._info['license'] = self._get_field(LICENCE_XPATH, self._resource_description, required=False)
        self._info['licenseurl'] = self._get_field(LICENCE_URL_XPATH, self._resource_description, required=False)
        self._info['issuetracker'] = self._get_field(ISSUETRACKER_XPATH, self._resource_description, required=False)
        self._info['changelog'] = self._get_field(CHANGE_LOG_XPATH, self._resource_description, required=False)
        self._parse_requirements()
コード例 #2
0
ファイル: xml.py プロジェクト: Mognom/wirecloud
    def _parse_basic_info(self):

        self._info['vendor'] = self._doc.get('vendor', '').strip()
        self._info['name'] = self._doc.get('name', '').strip()
        self._info['version'] = self._doc.get('version', '').strip()

        self._info['title'] = self._get_field(DISPLAY_NAME_XPATH, self._resource_description, required=False)
        self._add_translation_index(self._info['title'], type='resource', field='title')

        self._info['description'] = self._get_field(DESCRIPTION_XPATH, self._resource_description, required=False)
        self._add_translation_index(self._info['description'], type='resource', field='description')
        self._info['longdescription'] = self._get_field(LONG_DESCRIPTION_XPATH, self._resource_description, required=False)

        self._info['authors'] = parse_contacts_info(self._get_field(AUTHORS_XPATH, self._resource_description, required=False))
        self._info['contributors'] = parse_contacts_info(self._get_field(CONTRIBUTORS_XPATH, self._resource_description, required=False))
        self._info['email'] = self._get_field(MAIL_XPATH, self._resource_description, required=False)
        self._info['image'] = self._get_field(IMAGE_URI_XPATH, self._resource_description, required=False)
        self._info['smartphoneimage'] = self._get_field(IPHONE_IMAGE_URI_XPATH, self._resource_description, required=False)
        self._info['homepage'] = self._get_field(HOMEPAGE_XPATH, self._resource_description, required=False)
        self._info['doc'] = self._get_field(DOC_URI_XPATH, self._resource_description, required=False)
        self._info['license'] = self._get_field(LICENCE_XPATH, self._resource_description, required=False)
        self._info['licenseurl'] = self._get_field(LICENCE_URL_XPATH, self._resource_description, required=False)
        self._info['issuetracker'] = self._get_field(ISSUETRACKER_XPATH, self._resource_description, required=False)
        self._info['changelog'] = self._get_field(CHANGELOG_XPATH, self._resource_description, required=False)
        self._parse_requirements()
コード例 #3
0
    def _parse_basic_info(self):

        self._info['vendor'] = self._doc.get('vendor', '').strip()
        self._info['name'] = self._doc.get('name', '').strip()
        self._info['version'] = self._doc.get('version', '').strip()

        self._info['title'] = self._get_field(DISPLAY_NAME_XPATH, self._component_description, required=False)
        self._add_translation_index(self._info['title'], type='resource', field='title')

        self._info['description'] = self._get_field(DESCRIPTION_XPATH, self._component_description, required=False)
        self._add_translation_index(self._info['description'], type='resource', field='description')
        self._info['longdescription'] = self._get_field(LONG_DESCRIPTION_XPATH, self._component_description, required=False)

        self._info['authors'] = parse_contacts_info(self._get_field(AUTHORS_XPATH, self._component_description, required=False))
        self._info['contributors'] = parse_contacts_info(self._get_field(CONTRIBUTORS_XPATH, self._component_description, required=False))
        self._info['email'] = self._get_field(MAIL_XPATH, self._component_description, required=False)
        self._info['image'] = self._get_field(IMAGE_URI_XPATH, self._component_description, required=False)
        self._info['smartphoneimage'] = self._get_field(IPHONE_IMAGE_URI_XPATH, self._component_description, required=False)
        self._info['homepage'] = self._get_field(HOMEPAGE_XPATH, self._component_description, required=False)
        self._info['doc'] = self._get_field(DOC_URI_XPATH, self._component_description, required=False)
        self._info['license'] = self._get_field(LICENCE_XPATH, self._component_description, required=False)
        self._info['licenseurl'] = self._get_field(LICENCE_URL_XPATH, self._component_description, required=False)
        self._info['issuetracker'] = self._get_field(ISSUETRACKER_XPATH, self._component_description, required=False)
        self._info['changelog'] = self._get_field(CHANGELOG_XPATH, self._component_description, required=False)
        self._parse_requirements()
コード例 #4
0
ファイル: json.py プロジェクト: GreenIDer-Donati/wirecloud
    def _check_contacts_fields(self, fields, place=None, required=False):
        if place is None:
            place = self._info

        for field in fields:
            if field not in place:
                if required:
                    raise TemplateParseException('Missing required field: %s' % field)

                place[field] = []
            elif isinstance(place[field], (text_type, list, tuple)):
                place[field] = parse_contacts_info(place[field])
            else:
                raise TemplateParseException('%s field must be a list or string' % field)
コード例 #5
0
ファイル: json.py プロジェクト: ngpJason/wirecloud
    def _check_contacts_fields(self, fields, place=None, required=False):
        if place is None:
            place = self._info

        for field in fields:
            if field not in place:
                if required:
                    raise TemplateParseException('Missing required field: %s' % field)

                place[field] = []
            elif isinstance(place[field], (str, list, tuple)):
                place[field] = parse_contacts_info(place[field])
            else:
                raise TemplateParseException('%s field must be a list or string' % field)
コード例 #6
0
def build_json_template_from_workspace(options, workspace, user):
    options['type'] = 'mashup'
    options['params'] = []
    options['embedmacs'] = options.get('embedmacs', False) is True
    options['embedded'] = set()
    options['translations'] = {}
    options['translation_index_usage'] = {}

    description = options.get('description', '').strip()
    if description == '':
        options['description'] = get_workspace_description(workspace)

    if 'authors' not in options:
        options['authors'] = ({'name': six.text_type(user)}, )
    elif isinstance(options['authors'], six.text_type):
        options['authors'] = parse_contacts_info(options['authors'])

    if 'contributors' not in options:
        options['contributors'] = ()
    elif isinstance(options['contributors'], six.text_type):
        options['contributors'] = parse_contacts_info(options['contributors'])

    options['requirements'] = []

    readOnlyWidgets = options.get('readOnlyWidgets', False)
    parametrization = options.get('parametrization')
    if not parametrization:
        parametrization = {}
    if 'iwidgets' not in parametrization:
        parametrization['iwidgets'] = {}
    if 'ioperators' not in parametrization:
        parametrization['ioperators'] = {}

    # Workspace preferences
    options['preferences'] = {}
    for preference in workspace.workspacepreference_set.all():
        if not preference.inherit:
            options['preferences'][preference.name] = preference.value

    # Tabs and their preferences
    options['tabs'] = []
    options['wiring'] = {
        'inputs': [],
        'outputs': [],
    }
    for tab in workspace.tab_set.order_by('position'):
        preferences = {}
        for preference in tab.tabpreference_set.all():
            if not preference.inherit:
                preferences[preference.name] = preference.value

        resources = []
        for iwidget in tab.iwidget_set.select_related(
                'widget__resource').all():
            resource_info = process_iwidget(workspace, iwidget,
                                            options['wiring'],
                                            parametrization['iwidgets'],
                                            readOnlyWidgets)
            resources.append(resource_info)
            if options['embedmacs']:
                options['embedded'].add('/'.join(
                    (resource_info['vendor'], resource_info['name'],
                     resource_info['version'])))

        options['tabs'].append({
            'name': tab.name,
            'resources': resources,
            'preferences': preferences,
        })

    # wiring conections and operators
    readOnlyConnectables = options.get('readOnlyConnectables', False)
    wiring_status = workspace.wiringStatus
    if len(wiring_status) == 0:
        wiring_status = get_wiring_skeleton()

    # Set the wiring status' version
    if wiring_status.get('version', '1.0') == '1.0':
        wiring_status = parse_wiring_old_version(wiring_status)

    options['wiring']['version'] = '2.0'
    options['wiring']['operators'] = {}
    for id_, operator in six.iteritems(wiring_status['operators']):
        operator_data = {
            'name': operator['name'],
            'preferences': {},
        }

        vendor, name, version = operator['name'].split('/')
        resource = CatalogueResource.objects.get(vendor=vendor,
                                                 short_name=name,
                                                 version=version)
        operator_info = json.loads(resource.json_description)
        operator_params = parametrization['ioperators'].get(id_, {})
        for pref_index, preference in enumerate(operator_info['preferences']):

            status = 'normal'
            if preference['name'] in operator_params:
                ioperator_param_desc = operator_params[preference['name']]
                status = ioperator_param_desc.get('status', 'normal')
                source = ioperator_param_desc.get('source', 'current')
                if source == 'default':
                    if status == 'normal':
                        # Do not issue a Preference element for this preference
                        continue
                    value = None
                elif source == 'current':
                    value = get_current_operator_pref_value(
                        operator, preference)
                elif source == 'custom':
                    value = ioperator_param_desc['value']
                else:
                    raise Exception('Invalid preference value source: %s' %
                                    source)

            else:
                value = get_current_operator_pref_value(operator, preference)

            operator_data['preferences'][preference['name']] = {
                'readonly': status != 'normal',
                'hidden': status == 'hidden',
            }
            if value is not None:
                operator_data['preferences'][
                    preference['name']]['value'] = value

        options['wiring']['operators'][id_] = operator_data
        if options['embedmacs']:
            options['embedded'].add(operator['name'])

    options['wiring']['connections'] = []
    for connection in wiring_status['connections']:
        options['wiring']['connections'].append({
            'source':
            connection['source'],
            'target':
            connection['target'],
            'readonly':
            readOnlyConnectables,
        })

    options['wiring']['visualdescription'] = wiring_status['visualdescription']

    embedded = options['embedded']
    options['embedded'] = []
    for resource in embedded:
        (vendor, name, version) = resource.split('/')
        options['embedded'].append({
            'vendor':
            vendor,
            'name':
            name,
            'version':
            version,
            'src':
            'macs/%s_%s_%s.wgt' % (vendor, name, version)
        })
    del options['embedmacs']

    return options
コード例 #7
0
    def _parse_basic_info(self):

        self._info['vendor'] = self._get_field(
            VENDOR_XPATH, self._resource_description).strip()
        if not is_valid_vendor(self._info['vendor']):
            raise TemplateParseException(
                _('The format of the vendor is invalid.'))

        self._info['name'] = self._get_field(
            NAME_XPATH, self._resource_description).strip()
        if not is_valid_name(self._info['name']):
            raise TemplateParseException(
                _('The format of the name is invalid.'))

        self._info['version'] = self._get_field(
            VERSION_XPATH, self._resource_description).strip()
        if not is_valid_version(self._info['version']):
            raise TemplateParseException(
                _('ERROR: the format of the version number is invalid. Format: X.X.X where X is an integer. Ex. "0.1", "1.11" NOTE: "1.01" should be changed to "1.0.1" or "1.1"'
                  ))

        self._info['title'] = self._get_field(DISPLAY_NAME_XPATH,
                                              self._resource_description,
                                              required=False)
        self._add_translation_index(self._info['title'],
                                    type='resource',
                                    field='title')

        self._info['description'] = self._get_field(DESCRIPTION_XPATH,
                                                    self._resource_description,
                                                    required=False)
        self._add_translation_index(self._info['description'],
                                    type='resource',
                                    field='description')
        self._info['longdescription'] = self._get_field(
            LONG_DESCRIPTION_XPATH, self._resource_description, required=False)

        self._info['authors'] = parse_contacts_info(
            self._get_field(AUTHOR_XPATH,
                            self._resource_description,
                            required=False))
        self._info['contributors'] = parse_contacts_info(
            self._get_field(CONTRIBUTORS_XPATH,
                            self._resource_description,
                            required=False))
        self._info['email'] = self._get_field(MAIL_XPATH,
                                              self._resource_description,
                                              required=False)
        self._info['image'] = self._get_field(IMAGE_URI_XPATH,
                                              self._resource_description,
                                              required=False)
        self._info['smartphoneimage'] = self._get_field(
            IPHONE_IMAGE_URI_XPATH, self._resource_description, required=False)
        self._info['homepage'] = self._get_field(HOMEPAGE_URI_XPATH,
                                                 self._resource_description,
                                                 required=False)
        self._info['doc'] = self._get_field(DOC_URI_XPATH,
                                            self._resource_description,
                                            required=False)
        self._info['license'] = self._get_field(LICENCE_XPATH,
                                                self._resource_description,
                                                required=False)
        self._info['licenseurl'] = self._get_field(LICENCE_URL_XPATH,
                                                   self._resource_description,
                                                   required=False)
        self._info['issuetracker'] = self._get_field(
            ISSUETRACKER_XPATH, self._resource_description, required=False)
        self._info['changelog'] = self._get_field(CHANGE_LOG_XPATH,
                                                  self._resource_description,
                                                  required=False)
        self._parse_requirements()
コード例 #8
0
def build_json_template_from_workspace(options, workspace, user):
    options['type'] = 'mashup'
    options['params'] = []
    options['embedmacs'] = options.get('embedmacs', False) is True
    options['embedded'] = set()
    options['translations'] = {}
    options['translation_index_usage'] = {}

    description = options.get('description', '').strip()
    if description == '':
        options['description'] = get_workspace_description(workspace)
    else:
        options['description'] = description + '\n' + get_workspace_description(workspace)

    if 'authors' not in options:
        options['authors'] = ({'name': unicode(user)},)
    elif isinstance(options['authors'], six.text_type):
        options['authors'] = parse_contacts_info(options['authors'])

    if 'contributors' not in options:
        options['contributors'] = ()
    elif isinstance(options['contributors'], six.text_type):
        options['contributors'] = parse_contacts_info(options['contributors'])

    options['requirements'] = []

    readOnlyWidgets = options.get('readOnlyWidgets', False)
    parametrization = options.get('parametrization')
    if not parametrization:
        parametrization = {}
    if 'iwidgets' not in parametrization:
        parametrization['iwidgets'] = {}
    if 'ioperators' not in parametrization:
        parametrization['ioperators'] = {}

    # Workspace preferences
    options['preferences'] = {}
    for preference in workspace.workspacepreference_set.all():
        if not preference.inherit:
            options['preferences'][preference.name] = preference.value

    # Tabs and their preferences
    options['tabs'] = []
    options['wiring'] = {
        'inputs': [],
        'outputs': [],
    }
    for tab in workspace.tab_set.order_by('position'):
        preferences = {}
        for preference in tab.tabpreference_set.all():
            if not preference.inherit:
                preferences[preference.name] = preference.value

        resources = []
        for iwidget in tab.iwidget_set.select_related('widget__resource', 'position').all():
            resource_info = process_iwidget(workspace, iwidget, options['wiring'], parametrization['iwidgets'], readOnlyWidgets)
            resources.append(resource_info)
            if options['embedmacs']:
                options['embedded'].add('/'.join((resource_info['vendor'], resource_info['name'], resource_info['version'])))

        options['tabs'].append({
            'name': tab.name,
            'resources': resources,
            'preferences': preferences,
        })

    # wiring conections and operators
    readOnlyConnectables = options.get('readOnlyConnectables', False)
    try:
        wiring_status = json.loads(workspace.wiringStatus)
    except:
        wiring_status = {
            "operators": {},
            "connections": [],
        }

    options['wiring']['operators'] = {}
    for id_, operator in six.iteritems(wiring_status['operators']):
        operator_data = {
            'name': operator['name'],
            'preferences': {},
        }

        vendor, name, version = operator['name'].split('/')
        resource = CatalogueResource.objects.get(vendor=vendor, short_name=name, version=version)
        operator_info = json.loads(resource.json_description)
        operator_params = parametrization['ioperators'].get(id_, {})
        for pref_index, preference in enumerate(operator_info['preferences']):

            status = 'normal'
            if preference['name'] in operator_params:
                ioperator_param_desc = operator_params[preference['name']]
                source = ioperator_param_desc['source']
                if source == 'default':
                    # Do not issue a Preference element for this preference
                    continue
                elif source == 'current':
                    value = get_current_operator_pref_value(operator, preference)
                elif source == 'custom':
                    value = ioperator_param_desc['value']
                else:
                    raise Exception('Invalid preference value source: %s' % source)

                status = ioperator_param_desc['status']
            else:
                value = get_current_operator_pref_value(operator, preference)

            operator_data['preferences'][preference['name']] = {
                'readonly': status != 'normal',
                'hidden': status == 'hidden',
                'value': value,
            }

        options['wiring']['operators'][id_] = operator_data
        if options['embedmacs']:
            options['embedded'].add(operator['name'])

    options['wiring']['connections'] = []
    for connection in wiring_status['connections']:
        options['wiring']['connections'].append({
            'source': connection['source'],
            'target': connection['target'],
            'readonly': readOnlyConnectables,
        })

    options['wiring']['views'] = wiring_status.get('views', ())

    embedded = options['embedded']
    options['embedded'] = []
    for resource in embedded:
        (vendor, name, version) = resource.split('/')
        options['embedded'].append({
            'vendor': vendor,
            'name': name,
            'version': version,
            'src': 'macs/%s_%s_%s.wgt' % (vendor, name, version)
        })
    del options['embedmacs']

    return options
コード例 #9
0
def build_json_template_from_workspace(options, workspace, user):
    options['type'] = 'mashup'
    options['params'] = []
    options['embedmacs'] = options.get('embedmacs', False) is True
    options['embedded'] = set()
    options['translations'] = {}
    options['translation_index_usage'] = {}

    description = options.get('description', '').strip()
    if description == '':
        options['description'] = get_workspace_description(workspace)

    if 'authors' not in options:
        options['authors'] = ({'name': six.text_type(user)},)
    elif isinstance(options['authors'], six.text_type):
        options['authors'] = parse_contacts_info(options['authors'])

    if 'contributors' not in options:
        options['contributors'] = ()
    elif isinstance(options['contributors'], six.text_type):
        options['contributors'] = parse_contacts_info(options['contributors'])

    options['requirements'] = []

    readOnlyWidgets = options.get('readOnlyWidgets', False)
    parametrization = options.get('parametrization')
    if not parametrization:
        parametrization = {}
    if 'iwidgets' not in parametrization:
        parametrization['iwidgets'] = {}
    if 'ioperators' not in parametrization:
        parametrization['ioperators'] = {}

    cache_manager = VariableValueCacheManager(workspace, workspace.creator)

    # Workspace preferences
    options['preferences'] = {}
    for preference in workspace.workspacepreference_set.all():
        # Filter public and sharelist preferences
        if not preference.inherit and preference.name not in ("public", "sharelist"):
            options['preferences'][preference.name] = preference.value

    # Tabs and their preferences
    options['tabs'] = []
    options['wiring'] = {
        'inputs': [],
        'outputs': [],
    }
    for tab in workspace.tab_set.order_by('position'):
        preferences = {}
        for preference in tab.tabpreference_set.all():
            if not preference.inherit:
                preferences[preference.name] = preference.value

        resources = []
        for iwidget in tab.iwidget_set.select_related('widget__resource').all():
            resource_info = process_iwidget(workspace, iwidget, options['wiring'], parametrization['iwidgets'], readOnlyWidgets, cache_manager)
            resources.append(resource_info)
            if options['embedmacs']:
                options['embedded'].add('/'.join((resource_info['vendor'], resource_info['name'], resource_info['version'])))

        tab_info = {
            'name': tab.name,
            'resources': resources,
            'preferences': preferences,
        }
        if tab.title is not None and tab.title.strip() != "":
            tab_info['title'] = tab.title

        options['tabs'].append(tab_info)

    # wiring conections and operators
    readOnlyConnectables = options.get('readOnlyConnectables', False)
    wiring_status = workspace.wiringStatus
    if len(wiring_status) == 0:
        wiring_status = get_wiring_skeleton()

    # Set the wiring status' version
    if wiring_status.get('version', '1.0') == '1.0':
        wiring_status = parse_wiring_old_version(wiring_status)

    options['wiring']['version'] = '2.0'
    options['wiring']['operators'] = {}
    for operator_id, operator in six.iteritems(wiring_status['operators']):
        operator_data = {
            'name': operator['name'],
            'preferences': {},
        }

        vendor, name, version = operator['name'].split('/')
        resource = CatalogueResource.objects.get(vendor=vendor, short_name=name, version=version)
        operator_info = resource.json_description
        operator_params = parametrization['ioperators'].get(operator_id, {})
        for pref_index, preference in enumerate(operator_info['preferences']):

            status = 'normal'
            if preference['name'] in operator_params:
                ioperator_param_desc = operator_params[preference['name']]
                status = ioperator_param_desc.get('status', 'normal')
                source = ioperator_param_desc.get('source', 'current')
                if source == 'default':
                    if status == 'normal':
                        # Do not issue a Preference element for this preference
                        continue
                    value = None
                elif source == 'current':
                    value = cache_manager.get_variable_value_from_varname("ioperator", operator_id, preference['name'])
                elif source == 'custom':
                    value = ioperator_param_desc['value']
                else:
                    raise Exception('Invalid preference value source: %s' % source)

            else:
                value = cache_manager.get_variable_value_from_varname("ioperator", operator_id, preference['name'])

            operator_data['preferences'][preference['name']] = {
                'readonly': status != 'normal',
                'hidden': status == 'hidden',
            }
            if value is not None:
                operator_data['preferences'][preference['name']]['value'] = value

        options['wiring']['operators'][operator_id] = operator_data
        if options['embedmacs']:
            options['embedded'].add(operator['name'])

    options['wiring']['connections'] = []
    for connection in wiring_status['connections']:
        options['wiring']['connections'].append({
            'source': connection['source'],
            'target': connection['target'],
            'readonly': readOnlyConnectables,
        })

    options['wiring']['visualdescription'] = wiring_status['visualdescription']

    embedded = options['embedded']
    options['embedded'] = []
    for resource in embedded:
        (vendor, name, version) = resource.split('/')
        options['embedded'].append({
            'vendor': vendor,
            'name': name,
            'version': version,
            'src': 'macs/%s_%s_%s.wgt' % (vendor, name, version)
        })
    del options['embedmacs']

    return options