Skip to main content
========
Overview
========



Hunter is a flexible code tracing toolkit, not for measuring coverage, but for debugging, logging, inspection and other
nefarious purposes. It has a `simple Python API <https://python-hunter.readthedocs.io/en/latest/introduction.html>`_,
a `convenient terminal API <environment-variable-activation>`_ and
a `CLI tool to attach to processes <tracing-processes>`_.

* Free software: BSD 2-Clause License

Installation
============

::

pip install hunter

Documentation
=============


https://python-hunter.readthedocs.io/

Overview
========

Basic use involves passing various filters to the ``trace`` option. An example:

.. sourcecode:: python

import hunter
hunter.trace(module='posixpath', action=hunter.CallPrinter)

import os
os.path.join('a', 'b')

That would result in:

.. sourcecode:: pycon

>>> os.path.join('a', 'b')
/usr/lib/python3.5/posixpath.py:71 call => join(a='a')
/usr/lib/python3.5/posixpath.py:76 line sep = _get_sep(a)
/usr/lib/python3.5/posixpath.py:39 call => _get_sep(path='a')
/usr/lib/python3.5/posixpath.py:40 line if isinstance(path, bytes):
/usr/lib/python3.5/posixpath.py:43 line return '/'
/usr/lib/python3.5/posixpath.py:43 return <= _get_sep: '/'
/usr/lib/python3.5/posixpath.py:77 line path = a
/usr/lib/python3.5/posixpath.py:78 line try:
/usr/lib/python3.5/posixpath.py:79 line if not p:
/usr/lib/python3.5/posixpath.py:81 line for b in p:
/usr/lib/python3.5/posixpath.py:82 line if b.startswith(sep):
/usr/lib/python3.5/posixpath.py:84 line elif not path or path.endswith(sep):
/usr/lib/python3.5/posixpath.py:87 line path += sep + b
/usr/lib/python3.5/posixpath.py:81 line for b in p:
/usr/lib/python3.5/posixpath.py:91 line return path
/usr/lib/python3.5/posixpath.py:91 return <= join: 'a/b'
'a/b'

In a terminal it would look like:

.. image:: https://raw.githubusercontent.com/ionelmc/python-hunter/master/docs/code-trace.png


Custom actions
--------------

Output format can be controlled with "actions". There's an alternative ``CodePrinter`` action that doesn't handle nesting (it was the default action until Hunter 2.0). Example:

.. sourcecode:: python

import hunter
hunter.trace(module='posixpath', action=hunter.CodePrinter)

import os
os.path.join('a', 'b')

That would result in:

.. sourcecode:: pycon

>>> os.path.join('a', 'b')
/usr/lib/python3.5/posixpath.py:71 call def join(a, *p):
/usr/lib/python3.5/posixpath.py:76 line sep = _get_sep(a)
/usr/lib/python3.5/posixpath.py:39 call def _get_sep(path):
/usr/lib/python3.5/posixpath.py:40 line if isinstance(path, bytes):
/usr/lib/python3.5/posixpath.py:43 line return '/'
/usr/lib/python3.5/posixpath.py:43 return return '/'
... return value: '/'
/usr/lib/python3.5/posixpath.py:77 line path = a
/usr/lib/python3.5/posixpath.py:78 line try:
/usr/lib/python3.5/posixpath.py:79 line if not p:
/usr/lib/python3.5/posixpath.py:81 line for b in p:
/usr/lib/python3.5/posixpath.py:82 line if b.startswith(sep):
/usr/lib/python3.5/posixpath.py:84 line elif not path or path.endswith(sep):
/usr/lib/python3.5/posixpath.py:87 line path += sep + b
/usr/lib/python3.5/posixpath.py:81 line for b in p:
/usr/lib/python3.5/posixpath.py:91 line return path
/usr/lib/python3.5/posixpath.py:91 return return path
... return value: 'a/b'
'a/b'

- or in a terminal:

.. image:: https://raw.githubusercontent.com/ionelmc/python-hunter/master/docs/simple-trace.png

------

Another useful action is the ``VarsPrinter``:

.. sourcecode:: python

import hunter
# note that this kind of invocation will also use the default `CallPrinter` action
hunter.trace(hunter.Q(module='posixpath', action=hunter.VarsPrinter('path')))

import os
os.path.join('a', 'b')

That would result in:

.. sourcecode:: pycon

