Skip to main content

Python code performance toolkit written in Rust — static perf/correctness lints plus a sampling runtime profiler

Project description

rabbitinspect

A Python code performance analyzer written in Rust (via PyO3). It scans your Python source code and points out patterns that can be made faster, more memory-efficient, or more idiomatic — with optional automatic fixes.


Installation

pip install rabbitinspect

The package ships pre-compiled wheels — no Rust toolchain required.


Usage

CLI

# Check a single file
rabbitinspect file.py

# Check an entire directory
rabbitinspect src/

# Auto-fix detected issues
rabbitinspect file.py --fix

# Select specific checks only
rabbitinspect file.py --select RAB002,RAB003

# Ignore specific checks
rabbitinspect file.py --ignore RAB022,RAB101

# JSON output
rabbitinspect file.py --format json

# Disable colored output
rabbitinspect file.py --no-color

Output (ruff-style):

file.py:10:5: RAB002 Use 'is' instead of '==' for None comparison
file.py:25:8: RAB003 Use 'not x' instead of 'len(x) == 0' for emptiness check

Available commands

Command Description
rabbitinspect . Analyze all Python files recursively
rabbitinspect file.py --fix Analyze and auto-fix
rabbitinspect --explain RAB002 Show detailed explanation for a check
rabbitinspect --list List all available checks grouped by category
rabbitinspect --select RAB002,RAB003 file.py Run only specific checks
rabbitinspect --ignore RAB022,RAB101 file.py Skip specific checks
rabbitinspect --only-category correctness file.py Run only checks in given categories
rabbitinspect --ignore-category style,complexity file.py Skip entire categories
rabbitinspect --format json file.py JSON output
rabbitinspect --no-color file.py Disable colored output

Suppressing checks

Inline with # noqa:

x = 42  # noqa: RAB067
try:
    pass
except:
    pass  # noqa: RAB012, RAB013

Or globally in pyproject.toml:

[tool.rabbitinspect]
select = ["RAB002", "RAB003", "RAB006"]
ignore = ["RAB022", "RAB101"]
x = 42  # noqa: RAB067
try:
    pass
except:
    pass  # noqa: RAB012, RAB013

Configuration via pyproject.toml

[tool.rabbitinspect]
select = ["RAB002", "RAB003", "RAB006"]
ignore = ["RAB022", "RAB101"]
only-categories = ["correctness", "performance"]
ignore-categories = ["style", "complexity"]

Python API

from rabbitinspect import analyze_code, apply_fixes

source = """
def foo(x):
    if x == None:
        return True
    return False
"""

findings = analyze_code(source)
for f in findings:
    print(f"{f['code']}:{f['line']}:{f['col']} {f['message']}")

# Apply fixes
fixes = [f['fix'] for f in findings if f.get('fix')]
fixed = apply_fixes(source, fixes)

Rule Categories

Rules are grouped into categories so you can enable or disable related checks together:

Category Description Count
correctness Potential bugs and correctness issues 51
performance Performance improvements 35
style Code style and conventions 25
typesafety Type annotation rules 7
complexity Code complexity metrics 4
import Import-related rules 3
unused Unused variables and imports 1

Use --only-category to run only checks in specific categories, or --ignore-category to skip entire categories:

# Only show correctness and performance issues
rabbitinspect src/ --only-category correctness,performance

# Skip style and complexity checks
rabbitinspect src/ --ignore-category style,complexity

Checks

correctness — Potential bugs and correctness issues

