Ejemplo n.º 1
0
    def test_version_manager_get_from_version_id_throws_exception_if_id_absent(
            self, mock_get_all):
        # Arrange
        mock_version_manager_1 = _create_mock_version_manager(title="Schema1")
        mock_version_manager_2 = _create_mock_version_manager(title="Schema2")

        mock_get_all.return_value = [
            mock_version_manager_1, mock_version_manager_2
        ]

        mock_absent = _create_mock_object()

        # Act + Assert
        with self.assertRaises(exceptions.ApiError):
            version_manager_api.get_from_version(mock_absent)
Ejemplo n.º 2
0
    def _save_template_xslt(self, request):
        """Save a template xslt rendering.

        Args:
            request: Request.

        """
        try:
            # Get the list xslt instance
            try:
                list_xslt = xslt_transformation_api.get_by_id(request.POST.get('list_xslt'))
            except (Exception, exceptions.DoesNotExist):
                list_xslt = None
            # Get the detail xslt instance
            try:
                detail_xslt = xslt_transformation_api.get_by_id(request.POST.get('detail_xslt'))
            except (Exception, exceptions.DoesNotExist):
                detail_xslt = None

            template_xsl_rendering_api.add_or_delete(template_xsl_rendering_id=request.POST.get('id'),
                                                     template_id=request.POST.get('template'),
                                                     list_xslt=list_xslt, detail_xslt=detail_xslt)

            template = template_api.get(request.POST.get('template'))
            # Get template information (version)
            version_manager = version_manager_api.get_from_version(template)
            return HttpResponseRedirect(reverse(self.save_redirect, args=[version_manager.id]))
        except Exception, e:
            self.context.update({'errors': html_escape(e.message)})
            return self.rendering(request, self.template_name, context=self.context)
Ejemplo n.º 3
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)
Ejemplo n.º 4
0
def add_template_metadata_format(metadata_prefix, template_id, request):
    """Add a new template metadata format.
    Args:
        metadata_prefix: Metadata Prefix.
        template_id: Id of the template.
        request:

    Returns: Response.

    """
    try:
        template = template_api.get(template_id, request=request)
        version_manager = version_manager_api.get_from_version(template,
                                                               request=request)
        xml_schema = template.content
        target_namespace = _get_target_namespace(xml_schema)
        version_number = version_manager_api.get_version_number(
            version_manager, template_id, request=request)
        schema_url = _get_simple_template_metadata_format_schema_url(
            version_manager.title, version_number)
        obj = OaiProviderMetadataFormat(
            metadata_prefix=metadata_prefix,
            schema=schema_url,
            xml_schema=xml_schema,
            is_default=False,
            is_template=True,
            metadata_namespace=target_namespace,
            template=template,
        )
        upsert(obj, request=request)
        content = OaiPmhMessage.get_message_labelled(
            "Metadata format added with success.")

        return Response(content, status=status.HTTP_201_CREATED)
    except oai_pmh_exceptions.OAIAPILabelledException as e:
        raise e
    except DoesNotExist:
        raise oai_pmh_exceptions.OAIAPILabelledException(
            message="Unable to add the new metadata format. "
            "Impossible to retrieve the template with the "
            "given template",
            status_code=status.HTTP_404_NOT_FOUND,
        )
    except exceptions.XMLError as e:
        raise oai_pmh_exceptions.OAIAPILabelledException(
            message="Unable to add the new metadata format.%s" % str(e),
            status_code=status.HTTP_400_BAD_REQUEST,
        )
    except Exception as e:
        raise oai_pmh_exceptions.OAIAPILabelledException(
            message="Unable to add the new metadata format.%s" % str(e),
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
        )
Ejemplo n.º 5
0
    def _get(self, request, query_id):
        """ Prepare the GET context

        Args:
            user:
            query_id:

        Returns:

        """
        error = None
        display_persistent_query_button = True
        if query_id is None:
            # create query
            query = create_default_query(request, [])
            # upsert the query
            query_api.upsert(query)
            # create keyword form
            # create all data for select values in forms
            keywords_data_form = {
                'query_id': str(query.id),
                'user_id': query.user_id,
            }
        else:
            try:
                # get the query id
                query = query_api.get_by_id(query_id)
                user_id = query.user_id
                # get all keywords back
                query_json = json.loads(query.content)
                keywords = None
                if '$text' in query_json:
                    keywords = query_json['$text']['$search'].replace(
                        " ", ",").replace('"', '')
                # get all version managers
                version_managers = []
                for template in query.templates:
                    version_managers.append(
                        str(version_manager_api.get_from_version(template).id))
                # create all data for select values in forms
                keywords_data_form = {
                    'query_id': str(query.id),
                    'user_id': user_id,
                    'keywords': keywords,
                    'global_templates': version_managers,
                    'user_templates': version_managers
                }
            except Exception, e:
                error = "An unexpected error occurred while loading the query: {}.".format(
                    e.message)
                return {'error': error}
Ejemplo n.º 6
0
    def _save_template_xslt(self, request):
        """Save a template xslt rendering.

        Args:
            request: Request.

        """
        try:
            # Get the list xslt instance
            try:
                list_xslt = xslt_transformation_api.get_by_id(
                    request.POST.get("list_xslt"))
            except (Exception, exceptions.DoesNotExist):
                list_xslt = None

            # Get the list detail xslt instance
            try:
                list_detail_xslt = xslt_transformation_api.get_by_id_list(
                    request.POST.getlist("list_detail_xslt"))
            except (Exception, exceptions.DoesNotExist):
                list_detail_xslt = None

            # Get the default detail xslt instance
            try:
                default_detail_xslt = xslt_transformation_api.get_by_id(
                    request.POST.get("default_detail_xslt"))
            except (Exception, exceptions.DoesNotExist):
                default_detail_xslt = None

            template_xsl_rendering_api.add_or_delete(
                template_xsl_rendering_id=request.POST.get("id"),
                template_id=request.POST.get("template"),
                list_xslt=list_xslt,
                default_detail_xslt=default_detail_xslt,
                list_detail_xslt=list_detail_xslt,
            )

            template = template_api.get(request.POST.get("template"),
                                        request=request)
            # Get template information (version)
            version_manager = version_manager_api.get_from_version(
                template, request=request)
            return HttpResponseRedirect(
                reverse(self.save_redirect, args=[version_manager.id]))
        except Exception as e:
            self.context.update({"errors": html_escape(str(e))})
            return self.rendering(request,
                                  self.template_name,
                                  context=self.context)
