From b4cee807bd42e56de0b760ff2811d8c9bb2cca4b Mon Sep 17 00:00:00 2001
From: Tanner Prestegard <tanner.prestegard@ligo.org>
Date: Wed, 5 Sep 2018 11:31:38 -0500
Subject: [PATCH] Adding superevent GOP perms and is_exposed field

Adding permissions for viewing GOPs attached to a superevent and
the is_exposed field, which will track whether a superevent is
exposed to the public or not.
---
 gracedb/superevents/migrations/0001_initial.py | 7 ++++++-
 gracedb/superevents/models.py                  | 9 +++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/gracedb/superevents/migrations/0001_initial.py b/gracedb/superevents/migrations/0001_initial.py
index aa077358a..9f31ace09 100644
--- a/gracedb/superevents/migrations/0001_initial.py
+++ b/gracedb/superevents/migrations/0001_initial.py
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Generated by Django 1.11.14 on 2018-08-14 15:31
+# Generated by Django 1.11.14 on 2018-08-30 17:44
 from __future__ import unicode_literals
 
 import core.models
@@ -114,6 +114,9 @@ class Migration(migrations.Migration):
                 ('signoff_type', models.CharField(choices=[(b'OP', b'operator'), (b'ADV', b'advocate')], max_length=3)),
                 ('submitter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='superevents_signoff_set', to=settings.AUTH_USER_MODEL)),
             ],
+            options={
+                'permissions': (('view_signoff', 'Can view signoff'), ('do_H1_signoff', 'Can interact with H1 signoffs'), ('do_L1_signoff', 'Can interact with L1 signoffs'), ('do_V1_signoff', 'Can interact with V1 signoffs'), ('do_adv_signoff', 'Can interact with advocate signoffs')),
+            },
         ),
         migrations.CreateModel(
             name='Superevent',
@@ -130,6 +133,7 @@ class Migration(migrations.Migration):
                 ('gw_date_number', models.PositiveIntegerField(editable=False, null=True)),
                 ('gw_letter_suffix', models.CharField(editable=False, max_length=10, null=True)),
                 ('is_gw', models.BooleanField(default=False)),
+                ('is_exposed', models.BooleanField(default=False)),
                 ('labels', models.ManyToManyField(through='superevents.Labelling', to='events.Label')),
                 ('preferred_event', models.OneToOneField(on_delete=django.db.models.deletion.PROTECT, related_name='superevent_preferred_for', to='events.Event')),
                 ('submitter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
@@ -150,6 +154,7 @@ class Migration(migrations.Migration):
             ],
             options={
                 'abstract': False,
+                'permissions': (('view_supereventgroupobjectpermission', 'Can view superevent groupobjectpermission'),),
             },
         ),
         migrations.CreateModel(
diff --git a/gracedb/superevents/models.py b/gracedb/superevents/models.py
index 0bde34b24..73c52c497 100644
--- a/gracedb/superevents/models.py
+++ b/gracedb/superevents/models.py
@@ -108,6 +108,9 @@ class Superevent(CleanSaveModel, ModelToDictMixin, AutoIncrementModel):
 
     # Booleans
     is_gw = models.BooleanField(default=False)
+    # Because there are multiple actions/permissions involved with exposing a
+    # superevent, we are going to use a database field to track it.
+    is_exposed = models.BooleanField(default=False)
 
     # Meta class --------------------------------------------------------------
     class Meta:
@@ -440,6 +443,12 @@ class Superevent(CleanSaveModel, ModelToDictMixin, AutoIncrementModel):
 class SupereventGroupObjectPermission(GroupObjectPermissionBase):
     content_object = models.ForeignKey(Superevent, on_delete=models.CASCADE)
 
+    class Meta(GroupObjectPermissionBase.Meta):
+        permissions = (
+            ('view_supereventgroupobjectpermission',
+                'Can view superevent groupobjectpermission'),
+        )
+
 class SupereventUserObjectPermission(UserObjectPermissionBase):
     content_object = models.ForeignKey(Superevent, on_delete=models.CASCADE)
 
-- 
GitLab