ecdb69013cb7f12f4a100b20b6217dc94c389507
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / lib / sep.py
1 # -*- encoding: utf-8 -*-
2 from exceptions import Exception
3 import sys, time
4
5 from auf_savoirs_en_partage.backend_config import RESOURCES
6 from savoirs.globals import *
7 from backend import Backend
8
9
10 class SEP:
11 """
12 """
13 backend = None
14
15 def __init__ (self):
16 self.backend = Backend ()
17
18 def __del__ (self):
19 self.backend.close ()
20
21 #############
22 # API public
23 def search (self, q = {}):
24 """Effectue une recherche multi-critères, en fonction du dictionnaire
25 `q`. Retourne une list d'`id`s uniquement. Les données pour chaque
26 résultat doivent être chargées ulterieurement.
27 """
28 return self.backend.search (q)
29
30 def get (self, id):
31 """Recupérer la structure de métadonnées pour la ressource identifiée
32 par `id`. `id` peut être une liste si on veut les structures de
33 plusieurs ressources.
34 """
35 if isinstance (id, tuple) or isinstance (id, list):
36 rc = []
37 for i in id:
38 try:
39 i = i[0]
40 except: pass
41 rc.append (self.backend.get (int(i)))
42 else:
43 rc = self.backend.get (int(id))
44 return rc
45
46 def add (self, metadata):
47 """Ajouter la ressource définie par `metadata`. Si on trouve une
48 ressource avec le même `identifier`, on le met a jour.
49
50 Retourne l'id de la ressource créée ou mise à jour.
51 """
52 exists = self.search (q = {URI: metadata[URI]})
53 if len (exists) > 0:
54 id = exists[0][0]
55 return self.update (int(id), metadata)
56 else:
57 return self.backend.add (metadata)
58
59 def update (self, id, metadata):
60 """Met a jour la ressource identifiée par `id`, avec les données de
61 `metadata`. Une exception est levée si elle n'existe pas.
62 """
63 if self.get (int(id)) is not None:
64 self.backend.update (int(id), metadata)
65 else:
66 raise Exception ("Objet inexistant")
67
68 def delete (self, id):
69 """Supprime la ressource identifiée par `id`.
70 """
71 self.backend.delete (int(id))
72
73 def add_log (self, name, count):
74 if hasattr (self.backend, 'add_log'):
75 self.backend.add_log (name, count)
76
77 def logs (self):
78 rc = {}
79 if hasattr (self.backend, 'logs'):
80 rc = self.backend.logs()
81 return rc
82