def create_widget_from_template(template, user, request=None, base=None): """Creates a widget from a template""" if isinstance(template, TemplateParser): parser = template else: template_content = download_http_content(template, user=user) if base is None: base = template parser = TemplateParser(template_content, base=base) if parser.get_resource_type() != 'widget': raise Exception() widget_info = parser.get_resource_info() check_requirements(widget_info) widget = Widget() widget.resource = CatalogueResource.objects.get(vendor=parser.get_resource_vendor(), short_name=parser.get_resource_name(), version=parser.get_resource_version()) widget_code = parser.get_absolute_url(widget_info['contents']['src'], base) widget.xhtml = XHTML.objects.create( uri=widget.uri + "/xhtml", url=widget_code, content_type=widget_info['contents']['contenttype'], use_platform_style=widget_info['contents']['useplatformstyle'], cacheable=widget_info['contents']['cacheable'] ) widget.width = widget_info['widget_width'] widget.height = widget_info['widget_height'] widget.save() for preference in widget_info['preferences']: vDef = VariableDef.objects.create( name=preference['name'], type=parser.typeText2typeCode(preference['type']), aspect='PREF', readonly=preference['readonly'], default_value=preference['default'], value=preference['value'], widget=widget, secure=preference['secure'] ) for prop in widget_info['properties']: vDef = VariableDef.objects.create( name=prop['name'], type=parser.typeText2typeCode(prop['type']), aspect='PROP', default_value=prop['default'], widget=widget, secure=prop['secure'], ) return widget
def create_widget_from_template(template, user, request=None, base=None): """Creates a widget from a template""" if isinstance(template, TemplateParser): parser = template else: template_content = downloader.download_http_content(template, user=user) if base is None: base = template parser = TemplateParser(template_content, base=base) if parser.get_resource_type() != 'widget': raise Exception() widget_info = parser.get_resource_info() check_requirements(widget_info) widget = Widget() widget.resource = CatalogueResource.objects.get(vendor=parser.get_resource_vendor(), short_name=parser.get_resource_name(), version=parser.get_resource_version()) widget_code = parser.get_absolute_url(widget_info['code_url'], base) widget.xhtml = XHTML.objects.create( uri=widget.uri + "/xhtml", url=widget_code, content_type=widget_info['code_content_type'], use_platform_style=widget_info['code_uses_platform_style'], cacheable=widget_info['code_cacheable'] ) widget.width = widget_info['widget_width'] widget.height = widget_info['widget_height'] widget.save() variable_definitions = {} user_options = {} order = 0 for preference in widget_info['preferences']: vDef = VariableDef.objects.create( name=preference['name'], order=order, description=preference['description'], type=parser.typeText2typeCode(preference['type']), aspect='PREF', friend_code=None, readonly=preference['readonly'], label=preference['label'], default_value=preference['default_value'], value=preference['value'], widget=widget, secure=preference['secure'] ) variable_definitions[vDef.name] = vDef user_options[vDef.name] = {} for option in preference.get('options', ()): upo = UserPrefOption.objects.create( value=option['value'], name=option['label'], variableDef=vDef ) user_options[vDef.name][upo.name] = upo order += 1 order = 0 for prop in widget_info['properties']: vDef = VariableDef.objects.create( name=prop['name'], order=order, description=prop['description'], type=parser.typeText2typeCode(prop['type']), aspect='PROP', friend_code=None, label=prop['label'], default_value=prop['default_value'], widget=widget, secure=prop['secure'], ) variable_definitions[vDef.name] = vDef order += 1 order = 0 for input_endpoint in widget_info['wiring']['inputs']: vDef = VariableDef.objects.create( name=input_endpoint['name'], order=order, description=input_endpoint['description'], type=parser.typeText2typeCode(input_endpoint['type']), aspect='SLOT', friend_code=input_endpoint['friendcode'], label=input_endpoint['label'], action_label=input_endpoint['actionlabel'], widget=widget, ) variable_definitions[vDef.name] = vDef order += 1 order = 0 for output_endpoint in widget_info['wiring']['outputs']: vDef = VariableDef.objects.create( name=output_endpoint['name'], order=order, description=output_endpoint['description'], type=parser.typeText2typeCode(output_endpoint['type']), aspect='EVEN', friend_code=output_endpoint['friendcode'], label=output_endpoint['label'], widget=widget, ) variable_definitions[vDef.name] = vDef order += 1 for context in widget_info['context']: vDef = VariableDef.objects.create( name=context['name'], type=parser.typeText2typeCode(context['type']), aspect=context['aspect'], widget=widget, ) ContextOption.objects.create(concept=context['concept'], varDef=vDef) for lang in widget_info['translations']: translation = widget_info['translations'][lang] for index in translation: value = translation[index] usages = widget_info['translation_index_usage'][index] for use in usages: if use['type'] == 'vdef': vDef = variable_definitions[use['variable']] table = vDef._get_table_id() element_id = vDef.id elif use['type'] == 'upo': upo = user_options[use['variable']][use['option']] table = upo._get_table_id() element_id = upo.id else: continue Translation.objects.create( text_id=index, element_id=element_id, table=table, language=lang, value=value, default=widget_info['default_lang'] == lang ) return widget