فهرست منبع

[connectors] Offer a minimal natural key mapping

Romain Rigaux 4 سال پیش
والد
کامیت
d8ac372643
2فایلهای تغییر یافته به همراه23 افزوده شده و 6 حذف شده
  1. 6 3
      apps/useradmin/src/useradmin/organization.py
  2. 17 3
      desktop/core/src/desktop/lib/connectors/models.py

+ 6 - 3
apps/useradmin/src/useradmin/organization.py

@@ -103,6 +103,9 @@ if ENABLE_ORGANIZATIONS.get():
     def __str__(self):
       return self.name or self.domain
 
+    def natural_key(self):
+      return (self.name,)
+
 
 class OrganizationGroupManager(models.Manager):
 
@@ -111,9 +114,6 @@ class OrganizationGroupManager(models.Manager):
     queryset = super(OrganizationGroupManager, self).get_queryset()
     return _fitered_queryset(queryset)
 
-  def natural_key(self):
-    return (self.organization, self.name,)
-
 
 if ENABLE_ORGANIZATIONS.get():
   class OrganizationGroup(models.Model):
@@ -143,6 +143,9 @@ if ENABLE_ORGANIZATIONS.get():
     def __str__(self):
       return '%s @ %s' % (self.name, self.organization)
 
+    def natural_key(self):
+      return (self.organization, self.name,)
+
 
 class UserManager(BaseUserManager):
   """Define a model manager for User model with no username field."""

+ 17 - 3
desktop/core/src/desktop/lib/connectors/models.py

@@ -80,8 +80,8 @@ if ENABLE_ORGANIZATIONS.get():
       queryset = super(ConnectorManager, self).get_queryset()
       return _fitered_queryset(queryset)
 
-    def natural_key(self):
-      return (self.organization, self.name,)
+    def get_by_natural_key(self, dialect, interface, organization):
+      return self.get(dialect=dialect, interface=interface, organization__name=organization)
 
   class Connector(BaseConnector):
     organization = models.ForeignKey('useradmin.Organization', on_delete=models.CASCADE)
@@ -99,8 +99,22 @@ if ENABLE_ORGANIZATIONS.get():
 
     def __str__(self):
       return '%s (%s) @ %s' % (self.name, self.dialect, self.organization)
+
+    def natural_key(self):
+      return (self.dialect, self.interface) + self.organization.natural_key()
 else:
-  class Connector(BaseConnector): pass
+  class ConnectorManager(models.Manager):
+
+    def get_by_natural_key(self, dialect, interface):
+      return self.get(dialect=dialect, interface=interface)
+
+  class Connector(BaseConnector):
+
+    objects = ConnectorManager()
+
+    def natural_key(self):
+      # Note: duplicates are still possible without key on the name
+      return (self.dialect, self.interface)
 
 
 def _get_installed_connectors(category=None, categories=None, dialect=None, interface=None, user=None, connector_id=None):