>>> os.path.join('a', 'b')
/usr/lib/python3.5/posixpath.py:71 call def join(a, *p):
/usr/lib/python3.5/posixpath.py:76 line sep = _get_sep(a)
vars path => 'a'
/usr/lib/python3.5/posixpath.py:39 call def _get_sep(path):
vars path => 'a'
/usr/lib/python3.5/posixpath.py:40 line if isinstance(path, bytes):
vars path => 'a'
/usr/lib/python3.5/posixpath.py:43 line return '/'
vars path => 'a'
/usr/lib/python3.5/posixpath.py:43 return return '/'
... return value: '/'
/usr/lib/python3.5/posixpath.py:77 line path = a
vars path => 'a'
/usr/lib/python3.5/posixpath.py:78 line try:
vars path => 'a'
/usr/lib/python3.5/posixpath.py:79 line if not p:
vars path => 'a'
/usr/lib/python3.5/posixpath.py:81 line for b in p:
vars path => 'a'
/usr/lib/python3.5/posixpath.py:82 line if b.startswith(sep):
vars path => 'a'
/usr/lib/python3.5/posixpath.py:84 line elif not path or path.endswith(sep):
vars path => 'a'
/usr/lib/python3.5/posixpath.py:87 line path += sep + b
vars path => 'a/b'
/usr/lib/python3.5/posixpath.py:81 line for b in p:
vars path => 'a/b'
/usr/lib/python3.5/posixpath.py:91 line return path
vars path => 'a/b'
/usr/lib/python3.5/posixpath.py:91 return return path
... return value: 'a/b'
'a/b'

In a terminal it would look like:

.. image:: https://raw.githubusercontent.com/ionelmc/python-hunter/master/docs/vars-trace.png

-----

You can give it a tree-like configuration where you can optionally configure specific actions for parts of the
tree (like dumping variables or a pdb set_trace):

.. sourcecode:: python

from hunter import trace, Q, Debugger
from pdb import Pdb

trace(
# drop into a Pdb session if ``foo.bar()`` is called
Q(module="foo", function="bar", kind="call", action=Debugger(klass=Pdb))
| # or
Q(
# show code that contains "mumbo.jumbo" on the current line
lambda event: event.locals.get("mumbo") == "jumbo",
# and it's not in Python's stdlib
stdlib=False,
# and it contains "mumbo" on the current line
source__contains="mumbo"
)
)

import foo
foo.func()

With a ``foo.py`` like this:

.. sourcecode:: python

def bar():
execution_will_get_stopped # cause we get a Pdb session here

def func():
mumbo = 1
mumbo = "jumbo"
print("not shown in trace")
print(mumbo)
mumbo = 2
print(mumbo) # not shown in trace
bar()


We get:

.. sourcecode:: pycon

>>> foo.func()
not shown in trace
/home/ionel/osp/python-hunter/foo.py:8 line print(mumbo)
jumbo
/home/ionel/osp/python-hunter/foo.py:9 line mumbo = 2
2
/home/ionel/osp/python-hunter/foo.py:1 call def bar():
> /home/ionel/osp/python-hunter/foo.py(2)bar()
-> execution_will_get_stopped # cause we get a Pdb session here
(Pdb)

In a terminal it would look like:

.. image:: https://raw.githubusercontent.com/ionelmc/python-hunter/master/docs/tree-trace.png

.. _tracing-processes:

Tracing processes
-----------------

In similar fashion to ``strace`` Hunter can trace other processes, eg::

hunter-trace --gdb -p 123

If you wanna play it safe (no messy GDB) then ``pip install 'hunter[remote]'`` and add this in your code::

from hunter import remote
remote.install()

Then you can do::

hunter-trace -p 123

See `docs on the remote feature <https://python-hunter.readthedocs.org/en/latest/remote.html>`_.

**Note:** Windows ain't supported.

.. _environment-variable-activation:

Environment variable activation
-------------------------------

For your convenience environment variable activation is available. Just run your app like this::


PYTHONHUNTER="module='os.path'" python yourapp.py

On Windows you'd do something like::

set PYTHONHUNTER=module='os.path'
python yourapp.py

The activation works with a clever ``.pth`` file that checks for that env var presence and before your app runs does something
like this::

from hunter import *
trace(<whatever-you-had-in-the-PYTHONHUNTER-env-var>)

Note that Hunter is activated even if the env var is empty, eg: ``PYTHONHUNTER=""``.

Environment variable configuration
``````````````````````````````````

Sometimes you always use the same options (like ``stdlib=False`` or ``force_colors=True``). To save typing you can
set something like this in your environment::

PYTHONHUNTERCONFIG="stdlib=False,force_colors=True"

