コード例 #1
0
    def handle(self, *args, **options):
        ignore_errors = options.get('ignore_errors')
        remove_duplicates = options.get('remove_duplicates')
        prune = options.get('prune')
        set_uuid = ast.literal_eval(options.get('set_uuid', 'False'))
        set_attrib = ast.literal_eval(options.get('set_attrib', 'True'))
        set_links = ast.literal_eval(options.get('set_links', 'True'))

        delete_orphaned_thumbnails = options.get('delete_orphaned_thumbnails')
        filter = options.get('filter')
        if not options.get('username'):
            username = None
        else:
            username = options.get('username')

        all_layers = Layer.objects.all().order_by('name')
        if filter:
            all_layers = all_layers.filter(name__icontains=filter)
        if username:
            all_layers = all_layers.filter(owner__username=username)

        for index, layer in enumerate(all_layers):
            print(f"[{(index + 1)} / {len(all_layers)}] Updating Layer [{layer.name}] ...")
            try:
                # recalculate the layer statistics
                if set_attrib:
                    set_attributes(layer, overwrite=True)

                if set_uuid and hasattr(settings, 'LAYER_UUID_HANDLER') and settings.LAYER_UUID_HANDLER != '':
                    from geonode.layers.utils import get_uuid_handler
                    uuid = get_uuid_handler()(layer).create_uuid()
                    la = Layer.objects.filter(resourcebase_ptr=layer.resourcebase_ptr)
                    la.update(uuid=uuid)
                    layer.refresh_from_db()
                # refresh metadata links

                if set_links:
                    set_resource_default_links(layer, layer, prune=prune)

                # refresh catalogue metadata records
                catalogue_post_save(instance=layer, sender=layer.__class__)

                # remove duplicates
                if remove_duplicates:
                    remove_duplicate_links(layer)
            except Exception as e:
                import traceback
                traceback.print_exc()
                if ignore_errors:
                    logger.error(f"[ERROR] Layer [{layer.name}] couldn't be updated")
                else:
                    raise e

        # delete orphaned thumbs
        if delete_orphaned_thumbnails:
            delete_orphaned_thumbs()
コード例 #2
0
    def handle(self, *args, **options):
        ignore_errors = options.get('ignore_errors')
        remove_duplicates = options.get('remove_duplicates')
        prune = options.get('prune')
        delete_orphaned_thumbnails = options.get('delete_orphaned_thumbnails')
        filter = options.get('filter')
        if not options.get('username'):
            username = None
        else:
            username = options.get('username')

        all_layers = Layer.objects.all().order_by('name')
        if filter:
            all_layers = all_layers.filter(name__icontains=filter)
        if username:
            all_layers = all_layers.filter(owner__username=username)

        for index, layer in enumerate(all_layers):
            print(
                f"[{(index + 1)} / {len(all_layers)}] Updating Layer [{layer.name}] ..."
            )
            try:
                # recalculate the layer statistics
                set_attributes(layer, overwrite=True)

                # refresh metadata links
                set_resource_default_links(layer, layer, prune=prune)

                # refresh catalogue metadata records
                catalogue_post_save(instance=layer, sender=layer.__class__)

                # remove duplicates
                if remove_duplicates:
                    remove_duplicate_links(layer)
            except Exception as e:
                import traceback
                traceback.print_exc()
                if ignore_errors:
                    logger.error(
                        f"[ERROR] Layer [{layer.name}] couldn't be updated")
                else:
                    raise e

        # delete orphaned thumbs
        if delete_orphaned_thumbnails:
            delete_orphaned_thumbs()
