def test_create_super_user(self):
        # Context
        user_count = len(user_api.get_all_users())
        self.assertEqual(user_count, 0)

        # Act
        UserFixtures().create_super_user(username="******")

        # Assert
        list_user = user_api.get_all_users()
        self.assertEqual(list_user[0].username, "test username")
        self.assertEqual(len(list_user), user_count + 1)
        self.assertTrue(list_user[0].is_superuser)
 def _format_data_context(self, data_list, user, user_can_read,
                          user_can_write):
     detailed_user_data = []
     username_list = get_id_username_dict(user_api.get_all_users())
     for data in data_list:
         is_owner = str(data.user_id) == str(user.id) or self.administration
         detailed_user_data.append({
             'data':
             data,
             'username_list':
             username_list,
             'data_status':
             get_status(data),
             'data_status_values':
             DataStatus,
             'data_role':
             ', '.join([DataRole.role[x] for x in get_role(data)]),
             'can_read':
             user_can_read or is_owner,
             'can_write':
             user_can_write or is_owner,
             'is_owner':
             is_owner
         })
     return detailed_user_data
 def _format_data_context_registry(self, data_list, is_published):
     data_context_list = []
     username_list = dict(
         (str(x.id), x.username) for x in user_api.get_all_users())
     for data in data_list:
         data_context_list.append({
             'data':
             data,
             'username_list':
             username_list,
             'data_status':
             get_status(data),
             'data_status_values':
             DataStatus,
             'data_role':
             ', '.join([DataRole.role[x] for x in get_role(data)]),
             'can_read':
             True,
             'can_write':
             True,
             'is_owner':
             True,
             'can_change_workspace':
             self.can_change_workspace(data),
             'can_set_public':
             not data_api.is_data_public(data)
         })
     return data_context_list
Exemple #4
0
def get_list_user_can_read_workspace(workspace, user):
    """Get list of users that have read access to workspace.

    Args:
        workspace
        user

    Return:
    """

    if is_workspace_public(workspace):
        return list(user_api.get_all_users())

    # Get read permission of the workspace
    read_permission = permission_api.get_by_id(workspace.read_perm_id)

    return list(read_permission.user_set.all())
    def __init__(self, currentUser):
        self.USERS_OPTIONS = []
        self.USERS_OPTIONS.append(('', '-----------'))

        # We retrieve all users
        sort_users = get_all_users()
        # We sort by username, case insensitive
        sort_users = sorted(sort_users, key=lambda s: s.username.lower())

        # We add them
        for user in sort_users:
            if user.id != currentUser.id or currentUser.is_superuser:
                self.USERS_OPTIONS.append((user.id, user.username))

        super(UserForm, self).__init__()
        self.fields['users'].choices = []
        self.fields['users'].choices = self.USERS_OPTIONS
