spoqa / tsukkomi

(This project is abandoned. We recommend you to use typeguard instead.)
https://github.com/agronholm/typeguard
MIT License
10 stars 4 forks source link
abandoned

.. warning::

This project is abandoned.

We recommend you to use typeguard_ instead. It has been well maintained, and provides the mostly same API to tsukkomi so that typeguard module is drop-in replacement of tsukkomi.typed module.


tsukkomi



do `tsukkomi`_ for python types.

.. _tsukkomi: https://en.wikipedia.org/wiki/Glossary_of_owarai_terms#tsukkomi
.. _typeguard: https://github.com/agronholm/typeguard

What is tsukkomi?
=================

tsukkomi is a japanese word means straight man in the comedy duos of western
culture. As straight man react partner's ridiculous behaviors, ``tsukkomi``
will react incorrect types.

How to use tsukkomi?
====================

``tsukkomi`` take type hints from `typing`_. write code with annotation,
decorate all callable objects with ``tsukkomi.typed.typechecked``.
FYI generic types are not supported, see `tsukkomi dosen't support generic`_
section for the detail.

.. code-block:: python

   from typing import Sequence

   from tsukkomi.typed import typechecked

   @typechecked
   def greeting(name: str) -> str:
       return name

   greeting('a') # it is ok
   greeting(1) # this will raise `TypeError`

.. _typing: https://docs.python.org/3/library/typing.html

tsukkomi dosen't support generic
================================

tsukkomi dosen't support `generic`_ type checking, includes types already
inherited a generic type like `typing.Sequence`, `typing.Mutable` and etc.
following example codes can be passed by `tsukkomi.typed.typechecked`.

.. code-block:: python

   import typing

   from tsukkomi.typed import typechecked

   T = typing.TypeVar('T')

   class Boke(typing.Generic[T]):

       @typechecked
       def stupid(self, word: T) -> T:
           return type(word)

       @typechecked
       def correction(self, words: Sequence[T]) -> T:
           return random.sample(words, 1)[0]

   @typechecked
   def boke_and_tsukkomi(stupid_words: Sequence[str],
                         correction: Sequence[str]) -> bool:
       return any(s == c for s, c in zip(stupid_words, correction)))

   boke = Boke[str]()
   print(boke.stupid('hello world'))
   print(boke.correction([1, 2, 3]))
   print(boke_and_tsukkomi([1, 2], [1.0, 2.0]))

.. _generic: https://docs.python.org/3/library/typing.html#user-defined-generic-types

Changelogs
==========

0.0.5 --- 2016-05-19
--------------------

Modified
````````

- Interpret None as type(None)