Beispiel #1
0
    def test_version_manager_get_raises_exception_if_object_does_not_exist(
            self, mock_get_by_id):
        # Arrange
        mock_absent_id = ObjectId()
        mock_get_by_id.side_effect = mongoengine_errors.DoesNotExist

        # Act + Assert
        with self.assertRaises(mongoengine_errors.DoesNotExist):
            version_manager_api.get(mock_absent_id)
Beispiel #2
0
def resolve_dependencies(request):
    """Resolve import/includes to avoid local references.

    Args:
        request:

    Returns:

    """
    try:
        # Get the parameters
        name = request.POST.get('name', None)
        version_manager_id = request.POST.get('version_manager_id', '')
        filename = request.POST['filename']
        xsd_content = request.POST['xsd_content']
        schema_locations = request.POST.getlist('schemaLocations[]')
        dependencies = request.POST.getlist('dependencies[]')

        # create new object
        template = Template(filename=filename,
                            content=_get_xsd_content_from_html(xsd_content))
        init_template_with_dependencies(
            template, _get_dependencies_dict(schema_locations, dependencies))

        # get the version manager or create a new one
        if version_manager_id != '':
            template_version_manager = version_manager_api.get(
                version_manager_id)
        else:
            template_version_manager = TemplateVersionManager(title=name)
        template_version_manager_api.insert(template_version_manager, template)
    except Exception, e:
        return HttpResponseBadRequest(e.message)
Beispiel #3
0
def upload_template_version(request, version_manager_id):
    """Upload template version.

    Args:
        request:
        version_manager_id:

    Returns:

    """
    assets = {
        "js": [
            {
                "path":
                "core_main_app/admin/js/templates/upload/dependency_resolver.js",
                "is_raw": True,
            },
            {
                "path":
                "core_main_app/admin/js/templates/upload/dependencies.js",
                "is_raw": False,
            },
        ]
    }

    template_version_manager = version_manager_api.get(version_manager_id,
                                                       request=request)
    context = {
        "object_name":
        "Template",
        "version_manager":
        template_version_manager,
        "url":
        reverse(
            "admin:core_main_app_upload_template_version",
            kwargs={"version_manager_id": template_version_manager.id},
        ),
        "redirect_url":
        reverse(
            "admin:core_main_app_manage_template_versions",
            kwargs={"version_manager_id": template_version_manager.id},
        ),
    }

    # method is POST
    if request.method == "POST":
        form = UploadVersionForm(request.POST, request.FILES)
        context["upload_form"] = form

        if form.is_valid():
            return _save_template_version(request, assets, context,
                                          template_version_manager)
        else:
            # Display errors from the form
            return _upload_template_response(request, assets, context)
    # method is GET
    else:
        # render the form to upload a template
        context["upload_form"] = UploadVersionForm()
        return _upload_template_response(request, assets, context)
Beispiel #4
0
def manage_template_versions(request, version_manager_id):
    """View that allows template versions management

    Args:
        request:
        version_manager_id:

    Returns:

    """
    try:
        # get the version manager
        version_manager = version_manager_api.get(version_manager_id,
                                                  request=request)

        if not request.user.is_staff and version_manager.user != str(
                request.user.id):
            raise Exception(
                "You do not have the rights to perform this action.")

        context = get_context_manage_template_versions(version_manager)
        if "core_parser_app" in settings.INSTALLED_APPS:
            context.update({"module_url": "core_parser_app_template_modules"})

        assets = {
            "js": [
                {
                    "path":
                    "core_main_app/common/js/templates/versions/set_current.js",
                    "is_raw": False,
                },
                {
                    "path":
                    "core_main_app/common/js/templates/versions/restore.js",
                    "is_raw": False,
                },
                {
                    "path":
                    "core_main_app/common/js/templates/versions/modals/disable.js",
                    "is_raw": False,
                },
            ]
        }

        modals = ["core_main_app/admin/templates/versions/modals/disable.html"]

        return render(
            request,
            "core_main_app/common/templates/versions.html",
            assets=assets,
            modals=modals,
            context=context,
        )
    except Exception as e:
        return render(
            request,
            "core_main_app/common/commons/error.html",
            context={"error": str(e)},
        )
