Python Style Guide¶
If you are new to python style, we recommend reading this introduction.
flake8 on new files from the root gryphon package directory (to pick up the project’s
setup.cfg). It should pass without errors. If an error shows up that disagrees with this style guide, discuss and consider adding it to flake8’s ignore list
Use cdecimal.Decimal, not naked scalar values¶
Decimal is superior to python’s built-in float class for handling high-precision numbers. Never use naked floats, unless comparing a
Money against zero, which is well defined.
Decimal objects, use quotes around the scalar value. This might seem odd at first but is critical to preventing difficult-to-diagnose bugs.
# Yes: spread = Decimal('0.004') # No no no, asking for trouble: spread = Decimal(0.004)
Use Money Objects for quantities of an asset¶
When working with currency or asset quantities, use
Decimal, always use quotes around the quantity when defining
Money objects. Write the currency code in uppercase.
# Yes: order_volume = Money('10', 'ETH') # Nope, never. order_volume = Money(10, 'ETH') order_volume = Money('10', 'eth')
90 characters. Set your terminal/editor at 92/93 characters width if you are using line numbers.
4-space soft tabs, no trailing whitespace at end of lines or on empty lines. Newlines at end of files
Multi-lining function definitions¶
The current style is to just keep it all on one line and ignore the character limit. TODO: Figure out something better.
if ("order not found" in error_string or "order already done" in error_string): raise CancelOrderNotFoundError()
We break the line before the binary operator. Many sources use the opposite but we prefer to keep the operator nearer it’s right operand. More explanation: https://www.python.org/dev/peps/pep-0008/#should-a-line-break-before-or-after-a-binary-operator
Use English Style in comments¶
Comments should more or less follow valid english grammar and syntax, including periods at the end of sentences and capitalized first letters. Follow english style described in: The Elements of Style.
Most methods should have them. They describe the purpose of the method or class, and how to use it.
def message_dev(dev): """Send the dev a checkin message on hipchat.""" def message_dev(dev): """ Send the dev a checkin message on hipchat. [... more details about how to use this function] """
# This is a block comment. # It can go onto a new line when it makes sense, or after # hitting the 90 character limit.
Follow google. Two blank lines between top-level definitions, be they function or class definitions. One blank line between method definitions and between the class line and the first method.
Use blank lines around logical blocks of code and especially condition blocks.
Follow google, with sections for stdlib, 3rd party, and gryphon imports, separated by newlines.
import os import time import delorean from gryphon.lib import configuration from gryphon.lib.exchange import order_types
Do not use function imports.
Only single quotes.
Add # -*- coding: utf-8 -*- only if the file contains utf-8 characters