def tiddler_put(self, tiddler): """ Write a :py:class:`tiddler <tiddlyweb.model.tiddler.Tiddler>` into the store. We only write if the tiddler's :py:class:`bag <tiddlyweb.model.bag.Bag>` already exists. Bag creation is a separate action. """ tiddler_base_filename = self._tiddler_base_filename(tiddler) if not os.path.exists(tiddler_base_filename): try: os.mkdir(tiddler_base_filename) except OSError as exc: raise NoTiddlerError('unable to put tiddler: %s' % exc) locked = 0 lock_attempts = 0 while not locked: try: lock_attempts = lock_attempts + 1 write_lock(tiddler_base_filename) locked = 1 except LockError as exc: if lock_attempts > 4: raise StoreLockError(exc) time.sleep(.1) # Protect against incoming tiddlers that have revision # set. Since we are putting a new one, we want the system # to calculate. tiddler.revision = None revision = self._tiddler_revision_filename(tiddler) + 1 tiddler_filename = self._tiddler_full_filename(tiddler, revision) representation = self.serializer.serialization.tiddler_as(tiddler, omit_empty=True, omit_members=['creator']) write_utf8_file(tiddler_filename, representation) write_unlock(tiddler_base_filename) tiddler.revision = revision
locked = 1 except LockError, exc: if lock_attempts > 4: raise StoreLockError(exc) time.sleep(.1) # Protect against incoming tiddlers that have revision # set. Since we are putting a new one, we want the system # to calculate. tiddler.revision = None revision = self._tiddler_revision_filename(tiddler) + 1 tiddler_filename = self._tiddler_full_filename(tiddler, revision) self.serializer.object = tiddler write_utf8_file(tiddler_filename, self.serializer.to_string()) write_unlock(tiddler_base_filename) tiddler.revision = revision def user_delete(self, user): """ Delete a user from the store. """ try: user_path = self._user_path(user) if not os.path.exists(user_path): raise NoUserError('%s not present' % user_path) os.unlink(user_path) except NoUserError: raise except Exception, exc: raise IOError('unable to delete %s: %s' % (user.usersign, exc))