Exemplo n.º 1
0
def generate_xhtml_operator_code(js_files, base_url, request, requirements,
                                 mode):

    api_bootstrap = get_absolute_static_url(
        'js/WirecloudAPI/WirecloudAPIBootstrap.js',
        request=request,
        versioned=True)
    api_url = get_absolute_static_url(
        'js/WirecloudAPI/WirecloudOperatorAPI.js',
        request=request,
        versioned=True)
    api_common_url = get_absolute_static_url(
        'js/WirecloudAPI/WirecloudAPICommon.js',
        request=request,
        versioned=True)
    api_closure_url = get_absolute_static_url(
        'js/WirecloudAPI/WirecloudAPIClosure.js',
        request=request,
        versioned=True)
    api_js_files = [
        get_absolute_static_url(url, request=request, versioned=True)
        for url in get_operator_api_extensions(mode, requirements)
    ]
    api_js = [api_bootstrap, api_url, api_common_url
              ] + api_js_files + [api_closure_url]

    t = loader.get_template('wirecloud/operator_xhtml.html')
    c = Context({'base_url': base_url, 'js_files': api_js + js_files})

    xhtml = t.render(c)

    return xhtml
Exemplo n.º 2
0
def fix_widget_code(widget_code, content_type, request, encoding, use_platform_style, requirements, mode, theme):

    # This line is here for raising UnicodeDecodeError in case the widget_code is not encoded using the expecified encoding
    widget_code.decode(encoding)

    if content_type in ('text/html', 'application/xhtml+xml') and widget_code.strip() == b'':
        widget_code = b'<html></html>'

    if content_type == 'text/html':
        parser = etree.HTMLParser(encoding=encoding)
        serialization_options = {'method': 'html'}

    elif content_type == 'application/xhtml+xml':
        parser = etree.XMLParser(encoding=encoding)
        serialization_options = {'method': 'xml', 'xml_declaration': False}

    else:
        return widget_code

    xmltree = etree.parse(BytesIO(widget_code), parser)

    prefix = xmltree.getroot().prefix
    xmlns = None
    if prefix in xmltree.getroot().nsmap:
        xmlns = xmltree.getroot().nsmap[prefix]

    # Fix head element
    head_elements = xpath(xmltree, '/xhtml:html/xhtml:head', xmlns)
    if len(head_elements) == 0:
        head_element = etree.Element("head")
        xmltree.getroot().insert(0, head_element)
    else:
        head_element = head_elements[0]

    # Fix base element
    base_elements = xpath(xmltree, '/xhtml:html/xhtml:head/xhtml:base', xmlns)
    for base_element in base_elements[1:]:
        base_element.getparent().remove(base_element)

    # Fix scripts
    scripts = xpath(xmltree, '/xhtml:html//xhtml:script', xmlns)
    for script in scripts:

        if 'src' in script.attrib:
            script.text = ''

    head_element.insert(0, etree.Element('script', type="text/javascript", src=get_absolute_static_url('js/WirecloudAPI/WirecloudAPIClosure.js', request=request, versioned=True)))
    files = get_widget_api_extensions(mode, requirements)
    files.reverse()
    for file in files:
        head_element.insert(0, etree.Element('script', type="text/javascript", src=get_absolute_static_url(file, request=request, versioned=True)))
    for file in get_widget_api_files(request):
        head_element.insert(0, etree.Element('script', type="text/javascript", src=file))

    if use_platform_style:
        for file in get_widget_platform_style(theme):
            head_element.insert(0, etree.Element('link', rel="stylesheet", type="text/css", href=file))

    # return modified code
    return etree.tostring(xmltree, pretty_print=False, encoding=encoding, **serialization_options)
Exemplo n.º 3
0
def generate_xhtml_operator_code(js_files, base_url, request, requirements, mode):

    api_closure_url = get_absolute_static_url('js/WirecloudAPI/WirecloudAPIClosure.js', request=request, versioned=True)
    extra_api_js_files = [get_absolute_static_url(url, request=request, versioned=True) for url in get_operator_api_extensions(mode, requirements)]
    api_js = get_operator_api_files(request) + extra_api_js_files + [api_closure_url]

    template = loader.get_template('wirecloud/operator_xhtml.html')
    context = {'base_url': base_url, 'js_files': api_js + js_files}

    xhtml = template.render(context)

    return xhtml
Exemplo n.º 4
0
def generate_xhtml_operator_code(js_files, base_url, request, requirements, mode):

    api_closure_url = get_absolute_static_url('js/WirecloudAPI/WirecloudAPIClosure.js', request=request, versioned=True)
    extra_api_js_files = [get_absolute_static_url(url, request=request, versioned=True) for url in get_operator_api_extensions(mode, requirements)]
    api_js = get_operator_api_files(request) + extra_api_js_files + [api_closure_url]

    t = loader.get_template('wirecloud/operator_xhtml.html')
    c = Context({'base_url': base_url, 'js_files': api_js + js_files})

    xhtml = t.render(c)

    return xhtml
Exemplo n.º 5
0
def generate_xhtml_operator_code(js_files, base_url, request):

    api_url = get_absolute_static_url('js/WirecloudAPI/WirecloudOperatorAPI.js', request=request)
    api_closure_url = get_absolute_static_url('js/WirecloudAPI/WirecloudAPIClosure.js', request=request)
    api_js_files = [get_absolute_static_url(url, request=request) for url in get_operator_api_extensions('index')]
    api_js = [api_url] + api_js_files + [api_closure_url]

    t = loader.get_template('wirecloud/operator_xhtml.html')
    c = Context({'base_url': base_url, 'js_files': api_js + js_files})

    xhtml = t.render(c)

    return xhtml
Exemplo n.º 6
0
def get_widget_api_files(request):

    from wirecloud.platform.core.plugins import get_version_hash

    key = 'widget_api_files/%s?v=%s' % (get_current_domain(request),
                                        get_version_hash())
    widget_api_files = cache.get(key)

    if widget_api_files is None or settings.DEBUG is True:
        code = '''{% load compress %}{% load static from staticfiles %}{% compress js %}
        <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudAPIBootstrap.js" %}"></script>
        <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudWidgetAPI.js" %}"></script>
        <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudAPICommon.js" %}"></script>
        {% endcompress %}'''

        result = Template(code).render(Context())
        doc = etree.parse(
            BytesIO(('<files>' + result + '</files>').encode('utf-8')),
            etree.XMLParser())

        files = [script.get('src') for script in doc.getroot()]
        files.reverse()
        widget_api_files = tuple([
            get_absolute_static_url(file, request=request, versioned=True)
            for file in files
        ])
        cache.set(key, widget_api_files)

    return list(widget_api_files)
Exemplo n.º 7
0
    def test_get_absolute_static_url_versioned(self, get_current_domain, get_current_scheme):
        request = self._prepare_request_mock()
        get_current_scheme.return_value = "http"
        get_current_domain.return_value = "dashboards.example.org"
        self.assertEqual(get_absolute_static_url("/path", request=request, versioned=True), 'http://dashboards.example.org/path?v=' + get_version_hash())

        get_current_scheme.assert_called_once_with(request)
        get_current_domain.assert_called_once_with(request)
Exemplo n.º 8
0
    def test_get_absolute_static_url_versioned(self, get_current_domain, get_current_scheme):
        request = self._prepare_request_mock()
        get_current_scheme.return_value = "http"
        get_current_domain.return_value = "dashboards.example.org"
        self.assertEqual(get_absolute_static_url("/path", request=request, versioned=True), 'http://dashboards.example.org/path?v=' + get_version_hash())

        get_current_scheme.assert_called_once_with(request)
        get_current_domain.assert_called_once_with(request)
Exemplo n.º 9
0
def get_widget_api_files(request):

    from wirecloud.platform.core.plugins import get_version_hash

    key = 'widget_api_files/%s?v=%s' % (get_current_domain(request), get_version_hash())
    widget_api_files = cache.get(key)

    if widget_api_files is None or settings.DEBUG is True:
        code = '''{% load compress %}{% load static from staticfiles %}{% compress js %}
        <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudAPIBootstrap.js" %}"></script>
        <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudWidgetAPI.js" %}"></script>
        <script type="text/javascript" src="{% static "js/WirecloudAPI/WirecloudAPICommon.js" %}"></script>
        {% endcompress %}'''

        result = Template(code).render(Context({}))
        doc = etree.parse(BytesIO(('<files>' + result + '</files>').encode('utf-8')), etree.XMLParser())

        files = [script.get('src') for script in doc.getroot()]
        files.reverse()
        widget_api_files = tuple([get_absolute_static_url(file, request=request, versioned=True) for file in files])
        cache.set(key, widget_api_files)

    return list(widget_api_files)
