pub struct MontyExecutorBuilder { /* private fields */ }code 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
Available on crate feature embedded-python only.
pub fn new() -> MontyExecutorBuilder
embedded-python only.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
Available on crate feature embedded-python only.
pub fn allow_path( self, virtual_path: impl Into<String>, host_path: impl Into<PathBuf>, access: PathAccess, ) -> MontyExecutorBuilder
embedded-python only.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
Available on crate feature embedded-python only.
pub fn environ<K, V>( self, vars: impl IntoIterator<Item = (K, V)>, ) -> MontyExecutorBuilder
embedded-python only.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
Available on crate feature embedded-python only.
pub fn environ_var( self, key: impl Into<String>, value: impl Into<String>, ) -> MontyExecutorBuilder
embedded-python only.Add or overwrite a single environment variable.
Sourcepub fn system_clock(self) -> MontyExecutorBuilder
Available on crate feature embedded-python only.
pub fn system_clock(self) -> MontyExecutorBuilder
embedded-python only.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
Available on crate feature embedded-python only.
pub fn function(self, function: Arc<dyn HostFunction>) -> MontyExecutorBuilder
embedded-python only.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
Available on crate feature embedded-python only.
pub fn function_fn<F, Fut>( self, name: impl Into<String>, description: impl Into<String>, func: F, ) -> MontyExecutorBuilder
embedded-python only.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
Available on crate feature embedded-python only.
pub fn max_memory(self, bytes: usize) -> MontyExecutorBuilder
embedded-python only.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
Available on crate feature embedded-python only.
pub fn host_function_timeout(self, timeout: Duration) -> MontyExecutorBuilder
embedded-python only.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
Available on crate feature embedded-python only.
pub fn script_name(self, name: impl Into<String>) -> MontyExecutorBuilder
embedded-python only.The script name used in tracebacks (default "python_snippet").
Sourcepub fn build_one_shot(self) -> Result<MontyOneShotExecutor, MontyBuildError>
Available on crate feature embedded-python only.
pub fn build_one_shot(self) -> Result<MontyOneShotExecutor, MontyBuildError>
embedded-python only.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>
Available on crate feature embedded-python only.
pub fn build_repl(self) -> Result<MontyReplExecutor, MontyBuildError>
embedded-python only.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.