From 42d22ec0f415fc2078f80682afaadbb5d27fe41b Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Barrois?= Date: Fri, 29 Mar 2013 21:29:29 +0100 Subject: [PATCH] Add datasets module. --- xnet/accounts/models.py | 2 +- xnet/datasets/__init__.py | 19 ++++++++ xnet/datasets/dev.py | 53 +++++++++++++++++++++++ xnet/datasets/management/__init__.py | 0 xnet/datasets/management/commands/__init__.py | 0 xnet/datasets/management/commands/loaddatasets.py | 40 +++++++++++++++++ xnet/datasets/models.py | 0 xnet/datasets/tests.py | 2 + xnet/settings/dev.py | 4 ++ 9 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 xnet/datasets/__init__.py create mode 100644 xnet/datasets/dev.py create mode 100644 xnet/datasets/management/__init__.py create mode 100644 xnet/datasets/management/commands/__init__.py create mode 100644 xnet/datasets/management/commands/loaddatasets.py create mode 100644 xnet/datasets/models.py create mode 100644 xnet/datasets/tests.py diff --git a/xnet/accounts/models.py b/xnet/accounts/models.py index 61702da..2deb4ed 100644 --- a/xnet/accounts/models.py +++ b/xnet/accounts/models.py @@ -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 index 0000000..7b3421e --- /dev/null +++ b/xnet/datasets/__init__.py @@ -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 index 0000000..27221fb --- /dev/null +++ b/xnet/datasets/dev.py @@ -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 index 0000000..e69de29 diff --git a/xnet/datasets/management/commands/__init__.py b/xnet/datasets/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/xnet/datasets/management/commands/loaddatasets.py b/xnet/datasets/management/commands/loaddatasets.py new file mode 100644 index 0000000..75c3b66 --- /dev/null +++ b/xnet/datasets/management/commands/loaddatasets.py @@ -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 = '' + 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 index 0000000..e69de29 diff --git a/xnet/datasets/tests.py b/xnet/datasets/tests.py new file mode 100644 index 0000000..633f866 --- /dev/null +++ b/xnet/datasets/tests.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- + diff --git a/xnet/settings/dev.py b/xnet/settings/dev.py index bc984d0..7e47547 100644 --- a/xnet/settings/dev.py +++ b/xnet/settings/dev.py @@ -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' -- 2.1.4