diff options
author | Jason Gerard DeRose <jderose@redhat.com> | 2008-10-13 09:50:29 -0600 |
---|---|---|
committer | Jason Gerard DeRose <jderose@redhat.com> | 2008-10-13 09:50:29 -0600 |
commit | 225e2b0c939d81b490c955762e125e8afcd5bb94 (patch) | |
tree | e920da1ef6be6691a512b5ae59d1bcf12020e386 /ipalib | |
parent | 39ad5ccffa60e42904b7f3d2f7a60fef5977f089 (diff) | |
download | freeipa-225e2b0c939d81b490c955762e125e8afcd5bb94.tar.gz freeipa-225e2b0c939d81b490c955762e125e8afcd5bb94.tar.xz freeipa-225e2b0c939d81b490c955762e125e8afcd5bb94.zip |
Added CrudBackend abstract class defining generic CRUD API
Diffstat (limited to 'ipalib')
-rw-r--r-- | ipalib/crud.py | 76 |
1 files changed, 75 insertions, 1 deletions
diff --git a/ipalib/crud.py b/ipalib/crud.py index 1bdd03f8..5a60ac8c 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) |