Skip to main content

AST-based Python compatibility checker for the Monty interpreter

Project description

monty-compat

AST-based Python compatibility checker for the Monty sandbox.

Parses the Monty Rust source to extract every implemented builtin function, type constructor, exception type, and stdlib module, then checks arbitrary Python code for unsupported features — without executing it.

Installation

pip install monty-compat

Or for development (from checkout):

pip install -e .

Quick start

from monty_compat import monty_compat

# One-shot check — loads capabilities from cache (or builds on first run)
# By default uses the latest *released* version of Monty (only_released=True)
ok, reasons = monty_compat("x = [i * 2 for i in range(10)]")
# ok=True, reasons=[]

ok, reasons = monty_compat("import json; json.loads('{}')")
# ok=False, reasons=["module 'json' is not supported by Monty"]

# Include unreleased changes from the main branch
ok, reasons = monty_compat(code, only_released=False)

# Force rebuild (ignores cache)
ok, reasons = monty_compat(code, cache='regenerate')

# Skip cache entirely, read from local monty checkout
ok, reasons = monty_compat(code, cache='off', monty_root='/path/to/monty')

Cache

Capabilities are cached at ~/.monty_compat/monty_{key}_compat.json.

  • Default TTL: 12 hours
  • Cache key is latest-release when only_released=True (default), or main when only_released=False
  • Passing an explicit monty_root falls back to the installed pydantic-monty version as the key
  • cache='regenerate' forces a rebuild and overwrites the cache
  • cache='off' skips all cache I/O

Lower-level API

from monty_compat import MontyCapabilities

# Build from the latest release tag on GitHub (default)
caps = MontyCapabilities.from_github()

# Build from the main branch (includes unreleased changes)
caps = MontyCapabilities.from_github(only_released=False)

# Build from a local monty repo checkout
caps = MontyCapabilities.from_local('/path/to/monty')

# Inspect capabilities
caps.builtin_functions    # frozenset: abs, all, any, bin, chr, …
caps.type_constructors    # frozenset: int, str, list, dict, …
caps.exception_types      # frozenset: ValueError, TypeError, …
caps.modules              # frozenset: sys, typing, asyncio, pathlib, os, re, …
caps.module_attributes    # dict:      {'asyncio': {'gather', 'run'}, …}

# Check code
ok, reasons = caps.check_code(some_code)

# Pretty-print
print(caps.summary())

What is checked

Pattern Example Check
import X import json Is json a supported module?
from X import Y from asyncio import subprocess Is Y in X's known attributes?
Builtin calls eval(...) Is the builtin implemented in Monty?

Supported modules (as of 2026-03)

Module Available attributes
re search, match, sub, findall, …
asyncio gather, run
os getenv, environ
pathlib Path
sys platform, version, version_info, stdout, stderr
typing Any, Optional, Union, List, Dict, Callable, …

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

monty_compat-0.4.0.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

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

monty_compat-0.4.0-py3-none-any.whl (13.9 kB view details)

Uploaded Python 3

File details

Details for the file monty_compat-0.4.0.tar.gz.

File metadata

  • Download URL: monty_compat-0.4.0.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for monty_compat-0.4.0.tar.gz
Algorithm Hash digest
SHA256 628477a06445458909047f6ba572ee9f2eb1ed3432ffabb1d8ed856055dbb94a
MD5 fadc21b882e5d016d81036b8638cde72
BLAKE2b-256 92bf15a7f0c8b9e985f79eef30afbb2b623bc6fcb979937eacd068e442eba777

See more details on using hashes here.

File details

Details for the file monty_compat-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: monty_compat-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 13.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.9 {"installer":{"name":"uv","version":"0.10.9","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for monty_compat-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 27410960ec45a0b95c6aa3070f8937befa35ee4c96aa298842bb3ca85c977c76
MD5 b319e8461cef40778071ab1859f8220d
BLAKE2b-256 af1d0e6c9e5a62523450669971a7eec0be40b73af38f5590c8802f0577150acf

See more details on using hashes here.

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