Browse Source

HUE-8530 [organization] Remove need of orm_user_lookup util

Romain 5 years ago
parent
commit
0762291862

+ 3 - 3
apps/useradmin/src/useradmin/api.py

@@ -21,7 +21,7 @@ from desktop.decorators import check_superuser_permission
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.i18n import smart_unicode
 from desktop.lib.i18n import smart_unicode
 
 
-from useradmin.models import User, Group, orm_user_lookup
+from useradmin.models import User, Group
 
 
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
@@ -64,7 +64,7 @@ def get_users(request):
     users = users.filter(is_active=True)
     users = users.filter(is_active=True)
 
 
   if username:
   if username:
-    users = users.filter({orm_user_lookup(): username})
+    users = users.filter(username=username)
 
 
   if groups:
   if groups:
     group_ids = []
     group_ids = []
@@ -77,7 +77,7 @@ def get_users(request):
         LOG.exception("Failed to filter by group, group with name %s not found." % groupname)
         LOG.exception("Failed to filter by group, group with name %s not found." % groupname)
     users = users.filter(groups__in=group_ids)
     users = users.filter(groups__in=group_ids)
 
 
-  users = users.order_by(orm_user_lookup())
+  users = users.order_by('username')
 
 
   for user in users:
   for user in users:
     user = {
     user = {

+ 3 - 5
apps/useradmin/src/useradmin/forms.py

@@ -31,7 +31,7 @@ from desktop.lib.django_util import get_username_re_rule, get_groupname_re_rule
 from desktop.settings import LANGUAGES
 from desktop.settings import LANGUAGES
 
 
 from useradmin.hue_password_policy import hue_get_password_validators
 from useradmin.hue_password_policy import hue_get_password_validators
-from useradmin.models import GroupPermission, HuePermission, get_default_user_group, User, Group, default_organization, Organization, orm_user_lookup
+from useradmin.models import GroupPermission, HuePermission, get_default_user_group, User, Group, default_organization, Organization
 
 
 
 
 LOG = logging.getLogger(__name__)
 LOG = logging.getLogger(__name__)
@@ -434,17 +434,15 @@ class GroupEditForm(forms.ModelForm):
   def __init__(self, *args, **kwargs):
   def __init__(self, *args, **kwargs):
     super(GroupEditForm, self).__init__(*args, **kwargs)
     super(GroupEditForm, self).__init__(*args, **kwargs)
 
 
-    ordering_field = orm_user_lookup()
-
     if self.instance.id:
     if self.instance.id:
       self.fields['name'].widget.attrs['readonly'] = True
       self.fields['name'].widget.attrs['readonly'] = True
-      initial_members = User.objects.filter(groups=self.instance).order_by(ordering_field)
+      initial_members = User.objects.filter(groups=self.instance).order_by('username')
       initial_perms = HuePermission.objects.filter(grouppermission__group=self.instance).order_by('app', 'description')
       initial_perms = HuePermission.objects.filter(grouppermission__group=self.instance).order_by('app', 'description')
     else:
     else:
       initial_members = []
       initial_members = []
       initial_perms = []
       initial_perms = []
 
 
-    self.fields["members"] = _make_model_field(_("members"), initial_members, User.objects.order_by(ordering_field))
+    self.fields["members"] = _make_model_field(_("members"), initial_members, User.objects.order_by('username'))
     self.fields["permissions"] = _make_model_field(_("permissions"), initial_perms, HuePermission.objects.order_by('app', 'description'))
     self.fields["permissions"] = _make_model_field(_("permissions"), initial_perms, HuePermission.objects.order_by('app', 'description'))
     if 'organization' in self.fields:
     if 'organization' in self.fields:
       self.fields['organization'] = forms.ChoiceField(choices=((default_organization().id, default_organization()),), initial=default_organization())
       self.fields['organization'] = forms.ChoiceField(choices=((default_organization().id, default_organization()),), initial=default_organization())

+ 0 - 4
apps/useradmin/src/useradmin/models.py

@@ -458,7 +458,3 @@ def install_sample_user(django_user=None):
     LOG.exception('Failed to create home directory for user %s: %s' % (django_username, str(ex)))
     LOG.exception('Failed to create home directory for user %s: %s' % (django_username, str(ex)))
 
 
   return user
   return user
-
-
-def orm_user_lookup():
-  return 'email' if ENABLE_ORGANIZATIONS.get() else 'username'

+ 13 - 0
apps/useradmin/src/useradmin/models2.py

@@ -118,6 +118,19 @@ class UserManager(BaseUserManager):
     queryset = super(UserManager, self).get_queryset()
     queryset = super(UserManager, self).get_queryset()
     return _fitered_queryset(queryset)
     return _fitered_queryset(queryset)
 
 
+  def get(self, *args, **kwargs):
+    if kwargs.get('username'):
+      kwargs['email'] = kwargs.pop('username')
+
+    return super(UserManager, self).get(*args, **kwargs)
+
+  def order_by(self, *args, **kwargs):
+    if 'username' in args:
+      args.remove('username')
+      args.append('email')
+
+    return super(UserManager, self).order_by(*args, **kwargs)
+
   def _create_user(self, email, password, **extra_fields):
   def _create_user(self, email, password, **extra_fields):
     """Create and save a User with the given email and password."""
     """Create and save a User with the given email and password."""
     if not email:
     if not email:

+ 3 - 5
apps/useradmin/src/useradmin/views.py

@@ -52,7 +52,7 @@ from useradmin.forms import SyncLdapUsersGroupsForm, AddLdapGroupsForm, AddLdapU
   PermissionsEditForm, GroupEditForm, SuperUserChangeForm, validate_username, validate_first_name, \
   PermissionsEditForm, GroupEditForm, SuperUserChangeForm, validate_username, validate_first_name, \
   validate_last_name, PasswordChangeForm
   validate_last_name, PasswordChangeForm
 from useradmin.ldap_access import LdapBindException, LdapSearchException
 from useradmin.ldap_access import LdapBindException, LdapSearchException
-from useradmin.models import HuePermission, UserProfile, LdapGroup, get_profile, get_default_user_group, User, Group, orm_user_lookup
+from useradmin.models import HuePermission, UserProfile, LdapGroup, get_profile, get_default_user_group, User, Group
 
 
 if sys.version_info[0] > 2:
 if sys.version_info[0] > 2:
   unicode = str
   unicode = str
@@ -462,10 +462,8 @@ def edit_group(request, name=None):
     if form.is_valid():
     if form.is_valid():
       form.save()
       form.save()
 
 
-      value_field = orm_user_lookup()
-
       if name is not None:
       if name is not None:
-        usernames = instance.user_set.all().values_list(value_field, flat=True)
+        usernames = instance.user_set.all().values_list('username', flat=True)
         request.audit = {
         request.audit = {
           'operation': 'EDIT_GROUP',
           'operation': 'EDIT_GROUP',
           'operationText': 'Edited Group: %s, with member(s): %s' % (
           'operationText': 'Edited Group: %s, with member(s): %s' % (
@@ -474,7 +472,7 @@ def edit_group(request, name=None):
         }
         }
       else:
       else:
         user_ids = request.POST.getlist('members', [])
         user_ids = request.POST.getlist('members', [])
-        usernames = User.objects.filter(pk__in=user_ids).values_list(value_field, flat=True)
+        usernames = User.objects.filter(pk__in=user_ids).values_list('username', flat=True)
         request.audit = {
         request.audit = {
           'operation': 'CREATE_GROUP',
           'operation': 'CREATE_GROUP',
           'operationText': 'Created Group: %s, with member(s): %s' % (request.POST.get('name', ''), ', '.join(usernames))
           'operationText': 'Created Group: %s, with member(s): %s' % (request.POST.get('name', ''), ', '.join(usernames))

+ 4 - 3
desktop/core/src/desktop/auth/decorators_tests.py

@@ -25,7 +25,8 @@ from desktop.auth.decorators import admin_required
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.exceptions_renderable import PopupException
 from desktop.lib.exceptions_renderable import PopupException
 
 
-from useradmin.models import User, Group, Organization, orm_user_lookup
+from useradmin.models import User, Group, Organization
+
 
 
 if sys.version_info[0] > 2:
 if sys.version_info[0] > 2:
   from unittest.mock import patch, Mock
   from unittest.mock import patch, Mock
@@ -42,10 +43,10 @@ class TestDecorator(unittest.TestCase):
 
 
 
 
   def test_user_group(self):
   def test_user_group(self):
-    request = Mock(user=User.objects.get(**{orm_user_lookup(): 'admin'}))
+    request = Mock(user=User.objects.get(username='admin'))
     hello(request)
     hello(request)
 
 
-    request = Mock(user=User.objects.get(**{orm_user_lookup(): 'joe'}))
+    request = Mock(user=User.objects.get(username='joe'))
     assert_raises(PopupException, hello, request)
     assert_raises(PopupException, hello, request)
 
 
 
 

+ 2 - 0
desktop/core/src/desktop/lib/connectors/tests.py

@@ -29,6 +29,7 @@ from desktop.lib.django_test_util import make_logged_in_client
 
 
 from useradmin.models import User, update_app_permissions, get_default_user_group
 from useradmin.models import User, update_app_permissions, get_default_user_group
 
 
+
 if sys.version_info[0] > 2:
 if sys.version_info[0] > 2:
   from unittest.mock import patch, Mock
   from unittest.mock import patch, Mock
 else:
 else:
@@ -52,6 +53,7 @@ class TestConnectors(object):
     assert_equal(200, response.status_code)
     assert_equal(200, response.status_code)
 
 
 
 
+
 class TestConnectorListing(unittest.TestCase):
 class TestConnectorListing(unittest.TestCase):
 
 
   def setUp(self):
   def setUp(self):

+ 4 - 5
desktop/core/src/desktop/lib/django_test_util.py

@@ -22,7 +22,7 @@ import json
 import django.test.client
 import django.test.client
 import nose.tools
 import nose.tools
 
 
-from useradmin.models import User, Group, default_organization, orm_user_lookup
+from useradmin.models import User, Group, default_organization
 
 
 from desktop.conf import ENABLE_ORGANIZATIONS
 from desktop.conf import ENABLE_ORGANIZATIONS
 
 
@@ -57,8 +57,7 @@ def make_logged_in_client(username="test", password="test", is_superuser=True, r
     username = username + '@gethue.com'
     username = username + '@gethue.com'
 
 
   try:
   try:
-    lookup = {orm_user_lookup(): username}
-    user = User.objects.get(**lookup)
+    user = User.objects.get(username=username)
     if recreate:
     if recreate:
       user.delete()
       user.delete()
       raise User.DoesNotExist
       raise User.DoesNotExist
@@ -117,8 +116,8 @@ def assert_similar_pages(first, second, ratio=0.9, msg=None):
   Asserts that most of the lines (90% by default) in the two pages are identical,
   Asserts that most of the lines (90% by default) in the two pages are identical,
   ignoring leading/trailing spaces.
   ignoring leading/trailing spaces.
   """
   """
-  lines_a = set([ l.strip() for l in first.split('\n') ])
-  lines_b = set([ l.strip() for l in second.split('\n') ])
+  lines_a = set([l.strip() for l in first.split('\n')])
+  lines_b = set([l.strip() for l in second.split('\n')])
   common = lines_a.intersection(lines_b)
   common = lines_a.intersection(lines_b)
   similarity = 1.0 * len(common) / max(len(lines_a), len(lines_b))
   similarity = 1.0 * len(common) / max(len(lines_a), len(lines_b))
   nose.tools.assert_true(similarity >= ratio, msg)
   nose.tools.assert_true(similarity >= ratio, msg)

+ 2 - 4
desktop/core/src/desktop/lib/fs/proxyfs.py

@@ -22,11 +22,10 @@ from builtins import object
 import logging
 import logging
 import sys
 import sys
 
 
-from useradmin.models import User, orm_user_lookup
-
 from desktop.auth.backend import is_admin
 from desktop.auth.backend import is_admin
 from desktop.conf import DEFAULT_USER, ENABLE_ORGANIZATIONS
 from desktop.conf import DEFAULT_USER, ENABLE_ORGANIZATIONS
 
 
+
 if sys.version_info[0] > 2:
 if sys.version_info[0] > 2:
   from urllib.parse import urlparse as lib_urlparse
   from urllib.parse import urlparse as lib_urlparse
 else:
 else:
@@ -77,8 +76,7 @@ class ProxyFS(object):
       # If not filebrowser_action (hdfs) then handle permission via doas else check permission in hue
       # If not filebrowser_action (hdfs) then handle permission via doas else check permission in hue
       if not filebrowser_action:
       if not filebrowser_action:
         return True
         return True
-      lookup = {orm_user_lookup(): self.getuser()}
-      user = rewrite_user(User.objects.get(**lookup))
+      user = rewrite_user(User.objects.get(username=self.getuser()))
       return user.is_authenticated() and user.is_active and (is_admin(user) or not filebrowser_action or user.has_hue_permission(action=filebrowser_action, app="filebrowser"))
       return user.is_authenticated() and user.is_active and (is_admin(user) or not filebrowser_action or user.has_hue_permission(action=filebrowser_action, app="filebrowser"))
     except User.DoesNotExist:
     except User.DoesNotExist:
       LOG.exception('proxyfs.has_access()')
       LOG.exception('proxyfs.has_access()')

+ 1 - 3
desktop/libs/notebook/src/notebook/tasks.py

@@ -41,7 +41,6 @@ from desktop.conf import TASK_SERVER
 from desktop.lib import export_csvxls, fsmanager
 from desktop.lib import export_csvxls, fsmanager
 from desktop.models import Document2
 from desktop.models import Document2
 from desktop.settings import CACHES_CELERY_KEY, CACHES_CELERY_QUERY_RESULT_KEY
 from desktop.settings import CACHES_CELERY_KEY, CACHES_CELERY_QUERY_RESULT_KEY
-from useradmin.models import User, orm_user_lookup
 
 
 from notebook.api import _get_statement
 from notebook.api import _get_statement
 from notebook.connectors.base import get_api, QueryExpired, ExecutionWrapper
 from notebook.connectors.base import get_api, QueryExpired, ExecutionWrapper
@@ -152,8 +151,7 @@ def run_sync_query(doc_id, user):
   # Add variable substitution
   # Add variable substitution
   # Send notifications: done/on failure
   # Send notifications: done/on failure
   if type(user) is str:
   if type(user) is str:
-    lookup = {orm_user_lookup(): user}
-    user = User.objects.get(**lookup)
+    user = User.objects.get(username=user)
     user = rewrite_user(user)
     user = rewrite_user(user)
 
 
   query_document = Document2.objects.get_by_uuid(user=user, uuid=doc_id)
   query_document = Document2.objects.get_by_uuid(user=user, uuid=doc_id)