Projet

Général

Profil

0001-multitenant-add-a-command-to-create-tenant-s-by-host.patch

Jérôme Schneider, 17 octobre 2014 17:16

Télécharger (2,48 ko)

Voir les différences:

Subject: [PATCH] multitenant: add a command to create tenant(s) by hostname

Closes #5759
 .../management/commands/create_tenant.py           | 41 ++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 entrouvert/djommon/multitenant/management/commands/create_tenant.py
entrouvert/djommon/multitenant/management/commands/create_tenant.py
1
import os
2

  
3
from django.db import connection
4
from django.core.management.base import CommandError, BaseCommand
5

  
6
from entrouvert.djommon.multitenant.middleware import TenantMiddleware
7

  
8
class Command(BaseCommand):
9
    help = "Create tenant(s) by hostname(s)"
10

  
11
    def handle(self, *args, **options):
12
        verbosity = int(options.get('verbosity'))
13
        if not args:
14
            raise CommandError("you must give at least one tenant hostname")
15

  
16
        for arg in args:
17
            hostname = arg
18
            tenant_name = TenantMiddleware.hostname2schema(hostname)
19
            try:
20
                tenant_base = TenantMiddleware.base()
21
            except AttributeError:
22
                raise CommandError("you must configure TENANT_BASE in your settings")
23
            if not tenant_base:
24
                raise CommandError("you must set a value to TENANT_BASE in your settings")
25
            tenant_dir = os.path.join(tenant_base,
26
                    tenant_name)
27
            if not os.path.exists(tenant_dir):
28
                os.mkdir(tenant_dir, 0755)
29
            for folder in ('media', 'static', 'templates'):
30
                path = os.path.join(tenant_dir, folder)
31
                if not os.path.exists(path):
32
                    os.mkdir(path, 0755)
33
            connection.set_schema_to_public()
34
            tenant = TenantMiddleware.get_tenant_by_hostname(hostname)
35
            if verbosity >= 1:
36
                print
37
                print self.style.NOTICE("=== Creating schema ") \
38
                    + self.style.SQL_TABLE(tenant.schema_name)
39
            if not tenant.create_schema(check_if_exists=True):
40
                print self.style.ERROR(' Nothing to do: %r already exist' % hostname)
41
    
0
-