Code Check Auto-fix
RAB002 x == None instead of x is None
RAB003 len(x) == 0 instead of not x
RAB006 type(x) == T instead of isinstance(x, T)
RAB007 Unnecessary else after return/raise/break/continue
RAB011 Mutable default argument (x=[], x={})
RAB012 Bare except: clause
RAB013 Bare except: pass
RAB025 Long if-elif chain (> 3 branches)
RAB029 x == True / x == False instead of x / not x
RAB030 if cond: return True else: return Falsereturn cond
RAB031 if k in d: return d[k]d.get(k)
RAB034 assert True / assert False
RAB035 x[:]x.copy() for list copies
RAB045 open() without context manager (with)
RAB048 not x is Nonex is not None
RAB052 type(x) == A or type(x) == Bisinstance(x, (A, B))
RAB054 if not x: x = yx = x or y
RAB057 s.startswith('a') or s.startswith('b')s.startswith(('a', 'b'))
RAB059 while True: without break → infinite loop
RAB063 x is 5 / x is "str"x == 5 / x == "str"
RAB064 __init__ returning non-None value
RAB065 if True: / if False: dead code
RAB068 raise Exc() without from inside except
RAB070 x == "" / x == [] / x == {}not x / x
RAB072 Except handler only re-raises
RAB075 isinstance(x, (A,))isinstance(x, A)
RAB076 str() on value already a string
RAB077 assert on a tuple literal (always true)
RAB078 except Exception: pass — silent swallow
RAB079 __del__ method defined
RAB081 return/break/continue inside finally
RAB082 except BaseException too broad
RAB083 Nested ternary expression
RAB084 Bare raise outside an except block
RAB099 Duplicate key/element in dict/set literal
RAB100 Redundant elif after return/raise/break/continue
RAB103 Self-comparison (x == x) always True/False
RAB105 Inconsistent return statements (mixed bare and valued)
RAB106 Too broad except Exception: catch
RAB108 __all__ contains non-string elements
RAB113 eval() / exec() detected (security risk)
RAB114 pickle.load() / pickle.loads() on untrusted data
RAB115 yaml.load() without Loader= (security risk)
RAB118 del on exception variable (Python 3.12+ clears chain)
RAB119 __init__ in subclass missing super().__init__()
RAB120 Modifying iterable during iteration
RAB123 Deprecated asyncio.get_event_loop() / ensure_future()
RAB124 Blocking call inside async function
RAB127 Redundant else in loop with break
RAB128 not ... innot in (PEP 8)
RAB129 f-string in logging call (eager evaluation)

performance — Performance improvements

Code Check Auto-fix
RAB004 any([...]) / all([...]) with list comprehension
RAB005 for k in d.keys() instead of for k in d
RAB008 for i in range(len(x)) instead of enumerate(x)
RAB009 String concatenation in a loop (s += str(x))
RAB010 set(list(x)) — unnecessary list() call
RAB015 k in d.keys() instead of k in d
RAB019 os.system() instead of subprocess.run()
RAB020 time.time() for benchmarking
RAB024 Deep comprehension (> 2 nested for clauses)
RAB036 x**2 / x**3x * x / x * x * x
RAB037 map(lambda, ...) / filter(lambda, ...)
RAB038 x in [const, ...]x in {const, ...}
RAB040 @dataclass without slots=True
RAB041 re.compile() inside a function
RAB042 for line in f.readlines()for line in f
RAB043 Manual for loop with .append() instead of comprehension
RAB046 sorted(x)[0]min(x)
RAB047 sorted(x)[-1]max(x)
RAB050 for i in range(len(seq)) — iterate directly
RAB051 d.setdefault(k, []).append(v)defaultdict
RAB056 Nested with statements
RAB060 sorted(x).sort()x.sort()
RAB066 Function definition inside a loop
RAB071 List comp inside str.join() → generator
RAB085 reversed(sorted(x))sorted(x, reverse=True)
RAB087 {k: v for k, v in zip(...)}dict(zip(...))
RAB088 while len(x) > 0while x
RAB089 copy.copy(x)x.copy()
RAB104 Pass-through generator list(x for x in y)list(y)
RAB130 len([... for ...])sum(1 for ...)
RAB131 set([...]) / tuple([...]) / sorted([...]) → generator
RAB132 x = x + [..] in a loop (O(n²)) → .append() / .extend()
RAB133 list.pop(0) / list.insert(0, …)collections.deque
RAB134 sorted(x)[:k] / sorted(x)[-k:]heapq.nsmallest/nlargest
RAB135 for … in list(range(…)) → iterate range(…) directly

style — Code style and conventions

