From c235b56e12cdb3a66f07ad70446dd20b6f1edb2b Mon Sep 17 00:00:00 2001
From: Erwan Rouchet <rouchet@teklia.com>
Date: Fri, 14 Oct 2022 15:16:47 +0200
Subject: [PATCH] Remove the ImageServer.validated field

---
 arkindex/documents/fixtures/data.json           |  1 -
 .../documents/management/commands/bootstrap.py  |  4 +---
 .../tests/commands/test_load_export.py          |  4 +---
 arkindex/images/admin.py                        |  2 +-
 arkindex/images/managers.py                     | 10 ++--------
 .../0009_remove_imageserver_validated.py        | 17 +++++++++++++++++
 arkindex/images/models.py                       |  1 -
 arkindex/images/tests/test_image_api.py         |  7 ++-----
 arkindex/images/tests/test_imageserver.py       | 14 --------------
 9 files changed, 24 insertions(+), 36 deletions(-)
 create mode 100644 arkindex/images/migrations/0009_remove_imageserver_validated.py

diff --git a/arkindex/documents/fixtures/data.json b/arkindex/documents/fixtures/data.json
index e3a2cf2781..79e4794886 100644
--- a/arkindex/documents/fixtures/data.json
+++ b/arkindex/documents/fixtures/data.json
@@ -1437,7 +1437,6 @@
         "max_height": null,
         "created": "2020-02-02T01:23:45.678Z",
         "updated": "2020-02-02T01:23:45.678Z",
-        "validated": false,
         "read_only": false
     }
 },
diff --git a/arkindex/documents/management/commands/bootstrap.py b/arkindex/documents/management/commands/bootstrap.py
index 3188a4b1eb..338a8e88ab 100644
--- a/arkindex/documents/management/commands/bootstrap.py
+++ b/arkindex/documents/management/commands/bootstrap.py
@@ -130,10 +130,9 @@ class Command(BaseCommand):
                 server.id = IMAGE_SERVER_ID
 
             # Update base settings
-            if server.s3_bucket != IMAGE_SERVER_BUCKET or server.s3_region != IMAGE_SERVER_REGION or not server.validated:
+            if server.s3_bucket != IMAGE_SERVER_BUCKET or server.s3_region != IMAGE_SERVER_REGION:
                 server.s3_bucket = IMAGE_SERVER_BUCKET
                 server.s3_region = IMAGE_SERVER_REGION
-                server.validated = True
                 server.save()
                 self.warn("Updated image server S3 settings")
             else:
@@ -146,7 +145,6 @@ class Command(BaseCommand):
                     s3_bucket=IMAGE_SERVER_BUCKET,
                     s3_region=IMAGE_SERVER_REGION,
                     display_name='Development local server',
-                    validated=True,
                 )
                 self.success("Image server created")
             except IntegrityError as e:
diff --git a/arkindex/documents/tests/commands/test_load_export.py b/arkindex/documents/tests/commands/test_load_export.py
index 54d01c7ac3..0a7af1793c 100644
--- a/arkindex/documents/tests/commands/test_load_export.py
+++ b/arkindex/documents/tests/commands/test_load_export.py
@@ -38,7 +38,7 @@ class TestLoadExport(FixtureTestCase):
             'process.revision': ['message', 'author'],
             'process.workerversion': ['configuration', 'state', 'docker_image', 'docker_image_iid'],
             'process.workertype': [],
-            'images.imageserver': ['s3_bucket', 's3_region', 'created', 'updated', 'validated', 'read_only'],
+            'images.imageserver': ['s3_bucket', 's3_region', 'created', 'updated', 'read_only'],
             'images.image': ['created', 'updated', 'hash', 'status'],
             'documents.element': ['created', 'updated', 'type'],
             'documents.elementpath': [],
@@ -119,7 +119,6 @@ class TestLoadExport(FixtureTestCase):
             polygon=LinearRing((0, 0), (0, 1000), (1000, 1000), (1000, 0), (0, 0)),
             image=Image.objects.all().first()
         )
-        ImageServer.objects.all().update(validated=True)
 
         element = self.corpus.elements.get(name='Volume 1')
         transcription = Transcription.objects.first()
@@ -226,7 +225,6 @@ class TestLoadExport(FixtureTestCase):
             polygon=LinearRing((0, 0), (0, 1000), (1000, 1000), (1000, 0), (0, 0)),
             image=Image.objects.all().first()
         )
-        ImageServer.objects.all().update(validated=True)
 
         element = self.corpus.elements.get(name='Volume 1')
         transcription = Transcription.objects.first()
diff --git a/arkindex/images/admin.py b/arkindex/images/admin.py
index 213d09ed4a..d8805450f9 100644
--- a/arkindex/images/admin.py
+++ b/arkindex/images/admin.py
@@ -7,7 +7,7 @@ from arkindex.images.views import ImageServerMergeView, ImageServerSplitView
 
 
 class ImageServerAdmin(admin.ModelAdmin):
-    list_display = ('display_name', 'url', 'validated')
+    list_display = ('display_name', 'url')
 
     def get_urls(self):
         # Give views access to this ModelAdmin instance
