Пример #1
0
    def render_module(self, element):
        module_options = element.options
        module_url = module_options['url']

        module_view = get_module_view(module_url)

        module_request = self.request
        module_request.method = 'GET'

        module_request.GET = {
            'module_id': element.pk,
            'url': module_url,
            'xsd_xpath': module_options['xpath']['xsd'],
            'xml_xpath': module_options['xpath']['xml']
        }

        # if the loaded doc has data, send them to the module for initialization
        if module_options['data'] is not None:
            module_request.GET['data'] = module_options['data']

        if module_options['attributes'] is not None:
            module_request.GET['attributes'] = module_options['attributes']

        # renders the module
        return module_view(module_request).content.decode("utf-8")
Пример #2
0
    def render_module(self, element):
        module_options = element.options
        module_url = module_options['url']

        module_view = get_module_view(module_url)

        module_request = self.request
        module_request.method = 'GET'

        module_request.GET = {
            'module_id': element.pk,
            'url': module_url,
            'xsd_xpath': module_options['xpath']['xsd'],
            'xml_xpath': module_options['xpath']['xsd']
        }

        # if the loaded doc has data, send them to the module for initialization
        if module_options['data'] is not None:
            module_request.GET['data'] = module_options['data']

        if module_options['attributes'] is not None:
            module_request.GET['attributes'] = module_options['attributes']

        # renders the module
        return module_view(module_request).content.decode("utf-8")
Пример #3
0
    def render_module(self, element):
        module_options = element.options
        module_url = module_options["url"]

        module_view = get_module_view(module_url)

        module_request = self.request
        module_request.method = "GET"

        module_request.GET = {
            "module_id": element.pk,
            "url": module_url,
            "xsd_xpath": module_options["xpath"]["xsd"],
            "xml_xpath": module_options["xpath"]["xsd"],
        }

        # if the loaded doc has data, send them to the module for initialization
        if module_options["data"] is not None:
            module_request.GET["data"] = module_options["data"]

        if module_options["attributes"] is not None:
            module_request.GET["attributes"] = module_options["attributes"]

        # renders the module
        return module_view(module_request).content.decode("utf-8")
Пример #4
0
def is_module_managing_occurencies(module):
    request = HttpRequest()
    request.method = 'GET'

    request.GET = {
        'url': module.url,
        'module_id': module.id,
        'managing_occurences': True
    }

    module_view = get_module_view(module.url)

    response = module_view(request).content.decode("utf-8")

    if response == 'false':
        return False
    elif response == 'true':
        return True
    else:
        raise ValueError("Unexpected value (expected 'true'|'false', got {})".format(response))
Пример #5
0
def load_resources_view(request):
    """ Load resources for a given list of modules

    :param request:
    :return:
    """
    if not request.method == 'GET':
        return HttpResponse({}, status=status.HTTP_400_BAD_REQUEST)

    if 'urlsToLoad' not in request.GET or 'urlsLoaded' not in request.GET:
        return HttpResponse({}, status=status.HTTP_403_FORBIDDEN)

    # URLs of the modules to load
    mod_urls_qs = sanitize(request.GET['urlsToLoad'])
    mod_urls = json.loads(mod_urls_qs)

    # URLs of the loaded modules
    mod_urls_loaded_qs = sanitize(request.GET['urlsLoaded'])
    mod_urls_loaded = json.loads(mod_urls_loaded_qs)

    # Request hack to get module resources
    request.GET = {'resources': True}

    # List of resources
    resources = {'scripts': [], 'styles': []}

    # Add all resources from requested modules
    for url in mod_urls:
        module_view = get_module_view(url)
        mod_resources = module_view(request).content

        mod_resources = sanitize(mod_resources)
        mod_resources = json.loads(mod_resources)

        # Append resource to the list
        for key in resources.keys():
            if mod_resources[key] is None:
                continue

            for resource in mod_resources[key]:
                if resource not in resources[key]:
                    resources[key].append(resource)

    # Remove possible dependencies form already loaded modules
    for url in mod_urls_loaded:
        module_view = get_module_view(url)
        mod_resources = module_view(request).content

        mod_resources = sanitize(mod_resources)
        mod_resources = json.loads(mod_resources)

        # Remove resources already loaded
        for key in resources.keys():
            if mod_resources[key] is None:
                continue

            for resource in mod_resources[key]:
                if resource in resources[key]:
                    i = resources[key].index(resource)
                    del resources[key][i]

    # Build response content
    response = {'scripts': "", 'styles': ""}

    # Aggregate scripts
    for script in resources['scripts']:
        if script.startswith('http://') or script.startswith('https://'):
            script_tag = '<script class="module" src="' + script + '"></script>'
        else:
            with open(script, 'r') as script_file:
                script_tag = '<script class="module">' + script_file.read(
                ) + '</script>'

        response['scripts'] += script_tag

    # Aggregate styles
    for style in resources['styles']:
        if style.startswith('http://') or style.startswith('https://'):
            script_tag = '<link class="module" rel="stylesheet" type="text/css" href="' + style + '"></link>'
        else:
            with open(style, 'r') as script_file:
                script_tag = '<style class="module">' + script_file.read(
                ) + '</style>'

        response['styles'] += script_tag

    # Send response
    return HttpResponse(json.dumps(response), status=status.HTTP_200_OK)
