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()
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()
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()
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)
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)
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
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()
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
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