Эх сурвалжийг харах

HUE-8530 [connector] Initial DB migrations

Updated:
      vim desktop/core/src/desktop/migrations/0001_initial.py
      -->
      bases=(models.Model, django_prometheus.models.ExportModelOperationsMixin('Document2')),

    Skipped for now:
    ./build/env/bin/hue makemigrations jobsub
    ./build/env/bin/hue makemigrations oozie
    ./build/env/bin/hue makemigrations pig
    ./build/env/bin/hue makemigrations search
Romain 5 жил өмнө
parent
commit
38739187a4

+ 51 - 3
apps/useradmin/src/useradmin/models.py

@@ -63,7 +63,7 @@ from useradmin.conf import DEFAULT_USER_GROUP
 
 
 if ENABLE_ORGANIZATIONS.get():
 if ENABLE_ORGANIZATIONS.get():
   from useradmin.models2 import OrganizationUser as User, OrganizationGroup as Group, Organization, default_organization, get_organization, \
   from useradmin.models2 import OrganizationUser as User, OrganizationGroup as Group, Organization, default_organization, get_organization, \
-      _fitered_queryset, OrganizationHuePermission as HuePermission
+      _fitered_queryset
 else:
 else:
   from django.contrib.auth.models import User, Group
   from django.contrib.auth.models import User, Group
   class Organization(): pass
   class Organization(): pass
@@ -197,8 +197,46 @@ class GroupPermission(models.Model):
   hue_permission = models.ForeignKey("HuePermission")
   hue_permission = models.ForeignKey("HuePermission")
 
 
 
 
-if not ENABLE_ORGANIZATIONS.get():
-  class HuePermission(models.Model):
+if ENABLE_ORGANIZATIONS.get():
+  class OrganizationHuePermissionManager(models.Manager):
+
+    def get_queryset(self):
+      """Make sure to restrict to only organization"""
+      queryset = super(OrganizationHuePermissionManager, self).get_queryset()
+      return _fitered_queryset(queryset)
+
+
+  # TODO: move to external abstract module?
+  class OrganizationHuePermission(models.Model):
+    app = models.CharField(max_length=30)
+    action = models.CharField(max_length=100)
+    description = models.CharField(max_length=255)
+
+    organization = models.ForeignKey(Organization)
+
+    groups = models.ManyToManyField(Group, through=GroupPermission)
+
+    objects = OrganizationHuePermissionManager()
+
+    def __init__(self, *args, **kwargs):
+      self.organization = kwargs.pop('organization', None)
+      super(OrganizationHuePermission, self).__init__(*args, **kwargs)
+
+    def __str__(self):
+      return "%s.%s:%s(%d)" % (self.app, self.action, self.description, self.pk)
+
+    @classmethod
+    def get_app_permission(cls, hue_app, action):
+      return HuePermission.objects.get(app=hue_app, action=action)
+
+    class Meta(object):
+      abstract = True
+
+  class HuePermission(OrganizationHuePermission):
+    pass
+
+else:
+  class HuePermissionBase(models.Model):
     """
     """
     Set of non-object specific permissions that an app supports.
     Set of non-object specific permissions that an app supports.
 
 
@@ -218,6 +256,12 @@ if not ENABLE_ORGANIZATIONS.get():
     def get_app_permission(cls, hue_app, action):
     def get_app_permission(cls, hue_app, action):
       return HuePermission.objects.get(app=hue_app, action=action)
       return HuePermission.objects.get(app=hue_app, action=action)
 
 
+    class Meta(object):
+      abstract = True
+
+  class HuePermission(HuePermissionBase):
+    pass
+
 
 
 def get_default_user_group(**kwargs):
 def get_default_user_group(**kwargs):
   default_user_group = DEFAULT_USER_GROUP.get()
   default_user_group = DEFAULT_USER_GROUP.get()
@@ -257,6 +301,10 @@ def update_app_permissions(**kwargs):
   have models, but nonetheless, "migrate" is typically run when apps are installed.
   have models, but nonetheless, "migrate" is typically run when apps are installed.
   """
   """
   created_tables = connection.introspection.table_names()
   created_tables = connection.introspection.table_names()
+
+  if ENABLE_ORGANIZATIONS.get() and 'useradmin_organization' not in created_tables:
+    return
+
   if u'useradmin_huepermission' in created_tables:  # Check if Useradmin has been installed.
   if u'useradmin_huepermission' in created_tables:  # Check if Useradmin has been installed.
     current = {}
     current = {}
 
 

+ 7 - 30
apps/useradmin/src/useradmin/models2.py

@@ -23,8 +23,6 @@ from django.contrib.auth.models import models, AbstractUser, BaseUserManager
 from django.utils.functional import SimpleLazyObject
 from django.utils.functional import SimpleLazyObject
 from django.utils.translation import ugettext_lazy as _t
 from django.utils.translation import ugettext_lazy as _t
 
 
