Skip to main content

Hunter is a flexible code tracing toolkit.

Reason this release was yanked:

didn't update python_requires

Project description

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, a convenient terminal API and a CLI tool to attach to 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:

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

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

That would result in:

>>> os.path.join('a', 'b')
         /usr/lib/python3.6/posixpath.py:75    call      => join(a='a')
         /usr/lib/python3.6/posixpath.py:80    line         a = os.fspath(a)
         /usr/lib/python3.6/posixpath.py:81    line         sep = _get_sep(a)
         /usr/lib/python3.6/posixpath.py:41    call         => _get_sep(path='a')
         /usr/lib/python3.6/posixpath.py:42    line            if isinstance(path, bytes):
         /usr/lib/python3.6/posixpath.py:45    line            return '/'
         /usr/lib/python3.6/posixpath.py:45    return       <= _get_sep: '/'
         /usr/lib/python3.6/posixpath.py:82    line         path = a
         /usr/lib/python3.6/posixpath.py:83    line         try:
         /usr/lib/python3.6/posixpath.py:84    line         if not p:
         /usr/lib/python3.6/posixpath.py:86    line         for b in map(os.fspath, p):
         /usr/lib/python3.6/posixpath.py:87    line         if b.startswith(sep):
         /usr/lib/python3.6/posixpath.py:89    line         elif not path or path.endswith(sep):
         /usr/lib/python3.6/posixpath.py:92    line         path += sep + b
         /usr/lib/python3.6/posixpath.py:86    line         for b in map(os.fspath, p):
         /usr/lib/python3.6/posixpath.py:96    line         return path
         /usr/lib/python3.6/posixpath.py:96    return    <= join: 'a/b'
'a/b'

In a terminal it would look like:

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

Another useful scenario is to ignore all standard modules and force colors to make them stay even if the output is redirected to a file.

import hunter
hunter.trace(stdlib=False, action=hunter.CallPrinter(force_colors=True))

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).

If filters match then action will be run. Example:

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

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

That would result in:

>>> os.path.join('a', 'b')
         /usr/lib/python3.6/posixpath.py:75    call      def join(a, *p):
         /usr/lib/python3.6/posixpath.py:80    line          a = os.fspath(a)
         /usr/lib/python3.6/posixpath.py:81    line          sep = _get_sep(a)
         /usr/lib/python3.6/posixpath.py:41    call      def _get_sep(path):
         /usr/lib/python3.6/posixpath.py:42    line          if isinstance(path, bytes):
         /usr/lib/python3.6/posixpath.py:45    line              return '/'
         /usr/lib/python3.6/posixpath.py:45    return            return '/'
                                               ...       return value: '/'
         /usr/lib/python3.6/posixpath.py:82    line          path = a
         /usr/lib/python3.6/posixpath.py:83    line          try:
         /usr/lib/python3.6/posixpath.py:84    line              if not p:
         /usr/lib/python3.6/posixpath.py:86    line              for b in map(os.fspath, p):
         /usr/lib/python3.6/posixpath.py:87    line                  if b.startswith(sep):
         /usr/lib/python3.6/posixpath.py:89    line                  elif not path or path.endswith(sep):
         /usr/lib/python3.6/posixpath.py:92    line                      path += sep + b
         /usr/lib/python3.6/posixpath.py:86    line              for b in map(os.fspath, p):
         /usr/lib/python3.6/posixpath.py:96    line          return path
         /usr/lib/python3.6/posixpath.py:96    return        return path
                                               ...       return value: 'a/b'
'a/b'
  • or in a terminal:

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

Another useful action is the VarsPrinter:

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:

