summaryrefslogtreecommitdiffstats
path: root/ipalib/crud.py
diff options
context:
space:
mode:
authorJason Gerard DeRose <jderose@redhat.com>2008-10-13 09:50:29 -0600
committerJason Gerard DeRose <jderose@redhat.com>2008-10-13 09:50:29 -0600
commit225e2b0c939d81b490c955762e125e8afcd5bb94 (patch)
treee920da1ef6be6691a512b5ae59d1bcf12020e386 /ipalib/crud.py
parent39ad5ccffa60e42904b7f3d2f7a60fef5977f089 (diff)
downloadfreeipa-225e2b0c939d81b490c955762e125e8afcd5bb94.tar.gz
freeipa-225e2b0c939d81b490c955762e125e8afcd5bb94.tar.xz
freeipa-225e2b0c939d81b490c955762e125e8afcd5bb94.zip
Added CrudBackend abstract class defining generic CRUD API
Diffstat (limited to 'ipalib/crud.py')
-rw-r--r--ipalib/crud.py76
1 files changed, 75 insertions, 1 deletions
diff --git a/ipalib/crud.py b/ipalib/crud.py
index 1bdd03f83..5a60ac8c6 100644
--- a/ipalib/crud.py
+++ b/ipalib/crud.py
@@ -21,7 +21,7 @@
Base classes for standard CRUD operations.
"""
-import frontend, errors
+import backend, frontend, errors
class Add(frontend.Method):
@@ -63,3 +63,77 @@ class Find(frontend.Method):
def get_options(self):
for param in self.obj.params_minus_pk():
yield param.__clone__(required=False)
+
+
+class CrudBackend(backend.Backend):
+ """
+ Base class defining generic CRUD backend API.
+ """
+
+ def create(self, *kw):
+ """
+ Create a new entry.
+
+ This method should take key word arguments representing the
+ attributes the created entry will have.
+
+ If this methods constructs the primary_key internally, it should raise
+ an exception if the primary_key was passed. Likewise, if this method
+ requires the primary_key to be passed in from the caller, it should
+ raise an exception if the primary key was *not* passed.
+
+ This method should return a dict of the exact entry as it was created
+ in the backing store, including any automatically created attributes.
+ """
+ raise NotImplementedError('%s.create()' % self.name)
+
+ def retrieve(self, primary_key):
+ """
+ Retrieve an existing entry.
+
+ This method should take a single argument, the primary_key of the
+ entry in question.
+
+ If such an entry exists, this method should return a dict
+ representing that entry. If no such entry exists, this method
+ should return None.
+ """
+ raise NotImplementedError('%s.retrieve()' % self.name)
+
+ def update(self, primary_key, *kw):
+ """
+ Update an existing entry.
+
+ This method should take one required argument, the primary_key of the
+ entry to modify, plus optional keyword arguments for each of the
+ attributes being updated.
+
+ This method should return a dict representing the entry as it now
+ exists in the backing store. If no such entry exists, this method
+ should return None.
+ """
+ raise NotImplementedError('%s.update()' % self.name)
+
+ def delete(self, primary_key):
+ """
+ Delete an existing entry.
+
+ This method should take one required argument, the primary_key of the
+ entry to delete.
+ """
+ raise NotImplementedError('%s.delete()' % self.name)
+
+ def search(self, **kw):
+ """
+ Return entries matching specific criteria.
+
+ This method should take keyword arguments representing the search
+ criteria. If a key is the name of an entry attribute, the value
+ should be treated as a filter on that attribute. The meaning of
+ keys outside this namespace is left to the implementation.
+
+ This method should return and iterable containing the matched
+ entries, where each entry is a dict. If no entries are matched,
+ this method should return an empty iterable.
+ """
+ raise NotImplementedError('%s.search()' % self.name)