This is the same as ``PYTHONHUNTER="stdlib=False,action=CallPrinter(force_colors=True)"``.

Notes:

* Setting ``PYTHONHUNTERCONFIG`` alone doesn't activate hunter.
* All the options for the builtin actions are supported.
* Although using predicates is supported it can be problematic. Example of setup that won't trace anything::

PYTHONHUNTERCONFIG="Q(module_sw='django')"
PYTHONHUNTER="Q(module_sw='celery')"

which is the equivalent of::

PYTHONHUNTER="Q(module_sw='django'),Q(module_sw='celery')"

which is the equivalent of::

PYTHONHUNTER="Q(module_sw='django')&Q(module_sw='celery')"



Filtering DSL
-------------

Hunter supports a flexible query DSL, see the `introduction
<https://python-hunter.readthedocs.org/en/latest/introduction.html>`_.

Development
===========

To run the all tests run::

tox


FAQ
===

Why not Smiley?
---------------

There's some obvious overlap with `smiley <https://pypi.python.org/pypi/smiley>`_ but there are few fundamental differences:

* Complexity. Smiley is simply over-engineered:

* It uses IPC and a SQL database.
* It has a webserver. Lots of dependencies.
* It uses threads. Side-effects and subtle bugs are introduced in your code.
* It records everything. Tries to dump any variable. Often fails and stops working.

Why do you need all that just to debug some stuff in a terminal? Simply put, it's a nice idea but the design choices work
against you when you're already neck-deep into debugging your own code. In my experience Smiley has been very buggy and
unreliable. Your mileage may vary of course.

* Tracing long running code. This will make Smiley record lots of data, making it unusable.

Now because Smiley records everything, you'd think it's better suited for short programs. But alas, if your program runs
quickly then it's pointless to record the execution. You can just run it again.

It seems there's only one situation where it's reasonable to use Smiley: tracing io-bound apps remotely. Those apps don't
execute lots of code, they just wait on network so Smiley's storage won't blow out of proportion and tracing overhead might
be acceptable.
* Use-cases. It seems to me Smiley's purpose is not really debugging code, but more of a "non interactive monitoring" tool.

In contrast, Hunter is very simple:

* Few dependencies.
* Low overhead (tracing/filtering code has an optional Cython extension).
* No storage. This simplifies lots of things.

The only cost is that you might need to run the code multiple times to get the filtering/actions right. This means Hunter is
not really suited for "post-mortem" debugging. If you can't reproduce the problem anymore then Hunter won't be of much help.

Why not pytrace?
----------------

`Pytrace <https://pypi.python.org/pypi/pytrace>`_ is another tracer tool. It seems quite similar to Smiley - it uses a sqlite
database for the events, threads and IPC.

TODO: Expand this.

Why (not) coverage?
-------------------

For purposes of debugging `coverage <https://pypi.python.org/pypi/coverage>`_ is a great tool but only as far as "debugging
by looking at what code is (not) run". Checking branch coverage is good but it will only get you as far.

From the other perspective, you'd be wondering if you could use Hunter to measure coverage-like things. You could do it but
for that purpose Hunter is very "rough": it has no builtin storage. You'd have to implement your own storage. You can do it
but it wouldn't give you any advantage over making your own tracer if you don't need to "pre-filter" whatever you're
recording.

In other words, filtering events is the main selling point of Hunter - it's fast (cython implementation) and the query API is
flexible enough.


Changelog
=========

2.2.0 (2019-01-19)
------------------

* Added ``From`` predicate for tracing from a specific point. It stop after returning back to the same call depth with
a configurable offset.
* Fixed ``PYTHONHUNTERCONFIG`` not working in some situations (config values were resolved at the wrong time).
* Made tests in CI test the wheel that will eventually be published to PyPI
(`tox-wheel <https://pypi.org/project/tox-wheel/`_).
* Made ``event.stdlib`` more reliable: ``pkg_resources`` is considered part of stdlib and few more paths will be
considered as stdlib.
* Dumbed down the ``get_peercred`` check that is done when attaching with ``hunter-trace`` CLI (via
``hunter.remote.install()``). It will be slightly insecure but will work on OSX.
* Added OSX in the Travis test grid.

2.1.0 (2018-11-17)
------------------

