Skip to main content
https://secure.travis-ci.org/dstanek/typist.png

typist is a test time tool that uses your Sphinx docstrings (you do document your code right?) to ensure that your callables:

  • are only called with the types they expect

  • only return types they advertise

  • only raise exceptions they advertise

Usage

Right now you have to import typist and install it. The argument to install is the top level package for the code you are interested in testing. In the future I plan on creating plugins for test frameworks.

import typist
typist.install('keystone')

typist implements an import hook that will use Python’s AST to add a decorator to all of your callables. The decorator ensures the callable is properly used based on its docstring type declarations. If your callable doesn’t have :param:, :returns or :raises: then it works just fine, it’s just not checked.

Type language

Types will be pulled from the following formats:

param {type} varname:

some descriptive text

rtype avarname:

{types}

returns {types}:

some descriptive text

{type} can be any valid Python type. Some examples:

  • int

  • list

  • :py:class:typist._import_hook.Finder

  • typist._import_hook.Finder

{types} can be a list of types separated by commas that includes an optional ‘or’. All the same types as above can be used in the list. Some examples:

  • list or None

  • int, float or long

  • int, float, long

  • typist._py.PY2 or typist._py.PY3

  • list or callable

callable above is a special case. While technically it’s not a type it does describe the way an object should behave. Another special cases that doesn’t work yet, but may soon is iterable.

This languasge for specifying a type will grow a bit more rich for collections. It would be really handy to allow the developer to specify parameterized types like:

  • list<int> - a list of int

  • dict<str,package.module.Class> - a dict where the keys are strings and the values are instances of package.module.Class

Background

The idea to write to this came to me when I was working on Python 3 support for Keystone. I wanted to ensure that the code was actually getting the binary or text types that it expected. I was sick of the bullshit practice of .encode(‘utf8’).decode(‘utf8’) (maybe I got that backwards) that made the exceptions go away, but does nothing to solve the problem.

I didn’t bother looking for something that was already implemented because I wanted to learn a bit about import hooks. If you know of something better then please let me know. If this is the best thing since sliced bread I’d also like to know.

Metadata

Release files for typist 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for typist 0.0.1
File Size Uploaded
typist-0.0.1.tar.gz 6.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for typist 0.0.1
File Interpreter ABI Platform
typist-0.0.1-py3-none-any.whl Python 3 none any Details
typist-0.0.1-py2-none-any.whl Python 2 none any Details

Total release size: 29.9 kB

Release files / typist-0.0.1.tar.gz

Download URL typist-0.0.1.tar.gz
Size 6.5 kB
Tags Source
SHA-256 checksum
How to use checksums
feec0126c8f029e61790073ae559cfdab0759e09a21b36ff8b0cf008a1eb63bb
BLAKE2b-256 checksum
How to use checksums
64c8d15e22c77135fff6eb959b756b7fae5a61b209920909481597648bcf73ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / typist-0.0.1-py3-none-any.whl

Download URL typist-0.0.1-py3-none-any.whl
Size 11.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4e7399216f0282c69a61e511e3857fcf1b001a21ddb0192fb83b2a89397adde3
BLAKE2b-256 checksum
How to use checksums
f644e0bd138588fa6e9dbe0130566a63b1fe3955034af55bf64d5de4857d43db
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / typist-0.0.1-py2-none-any.whl

Download URL typist-0.0.1-py2-none-any.whl
Size 11.7 kB
Tags Python 2
SHA-256 checksum
How to use checksums
73411a3a3926d31ac05538e8ba4f2fe96fc81932e32dae9aab3cdd925c964d12
BLAKE2b-256 checksum
How to use checksums
add34a777422be68da90506828fc46675d83f2badc3a805dbd7ddfe3046278e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release history Release notifications | RSS feed

This release

0.0.1 This release

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page