class DashboardWorkspaceRecords(CommonView):
    """ List the records of a workspace.
    """

    template = dashboard_constants.DASHBOARD_TEMPLATE
    data_template = dashboard_constants.DASHBOARD_RECORDS_TEMPLATE_TABLE_PAGINATION

    def get(self, request, workspace_id, *args, **kwargs):
        workspace = workspace_api.get_by_id(workspace_id)

        try:
            workspace_data = workspace_data_api.get_all_by_workspace(
                workspace, request.user)
        except AccessControlError, ace:
            workspace_data = []

        user_can_read = workspace_api.can_user_read_workspace(
            workspace, request.user)
        user_can_write = workspace_api.can_user_write_workspace(
            workspace, request.user)

        # Paginator
        page = request.GET.get('page', 1)
        results_paginator = ResultsPaginator.get_results(
            workspace_data, page, settings.RECORD_PER_PAGE_PAGINATION)

        # Data context
        results_paginator.object_list = self._format_data_context(
            results_paginator.object_list, request.user, user_can_read,
            user_can_write)

        # Add user_form for change owner
        user_form = UserForm(request.user)
        context = {
            'number_total': len(workspace_data),
            'user_data': results_paginator,
            'user_form': user_form,
            'document': dashboard_constants.FUNCTIONAL_OBJECT_ENUM.RECORD,
            'template': self.data_template,
            'administration': self.administration,
            'username_list': get_id_username_dict(user_api.get_all_users())
        }

        # Get all username and corresponding ids
        user_names = dict(
            (str(x.id), x.username) for x in user_api.get_all_users())
        context.update({'usernames': user_names})
        context.update({
            'title':
            'List of ' + get_data_label() + 's of workspace: ' +
            workspace.title
        })

        modals = [
            "core_main_app/user/workspaces/list/modals/assign_workspace.html",
            dashboard_constants.MODALS_COMMON_CHANGE_OWNER,
            dashboard_constants.MODALS_COMMON_DELETE
        ]

        assets = self._get_assets()

        return self.common_render(request,
                                  self.template,
                                  context=context,
                                  assets=assets,
                                  modals=modals)
    def get(self, request, *args, **kwargs):
        """ Method GET

        Args:
            request:
            args:
            kwargs:

        Returns:
        """

        # Get the forms
        if self.administration:
            forms = curate_data_structure_api.get_all_with_no_data()
        else:
            forms = curate_data_structure_api.get_all_by_user_id_with_no_data(
                request.user.id)
        detailed_forms = self._get_detailed_forms(forms)

        context = {
            'administration': self.administration,
            'number_total': len(forms),
            'user_data': detailed_forms,
            'user_form': UserForm(request.user),
            'document': self.document,
            'template': dashboard_constants.DASHBOARD_FORMS_TEMPLATE_TABLE,
            'menu': self.administration
        }

        modals = [
            dashboard_constants.MODALS_COMMON_DELETE,
            dashboard_constants.MODALS_COMMON_CHANGE_OWNER
        ]

        assets = {
            "css":
            dashboard_constants.CSS_COMMON,
            "js": [
                {
                    "path": dashboard_constants.JS_COMMON_FUNCTION_DELETE,
                    "is_raw": False
                },
                {
                    "path":
                    dashboard_constants.JS_COMMON_FUNCTION_CHANGE_OWNER,
                    "is_raw": False
                },
                {
                    "path": 'core_dashboard_common_app/user/js/init.raw.js',
                    "is_raw": True
                },
            ]
        }

        if self.administration:
            # Get all username and corresponding ids
            user_names = dict(
                (str(x.id), x.username) for x in user_api.get_all_users())
            context.update({
                'usernames':
                user_names,
                'action_form':
                ActionForm([('1', 'Delete selected forms'),
                            ('2', 'Change owner of selected forms')]),
            })

            assets['js'].extend([{
                "path":
                'core_dashboard_common_app/common/js/init_pagination.js',
                "is_raw": False
            }, {
                "path": dashboard_constants.JS_ADMIN_ACTION_DASHBOARD,
                "is_raw": True
            }, {
                "path": dashboard_constants.JS_ADMIN_COUNT_CHECK,
                "is_raw": True
            }, {
                "path": dashboard_constants.JS_ADMIN_RESET_CHECKBOX,
                "is_raw": True
            }, {
                "path": dashboard_constants.JS_ADMIN_SELECT_ALL,
                "is_raw": True
            }, {
                "path": dashboard_constants.JS_ADMIN_SELETED_ELEMENT,
                "is_raw": False
            }, {
                "path": dashboard_constants.JS_ADMIN_INIT_MENU,
                "is_raw": False
            }])
        else:
            assets['js'].append({
                "path": dashboard_constants.JS_USER_SELECTED_ELEMENT,
                "is_raw": True
            })

        return self.common_render(request,
                                  self.template,
                                  context=context,
                                  assets=assets,
                                  modals=modals)
            'document':
            self.document,
            'template':
            self.data_template,
            'action_form':
            ActionForm([('1', 'Delete selected records'),
                        ('2', 'Change owner of selected records')]),
            'menu':
            self.administration,
            'administration':
            self.administration
        }
        if self.administration:
            context.update({
                'username_list':
                get_id_username_dict(user_api.get_all_users())
            })

        modals = [
            "core_main_app/user/workspaces/list/modals/assign_workspace.html",
            dashboard_constants.MODALS_COMMON_DELETE,
            dashboard_constants.MODALS_COMMON_CHANGE_OWNER
        ]

        assets = self._get_assets()

        return self.common_render(request,
                                  self.template,
                                  context=context,
                                  assets=assets,
                                  modals=modals)