diff --git a/arkindex/images/managers.py b/arkindex/images/managers.py
index ff4c2a25ba..167844021f 100644
--- a/arkindex/images/managers.py
+++ b/arkindex/images/managers.py
@@ -19,7 +19,7 @@ class ImageServerManager(models.Manager):
 
     def from_url(self, url):
         """
-        Find a matching ImageServer from an image URL. Requires the server to be validated.
+        Find a matching ImageServer from an image URL.
         May raise ImageServer.DoesNotExist or ImageServer.MultipleObjectsReturned.
         """
         servers = self \
@@ -41,7 +41,6 @@ class ImageServerManager(models.Manager):
                 return self.create(
                     url=server_url,
                     display_name=server_url,
-                    validated=True,
                 )
 
             raise self.model.DoesNotExist(
@@ -53,9 +52,4 @@ class ImageServerManager(models.Manager):
                 f'The URL "{url}" matched multiple existing image servers'
             )
 
-        image_server = servers.get()
-        if not image_server.validated:
-            raise ValueError(f'The {image_server.url} image server is not validated. '
-                             'Please ask an instance administrator to validate the IIIF server for this image.')
-
-        return image_server
+        return servers.get()
diff --git a/arkindex/images/migrations/0009_remove_imageserver_validated.py b/arkindex/images/migrations/0009_remove_imageserver_validated.py
new file mode 100644
index 0000000000..2ee2bcefac
--- /dev/null
+++ b/arkindex/images/migrations/0009_remove_imageserver_validated.py
@@ -0,0 +1,17 @@
+# Generated by Django 4.0.7 on 2022-10-12 14:39
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('images', '0008_delete_zone'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='imageserver',
+            name='validated',
+        ),
+    ]
diff --git a/arkindex/images/models.py b/arkindex/images/models.py
index 184deaa3d6..620b18df7b 100644
--- a/arkindex/images/models.py
+++ b/arkindex/images/models.py
@@ -36,7 +36,6 @@ class ImageServer(models.Model):
 
     created = models.DateTimeField(auto_now_add=True)
     updated = models.DateTimeField(auto_now=True)
-    validated = models.BooleanField(default=False)
     read_only = models.BooleanField(default=False)
 
     objects = ImageServerManager()
diff --git a/arkindex/images/tests/test_image_api.py b/arkindex/images/tests/test_image_api.py
index afadba4895..e8a496d990 100644
--- a/arkindex/images/tests/test_image_api.py
+++ b/arkindex/images/tests/test_image_api.py
@@ -28,10 +28,7 @@ class TestImageApi(FixtureAPITestCase):
     @classmethod
     def setUpTestData(cls):
         super().setUpTestData()
-        cls.server = ImageServer.objects.create(
-            url='https://test-iiif-server.teklia.com/images',
-            validated=True
-        )
+        cls.server = ImageServer.objects.create(url='https://test-iiif-server.teklia.com/images')
 
     def setUp(self):
         super().setUp()
@@ -366,7 +363,7 @@ class TestImageApi(FixtureAPITestCase):
     def test_create_iiif_image_wrong_urls(self):
         self.client.force_login(self.superuser)
         # Create a server with same prefix as existing one
-        ImageServer.objects.create(url='https://test-iiif-server', validated=True)
+        ImageServer.objects.create(url='https://test-iiif-server')
         wrong_urls = {
             'This field may not be blank.': [
                 ''
diff --git a/arkindex/images/tests/test_imageserver.py b/arkindex/images/tests/test_imageserver.py
index 09abbf3a67..4859055fd8 100644
--- a/arkindex/images/tests/test_imageserver.py
+++ b/arkindex/images/tests/test_imageserver.py
@@ -152,8 +152,6 @@ class TestImageServer(TestCase):
         """
         Test ImageServer detection from images url
         """
-        ImageServer.objects.update(validated=True)
-
         self.assertEqual(ImageServer.objects.from_url('http://server.dev.teklia.com/iiif/test.jpg'), self.root_srv_1)
         self.assertEqual(ImageServer.objects.from_url('http://server2.dev.teklia.com/iiif/test.jpg'), self.root_srv_2)
         self.assertEqual(ImageServer.objects.count(), 5)
@@ -163,7 +161,6 @@ class TestImageServer(TestCase):
         self.assertEqual(ImageServer.objects.count(), 6)
         self.assertEqual(new_server.url, 'http://new.server.dev.teklia.com/iiif')
         self.assertEqual(new_server.display_name, 'http://new.server.dev.teklia.com/iiif')
-        self.assertTrue(new_server.validated)
 
         # And then reused for later calls
         self.assertEqual(ImageServer.objects.from_url('http://new.server.dev.teklia.com/iiif/path%2Fto%2Ffile.jpg'), new_server)
@@ -183,15 +180,4 @@ class TestImageServer(TestCase):
                 self.assertEqual(ImageServer.objects.count(), 6)
                 self.assertEqual(new_server.url, server_url)
                 self.assertEqual(new_server.display_name, server_url)
-                self.assertTrue(new_server.validated)
                 new_server.delete()
-
-    def test_from_url_unvalidated_server(self):
-        """
-        Test that when a server already exists but is unvalidated
-        from_url does not attempt to create it again.
-        """
-        self.assertEqual(self.root_srv_2.validated, False)
-        with self.assertRaisesMessage(ValueError, "The http://server2.dev.teklia.com/iiif image server is not validated. Please ask an instance administrator to validate the IIIF server for this image."):
-            ImageServer.objects.from_url("http://server2.dev.teklia.com/iiif/path%2Fto%2Ffile.jpg")
-        self.assertEqual(ImageServer.objects.count(), 5)
-- 
GitLab