>>> os.path.join('a', 'b')
     /usr/lib/python3.6/posixpath.py:75    call      => join(a='a')
     /usr/lib/python3.6/posixpath.py:80    line         a = os.fspath(a)
     /usr/lib/python3.6/posixpath.py:81    line         sep = _get_sep(a)
     /usr/lib/python3.6/posixpath.py:41    call      [path => 'a']
     /usr/lib/python3.6/posixpath.py:41    call         => _get_sep(path='a')
     /usr/lib/python3.6/posixpath.py:42    line      [path => 'a']
     /usr/lib/python3.6/posixpath.py:42    line            if isinstance(path, bytes):
     /usr/lib/python3.6/posixpath.py:45    line      [path => 'a']
     /usr/lib/python3.6/posixpath.py:45    line            return '/'
     /usr/lib/python3.6/posixpath.py:45    return    [path => 'a']
     /usr/lib/python3.6/posixpath.py:45    return       <= _get_sep: '/'
     /usr/lib/python3.6/posixpath.py:82    line         path = a
     /usr/lib/python3.6/posixpath.py:83    line      [path => 'a']
     /usr/lib/python3.6/posixpath.py:83    line         try:
     /usr/lib/python3.6/posixpath.py:84    line      [path => 'a']
     /usr/lib/python3.6/posixpath.py:84    line         if not p:
     /usr/lib/python3.6/posixpath.py:86    line      [path => 'a']
     /usr/lib/python3.6/posixpath.py:86    line         for b in map(os.fspath, p):
     /usr/lib/python3.6/posixpath.py:87    line      [path => 'a']
     /usr/lib/python3.6/posixpath.py:87    line         if b.startswith(sep):
     /usr/lib/python3.6/posixpath.py:89    line      [path => 'a']
     /usr/lib/python3.6/posixpath.py:89    line         elif not path or path.endswith(sep):
     /usr/lib/python3.6/posixpath.py:92    line      [path => 'a']
     /usr/lib/python3.6/posixpath.py:92    line         path += sep + b
     /usr/lib/python3.6/posixpath.py:86    line      [path => 'a/b']
     /usr/lib/python3.6/posixpath.py:86    line         for b in map(os.fspath, p):
     /usr/lib/python3.6/posixpath.py:96    line      [path => 'a/b']
     /usr/lib/python3.6/posixpath.py:96    line         return path
     /usr/lib/python3.6/posixpath.py:96    return    [path => 'a/b']
     /usr/lib/python3.6/posixpath.py:96    return    <= join: 'a/b'
'a/b'

In a terminal it would look like:

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):

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:

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:

>>> 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:

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

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 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.

Note: Windows ain’t supported.

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_startswith='django')"
    PYTHONHUNTER="Q(module_startswith='celery')"

    which is the equivalent of:

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

    which is the equivalent of:

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

Filtering DSL

Hunter supports a flexible query DSL, see the introduction.

Development

To run the all tests run:

tox

Design notes

Hunter doesn’t do everything. As a design goal of this library some things are made intentionally austere and verbose (to avoid complexity, confusion and inconsistency). This has few consequences:

  • There are Operators but there’s no negation operator. Instead you’re expected to negate a Query object, eg: ~Q(module='re').

  • There are no specialized operators or filters - all filters behave exactly the same. For example:

    • No filter for packages. You’re expected to filter by module with an operator.

    • No filter for arguments, return values or variables. You’re expected to write your own filter function and deal with the problems of poking into objects.

  • Layering is minimal. There’s are some helpers that do some argument processing and conversions to save you some typing but that’s about it.

  • The library doesn’t try to hide the mechanics of tracing in Python - it’s 1:1 regarding what Python sends to a trace function if you’d be using sys.settrace.

  • Doesn’t have any storage. You are expected to redirect output to a file.

You should look at it like it’s a tool to help you understand and debug big applications, or a framework ridding you of the boring parts of settrace, not something that helps you learn Python.

FAQ

Why not Smiley?

There’s some obvious overlap with 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 is another tracer tool. It seems quite similar to Smiley - it uses a sqlite database for the events, threads and IPC, thus it’s reasonable to expect the same kind of problems.

Why not PySnooper or snoop?

snoop is a refined version of PySnooper. Both are more suited to tracing small programs or functions as the output is more verbose and less suited to the needs of tracing a big application where Hunter provides more flexible setup, filtering capabilities, speed and brevity.

Why not coverage?

For purposes of debugging 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.

Projects using Hunter

Noteworthy usages or Hunter (submit a PR with your project if you built a tool that relies on hunter):

More projects using it at https://github.com/ionelmc/python-hunter/network/dependents

Changelog

