MonkeyType


NameMonkeyType JSON
Version 23.3.0 PyPI version JSON
download
home_pagehttps://github.com/Instagram/MonkeyType
SummaryGenerating type annotations from sampled production types
upload_time2023-03-20 14:08:01
maintainer
docs_urlNone
authorMatt Page
requires_python>=3.7
licenseBSD
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            MonkeyType
==========

.. image:: https://img.shields.io/badge/Support-Ukraine-FFD500?style=flat&labelColor=005BBB
   :alt: Support Ukraine - Help Provide Humanitarian Aid to Ukraine.
   :target: https://opensource.fb.com/support-ukraine

MonkeyType collects runtime types of function arguments and return values, and
can automatically generate stub files or even add draft type annotations
directly to your Python code based on the types collected at runtime.

Example
-------

Say ``some/module.py`` originally contains:

.. code:: python

  def add(a, b):
      return a + b

And ``myscript.py`` contains:

.. code:: python

  from some.module import add

  add(1, 2)

Now we want to infer the type annotation of ``add`` in ``some/module.py`` by
running ``myscript.py`` with ``MonkeyType``. One way is to run:

.. code:: bash

  $ monkeytype run myscript.py

By default, this will dump call traces into a SQLite database in the file
``monkeytype.sqlite3`` in the current working directory. You can then use the
``monkeytype`` command to generate a stub file for a module, or apply the type
annotations directly to your code.

Running ``monkeytype stub some.module`` will output a stub:

.. code:: python

  def add(a: int, b: int) -> int: ...

Running  ``monkeytype apply some.module`` will modify ``some/module.py`` to:

.. code:: python

  def add(a: int, b: int) -> int:
      return a + b

This example demonstrates both the value and the limitations of
MonkeyType. With MonkeyType, it's very easy to add annotations that
reflect the concrete types you use at runtime, but those annotations may not
always match the full intended capability of the functions. For instance, ``add``
is capable of handling many more types than just integers. Similarly, MonkeyType
may generate a concrete ``List`` annotation where an abstract ``Sequence`` or
``Iterable`` would be more appropriate. MonkeyType's annotations are an
informative first draft, to be checked and corrected by a developer.

Motivation
----------

Readability and static analysis are the primary motivations for adding type
annotations to code. It's already common in many Python style guides to
document the argument and return types for a function in its docstring;
annotations are a standardized way to provide this documentation, which also
permits static analysis by a typechecker such as `mypy`_.

For more on the motivation and design of Python type annotations, see
:pep:`483` and :pep:`484`.

.. _mypy: http://mypy.readthedocs.io/en/latest/

Requirements
------------

MonkeyType requires Python 3.7+ and the `libcst`_ library (for applying type
stubs to code files). It generates only Python 3 type annotations (no type
comments).

Installing
----------

Install MonkeyType with `pip`_:

.. code:: bash

  pip install MonkeyType

How MonkeyType works
--------------------

MonkeyType uses the `sys.setprofile`_ hook provided by Python to interpose on
function calls, function returns, and generator yields, and record the types of
arguments / return values / yield values.

It generates `stub files`_ based on that data, and can use `libcst`_ to apply those
stub files directly to your code.

.. _pip: https://pip.pypa.io/en/stable/
.. _libcst: https://pypi.python.org/pypi/libcst
.. _sys.setprofile: https://docs.python.org/3/library/sys.html#sys.setprofile
.. _stub files: https://mypy.readthedocs.io/en/latest/getting_started.html#library-stubs-and-typeshed

.. end-here

See `the full documentation`_ for details.

.. _the full documentation: http://monkeytype.readthedocs.io/en/latest/

Troubleshooting
---------------

Check if your issue is mentioned in `the frequently asked questions`_ list.

.. _the frequently asked questions: http://monkeytype.readthedocs.io/en/stable/faq.html

Development
-----------

See `CONTRIBUTING.rst`_ for information on developing and contributing to MonkeyType.

