Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 10 Next »

Changes to PEP8

Follow PEP8 with the following exceptions/additions:

  • The maximum length of line is set to 120 characters. In PEP8 the limit is 79 characters.
  • Trailing whitespaces are not allowed. PEP8 provides a weak recommendation to avoid whitespaces, too. Configure your IDE to strip trailing whitespaces in the entire file on save.
  • Usage of tabs is not allowed. If you're porting an existing codebase, replace all tabs with 4 spaces. PEP8 recommends to retain tabs when working with an existing codebase.
  • Every text file should contain exactly one empty line at the end.
  • Allowed end-of-line character sequence is Unix-style (\n, LF) only.

Static type checking

Annotate types of all functions, methods, and properties, whether private or public. Enforce type correctness with MyPy using the following (or stricter) settings (example shown is an excerpt from setup.cfg):

MyPy static type checking options
[mypy]
warn_return_any = True
warn_unused_configs = True
disallow_untyped_defs = True
check_untyped_defs = True
no_implicit_optional = True
warn_redundant_casts = True
warn_unused_ignores = True

Documentation

All public entities should be documented in ReST, unless they are simple enough for their purpose to be evident without explicit documentation. Do not write in prose what can be expressed in the code; for example, avoid specifying type information in the docstrings – there are type annotations for that.

An example that shows the adopted documentation convention is provided below.

def write(self, data: typing.Union[bytes, str], timeout: typing.Optional[float] = None) -> int:
    """
    This method can be invoked concurrently from multiple threads, even if there are other threads blocked on
    any of the reading methods.
    :param data:        Data to transmit.
    :param timeout:     Timeout in seconds, None for infinity.
    :return:            Number of bytes written -- always either len(data) or 0 on timeout.
    """
    if isinstance(data, str):
        data = data.encode()

    if not isinstance(data, bytes):
        raise ValueError('Invalid data type: %r' % type(data))

    try:
        if len(data) > 0:
            self._txq.put(data, timeout=timeout)
    except queue.Full:
        return 0
    else:
        return len(data)

Misc

Write all new code in Python 3.7.

The recommended IDE for Python development is JetBrains PyCharm.

  • No labels