Beispiel #5
0
def upload_type_version(request, version_manager_id):
    """Upload type version.

    Args:
        request:
        version_manager_id:

    Returns:

    """
    assets = {
        "js": [{
            "path": 'core_main_app/admin/js/templates/upload/dependencies.js',
            "is_raw": False
        }, {
            "path": 'core_composer_app/admin/js/types/upload/dependencies.js',
            "is_raw": False
        }, {
            "path":
            'core_composer_app/admin/js/types/upload/dependency_resolver.js',
            "is_raw": False
        }, {
            "path":
            'core_composer_app/admin/js/types/upload/dependencies.raw.js',
            "is_raw": True
        }]
    }

    type_version_manager = version_manager_api.get(version_manager_id)
    context = {
        'object_name':
        "Type",
        'version_manager':
        type_version_manager,
        'url':
        reverse("admin:core_composer_app_upload_type_version",
                kwargs={'version_manager_id': type_version_manager.id}),
        'redirect_url':
        reverse("admin:core_composer_app_manage_type_versions",
                kwargs={'version_manager_id': type_version_manager.id})
    }

    # method is POST
    if request.method == 'POST':
        form = UploadVersionForm(request.POST, request.FILES)
        context['upload_form'] = form

        if form.is_valid():
            return _save_type_version(request, assets, context,
                                      type_version_manager)
        else:
            # Display errors from the form
            return _upload_type_response(request, assets, context)
    # method is GET
    else:
        # render the form to upload a template
        context['upload_form'] = UploadVersionForm()
        return _upload_type_response(request, assets, context)
Beispiel #6
0
def manage_type_buckets(request, version_manager_id):
    """Manage buckets of a type.

    Args:
        request:
        version_manager_id:

    Returns:

    """
    # get the version manager
    version_manager = None

    try:
        version_manager = version_manager_api.get(version_manager_id,
                                                  request=request)
    except ModelError as e:
        logger.error("manage_type_buckets threw a ModelError: {0}".format(
            str(e)))
        return admin_render(
            request,
            "core_main_app/common/commons/error.html",
            context={"error": str(e)},
        )
    except DoesNotExist as e:
        # TODO: catch exception, redirect to error page
        logger.warning(
            "manage_type_buckets threw a DoesNotExist exception: {0}".format(
                str(e)))

    context = {
        "version_manager": version_manager,
        "buckets": bucket_api.get_all()
    }

    assets = {
        "css": ["core_composer_app/common/css/bucket.css"],
        "js": [{
            "path": "core_main_app/common/js/backtoprevious.js",
            "is_raw": True
        }],
    }
    if request.method == "POST":
        form = EditTypeBucketsForm(request.POST)
        if form.is_valid():
            buckets = request.POST.getlist("buckets")
            bucket_api.update_type_buckets(version_manager, buckets)
            return redirect(reverse("admin:core_composer_app_types"))
    else:
        form = EditTypeBucketsForm()

    context["form"] = form
    return admin_render(
        request,
        "core_composer_app/admin/buckets/edit.html",
        assets=assets,
        context=context,
    )