.. _CONTRIBUTING.rst: https://github.com/Instagram/MonkeyType/blob/master/CONTRIBUTING.rst


LICENSE
-------

MonkeyType is BSD licensed.

Changelog
=========

23.3.0
------

* Add ``--pep_563`` flag to ``apply`` command. Thanks Sagar Badiyani.
  Merge of #282, fixes #111 and #203.

* Remove hard dependency on Django; ``django.utils.functional.cached_property``
  support is now conditionally enabled depending whether it is importable.

* Add support for Python 3.11.


22.2.0
------

* Drop Python 3.6 support.

* Fix `AttributeError: __args__` when generating stubs on Python 3.9. Thanks
  GameDungeon and ntjess for the report. Fixes #231.

* Fix `AttributeError: '_SpecialForm' object has no attribute '__name__'` in
  collecting traces with Union types. Thanks Federico Caselli for the report.
  Fixes #243.


21.5.0
------

* Fix compatibility with Python 3.9. Thanks Felix Yan. Merge of #217, fixes
  #205.

* Render empty tuple type correctly. Thanks Pradeep Kumar Srinivasan. Merge of
  #191, fixes #190.


20.5.0
------

* Require ``libcst>=0.3.5``.

* Add ``--ignore-existing-annotations`` flag to ``apply`` command.


20.4.2
------

* Add missing ``libcst`` dependency in ``setup.py``.


20.4.1
------

* Generate stubs for TypedDicts nested within generic types. Disable
  TypedDicts completely when the max size is zero. Thanks Pradeep Kumar
  Srinivasan. Merge of #162, fixes #159.

* Remove ``stringcase`` dependency, just hand-roll ``pascal_case`` function.

* Shrink dictionary traces with required and optional keys to get non-total
  TypedDict class declarations. Thanks Pradeep Kumar Srinivasan.

* Implement ``monkeytype apply`` using libcst's ``ApplyTypeAnnotationsVisitor``.
  This correctly applies generated TypedDict classes. Thanks Pradeep Kumar
  Srinivasan.

* Render generic types recursively to handle nested special cases like
  ``List['Movie']``. Thanks Pradeep Kumar Srinivasan. Fixes #76.


19.11.2
-------

* Disable TypedDict generation by default for now, since it breaks `--apply`.


19.11.1
-------

* Add setup.py dependences for mypy-extensions and stringcase. Thanks Nicholas
  Bollweg for the report.


19.11.0
-------

* Trace per-key value types for dictionaries (up to a configured max size) and
  if the traced types are consistent, output a TypedDict in the stub instead of
  a homogenous dict. Thanks Pradeep Kumar Srinivasan. Merge of #143, fixes
  #105.

* Fix crash with empty tuples. Thanks akayunov for the report, Christophe
  Simonis for the simplest-case repro. Fixes #136.

* Don't add stringified annotations to type stubs. Thanks Łukasz Langa. Merge
  of #148.

* Don't crash in type rewriter on user-defined types that name-collide with
  container types from the `typing` module. Thanks Łukasz Langa. Merge of #146.

* Load config after argument parsing instead of during it, to avoid argparse
  catching TypeError/ValueError at import time of a custom config and replacing
  with a generic "invalid value" message. See
  https://bugs.python.org/issue30220. Thanks Daniel G Holmes for the report.
  Merge of #142, fixes #141.

* Typing support for collections.defaultdict. Thanks Dinesh Kesavan. Merge of #152.


19.5.0
------

* Mark ``monkeytype`` package as typed per PEP 561. Thanks Vasily Zakharov for
  the report.
* Add ``-v`` option; don't display individual traces that fail to decode unless
  it is given.


19.1.1
------

* Pass ``--incremental`` to retype when applying stubs, so it doesn't choke on
  partial stubs (which can result from e.g. failures to decode some traces).


19.1.0
------