-from useradmin.models import HuePermission
-
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
 
 
@@ -193,37 +191,16 @@ class OrganizationUser(AbstractUser):
     pass
     pass
 
 
 
 
-class OrganizationHuePermissionManager(models.Manager):
-
-  def get_queryset(self):
-    """Make sure to restrict to only organization"""
-    queryset = super(HuePermissionManager, self).get_queryset()
-    return _fitered_queryset(queryset)
-
-
-class OrganizationHuePermission(HuePermission):
-
-  organization = models.ForeignKey(Organization)
-
-  objects = OrganizationHuePermissionManager()
-
-  def __init__(self):
-    super(OrganizationGroupManager, self)
-  OrganizationHuePermission
-  HuePermission
-
-
-def _fitered_queryset(queryset, by_owner=False, by_group):
+def _fitered_queryset(queryset, by_owner=False):
   request = CrequestMiddleware.get_request()
   request = CrequestMiddleware.get_request()
 
 
-  if request and hasattr(request, 'user') and type(request.user._wrapped) is not object:  # Avoid infinite recursion
+  # Avoid infinite recursion on very first retrieval of the user
+  if request and hasattr(request, 'user') and hasattr(request.user, '_wrapped') and type(request.user._wrapped) is not object and request.user.is_authenticated():
     if by_owner:
     if by_owner:
-      queryset = queryset.filter(
-        owner__organization=request.user.organization
-      )
+      filters = {'owner__organization': request.user.organization}
     else:
     else:
-      queryset = queryset.filter(
-        organization=request.user.organization
-      )
+      filters = {'organization': request.user.organization}
+
+    queryset = queryset.filter(**filters)
 
 
   return queryset
   return queryset

+ 9 - 1
apps/useradmin/src/useradmin/org_migrations/0001_initial.py

@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2020-01-02 06:08
+# Generated by Django 1.11.20 on 2020-01-12 14:53
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 from django.conf import settings
 from django.conf import settings
@@ -57,6 +57,9 @@ class Migration(migrations.Migration):
                 ('action', models.CharField(max_length=100)),
                 ('action', models.CharField(max_length=100)),
                 ('description', models.CharField(max_length=255)),
                 ('description', models.CharField(max_length=255)),
             ],
             ],
+            options={
+                'abstract': False,
+            },
         ),
         ),
         migrations.CreateModel(
         migrations.CreateModel(
             name='LdapGroup',
             name='LdapGroup',
@@ -114,6 +117,11 @@ class Migration(migrations.Migration):
             name='groups',
             name='groups',
             field=models.ManyToManyField(through='useradmin.GroupPermission', to='useradmin.OrganizationGroup'),
             field=models.ManyToManyField(through='useradmin.GroupPermission', to='useradmin.OrganizationGroup'),
         ),
         ),
