Version stabilisee
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / lib / sep.py
CommitLineData
0cc5f772
CR
1# -*- encoding: utf-8 -*-
2from exceptions import Exception
3import sys, time
4
5from auf_savoirs_en_partage.backend_config import RESOURCES
6from backend.globals import *
7from backend.sql import Backend
8
9
10class 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 #print metadata
50 exists = self.search (q = {URI: metadata[URI]})
51 if len (exists) > 0:
52 id = exists[0]
53 return self.update (int(id), metadata)
54 else:
55 return self.backend.add (metadata)
56
57 def update (self, id, metadata):
58 """Met a jour la ressource identifiée par `id`, avec les données de
59 `metadata`. Une exception est levée si elle n'existe pas.
60 """
61 if self.get (int(id)) is not None:
62 self.backend.update (int(id), metadata)
63 else:
64 raise Exception ("Objet inexistant")
65
66 def delete (self, id):
67 """Supprime la ressource identifiée par `id`.
68 """
69 self.backend.delete (int(id))
70
71 def add_log (self, name, count):
72 if hasattr (self.backend, 'add_log'):
73 self.backend.add_log (name, count)
74
75 def logs (self):
76 rc = {}
77 if hasattr (self.backend, 'logs'):
78 rc = self.backend.logs()
79 return rc
80