3.4.0 (2021-12-14)

  • Switched CI to GitHub Actions, this has a couple consequences:

    • Support for Python 2.7 is dropped. You can still install it there but it’s not tested anymore and Python 2 specific handling will be removed at some point.

    • Linux wheels are now provided in musllinux and manylinux2014 variants.

  • Extension building is now completely skipped on PyPy.

  • A pure but tagged as platform specific wheel is now provided for PyPy (to have fast installs there as well).

3.3.8 (2021-06-23)

  • Fixed CI problem that publishes same type of wheels two times.

3.3.7 (2021-06-23)

  • Fixed a bug with how stdlib is detected on Windows (at least).

3.3.6 (2021-06-23)

  • Fixed regression from 3.3.4: stdlib filter was broken.

  • Improved the pth file (PYTHONHUNTER environment variable activation) to use a clean eval environment. No bogus variables like line (from the site.py machinery) will be available anymore.

  • Fixed a bug in VarsSnooper that would make it fail in rare situation where a double return event is emitted.

3.3.5 (2021-06-11)

  • Added support for Python 3.10.

  • Added support for time objects and the fold option in safe_repr.

  • 3.3.4 was skipped cause I messed up the CI.

3.3.3 (2021-05-04)

  • Fixed tracer still being active for other threads after it was stopped.

    Python unfortunately only allows removing the trace function for the current thread - now hunter.tracer.Tracer will uninstall itself if it’s marked as stopped.

    This fixes bogus errors that appear when using ipdb with the hunter.actions.Debugger action while thread support is enabled (the default).

3.3.2 (2021-03-25)

  • Changed CI to build Python 3.9 wheels. Python 3.5 no longer tested and wheels no longer built to keep things simple.

  • Documentation improvements.

3.3.1 (2020-10-24)

  • Fixed CI/test issues that prevented all of 21 wheels being published.

3.3.0 (2020-10-23)

  • Fixed handling so that hunter.event.Event.module is always the "?" string instead of None. Previously it was None when tracing particularly broken code and broke various predicates.

  • Similarly hunter.event.Event.filename is now "?" if there’s no filename available.

  • Building on the previous changes the actions have simpler code for displaying missing module/filenames.

  • Changed hunter.actions.CallPrinter so that trace events for builtin functions are displayed differently. These events appear when using profile mode (eg: trace(profile=True)).

  • Fixed failure that could occur if hunter.event.Event.module is an unicode string. Now it’s always a regular string. Only applies to Python 2.

  • Fixed argument display when tracing functions with tuple arguments. Closes #88. Only applies to Python 2.

  • Improved error reporting when internal failures occur. Now some details about the triggering event are logged.

3.2.2 (2020-09-04)

  • Fixed oversight over what value is in hunter.event.Event.builtin. Now it’s always a boolean, and can be used consistently in filters (eg: builtin=True,function='getattr').

3.2.1 (2020-08-18)

  • Added support for regex, date and datetime in safe_repr.

  • Fixed call argument display when positional and keyword arguments are used in hunter.actions.CallPrinter.

3.2.0 (2020-08-16)

  • Implemented the hunter.actions.StackPrinter action.

  • Implemented the hunter.predicates.Backlog predicate. Contributed by Dan Ailenei in #81.

  • Improved contributing section in docs a bit. Contributed by Tom Schraitle in #85.

  • Improved filtering performance by avoiding a lot of unnecessary PyObject_GetAttr calls in the Cython implementation of hunter.predicates.Backlog.

  • Implemented the hunter.actions.ErrorSnooper action.

  • Added support for profiling mode (eg: trace(profile=True)). This mode will use setprofile instead of settrace.

  • Added ARM64 wheels and CI.

  • Added hunter.event.Event.instruction and hunter.event.Event.builtin (usable in profile mode).

  • Added more cookbook entries.

3.1.3 (2020-02-02)

  • Improved again the stdlib check to handle certain paths better.

3.1.2 (2019-01-19)

  • Really fixed the <frozen importlib.something stdlib check.

3.1.1 (2019-01-19)

  • Marked all the <frozen importlib.something files as part of stdlib.