+        migrations.AddField(
+            model_name='huepermission',
+            name='organization',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='useradmin.Organization'),
+        ),
         migrations.AddField(
         migrations.AddField(
             model_name='grouppermission',
             model_name='grouppermission',
             name='group',
             name='group',

+ 2 - 56
desktop/core/src/desktop/org_migrations/0001_initial.py

@@ -1,11 +1,9 @@
 # -*- coding: utf-8 -*-
 # -*- coding: utf-8 -*-
-# Generated by Django 1.11.20 on 2020-01-02 05:57
+# Generated by Django 1.11.20 on 2020-01-12 14:53
 from __future__ import unicode_literals
 from __future__ import unicode_literals
 
 
 import desktop.models
 import desktop.models
-from django.conf import settings
 from django.db import migrations, models
 from django.db import migrations, models
-import django.db.models.deletion
 import django_prometheus.models
 import django_prometheus.models
 
 
 
 
@@ -14,9 +12,6 @@ class Migration(migrations.Migration):
     initial = True
     initial = True
 
 
     dependencies = [
     dependencies = [
-        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
-        ('contenttypes', '0002_remove_content_type_name'),
-        ('useradmin', '__first__'),
     ]
     ]
 
 
     operations = [
     operations = [
@@ -27,8 +22,6 @@ class Migration(migrations.Migration):
                 ('app', models.CharField(db_index=True, help_text='App that this configuration belongs to.', max_length=32)),
                 ('app', models.CharField(db_index=True, help_text='App that this configuration belongs to.', max_length=32)),
                 ('properties', models.TextField(default='[]', help_text='JSON-formatted default properties values.')),
                 ('properties', models.TextField(default='[]', help_text='JSON-formatted default properties values.')),
                 ('is_default', models.BooleanField(db_index=True, default=False)),
                 ('is_default', models.BooleanField(db_index=True, default=False)),
-                ('groups', models.ManyToManyField(db_index=True, db_table='defaultconfiguration_groups', to='useradmin.OrganizationGroup')),
-                ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
             ],
             options={
             options={
                 'ordering': ['app', '-is_default', 'user'],
                 'ordering': ['app', '-is_default', 'user'],
@@ -44,8 +37,6 @@ class Migration(migrations.Migration):
                 ('version', models.SmallIntegerField(default=1, verbose_name='Schema version')),
                 ('version', models.SmallIntegerField(default=1, verbose_name='Schema version')),
                 ('extra', models.TextField(default='')),
                 ('extra', models.TextField(default='')),
                 ('object_id', models.PositiveIntegerField()),
                 ('object_id', models.PositiveIntegerField()),
-                ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
-                ('owner', models.ForeignKey(help_text='User who can own the job.', on_delete=django.db.models.deletion.CASCADE, related_name='doc_owner', to=settings.AUTH_USER_MODEL, verbose_name='Owner')),
             ],
             ],
         ),
         ),
         migrations.CreateModel(
         migrations.CreateModel(
@@ -64,14 +55,12 @@ class Migration(migrations.Migration):
                 ('is_history', models.BooleanField(db_index=True, default=False)),
                 ('is_history', models.BooleanField(db_index=True, default=False)),
                 ('is_managed', models.BooleanField(db_index=True, default=False, verbose_name='If managed under the cover by Hue and never by the user')),
                 ('is_managed', models.BooleanField(db_index=True, default=False, verbose_name='If managed under the cover by Hue and never by the user')),
                 ('is_trashed', models.NullBooleanField(db_index=True, default=False, verbose_name='True if trashed')),
                 ('is_trashed', models.NullBooleanField(db_index=True, default=False, verbose_name='True if trashed')),
-                ('dependencies', models.ManyToManyField(db_index=True, related_name='dependents', to='desktop.Document2')),
-                ('owner', models.ForeignKey(help_text='Creator.', on_delete=django.db.models.deletion.CASCADE, related_name='doc2_owner', to=settings.AUTH_USER_MODEL, verbose_name='Owner')),
-                ('parent_directory', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='desktop.Document2')),
             ],
             ],
             options={
             options={
                 'ordering': ['-last_modified', 'name'],
                 'ordering': ['-last_modified', 'name'],
             },
             },
             bases=(models.Model, django_prometheus.models.ExportModelOperationsMixin('Document2')),
             bases=(models.Model, django_prometheus.models.ExportModelOperationsMixin('Document2')),
+            #bases=(models.Model, django_prometheus.models.Mixin),
         ),
         ),
         migrations.CreateModel(
         migrations.CreateModel(
             name='Document2Permission',
             name='Document2Permission',
@@ -79,9 +68,6 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('perms', models.CharField(choices=[('read', 'read'), ('write', 'write'), ('comment', 'comment'), ('link_read', 'link read'), ('link_write', 'link write')], db_index=True, default='read', max_length=10)),
                 ('perms', models.CharField(choices=[('read', 'read'), ('write', 'write'), ('comment', 'comment'), ('link_read', 'link read'), ('link_write', 'link write')], db_index=True, default='read', max_length=10)),
                 ('is_link_on', models.BooleanField(default=False)),
                 ('is_link_on', models.BooleanField(default=False)),
-                ('doc', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='desktop.Document2')),
-                ('groups', models.ManyToManyField(db_index=True, db_table='documentpermission2_groups', to='useradmin.OrganizationGroup')),
-                ('users', models.ManyToManyField(db_index=True, db_table='documentpermission2_users', to=settings.AUTH_USER_MODEL)),
             ],
             ],
         ),
         ),
         migrations.CreateModel(
         migrations.CreateModel(
@@ -89,9 +75,6 @@ class Migration(migrations.Migration):
             fields=[
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('perms', models.CharField(choices=[('read', 'read'), ('write', 'write')], default='read', max_length=10)),
                 ('perms', models.CharField(choices=[('read', 'read'), ('write', 'write')], default='read', max_length=10)),
-                ('doc', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='desktop.Document')),
-                ('groups', models.ManyToManyField(db_index=True, db_table='documentpermission_groups', to='useradmin.OrganizationGroup')),
-                ('users', models.ManyToManyField(db_index=True, db_table='documentpermission_users', to=settings.AUTH_USER_MODEL)),
             ],
             ],
         ),
         ),
         migrations.CreateModel(
         migrations.CreateModel(
@@ -99,7 +82,6 @@ class Migration(migrations.Migration):
             fields=[
             fields=[
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('tag', models.SlugField()),
                 ('tag', models.SlugField()),
-                ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
             ],
         ),
         ),
         migrations.CreateModel(
         migrations.CreateModel(
@@ -116,42 +98,6 @@ class Migration(migrations.Migration):
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                 ('key', models.CharField(max_length=20)),
                 ('key', models.CharField(max_length=20)),
                 ('value', models.TextField(max_length=4096)),
                 ('value', models.TextField(max_length=4096)),
-                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
             ],
         ),
         ),
