Ejemplo n.º 1
0
def delete_orphaned_datasets():
    """Delete orphaned layer files."""
    deleted = []
    _, files = storage_manager.listdir("layers")

    for filename in files:
        if Dataset.objects.filter(file__icontains=filename).count() == 0:
            logger.debug(f"Deleting orphaned dataset file {filename}")
            try:
                storage_manager.delete(os.path.join("layers", filename))
                deleted.append(filename)
            except NotImplementedError as e:
                logger.error(
                    f"Failed to delete orphaned dataset file '{filename}': {e}")

    return deleted
Ejemplo n.º 2
0
def delete_orphaned_document_files():
    """
    Deletes orphaned files of deleted documents.
    """
    deleted = []
    _, files = storage_manager.listdir(os.path.join("documents", "document"))

    for filename in files:
        if Document.objects.filter(doc_file__contains=filename).count() == 0:
            logger.debug(f"Deleting orphaned document {filename}")
            try:
                storage_manager.delete(os.path.join(
                    os.path.join("documents", "document"), filename))
                deleted.append(filename)
            except NotImplementedError as e:
                logger.error(
                    f"Failed to delete orphaned document '{filename}': {e}")

    return deleted
Ejemplo n.º 3
0
def get_thumbs():
    """Fetches a list of all stored thumbnails"""
    if not storage_manager.exists(settings.THUMBNAIL_LOCATION):
        return []
    subdirs, thumbs = storage_manager.listdir(settings.THUMBNAIL_LOCATION)
    return thumbs
Ejemplo n.º 4
0
    def test_moderated_upload(self):
        """
        Test if moderation flag works
        """
        with self.settings(ADMIN_MODERATE_UPLOADS=False):
            self.client.login(username=self.user, password=self.passwd)
            input_path = self._get_input_path()
            dname = 'document title'
            with open(
                    os.path.join(f"{self.project_root}", "tests/data/img.gif"),
                    "rb") as f:
                data = {
                    'title': dname,
                    'doc_file': f,
                    'resource': '',
                    'extension': 'txt',
                    'permissions': '{}',
                }
                resp = self.client.post(self.document_upload_url, data=data)
                self.assertEqual(resp.status_code, 200, resp.content)
            _d = Document.objects.get(title=dname)

            self.assertTrue(_d.is_published)
            uuid = _d.uuid
            _d.delete()

            from geonode.documents.utils import delete_orphaned_document_files
            if storage_manager.exists(os.path.join("documents", "document")):
                _, document_files_before = storage_manager.listdir(
                    os.path.join("documents", "document"))
                deleted = delete_orphaned_document_files()
                _, document_files_after = storage_manager.listdir(
                    os.path.join("documents", "document"))
                self.assertTrue(len(deleted) > 0)
                self.assertEqual(
                    set(deleted),
                    set(document_files_before) - set(document_files_after))

            from geonode.base.utils import delete_orphaned_thumbs
            thumb_files_before = get_thumbs()
            deleted = delete_orphaned_thumbs()
            thumb_files_after = get_thumbs()
            if deleted:
                self.assertTrue(
                    len(deleted) > 0,
                    f"before: {thumb_files_before} - deleted: {deleted} - after: {thumb_files_after}"
                )
                self.assertEqual(
                    set(deleted),
                    set(thumb_files_before) - set(thumb_files_after),
                    f"deleted: {deleted} vs {set(thumb_files_before) - set(thumb_files_after)}"
                )

            fn = os.path.join(os.path.join("documents", "document"),
                              os.path.basename(input_path))
            self.assertFalse(storage_manager.exists(fn))

            files = [thumb for thumb in get_thumbs() if uuid in thumb]
            if files and len(files):
                self.assertEqual(len(files), 1)

        with self.settings(ADMIN_MODERATE_UPLOADS=True):
            self.client.login(username=self.user, password=self.passwd)
            norman = get_user_model().objects.get(username="******")
            group = GroupProfile.objects.get(slug="bar")
            input_path = self._get_input_path()
            dname = 'document title'
            with open(input_path, 'rb') as f:
                data = {
                    'title': dname,
                    'doc_file': f,
                    'resource': '',
                    'extension': 'txt',
                    'permissions': '{}',
                }
                resp = self.client.post(self.document_upload_url, data=data)
                self.assertEqual(resp.status_code, 200)
            _d = Document.objects.get(title=dname)
            self.assertFalse(_d.is_approved)
            self.assertTrue(_d.is_published)

            group.join(norman)
            self.assertFalse(group.user_is_role(norman, "manager"))
            GroupMember.objects.get(group=group, user=norman).promote()
            self.assertTrue(group.user_is_role(norman, "manager"))

            self.client.login(username="******", password="******")
            resp = self.client.get(reverse('document_detail', args=(_d.id, )))
            # Forbidden
            self.assertEqual(resp.status_code, 403)
            _d.group = group.group
            _d.save()
            resp = self.client.get(reverse('document_detail', args=(_d.id, )))
            # Allowed - edit permissions
            self.assertEqual(resp.status_code, 200)
            perms_list = get_perms(norman, _d.get_self_resource()) + get_perms(
                norman, _d)
            self.assertTrue('change_resourcebase_metadata' in perms_list)
            GroupMember.objects.get(group=group, user=norman).demote()
            self.assertFalse(group.user_is_role(norman, "manager"))
            resp = self.client.get(reverse('document_detail', args=(_d.id, )))
            # Allowed - no edit
            self.assertEqual(resp.status_code, 200)
            perms_list = get_perms(norman, _d.get_self_resource()) + get_perms(
                norman, _d)
            self.assertFalse('change_resourcebase_metadata' in perms_list)
            group.leave(norman)