Exemple #9
0
    def get(self, request, workspace_id, *args, **kwargs):
        workspace = workspace_api.get_by_id(workspace_id)

        # Get the selected tab if given, otherwise data will be selected by default
        tab_selected = request.GET.get("tab", "data")
        items_to_render = []

        context = {}
        data_count = 0
        files_count = 0
        try:
            data = workspace_data_api.get_all_by_workspace(
                workspace, request.user)
            data_count = data.count()
            files = workspace_blob_api.get_all_by_workspace(
                workspace, request.user)
            files_count = files.count()

            if tab_selected == "data":
                items_to_render = data
                context.update({
                    "document":
                    dashboard_constants.FUNCTIONAL_OBJECT_ENUM.RECORD.value
                })
            elif tab_selected == "file":
                items_to_render = files
                context.update({
                    "document":
                    dashboard_constants.FUNCTIONAL_OBJECT_ENUM.FILE.value
                })
        except AccessControlError as ace:
            items_to_render = workspace_data_api.get_none()

        user_can_read = workspace_api.can_user_read_workspace(
            workspace, request.user)
        user_can_write = workspace_api.can_user_write_workspace(
            workspace, request.user)

        # Paginator
        page = request.GET.get("page", 1)
        results_paginator = ResultsPaginator.get_results(
            items_to_render, page, settings.RECORD_PER_PAGE_PAGINATION)

        # Data context
        results_paginator.object_list = self._format_document_context(
            request,
            results_paginator.object_list,
            user_can_read,
            user_can_write,
            tab_selected,
        )

        # Add user_form for change owner
        user_form = UserForm(request.user)
        context.update({
            "workspace_id":
            workspace_id,
            "number_total":
            items_to_render.count(),
            "user_data":
            results_paginator,
            "user_form":
            user_form,
            "template":
            self.data_template,
            "administration":
            self.administration,
            "username_list":
            user_api.get_id_username_dict(user_api.get_all_users()),
            "tab":
            tab_selected,
            "title":
            workspace.title,
            "number_total_data":
            data_count,
            "number_total_files":
            files_count,
        })

        # Get all username and corresponding ids
        user_names = dict(
            (str(x.id), x.username) for x in user_api.get_all_users())
        context.update({"usernames": user_names})

        modals = [
            dashboard_constants.MODALS_COMMON_CHANGE_OWNER,
            dashboard_constants.MODALS_COMMON_DELETE,
        ]

        assets = self._get_assets()

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

        return self.common_render(request,
                                  self.template,
                                  context=context,
                                  assets=assets,
                                  modals=modals)