-        migrations.AddField(
-            model_name='document',
-            name='tags',
-            field=models.ManyToManyField(db_index=True, to='desktop.DocumentTag'),
-        ),
-        migrations.CreateModel(
-            name='Directory',
-            fields=[
-            ],
-            options={
-                'proxy': True,
-                'indexes': [],
-            },
-            bases=('desktop.document2',),
-        ),
-        migrations.AlterUniqueTogether(
-            name='documenttag',
-            unique_together=set([('owner', 'tag')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='documentpermission',
-            unique_together=set([('doc', 'perms')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='document2permission',
-            unique_together=set([('doc', 'perms')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='document2',
-            unique_together=set([('uuid', 'version', 'is_history')]),
-        ),
-        migrations.AlterUniqueTogether(
-            name='document',
-            unique_together=set([('content_type', 'object_id')]),
-        ),
     ]
     ]

+ 132 - 0
desktop/core/src/desktop/org_migrations/0002_auto_20200112_0653.py

@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.20 on 2020-01-12 14:53
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('contenttypes', '0002_remove_content_type_name'),
+        ('useradmin', '0001_initial'),
+        ('desktop', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='userpreferences',
+            name='user',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='documenttag',
+            name='owner',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='documentpermission',
+            name='doc',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='desktop.Document'),
+        ),
+        migrations.AddField(
+            model_name='documentpermission',
+            name='groups',
+            field=models.ManyToManyField(db_index=True, db_table='documentpermission_groups', to='useradmin.OrganizationGroup'),
+        ),
+        migrations.AddField(
+            model_name='documentpermission',
+            name='users',
+            field=models.ManyToManyField(db_index=True, db_table='documentpermission_users', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='document2permission',
+            name='doc',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='desktop.Document2'),
+        ),
+        migrations.AddField(
+            model_name='document2permission',
+            name='groups',
+            field=models.ManyToManyField(db_index=True, db_table='documentpermission2_groups', to='useradmin.OrganizationGroup'),
+        ),
+        migrations.AddField(
+            model_name='document2permission',
+            name='users',
+            field=models.ManyToManyField(db_index=True, db_table='documentpermission2_users', to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.AddField(
+            model_name='document2',
+            name='dependencies',
+            field=models.ManyToManyField(db_index=True, related_name='dependents', to='desktop.Document2'),
+        ),
+        migrations.AddField(
+            model_name='document2',
+            name='owner',
+            field=models.ForeignKey(help_text='Creator.', on_delete=django.db.models.deletion.CASCADE, related_name='doc2_owner', to=settings.AUTH_USER_MODEL, verbose_name='Owner'),
+        ),
+        migrations.AddField(
+            model_name='document2',
+            name='parent_directory',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='desktop.Document2'),
+        ),
+        migrations.AddField(
+            model_name='document',
+            name='content_type',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'),
+        ),
+        migrations.AddField(
+            model_name='document',
+            name='owner',
+            field=models.ForeignKey(help_text='User who can own the job.', on_delete=django.db.models.deletion.CASCADE, related_name='doc_owner', to=settings.AUTH_USER_MODEL, verbose_name='Owner'),
+        ),
+        migrations.AddField(
+            model_name='document',
+            name='tags',
+            field=models.ManyToManyField(db_index=True, to='desktop.DocumentTag'),
+        ),
+        migrations.AddField(
+            model_name='defaultconfiguration',
+            name='groups',
+            field=models.ManyToManyField(db_index=True, db_table='defaultconfiguration_groups', to='useradmin.OrganizationGroup'),
+        ),
+        migrations.AddField(
+            model_name='defaultconfiguration',
+            name='user',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
+        ),
+        migrations.CreateModel(
+            name='Directory',
+            fields=[
+            ],
+            options={
+                'proxy': True,
+                'indexes': [],
+            },
+            bases=('desktop.document2',),
+        ),
+        migrations.AlterUniqueTogether(
+            name='documenttag',
+            unique_together=set([('owner', 'tag')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='documentpermission',
+            unique_together=set([('doc', 'perms')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='document2permission',
+            unique_together=set([('doc', 'perms')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='document2',
+            unique_together=set([('uuid', 'version', 'is_history')]),
+        ),
+        migrations.AlterUniqueTogether(
+            name='document',
+            unique_together=set([('content_type', 'object_id')]),
+        ),
+    ]