3.1.0 (2019-01-19)

  • Added hunter.actions.ErrorSnooper - an action that detects silenced exceptions.

  • Added hunter.load_config and fixed issues with configuration being loaded too late from the PYTHONHUNTERCONFIG environment variable.

  • Changed hunter.From helper to automatically move depth and calls filters to the predicate (so they filter after hunter.predicates.From activates).

  • Changed hunter.predicates.From to pass a copy of event to the predicate. The copy will have the depth and calls attributes adjusted to the point where hunter.predicates.From activated.

  • Fixed a bunch of inconsistencies and bugs when using & and | operators with predicates.

  • Fixed a bunch of broken fields on detached events <hunter.event.Event.detach> (hunter.event.Event.function_object and hunter.event.Event.arg).

  • Improved docstrings in various and added a configuration doc section.

  • Improved testing (more coverage).

3.0.5 (2019-12-06)

  • Really fixed safe_repr so it doesn’t cause side-effects (now isinstance/issubclass are avoided - they can cause side-effects in code that abuses descriptors in special attributes/methods).

3.0.4 (2019-10-26)

  • Really fixed stream setup in actions (using force_colors without any stream was broken). See: hunter.actions.ColorStreamAction.

  • Fixed __repr__ for the hunter.predicates.From predicate to include watermark.

  • Added binary wheels for Python 3.8.

3.0.3 (2019-10-13)

  • Fixed safe_repr on pypy so it’s safer on method objects. See: hunter.actions.ColorStreamAction.

3.0.2 (2019-10-10)

  • Fixed setting stream from PYTHONHUNTERCONFIG environment variable. See: hunter.actions.ColorStreamAction.

  • Fixed a couple minor documentation issues.

3.0.1 (2019-06-17)

  • Fixed issue with coloring missing source message (coloring leaked into next line).

3.0.0 (2019-06-17)

  • The package now uses setuptools-scm for development builds (available at https://test.pypi.org/project/hunter/). As a consequence installing the sdist will download setuptools-scm.

  • Recompiled cython modules with latest Cython. Hunter can be installed without any Cython, as before.

  • Refactored some of the cython modules to have more typing information and not use deprecated property syntax.

  • Replaced unsafe_repr option with repr_func. Now you can use your custom repr function in the builtin actions. BACKWARDS INCOMPATIBLE

  • Fixed buggy filename handling when using Hunter in ipython/jupyter. Source code should be properly displayed now.

  • Removed globals option from VarsPrinter action. Globals are now always looked up. BACKWARDS INCOMPATIBLE

  • Added support for locals in VarsPrinter action. Now you can do VarsPrinter('len(foobar)').

  • Always pass module_globals dict to linecache methods. Source code from PEP-302 loaders is now printed properly. Contributed by Mikhail Borisov in #65.

  • Various code cleanup, style and docstring fixing.

  • Added hunter.From helper to allow passing in filters directly as keyword arguments.

  • Added hunter.event.Event.detach for storing events without leaks or side-effects (due to prolonged references to Frame objects, local or global variables).

  • Refactored the internals of actions for easier subclassing.

    Added the hunter.actions.ColorStreamAction.filename_prefix, hunter.actions.ColorStreamAction.output, hunter.actions.ColorStreamAction.pid_prefix, hunter.actions.ColorStreamAction.thread_prefix, hunter.actions.ColorStreamAction.try_repr and hunter.actions.ColorStreamAction.try_source methods to the hunter.actions.ColorStreamAction baseclass.

  • Added hunter.actions.VarsSnooper - a PySnooper-inspired variant of hunter.actions.VarsPrinter. It will record and show variable changes, with the risk of leaking or using too much memory of course :)

  • Fixed tracers to log error and automatically stop if there’s an internal failure. Previously error may have been silently dropped in some situations.

2.2.1 (2019-01-19)

  • Fixed a link in changelog.

  • Fixed some issues in the Travis configuration.

2.2.0 (2019-01-19)

  • Added hunter.predicates.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).

  • 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.

  • 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 hunter.actions.CallPrinter action (shouldn’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 hunter.event.Event.count and hunter.event.Event.calls attributes.

  • Added the lt/lte/gt/gte lookups.

  • Added convenience aliases for startswith (sw), endswith (ew), contains (has) and regex (rx).

  • Added a convenience hunter.wrap decorator to start tracing around a function.

  • Added support for remote tracing (with two backends: manhole and GDB) via the hunter-trace bin. Note: Windows is NOT SUPPORTED.

  • Changed the default action to hunter.actions.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). A # cython: linetrace=True stanza or equivalent is required in Cython modules for this to work.

