summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2016-11-03 15:48:08 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2016-11-03 15:48:08 +0100
commite3541fca4619b6d6458c376067d299d11f15a2b8 (patch)
tree41450cdd1603714842af8a3a99781a88a9bcfdf7 /ishtar_common/models.py
parentc5a639a8c59c6aa0d9edf1895cdced3cbdebc7a2 (diff)
parentc9608717bfb09c3a52336666358c0cf816c65d76 (diff)
downloadIshtar-e3541fca4619b6d6458c376067d299d11f15a2b8.tar.bz2
Ishtar-e3541fca4619b6d6458c376067d299d11f15a2b8.zip
Merge branch 'master' into v0.9
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py54
1 files changed, 53 insertions, 1 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index 3453a53c5..72a3432f8 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -43,6 +43,7 @@ from django.db.utils import DatabaseError
from django.db.models import Q, Max, Count
from django.db.models.base import ModelBase
from django.db.models.signals import post_save, pre_delete, post_delete
+from django.utils.functional import lazy
from django.utils.translation import ugettext_lazy as _, ugettext, \
pgettext_lazy
@@ -66,7 +67,6 @@ from ishtar_common.data_importer import Importer, ImportFormater, \
def post_save_user(sender, **kwargs):
user = kwargs['instance']
- ishtaruser = None
try:
q = IshtarUser.objects.filter(username=user.username)
if not q.count():
@@ -334,6 +334,51 @@ class GeneralType(Cached, models.Model):
return self.label
@classmethod
+ def get_or_create(cls, slug, label=''):
+ """
+ Get or create a new item.
+
+ :param slug: textual id
+ :param label: label for initialization if the item doesn't exist (not
+ mandatory)
+
+ :return: instancied item of the base class
+ """
+
+ item = cls.get_cache(slug)
+ if item:
+ return item
+ item, created = cls.objects.get_or_create(
+ txt_idx=slug, defaults={'label': label})
+ return item
+
+ @classmethod
+ def get_or_create_pk(cls, slug):
+ """
+ Get an id from a slug. Create the associated item if needed.
+
+ :param slug: textual id
+
+ :return: id of the item (string)
+ """
+ return unicode(cls.get_or_create(slug).pk)
+
+ @classmethod
+ def get_or_create_pks(cls, slugs):
+ """
+ Get and merge a list of ids from a slug list. Create the associated
+ items if needed.
+
+ :param slugs: textual ids
+
+ :return: string with ids separated by "_"
+ """
+ items = []
+ for slug in slugs:
+ items.append(str(cls.get_or_create(slug).pk))
+ return u"_".join(items)
+
+ @classmethod
def get_help(cls, dct={}, exclude=[]):
help_text = cls.HELP_TEXT
c_rank = -1
@@ -1534,6 +1579,9 @@ class OrganizationType(GeneralType):
post_save.connect(post_save_cache, sender=OrganizationType)
post_delete.connect(post_save_cache, sender=OrganizationType)
+organization_type_pk_lazy = lazy(OrganizationType.get_or_create_pk, unicode)
+organization_type_pks_lazy = lazy(OrganizationType.get_or_create_pks, unicode)
+
IMPORTER_CLASSES = {}
IMPORTER_CLASSES.update({
@@ -1764,6 +1812,7 @@ class ImporterColumn(models.Model):
"""
Import file column description
"""
+ label = models.CharField(_(u"Label"), blank=True, null=True, max_length=200)
importer_type = models.ForeignKey(ImporterType, related_name='columns')
col_number = models.IntegerField(_(u"Column number"), default=1)
description = models.TextField(_("Description"), blank=True, null=True)
@@ -2324,6 +2373,9 @@ class PersonType(GeneralType):
post_save.connect(post_save_cache, sender=PersonType)
post_delete.connect(post_save_cache, sender=PersonType)
+person_type_pk_lazy = lazy(PersonType.get_or_create_pk, unicode)
+person_type_pks_lazy = lazy(PersonType.get_or_create_pks, unicode)
+
class TitleType(GeneralType):
class Meta: