- Home
- Get it
- Docs
- Extend/Develop

# Storage Backends

To create a custom storage backend you will need to subclass the `StorageBackend` class. Then create an instance of the new class and pass that as the storage keyword argument when you create the `WebSupport` object:

    support = WebSupport(srcdir=srcdir,
                         builddir=builddir,
                         storage=MyStorage())

For more information about creating a custom storage backend, please see the documentation of the `StorageBackend` class below.

class `sphinx.websupport.storage.``StorageBackend`

  Defines an interface for storage backends.

## StorageBackend Methods

`StorageBackend.``pre_build`()

  Called immediately before the build process begins. Use this to prepare the StorageBackend for the addition of nodes.

`StorageBackend.``add_node`(id, document, source)

  Add a node to the StorageBackend.

  Parameters: | id – a unique id for the comment. document – the name of the document the node belongs to. source – the source files name.

`StorageBackend.``post_build`()

  Called after a build has completed. Use this to finalize the addition of nodes if needed.

`StorageBackend.``add_comment`(text, displayed, username, time, proposal, node_id, parent_id, moderator)

  Called when a comment is being added.

  Parameters: | text – the text of the comment displayed – whether the comment should be displayed username – the name of the user adding the comment time – a date object with the time the comment was added proposal – the text of the proposal the user made node_id – the id of the node that the comment is being added to parent_id – the id of the comment’s parent comment. moderator – whether the user adding the comment is a moderator

`StorageBackend.``delete_comment`(comment_id, username, moderator)

  Delete a comment.

  Raises `UserNotAuthorizedError` if moderator is False and username doesn’t match the username on the comment.

  Parameters: | comment_id – The id of the comment being deleted. username – The username of the user requesting the deletion. moderator – Whether the user is a moderator.

`StorageBackend.``get_data`(node_id, username, moderator)

  Called to retrieve all data for a node. This should return a dict with two keys, source and comments as described by `WebSupport`‘s `get_data()` method.

  Parameters: | node_id – The id of the node to get data for. username – The name of the user requesting the data. moderator – Whether the requestor is a moderator.

`StorageBackend.``process_vote`(comment_id, username, value)

  Process a vote that is being cast. value will be either -1, 0, or 1.

  Parameters: | comment_id – The id of the comment being voted on. username – The username of the user casting the vote. value – The value of the vote being cast.

`StorageBackend.``update_username`(old_username, new_username)

  If a user is allowed to change their username this method should be called so that there is not stagnate data in the storage system.

  Parameters: | old_username – The username being changed. new_username – What the username is being changed to.

`StorageBackend.``accept_comment`(comment_id)

  Called when a moderator accepts a comment. After the method is called the comment should be displayed to all users.

  Parameters: | comment_id – The id of the comment being accepted.