Esempio n. 1
0
def _bind_template_xslt(template_id, list_xslt, default_detail_xslt,
                        list_detail_xslt):
    """Bind the registry template with the XSLTs.

    Args:
        template_id: Registry template id.
        list_xslt: List XSLT.
        default_detail_xslt: Detail XSLT.
        list_detail_xslt:

    Returns:

    """
    from core_main_app.components.template_xsl_rendering import (
        api as template_xsl_rendering_api, )

    try:
        template_xsl_rendering_api.get_by_template_id(template_id)
    except exceptions.DoesNotExist:
        template_xsl_rendering_api.add_or_delete(
            template_id=template_id,
            list_xslt=list_xslt,
            default_detail_xslt=default_detail_xslt,
            list_detail_xslt=list_detail_xslt,
        )
    except Exception as e:
        raise Exception("Impossible to bind the template with XSLTs : " +
                        str(e))
Esempio n. 2
0
    def test_get_by_template_id_raises_exception_if_internal_error(self, mock_get_by_template_id):
        # Arrange
        mock_absent_id = ObjectId()

        mock_get_by_template_id.side_effect = exceptions.ModelError("Error.")

        # Act + Assert
        with self.assertRaises(exceptions.ModelError):
            template_xsl_rendering_api.get_by_template_id(mock_absent_id)
Esempio n. 3
0
    def test_get_by_template_id_raises_exception_if_object_does_not_exist(self, mock_get_by_template_id):
        # Arrange
        mock_absent_id = ObjectId()

        mock_get_by_template_id.side_effect = exceptions.DoesNotExist("Error.")

        # Act + Assert
        with self.assertRaises(exceptions.DoesNotExist):
            template_xsl_rendering_api.get_by_template_id(mock_absent_id)
Esempio n. 4
0
    def get(self, request, *args, **kwargs):
        """ GET request. Create/Show the form for the configuration.

        Args:
            request:
            *args:
            **kwargs:

        Returns:

        """
        template_id = kwargs.pop('template_id')
        # Get the template
        template = template_api.get(template_id)
        # Get template information (version)
        version_manager = version_manager_api.get_from_version(template)
        version_number = version_manager_api.get_version_number(
            version_manager, template_id)
        try:
            # Get the existing configuration to build the form
            template_xsl_rendering = template_xsl_rendering_api.get_by_template_id(
                template_id)
            data = {
                'id':
                template_xsl_rendering.id,
                'template':
                template.id,
                'list_xslt':
                template_xsl_rendering.list_xslt.id
                if template_xsl_rendering.list_xslt else None,
                'detail_xslt':
                template_xsl_rendering.detail_xslt.id
                if template_xsl_rendering.detail_xslt else None
            }
        except (Exception, exceptions.DoesNotExist):
            # If no configuration, new form with pre-selected fields.
            data = {
                'template': template.id,
                'list_xslt': None,
                'detail_xslt': None
            }

        self.context = {
            'template_title':
            version_manager.title,
            'template_version':
            version_number,
            "form_template_xsl_rendering":
            self.form_class(data),
            'url_back_to':
            reverse(self.back_to_url,
                    kwargs={'version_manager_id': version_manager.id})
        }

        return self.rendering(request,
                              self.template_name,
                              context=self.context,
                              assets=self.assets)
Esempio n. 5
0
def _bind_template_xslt(template_id, list_xslt, detail_xslt):
    """ Bind the registry template with the XSLTs.

    Args:
        template_id: Registry template id.
        list_xslt: List XSLT.
        detail_xslt: Detail XSLT.

    Returns:

    """
    try:
        template_xsl_rendering_api.get_by_template_id(template_id)
    except exceptions.DoesNotExist:
        template_xsl_rendering_api.add_or_delete(template_id=template_id,
                                                 list_xslt=list_xslt,
                                                 detail_xslt=detail_xslt)
    except Exception, e:
        raise Exception('Impossible to bind the template with XSLTs : ' +
                        e.message)
Esempio n. 6
0
    def test_get_by_template_id_returns_object(self, mock_get_by_template_id):
        # Arrange
        mock_template_xsl_rendering = _create_mock_template_xsl_rendering()
        template_id = ObjectId()

        mock_get_by_template_id.return_value = mock_template_xsl_rendering

        # Act
        result = template_xsl_rendering_api.get_by_template_id(template_id)

        # Assert
        self.assertIsInstance(result, TemplateXslRendering)
Esempio n. 7
0
def _render_xml_as_html(
    xml_string,
    template_id=None,
    template_hash=None,
    xslt_type=XSLType.type_list,
    xsl_transform_id=None,
):
    """Render an XML to HTML according to an xslt type (list or detail).
    Args:
        xml_string:
        template_id:
        template_hash:

        xslt_type:

    Returns:
        HTML

    """
    try:
        try:
            if xslt_type not in (XSLType.type_list, XSLType.type_detail):
                raise Exception("XSLT Type unknown. Default xslt will be used.")
            if xsl_transform_id:
                xsl_transformation = xsl_transformation_api.get_by_id(xsl_transform_id)
            elif template_id or template_hash:
                if template_id:
                    template_xsl_rendering = (
                        template_xsl_rendering_api.get_by_template_id(template_id)
                    )
                else:
                    template_xsl_rendering = (
                        template_xsl_rendering_api.get_by_template_hash(template_hash)
                    )

                if xslt_type == XSLType.type_list:
                    xsl_transformation = template_xsl_rendering.list_xslt
                else:
                    xsl_transformation = template_xsl_rendering.default_detail_xslt
            else:
                raise Exception(
                    "No template information provided. Default xslt will be used."
                )

            xslt_string = xsl_transformation.content

        except (Exception, exceptions.DoesNotExist):
            default_xslt_path = finders.find(DEFAULT_DATA_RENDERING_XSLT)
            xslt_string = read_file_content(default_xslt_path)

        return xsl_transform(xml_string, xslt_string)
    except Exception:
        return xml_string
