d48b6f3ce32cff797dca893e2b90865199c0147e
1 # -*- encoding: utf-8 -*-
2 from django
.db
import models
5 from timezones
.fields
import TimeZoneField
6 from savoirs
.globals import META
7 from datamaster_modeles
.models
import Thematique
, Pays
, Region
9 class Discipline(models
.Model
):
10 id = models
.IntegerField(primary_key
=True, db_column
='id_discipline')
11 nom
= models
.CharField(max_length
=765, db_column
='nom_discipline')
13 def __unicode__ (self
):
17 db_table
= u
'discipline'
20 class SourceActualite(models
.Model
):
21 nom
= models
.CharField(max_length
=255)
22 url
= models
.CharField(max_length
=255)
24 class Actualite(models
.Model
):
25 id = models
.AutoField(primary_key
=True, db_column
='id_actualite')
26 titre
= models
.CharField(max_length
=765, db_column
='titre_actualite')
27 texte
= models
.TextField(db_column
='texte_actualite')
28 url
= models
.CharField(max_length
=765, db_column
='url_actualite')
29 logo
= models
.CharField(max_length
=765, db_column
='logo_actualite')
30 date
= models
.DateField(db_column
='date_actualite')
31 visible
= models
.CharField(max_length
=3, db_column
='visible_actualite')
32 ancienid
= models
.IntegerField(db_column
='ancienId_actualite')
34 def __unicode__ (self
):
35 return "Actualite %d: %s" % (self
.id, self
.titre
)
38 db_table
= u
'actualite'
42 class ActiveManager(models
.Manager
):
43 def get_query_set(self
):
44 return super(ActiveManager
, self
).get_query_set().filter(actif
=True)
46 class Evenement(models
.Model
):
47 actif
= models
.BooleanField(default
= True)
48 uid
= models
.CharField(max_length
= 255, default
= uuid
.uuid1
)
49 approuve
= models
.BooleanField(default
= False)
50 titre
= models
.CharField(max_length
=255)
51 discipline
= models
.ForeignKey('Discipline', related_name
= "discipline",
52 blank
= True, null
= True)
53 discipline_secondaire
= models
.ForeignKey('Discipline', related_name
= \
54 "discipline_secondaire",
56 "Discipline secondaire",
57 blank
= True, null
= True)
58 mots_cles
= models
.TextField('Mots-Clés', blank
= True, null
= True)
59 type = models
.CharField(max_length
= 255, choices
= \
60 (('Colloque', 'Colloque'),
61 ('Conférence', 'Conférence'),
62 ('Appel à contribution', 'Appel à contribution'),
63 ('Journée d\'étude', 'Journée d\'étude'),
66 fuseau
= TimeZoneField(verbose_name
= 'Fuseau horaire')
67 debut
= models
.DateTimeField(default
= datetime
.datetime
.now
)
68 fin
= models
.DateTimeField(default
= datetime
.datetime
.now
)
69 lieu
= models
.TextField()
70 description
= models
.TextField(blank
= True, null
= True)
72 contact
= models
.TextField(blank
= True, null
= True)
73 url
= models
.CharField(max_length
=255, blank
= True, null
= True)
75 objects
= ActiveManager()
77 class ListSet(models
.Model
):
78 spec
= models
.CharField(primary_key
= True, max_length
= 255)
79 name
= models
.CharField(max_length
= 255)
80 server
= models
.CharField(max_length
= 255)
81 validated
= models
.BooleanField(default
= True)
83 class Record(models
.Model
):
85 #fonctionnement interne
86 id = models
.AutoField(primary_key
= True)
87 server
= models
.CharField(max_length
= 255)
88 last_update
= models
.CharField(max_length
= 255)
89 last_checksum
= models
.CharField(max_length
= 255)
90 validated
= models
.BooleanField(default
= True)
93 title
= models
.TextField(null
= True, blank
= True)
94 creator
= models
.TextField(null
= True, blank
= True)
95 description
= models
.TextField(null
= True, blank
= True)
96 modified
= models
.CharField(max_length
= 255, null
= True, blank
= True)
97 identifier
= models
.CharField(max_length
= 255, null
= True, blank
= True, unique
= True)
98 uri
= models
.CharField(max_length
= 255, null
= True, blank
= True, unique
= True)
99 source
= models
.TextField(null
= True, blank
= True)
100 contributor
= models
.TextField(null
= True, blank
= True)
101 subject
= models
.TextField(null
= True, blank
= True)
102 publisher
= models
.TextField(null
= True, blank
= True)
103 type = models
.TextField(null
= True, blank
= True)
104 format
= models
.TextField(null
= True, blank
= True)
105 language
= models
.TextField(null
= True, blank
= True)
107 listsets
= models
.ManyToManyField(ListSet
, null
= True, blank
= True)
109 #SEP 2 (aucune données récoltées)
110 alt_title
= models
.TextField(null
= True, blank
= True)
111 abstract
= models
.TextField(null
= True, blank
= True)
112 creation
= models
.CharField(max_length
= 255, null
= True, blank
= True)
113 issued
= models
.CharField(max_length
= 255, null
= True, blank
= True)
114 isbn
= models
.TextField(null
= True, blank
= True)
115 orig_lang
= models
.TextField(null
= True, blank
= True)
117 # Metadata AUF multivaluées
118 disciplines
= models
.ManyToManyField(Discipline
)
119 thematiques
= models
.ManyToManyField(Thematique
)
120 pays
= models
.ManyToManyField(Pays
)
121 regions
= models
.ManyToManyField(Region
)
124 def __unicode__(self
):
125 return "R[%s] %s" % (self
.id, self
.title
)
127 # Ces fonctions sont utilisées pour travailler directement sur les données JSON enregistrées tel quel
128 # sur la base de données. Lorsque le modèle est initialisé, les fields sont décodés, et lorsque l'objet
129 # est sauvegardé, on s'assure de remettre les données encodées en JSON.
130 # TODO : a terme, les données ne seront plus stockées au format JSON dans la BD et ces fonctions seront
133 # def save(self, *args, **kwargs):
135 # for field_name in [f for f in self._meta.get_all_field_names() if f in META.keys()]:
136 # v = getattr (self, field_name, None)
137 # setattr(self, field_name, simplejson.dumps(v))
139 # super(Record, self).save(*args, **kwargs)
141 #def decode_json(instance, **kwargs):
142 # for field_name in [f for f in instance._meta.get_all_field_names() if f in META.keys()]:
143 # json = getattr(instance, field_name)
145 # v = getattr (instance, field_name, None)
147 # data = simplejson.loads(v)
148 # if not isinstance(data, basestring):
149 # decoded_value = u",".join(data)
151 # decoded_value = data
152 # setattr(instance, field_name, decoded_value)
154 #models.signals.post_init.connect(decode_json, Record)
157 class HarvestLog(models
.Model
):
158 context
= models
.CharField(max_length
= 255)
159 name
= models
.CharField(max_length
= 255)
160 date
= models
.DateTimeField(auto_now
= True)
161 added
= models
.IntegerField(null
= True, blank
= True)
162 updated
= models
.IntegerField(null
= True, blank
= True)
163 processed
= models
.IntegerField(null
= True, blank
= True)
164 record
= models
.ForeignKey(Record
, null
= True, blank
= True)
168 logger
= HarvestLog()
169 if message
.has_key('record_id'):
170 message
['record'] = Record
.objects
.get(id=message
['record_id'])
171 del(message
['record_id'])
173 for k
,v
in message
.items():
174 setattr(logger
, k
, v
)