# -*- encoding: utf-8 -*-
from django.db import models
+import simplejson
import uuid, datetime
from timezones.fields import TimeZoneField
-
+from savoirs.globals import META
+from auf_references_modeles.models import Thematique, Discipline
class Discipline(models.Model):
id = models.IntegerField(primary_key=True, db_column='id_discipline')
objects = ActiveManager()
-
class Record(models.Model):
+
+ #OAI et extra AUF
id = models.AutoField(primary_key = True)
- title = models.TextField(null = True, blank = True)
- alt_title = models.TextField(null = True, blank = True)
- creator = models.TextField(null = True, blank = True)
- description = models.TextField(null = True, blank = True)
- abstract = models.TextField(null = True, blank = True)
- creation = models.CharField(max_length = 255, null = True, blank = True)
- issued = models.CharField(max_length = 255, null = True, blank = True)
- modified = models.CharField(max_length = 255, null = True, blank = True)
- identifier = models.CharField(max_length = 255, null = True, blank = True, unique = True)
- isbn = models.TextField(null = True, blank = True)
- uri = models.CharField(max_length = 255, null = True, blank = True, unique = True)
- source = models.TextField(null = True, blank = True)
- contributor = models.TextField(null = True, blank = True)
- subject = models.TextField(null = True, blank = True)
- publisher = models.TextField(null = True, blank = True)
- type = models.TextField(null = True, blank = True)
- format = models.TextField(null = True, blank = True)
- language = models.TextField(null = True, blank = True)
- orig_lang = models.TextField(null = True, blank = True)
+ server = models.CharField(max_length = 255, editable=False)
+ title = models.TextField(null = True, blank = True, editable=False)
+ creator = models.TextField(null = True, blank = True, editable=False)
+ description = models.TextField(null = True, blank = True, editable=False)
+ modified = models.CharField(max_length = 255, null = True, blank = True, editable=False)
+ identifier = models.CharField(max_length = 255, null = True, blank = True, unique = True, editable=False)
+ uri = models.CharField(max_length = 255, null = True, blank = True, unique = True, editable=False)
+ source = models.TextField(null = True, blank = True, editable=False)
+ contributor = models.TextField(null = True, blank = True, editable=False)
+ subject = models.TextField(null = True, blank = True, editable=False)
+ publisher = models.TextField(null = True, blank = True, editable=False)
+ type = models.TextField(null = True, blank = True, editable=False)
+ format = models.TextField(null = True, blank = True, editable=False)
+ language = models.TextField(null = True, blank = True, editable=False)
+
+ #SEP 2 (aucune données récoltées)
+ alt_title = models.TextField(null = True, blank = True, editable=False)
+ abstract = models.TextField(null = True, blank = True, editable=False)
+ creation = models.CharField(max_length = 255, null = True, blank = True, editable=False)
+ issued = models.CharField(max_length = 255, null = True, blank = True, editable=False)
+ isbn = models.TextField(null = True, blank = True, editable=False)
+ orig_lang = models.TextField(null = True, blank = True, editable=False)
+
+ # Metadata AUF multivaluées
+ disciplines = models.ManyToManyField(Discipline)
+ thematiques = models.ManyToManyField(Thematique)
def __unicode__(self):
- return "<R %s, %s>" % (self.id, self.subject)
+ return "%s" % self.title
+
+# Ces fonctions sont utilisées pour travailler directement sur les données JSON enregistrées tel quel
+# sur la base de données. Lorsque le modèle est initialisé, les fields sont décodés, et lorsque l'objet
+# est sauvegardé, on s'assure de remettre les données encodées en JSON.
+# TODO : a terme, les données ne seront plus stockées au format JSON dans la BD et ces fonctions seront
+# donc obsolètes.
+
+ def save(self, *args, **kwargs):
+
+ for field_name in [f for f in self._meta.get_all_field_names() if f in META.keys()]:
+ v = getattr (self, field_name, None)
+ setattr(self, field_name, simplejson.dumps(v))
+
+ super(Record, self).save(*args, **kwargs)
+
+def decode_json(instance, **kwargs):
+ for field_name in [f for f in instance._meta.get_all_field_names() if f in META.keys()]:
+ json = getattr(instance, field_name)
+ data = "-"
+ v = getattr (instance, field_name, None)
+ if v is not None:
+ data = simplejson.loads(v)
+ if not isinstance(data, basestring):
+ decoded_value = u",".join(data)
+ else:
+ decoded_value = data
+ setattr(instance, field_name, decoded_value)
+
+models.signals.post_init.connect(decode_json, Record)
+
class HarvestLog(models.Model):
name = models.CharField(max_length = 255, primary_key = True)