Exemplo n.º 10
0
    def read(self, request, name):

        try:
            theme_info = get_theme_metadata(name)
        except ValueError:
            raise Http404

        desc = {
            "name": name,
            "label": theme_info.label,
            "baseurl": get_absolute_static_url("theme/%s/" % name, request),
            "templates": {}
        }

        for template_id in get_templates('classic'):
            template_file = template_id + '.html'
            try:
                template = get_template("%s:%s" % (name, template_file))
            except TemplateDoesNotExist:
                template = get_template(template_file)
            desc["templates"][template_id] = template.render({})

        return HttpResponse(json.dumps(desc, cls=LazyEncoder, sort_keys=True),
                            'application/json')
Exemplo n.º 11
0
    def read(self, request, name):

        context = RequestContext(request)
        try:
            theme_info = get_theme_metadata(name)
        except ValueError:
            raise Http404

        desc = {
            "name": name,
            "label": theme_info.label,
            "baseurl": get_absolute_static_url("theme/%s/" % name, request),
            "templates": {}
        }

        for template_id in get_templates('classic'):
            template_file = template_id + '.html'
            try:
                template = get_template("%s:%s" % (name, template_file))
            except TemplateDoesNotExist:
                template = get_template(template_file)
            desc["templates"][template_id] = template.render(context)

        return HttpResponse(json.dumps(desc, cls=LazyEncoder, sort_keys=True), 'application/json')
Exemplo n.º 12
0
def fix_widget_code(widget_code, base_url, content_type, request, use_platform_style, force_base=False):

    if content_type == 'text/html':
        parser = etree.HTMLParser()
        xmltree = etree.parse(StringIO(str(widget_code)), parser)
        serialization_method = 'html'
    elif content_type == 'application/xhtml+xml':
        xmltree = etree.fromstring(widget_code).getroottree()
        serialization_method = 'xml'
    else:
        return widget_code

    prefix = xmltree.getroot().prefix
    xmlns = None
    if prefix in xmltree.getroot().nsmap:
        xmlns = xmltree.getroot().nsmap[prefix]

    # Fix head element
    head_elements = xpath(xmltree, '/xhtml:html/xhtml:head', xmlns)
    if len(head_elements) == 0:
        head_element = etree.Element("head")
        xmltree.getroot().insert(0, head_element)
    else:
        head_element = head_elements[0]

    # Fix base element
    base_elements = xpath(xmltree, '/xhtml:html/xhtml:head/xhtml:base', xmlns)
    for base_element in base_elements[1:]:
        base_element.parent.remove(base_element)

    if len(base_elements) >= 1 and force_base:
        base_elements[0].set('href', base_url)
    elif len(base_elements) == 0:
        head_element.insert(0, etree.Element('base', href=base_url))

    # Fix scripts
    uses_old_api = False
    scripts = xpath(xmltree, '/xhtml:html//xhtml:script', xmlns)
    for script in scripts:

        if 'src' in script.attrib:
            script.text = ''

        if script.get('src', '') == '/ezweb/js/WirecloudAPI/WirecloudAPI.js':

            script.getparent().remove(script)

        elif script.get('src', '') == '/ezweb/js/EzWebAPI/EzWebAPI.js':
            uses_old_api = True
            script.set('src', get_absolute_static_url('js/EzWebAPI/EzWebAPI.js', request=request))

            files = get_old_widget_api_extensions('index')
            files.reverse()
            for file in files:
                script.addnext(etree.Element('script', type="text/javascript", src=get_absolute_static_url(file, request=request)))

    if not uses_old_api:
        head_element.insert(0, etree.Element('script', type="text/javascript", src=get_absolute_static_url('js/WirecloudAPI/WirecloudAPIClosure.js', request=request)))
        files = get_widget_api_extensions('index')
        files.reverse()
        for file in files:
            head_element.insert(0, etree.Element('script', type="text/javascript", src=get_absolute_static_url(file, request=request)))
        head_element.insert(0, etree.Element('script', type="text/javascript", src=get_absolute_static_url('js/WirecloudAPI/WirecloudAPI.js', request=request)))

        if use_platform_style:
            head_element.insert(0, etree.Element('link', rel="stylesheet", type="text/css", href=get_absolute_static_url('js/EzWebAPI_ext/EzWebGadgets.css', request=request)))
            head_element.insert(0, etree.Element('link', rel="stylesheet", type="text/css", href=get_absolute_static_url('css/gadget.css', request=request)))
    else:
        # Redirect all script starting with /ezweb/ to the platform only when using the old api version
        for script in scripts:
            if script.get('src', '').startswith('/ezweb/'):
                script.set('src', get_absolute_static_url(script.get('src')[7:], request=request))


    # return modified code
    return etree.tostring(xmltree, pretty_print=False, method=serialization_method)