* Add ``--omit-existing-annotations`` option, implied by ``apply``. Merge of
  #129. Fixes #11 and #81.

* Render ``...`` for all parameter defaults in stubs. Remove the
  ``--include-unparsable-defaults`` and ``--exclude-unparsable-defaults`` CLI
  options, as well as the ``include_unparsable_defaults()`` config method.
  Merge of #128, fixes #123.

* Render forward references (from existing annotations) correctly. Merge of #127.

* Rewrite `Generator[..., None, None]` to `Iterator[None]` by default. Merge of
  #110, fixes #4. Thanks iyanuashiri.


18.8.0
------

* Support Python 3.7. Merge of #107, fixes #78.

* Print useful error message when filename is passed to stub/apply. Merge of
  #88, fixes #65. Thanks rajathagasthya.

* Fix crash in ``list_modules`` when there are no traces. Merge of #106, fixes
  #90.  Thanks tyrinwu.

* Enable ``python -m monkeytype {run,stub,apply} ...``. Merge of #100, fixes
  #99. Thanks retornam.


18.5.1
------

* Add ``MONKEYTYPE_TRACE_MODULES`` env var for easier tracing of code in
  site-packages. Merge of #83, fixes #82. Thanks Bo Peng.

* Fix passing additional arguments to scripts run via ``monkeytype run``. Merge
  of #85. Thanks Danny Qiu.

* Fix handling of spaces in filenames passed to retype. Merge of #79, fixes
  #77.

* Never render NoneType in stubs, substitute None.  Merge of #75, fixes #5.
  Thanks John Arnold.


18.2.0
------

* Move filtering of `__main__` module into CallTraceStoreLogger instead of core
  tracing code, so it can be overridden by special use cases like IPython
  tracing. Merge of #72, fixes #68. Thanks Tony Fast.

* Generate stubs for modules where the module file is like module/__init__.py.
  Print retype stdout/stderr. Merge of #69, Fixes #66.
  Thanks John Arnold.


18.1.13
-------

* Improve error messages in case of "no traces found" and/or file path given
  instead of module name. Merge of #37, partial fix for #65. Thanks Aarni
  Koskela.

* Add ``monkeytype list_modules`` sub-command to list all modules present in
  trace db. Merge of #61, fixes #60. Thanks Alex Miasoiedov.

* Add ``--diff`` option to ``monkeytype stub``. Merge of #59, fixes #58.
  Thanks Tai-Lin!

* Add ``--ignore-existing-annotations`` option to ``monkeytype stub``. Merge of
  #55, fixes #15. Thanks Tai-Lin!


18.1.11
-------

* Fix crash in RewriteEmptyContainers rewriter if a parameter has only empty
  container types in traces (and more than one). Fixes #53.


18.1.10
-------

* Display retype errors when stub application fails. Merge of #52, fixes #49.

* Add ``--sample-count`` option to show the number of traces a given stub is
  based on. Merge of #50, fixes #7. Thanks Tai-Lin.

* Add ``monkeytype run -m`` for running a module as a script. Merge of
  #41. Thanks Simon Gomizelj.

* Add support for Django's ``cached_property`` decorator. Merge of #46, fixes
  #9. Thanks Christopher J Wang.

* Catch and log serialization exceptions instead of crashing. Fixes #38, merge
  of #39.

* Fix bug in default code filter when Python lib paths are symlinked. Merge of
  #40. Thanks Simon Gomizelj.

17.12.3
-------