Ejemplo n.º 7
0
    def test_post_owner_is_global(self):
        # Arrange
        user = create_mock_user('1', is_staff=True)

        # Act
        response = RequestMock.do_request_post(
            views.GlobalTemplateList.as_view(), user, data=self.data)

        # get template version manager from posted template
        template_id = response.data['id']
        template_object = template_api.get(template_id)
        template_version_manager = vm_api.get_from_version(template_object)

        # Assert
        self.assertEqual(template_version_manager.user, None)
Ejemplo n.º 8
0
    def get_object(self, pk):
        """ Get template from db

        Args:
            pk:

        Returns:

        """
        try:
            template_object = template_api.get(pk)
            template_version_manager_object = version_manager_api.get_from_version(template_object)
            can_user_modify_template_version_manager(template_version_manager_object, self.request.user)
            return template_object
        except exceptions.DoesNotExist:
            raise Http404
Ejemplo n.º 9
0
    def test_post_owner_is_user(self):
        # Arrange
        user = create_mock_user('1')

        # Act
        response = RequestMock.do_request_post(views.UserTypeList.as_view(),
                                               user,
                                               data=self.data)

        # get type version manager from posted type
        type_id = response.data['id']
        type_object = type_api.get(type_id)
        type_version_manager = vm_api.get_from_version(type_object)

        # Assert
        self.assertEqual(type_version_manager.user, user.id)
Ejemplo n.º 10
0
    def test_post_owner_is_user(self):
        # Arrange
        user = create_mock_user("1")
        mock_request = create_mock_request(user=user)

        # Act
        response = RequestMock.do_request_post(
            views.UserTemplateList.as_view(), user, data=self.data)

        # get template version manager from posted template
        template_id = response.data["id"]
        template_object = template_api.get(template_id, request=mock_request)
        template_version_manager = vm_api.get_from_version(
            template_object, request=mock_request)

        # Assert
        self.assertEqual(template_version_manager.user, user.id)
Ejemplo n.º 11
0
    def test_version_manager_get_from_version_id_returns_version_manager(
            self, mock_get_all):
        # Arrange
        mock_version_manager_1 = _create_mock_version_manager(title="Schema1")
        version = _create_mock_object()
        mock_version_manager_1.versions.append(str(version.id))

        mock_version_manager_2 = _create_mock_version_manager(title="Schema2")

        mock_get_all.return_value = [
            mock_version_manager_1, mock_version_manager_2
        ]

        # Act
        result = version_manager_api.get_from_version(version)

        # Assert
        self.assertIsInstance(result, VersionManager)
Ejemplo n.º 12
0
    def test_post_owner_is_global(self):
        # Arrange
        user = create_mock_user("1", is_staff=True)
        mock_request = create_mock_request(user=user)

        # Act
        response = RequestMock.do_request_post(views.GlobalTypeList.as_view(),
                                               user,
                                               data=self.data)

        # get type version manager from posted type
        type_id = response.data["id"]
        type_object = type_api.get(type_id, request=mock_request)
        type_version_manager = vm_api.get_from_version(type_object,
                                                       request=mock_request)

        # Assert
        self.assertEqual(type_version_manager.user, None)
Ejemplo n.º 13
0
def get_context(template_id, url_previous_button, read_only, title, request):
    """Get the context to manage the template modules

    Args: template_id:
    Returns:
    """

    # get the template
    template = template_api.get(template_id, request=request)

    # get template content as HTML
    xsd_tree_html = transform_xsd_to_html_with_modules(template.content)

    # get list of modules
    modules = module_api.get_all()

    # get version manager
    version_manager = version_manager_api.get_from_version(template, request=request)

    # reverse url
    try:
        url_back_to = reverse(
            url_previous_button, kwargs={"version_manager_id": version_manager.id}
        )
    except NoReverseMatch:
        url_back_to = reverse(url_previous_button)

    context = {
        "xsdTree": xsd_tree_html,
        "modules": modules,
        "object": template,
        "version_manager": version_manager,
        "url_back_to": url_back_to,
        "read_only": read_only,
        "title": title,
    }
    return context
Ejemplo n.º 14
0
def get_context(template_id, url_previous_button, read_only, title):
    """ Get the context to manage the template modules

    Args: template_id:
    Returns:
    """

    # get the template
    template = template_api.get(template_id)

    # get template content as HTML
    xsd_tree_html = transform_xsd_to_html_with_modules(template.content)

    # get list of modules
    modules = module_api.get_all()

    # get version manager
    version_manager = version_manager_api.get_from_version(template)

    # reverse url
    try:
        url_back_to = reverse(
            url_previous_button,
            kwargs={'version_manager_id': version_manager.id})
    except NoReverseMatch:
        url_back_to = reverse(url_previous_button)

    context = {
        'xsdTree': xsd_tree_html,
        'modules': modules,
        'object': template,
        'version_manager': version_manager,
        'url_back_to': url_back_to,
        'read_only': read_only,
        'title': title
    }
    return context
Ejemplo n.º 15
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)