Code Check Auto-fix
RAB014 class Foo(object) in Python 3
RAB016 .format() instead of f-string
RAB023 Redundant .call() method call
RAB026 sorted(list(x)) / reversed(tuple(x)) — redundant collection
RAB032 bool(x) inside a boolean context
RAB039 List[X] / Dict[K,V]list[X] / dict[K,V]
RAB044 Optional[X] / Union[A, B]X | None / A | B
RAB049 x = x + 1x += 1
RAB055 Unused loop variable → _
RAB058 return True if cond else Falsereturn cond
RAB062 Redundant pass after docstring
RAB067 Variable/function shadows built-in name
RAB069 dict() / list() / tuple(){} / [] / ()
RAB073 Old-style % string formatting
RAB074 os.path.*pathlib.Path
RAB080 list(d.keys()) / list(d.values())list(d)
RAB086 x == a or x == bx in (a, b)
RAB107 TODO/FIXME/HACK/XXX comment left in code
RAB109 Class name should use CamelCase convention
RAB110 Function name should use snake_case convention
RAB111 Module-level constant should use UPPER_CASE naming
RAB112 Unnecessary pass in non-empty body
RAB126 Magic number literal, assign to named constant

typesafety — Type annotation rules

Code Check Auto-fix
RAB022 Public function missing return type hint
RAB090 Public function parameter missing type annotation
RAB091 Function missing return type annotation
RAB092 Class attribute missing type annotation
RAB093 Module-level variable missing type annotation
RAB094 Any type annotation used, prefer concrete type
RAB095 Default value incompatible with type annotation

complexity — Code complexity metrics

Code Check Auto-fix
RAB017 Function too long (> 30 statements)
RAB018 Too many parameters (> 6)
RAB101 Cyclomatic complexity > 10
RAB102 Cognitive complexity > 15

import — Import-related rules

Code Check Auto-fix
RAB061 from module import * — wildcard import
RAB096 Unused import
RAB098 Import inside function/class body, move to module level

unused — Unused variables and imports

Code Check Auto-fix
RAB001 Variable assigned but never used

Runtime profiler (2.0 preview)

Beyond static analysis, rabbitinspect ships a sampling runtime profiler written in Rust. A background thread snapshots the Python stack via sys._current_frames() (robust across CPython 3.10–3.14) and samples resident memory, with near-zero changes to your code. On stop it writes a self-contained HTML report.

# Profile a script and write an HTML report
rabbitinspect perf run myscript.py --out report.html

# Also export an interactive flamegraph for https://speedscope.app
rabbitinspect perf run myscript.py --speedscope profile.speedscope.json

# Attach to an already-running process — no code changes, no restart (Linux)
rabbitinspect perf attach --pid 12345 --duration 5 --out report.html

# ...and cut through framework/idle noise — show only your own code
rabbitinspect perf attach --pid 12345 --duration 5 --app-root /path/to/project --out report.html

# Compare two runs (before / after an optimization) — diff has a differential flamegraph
rabbitinspect perf run myscript.py --json before.json
# … make your change …
rabbitinspect perf run myscript.py --json after.json
rabbitinspect perf diff before.json after.json --out diff.html

# Other run outputs: per-function CSV, speedscope JSON
rabbitinspect perf run myscript.py --csv functions.csv --speedscope profile.json

# Sample several forked workers at once (gunicorn) and merge them
rabbitinspect perf attach --pid 12345 --also-pid 12346 --also-pid 12347 --duration 10 --out report.html

The report includes:

  • Top functions by self/total time, an interactive flamegraph (click to zoom), and a memory-over-time chart.
  • Flame chart (time order) + call timings: each call shown separately along a time axis (a function called twice appears twice); hover for the call's duration. The table gives calls / total / avg / max ms per function.
  • Per-line breakdown: click a function in the report to expand its self-time line by line, with the source text — pinpoints which statement spent the time.
  • Per-function memory (perf run --memory): live allocations attributed to functions via tracemalloc.
  • On-CPU vs off-CPU split (attach mode): how much self time was real CPU work vs waiting on sleep / I/O / locks.
  • Per-endpoint flamegraphs: a flamegraph per route, from the samples taken while that endpoint was serving (web middleware installed).
  • Request timeline + per-endpoint p50/p95/p99.
  • Database section: slowest queries with the app line that issued each query, and N+1 detection (repeated query shapes within one request).
  • Hotspots with lint findings: the hottest functions cross-referenced against rabbitinspect's own static rules — the static perf rules pointed straight at the code that dominates runtime.
  • Report UX: a sticky section nav (jump links + back-to-top), sortable function tables (click a column header), a function search box (/ to focus, Esc to clear), a "my code" toggle that hides stdlib/dependency rows, a dark-mode toggle, a run metadata sub-header (Python version, platform, timestamp, sampling interval), and a one-click functions.csv download.