Exemplo n.º 13
0
def fix_widget_code(
    widget_code, base_url, content_type, request, encoding, use_platform_style, requirements, force_base, mode
):

    # This line is here for raising UnicodeDecodeError in case the widget_code is not encoded using the expecified encoding
    widget_code.decode(encoding)

    if content_type in ("text/html", "application/xhtml+xml") and widget_code.strip() == b"":
        widget_code = b"<html></html>"

    if content_type == "text/html":
        parser = etree.HTMLParser(encoding=encoding)
        serialization_options = {"method": "html"}

    elif content_type == "application/xhtml+xml":
        parser = etree.XMLParser(encoding=encoding)
        serialization_options = {"method": "xml", "xml_declaration": False}

    else:
        return widget_code

    xmltree = etree.parse(BytesIO(widget_code), parser)

    prefix = xmltree.getroot().prefix
    xmlns = None
    if prefix in xmltree.getroot().nsmap:
        xmlns = xmltree.getroot().nsmap[prefix]

    # Fix head element
    head_elements = xpath(xmltree, "/xhtml:html/xhtml:head", xmlns)
    if len(head_elements) == 0:
        head_element = etree.Element("head")
        xmltree.getroot().insert(0, head_element)
    else:
        head_element = head_elements[0]

    # Fix base element
    base_elements = xpath(xmltree, "/xhtml:html/xhtml:head/xhtml:base", xmlns)
    for base_element in base_elements[1:]:
        base_element.getparent().remove(base_element)

    if len(base_elements) >= 1 and force_base:
        base_elements[0].set("href", base_url)
    elif len(base_elements) == 0:
        head_element.insert(0, etree.Element("base", href=base_url))

    # Fix scripts
    scripts = xpath(xmltree, "/xhtml:html//xhtml:script", xmlns)
    for script in scripts:

        if "src" in script.attrib:
            script.text = ""

    head_element.insert(
        0,
        etree.Element(
            "script",
            type="text/javascript",
            src=get_absolute_static_url("js/WirecloudAPI/WirecloudAPIClosure.js", request=request, versioned=True),
        ),
    )
    files = get_widget_api_extensions(mode, requirements)
    files.reverse()
    for file in files:
        head_element.insert(
            0,
            etree.Element(
                "script", type="text/javascript", src=get_absolute_static_url(file, request=request, versioned=True)
            ),
        )
    head_element.insert(
        0,
        etree.Element(
            "script",
            type="text/javascript",
            src=get_absolute_static_url("js/WirecloudAPI/WirecloudAPICommon.js", request=request, versioned=True),
        ),
    )
    head_element.insert(
        0,
        etree.Element(
            "script",
            type="text/javascript",
            src=get_absolute_static_url("js/WirecloudAPI/WirecloudWidgetAPI.js", request=request, versioned=True),
        ),
    )
    head_element.insert(
        0,
        etree.Element(
            "script",
            type="text/javascript",
            src=get_absolute_static_url("js/WirecloudAPI/WirecloudAPIBootstrap.js", request=request, versioned=True),
        ),
    )

    if use_platform_style:
        for file in get_widget_platform_style():
            head_element.insert(0, etree.Element("link", rel="stylesheet", type="text/css", href=file))

    # return modified code
    return etree.tostring(xmltree, pretty_print=False, encoding=encoding, **serialization_options)