071f9f0639fee65b72bf7ae385a7707d37ca1396
[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 backend.globals import *
7 from backend.sql 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 rc.append (self.backend.get (int(i)))
39 else:
40 rc = self.backend.get (int(id))
41 return rc
42
43 def add (self, metadata):
44 """Ajouter la ressource définie par `metadata`. Si on trouve une
45 ressource avec le même `identifier`, on le met a jour.
46
47 Retourne l'id de la ressource créée ou mise à jour.
48 """
49 exists = self.search (q = {URI: metadata[URI]})
50 if len (exists) > 0:
51 id = exists[0][0]
52 return self.update (int(id), metadata)
53 else:
54 return self.backend.add (metadata)
55
56 def update (self, id, metadata):
57 """Met a jour la ressource identifiée par `id`, avec les données de
58 `metadata`. Une exception est levée si elle n'existe pas.
59 """
60 if self.get (int(id)) is not None:
61 self.backend.update (int(id), metadata)
62 else:
63 raise Exception ("Objet inexistant")
64
65 def delete (self, id):
66 """Supprime la ressource identifiée par `id`.
67 """
68 self.backend.delete (int(id))
69
70 def add_log (self, name, count):
71 if hasattr (self.backend, 'add_log'):
72 self.backend.add_log (name, count)
73
74 def logs (self):
75 rc = {}
76 if hasattr (self.backend, 'logs'):
77 rc = self.backend.logs()
78 return rc
79