Beispiel #7
0
def manage_type_versions(request, version_manager_id):
    """View that allows type versions management.

    Args:
        request:
        version_manager_id:

    Returns:

    """
    try:
        # get the version manager
        version_manager = version_manager_api.get(version_manager_id)
        context = get_context_manage_template_versions(version_manager)

        # updating context regarding the installed apps
        # default back_url initialization
        context.update({"back_url": "admin:core_composer_app_types"})
        if 'core_parser_app' in settings.INSTALLED_APPS:
            context.update(
                {"module_url": "admin:core_composer_app_type_modules"})
        if 'core_dashboard_app' in settings.INSTALLED_APPS:
            # the dashboard exposes the user's version managers
            # in this view, we come from the dashboard
            if version_manager.user:
                context.update({"back_url": "admin:core_dashboard_types"})

        assets = {
            "js": [{
                "path":
                'core_main_app/common/js/templates/versions/set_current.js',
                "is_raw": False
            }, {
                "path":
                'core_main_app/common/js/templates/versions/restore.js',
                "is_raw": False
            }, {
                "path":
                'core_main_app/common/js/templates/versions/modals/disable.js',
                "is_raw": False
            }]
        }

        modals = ["core_main_app/admin/templates/versions/modals/disable.html"]

        return admin_render(request,
                            'core_composer_app/admin/types/versions.html',
                            assets=assets,
                            modals=modals,
                            context=context)
    except Exception, e:
        return admin_render(request,
                            'core_main_app/common/commons/error.html',
                            context={'error': e.message})
Beispiel #8
0
    def test_version_manager_get_returns_version_manager(self, mock_get_by_id):
        # Arrange
        mock_version_manager = _create_mock_version_manager(title="Schema")

        mock_get_by_id.return_value = mock_version_manager

        # Act
        result = version_manager_api.get(mock_version_manager.id)

        # Assert
        self.assertIsInstance(result, VersionManager)
Beispiel #9
0
 def update(self, instance, validated_data):
     instance.set_spec = validated_data.get('set_spec', instance.set_spec)
     instance.set_name = validated_data.get('set_name', instance.set_name)
     templates_manager = validated_data.get('templates_manager', [])
     if len(templates_manager) > 0:
         templates_manager = [
             version_manager_api.get(id_) for id_ in templates_manager
         ]
         instance.templates_manager = templates_manager
     instance.description = validated_data.get('description',
                                               instance.description)
     return oai_provider_set_api.upsert(instance)
 def update(self, instance, validated_data):
     instance.set_spec = validated_data.get("set_spec", instance.set_spec)
     instance.set_name = validated_data.get("set_name", instance.set_name)
     templates_manager = validated_data.get("templates_manager", [])
     if len(templates_manager) > 0:
         templates_manager = [
             version_manager_api.get(id_, request=self.context["request"])
             for id_ in templates_manager
         ]
         instance.templates_manager = templates_manager
     instance.description = validated_data.get("description",
                                               instance.description)
     return oai_provider_set_api.upsert(instance)
Beispiel #11
0
    def get_object(self, pk):
        """ Get template version manager from db

        Args:
            pk:

        Returns:

        """
        try:
            return version_manager_api.get(pk)
        except exceptions.DoesNotExist:
            raise Http404
Beispiel #12
0
    def test_version_manager_get_returns_version_manager(self, mock_get_by_id):
        # Arrange
        mock_user = create_mock_user("1", is_superuser=True)
        mock_request = create_mock_request(mock_user)
        mock_version_manager = _create_mock_version_manager(title="Schema")

        mock_get_by_id.return_value = mock_version_manager

        # Act
        result = version_manager_api.get(mock_version_manager.id,
                                         request=mock_request)

        # Assert
        self.assertIsInstance(result, VersionManager)
Beispiel #13
0
def manage_template_versions(request, version_manager_id):
    """View that allows template versions management

    Args:
        request:
        version_manager_id:

    Returns:

    """

    # get the version manager
    version_manager = None
    try:
        version_manager = version_manager_api.get(version_manager_id)
    except:
        # TODO: catch good exception, redirect to error page
        pass

    if not request.user.is_staff and version_manager.user != str(
            request.user.id):
        raise Exception("You don't have the rights to perform this action.")

    context = get_context_manage_template_versions(version_manager)

    assets = {
        "js": [{
            "path":
            'core_main_app/common/js/templates/versions/set_current.js',
            "is_raw": False
        }, {
            "path": 'core_main_app/common/js/templates/versions/restore.js',
            "is_raw": False
        }, {
            "path":
            'core_main_app/common/js/templates/versions/modals/disable.js',
            "is_raw": False
        }, {
            "path": 'core_main_app/common/js/backtoprevious.js',
            "is_raw": True
        }]
    }

    modals = ["core_main_app/admin/templates/versions/modals/disable.html"]

    return render(request,
                  'core_main_app/common/templates/versions.html',
                  assets=assets,
                  modals=modals,
                  context=context)
