Full API Documentation

This full API documentation is provided for those who want to understand the internals of Drafter and potentially contribute to the project. If you are looking for user documentation, please refer to the Student Documentation.

get_server_setting(key, default=None, server=MAIN_SERVER)

Gets a setting from the server’s configuration. If the setting is not found, the default value is returned.

  • key – The key to look up in the configuration

  • default – The default value to return if the key is not found

  • server – The server to look up the setting in (defaults to the MAIN_SERVER)


The value of the setting, or the default value if not found

start_server(initial_state=None, server: Server = MAIN_SERVER, skip=False, **kwargs)

Starts the server with the given initial state and configuration. If the server is set to skip, it will not start. Additional keyword arguments will be passed to the server’s run method, and therefore to Bottle. This can be used to control things like the port.

  • initial_state – The initial state to start the server with

  • server – The server to run on, defaulting to MAIN_SERVER

  • skip – If True, the server will not start; this is useful for running tests headlessly

  • **kwargs – Additional keyword arguments to pass to the server’s run method. See below.



Keyword Arguments:
  • port (int) – The port to run the server on. Defaults to 8080

class BakeryTestCase(args: tuple, kwargs: dict, result: Any, line: int, caller: str)
assert_equal(*args, **kwargs)

Pointless definition of assert_equal to avoid errors

diff_tests(left, right, left_name, right_name)

Compare two strings and show the differences in a table.

route(url: str | None = None, server: Server = MAIN_SERVER)

Main function to add a new route to the server. Recommended to use as a decorator. Once added, the route will be available at the given URL; the function name will be used if no URL is provided. When you go to the URL, the function will be called and its return value will be displayed.

  • url – The URL to add the route to. If None, the function name will be used.

  • server – The server to add the route to. Defaults to the main server.


The modified route function.

class Page(state, content=None)

A page is a collection of content to be displayed to the user. This content has two critical parts:

  • The state, which is the current value of the backend server for this user’s session. This is used to restore the state of the page when the user navigates back to it. Typically, this will be a dataclass or a dictionary, but could also be a list, primitive value, or even None.

  • The content, which is a list of strings and components that will be rendered to the user.

The content of a page can be any combination of strings and components. Strings will be rendered as paragraphs, while components will be rendered as their respective HTML. Components should be classes that inherit from drafter.components.PageContent. If the content is not a list, a ValueError will be raised.

  • state – The state of the page. If only one argument is provided, this will default to be None.

  • content – The content of the page. Must always be provided as a list of strings and components.

render_content(current_state, configuration: ServerConfiguration) str

Renders the content of the page to HTML. This will include the state of the page, if it is restorable. Users should not call this method directly; it will be called on their behalf by the server.

  • current_state – The current state of the server. This will be used to restore the page if needed.

  • configuration – The configuration of the server. This will be used to determine how the page is rendered.


A string of HTML representing the content of the page.

verify_content(server) bool

Verifies that the content of the page is valid. This will check that all links are valid and that all components are valid. This is not meant to be called by the user; it will be called by the server.


server – The server to verify the content against.


True if the content is valid, False otherwise.

class ConversionRecord(parameter: str, value: Any, expected_type: Any, converted_value: Any)
class UnchangedRecord(parameter: str, value: Any, expected_type: Any = None)
class VisitedPage(url: str, function: <built-in function callable>, arguments: str, status: str, button_pressed: str, original_page_content: str = None, old_state: Any = None, started: datetime.datetime = <factory>, stopped: datetime.datetime = None)

Hides debug information from the website, so that it will not appear. Useful for deployed websites.

class DebugInformation(page_history: list[tuple[drafter.history.VisitedPage, Any]], state: Any, routes: dict[str, callable], conversion_record: list[drafter.history.ConversionRecord])

TODO: Custom Error pages Shareable link to get a link to the current page Download/upload state button

class ServerConfiguration(host: str = 'localhost', port: int = 8080, debug: bool = True, backend: str = 'bottle', reloader: bool = False, skip: bool = False, title: str = 'Drafter Website', framed: bool = True, skulpt: bool = False, style: str = 'skeleton', additional_header_content: list[str] = <factory>, additional_css_content: list[str] = <factory>, src_image_folder: str = '', deploy_image_path: str = 'images')

Configuration for the server.

class Argument(name: str, value: Any, **kwargs)

alias of Div

class BulletedList(items: list[Any], **kwargs)
class Button(text: str, url: str, arguments=None, **kwargs)
class CheckBox(name: str, default_value: bool = False, **kwargs)
class Div(*args)

alias of Div

class Header(body: str, level: int = 1)
class HorizontalRule
class Image(url: str, width=None, height=None, **kwargs)
class LineBreak
class MatPlotLibPlot(extra_matplotlib_settings=None, close_automatically=True, **kwargs)
class NumberedList(items: list[Any], **kwargs)
class PageContent

Base class for all content that can be added to a page. This class is not meant to be used directly, but rather to be subclassed by other classes. Critically, each subclass must implement a __str__ method that returns the HTML representation.

Under most circumstances, a string value can be used in place of a PageContent object (in which case we say it is a Content type). However, the PageContent object allows for more customization and control over the content.

Ultimately, the PageContent object is converted to a string when it is rendered.

This class also has some helpful methods for verifying URLs and handling attributes/styles.

class SelectBox(name: str, options: list[str], default_value: str = None, **kwargs)
class Span(*args)
class Table(rows: list[list[str]], header=None, **kwargs)
class Text(body: str)
class TextArea(name: str, default_value: str = None, **kwargs)
class TextBox(name: str, default_value: str = None, kind: str = 'text', **kwargs)

TODO: - [ ] indent - [ ] center - [ ] Superscript, subscript - [ ] border/margin/padding (all sides)

float_left(component: PageContent) PageContent

Floats the component to the left.


component – The component to float left


Returns the original component (updated)

float_right(component: PageContent | str) PageContent

Floats the component to the right.


component – The component to float right


Returns the original component (updated)

update_attr(component: PageContent | str, attr: str, value: str) PageContent

Updates the attribute of a component, returning the component (allowing you to chain calls). The attr property should match the HTML attribute name.

Example attributes include: - id - class - title

  • component – The component to update

  • attr – The name of the attribute to change

  • value – The value to set the attribute to (should be a string).


Returns the original component (updates its values)

update_style(component: PageContent | str, style: str, value: str) PageContent

Updates the style of a component, returning the component (allowing you to chain calls). The style property should match the CSS property name. Remember to include units in the value if they are expected!

Example style properties include: - color - background-color - font-size

  • component – The component to update

  • style – The name of the style property to change

  • value – The value to set the style property to (should be a string).


Returns the original component (updates its values)