Пример #6
0
def load_resources_view(request):
    """ Load resources for a given list of modules

    :param request:
    :return:
    """
    if not request.method == 'GET':
        return HttpResponse({}, status=status.HTTP_400_BAD_REQUEST)

    if 'urlsToLoad' not in request.GET or 'urlsLoaded' not in request.GET:
        return HttpResponse({}, status=status.HTTP_403_FORBIDDEN)

    # URLs of the modules to load
    mod_urls_qs = sanitize(request.GET['urlsToLoad'])
    mod_urls = json.loads(mod_urls_qs)

    # URLs of the loaded modules
    mod_urls_loaded_qs = sanitize(request.GET['urlsLoaded'])
    mod_urls_loaded = json.loads(mod_urls_loaded_qs)

    # Request hack to get module resources
    request.GET = {
        'resources': True
    }

    # List of resources
    resources = {
        'scripts': [],
        'styles': []
    }

    # loaded_resources = {
    #     'scripts': [],
    #     'styles': []
    # }

    # Add all resources from requested modules
    for url in mod_urls:
        module_view = get_module_view(url)
        mod_resources = module_view(request).content

        mod_resources = sanitize(mod_resources)
        mod_resources = json.loads(mod_resources)

        # Append resource to the list
        for key in resources.keys():
            if mod_resources[key] is None:
                continue

            for resource in mod_resources[key]:
                if resource not in resources[key]:
                    resources[key].append(resource)

    # Remove possible dependencies form already loaded modules
    for url in mod_urls_loaded:
        module_view = get_module_view(url)
        mod_resources = module_view(request).content

        mod_resources = sanitize(mod_resources)
        mod_resources = json.loads(mod_resources)

        # Remove resources already loaded
        for key in resources.keys():
            if mod_resources[key] is None:
                continue

            for resource in mod_resources[key]:
                if resource in resources[key]:
                    i = resources[key].index(resource)
                    del resources[key][i]


    # Build response content
    response = {
        'scripts': "",
        'styles': ""
    }

    # Aggregate scripts
    for script in resources['scripts']:
        if script.startswith('http://') or script.startswith('https://'):
            script_tag = '<script src="' + script + '"></script>'
        else:
            with open(script, 'r') as script_file:
                script_tag = '<script>' + script_file.read() + '</script>'

        response['scripts'] += script_tag

    # Aggregate styles
    for style in resources['styles']:
        if style.startswith('http://') or style.startswith('https://'):
            script_tag = '<link rel="stylesheet" type="text/css" href="' + style + '"></link>'
        else:
            with open(style, 'r') as script_file:
                script_tag = '<style>' + script_file.read() + '</style>'

        response['styles'] += script_tag

    # Send response
    return HttpResponse(json.dumps(response), status=status.HTTP_200_OK)