Add datasets module.
authorRaphaël Barrois <raphael.barrois@polyconseil.fr>
Fri, 29 Mar 2013 20:29:29 +0000 (21:29 +0100)
committerRaphaël Barrois <raphael.barrois@polyconseil.fr>
Fri, 29 Mar 2013 20:29:29 +0000 (21:29 +0100)
xnet/accounts/models.py
xnet/datasets/__init__.py [new file with mode: 0644]
xnet/datasets/dev.py [new file with mode: 0644]
xnet/datasets/management/__init__.py [new file with mode: 0644]
xnet/datasets/management/commands/__init__.py [new file with mode: 0644]
xnet/datasets/management/commands/loaddatasets.py [new file with mode: 0644]
xnet/datasets/models.py [new file with mode: 0644]
xnet/datasets/tests.py [new file with mode: 0644]
xnet/settings/dev.py

index 61702da..2deb4ed 100644 (file)
@@ -58,7 +58,7 @@ class XGroup(models.Model):
     name = models.CharField(max_length=100, verbose_name=u"nom", unique=True)
     short = models.SlugField(max_length=10, verbose_name=u"nom court", unique=True)
     kind = models.CharField(max_length=10, choices=KIND_CHOICES, verbose_name=u"type")
-    domain = models.CharField(max_length=20, choices=DOMAIN_CHOICES, verbose_name=u"domaine")
+    domain = models.CharField(max_length=20, choices=DOMAIN_CHOICES, blank=True, verbose_name=u"domaine")
 
     dns = models.CharField(max_length=128, verbose_name=u"dns domain", blank=True)
 
diff --git a/xnet/datasets/__init__.py b/xnet/datasets/__init__.py
new file mode 100644 (file)
index 0000000..7b3421e
--- /dev/null
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+
+import datetime
+
+from django.utils import timezone
+
+
+class BaseSetup(object):
+
+    requires = ()
+
+    def __init__(self, verbosity=0, now=None):
+        self.verbosity = verbosity
+        if now is None:
+            now = timezone.now()
+        self.now = now
+
+    def run(self):
+        raise NotImplementedError
diff --git a/xnet/datasets/dev.py b/xnet/datasets/dev.py
new file mode 100644 (file)
index 0000000..27221fb
--- /dev/null
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+
+from . import BaseSetup
+
+from xnet.accounts import factories as accounts_factories
+from xnet.accounts import models as accounts_models
+
+
+class Setup(BaseSetup):
+
+    def run(self):
+        self.setup_groups()
+
+    def setup_groups(self):
+        accounts_factories.XGroupFactory(
+            name='Polytechnique.org',
+            short='xorg',
+            kind=accounts_models.XGroup.KIND_INSTIT,
+            domain='',
+            web='https://www.polytechnique.org/',
+        )
+
+        accounts_factories.XGroupFactory(
+            name='AX',
+            short='ax',
+            kind=accounts_models.XGroup.KIND_INSTIT,
+            domain='',
+            web='https://www.polytechniciens.com/',
+        )
+
+        accounts_factories.XGroupFactory(
+            name='École polytechnique',
+            short='ecole',
+            kind=accounts_models.XGroup.KIND_INSTIT,
+            domain='',
+            web='https://www.polytechnique.edu/',
+        )
+
+        accounts_factories.XGroupFactory(
+            name='FaëriX',
+            short='faerix',
+            kind=accounts_models.XGroup.KIND_BINET,
+            domain=accounts_models.XGroup.DOMAIN_LEISURE,
+            web='http://www.faerix.net/',
+        )
+
+        accounts_factories.XGroupFactory(
+            name="Bal de l'X",
+            short='bal',
+            kind=accounts_models.XGroup.KIND_BINET,
+            domain=accounts_models.XGroup.DOMAIN_EVENTS,
+            web='https://www.baldelx.com/',
+        )
diff --git a/xnet/datasets/management/__init__.py b/xnet/datasets/management/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/xnet/datasets/management/commands/__init__.py b/xnet/datasets/management/commands/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/xnet/datasets/management/commands/loaddatasets.py b/xnet/datasets/management/commands/loaddatasets.py
new file mode 100644 (file)
index 0000000..75c3b66
--- /dev/null
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+
+"""Load a specific dataset into the database."""
+
+from django.core import management
+from django.db import transaction
+from django.utils import importlib
+
+
+class Command(management.BaseCommand):
+    args = '<dataset_name dataset_name ...>'
+    help = 'Load a specific dataset into the database.'
+
+    def handle(self, *dataset_names, **options):
+        if not dataset_names:
+            raise ValueError("At least one dataset name must be provided.")
+        for name in dataset_names:
+            self.load(name, **options)
+
+    def load(self, dataset_name, **options):
+        """Loads a dataset."""
+        verbosity = options.get('verbosity', 0)
+        indent = options.pop('indent', '')
+
+        if verbosity > 0:
+            self.stdout.write(u'%sImporting dataset %s...\n' % (indent, dataset_name))
+
+        dataset = importlib.import_module('xnet.datasets.%s' % dataset_name)
+        setup = dataset.Setup(verbosity=verbosity)
+
+        # Handle required datasets
+        for required in setup.requires:
+            self.load(required, indent=indent + '  ', **options)
+
+        # Load the data
+        with transaction.commit_on_success():
+            setup.run()
+
+        if verbosity > 0:
+            self.stdout.write(u'%sDone.\n' % indent)
diff --git a/xnet/datasets/models.py b/xnet/datasets/models.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/xnet/datasets/tests.py b/xnet/datasets/tests.py
new file mode 100644 (file)
index 0000000..633f866
--- /dev/null
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+
index bc984d0..7e47547 100644 (file)
@@ -3,6 +3,10 @@ from .base import *
 DEBUG = True
 TEMPLATE_DEBUG = DEBUG
 
+INSTALLED_APPS = list(INSTALLED_APPS) + [
+    'xnet.datasets',
+]
+
 # Enable fake authentication.
 AUTHGROUPEX_FAKE = True
 AUTHGROUPEX_KEY = 'Just_for_dev'