Exact per-line timing (@line_profile)

The sampler can't see lines that run in microseconds. For a function you can edit, @line_profile times every line exactly via tracing (high overhead — opt-in):

from rabbitinspect.perf import line_profile, line_profile_html

@line_profile
def handler(req):
    rows = db.query(...)        # time on this line includes the call it makes
    return render(rows)

handler(req)
open('lines.html', 'w').write(line_profile_html(handler))

Dump a running process on demand

Profile a long-running server and grab a report whenever you want — no stop, no restart:

from rabbitinspect.perf import install_dump_handler
install_dump_handler(out='dump.html')   # writes dump.html on SIGUSR1
kill -USR1 <pid>     # → dump.html

Async (asyncio)

The CPU sampler only sees threads that are running Python, so await-ing coroutines are invisible to it. profile_asyncio samples the event loop's tasks directly — its flamegraph shows where coroutines are parked on await.

from rabbitinspect.perf import profile_asyncio

async def main():
    await do_async_work()

result = profile_asyncio(main)        # runs main() and samples awaiting tasks
open('async.html', 'w').write(result.to_html())

Web frameworks

Drop-in middleware records one span per request (method, route, status, duration). Both are no-ops when the profiler is off, so they are safe to leave installed.

# Django (wsgi.py)
from rabbitinspect.perf_web import WSGIProfilerMiddleware
application = WSGIProfilerMiddleware(application)

# FastAPI / Starlette
from rabbitinspect.perf_web import ASGIProfilerMiddleware
app.add_middleware(ASGIProfilerMiddleware)

# Auto-capture a report for any request slower than 1s:
application = WSGIProfilerMiddleware(application, slow_request_ms=1000, dump_dir='slow/')