Beispiel #14
0
def manage_type_versions(request, version_manager_id):
    """View that allows type versions management.

    Args:
        request:
        version_manager_id:

    Returns:

    """
    try:
        # get the version manager
        version_manager = version_manager_api.get(version_manager_id, request=request)
        context = get_context_manage_template_versions(version_manager, "Type")
        if "core_parser_app" in settings.INSTALLED_APPS:
            context.update({"module_url": "core_composer_app_type_modules"})

        assets = {
            "js": [
                {
                    "path": "core_main_app/common/js/templates/versions/set_current.js",
                    "is_raw": False,
                },
                {
                    "path": "core_main_app/common/js/templates/versions/restore.js",
                    "is_raw": False,
                },
                {
                    "path": "core_main_app/common/js/templates/versions/modals/disable.js",
                    "is_raw": False,
                },
            ]
        }

        modals = ["core_main_app/admin/templates/versions/modals/disable.html"]

        return render(
            request,
            "core_composer_app/user/types/versions.html",
            assets=assets,
            modals=modals,
            context=context,
        )
    except Exception as e:
        return render(
            request,
            "core_main_app/common/commons/error.html",
            context={"error": str(e)},
        )
Beispiel #15
0
    def get_object(self, pk):
        """ Get template version manager from db

        Args:
            pk:

        Returns:

        """
        try:
            template_version_manager_object = version_manager_api.get(pk)
            can_user_modify_template_version_manager(template_version_manager_object, self.request.user)
            return template_version_manager_object
        except exceptions.DoesNotExist:
            raise Http404
Beispiel #16
0
def restore_version_manager(request):
    """Restore a disabled version manager.

    Args:
        request:

    Returns:

    """
    try:
        version_manager = version_manager_api.get(request.GET['id'])
        version_manager_api.restore(version_manager)
    except Exception, e:
        return HttpResponseBadRequest(e.message,
                                      content_type='application/javascript')
Beispiel #17
0
    def get_object(self, pk, request):
        """Get TemplateVersionManager from db

        Args:

            pk: ObjectId
            request:

        Returns:

            TemplateVersionManager
        """
        try:
            return version_manager_api.get(pk, request=request)
        except exceptions.DoesNotExist:
            raise Http404
Beispiel #18
0
def disable_version_manager(request):
    """Disable a version manager.

    Args:
        request:

    Returns:

    """
    try:
        version_manager = version_manager_api.get(request.GET['id'])
        version_manager_api.disable(version_manager)
    except Exception as e:
        return HttpResponseBadRequest(str(e), content_type='application/javascript')

    return HttpResponse(json.dumps({}), content_type='application/javascript')
Beispiel #19
0
    def get_object(self, pk):
        """Get template version manager from db

        Args:

            pk: ObjectId

        Returns:

            TemplateVersionManager
        """
        try:
            template_version_manager_object = version_manager_api.get(
                pk, request=self.request)
            return template_version_manager_object
        except exceptions.DoesNotExist:
            raise Http404
Beispiel #20
0
def manage_type_buckets(request, version_manager_id):
    """Manage buckets of a type.

    Args:
        request:
        version_manager_id:

    Returns:

    """
    # get the version manager
    version_manager = None

    try:
        version_manager = version_manager_api.get(version_manager_id)
    except:
        # TODO: catch good exception, redirect to error page
        pass

    context = {
        'version_manager': version_manager,
        'buckets': bucket_api.get_all()
    }

    assets = {
        "css": ['core_composer_app/common/css/bucket.css'],
        "js": [{
            "path": 'core_main_app/common/js/backtoprevious.js',
            "is_raw": True
        }]
    }
    if request.method == 'POST':
        form = EditTypeBucketsForm(request.POST)
        if form.is_valid():
            buckets = request.POST.getlist('buckets')
            bucket_api.update_type_buckets(version_manager, buckets)
            return redirect(reverse('admin:core_composer_app_types'))
    else:
        form = EditTypeBucketsForm()

    context['form'] = form
    return admin_render(request,
                        'core_composer_app/admin/buckets/edit.html',
                        assets=assets,
                        context=context)