* Rewrite imports from _io module to io. (#1, merge of #32). Thanks Radhans
  Jadhao.

* Add Config.cli_context() as a hook for custom CLI initialization and cleanup
  logic (#28; merge of #29). Thanks Rodney Folz.

17.12.2
-------

* Exclude "frozen importlib" functions in default code filter.

* Fix passing args to script run with ``monkeytype run`` (#18; merge of
  #21). Thanks Rodney Folz.

* Fix generated annotations for NewType types (#22; merge of #23). Thanks
  Rodney Folz.

17.12.1
-------

* Fix using MonkeyType outside a virtualenv (#16). Thanks Guido van Rossum for
  the report.

17.12.0
-------

* Initial public version.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/Instagram/MonkeyType",
    "name": "MonkeyType",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "",
    "author": "Matt Page",
    "author_email": "mpage@instagram.com",
    "download_url": "https://files.pythonhosted.org/packages/de/66/7006d51ed537648107c28086f8c390030b4b4c5524b77598a3bbb657d3ec/MonkeyType-23.3.0.tar.gz",
    "platform": null,
    "description": "MonkeyType\n==========\n\n.. image:: https://img.shields.io/badge/Support-Ukraine-FFD500?style=flat&labelColor=005BBB\n   :alt: Support Ukraine - Help Provide Humanitarian Aid to Ukraine.\n   :target: https://opensource.fb.com/support-ukraine\n\nMonkeyType collects runtime types of function arguments and return values, and\ncan automatically generate stub files or even add draft type annotations\ndirectly to your Python code based on the types collected at runtime.\n\nExample\n-------\n\nSay ``some/module.py`` originally contains:\n\n.. code:: python\n\n  def add(a, b):\n      return a + b\n\nAnd ``myscript.py`` contains:\n\n.. code:: python\n\n  from some.module import add\n\n  add(1, 2)\n\nNow we want to infer the type annotation of ``add`` in ``some/module.py`` by\nrunning ``myscript.py`` with ``MonkeyType``. One way is to run:\n\n.. code:: bash\n\n  $ monkeytype run myscript.py\n\nBy default, this will dump call traces into a SQLite database in the file\n``monkeytype.sqlite3`` in the current working directory. You can then use the\n``monkeytype`` command to generate a stub file for a module, or apply the type\nannotations directly to your code.\n\nRunning ``monkeytype stub some.module`` will output a stub:\n\n.. code:: python\n\n  def add(a: int, b: int) -> int: ...\n\nRunning  ``monkeytype apply some.module`` will modify ``some/module.py`` to:\n\n.. code:: python\n\n  def add(a: int, b: int) -> int:\n      return a + b\n\nThis example demonstrates both the value and the limitations of\nMonkeyType. With MonkeyType, it's very easy to add annotations that\nreflect the concrete types you use at runtime, but those annotations may not\nalways match the full intended capability of the functions. For instance, ``add``\nis capable of handling many more types than just integers. Similarly, MonkeyType\nmay generate a concrete ``List`` annotation where an abstract ``Sequence`` or\n``Iterable`` would be more appropriate. MonkeyType's annotations are an\ninformative first draft, to be checked and corrected by a developer.\n\nMotivation\n----------\n\nReadability and static analysis are the primary motivations for adding type\nannotations to code. It's already common in many Python style guides to\ndocument the argument and return types for a function in its docstring;\nannotations are a standardized way to provide this documentation, which also\npermits static analysis by a typechecker such as `mypy`_.\n\nFor more on the motivation and design of Python type annotations, see\n:pep:`483` and :pep:`484`.\n\n.. _mypy: http://mypy.readthedocs.io/en/latest/\n\nRequirements\n------------\n\nMonkeyType requires Python 3.7+ and the `libcst`_ library (for applying type\nstubs to code files). It generates only Python 3 type annotations (no type\ncomments).\n\nInstalling\n----------\n\nInstall MonkeyType with `pip`_:\n\n.. code:: bash\n\n  pip install MonkeyType\n\nHow MonkeyType works\n--------------------\n\nMonkeyType uses the `sys.setprofile`_ hook provided by Python to interpose on\nfunction calls, function returns, and generator yields, and record the types of\narguments / return values / yield values.\n\nIt generates `stub files`_ based on that data, and can use `libcst`_ to apply those\nstub files directly to your code.\n\n.. _pip: https://pip.pypa.io/en/stable/\n.. _libcst: https://pypi.python.org/pypi/libcst\n.. _sys.setprofile: https://docs.python.org/3/library/sys.html#sys.setprofile\n.. _stub files: https://mypy.readthedocs.io/en/latest/getting_started.html#library-stubs-and-typeshed\n\n.. end-here\n\nSee `the full documentation`_ for details.\n\n.. _the full documentation: http://monkeytype.readthedocs.io/en/latest/\n\nTroubleshooting\n---------------\n\nCheck if your issue is mentioned in `the frequently asked questions`_ list.\n\n.. _the frequently asked questions: http://monkeytype.readthedocs.io/en/stable/faq.html\n\nDevelopment\n-----------\n\nSee `CONTRIBUTING.rst`_ for information on developing and contributing to MonkeyType.\n\n.. _CONTRIBUTING.rst: https://github.com/Instagram/MonkeyType/blob/master/CONTRIBUTING.rst\n\n\nLICENSE\n-------\n\nMonkeyType is BSD licensed.\n\nChangelog\n=========\n\n23.3.0\n------\n\n* Add ``--pep_563`` flag to ``apply`` command. Thanks Sagar Badiyani.\n  Merge of #282, fixes #111 and #203.\n\n* Remove hard dependency on Django; ``django.utils.functional.cached_property``\n  support is now conditionally enabled depending whether it is importable.\n\n* Add support for Python 3.11.\n\n\n22.2.0\n------\n\n* Drop Python 3.6 support.\n\n* Fix `AttributeError: __args__` when generating stubs on Python 3.9. Thanks\n  GameDungeon and ntjess for the report. Fixes #231.\n\n* Fix `AttributeError: '_SpecialForm' object has no attribute '__name__'` in\n  collecting traces with Union types. Thanks Federico Caselli for the report.\n  Fixes #243.\n\n\n21.5.0\n------\n\n* Fix compatibility with Python 3.9. Thanks Felix Yan. Merge of #217, fixes\n  #205.\n\n* Render empty tuple type correctly. Thanks Pradeep Kumar Srinivasan. Merge of\n  #191, fixes #190.\n\n\n20.5.0\n------\n\n* Require ``libcst>=0.3.5``.\n\n* Add ``--ignore-existing-annotations`` flag to ``apply`` command.\n\n\n20.4.2\n------\n\n* Add missing ``libcst`` dependency in ``setup.py``.\n\n\n20.4.1\n------\n\n* Generate stubs for TypedDicts nested within generic types. Disable\n  TypedDicts completely when the max size is zero. Thanks Pradeep Kumar\n  Srinivasan. Merge of #162, fixes #159.\n\n* Remove ``stringcase`` dependency, just hand-roll ``pascal_case`` function.\n\n* Shrink dictionary traces with required and optional keys to get non-total\n  TypedDict class declarations. Thanks Pradeep Kumar Srinivasan.\n\n* Implement ``monkeytype apply`` using libcst's ``ApplyTypeAnnotationsVisitor``.\n  This correctly applies generated TypedDict classes. Thanks Pradeep Kumar\n  Srinivasan.\n\n* Render generic types recursively to handle nested special cases like\n  ``List['Movie']``. Thanks Pradeep Kumar Srinivasan. Fixes #76.\n\n\n19.11.2\n-------\n\n* Disable TypedDict generation by default for now, since it breaks `--apply`.\n\n\n19.11.1\n-------\n\n* Add setup.py dependences for mypy-extensions and stringcase. Thanks Nicholas\n  Bollweg for the report.\n\n\n19.11.0\n-------\n\n* Trace per-key value types for dictionaries (up to a configured max size) and\n  if the traced types are consistent, output a TypedDict in the stub instead of\n  a homogenous dict. Thanks Pradeep Kumar Srinivasan. Merge of #143, fixes\n  #105.\n\n* Fix crash with empty tuples. Thanks akayunov for the report, Christophe\n  Simonis for the simplest-case repro. Fixes #136.\n\n* Don't add stringified annotations to type stubs. Thanks \u0141ukasz Langa. Merge\n  of #148.\n\n* Don't crash in type rewriter on user-defined types that name-collide with\n  container types from the `typing` module. Thanks \u0141ukasz Langa. Merge of #146.\n\n* Load config after argument parsing instead of during it, to avoid argparse\n  catching TypeError/ValueError at import time of a custom config and replacing\n  with a generic \"invalid value\" message. See\n  https://bugs.python.org/issue30220. Thanks Daniel G Holmes for the report.\n  Merge of #142, fixes #141.\n\n* Typing support for collections.defaultdict. Thanks Dinesh Kesavan. Merge of #152.\n\n\n19.5.0\n------\n\n* Mark ``monkeytype`` package as typed per PEP 561. Thanks Vasily Zakharov for\n  the report.\n* Add ``-v`` option; don't display individual traces that fail to decode unless\n  it is given.\n\n\n19.1.1\n------\n\n* Pass ``--incremental`` to retype when applying stubs, so it doesn't choke on\n  partial stubs (which can result from e.g. failures to decode some traces).\n\n\n19.1.0\n------\n\n* Add ``--omit-existing-annotations`` option, implied by ``apply``. Merge of\n  #129. Fixes #11 and #81.\n\n* Render ``...`` for all parameter defaults in stubs. Remove the\n  ``--include-unparsable-defaults`` and ``--exclude-unparsable-defaults`` CLI\n  options, as well as the ``include_unparsable_defaults()`` config method.\n  Merge of #128, fixes #123.\n\n* Render forward references (from existing annotations) correctly. Merge of #127.\n\n* Rewrite `Generator[..., None, None]` to `Iterator[None]` by default. Merge of\n  #110, fixes #4. Thanks iyanuashiri.\n\n\n18.8.0\n------\n\n* Support Python 3.7. Merge of #107, fixes #78.\n\n* Print useful error message when filename is passed to stub/apply. Merge of\n  #88, fixes #65. Thanks rajathagasthya.\n\n* Fix crash in ``list_modules`` when there are no traces. Merge of #106, fixes\n  #90.  Thanks tyrinwu.\n\n* Enable ``python -m monkeytype {run,stub,apply} ...``. Merge of #100, fixes\n  #99. Thanks retornam.\n\n\n18.5.1\n------\n\n* Add ``MONKEYTYPE_TRACE_MODULES`` env var for easier tracing of code in\n  site-packages. Merge of #83, fixes #82. Thanks Bo Peng.\n\n* Fix passing additional arguments to scripts run via ``monkeytype run``. Merge\n  of #85. Thanks Danny Qiu.\n\n* Fix handling of spaces in filenames passed to retype. Merge of #79, fixes\n  #77.\n\n* Never render NoneType in stubs, substitute None.  Merge of #75, fixes #5.\n  Thanks John Arnold.\n\n\n18.2.0\n------\n\n* Move filtering of `__main__` module into CallTraceStoreLogger instead of core\n  tracing code, so it can be overridden by special use cases like IPython\n  tracing. Merge of #72, fixes #68. Thanks Tony Fast.\n\n* Generate stubs for modules where the module file is like module/__init__.py.\n  Print retype stdout/stderr. Merge of #69, Fixes #66.\n  Thanks John Arnold.\n\n\n18.1.13\n-------\n\n* Improve error messages in case of \"no traces found\" and/or file path given\n  instead of module name. Merge of #37, partial fix for #65. Thanks Aarni\n  Koskela.\n\n* Add ``monkeytype list_modules`` sub-command to list all modules present in\n  trace db. Merge of #61, fixes #60. Thanks Alex Miasoiedov.\n\n* Add ``--diff`` option to ``monkeytype stub``. Merge of #59, fixes #58.\n  Thanks Tai-Lin!\n\n* Add ``--ignore-existing-annotations`` option to ``monkeytype stub``. Merge of\n  #55, fixes #15. Thanks Tai-Lin!\n\n\n18.1.11\n-------\n\n* Fix crash in RewriteEmptyContainers rewriter if a parameter has only empty\n  container types in traces (and more than one). Fixes #53.\n\n\n18.1.10\n-------\n\n* Display retype errors when stub application fails. Merge of #52, fixes #49.\n\n* Add ``--sample-count`` option to show the number of traces a given stub is\n  based on. Merge of #50, fixes #7. Thanks Tai-Lin.\n\n* Add ``monkeytype run -m`` for running a module as a script. Merge of\n  #41. Thanks Simon Gomizelj.\n\n* Add support for Django's ``cached_property`` decorator. Merge of #46, fixes\n  #9. Thanks Christopher J Wang.\n\n* Catch and log serialization exceptions instead of crashing. Fixes #38, merge\n  of #39.\n\n* Fix bug in default code filter when Python lib paths are symlinked. Merge of\n  #40. Thanks Simon Gomizelj.\n\n17.12.3\n-------\n\n* Rewrite imports from _io module to io. (#1, merge of #32). Thanks Radhans\n  Jadhao.\n\n* Add Config.cli_context() as a hook for custom CLI initialization and cleanup\n  logic (#28; merge of #29). Thanks Rodney Folz.\n\n17.12.2\n-------\n\n* Exclude \"frozen importlib\" functions in default code filter.\n\n* Fix passing args to script run with ``monkeytype run`` (#18; merge of\n  #21). Thanks Rodney Folz.\n\n* Fix generated annotations for NewType types (#22; merge of #23). Thanks\n  Rodney Folz.\n\n17.12.1\n-------\n\n* Fix using MonkeyType outside a virtualenv (#16). Thanks Guido van Rossum for\n  the report.\n\n17.12.0\n-------\n\n* Initial public version.\n",
    "bugtrack_url": null,
    "license": "BSD",
    "summary": "Generating type annotations from sampled production types",
    "version": "23.3.0",
    "project_urls": {
        "Homepage": "https://github.com/Instagram/MonkeyType"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0c6dde1fd4624ba300a98cc22f4db38f24bf89e660b6fc0be2740406347e5bca",
                "md5": "91332a6ed55e6afc460d2b4474750945",
                "sha256": "38ce8ad6568190f54c334b9fe835608af29b40a33ad448ecae749ae8790cdbf9"
            },
            "downloads": -1,
            "filename": "MonkeyType-23.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "91332a6ed55e6afc460d2b4474750945",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 40850,
            "upload_time": "2023-03-20T14:07:58",
            "upload_time_iso_8601": "2023-03-20T14:07:58.815580Z",
            "url": "https://files.pythonhosted.org/packages/0c/6d/de1fd4624ba300a98cc22f4db38f24bf89e660b6fc0be2740406347e5bca/MonkeyType-23.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "de667006d51ed537648107c28086f8c390030b4b4c5524b77598a3bbb657d3ec",
                "md5": "50b9870663017326ab91a5a7fb56a397",
                "sha256": "f2595db34d57cdddbde5a990117a50a22f373dbb917a2a0fa91ffbe07dfe0313"
            },
            "downloads": -1,
            "filename": "MonkeyType-23.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "50b9870663017326ab91a5a7fb56a397",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 34847,
            "upload_time": "2023-03-20T14:08:01",
            "upload_time_iso_8601": "2023-03-20T14:08:01.690507Z",
            "url": "https://files.pythonhosted.org/packages/de/66/7006d51ed537648107c28086f8c390030b4b4c5524b77598a3bbb657d3ec/MonkeyType-23.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-03-20 14:08:01",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Instagram",
    "github_project": "MonkeyType",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "monkeytype"
}
        
Elapsed time: 0.72678s