コード例 #3
0
ファイル: tests.py プロジェクト: sewunet/GII-geonode
    def test_moderated_upload(self):
        """
        Test if moderation flag works
        """
        with self.settings(ADMIN_MODERATE_UPLOADS=False):
            document_upload_url = reverse('document_upload')
            self.client.login(username=self.user, password=self.passwd)

            input_path = self._get_input_path()

            with open(input_path, 'rb') as f:
                data = {'title': 'document title',
                        'doc_file': f,
                        'doc_url': '',
                        'resource': '',
                        'permissions': '{}',
                        }
                resp = self.client.post(document_upload_url, data=data)
            self.assertEqual(resp.status_code, 302)
            dname = 'document title'
            _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
            delete_orphaned_document_files()

            from geonode.base.utils import delete_orphaned_thumbs
            delete_orphaned_thumbs()

            from django.conf import settings
            documents_path = os.path.join(settings.MEDIA_ROOT, 'documents')
            fn = os.path.join(documents_path, os.path.basename(input_path))
            self.assertFalse(os.path.isfile(fn))

            thumbs_path = os.path.join(settings.MEDIA_ROOT, 'thumbs')
            _cnt = 0
            for filename in os.listdir(thumbs_path):
                fn = os.path.join(thumbs_path, filename)
                if uuid in filename:
                    _cnt += 1
            self.assertTrue(_cnt == 0)

        with self.settings(ADMIN_MODERATE_UPLOADS=True):
            document_upload_url = reverse('document_upload')
            self.client.login(username=self.user, password=self.passwd)

            input_path = self._get_input_path()

            with open(input_path, 'rb') as f:
                data = {'title': 'document title',
                        'doc_file': f,
                        'doc_url': '',
                        'resource': '',
                        'permissions': '{}',
                        }
                resp = self.client.post(document_upload_url, data=data)
            self.assertEqual(resp.status_code, 302)
            dname = 'document title'
            _d = Document.objects.get(title=dname)

            self.assertFalse(_d.is_published)
コード例 #4
0
def delete_orphaned_thumbnails(self):
    from geonode.base.utils import delete_orphaned_thumbs
    delete_orphaned_thumbs()
コード例 #5
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()

            with open(input_path, 'rb') as f:
                data = {
                    'title': 'document title',
                    'doc_file': f,
                    'resource': '',
                    'extension': 'txt',
                    'permissions': '{}',
                }
                resp = self.client.post(self.document_upload_url, data=data)
                self.assertEqual(resp.status_code, 200)
            dname = 'document title'
            _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
            _, document_files_before = storage.listdir(
                os.path.join("documents", "document"))
            deleted = delete_orphaned_document_files()
            _, document_files_after = storage.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 len(thumb_files_before):
                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.exists(fn))

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

        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()
            with open(input_path, 'rb') as f:
                data = {
                    'title': 'document title',
                    'doc_file': f,
                    'resource': '',
                    'extension': 'txt',
                    'permissions': '{}',
                }
                resp = self.client.post(self.document_upload_url, data=data)
                self.assertEqual(resp.status_code, 200)
            dname = 'document title'
            _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)
コード例 #6
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()

            with open(input_path, 'rb') as f:
                data = {
                    'title': 'document title',
                    'doc_file': f,
                    'resource': '',
                    'extension': 'txt',
                    'permissions': '{}',
                }
                resp = self.client.post(self.document_upload_url, data=data)
                self.assertEqual(resp.status_code, 200)
            dname = 'document title'
            _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
            delete_orphaned_document_files()

            from geonode.base.utils import delete_orphaned_thumbs
            delete_orphaned_thumbs()

            from django.conf import settings
            documents_path = os.path.join(settings.MEDIA_ROOT, 'documents')
            fn = os.path.join(documents_path, os.path.basename(input_path))
            self.assertFalse(os.path.isfile(fn))

            thumbs_path = os.path.join(settings.MEDIA_ROOT, 'thumbs')
            _cnt = 0
            for filename in os.listdir(thumbs_path):
                fn = os.path.join(thumbs_path, filename)
                if uuid in filename:
                    _cnt += 1
            self.assertTrue(_cnt == 0)

        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()
            with open(input_path, 'rb') as f:
                data = {
                    'title': 'document title',
                    'doc_file': f,
                    'resource': '',
                    'extension': 'txt',
                    'permissions': '{}',
                }
                resp = self.client.post(self.document_upload_url, data=data)
                self.assertEqual(resp.status_code, 200)
            dname = 'document title'
            _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)
コード例 #7
0
 def handle(self, *args, **options):
     delete_orphaned_thumbs()
コード例 #8
0
ファイル: tasks.py プロジェクト: geosolutions-it/geonode
def delete_orphaned_thumbnails(self):
    from geonode.base.utils import delete_orphaned_thumbs
    delete_orphaned_thumbs()