pub struct MontyExecutorBuilder { /* private fields */ }code and embedded-python only.Expand description
Configures OS-access grants, host functions, and resource limits for the Monty executors, then produces either product with a terminal build method.
The builder is cheaply cloneable (grants are small, the registry holds
Arc<dyn HostFunction>), so one configuration can mint many executors.
Defaults are fully sandboxed: no filesystem mounts, an empty environment, and no clock.
§Example
use adk_code::MontyExecutorBuilder;
let one_shot = MontyExecutorBuilder::new().build_one_shot()?;
let repl = MontyExecutorBuilder::new().build_repl()?;Implementations§
Source§impl MontyExecutorBuilder
impl MontyExecutorBuilder
Sourcepub fn new() -> MontyExecutorBuilder
pub fn new() -> MontyExecutorBuilder
Start with the fully sandboxed defaults: no filesystem mounts, an empty environment map, and no clock.
Sourcepub fn allow_path(
self,
virtual_path: impl Into<String>,
host_path: impl Into<PathBuf>,
access: PathAccess,
) -> MontyExecutorBuilder
pub fn allow_path( self, virtual_path: impl Into<String>, host_path: impl Into<PathBuf>, access: PathAccess, ) -> MontyExecutorBuilder
Make a host directory available to scripts at virtual_path.
virtual_path is the absolute path a script uses (e.g. /data);
host_path is the real directory it maps to. The mount boundary is
enforced by Monty (canonicalization + symlink-escape detection) — a
script can never escape it. Call repeatedly to expose several
directories.
Virtual paths are validated at build_*(): each must be a normalized
absolute path (no trailing slash, no . or .. components) unique
across mounts.
Sourcepub fn environ<K, V>(
self,
vars: impl IntoIterator<Item = (K, V)>,
) -> MontyExecutorBuilder
pub fn environ<K, V>( self, vars: impl IntoIterator<Item = (K, V)>, ) -> MontyExecutorBuilder
Replace the environment map exposed via os.getenv / os.environ.
Only the entries provided here are visible to scripts; the host process environment is never exposed implicitly.
Sourcepub fn environ_var(
self,
key: impl Into<String>,
value: impl Into<String>,
) -> MontyExecutorBuilder
pub fn environ_var( self, key: impl Into<String>, value: impl Into<String>, ) -> MontyExecutorBuilder
Add or overwrite a single environment variable.
Sourcepub fn system_clock(self) -> MontyExecutorBuilder
pub fn system_clock(self) -> MontyExecutorBuilder
Grant host-clock access: date.today() and datetime.now() read the
real system time. Without this grant they raise a catchable OSError.
Sourcepub fn function(self, function: Arc<dyn HostFunction>) -> MontyExecutorBuilder
pub fn function(self, function: Arc<dyn HostFunction>) -> MontyExecutorBuilder
Register a host function callable from Python by bare name.
Registered names are validated at build_*(): they must be valid
Python identifiers, unique, and must not collide with built-ins.
Sourcepub fn function_fn<F, Fut>(
self,
name: impl Into<String>,
description: impl Into<String>,
func: F,
) -> MontyExecutorBuilder
pub fn function_fn<F, Fut>( self, name: impl Into<String>, description: impl Into<String>, func: F, ) -> MontyExecutorBuilder
Register a closure as a host function — the common case.
§Example
use adk_code::MontyExecutorBuilder;
use serde_json::json;
let executor = MontyExecutorBuilder::new()
.function_fn("double", "Double a number.", |args, _kwargs| async move {
let n = args.first().and_then(|v| v.as_i64()).unwrap_or(0);
Ok(json!(n * 2))
})
.build_one_shot()?;Sourcepub fn max_memory(self, bytes: usize) -> MontyExecutorBuilder
pub fn max_memory(self, bytes: usize) -> MontyExecutorBuilder
Cap the interpreter’s memory use in bytes (default 256 MiB).
For a REPL executor this bounds the cumulative session heap. Exceeding
it raises Python’s MemoryError (the result reports Failed).
Sourcepub fn host_function_timeout(self, timeout: Duration) -> MontyExecutorBuilder
pub fn host_function_timeout(self, timeout: Duration) -> MontyExecutorBuilder
Wall-clock bound for a single host-function call (default 30 s), so a
hung user function cannot wedge execute(). On expiry the script
receives a catchable exception.
Sourcepub fn script_name(self, name: impl Into<String>) -> MontyExecutorBuilder
pub fn script_name(self, name: impl Into<String>) -> MontyExecutorBuilder
The script name used in tracebacks (default "python_snippet").
Sourcepub fn build_one_shot(self) -> Result<MontyOneShotExecutor, MontyBuildError>
pub fn build_one_shot(self) -> Result<MontyOneShotExecutor, MontyBuildError>
Build the one-shot product: a fresh interpreter per execute() call.
§Errors
Returns a MontyBuildError when the host-function registry is
invalid (invalid identifier, duplicate name, built-in collision,
reserved name) or a mount’s virtual path is not a normalized,
unique absolute path.
Sourcepub fn build_repl(self) -> Result<MontyReplExecutor, MontyBuildError>
pub fn build_repl(self) -> Result<MontyReplExecutor, MontyBuildError>
Build the REPL product: interpreter state persists across execute()
calls.
§Errors
Returns a MontyBuildError when the host-function registry is
invalid (invalid identifier, duplicate name, built-in collision,
reserved name) or a mount’s virtual path is not a normalized,
unique absolute path.
Trait Implementations§
Source§impl Clone for MontyExecutorBuilder
impl Clone for MontyExecutorBuilder
Source§fn clone(&self) -> MontyExecutorBuilder
fn clone(&self) -> MontyExecutorBuilder
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MontyExecutorBuilder
impl Debug for MontyExecutorBuilder
Source§impl Default for MontyExecutorBuilder
impl Default for MontyExecutorBuilder
Source§fn default() -> MontyExecutorBuilder
fn default() -> MontyExecutorBuilder
Auto Trait Implementations§
impl !RefUnwindSafe for MontyExecutorBuilder
impl !UnwindSafe for MontyExecutorBuilder
impl Freeze for MontyExecutorBuilder
impl Send for MontyExecutorBuilder
impl Sync for MontyExecutorBuilder
impl Unpin for MontyExecutorBuilder
impl UnsafeUnpin for MontyExecutorBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreimpl<T> MaybeSend for Twhere
T: Send,
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.