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
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
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
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)