diff options
Diffstat (limited to 'ipalib/crud.py')
-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 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) |