mise a jour du modele Record et création d'une interface d'admin. (Le modele record...
authorolivier larcheveque <olivier.larcheveque@u-ol.(none)>
Wed, 15 Sep 2010 21:20:00 +0000 (17:20 -0400)
committerolivier larcheveque <olivier.larcheveque@u-ol.(none)>
Wed, 15 Sep 2010 21:20:00 +0000 (17:20 -0400)
auf_savoirs_en_partage/savoirs/admin.py
auf_savoirs_en_partage/savoirs/models.py
auf_savoirs_en_partage/settings.py

index cc4750d..05a0a7c 100644 (file)
@@ -1,9 +1,50 @@
 # -*- encoding: utf-8 -*-
 from django.contrib import admin
-from models import SourceActualite, Actualite, Discipline, Evenement
+from models import SourceActualite, Actualite, Discipline, Evenement, Record
+from savoirs.lib.backend import Backend
 
 admin.site.register(Actualite)
 admin.site.register(SourceActualite)
 admin.site.register(Discipline)
 admin.site.register(Evenement)
 
+
+class RecordAdmin(admin.ModelAdmin):
+    list_filter = ('server',)
+    list_display = (
+      #OAI et extra AUF
+      'title',
+      'subject',
+      '_description',
+      '_uri',
+      #'server',
+      'identifier',
+      #'source',
+      'modified',
+      'creator',
+      'contributor',
+      'language',
+      'publisher',
+      'format',
+      'type',
+    
+       #SEP 2 (aucune données récoltées)
+       #'alt_title',
+       #'abstract',
+       #'creation',
+       #'issued',
+       #'isbn',
+       #'orig_lang',
+    )
+
+    def _uri(self, obj):
+        """ """
+        return "<a target='_blank' href='%s'>%s</a>" % (obj.uri, obj.uri)
+    _uri.allow_tags = True
+
+    def _description(self, obj):
+        """ """
+        return "%s..." % obj.description[:140]
+
+admin.site.register(Record, RecordAdmin)
+
index 835ce9d..a62d59f 100644 (file)
@@ -1,8 +1,10 @@
 # -*- 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')
@@ -72,31 +74,69 @@ class Evenement(models.Model):
 
     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)
index da0d3d2..65b2d2a 100644 (file)
@@ -68,6 +68,7 @@ INSTALLED_APPS = (
     'django_sorting',
     'django_roa',
     'timezones',
+    'auf_references_modeles',
     'savoirs',
     'chercheurs',
     'sites',
@@ -91,3 +92,4 @@ CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
 
 ROA_CUSTOM_ARGS = {'api-key': ROA_API_KEY}
 from auf_references_client.settings import *
+ROA_MODELS = False