class DashboardRegistryRecords(DashboardRecords):
    """ List the records for the registry
    """
    def get(self, request, *args, **kwargs):

        # Get arguments
        is_published = request.GET.get('ispublished', None)
        is_published = None if is_published not in ['true', 'false'
                                                    ] else is_published
        role_name_list = request.GET.getlist('role', ['all'])
        page = request.GET.get('page', 1)

        role_name = ','.join(role_name_list)

        context = {
            'page': page,
            'roles': role_name,
            'ispublished': is_published
        }

        # Get resources
        try:
            loaded_data = data_api.execute_query(
                create_query_dashboard_resources(request, role_name_list,
                                                 self.administration),
                request.user, '-last_modification_date')
        except AccessControlError, ace:
            loaded_data = []

        # Filter publish/not published data
        filtered_data = []
        for data in loaded_data:
            if (is_published is None or
                (is_published == 'true' and data_api.is_data_public(data))
                    or (is_published == 'false'
                        and not data_api.is_data_public(data))):
                filtered_data.append(data)

        # Paginator
        results_paginator = ResultsPaginator.get_results(
            filtered_data, page, settings.RECORD_PER_PAGE_PAGINATION)

        # Data context
        results_paginator.object_list = self._format_data_context_registry(
            results_paginator.object_list, is_published)

        # Add user_form for change owner
        user_form = UserForm(request.user)
        context.update({
            'number_total':
            len(filtered_data),
            'user_data':
            results_paginator,
            'user_form':
            user_form,
            'document':
            self.document,
            'template':
            self.data_template,
            'action_form':
            ActionForm([('2', 'Change owner of selected records')]),
            'menu':
            self.administration,
            'administration':
            self.administration,
            'username_list':
            get_id_username_dict(user_api.get_all_users()),
            'resources':
            True,
            'url_resources':
            reverse('admin:core_dashboard_records')
            if self.administration else reverse('core_dashboard_records')
        })

        modals = [
            "core_main_app/user/workspaces/list/modals/assign_workspace.html",
            dashboard_common_constants.MODALS_COMMON_DELETE,
            dashboard_common_constants.MODALS_COMMON_CHANGE_OWNER
        ]

        assets = self._get_assets()

        return self.common_render(request,
                                  self.template,
                                  context=context,
                                  assets=assets,
                                  modals=modals)
    def get(self, request, workspace_id, *args, **kwargs):
        workspace = workspace_api.get_by_id(workspace_id)

        try:
            workspace_data = workspace_data_api.get_all_by_workspace(
                workspace, request.user
            )
        except AccessControlError as ace:
            workspace_data = workspace_data_api.get_none()

        user_can_read = workspace_api.can_user_read_workspace(workspace, request.user)
        user_can_write = workspace_api.can_user_write_workspace(workspace, request.user)

        # Paginator
        page = request.GET.get("page", 1)
        results_paginator = ResultsPaginator.get_results(
            workspace_data, page, settings.RECORD_PER_PAGE_PAGINATION
        )

        # Data context
        try:
            results_paginator.object_list = self._format_data_context(
                results_paginator.object_list,
                request.user,
                user_can_read,
                user_can_write,
            )
        except:
            results_paginator.object_list = []

        # Add user_form for change owner
        user_form = UserForm(request.user)
        context = {
            "number_total": workspace_data.count(),
            "user_data": results_paginator,
            "user_form": user_form,
            "document": dashboard_constants.FUNCTIONAL_OBJECT_ENUM.RECORD.value,
            "template": self.data_template,
            "administration": self.administration,
            "username_list": get_id_username_dict(user_api.get_all_users()),
        }

        # Get all username and corresponding ids
        user_names = dict((str(x.id), x.username) for x in user_api.get_all_users())
        context.update({"usernames": user_names})
        context.update(
            {
                "title": "List of "
                + get_data_label()
                + "s of workspace: "
                + workspace.title
            }
        )

        modals = self._get_modals()

        assets = self._get_assets()

        return self.common_render(
            request, self.template, context=context, assets=assets, modals=modals
        )
    def get(self, request, *args, **kwargs):
        """Method GET

        Args:
            request:
            args:
            kwargs:

        Returns:
        """

        # Get the forms
        if self.administration:
            try:
                forms = curate_data_structure_api.get_all_with_no_data(request.user)
            except AccessControlError as ace:
                forms = curate_data_structure_api.get_none()
        else:
            forms = curate_data_structure_api.get_all_by_user_id_with_no_data(
                request.user.id
            )

        try:
            detailed_forms = self._get_detailed_forms(forms)
        except:
            detailed_forms = []

        context = {
            "administration": self.administration,
            "number_total": forms.count(),
            "user_data": detailed_forms,
            "user_form": UserForm(request.user),
            "document": self.document,
            "template": dashboard_constants.DASHBOARD_FORMS_TEMPLATE_TABLE,
            "menu": self.administration,
        }

        modals = [
            "core_main_app/user/workspaces/list/modals/assign_workspace.html",
            dashboard_constants.MODALS_COMMON_DELETE,
            dashboard_constants.MODALS_COMMON_CHANGE_OWNER,
        ]

        assets = {
            "css": dashboard_constants.CSS_COMMON,
            "js": [
                {
                    "path": dashboard_constants.JS_COMMON_FUNCTION_DELETE,
                    "is_raw": False,
                },
                {
                    "path": dashboard_constants.JS_COMMON_FUNCTION_CHANGE_OWNER,
                    "is_raw": False,
                },
                {
                    "path": "core_dashboard_common_app/user/js/init.raw.js",
                    "is_raw": True,
                },
            ],
        }

        if self.administration:
            # Get all username and corresponding ids
            user_names = dict((str(x.id), x.username) for x in user_api.get_all_users())
            context.update(
                {
                    "usernames": user_names,
                    "action_form": ActionForm(
                        [
                            ("1", "Delete selected forms"),
                            ("2", "Change owner of selected forms"),
                        ]
                    ),
                }
            )

            assets["js"].extend(
                [
                    {
                        "path": "core_dashboard_common_app/common/js/init_pagination.js",
                        "is_raw": False,
                    },
                    {
                        "path": dashboard_constants.JS_ADMIN_ACTION_DASHBOARD,
                        "is_raw": True,
                    },
                    {"path": dashboard_constants.JS_ADMIN_COUNT_CHECK, "is_raw": True},
                    {
                        "path": dashboard_constants.JS_ADMIN_RESET_CHECKBOX,
                        "is_raw": True,
                    },
                    {"path": dashboard_constants.JS_ADMIN_SELECT_ALL, "is_raw": True},
                    {
                        "path": dashboard_constants.JS_ADMIN_SELETED_ELEMENT,
                        "is_raw": False,
                    },
                    {"path": dashboard_constants.JS_ADMIN_INIT_MENU, "is_raw": False},
                ]
            )
        else:
            assets["js"].append(
                {"path": dashboard_constants.JS_USER_SELECTED_ELEMENT, "is_raw": True}
            )

        return self.common_render(
            request, self.template, context=context, assets=assets, modals=modals
        )
    def get(self, request, *args, **kwargs):

        # Get records
        if self.administration:
            try:
                loaded_data = data_api.get_all(request.user)

            except AccessControlError as ace:
                loaded_data = data_api.get_none()

        else:
            loaded_data = data_api.get_all_by_user(request.user)

        # Paginator
        page = request.GET.get("page", 1)
        results_paginator = ResultsPaginator.get_results(
            loaded_data, page, settings.RECORD_PER_PAGE_PAGINATION
        )

        # Data context
        try:
            results_paginator.object_list = self._format_data_context(
                results_paginator.object_list
            )
        except:
            results_paginator.object_list = []

        # Add user_form for change owner
        user_form = UserForm(request.user)
        context = {
            "number_total": loaded_data.count(),
            "user_data": results_paginator,
            "user_form": user_form,
            "document": self.document,
            "template": self.data_template,
            "action_form": ActionForm(
                [
                    ("1", "Delete selected records"),
                    ("2", "Change owner of selected records"),
                ]
            ),
            "menu": self.administration,
            "administration": self.administration,
            "share_pid_button": "core_linked_records_app" in settings.INSTALLED_APPS,
        }

        if self.administration:
            context.update(
                {
                    "username_list": get_id_username_dict(user_api.get_all_users()),
                }
            )

        modals = [
            "core_main_app/user/workspaces/list/modals/assign_workspace.html",
            dashboard_constants.MODALS_COMMON_DELETE,
            dashboard_constants.MODALS_COMMON_CHANGE_OWNER,
        ]

        assets = self._get_assets()

        if context["share_pid_button"]:
            modals.append("core_linked_records_app/user/sharing/data_detail/modal.html")

            assets["js"] += [
                {
                    "path": "core_main_app/user/js/sharing_modal.js",
                    "is_raw": False,
                },
                {
                    "path": "core_linked_records_app/user/js/sharing/common_list.js",
                    "is_raw": False,
                },
                {
                    "path": "core_linked_records_app/user/js/sharing/data_list.js",
                    "is_raw": False,
                },
            ]

        return self.common_render(
            request, self.template, context=context, assets=assets, modals=modals
        )