Project

General

Profile

Development #91460

supprimer ou mettre à jour hobo/multitenant/README

Added by Frédéric Péters about 1 month ago. Updated about 1 month ago.

Status:
Solution proposée
Priority:
Normal
Category:
-
Target version:
-
Start date:
05 June 2024
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

Description

Ce fichier dit notamment :

    INSTALLED_APPS = ('hobo.multitenant',
        'tenant_schemas') + INSTALLED_APPS

mais désormais si on a tenant_schemas dans INSTALLED_APPS ça foire sur authentic parce que 1/ les checks de tenant_schemas sont installés, et 2/ ceux-ci attendent juste le nom classique du module dans TENANT_APPS (pas un chemin vers un AppConfig),

    # Take the app_configs and turn them into *old style* application names.
    # This is what we expect in the SHARED_APPS and TENANT_APPS settings.

Si on a tenant_schemas dans INSTALLED_APPS, on a donc cette erreur qui arrive :

?: (tenant_schemas.E002) You have TENANT_APPS that are not in INSTALLED_APPS
        HINT: ['authentic2.app.Authentic2Config']

(tenant_schemas a été retiré il y a bientôt 10 ans, dans #5703).


Files

History

#1

Updated by Frédéric Péters about 1 month ago

  • Description updated (diff)
#2

Updated by Benjamin Dauvergne about 1 month ago

  • Status changed from Nouveau to Information nécessaire
  • Assignee set to Frédéric Péters

J'ai du mal à comprendre ce ticket à part le fait qu'effectivement cette remarque du README est bien obsolète:

    # Take the app_configs and turn them into *old style* application names.
    # This is what we expect in the SHARED_APPS and TENANT_APPS settings.

Le code dans le routeur de db de tenant_schemas m'indique que les AppConfig sont bien supportés dans ces deux variables. Si c'est suffisant je peux enlever ces lignes.

Si il y a autre chose il me faudrait un exemple complet pour reproduire le problème (là un check sur authentic2-multitenant ne me retourne aucune erreur).

#3

Updated by Frédéric Péters about 1 month ago

  • Status changed from Information nécessaire to Nouveau
  • Assignee deleted (Frédéric Péters)

là un check sur authentic2-multitenant ne me retourne aucune erreur

Oui, parce que tenant_schemas n'est pas dans INSTALLED_APPS, les checks de django-tenant-schemas ne sont pas joués.

Si en local tu ajoutes tenant_schemas dans INSTALLED_APPS, pour que ces checks soient joués, tu obtiens alors le message :

?: (tenant_schemas.E002) You have TENANT_APPS that are not in INSTALLED_APPS
        HINT: ['authentic2.app.Authentic2Config']

(j'ai juste essayé sur mon installation locale)

#4

Updated by Benjamin Dauvergne about 1 month ago

Ben y a une couille quelque part parce que si je le fais à la main ça ne pose pas de problème :

In [3]: settings.INSTALLED_APPS
Out[3]: 
('hobo.agent.authentic2',
 'hobo.multitenant',
 'hobo.agent.common',
 'django.contrib.staticfiles',
 'django.contrib.contenttypes',
 'authentic2.custom_user',
 'django.contrib.auth',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.admin',
 'django.contrib.humanize',
 'django.contrib.postgres',
 'django_select2',
 'django_tables2',
 'mellon',
 'authentic2_auth_fc',
 'authentic2_auth_saml',
 'authentic2_auth_oidc',
 'authentic2_idp_cas',
 'authentic2_idp_oidc',
 'authentic2.nonce',
 'authentic2.saml',
 'authentic2.idp',
 'authentic2.idp.saml',
 'authentic2.attribute_aggregator',
 'authentic2.disco_service',
 'authentic2.manager',
 'authentic2.apps.authenticators',
 'authentic2.apps.journal',
 'authentic2.backends',
 'authentic2.app.Authentic2Config',
 'django_rbac',
 'authentic2.a2_rbac',
 'gadjo',
 'publik_django_templatetags',
 'rest_framework',
 'xstatic.pkg.jquery',
 'xstatic.pkg.jquery_ui',
 'xstatic.pkg.select2',
 'django.forms',
 'hobo.user_name.apps.UserNameConfig',
 'debug_toolbar',
 'pyflame')

In [4]: set(settings.TENANT_APPS) - set(settings.INSTALLED_APPS)
Out[4]: set()

À noter que 'hobo.user_name.apps.UserNameConfig' est aussi une app déclarée via son AppConfig et que visiblement ça ne pose pas de problème, donc c'est plus compliqué.

#5

Updated by Benjamin Dauvergne about 1 month ago

Avec le patch suivant à django-tenant-schemas les checks passent (on a pas/plus de projet concernant django-tenant-schemas je ne sais trop où poser ça proprement).

diff --git a/tenant_schemas/apps.py b/tenant_schemas/apps.py
index 6b16b62..a077932 100644
--- a/tenant_schemas/apps.py
+++ b/tenant_schemas/apps.py
@@ -3,7 +3,7 @@ from django.conf import settings
 from django.core.checks import Critical, Error, Warning, register
 from django.core.files.storage import default_storage
 from tenant_schemas.storage import TenantStorageMixin
-from tenant_schemas.utils import get_public_schema_name, get_tenant_model
+from tenant_schemas.utils import get_public_schema_name, get_tenant_model, app_names

 class TenantSchemaConfig(AppConfig):
@@ -79,14 +79,14 @@ def best_practice(app_configs, **kwargs):
             Warning("SHARED_APPS is empty.",
                     id="tenant_schemas.W002"))

-    if not set(settings.TENANT_APPS).issubset(INSTALLED_APPS):
+    if not set(app_names(settings.TENANT_APPS)).issubset(INSTALLED_APPS):
         delta = set(settings.TENANT_APPS).difference(INSTALLED_APPS)
         errors.append(
             Error("You have TENANT_APPS that are not in INSTALLED_APPS",
                   hint=[a for a in settings.TENANT_APPS if a in delta],
                   id="tenant_schemas.E002"))

-    if not set(settings.SHARED_APPS).issubset(INSTALLED_APPS):
+    if not set(app_names(settings.SHARED_APPS)).issubset(INSTALLED_APPS):
         delta = set(settings.SHARED_APPS).difference(INSTALLED_APPS)
         errors.append(
             Error("You have SHARED_APPS that are not in INSTALLED_APPS",
diff --git a/tenant_schemas/utils.py b/tenant_schemas/utils.py
index 338ebc6..cf0d6bb 100644
--- a/tenant_schemas/utils.py
+++ b/tenant_schemas/utils.py
@@ -116,3 +116,15 @@ def app_labels(apps_list):
     if AppConfig is None:
         return [app.split('.')[-1] for app in apps_list]
     return [AppConfig.create(app).label for app in apps_list]
+
+
+def app_names(apps_list):
+    """ 
+    Returns a list of app labels of the given apps_list, now properly handles
+     new Django 1.7+ application registry.
+
+    https://docs.djangoproject.com/en/1.8/ref/applications/#django.apps.AppConfig.label
+    """ 
+    if AppConfig is None:
+        return [app.split('.')[-1] for app in apps_list]
+    return [AppConfig.create(app).name for app in apps_list]
#6

Updated by Benjamin Dauvergne about 1 month ago

Coté django-tenants pour comparaison, il n'y a juste plus de checks de ce type.

#7

Updated by Benjamin Dauvergne about 1 month ago

Patch soumis à l'ancienne.

Also available in: Atom PDF