Source code for pydent.models.crud_mixin

"""The create, read, update, destroy (CRUD) mixins used for some models."""
from retry import retry


[docs]class CreateMixin: def create(self): data = self._get_create_json() params = self._get_create_params() name = self.get_tableized_name() result = self.session.utils.model_create(name, data, params=params) self.reload(result) return self def _get_create_json(self): return self.dump() def _get_create_params(self): return None
class UpdateFailed(Exception): pass
[docs]class UpdateMixin: @retry(UpdateFailed, tries=3, delay=0.1, backoff=0.25, max_delay=1.0) def update(self): data = self._get_create_json() params = self._get_update_params() name = self.get_tableized_name() result = self.session.utils.model_update(name, self.id, data, params=params) self.reload(result) if not self.id: raise UpdateFailed return self def _get_update_json(self): return self.dump() def _get_update_params(self): return None
[docs]class SaveMixin(UpdateMixin, CreateMixin): def save(self): if self.id: self.update() else: self.create()
[docs]class DeleteMixin: def delete(self): name = self.get_tableized_name() params = self._get_delete_params() result = self.session.utils.model_delete(name, self.id, params=params) return result def _get_delete_params(self): return None
[docs]class JSONSaveMixin: def save(self, do_reload=True): name = self.get_server_model_name() data = self._get_save_json() result = self.session.utils.json_save(name, data) if do_reload: self.reload(result) return result # TODO: add update to JSONMixin? # def update(self): # self.save() def _get_save_json(self): return self.dump()
[docs]class JSONDeleteMixin: def delete(self): name = self.get_server_model_name() data = self._get_delete_json() return self.session.utils.json_delete(name, data) def _get_delete_json(self): return self.dump()