Esempio n. 8
0
    def get(self, request, *args, **kwargs):
        """GET request. Create/Show the form for the configuration.

        Args:
            request:
            *args:
            **kwargs:

        Returns:

        """
        template_id = kwargs.pop("template_id")
        # Get the template
        template = template_api.get(template_id, request=request)
        # Get template information (version)
        version_manager = version_manager_api.get_from_version(template,
                                                               request=request)
        version_number = version_manager_api.get_version_number(
            version_manager, template_id, request=request)
        try:
            # Get the existing configuration to build the form
            template_xsl_rendering = template_xsl_rendering_api.get_by_template_id(
                template_id)
            data = {
                "id":
                template_xsl_rendering.id,
                "template":
                str(template.id),
                "list_xslt":
                template_xsl_rendering.list_xslt.id
                if template_xsl_rendering.list_xslt else None,
                "default_detail_xslt":
                template_xsl_rendering.default_detail_xslt.id
                if template_xsl_rendering.default_detail_xslt else None,
                "list_detail_xslt":
                [xslt.id for xslt in template_xsl_rendering.list_detail_xslt]
                if template_xsl_rendering.list_detail_xslt else None,
            }
        except (Exception, exceptions.DoesNotExist):
            # If no configuration, new form with pre-selected fields.
            data = {
                "template": str(template.id),
                "list_xslt": None,
                "default_detail_xslt": None,
                "list_detail_xslt": None,
            }

        self.assets = {
            "css": ["core_main_app/admin/css/templates_xslt/form.css"],
            "js": [{
                "path": "core_main_app/admin/js/templates_xslt/detail_xslt.js",
                "is_raw": False,
            }],
        }

        self.context = {
            "template_title":
            version_manager.title,
            "template_version":
            version_number,
            "form_template_xsl_rendering":
            self.form_class(data),
            "url_back_to":
            reverse(self.back_to_url,
                    kwargs={"version_manager_id": version_manager.id}),
        }

        return self.rendering(request,
                              self.template_name,
                              context=self.context,
                              assets=self.assets)
Esempio n. 9
0
def build_page(data_object, display_admin_version=False):
    """Generic page building data

    Args:
        data_object:
        display_admin_version:

    Returns:
    """
    page_info = {
        "error": None,
        "context": dict(),
        "assets": dict(),
        "modals": list(),
    }

    try:
        display_xslt_selector = True
        try:
            template_xsl_rendering = template_xsl_rendering_api.get_by_template_id(
                data_object.template.id
            )
            xsl_transformation_id = (
                template_xsl_rendering.default_detail_xslt.id
                if template_xsl_rendering.default_detail_xslt
                else None
            )
            if not template_xsl_rendering.list_detail_xslt or (
                template_xsl_rendering.default_detail_xslt is not None
                and len(template_xsl_rendering.list_detail_xslt) == 1
            ):
                display_xslt_selector = False

            if xsl_transformation_id is not None:
                xsl_transformation_id = ObjectId(xsl_transformation_id)
        except Exception as exception:
            logger.warning(
                "An exception occured when retrieving XSLT: %s" % str(exception)
            )
            display_xslt_selector = False
            template_xsl_rendering = None
            xsl_transformation_id = None

        page_info["context"] = {
            "data": data_object,
            "share_pid_button": False,
            "template_xsl_rendering": template_xsl_rendering,
            "xsl_transformation_id": xsl_transformation_id,
            "can_display_selector": display_xslt_selector,
        }

        page_info["assets"] = {
            "js": [
                {"path": "core_main_app/common/js/XMLTree.js", "is_raw": False},
                {"path": "core_main_app/user/js/data/detail.js", "is_raw": False},
                {
                    "path": "core_main_app/user/js/data/change_display.js",
                    "is_raw": False,
                },
            ],
            "css": ["core_main_app/common/css/XMLTree.css"],
        }

        if "core_file_preview_app" in settings.INSTALLED_APPS:
            page_info["assets"]["js"].extend(
                [
                    {
                        "path": "core_file_preview_app/user/js/file_preview.js",
                        "is_raw": False,
                    }
                ]
            )
            page_info["assets"]["css"].append(
                "core_file_preview_app/user/css/file_preview.css"
            )
            page_info["modals"].append(
                "core_file_preview_app/user/file_preview_modal.html"
            )

        if (
            "core_linked_records_app" in settings.INSTALLED_APPS
            and not display_admin_version
        ):
            from core_linked_records_app.components.pid_settings import (
                api as pid_settings_api,
            )

            if pid_settings_api.get().auto_set_pid:
                page_info["context"]["share_pid_button"] = True
                page_info["assets"]["js"].extend(
                    [
                        {
                            "path": "core_main_app/user/js/sharing_modal.js",
                            "is_raw": False,
                        },
                        {
                            "path": "core_linked_records_app/user/js/sharing/data_detail.js",
                            "is_raw": False,
                        },
                    ]
                )
                page_info["modals"].append(
                    "core_linked_records_app/user/sharing/data_detail/modal.html"
                )
    except exceptions.DoesNotExist:
        page_info["error"] = "Data not found"
    except exceptions.ModelError:
        page_info["error"] = "Model error"
    except Exception as e:
        page_info["error"] = str(e)
    finally:
        return page_info