Reference¶
Object conversion¶
To convert values between starlark and Python, JSON is currently being used as an intermediate format, which defines the scope of what is convertible. This, however, is subject to change.
References to Source Locations¶
- class starlark.ResolvedSpan¶
- begin¶
A
ResolvedPos.
- end¶
A
ResolvedPos.
Diagnostics¶
- exception starlark.StarlarkError¶
- class starlark.Lint¶
- __str__()¶
Return str(self).
- resolved_location¶
- severity¶
A
EvalSeverity.
Dialect¶
- class starlark.Dialect¶
-
- enable_types¶
A value of type
DialectTypes.
Note
These attributes are only writable (not readable) for the moment.
Type checking¶
- class starlark.Interface¶
Opaque for now.
AST¶
Values¶
- class starlark.OpaquePythonObject(obj)¶
An ‘opaque’ Python object that can be passed to Starlark. It cannot be interacted with from the Starlark side. Upon conversion from Starlark to Python, the original wrapped object reappears.
Added in version 2025.2.5.
Decimal¶
This package preserves Python Decimal values without precision loss.
Decimals passed from Python stay as precise decimal values in Starlark and
round-trip back to Python as Decimal objects.
>>> import decimal
>>> import starlark as sl
>>> glb = sl.Globals.extended_by([sl.LibraryExtension.RustDecimal])
>>> mod = sl.Module()
>>> # Pass Python decimals to Starlark
>>> mod["amount"] = decimal.Decimal("100.25")
>>> program = """
... # Create decimals in Starlark with RustDecimal()
... result = amount * 2 + RustDecimal('0.75')
... # Control precision with scale() and round_dp()
... pi = RustDecimal("3.14159")
... pi.scale() # Returns 5 (number of decimal places)
... pi.round_dp(2) # Returns RustDecimal("3.14")
... result
... """
>>> ast = sl.parse("prog.star", program)
>>> val = sl.eval(mod, ast, glb)
>>> assert val == decimal.Decimal("201.25")
Implementation notes:
Starlark
RustDecimaloperations use rust_decimal semantics (28 decimal places maximum, Banker’s rounding)Python
Decimaloperations use Python semantics (configurable via context)Conversion preserves exact values without precision loss
Python’s
decimal.getcontext()is not consulted during conversionUse
round_dp(n)to explicitly control decimal places before or after conversion
Globals¶
Modules¶
- class starlark.Module¶
–
- __getitem__(key, /)¶
Return self[key].
- __setitem__(key, value, /)¶
Set self[key] to value.
- freeze() FrozenModule¶
–
- class starlark.FrozenModule¶
- call(name, *args, check_cancelled=None, **kwargs)¶
Accepts the same check_cancelled keyword argument as
eval(). That name is reserved here and cannot be passed as a Starlark keyword argument to the called function.Added in version 2025.2.2.
Changed in version 2025.2.3: Added support for keyword arguments.
Loaders¶
- class starlark.FileLoader(load_func: Callable[[str], FrozenModule])¶
–
Parsing and Evaluation¶
- starlark.parse(filename: str, content: str, dialect: Dialect | None = None) AstModule¶
–
Parse Starlark source code as a string and return an AST.
- starlark.eval(module: Module, ast: AstModule, globals: Globals, file_loader: FileLoader | None = None, *, check_cancelled: Callable[[], bool] | None = None) object¶
–
- Parameters:
check_cancelled – An optional zero-argument callable invoked periodically (roughly every 1000 bytecode instructions). If it returns a truthy value, evaluation aborts and
StarlarkErroris raised. If it raises a Python exception, evaluation aborts and that exception propagates to the caller. The callback must not access module: the module is locked during evaluation and re-entry will deadlock. Cancellation is scoped to thiseval()call; nestedeval()calls (e.g. from aFileLoader) need their own callback.- Returns:
the value returned by the evaluation, after Object conversion.