Beispiel #21
0
def manage_type_versions(request, version_manager_id):
    """View that allows type versions management.

    Args:
        request:
        version_manager_id:

    Returns:

    """
    try:
        # get the version manager
        version_manager = version_manager_api.get(version_manager_id)
        context = get_context_manage_template_versions(version_manager)
        if 'core_parser_app' in settings.INSTALLED_APPS:
            context.update({"module_url": "core_composer_app_type_modules"})

        assets = {
                    "js": [
                        {
                            "path": 'core_main_app/common/js/templates/versions/set_current.js',
                            "is_raw": False
                        },
                        {
                            "path": 'core_main_app/common/js/templates/versions/restore.js',
                            "is_raw": False
                        },
                        {
                            "path": 'core_main_app/common/js/templates/versions/modals/disable.js',
                            "is_raw": False
                        }
                    ]
                }

        modals = ["core_main_app/admin/templates/versions/modals/disable.html"]

        return render(request,
                      'core_composer_app/user/types/versions.html',
                      assets=assets,
                      modals=modals,
                      context=context)
    except Exception, e:
        return render(request,
                      'core_main_app/common/commons/error.html',
                      context={'error': e.message})
Beispiel #22
0
def manage_template_versions(request, version_manager_id):
    """View that allows template versions management.

    Args:
        request:
        version_manager_id:

    Returns:

    """

    # get the version manager
    version_manager = None
    try:
        version_manager = version_manager_api.get(version_manager_id)
    except:
        # TODO: catch good exception, redirect to error page
        pass

    context = get_context_manage_template_versions(version_manager)

    assets = {
        "js": [{
            "path":
            'core_main_app/common/js/templates/versions/set_current.js',
            "is_raw": False
        }, {
            "path": 'core_main_app/common/js/templates/versions/restore.js',
            "is_raw": False
        }, {
            "path":
            'core_main_app/common/js/templates/versions/modals/disable.js',
            "is_raw": False
        }]
    }

    modals = ["core_main_app/admin/templates/versions/modals/disable.html"]

    return admin_render(request,
                        'core_main_app/admin/templates/versions.html',
                        assets=assets,
                        modals=modals,
                        context=context)
Beispiel #23
0
def resolve_dependencies(request):
    """Resolve import/includes to avoid local references.

    Args:
        request:

    Returns:

    """
    try:
        # Get the parameters
        name = request.POST.get("name", None)
        version_manager_id = request.POST.get("version_manager_id", "")
        filename = request.POST["filename"]
        xsd_content = request.POST["xsd_content"]
        schema_locations = request.POST.getlist("schemaLocations[]")
        dependencies = request.POST.getlist("dependencies[]")
        buckets = request.POST.getlist("buckets[]")

        # create new object
        type_object = Type(filename=filename,
                           content=_get_xsd_content_from_html(xsd_content))
        init_template_with_dependencies(
            type_object,
            _get_dependencies_dict(schema_locations, dependencies),
            request=request,
        )

        # get the version manager or create a new one
        if version_manager_id != "":
            type_version_manager = version_manager_api.get(version_manager_id,
                                                           request=request)
        else:
            type_version_manager = TypeVersionManager(title=name)
        type_version_manager_api.insert(type_version_manager,
                                        type_object,
                                        request=request,
                                        list_bucket_ids=buckets)
    except Exception as e:
        return HttpResponseBadRequest(escape(str(e)),
                                      content_type="application/javascript")

    return HttpResponse(json.dumps({}), content_type="application/javascript")