1.3.0 (2016-04-14)

  • Added hunter.event.Event.thread.

  • Added hunter.event.Event.threadid and hunter.event.Event.threadname (available for filtering with hunter.Q).

  • Added hunter.event.Event.threading_support argument to hunter.trace. It makes new threads be traced and changes action output to include thread name.

  • Added support for using pdb++ in the hunter.actions.Debugger action.

  • Added support for using manhole via a new hunter.actions.Manhole action.

  • Made the hunter.event.Event.handler a public but readonly property.

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 hunter.actions.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 hunter.actions.VarsPrinter’s initializer.

  • Added a hunter.actions.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.

  • Fixed stdlib checks (wasn’t very reliable). Closes #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 hunter.actions.VarsPrinter and hunter.actions.CodePrinter.

  • Allowed setting the stream to a file name (option on hunter.actions.VarsPrinter and hunter.actions.CodePrinter).

  • Bumped up the filename alignment to 40 cols.

  • If not merging then self is not kept as a previous tracer anymore. Closes #16.

  • Fixed handling in VarsPrinter: properly print eval errors and don’t try to show anything if there’s an AttributeError. Closes #18.

  • Added a stdlib boolean flag (for filtering purposes). Closes #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 hunter.event.Event.globals to actually be the dict of global vars (it was just the locals).

0.5.0 (2015-04-06)

  • Fixed hunter.And and hunter.Or “single argument unwrapping”.

  • Implemented predicate compression. Example: Or(Or(a, b), c) is converted to Or(a, b, c).

  • Renamed hunter.event.Event.source to hunter.event.Event.fullsource.

  • Added hunter.event.Event.source that doesn’t do any fancy sourcecode tokenization.

  • Fixed hunter.event.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 hunter.event.Event.

0.4.0 (2015-03-29)

  • Disabled colors for Jython. Contributed by Claudiu Popa in #12.

  • Test suite fixes for Windows. Contributed by Claudiu Popa in #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.

0.2.1 (2015-03-28)

  • Added missing color entry for exception events.

  • Added hunter.event.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 hunter.actions.VarsPrinter.

  • Breaking changes:

    • Renamed F to hunter.Q. And hunter.Q is now just a convenience wrapper for hunter.predicates.Query.

    • Renamed the PYTHON_HUNTER env variable to PYTHONHUNTER.

    • Changed hunter.predicates.When to take positional arguments.

    • Changed output to show 2 path components (still not configurable).

    • Changed hunter.actions.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.

Project details


Download files

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

Source Distribution

hunter-3.4.0.tar.gz (558.3 kB view details)

Uploaded Source

Built Distributions

hunter-3.4.0-cp310-cp310-win_amd64.whl (288.0 kB view details)

Uploaded CPython 3.10Windows x86-64

hunter-3.4.0-cp310-cp310-musllinux_1_1_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ x86-64

hunter-3.4.0-cp310-cp310-musllinux_1_1_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.10musllinux: musl 1.1+ ARM64

hunter-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

hunter-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