For forked workers (gunicorn/uvicorn), call enable_fork_profiling() in the parent so each worker gets its own live sampler (OS threads don't survive fork()). It stops the sampler around each fork() so the fork is single-threaded (no deadlock hazard).

Database queries

from rabbitinspect.perf_db import instrument_sqlalchemy, instrument_django, query_timer

instrument_sqlalchemy(engine)   # SQLAlchemy
instrument_django()             # Django (call once at startup)

with query_timer('SELECT ...'):  # generic
    cursor.execute('SELECT ...')

Each query is tagged with the application line that issued it (file:line), so the slowest queries and N+1 groups point straight at your code.

Timings are statistical (sampling), not exact per-call. Attach mode is Linux-only and supports CPython 3.13+ (validated on 3.13 and 3.14; 3.11/3.12 predate CPython's remote-debug offsets). Per-function memory attribution is on the roadmap.


Performance rationale

Why Rust?

Parsing and analyzing Python source is a CPU-bound operation. Rust's zero-cost abstractions and lack of a garbage collector make it ideal for this kind of static analysis. The core engine uses rustpython-parser to build a full AST and walks it with pattern matching — all without any Python overhead at analysis time.

Specific improvements

Pattern Inefficiency Fix
x == None Calls x.__eq__(None), may be overridden x is None — direct pointer comparison
any([x for x in items]) Builds full list in memory any(x for x in items) — generator yields one at a time
len(x) == 0 Calls x.__len__(), may be O(n) not x — uses __bool__ protocol
for k in d.keys() Creates a dict_keys view object for k in d: — iterates dict directly
type(x) == T Ignores subclass relationships isinstance(x, T) — correct for inheritance
for i in range(len(x)) Double lookup x[i] overhead for i, item in enumerate(x)
s += str(x) in loop O(n²) string allocations "".join(...) — single allocation
set(list(x)) Intermediate list allocation set(x) — builds directly from iterator
k in d.keys() Creates view for membership test k in d — direct hash lookup
sorted(list(x)) Intermediate list before sort sorted(x) — sorts iterable directly
if k in d: return d[k] Two dict lookups return d.get(k) — single lookup
x[:] for list copy Slice intent unclear x.copy() — explicit intent
sorted(x)[0] O(n log n) sort for min min(x) — O(n) single pass
sorted(x)[-1] O(n log n) sort for max max(x) — O(n) single pass
List[int] / Dict[str, int] Requires typing import list[int] / dict[str, int] — Python 3.9+
for line in f.readlines() Loads entire file into memory for line in f — line by line, O(1) memory
d.setdefault(k, []).append(v) Creates default on every call defaultdict(list) — default only on missing key
type(x) == A or type(x) == B Multiple type() calls isinstance(x, (A, B)) — single check
reversed(sorted(x)) Two passes over data sorted(x, reverse=True) — single pass
{k: v for k, v in zip(...)} Comprehension overhead dict(zip(...)) — direct constructor

Development

# Setup
git clone https://github.com/rroblf01/rabbitinspect
cd rabbitinspect

# Build the Rust extension (requires Rust toolchain)
cargo build --release
cp target/release/librabbitinspect.so python/rabbitinspect/_core.cpython-314-x86_64-linux-gnu.so

# Run tests
uv run pytest tests/

# Build distributable wheels
uv run maturin build

License

MIT

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

rabbitinspect-2.0.0.tar.gz (172.6 kB view details)

Uploaded Source

Built Distributions

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

rabbitinspect-2.0.0-cp314-cp314-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.14Windows x86-64

rabbitinspect-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ x86-64

rabbitinspect-2.0.0-cp314-cp314-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.28+ ARM64

rabbitinspect-2.0.0-cp314-cp314-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

rabbitinspect-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.14macOS 10.12+ x86-64

rabbitinspect-2.0.0-cp313-cp313-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.13Windows x86-64

rabbitinspect-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

rabbitinspect-2.0.0-cp313-cp313-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ ARM64

rabbitinspect-2.0.0-cp313-cp313-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

rabbitinspect-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

rabbitinspect-2.0.0-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12Windows x86-64

rabbitinspect-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

rabbitinspect-2.0.0-cp312-cp312-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ ARM64

rabbitinspect-2.0.0-cp312-cp312-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

rabbitinspect-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

rabbitinspect-2.0.0-cp311-cp311-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.11Windows x86-64

rabbitinspect-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

rabbitinspect-2.0.0-cp311-cp311-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ ARM64

rabbitinspect-2.0.0-cp311-cp311-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

rabbitinspect-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

rabbitinspect-2.0.0-cp310-cp310-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10Windows x86-64

rabbitinspect-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

rabbitinspect-2.0.0-cp310-cp310-manylinux_2_28_aarch64.whl (1.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ ARM64

rabbitinspect-2.0.0-cp310-cp310-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

rabbitinspect-2.0.0-cp310-cp310-macosx_10_12_x86_64.whl (1.5 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

File details

Details for the file rabbitinspect-2.0.0.tar.gz.

File metadata

  • Download URL: rabbitinspect-2.0.0.tar.gz
  • Upload date:
  • Size: 172.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for rabbitinspect-2.0.0.tar.gz
Algorithm Hash digest
SHA256 3cf8d422002202ed73b44871a85607abb721c62742272835549d31778a2b11b7
MD5 99f38f7a9a483e3fb4ebbc5815555d03
BLAKE2b-256 ffa9e38f26ff32935b4fdef9623face2409658ace4347d8f6d69a4b855b48971

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0.tar.gz:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 1e7e7156b1fe2486993ede3f1e7f699ba4280eca477d187e65923bcdd8937f38
MD5 c865e98b2c6f7477e0ceaf1f0642d4c8
BLAKE2b-256 15952795689455a0a78d0c4898e249b5ab1ea8263eaaa7bd2fc1ee6eed5db4e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 31d71450ff92f3d393e1399b25804e6e3d2992315403a0eab958a38672820d92
MD5 8c2575946e2fbfe7ab63fc1cccab8e4e
BLAKE2b-256 80ecb7b3dbc2f6d719a2f0745316761e9607c3d4a82bbeee72a45baade5c091a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp314-cp314-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp314-cp314-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp314-cp314-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 1ee2948347fff2dee1b11d1afe437ae3c65c3c283fc673a32ec250f9b9c25c52
MD5 f5549ee1f5f4ff6b6d385e66dc9c734b
BLAKE2b-256 9de503eae25d684edc1c2deb7245d7767395ccb02b2ed01ccb224c32f7164d60

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp314-cp314-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f213fa408052a14e5b6be98fd66c58ad1e04f4d8d78873b10e967e04467a7c78
MD5 c4979122a1b9367307d14fc66938e223
BLAKE2b-256 1517f6f7ee99683566b06249a76f7e6939ea9fe659158a36f1ceb9bc60aac8b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0532046adfe52b75c566346ef58077a32bbf4009e4fc55155060b8ac01d002e8
MD5 011f8f2c9867ade4fb1a4c04478dfdee
BLAKE2b-256 8f17db137e789467c67d7e765c626d96e8723eeeacb6b44096d41961c8c32108

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp314-cp314-macosx_10_12_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 77d97861e5c50eb6d1e6e3c95c6b01d12e45dc0dcd333c6979f43bcfc1523623
MD5 1766103b7c50472c41b6f23f2d15c2c4
BLAKE2b-256 2a4386521ae7bb308f179f73278a6a5072ff699e770653ced789ce2116d1689e

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 896a6b1115b9805619bec17aa2473235b041811dc0ee210f9ba28ef1456ed336
MD5 d54a236c3782b97095f4cdc072f374ef
BLAKE2b-256 ebbc6c0197f50d2930e836245e4c6ce332c407835d9793bb2309e2bcaf16e497

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp313-cp313-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp313-cp313-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp313-cp313-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 dbef1940cc9b8246bf1a60ac9f9801333c54ccc09f238fbadae43b108b16e40a
MD5 3d121f54b0e8b78544a803de29cb1bf9
BLAKE2b-256 9243df2ede6708c16ad07e06bf7bf93739e4ccf7cdcc40852ec0f5a6778156c3

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp313-cp313-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 15f8523677b5786b26ba36c10b0dfbf647a6a40137589050925c38e18390716e
MD5 1c9546fe731dd44c41d9319385ab3a19
BLAKE2b-256 6649922f4d3681aa992b826b1259cc0af46d05d14d2a87ae9963c141b76cda0b

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2cc86ad1572195bc32084fb793bf0d252c3d24a5582bdc261dcc601c82cf329d
MD5 30a2bd6d3143c5be9f0d8e6c1bc3461b
BLAKE2b-256 2e66d74650366858d40549f294d30b677752b538d019dc70153df92eae161439

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp313-cp313-macosx_10_12_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 3634e1741934414716e8bf4218a43c2cc01d1716e7c7ec48c01fdc3bcadbb123
MD5 d6094dfd50fb388d9f9b9cb2acf88e4c
BLAKE2b-256 c65fa1fb6290cdacdf45aded27970712d6ecd3b068cc41200a5d056ea4bd1cdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f1035f5b03a86565f2f7f5a39e1b137983b50ef4171b29542d862aebc5360c3b
MD5 fcf420ea7e7b79332fa0c4dfd1955bc0
BLAKE2b-256 7162be235234a74cbf699bba53197566a422d175d724c7498f7a6bda2e9b0071

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp312-cp312-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp312-cp312-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp312-cp312-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 cb1f11063dff6c66eca2130b230acb31c7608796c41edc4e104db5ba1d252ab6
MD5 e606c29558e8b65442bab6da9f4384ac
BLAKE2b-256 eed3953072548848ef985d4b6a29c899e189d000fe18caa45013a31b6fc6b9d6

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp312-cp312-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b340ab8bc47e05f385b6df5ff42a66ec0e237544e49b2054d6c498f0d5a766fc
MD5 46d6f99428faf05b75fb127880d0e93a
BLAKE2b-256 a2857bd5b25d0eec13583c53a50bcc2794ec125a2b8b4b5c4e13e5898e2079bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8892cc9ff8df4c750cf1432e26477267c39fac2b0e4ca02613aaca9fbdf47639
MD5 328c79153cb768d88a89ec2960897c1e
BLAKE2b-256 6f056fe39f76a3ea4a664c2eb6ae812d70a04db4c01066eb87c03605b789e869

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 bdd368ea115eead1e816b2364737d00ba32129685a150113395ee90ebb65b6c7
MD5 b5d44bd2b9527ed6c6dc0f67a8eb1208
BLAKE2b-256 c9b4e339e33e4339b242d9f7c0bd68480548f69d26a687d8488bc8cc2a04a93a

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 68a8d85762358a7b3a49ef5b9380739b071df2e7a0bffbe754ad9612ca5d3649
MD5 542cdc154901d97083cc8d2c1b6d73bf
BLAKE2b-256 057311d25fe9e6120656e2b623af95fdb80e0da62156731f227ca33ac4991a47

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp311-cp311-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp311-cp311-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp311-cp311-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 58dcfc813d4744cab79206514052a0da4c0d9e857be296653f720c0d43b990de
MD5 aba8f7d805a02d8ac38ead9f5c677bee
BLAKE2b-256 e91ccd7c8ea5d22eebe8cc1ef7b8a36aa48eff12314f598056f59265a2d9b319

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp311-cp311-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8b521b7dd2297c69c3a4066fc877088c64e3dc083d05221f21478b586bbf3d04
MD5 54ffdeee81367cccb78950bb4860ea8e
BLAKE2b-256 d1afbd9e676ac367b420127c2a7d991a31c51f53805af4b57c33847e8079852d

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a93278b1e66ed8bdfbf317838b33042679805ed69532a43f397423e42d405617
MD5 ce038a2bdfd1e4ede5cbbd713fd3d83e
BLAKE2b-256 4a36b9f7355be0ba097707fdd19305472a3d042d0fe6aebb4fbd4395238d7a62

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 a0cdc470a60c43d3262a50fd58cf6102dca9b3c21876459a859c37b09efeb54f
MD5 c5865675bef63fadbef4e976ef1ec23f
BLAKE2b-256 5868853cfbf7c2939cfc6927aab37b8ae8a5a030e057e2ed9260cc4ed2e012a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 ef52adf70c04ab0e78c8c5fa4e2f7bf94b97d6b6fbfd639e4fbf09a3a36fbad0
MD5 ceaf22d404a933729504fbdf484e545c
BLAKE2b-256 1c89235eac1db3c6e5296eccc25433b664344a452a8f1847bc5c55be844be86c

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp310-cp310-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp310-cp310-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp310-cp310-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c2c5837729b7706e91a89049b4854fa3ccc9439626d65598b9e954b896791e52
MD5 fdef6a86115a27d3e63bb8618e0ba665
BLAKE2b-256 273e991490871ae66950e1f50c7009515f0d41ceb57d7b4dcc2e561b504f7881

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp310-cp310-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a065dce8b40e1249b7c54445267d3139ef84961eba88ca064ed4c224c35b487e
MD5 5fc60cca48d1dacbfda1338402a08ed9
BLAKE2b-256 390dcc517f69969294a8b5486e05aac5fc433228d666d4b85638aacb93236d44

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file rabbitinspect-2.0.0-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for rabbitinspect-2.0.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a6aa885d4d27948cfc596a935d116067350004fc6f4be684ea13112709f951af
MD5 a7261afc3191b65cf8cced377c5e9859
BLAKE2b-256 821feb8f56c6c1dea1fba3a60279171d7dd73d44354a978f37631a97c3338a60

See more details on using hashes here.

Provenance

The following attestation bundles were made for rabbitinspect-2.0.0-cp310-cp310-macosx_10_12_x86_64.whl:

Publisher: publish.yml on rroblf01/rabbitinspect

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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