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)
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"]

# 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_{version}_compat.json.

  • Default TTL: 12 hours
  • Cache is version-keyed — each installed pydantic-monty version gets its own file
  • 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 GitHub (downloads ZIP in memory)
caps = MontyCapabilities.from_github()

# 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.2.0.tar.gz (12.8 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.2.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: monty_compat-0.2.0.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","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.2.0.tar.gz
Algorithm Hash digest
SHA256 67d2006275f39a7b5b9c87a2456bab443cdb2af930d81af7cf3dc8447b2ba443
MD5 7ba49cfc12033a88732f1c30be9126f5
BLAKE2b-256 b4d965e3b488280f692ddbf338250d2ad2314a3b2f6f50b4e0102014d29b8ff5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: monty_compat-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.8 {"installer":{"name":"uv","version":"0.10.8","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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bce8677d7dc87d6a978047158880519288eddea667f5dc659f4b4cccd17ad96f
MD5 9f982428e7350eaa3d56f8c404cbc294
BLAKE2b-256 0e6795d22057d2d565399062693ceb68411e0b8605c40506e2a05e3f3f1ccd08

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