Custom DSI Writer
DSI Writers are the primary way to translate data from DSI to an external format.
All Writers must be structured as a Class with 2 mandatory methods: __init__, and get_rows.
Loading Custom Writer into DSI
Before understanding the structure of Writers, it is important to know how they can be loaded via the User API and the Contributor API:
User API: Users loading a custom external Writer can use the
write()method from the DSI class. Unlike a normalwrite(), the second argument should be the path to the Python script containing the user’s custom Writer.While there currently isn’t an example of loading an external Writer, Example 9: Load an external Reader has a similar process to load an external Reader.
Contributor API: Users loading a custom external Writer must first call
Terminal.add_external_python_module()to temporarily register the Writer with DSI before loading the Writer and its data normally. For detailed instructions, follow Example 9: External Readers/Writers.Users intending to add the custom Writer to DSI’s codebase must include the file in the dsi/plugins directory and include the Writer name in the
Terminal.VALID_WRITERSclass variable of dsi/core.py. If done correctly, the Writer will be accessible byTerminal.load_module().
Initializer: __init__(self) -> None:
__init__ is where you can include all of your initialization logic, and specify the parameters needed for a given application.
Example __init__:
def __init__(self, filename, table_name) -> None:
  # see "plugins" to determine which superclass your Writer should extend
  super().__init__()
  self.output_filename = filename
  # a Writer might be table-specific and require a table_name input. Ex: Plotting a table's data.
  self.table_name = table_name
Get Rows: get_rows(self, collection) -> None
get_rows is responsible for converting data from DSI’s internal abstraction, an OrderedDict, to whichever format this Writer’s goal is.
It is important to note that collection will be a nested OrderedDict with at least one table of data.
Essentially, each entry in the larger OrderedDict has a table’s name as a key and its data as a value.
That table’s data will be an inner OrderedDict.
Unlike DSI Readers, there is no standard structure for get_rows as each Writer can have a vastly different output.
If a Writer requires units of data, or primary key/foreign key relations, they are stored in tables named ‘dsi_units’ and ‘dsi_relations’ respectively.
Various examples of get_rows can be found in dsi/plugins/file_writer.py.
Contributing Your Writer
If your Writer is helpful and acceptable for public use, you should consider making a pull request (PR) into DSI.
- Please note that any accepted PRs into DSI should satisfy the following:
 Passes all tests in
dsi/plugins/testsHas no
pylamaerrors/warnings (see dsi/.githooks)