* Made ``threading_support`` on by default but output automatic (also, now ``1`` or ``0`` allowed).
* Added ``pid_alignment`` and ``force_pid`` action options to show a pid prefix.
* Fixed some bugs around ``__eq__`` in various classes.
* Dropped Python 3.3 support.
* Dropped dependency on `fields <https://python-fields.readthedocs.io/en/stable/>`_.
* Actions now repr using a simplified implementation that tries to avoid calling ``__repr__`` on user classes in order
to avoid creating side-effects while tracing.
* Added support for the ``PYTHONHUNTERCONFIG`` environment variable (stores defaults and doesn't activate hunter).

2.0.2 (2017-11-24)
------------------

* Fixed indentation in ``CallPrinter`` action (shoudln't deindent on exception).
* Fixed option filtering in Cython Query implementation (filtering on ``tracer`` was allowed by mistake).
* Various fixes to docstrings and docs.

2.0.1 (2017-09-09)
------------------

* Now ``Py_AddPendingCall`` is used instead of acquiring the GIL (when using GDB).

2.0.0 (2017-09-02)
------------------

* Added the ``Event.count`` and ``Event.calls`` attributes.
* Added the ``lt``/``lte``/``gt``/``gte`` lookups.
* Added convenience aliases for ``startswith`` (``sw``), ``endswith`` (``ew``) and ``regex`` (``rx``).
* Added a convenience ``hunter.wrap`` decorator to start tracing around a function.
* Added support for remote tracing (with two backends: `manhole <https://pypi.python.org/pypi/manhole>`__ and GDB) via
the ``hunter-trace`` bin. Note: **Windows is NOT SUPPORTED**.
* Changed the default action to ``CallPrinter``. You'll need to use ``action=CodePrinter`` if you want the old output.

1.4.1 (2016-09-24)
------------------

* Fix support for getting sources for Cython module (it was broken on Windows and Python3.5+).

1.4.0 (2016-09-24)
------------------

* Added support for tracing Cython modules (`#30 <https://github.com/ionelmc/python-hunter/issues/30>`_). A
`# cython: linetrace=True` stanza or equivalent is required in Cython modules for this to work.

1.3.0 (2016-04-14)
------------------

* Added ``Event.thread``.
* Added ``Event.threadid`` and ``Event.threadname`` (available for filtering with ``Q`` objects).
* Added ``threading_support`` argument to ``hunter.trace``: makes new threads be traced and changes action output to include
threadname.
* Added support for using `pdb++ <https://pypi.python.org/pypi/pdbpp>`_ in the ``Debugger`` action.
* Added support for using `manhole <https://pypi.python.org/pypi/manhole>`_ via a new ``Manhole`` action.
* Made the ``handler`` a public but readonly property of ``Tracer`` objects.


1.2.2 (2016-01-28)
------------------

* Fix broken import. Require `fields>=4.0`.
* Simplify a string check in Cython code.

1.2.1 (2016-01-27)
------------------

* Fix "KeyError: 'normal'" bug in ``CallPrinter``. Create the NO_COLORS dict from the COLOR dicts. Some keys were missing.

1.2.0 (2016-01-24)
------------------

* Fixed printouts of objects that return very large string in ``__repr__()``. Trimmed to 512. Configurable in actions with the
``repr_limit`` option.
* Improved validation of ``VarsPrinter``'s initializer.
* Added a ``CallPrinter`` action.

1.1.0 (2016-01-21)
------------------

* Implemented a destructor (``__dealloc__``) for the Cython tracer.
* Improved the restoring of the previous tracer in the Cython tracer (use ``PyEval_SetTrace``) directly.
* Removed ``tracer`` as an allowed filtering argument in ``hunter.Query``.
* Add basic validation (must be callable) for positional arguments and actions passed into ``hunter.Q``. Closes
`#23 <https://github.com/ionelmc/python-hunter/issues/23>`_.
* Fixed ``stdlib`` checks (wasn't very reliable). Closes `#24 <https://github.com/ionelmc/python-hunter/issues/24>`_.

1.0.2 (2016-01-05)
------------------

* Fixed missing import in ``setup.py``.

1.0.1 (2015-12-24)
------------------

* Fix a compile issue with the MSVC compiler (seems it don't like the inline option on the ``fast_When_call``).

1.0.0 (2015-12-24)
------------------

* Implemented fast tracer and query objects in Cython. **MAY BE BACKWARDS INCOMPATIBLE**

To force using the old pure-python implementation set the ``PUREPYTHONHUNTER`` environment variable to non-empty value.
* Added filtering operators: ``contains``, ``startswith``, ``endswith`` and ``in``. Examples:

* ``Q(module_startswith='foo'`` will match events from ``foo``, ``foo.bar`` and ``foobar``.
* ``Q(module_startswith=['foo', 'bar']`` will match events from ``foo``, ``foo.bar``, ``foobar``, ``bar``, ``bar.foo`` and ``baroo`` .
* ``Q(module_endswith='bar'`` will match events from ``foo.bar`` and ``foobar``.
* ``Q(module_contains='ip'`` will match events from ``lipsum``.
* ``Q(module_in=['foo', 'bar']`` will match events from ``foo`` and ``bar``.
* ``Q(module_regex=r"(re|sre.*)\b") will match events from ``re``, ``re.foobar``, ``srefoobar`` but not from ``repr``.

* Removed the ``merge`` option. Now when you call ``hunter.trace(...)`` multiple times only the last one is active.
**BACKWARDS INCOMPATIBLE**
* Remove the `previous_tracer handling`. Now when you call ``hunter.trace(...)`` the previous tracer (whatever was in
``sys.gettrace()``) is disabled and restored when ``hunter.stop()`` is called. **BACKWARDS INCOMPATIBLE**
* Fixed ``CodePrinter`` to show module name if it fails to get any sources.

0.6.0 (2015-10-10)
------------------

* Added a ``clear_env_var`` option on the tracer (disables tracing in subprocess).
* Added ``force_colors`` option on ``VarsPrinter`` and ``CodePrinter``.
* Allowed setting the `stream` to a file name (option on ``VarsPrinter`` and ``CodePrinter``).
* Bumped up the filename alignment to 40 cols.
* If not merging then `self` is not kept as a previous tracer anymore.
Closes `#16 <https://github.com/ionelmc/python-hunter/issues/16>`_.
* Fixed handling in VarsPrinter: properly print eval errors and don't try to show anything if there's an AttributeError.
Closes `#18 <https://github.com/ionelmc/python-hunter/issues/18>`_.
* Added a ``stdlib`` boolean flag (for filtering purposes).
Closes `#15 <https://github.com/ionelmc/python-hunter/issues/15>`_.
* Fixed broken frames that have "None" for filename or module (so they can still be treated as strings).
* Corrected output files in the ``install_lib`` command so that pip can uninstall the pth file.
This only works when it's installed with pip (sadly, ``setup.py install/develop`` and ``pip install -e`` will still
leave pth garbage on ``pip uninstall hunter``).

0.5.1 (2015-04-15)
------------------

* Fixed ``Event.globals`` to actually be the dict of global vars (it was just the locals).

0.5.0 (2015-04-06)
------------------

* Fixed ``And`` and ``Or`` "single argument unwrapping".
* Implemented predicate compression. Example: ``Or(Or(a, b), c)`` is converted to ``Or(a, b, c)``.
* Renamed the ``Event.source`` to ``Event.fullsource``.
* Added ``Event.source`` that doesn't do any fancy sourcecode tokenization.
* Fixed ``Event.fullsource`` return value for situations where the tokenizer would fail.
* Made the print function available in the ``PYTHONHUNTER`` env var payload.
* Added a __repr__ for ``Event``.

0.4.0 (2015-03-29)
------------------

* Disabled colors for Jython (contributed by Claudiu Popa in `#12 <https://github.com/ionelmc/python-hunter/pull/12>`_).
* Test suite fixes for Windows (contributed by Claudiu Popa in `#11 <https://github.com/ionelmc/python-hunter/pull/11>`_).
* Added an introduction section in the docs.
* Implemented a prettier fallback for when no sources are available for that frame.
* Implemented fixups in cases where you use action classes as a predicates.

0.3.1 (2015-03-29)
------------------

* Forgot to merge some commits ...

0.3.0 (2015-03-29)
------------------

* Added handling for internal repr failures.
* Fixed issues with displaying code that has non-ascii characters.
* Implemented better display for ``call`` frames so that when a function has decorators the
function definition is shown (instead of just the first decorator).
See: `#8 <https://github.com/ionelmc/python-hunter/issues/8>`_.

0.2.1 (2015-03-28)
------------------

* Added missing color entry for exception events.
* Added ``Event.line`` property. It returns the source code for the line being run.

0.2.0 (2015-03-27)
------------------

* Added color support (and ``colorama`` as dependency).
* Added support for expressions in ``VarsPrinter``.
* Breaking changes:

* Renamed ``F`` to ``Q``. And ``Q`` is now just a convenience wrapper for ``Query``.
* Renamed the ``PYTHON_HUNTER`` env variable to ``PYTHONHUNTER``.
* Changed ``When`` to take positional arguments.
* Changed output to show 2 path components (still not configurable).
* Changed ``VarsPrinter`` to take positional arguments for the names.
* Improved error reporting for env variable activation (``PYTHONHUNTER``).
* Fixed env var activator (the ``.pth`` file) installation with ``setup.py install`` (the "egg installs") and
``setup.py develop``/``pip install -e`` (the "egg links").

0.1.0 (2015-03-22)
------------------

* First release on PyPI.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hunter-2.2.0.tar.gz (445.2 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

hunter-2.2.0-cp37-cp37m-win_amd64.whl (190.9 kB view details)

Uploaded CPython 3.7mWindows x86-64

hunter-2.2.0-cp37-cp37m-win32.whl (159.3 kB view details)

Uploaded CPython 3.7mWindows x86

hunter-2.2.0-cp37-cp37m-manylinux1_x86_64.whl (796.9 kB view details)

Uploaded CPython 3.7m

hunter-2.2.0-cp37-cp37m-macosx_10_13_x86_64.whl (218.5 kB view details)

Uploaded CPython 3.7mmacOS 10.13+ x86-64

hunter-2.2.0-cp36-cp36m-win_amd64.whl (191.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

hunter-2.2.0-cp36-cp36m-win32.whl (159.7 kB view details)

Uploaded CPython 3.6mWindows x86

hunter-2.2.0-cp36-cp36m-manylinux1_x86_64.whl (807.0 kB view details)

Uploaded CPython 3.6m

hunter-2.2.0-cp35-cp35m-win_amd64.whl (187.5 kB view details)

Uploaded CPython 3.5mWindows x86-64

hunter-2.2.0-cp35-cp35m-win32.whl (156.5 kB view details)

Uploaded CPython 3.5mWindows x86

hunter-2.2.0-cp35-cp35m-manylinux1_x86_64.whl (786.9 kB view details)

Uploaded CPython 3.5m

hunter-2.2.0-cp34-cp34m-win_amd64.whl (183.9 kB view details)

Uploaded CPython 3.4mWindows x86-64

hunter-2.2.0-cp34-cp34m-win32.whl (158.1 kB view details)

Uploaded CPython 3.4mWindows x86

hunter-2.2.0-cp34-cp34m-manylinux1_x86_64.whl (817.3 kB view details)

Uploaded CPython 3.4m

hunter-2.2.0-cp27-cp27mu-manylinux1_x86_64.whl (720.8 kB view details)

Uploaded CPython 2.7mu

hunter-2.2.0-cp27-cp27m-win_amd64.whl (186.2 kB view details)

Uploaded CPython 2.7mWindows x86-64

hunter-2.2.0-cp27-cp27m-win32.whl (155.9 kB view details)

Uploaded CPython 2.7mWindows x86

hunter-2.2.0-cp27-cp27m-macosx_10_13_x86_64.whl (217.3 kB view details)

Uploaded CPython 2.7mmacOS 10.13+ x86-64

File details

Details for the file hunter-2.2.0.tar.gz.

File metadata

  • Download URL: hunter-2.2.0.tar.gz
  • Upload date:
  • Size: 445.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.4.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for hunter-2.2.0.tar.gz
Algorithm Hash digest
SHA256 1284a0193ed4d8f21b82f2a7351d0df97644fc3d30dad877a9ca788cd1d2e0e5
MD5 483e04e3198bcd4bd69faa0001f7fc37
BLAKE2b-256 8fbb65495e975701c056f57cc170c5498f10dfdd8c863d488ba8efb30bdbae60

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 190.9 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 3ed868d20135c7e3c4cef925d28f5d4bc0719dd46da7a95dae15c91fd192a288
MD5 a1f64e2e15c349c71273d28b1b016204
BLAKE2b-256 b46e1ec417fc1bf8cc1f6f041917851651d2b05da9c3c002de28bfe8cc22e245

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp37-cp37m-win32.whl.

File metadata

  • Download URL: hunter-2.2.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 159.3 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 4929b2ab79a41cef179302bdc58d3e316ad13dad4e39f5be1167761eadfa7978
MD5 a99d9050bc33d578e4d52ce0aa40ad28
BLAKE2b-256 0d648fa4850c044cada365f69ed796327ba71bddae1f5194e5911526ec373beb

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp37-cp37m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 796.9 kB
  • Tags: CPython 3.7m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 24763bde736aaebdbc6b7a5c0ca63567c096ec231a6f626aebea839637ac9e0e
MD5 be53695930a0d3966587556d9494c7bf
BLAKE2b-256 7a0aa90852ecc3a50d29e0e6024b93a2ef4e18bd47639832dbb0c686c14aff94

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp37-cp37m-macosx_10_13_x86_64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp37-cp37m-macosx_10_13_x86_64.whl
  • Upload date:
  • Size: 218.5 kB
  • Tags: CPython 3.7m, macOS 10.13+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp37-cp37m-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 90266f970ec12dfa7b9084b9ff3df211ce27094c4f100b30f71445efc8c2fcdb
MD5 c7c10389d284ee926fe476a6dfc8c8f3
BLAKE2b-256 72f1efb39124ae5af10a00e916e56e938c5d1485fb6a15cf6ac46692322e96bf

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp36-cp36m-win_amd64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 191.1 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 918e495d27d0025d2b164df925b3ef6a67f230afa4b173dfbf61273789e9ed64
MD5 a5bbb7f16b8c6da13e1e7d11598bf59f
BLAKE2b-256 2190da9f3c6daf2080cf8652b3dd1706bc638d3e0228224087963a3610322e31

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp36-cp36m-win32.whl.

File metadata

  • Download URL: hunter-2.2.0-cp36-cp36m-win32.whl
  • Upload date:
  • Size: 159.7 kB
  • Tags: CPython 3.6m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp36-cp36m-win32.whl
Algorithm Hash digest
SHA256 1b5fe895657f2b3cc2c0362c5cf42dbaf6bc75ac528618781ad9976743d4f738
MD5 40b4e10f53812ea3ae90c0ebcf67d558
BLAKE2b-256 0f81552702c6288d46c0ae880a0e2f311adcfbd31faae064a2518f21fc550001

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp36-cp36m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 807.0 kB
  • Tags: CPython 3.6m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 fe53282a0c8e0d02cbb4c897e0b6da5e4e86b7a4a3317ad7a2c76174288d2f52
MD5 fe7e9f5fabae98e56047694f14a2dbaa
BLAKE2b-256 367aa9b39c9fb6052dcfef491584059017034a211dccd373e5298b3e03550afb

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp35-cp35m-win_amd64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp35-cp35m-win_amd64.whl
  • Upload date:
  • Size: 187.5 kB
  • Tags: CPython 3.5m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp35-cp35m-win_amd64.whl
Algorithm Hash digest
SHA256 a59e9aa6bc0155626f198faa4dd7ad6d183aa187cad921b9a193bc0d404716dd
MD5 8ab2921c8f5002463cc336289e90c222
BLAKE2b-256 2cd42ee65ac59efa693a84d73a7f2ac3e573457c3962ee9b52a392036be34b6f

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp35-cp35m-win32.whl.

File metadata

  • Download URL: hunter-2.2.0-cp35-cp35m-win32.whl
  • Upload date:
  • Size: 156.5 kB
  • Tags: CPython 3.5m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp35-cp35m-win32.whl
Algorithm Hash digest
SHA256 1983687dc403e5800388b4b228c61a1de2322b56d752a4071cb757a9ba057571
MD5 0244ff46777c36a86741771fad09d663
BLAKE2b-256 d360054ee2e4b33b8daf1567a7c4bb91c24cc14616700e74054ffc373ddd3893

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp35-cp35m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 786.9 kB
  • Tags: CPython 3.5m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 05e1020554fbcfb0914d1733040cf407ad5179a113149dbe8148acf8c7ce1a32
MD5 185857328564b7c9061ad05bbc29c427
BLAKE2b-256 53b2a2074a8360d52f68d1470170684864a6d9163469b591d3d247ab1cdf9d22

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp34-cp34m-win_amd64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp34-cp34m-win_amd64.whl
  • Upload date:
  • Size: 183.9 kB
  • Tags: CPython 3.4m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp34-cp34m-win_amd64.whl
Algorithm Hash digest
SHA256 b8c7934801c736267dd46c21daa5a1d97fff41fb9866d322a24b10e13ddfe5cb
MD5 6875cda1276f8d60269519fb7cd2df5d
BLAKE2b-256 7fd463ec510913152b3ddf5659908962e657c733619dead5373bc33dde910856

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp34-cp34m-win32.whl.

File metadata

  • Download URL: hunter-2.2.0-cp34-cp34m-win32.whl
  • Upload date:
  • Size: 158.1 kB
  • Tags: CPython 3.4m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp34-cp34m-win32.whl
Algorithm Hash digest
SHA256 b31792b75985ca0fe14f2343ea0b551e96df7fc88d0c105209afbc1f288d7937
MD5 7ecc110c12a532f3ccf290df30a63741
BLAKE2b-256 6550e35e00150901e43f23869be28e3ab36d02131cb214cb10c552d149e54d83

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp34-cp34m-manylinux1_x86_64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp34-cp34m-manylinux1_x86_64.whl
  • Upload date:
  • Size: 817.3 kB
  • Tags: CPython 3.4m
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp34-cp34m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 54f063786d936429fd2f32d013845e658bbb34cdf8686dd509b7bd5e58459708
MD5 b638c450c72504b52c5d61bce60e7dfb
BLAKE2b-256 e02616344ad26fac9c549f8a79199bfcf1ff2c769f18ae95c248844d7dedd87e

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp27-cp27mu-manylinux1_x86_64.whl
  • Upload date:
  • Size: 720.8 kB
  • Tags: CPython 2.7mu
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 b7781e5ec540e05ba2ffcffc5869b6addf06d5c820d1f828ca97ee607243cb9c
MD5 ebad82074c138ed67233b461d281d433
BLAKE2b-256 a715ee12d58f1e73ed23a249ccf7c4048fe08725298ee68df9556fc0c1170176

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp27-cp27m-win_amd64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp27-cp27m-win_amd64.whl
  • Upload date:
  • Size: 186.2 kB
  • Tags: CPython 2.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp27-cp27m-win_amd64.whl
Algorithm Hash digest
SHA256 ac89f42e57218ad55ef9119d8d9a703acd60541def0d458c920f2d843c7d18d9
MD5 4e149dc1f6caf84666ef7ab61fe56eb0
BLAKE2b-256 25eac940fd49faf6268b6c7a905cd5fd1921cefb8de3d0aff69bf0f97fa75b21

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp27-cp27m-win32.whl.

File metadata

  • Download URL: hunter-2.2.0-cp27-cp27m-win32.whl
  • Upload date:
  • Size: 155.9 kB
  • Tags: CPython 2.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp27-cp27m-win32.whl
Algorithm Hash digest
SHA256 4cb0a7dec70ceee6e35f169a29c8faf4c30dbca0e60a3e69cc30a2e678f27fce
MD5 3ef91bc79d25fc02b7bde1af9ffbc8a0
BLAKE2b-256 f73e1f1ea4d4078901412ee1bf58f6b6fdd5a6dca03bc7fc9e95bc57443c45dc

See more details on using hashes here.

File details

Details for the file hunter-2.2.0-cp27-cp27m-macosx_10_13_x86_64.whl.

File metadata

  • Download URL: hunter-2.2.0-cp27-cp27m-macosx_10_13_x86_64.whl
  • Upload date:
  • Size: 217.3 kB
  • Tags: CPython 2.7m, macOS 10.13+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

File hashes

Hashes for hunter-2.2.0-cp27-cp27m-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 45e44ae5746d164df743e891f485bffff8fa4d910849c41d1d5d8e19cf636b24
MD5 e17308cb639a4adcaf3521fb75071cf4
BLAKE2b-256 2155c2559c4b195f4f1de4daabbaf9e3d47055e498aac65c547ac1c69beba08c

See more details on using hashes here.

Release history Release notifications | RSS feed

3.9.0

51 files

3.8.0

30 files

3.7.0

37 files

3.6.1

16 files

3.6.0

16 files

3.5.1

32 files

3.5.0

32 files

3.4.3

37 files

3.4.1

32 files

3.4.0

31 files

3.3.8

22 files

3.3.5

22 files

3.3.3

22 files

3.3.2

22 files

3.3.1

22 files

3.3.0

20 files

3.2.2

22 files

3.2.1

22 files

3.2.0

22 files

3.1.3

18 files

3.1.2

18 files

3.1.1

13 files

3.1.0

13 files

3.0.5

18 files

3.0.4

18 files

3.0.3

15 files

3.0.2

14 files

3.0.1

15 files

3.0.0

15 files

2.2.1

18 files

2.2.0.post1

1 file

This release

2.2.0 This release

18 files

2.1.0

22 files

2.0.2

23 files

2.0.1

23 files

2.0.0

23 files

1.4.1

14 files

1.4.0

8 files

1.3.0

14 files

1.2.2

7 files

1.2.1

7 files

1.2.0

7 files

1.1.0

7 files

1.0.2

7 files

1.0.1

7 files

1.0.0

1 file

0.6.0

2 files

0.5.1

2 files

0.5.0

2 files

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

0.0.1

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