hunter-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl (301.4 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

hunter-3.4.0-cp39-cp39-win_amd64.whl (286.3 kB view details)

Uploaded CPython 3.9Windows x86-64

hunter-3.4.0-cp39-cp39-musllinux_1_1_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ x86-64

hunter-3.4.0-cp39-cp39-musllinux_1_1_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.9musllinux: musl 1.1+ ARM64

hunter-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

hunter-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

hunter-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl (301.3 kB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

hunter-3.4.0-cp38-cp38-win_amd64.whl (286.7 kB view details)

Uploaded CPython 3.8Windows x86-64

hunter-3.4.0-cp38-cp38-musllinux_1_1_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ x86-64

hunter-3.4.0-cp38-cp38-musllinux_1_1_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.8musllinux: musl 1.1+ ARM64

hunter-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

hunter-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

hunter-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl (295.7 kB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

hunter-3.4.0-cp37-cp37m-win_amd64.whl (280.0 kB view details)

Uploaded CPython 3.7mWindows x86-64

hunter-3.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ x86-64

hunter-3.4.0-cp37-cp37m-musllinux_1_1_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.7mmusllinux: musl 1.1+ ARM64

hunter-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ x86-64

hunter-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.7mmanylinux: glibc 2.17+ ARM64

hunter-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl (289.4 kB view details)

Uploaded CPython 3.7mmacOS 10.9+ x86-64

hunter-3.4.0-cp36-cp36m-win_amd64.whl (280.1 kB view details)

Uploaded CPython 3.6mWindows x86-64

hunter-3.4.0-cp36-cp36m-musllinux_1_1_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ x86-64

hunter-3.4.0-cp36-cp36m-musllinux_1_1_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.6mmusllinux: musl 1.1+ ARM64

hunter-3.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.4 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ x86-64

hunter-3.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.4 MB view details)

Uploaded CPython 3.6mmanylinux: glibc 2.17+ ARM64

hunter-3.4.0-cp36-cp36m-macosx_10_9_x86_64.whl (292.2 kB view details)

Uploaded CPython 3.6mmacOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: hunter-3.4.0.tar.gz
  • Upload date:
  • Size: 558.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0.tar.gz
Algorithm Hash digest
SHA256 3a5062498e260045aed5aa759934832994607717be66ad01f269a27a2762d423
MD5 452da3ba8ccb4d9319e80dfed3017307
BLAKE2b-256 f6448180905ee6ae2811bacb84302fe8f55bf8f38d851df718f41de2e7ce3db3

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 288.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 188ca21e078487ab4bba98b5e1f5d42fbc6a4c91ca6cc2025703eb776db87332
MD5 a3cd1d02ffda403d437f6cfd4e8671a2
BLAKE2b-256 bfd1ea6232bd83f42e2519f94120343928ce22a31e41fae01ed06f2a1eff94ae

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp310-cp310-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 9d75ed5cd053336767527044651dc3d083a718fe4039667d61f7ba61c7d112d4
MD5 524accfa5a6793e732e73322d413b4dd
BLAKE2b-256 c3c4c9b19862a3e30466b8ddf5e91c7adb7439dd2a4bb7e711be0897a425bb17

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp310-cp310-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp310-cp310-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.10, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp310-cp310-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 d3cd76329f8e01921a2e4db29c39c0175891ac28f8c5afa170c8961fc8549075
MD5 e98101dea50ce315aa221e810af1c699
BLAKE2b-256 33aff7a9c052491e20d79a5fe525c7fa9c743cae26154eaaee68c9558fed8242

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 27e5f8836718df90516940a7a37bf24d6ea2e47753aaabfcd0d4b0c00f8ecfbf
MD5 5f59aa8a25a7ec8a5519ee060351aa1b
BLAKE2b-256 10ac5f1ade9c02394b2e4b7e9c1afddcd31b5d492ea118170901bce8dda51631

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 98d4a4e2afcd7ff1f7acbeb882041e2eb11e32cb239cfb112936dbaa35a9dd56
MD5 45d16c7bdf254aebe6962c16aa4ee04b
BLAKE2b-256 55ec0789fd709fedabe184857925464ddc3708e654468458119544d280e1822b

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 301.4 kB
  • Tags: CPython 3.10, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 49d00033ab31709493d05564451621d6269e8d604b3aed33779e41413d123efe
MD5 efa8d7ef22fd2112766e3a45fc4bdfee
BLAKE2b-256 e5d906b939f9197a5476db82a5580f20e1ed2e0b4106ddecb1f19e4b068b7b15

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 286.3 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 31c8fb110fd1982cd63737cf133c979b977817a95c3facaf6cea03ba19f20e09
MD5 2f733104ba15470b23ab7218c7ed0075
BLAKE2b-256 0673ec4c1a365eb34b27b8c4baf31edebf718d5581721f225b96c29583d6c1fd

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp39-cp39-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 ea2d2612b876b42b21e205d635c1bd80e137feb5a9ffdc629eaf693a66d97bc3
MD5 3f91f5aaa35108b475b7d93a5b337acd
BLAKE2b-256 06dbcaee79a72ab0d92eeec4363cb7d600b1d088cbf4b7cceaddc00b621baaaf

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp39-cp39-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp39-cp39-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.9, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp39-cp39-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 9a1a9997ec04e404e7f8044e023578008d29268bc01246c3bf43976dc4a9d2b5
MD5 0930bb70706a3910c5a06a4da57a92a7
BLAKE2b-256 52aaf5d6bfeb98992a96c1dfcad14cf4ed1c11e6b2902e3cdc90dc219aa62107

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 bbdf34a3e4be1b334c0895f701ec66c67bf143f4abdc8f6c84c1ddbe69f3f569
MD5 e8776ba16f9a251e8e7dfd7efa968c0b
BLAKE2b-256 7faf613366bca0b5a7f034004cad751625560643248c81cceaef1dac6ff8ddf9

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b4c176d14a55e881e2b3d871f3229bbeb8ada46f53c4532ab64a0d68cc4b9cea
MD5 f633904a845b92719c3433cd68567717
BLAKE2b-256 1b6e014240b96b8aa02046816fecf438ec445f6bad7e63e46da67495f9bed558

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 301.3 kB
  • Tags: CPython 3.9, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 103017dff95512d6b6633a8bcce19e9401969a60bfc5f4d9862d66ce396de31c
MD5 ab51a4d623f3017cde8d13bf2d67bb2d
BLAKE2b-256 fa714f7bb64044d0ce2220b6480f7a32cf5925845308a137b45954553773b9e1

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 286.7 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 130cce35fde846e8d0db1315a6f523c17f2dfa0fdf962b5841f7493f26a76fb2
MD5 0e0de57550e4c466d2f6545735853576
BLAKE2b-256 8233cace51d704349a1d08f425909f2015ebebf3ba1496ba7bd3ac315a702913

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp38-cp38-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 f17891d018ac60e89b1faeb4d32e382d63452e5b0365165587a06fb82604fff8
MD5 2f09e16fde4b42870f907b4b67e3815a
BLAKE2b-256 4b054eb67509732121de556a710c916e6fada29d9fbf94022f43f27c3e21f0e6

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp38-cp38-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp38-cp38-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.6 MB
  • Tags: CPython 3.8, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp38-cp38-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 25256ab5c3ee08ce382e8927c76bd4f816d014204076dd826c5b46597e5cb8a0
MD5 caa728d7eacb306a62d41059cc962fd5
BLAKE2b-256 373c0989d2970f196b16b0d0e9988145079feeca5eb56f1e1e35c0e8cf456c71

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 58570d95cb2887439a20d849c445f8cabd095db8c17134746a44a2e37eb7dba5
MD5 f6838f358344272c7e3cd4d50f36bca2
BLAKE2b-256 6f1a6ae7b9a5565331c194c139acf98d394687f366eb96c99ba46d3a222e3ba5

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ca96e4b0a343281fcb8cd3d3474feef9b0fb918590ada58a51bb55cc219cc2b5
MD5 258c3fd5d3d0f4d55415cbf206b310e3
BLAKE2b-256 361873c97973aca6b47bf6aa2c60eaa5794658fe9862d2bc55b3bf5749faefdf

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 295.7 kB
  • Tags: CPython 3.8, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 cc12c9ab9745c88b75a1c82463bc576c9cfb07cfe6a7612481c2a41451b40b95
MD5 f186429ab7ff7279a0e1d15e998071f2
BLAKE2b-256 fd8d73cb3ed201e7d849f6339fbf40176d66f4020d0c5badffe5d9aa4d5ef7db

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hunter-3.4.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 280.0 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 e5de3f38b0b718a02abc87a37c0fec6373dcd8d8cdefd94ed12e2838ad33da64
MD5 98250ba237355b56ebc03892cbb4e034
BLAKE2b-256 7e297825b66e9a3ed6d7763cee5e07b8c7c7ea517a147a9055b02d12aaa60021

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp37-cp37m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 74f671972989fb8df20cc5047c353b2b34d29b5a888e8659f012542730b554ce
MD5 bce27ae4422fcd9349e58aef2b2604ed
BLAKE2b-256 6de5193ece33782625ed1392f64985ebbe253f5c46b7438f32278177384d115b

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp37-cp37m-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp37-cp37m-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.7m, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp37-cp37m-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 8a0705c4817a07564b355bf74fd771f94ecddfefb8aa7a59ae46c58c756f9be0
MD5 674b0769c4f3c72b79f6e9e5612c1abd
BLAKE2b-256 3c9be26bab820d5ad8feeaa89ffce5a5e24a5b553a805aa70f4004cd6bb5da6d

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d06690f885274587ad130454267cde072ac4592cf85f97a57f606593272e3256
MD5 89c93d2567d3abe5d1b2a50a534e03fc
BLAKE2b-256 765b6a64b9ade27ebe0a86572cf95e0659ccc9e188ae86a269cb12a7d538a5fb

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 944265abe6258b0faefbb40c8904f579a62408ecd05bf3b5caf5d5f5564bae4f
MD5 d1f00805ee976f030b1156cfb69830a9
BLAKE2b-256 95ad330a5d13e5b0a4a2d06623014926c1d566163b50bec4abdccb64bf80c127

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 289.4 kB
  • Tags: CPython 3.7m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 b37e4d016ef149e4cf9e43d06dbf30db7ea87e6cbc0a28bce9031545a39b8428
MD5 6bf96685245d905928a8419afb1fce38
BLAKE2b-256 f6f370d570a8ace6d2159f011c913b43da7eee577ab14cbe751420b7be9b6508

See more details on using hashes here.

File details

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

File metadata

  • Download URL: hunter-3.4.0-cp36-cp36m-win_amd64.whl
  • Upload date:
  • Size: 280.1 kB
  • Tags: CPython 3.6m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp36-cp36m-win_amd64.whl
Algorithm Hash digest
SHA256 2d8b6507ef8ec047962812446f5f209a9945d35844a57ead08f833dd565834a8
MD5 6201e6bf085986771d6d9043c6720520
BLAKE2b-256 c8e2f49dcb718146cc3dad1b4c8f2b4e4da76494fd7051b8f8f16983fea1f0fe

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp36-cp36m-musllinux_1_1_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp36-cp36m-musllinux_1_1_x86_64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp36-cp36m-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 dbd6580b9e4972d29af59e9ad83aaa274c4dda10e1ca813f198225fc1db84a3a
MD5 a49844c4a0bfce168913865b3cf58b08
BLAKE2b-256 4ab98f106b5c7a252e1ccfea633a33be3963cee54741b4cee2b572ba71677a92

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp36-cp36m-musllinux_1_1_aarch64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp36-cp36m-musllinux_1_1_aarch64.whl
  • Upload date:
  • Size: 1.4 MB
  • Tags: CPython 3.6m, musllinux: musl 1.1+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp36-cp36m-musllinux_1_1_aarch64.whl
Algorithm Hash digest
SHA256 f3de4d21fb3c1b45f9955b19c355e222a84e6fcec1f7736225593dc537c9d81f
MD5 10bf5814d2bcfc6836c60eb66ac7962e
BLAKE2b-256 19668680560c7aa8dc69b795a9011fd61501665cf1047ed2a4042ca3872fe209

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 07efd822dcbd402e97b6c3e37facfdb28ca92d3b3cde43279c4d47e554b12cf3
MD5 895b73e8164c66f060c7c90e72581c44
BLAKE2b-256 74730121444f489b2c798bc92a01c3020db0d93d78bc65460f9f01b6f311c08c

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for hunter-3.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e6599932b7e13f7b8837ea43edfe1507d3dceecbdc78b48092c98f86a5dc5275
MD5 17c915ce5979b9ed201d8941dae5cb95
BLAKE2b-256 e71f2640c1fd861a49d18763f355385a6bb2f78711e39762daa420f90a1d2406

See more details on using hashes here.

File details

Details for the file hunter-3.4.0-cp36-cp36m-macosx_10_9_x86_64.whl.

File metadata

  • Download URL: hunter-3.4.0-cp36-cp36m-macosx_10_9_x86_64.whl
  • Upload date:
  • Size: 292.2 kB
  • Tags: CPython 3.6m, macOS 10.9+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.7.0 importlib_metadata/4.8.2 pkginfo/1.8.2 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for hunter-3.4.0-cp36-cp36m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 0c70fd6ca36293b7db46fe7a5b70477056c5bd7391a0d96b7e1e09b17cbfa759
MD5 cf603f22b49af205ecd719780322a9c0
BLAKE2b-256 c5dccb5c9e1f30f816b4f16f010d4e9d667fb2c88a5ed6350a9a86ea104791e9

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page