Sample plugin for ofxstatement
This project provides a boilerplate for custom plugins for ofxstatement.
ofxstatement is a tool to convert proprietary bank statement to OFX format, suitable for importing to GnuCash. Plugin for ofxstatement parses a particular proprietary bank statement format and produces common data structure, that is then formatted into an OFX file.
Users of ofxstatement have developed several plugins for their banks. They are listed on main ofxstatement site. If your bank is missing, you can develop your own plugin.
Setting up development environment
It is recommended to use
virtualenv make a clean development environment.
Setting up dev environment for writing a plugin is easy:
$ git clone https://github.com/kedder/ofxstatement-sample ofxstatement-yourbank $ cd ofxstatement-yourbank $ virtualenv -p python3 --no-site-packages .venv $ . .venv/bin/activate (.venv)$ python setup.py develop
This will download all the dependencies and install them into your virtual environment. After this, you should be able to do:
(.venv)$ ofxstatement list-plugins The following plugins are available: sample Sample plugin (for developers only)
Your own plugin
To create your own plugin, follow these steps:
setup.pyand provide relevant metadata for your plugin. Pay close attention to
setupfunction: it lists plugins you are registering within ofxstatement. Give meaningful name to the plugin and provide plugin class name
- Replace contents of
README.rstwith description of your plugin
ofxstatement/plugins/sample.pyto match plugin package name you have provided in
- Open renamed sample.py and rename
SampleParserclasses to match your plugin class name.
- Now, draw the rest of the owl (c).
StatementParser is the main object that does all the hard work. It
has only one public method:
parse(), that should return
ofxstatement.statement.Statement object, filled with data from given input.
The default implementation, however, splits this work into two parts:
split_records() to split the whole file into logical parts, e.g.
transaction records, and
parse_record() to extract information from
individual record. See
src/ofxstatement/parser.py for details. If your
statement' format looks like CSV file, you might find
class useful: it simplifies mapping bettween CSV columns and
Plugin interface consists only of
get_parser() method, that returns
configured StatementParser object for given input filename. Docstrings on
Plugin class is also useful for describing the purpose of your plugin. First
line of it is visible in
ofxstatement list-plugins output.
Test your code as you would do with any other project. To make sure ofxstatement is still able to load your plugin, run:
(.venv)$ ofxstatement list-plugins
You should be able to see your plugin listed.
After you are done
After your plugin is ready, feel free to open an issue on ofxstatement project to include your plugin in "known plugin list". That would hopefully make life of other clients of your bank easier.