Files
manual_slop/thirdparty/defer/sugar/_parse.py
T
2026-05-13 07:47:55 -04:00

56 lines
1.6 KiB
Python

import sys
import os
import ast
from ast import (
AsyncFunctionDef,
FunctionDef,
)
from types import FrameType
from typing import Any, Callable, Optional
from defer.errors import FreeVarsError
from defer.sugar.transformer import RewriteDefer
_DEFER_MARKER = "# defer: parse"
_enabled_files: set[str] = set()
def _load_defer_markers():
global _enabled_files
_enabled_files.clear()
try:
for root, dirs, filenames in os.walk('src'):
for filename in filenames:
if filename.endswith('.py'):
relpath = os.path.join(root, filename)
abspath = os.path.abspath(relpath)
try:
with open(abspath, "r", encoding="utf-8", errors="ignore") as f:
for i in range(10):
line = f.readline()
if not line:
break
if _DEFER_MARKER in line:
_enabled_files.add(abspath)
break
except Exception:
pass
except Exception:
pass
def install():
"""Only loads markers - does NOT install trace. Trace is lazy."""
_load_defer_markers()
class _ParseDefer:
"""Lazy defer - trace only activates when @defer is actually used."""
IDENTITY = lambda *_: None
def __init__(self, tracefn: Optional[Callable]) -> None:
self.tracefn = tracefn or self.IDENTITY
def __call__(self, frame: FrameType, event: str, arg: Any):
return self.tracefn(frame, event, arg)