Some checks failed
ci/woodpecker/pr/check Pipeline failed
Sync OpenAPI spec to v0.2.0, fix type annotation shadowing by using builtins.list in annotated signatures, guard poll interval lookup against None status, and reorder capsule ID assignment to validate before storing.
4268 lines
86 KiB
Markdown
4268 lines
86 KiB
Markdown
<a id="wrenn"></a>
|
|
|
|
# wrenn
|
|
|
|
<a id="wrenn.client"></a>
|
|
|
|
# wrenn.client
|
|
|
|
<a id="wrenn.client.CapsulesResource"></a>
|
|
|
|
## CapsulesResource Objects
|
|
|
|
```python
|
|
class CapsulesResource()
|
|
```
|
|
|
|
Sync capsule control-plane operations.
|
|
|
|
<a id="wrenn.client.CapsulesResource.create"></a>
|
|
|
|
#### create
|
|
|
|
```python
|
|
def create(template: str | None = None,
|
|
vcpus: int | None = None,
|
|
memory_mb: int | None = None,
|
|
timeout_sec: int | None = None) -> CapsuleModel
|
|
```
|
|
|
|
Create a new capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `template` _str | None_ - Template name to boot from.
|
|
- `vcpus` _int | None_ - Number of virtual CPUs.
|
|
- `memory_mb` _int | None_ - Memory in MiB.
|
|
- `timeout_sec` _int | None_ - Inactivity TTL in seconds before
|
|
auto-pause. ``0`` disables auto-pause.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CapsuleModel` - The newly created capsule.
|
|
|
|
<a id="wrenn.client.CapsulesResource.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
def list() -> list[CapsuleModel]
|
|
```
|
|
|
|
List all capsules for the authenticated team.
|
|
|
|
**Returns**:
|
|
|
|
- `list[CapsuleModel]` - All capsules belonging to the team.
|
|
|
|
<a id="wrenn.client.CapsulesResource.get"></a>
|
|
|
|
#### get
|
|
|
|
```python
|
|
def get(id: str) -> CapsuleModel
|
|
```
|
|
|
|
Get a capsule by ID.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CapsuleModel` - Current state of the capsule.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.CapsulesResource.destroy"></a>
|
|
|
|
#### destroy
|
|
|
|
```python
|
|
def destroy(id: str) -> None
|
|
```
|
|
|
|
Destroy a capsule permanently.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.CapsulesResource.pause"></a>
|
|
|
|
#### pause
|
|
|
|
```python
|
|
def pause(id: str) -> CapsuleModel
|
|
```
|
|
|
|
Pause a running capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CapsuleModel` - Updated capsule state.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.CapsulesResource.resume"></a>
|
|
|
|
#### resume
|
|
|
|
```python
|
|
def resume(id: str) -> CapsuleModel
|
|
```
|
|
|
|
Resume a paused capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CapsuleModel` - Updated capsule state.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.CapsulesResource.ping"></a>
|
|
|
|
#### ping
|
|
|
|
```python
|
|
def ping(id: str) -> None
|
|
```
|
|
|
|
Reset the inactivity timer for a capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.AsyncCapsulesResource"></a>
|
|
|
|
## AsyncCapsulesResource Objects
|
|
|
|
```python
|
|
class AsyncCapsulesResource()
|
|
```
|
|
|
|
Async capsule control-plane operations.
|
|
|
|
<a id="wrenn.client.AsyncCapsulesResource.create"></a>
|
|
|
|
#### create
|
|
|
|
```python
|
|
async def create(template: str | None = None,
|
|
vcpus: int | None = None,
|
|
memory_mb: int | None = None,
|
|
timeout_sec: int | None = None) -> CapsuleModel
|
|
```
|
|
|
|
Create a new capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `template` _str | None_ - Template name to boot from.
|
|
- `vcpus` _int | None_ - Number of virtual CPUs.
|
|
- `memory_mb` _int | None_ - Memory in MiB.
|
|
- `timeout_sec` _int | None_ - Inactivity TTL in seconds before
|
|
auto-pause. ``0`` disables auto-pause.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CapsuleModel` - The newly created capsule.
|
|
|
|
<a id="wrenn.client.AsyncCapsulesResource.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
async def list() -> list[CapsuleModel]
|
|
```
|
|
|
|
List all capsules for the authenticated team.
|
|
|
|
**Returns**:
|
|
|
|
- `list[CapsuleModel]` - All capsules belonging to the team.
|
|
|
|
<a id="wrenn.client.AsyncCapsulesResource.get"></a>
|
|
|
|
#### get
|
|
|
|
```python
|
|
async def get(id: str) -> CapsuleModel
|
|
```
|
|
|
|
Get a capsule by ID.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CapsuleModel` - Current state of the capsule.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.AsyncCapsulesResource.destroy"></a>
|
|
|
|
#### destroy
|
|
|
|
```python
|
|
async def destroy(id: str) -> None
|
|
```
|
|
|
|
Destroy a capsule permanently.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.AsyncCapsulesResource.pause"></a>
|
|
|
|
#### pause
|
|
|
|
```python
|
|
async def pause(id: str) -> CapsuleModel
|
|
```
|
|
|
|
Pause a running capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CapsuleModel` - Updated capsule state.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.AsyncCapsulesResource.resume"></a>
|
|
|
|
#### resume
|
|
|
|
```python
|
|
async def resume(id: str) -> CapsuleModel
|
|
```
|
|
|
|
Resume a paused capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CapsuleModel` - Updated capsule state.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.AsyncCapsulesResource.ping"></a>
|
|
|
|
#### ping
|
|
|
|
```python
|
|
async def ping(id: str) -> None
|
|
```
|
|
|
|
Reset the inactivity timer for a capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `id` _str_ - Capsule ID.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.client.SnapshotsResource"></a>
|
|
|
|
## SnapshotsResource Objects
|
|
|
|
```python
|
|
class SnapshotsResource()
|
|
```
|
|
|
|
Sync snapshot operations.
|
|
|
|
<a id="wrenn.client.SnapshotsResource.create"></a>
|
|
|
|
#### create
|
|
|
|
```python
|
|
def create(capsule_id: str,
|
|
name: str | None = None,
|
|
overwrite: bool = False) -> Template
|
|
```
|
|
|
|
Create a snapshot template from a running capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `capsule_id` _str_ - ID of the capsule to snapshot.
|
|
- `name` _str | None_ - Name for the snapshot template. Auto-generated
|
|
if not provided.
|
|
- `overwrite` _bool_ - If ``True``, overwrite an existing template with
|
|
the same name. Defaults to ``False``.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `Template` - The created snapshot template.
|
|
|
|
<a id="wrenn.client.SnapshotsResource.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
def list(type: str | None = None) -> list[Template]
|
|
```
|
|
|
|
List snapshot templates.
|
|
|
|
**Arguments**:
|
|
|
|
- `type` _str | None_ - Filter by template type. Returns all templates
|
|
if not provided.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `list[Template]` - Matching snapshot templates.
|
|
|
|
<a id="wrenn.client.SnapshotsResource.delete"></a>
|
|
|
|
#### delete
|
|
|
|
```python
|
|
def delete(name: str) -> None
|
|
```
|
|
|
|
Delete a snapshot template by name.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` _str_ - Template name to delete.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no template with the given name exists.
|
|
|
|
<a id="wrenn.client.AsyncSnapshotsResource"></a>
|
|
|
|
## AsyncSnapshotsResource Objects
|
|
|
|
```python
|
|
class AsyncSnapshotsResource()
|
|
```
|
|
|
|
Async snapshot operations.
|
|
|
|
<a id="wrenn.client.AsyncSnapshotsResource.create"></a>
|
|
|
|
#### create
|
|
|
|
```python
|
|
async def create(capsule_id: str,
|
|
name: str | None = None,
|
|
overwrite: bool = False) -> Template
|
|
```
|
|
|
|
Create a snapshot template from a running capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `capsule_id` _str_ - ID of the capsule to snapshot.
|
|
- `name` _str | None_ - Name for the snapshot template. Auto-generated
|
|
if not provided.
|
|
- `overwrite` _bool_ - If ``True``, overwrite an existing template with
|
|
the same name. Defaults to ``False``.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `Template` - The created snapshot template.
|
|
|
|
<a id="wrenn.client.AsyncSnapshotsResource.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
async def list(type: str | None = None) -> list[Template]
|
|
```
|
|
|
|
List snapshot templates.
|
|
|
|
**Arguments**:
|
|
|
|
- `type` _str | None_ - Filter by template type. Returns all templates
|
|
if not provided.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `list[Template]` - Matching snapshot templates.
|
|
|
|
<a id="wrenn.client.AsyncSnapshotsResource.delete"></a>
|
|
|
|
#### delete
|
|
|
|
```python
|
|
async def delete(name: str) -> None
|
|
```
|
|
|
|
Delete a snapshot template by name.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` _str_ - Template name to delete.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no template with the given name exists.
|
|
|
|
<a id="wrenn.client.WrennClient"></a>
|
|
|
|
## WrennClient Objects
|
|
|
|
```python
|
|
class WrennClient()
|
|
```
|
|
|
|
Synchronous client for the Wrenn API.
|
|
|
|
Authenticates with an API key.
|
|
|
|
**Arguments**:
|
|
|
|
- `api_key` - API key (``wrn_...``). Falls back to ``WRENN_API_KEY`` env var.
|
|
- `base_url` - Wrenn API base URL.
|
|
|
|
<a id="wrenn.client.WrennClient.http"></a>
|
|
|
|
#### http
|
|
|
|
```python
|
|
@property
|
|
def http() -> httpx.Client
|
|
```
|
|
|
|
The underlying httpx.Client (for sub-objects that need direct access).
|
|
|
|
<a id="wrenn.client.WrennClient.close"></a>
|
|
|
|
#### close
|
|
|
|
```python
|
|
def close() -> None
|
|
```
|
|
|
|
Close the underlying HTTP connection pool.
|
|
|
|
<a id="wrenn.client.AsyncWrennClient"></a>
|
|
|
|
## AsyncWrennClient Objects
|
|
|
|
```python
|
|
class AsyncWrennClient()
|
|
```
|
|
|
|
Asynchronous client for the Wrenn API.
|
|
|
|
Authenticates with an API key.
|
|
|
|
**Arguments**:
|
|
|
|
- `api_key` - API key (``wrn_...``). Falls back to ``WRENN_API_KEY`` env var.
|
|
- `base_url` - Wrenn API base URL. Falls back to ``WRENN_BASE_URL`` env var.
|
|
|
|
<a id="wrenn.client.AsyncWrennClient.http"></a>
|
|
|
|
#### http
|
|
|
|
```python
|
|
@property
|
|
def http() -> httpx.AsyncClient
|
|
```
|
|
|
|
The underlying httpx.AsyncClient.
|
|
|
|
<a id="wrenn.client.AsyncWrennClient.aclose"></a>
|
|
|
|
#### aclose
|
|
|
|
```python
|
|
async def aclose() -> None
|
|
```
|
|
|
|
Close the underlying async HTTP connection pool.
|
|
|
|
<a id="wrenn.sandbox"></a>
|
|
|
|
# wrenn.sandbox
|
|
|
|
<a id="wrenn.commands"></a>
|
|
|
|
# wrenn.commands
|
|
|
|
<a id="wrenn.commands.CommandResult"></a>
|
|
|
|
## CommandResult Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class CommandResult()
|
|
```
|
|
|
|
Result from a foreground command execution.
|
|
|
|
<a id="wrenn.commands.CommandHandle"></a>
|
|
|
|
## CommandHandle Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class CommandHandle()
|
|
```
|
|
|
|
Handle for a background process.
|
|
|
|
<a id="wrenn.commands.ProcessInfo"></a>
|
|
|
|
## ProcessInfo Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class ProcessInfo()
|
|
```
|
|
|
|
Information about a running process.
|
|
|
|
<a id="wrenn.commands.StreamEvent"></a>
|
|
|
|
## StreamEvent Objects
|
|
|
|
```python
|
|
class StreamEvent()
|
|
```
|
|
|
|
Base class for streaming exec events.
|
|
|
|
<a id="wrenn.commands.Commands"></a>
|
|
|
|
## Commands Objects
|
|
|
|
```python
|
|
class Commands()
|
|
```
|
|
|
|
Sync command execution interface. Accessed via ``capsule.commands``.
|
|
|
|
<a id="wrenn.commands.Commands.run"></a>
|
|
|
|
#### run
|
|
|
|
```python
|
|
def run(cmd: str,
|
|
*,
|
|
background: bool = False,
|
|
timeout: int | None = 30,
|
|
envs: dict[str, str] | None = None,
|
|
cwd: str | None = None,
|
|
tag: str | None = None) -> CommandResult | CommandHandle
|
|
```
|
|
|
|
Execute a shell command inside the capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `cmd` _str_ - Shell command string to execute.
|
|
- `background` _bool_ - If ``True``, launch the process in the
|
|
background and return a :class:`CommandHandle` immediately.
|
|
Defaults to ``False``.
|
|
- `timeout` _int | None_ - Seconds before the foreground command times
|
|
out. Ignored for background commands. Defaults to ``30``.
|
|
- `envs` _dict[str, str] | None_ - Additional environment variables
|
|
to set for the process.
|
|
- `cwd` _str | None_ - Working directory for the process.
|
|
- `tag` _str | None_ - Optional label attached to background processes
|
|
for later retrieval via :meth:`connect`.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CommandResult` - stdout, stderr, exit code, and duration for
|
|
foreground commands (``background=False``).
|
|
|
|
- `CommandHandle` - PID and tag for background commands
|
|
(``background=True``).
|
|
|
|
<a id="wrenn.commands.Commands.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
def list() -> list[ProcessInfo]
|
|
```
|
|
|
|
List all running background processes in the capsule.
|
|
|
|
**Returns**:
|
|
|
|
- `list[ProcessInfo]` - Running processes with their PID, tag, and
|
|
command information.
|
|
|
|
<a id="wrenn.commands.Commands.kill"></a>
|
|
|
|
#### kill
|
|
|
|
```python
|
|
def kill(pid: int) -> None
|
|
```
|
|
|
|
Send SIGKILL to a background process.
|
|
|
|
**Arguments**:
|
|
|
|
- `pid` _int_ - PID of the process to kill.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no process with the given PID exists.
|
|
|
|
<a id="wrenn.commands.Commands.connect"></a>
|
|
|
|
#### connect
|
|
|
|
```python
|
|
def connect(pid: int) -> Iterator[StreamEvent]
|
|
```
|
|
|
|
Connect to a running background process and stream its output.
|
|
|
|
**Arguments**:
|
|
|
|
- `pid` _int_ - PID of the background process to attach to.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `StreamEvent` - Successive output events. Stops on
|
|
:class:`StreamExitEvent` or :class:`StreamErrorEvent`.
|
|
|
|
<a id="wrenn.commands.Commands.stream"></a>
|
|
|
|
#### stream
|
|
|
|
```python
|
|
def stream(cmd: str, args: list[str] | None = None) -> Iterator[StreamEvent]
|
|
```
|
|
|
|
Execute a command via WebSocket, streaming output as events.
|
|
|
|
**Arguments**:
|
|
|
|
- `cmd` _str_ - Command to execute.
|
|
- `args` _list[str] | None_ - Additional arguments for the command.
|
|
When omitted, *cmd* is interpreted as a shell command
|
|
string and executed via ``/bin/sh -c``.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `StreamEvent` - Successive events including :class:`StreamStartEvent`,
|
|
:class:`StreamStdoutEvent`, :class:`StreamStderrEvent`,
|
|
:class:`StreamExitEvent`, and :class:`StreamErrorEvent`.
|
|
|
|
<a id="wrenn.commands.AsyncCommands"></a>
|
|
|
|
## AsyncCommands Objects
|
|
|
|
```python
|
|
class AsyncCommands()
|
|
```
|
|
|
|
Async command execution interface. Accessed via ``capsule.commands``.
|
|
|
|
<a id="wrenn.commands.AsyncCommands.run"></a>
|
|
|
|
#### run
|
|
|
|
```python
|
|
async def run(cmd: str,
|
|
*,
|
|
background: bool = False,
|
|
timeout: int | None = 30,
|
|
envs: dict[str, str] | None = None,
|
|
cwd: str | None = None,
|
|
tag: str | None = None) -> CommandResult | CommandHandle
|
|
```
|
|
|
|
Execute a shell command inside the capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `cmd` _str_ - Shell command string to execute.
|
|
- `background` _bool_ - If ``True``, launch the process in the
|
|
background and return a :class:`CommandHandle` immediately.
|
|
Defaults to ``False``.
|
|
- `timeout` _int | None_ - Seconds before the foreground command times
|
|
out. Ignored for background commands. Defaults to ``30``.
|
|
- `envs` _dict[str, str] | None_ - Additional environment variables
|
|
to set for the process.
|
|
- `cwd` _str | None_ - Working directory for the process.
|
|
- `tag` _str | None_ - Optional label attached to background processes
|
|
for later retrieval via :meth:`connect`.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `CommandResult` - stdout, stderr, exit code, and duration for
|
|
foreground commands (``background=False``).
|
|
|
|
- `CommandHandle` - PID and tag for background commands
|
|
(``background=True``).
|
|
|
|
<a id="wrenn.commands.AsyncCommands.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
async def list() -> list[ProcessInfo]
|
|
```
|
|
|
|
List all running background processes in the capsule.
|
|
|
|
**Returns**:
|
|
|
|
- `list[ProcessInfo]` - Running processes with their PID, tag, and
|
|
command information.
|
|
|
|
<a id="wrenn.commands.AsyncCommands.kill"></a>
|
|
|
|
#### kill
|
|
|
|
```python
|
|
async def kill(pid: int) -> None
|
|
```
|
|
|
|
Send SIGKILL to a background process.
|
|
|
|
**Arguments**:
|
|
|
|
- `pid` _int_ - PID of the process to kill.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no process with the given PID exists.
|
|
|
|
<a id="wrenn.commands.AsyncCommands.connect"></a>
|
|
|
|
#### connect
|
|
|
|
```python
|
|
async def connect(pid: int) -> AsyncIterator[StreamEvent]
|
|
```
|
|
|
|
Connect to a running background process and stream its output.
|
|
|
|
**Arguments**:
|
|
|
|
- `pid` _int_ - PID of the background process to attach to.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `StreamEvent` - Successive output events. Stops on
|
|
:class:`StreamExitEvent` or :class:`StreamErrorEvent`.
|
|
|
|
<a id="wrenn.commands.AsyncCommands.stream"></a>
|
|
|
|
#### stream
|
|
|
|
```python
|
|
async def stream(cmd: str,
|
|
args: list[str] | None = None) -> AsyncIterator[StreamEvent]
|
|
```
|
|
|
|
Execute a command via WebSocket, streaming output as events.
|
|
|
|
**Arguments**:
|
|
|
|
- `cmd` _str_ - Command to execute.
|
|
- `args` _list[str] | None_ - Additional arguments for the command.
|
|
When omitted, *cmd* is interpreted as a shell command
|
|
string and executed via ``/bin/sh -c``.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `StreamEvent` - Successive events including :class:`StreamStartEvent`,
|
|
:class:`StreamStdoutEvent`, :class:`StreamStderrEvent`,
|
|
:class:`StreamExitEvent`, and :class:`StreamErrorEvent`.
|
|
|
|
<a id="wrenn.files"></a>
|
|
|
|
# wrenn.files
|
|
|
|
<a id="wrenn.files.Files"></a>
|
|
|
|
## Files Objects
|
|
|
|
```python
|
|
class Files()
|
|
```
|
|
|
|
Sync filesystem interface. Accessed via ``capsule.files``.
|
|
|
|
<a id="wrenn.files.Files.read"></a>
|
|
|
|
#### read
|
|
|
|
```python
|
|
def read(path: str) -> str
|
|
```
|
|
|
|
Read a file as a UTF-8 string.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to the file inside the capsule.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `str` - File contents decoded as UTF-8.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.files.Files.read_bytes"></a>
|
|
|
|
#### read\_bytes
|
|
|
|
```python
|
|
def read_bytes(path: str) -> bytes
|
|
```
|
|
|
|
Read a file as raw bytes.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to the file inside the capsule.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `bytes` - Raw file contents.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.files.Files.write"></a>
|
|
|
|
#### write
|
|
|
|
```python
|
|
def write(path: str, data: str | bytes) -> None
|
|
```
|
|
|
|
Write data to a file inside the capsule.
|
|
|
|
Creates parent directories if they do not exist.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute destination path inside the capsule.
|
|
- `data` _str | bytes_ - Content to write. Strings are UTF-8 encoded.
|
|
|
|
<a id="wrenn.files.Files.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
def list(path: str, depth: int = 1) -> list[FileEntry]
|
|
```
|
|
|
|
List directory contents.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to the directory inside the capsule.
|
|
- `depth` _int_ - Recursion depth. ``1`` lists only immediate children.
|
|
Defaults to ``1``.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `list[FileEntry]` - Entries in the directory.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.files.Files.exists"></a>
|
|
|
|
#### exists
|
|
|
|
```python
|
|
def exists(path: str) -> bool
|
|
```
|
|
|
|
Check whether a path exists inside the capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to check.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `bool` - ``True`` if the path exists.
|
|
|
|
<a id="wrenn.files.Files.make_dir"></a>
|
|
|
|
#### make\_dir
|
|
|
|
```python
|
|
def make_dir(path: str) -> FileEntry
|
|
```
|
|
|
|
Create a directory (with parents). Idempotent.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path of the directory to create.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `FileEntry` - The created (or already-existing) directory entry.
|
|
|
|
<a id="wrenn.files.Files.remove"></a>
|
|
|
|
#### remove
|
|
|
|
```python
|
|
def remove(path: str) -> None
|
|
```
|
|
|
|
Remove a file or directory recursively.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to remove.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.files.Files.upload_stream"></a>
|
|
|
|
#### upload\_stream
|
|
|
|
```python
|
|
def upload_stream(path: str, stream: Iterator[bytes]) -> None
|
|
```
|
|
|
|
Stream a large file into the capsule.
|
|
|
|
Prefer this over :meth:`write` when the file is too large to hold in
|
|
memory.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute destination path inside the capsule.
|
|
- `stream` _Iterator[bytes]_ - Iterable of byte chunks to upload.
|
|
|
|
<a id="wrenn.files.Files.download_stream"></a>
|
|
|
|
#### download\_stream
|
|
|
|
```python
|
|
def download_stream(path: str) -> Iterator[bytes]
|
|
```
|
|
|
|
Stream a large file out of the capsule.
|
|
|
|
Prefer this over :meth:`read_bytes` when the file is too large to hold
|
|
in memory.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to the file inside the capsule.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `bytes` - Successive byte chunks of the file.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.files.AsyncFiles"></a>
|
|
|
|
## AsyncFiles Objects
|
|
|
|
```python
|
|
class AsyncFiles()
|
|
```
|
|
|
|
Async filesystem interface. Accessed via ``capsule.files``.
|
|
|
|
<a id="wrenn.files.AsyncFiles.read"></a>
|
|
|
|
#### read
|
|
|
|
```python
|
|
async def read(path: str) -> str
|
|
```
|
|
|
|
Read a file as a UTF-8 string.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to the file inside the capsule.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `str` - File contents decoded as UTF-8.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.files.AsyncFiles.read_bytes"></a>
|
|
|
|
#### read\_bytes
|
|
|
|
```python
|
|
async def read_bytes(path: str) -> bytes
|
|
```
|
|
|
|
Read a file as raw bytes.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to the file inside the capsule.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `bytes` - Raw file contents.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.files.AsyncFiles.write"></a>
|
|
|
|
#### write
|
|
|
|
```python
|
|
async def write(path: str, data: str | bytes) -> None
|
|
```
|
|
|
|
Write data to a file inside the capsule.
|
|
|
|
Creates parent directories if they do not exist.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute destination path inside the capsule.
|
|
- `data` _str | bytes_ - Content to write. Strings are UTF-8 encoded.
|
|
|
|
<a id="wrenn.files.AsyncFiles.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
async def list(path: str, depth: int = 1) -> list[FileEntry]
|
|
```
|
|
|
|
List directory contents.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to the directory inside the capsule.
|
|
- `depth` _int_ - Recursion depth. ``1`` lists only immediate children.
|
|
Defaults to ``1``.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `list[FileEntry]` - Entries in the directory.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.files.AsyncFiles.exists"></a>
|
|
|
|
#### exists
|
|
|
|
```python
|
|
async def exists(path: str) -> bool
|
|
```
|
|
|
|
Check whether a path exists inside the capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to check.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `bool` - ``True`` if the path exists.
|
|
|
|
<a id="wrenn.files.AsyncFiles.make_dir"></a>
|
|
|
|
#### make\_dir
|
|
|
|
```python
|
|
async def make_dir(path: str) -> FileEntry
|
|
```
|
|
|
|
Create a directory (with parents). Idempotent.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path of the directory to create.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `FileEntry` - The created (or already-existing) directory entry.
|
|
|
|
<a id="wrenn.files.AsyncFiles.remove"></a>
|
|
|
|
#### remove
|
|
|
|
```python
|
|
async def remove(path: str) -> None
|
|
```
|
|
|
|
Remove a file or directory recursively.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to remove.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.files.AsyncFiles.upload_stream"></a>
|
|
|
|
#### upload\_stream
|
|
|
|
```python
|
|
async def upload_stream(path: str, stream: AsyncIterator[bytes]) -> None
|
|
```
|
|
|
|
Stream a large file into the capsule.
|
|
|
|
Prefer this over :meth:`write` when the file is too large to hold in
|
|
memory.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute destination path inside the capsule.
|
|
- `stream` _AsyncIterator[bytes]_ - Async iterable of byte chunks to
|
|
upload.
|
|
|
|
<a id="wrenn.files.AsyncFiles.download_stream"></a>
|
|
|
|
#### download\_stream
|
|
|
|
```python
|
|
async def download_stream(path: str) -> AsyncIterator[bytes]
|
|
```
|
|
|
|
Stream a large file out of the capsule.
|
|
|
|
Prefer this over :meth:`read_bytes` when the file is too large to hold
|
|
in memory.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` _str_ - Absolute path to the file inside the capsule.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `bytes` - Successive byte chunks of the file.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If the path does not exist.
|
|
|
|
<a id="wrenn.code_interpreter.models"></a>
|
|
|
|
# wrenn.code\_interpreter.models
|
|
|
|
<a id="wrenn.code_interpreter.models.ExecutionError"></a>
|
|
|
|
## ExecutionError Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class ExecutionError()
|
|
```
|
|
|
|
Error raised during code execution.
|
|
|
|
**Attributes**:
|
|
|
|
- `name` - Exception class name (e.g. ``"NameError"``).
|
|
- `value` - Exception message.
|
|
- `traceback` - Full traceback string.
|
|
|
|
<a id="wrenn.code_interpreter.models.Logs"></a>
|
|
|
|
## Logs Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class Logs()
|
|
```
|
|
|
|
Captured stdout/stderr streams.
|
|
|
|
Each element in the list is one chunk of text as it arrived from
|
|
the kernel.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result"></a>
|
|
|
|
## Result Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class Result()
|
|
```
|
|
|
|
A single rich output from code execution.
|
|
|
|
Jupyter cells can produce multiple outputs — one ``execute_result``
|
|
(the expression value) and zero or more ``display_data`` messages
|
|
(from ``plt.show()``, ``display()``, etc.). Each becomes a
|
|
``Result``.
|
|
|
|
Known MIME types are unpacked into named attributes; anything else
|
|
lands in :pyattr:`extra`.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.text"></a>
|
|
|
|
#### text
|
|
|
|
``text/plain`` representation.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.html"></a>
|
|
|
|
#### html
|
|
|
|
``text/html`` representation.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.markdown"></a>
|
|
|
|
#### markdown
|
|
|
|
``text/markdown`` representation.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.svg"></a>
|
|
|
|
#### svg
|
|
|
|
``image/svg+xml`` representation.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.png"></a>
|
|
|
|
#### png
|
|
|
|
``image/png`` — base64-encoded.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.jpeg"></a>
|
|
|
|
#### jpeg
|
|
|
|
``image/jpeg`` — base64-encoded.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.pdf"></a>
|
|
|
|
#### pdf
|
|
|
|
``application/pdf`` — base64-encoded.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.latex"></a>
|
|
|
|
#### latex
|
|
|
|
``text/latex`` representation.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.json"></a>
|
|
|
|
#### json
|
|
|
|
``application/json`` representation.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.javascript"></a>
|
|
|
|
#### javascript
|
|
|
|
``application/javascript`` representation.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.extra"></a>
|
|
|
|
#### extra
|
|
|
|
MIME types not covered by the named fields above.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.is_main_result"></a>
|
|
|
|
#### is\_main\_result
|
|
|
|
``True`` when this came from an ``execute_result`` message
|
|
(i.e. the value of the last expression in the cell). ``False``
|
|
for ``display_data`` outputs.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.from_bundle"></a>
|
|
|
|
#### from\_bundle
|
|
|
|
```python
|
|
@classmethod
|
|
def from_bundle(cls,
|
|
bundle: dict[str, str],
|
|
*,
|
|
is_main_result: bool = False) -> Result
|
|
```
|
|
|
|
Build a ``Result`` from a Jupyter MIME bundle dict.
|
|
|
|
<a id="wrenn.code_interpreter.models.Result.formats"></a>
|
|
|
|
#### formats
|
|
|
|
```python
|
|
def formats() -> list[str]
|
|
```
|
|
|
|
Return names of non-``None`` MIME-type fields.
|
|
|
|
<a id="wrenn.code_interpreter.models.Execution"></a>
|
|
|
|
## Execution Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class Execution()
|
|
```
|
|
|
|
Complete result of a ``run_code`` call.
|
|
|
|
**Attributes**:
|
|
|
|
- `results` - All rich outputs produced by the cell — charts, tables,
|
|
images, expression values, etc.
|
|
- `logs` - Captured stdout/stderr text.
|
|
- `error` - Populated when the cell raised an exception.
|
|
- `execution_count` - Jupyter execution counter (the ``[N]`` number).
|
|
|
|
<a id="wrenn.code_interpreter.models.Execution.text"></a>
|
|
|
|
#### text
|
|
|
|
```python
|
|
@property
|
|
def text() -> str | None
|
|
```
|
|
|
|
Convenience — ``text/plain`` of the main ``execute_result``,
|
|
or ``None`` if the cell had no expression value.
|
|
|
|
<a id="wrenn.code_interpreter.async_capsule"></a>
|
|
|
|
# wrenn.code\_interpreter.async\_capsule
|
|
|
|
<a id="wrenn.code_interpreter.async_capsule.AsyncCapsule"></a>
|
|
|
|
## AsyncCapsule Objects
|
|
|
|
```python
|
|
class AsyncCapsule(BaseAsyncCapsule)
|
|
```
|
|
|
|
Async code interpreter capsule with ``run_code`` support.
|
|
|
|
Uses ``code-runner-beta`` template by default::
|
|
|
|
from wrenn.code_interpreter import AsyncCapsule
|
|
|
|
capsule = await AsyncCapsule.create()
|
|
result = await capsule.run_code("print('hello')")
|
|
|
|
<a id="wrenn.code_interpreter.async_capsule.AsyncCapsule.create"></a>
|
|
|
|
#### create
|
|
|
|
```python
|
|
@classmethod
|
|
async def create(cls,
|
|
template: str | None = None,
|
|
vcpus: int | None = None,
|
|
memory_mb: int | None = None,
|
|
timeout: int | None = None,
|
|
*,
|
|
wait: bool = False,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None) -> AsyncCapsule
|
|
```
|
|
|
|
Create a new async code interpreter capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `template` _str | None_ - Template to boot from. Defaults to
|
|
``"code-runner-beta"``.
|
|
- `vcpus` _int | None_ - Number of virtual CPUs.
|
|
- `memory_mb` _int | None_ - Memory in MiB.
|
|
- `timeout` _int | None_ - Inactivity TTL in seconds before auto-pause.
|
|
- `wait` _bool_ - Await until the capsule reaches ``running`` status.
|
|
- `api_key` _str | None_ - Wrenn API key. Falls back to
|
|
``WRENN_API_KEY`` env var.
|
|
- `base_url` _str | None_ - API base URL override.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `AsyncCapsule` - A new async code interpreter capsule instance.
|
|
|
|
<a id="wrenn.code_interpreter.async_capsule.AsyncCapsule.run_code"></a>
|
|
|
|
#### run\_code
|
|
|
|
```python
|
|
async def run_code(
|
|
code: str,
|
|
language: str = "python",
|
|
timeout: float = 30,
|
|
jupyter_timeout: float = 30,
|
|
on_result: Callable[[Result], Any] | None = None,
|
|
on_stdout: Callable[[str], Any] | None = None,
|
|
on_stderr: Callable[[str], Any] | None = None,
|
|
on_error: Callable[[ExecutionError], Any] | None = None) -> Execution
|
|
```
|
|
|
|
Execute code in a persistent Jupyter kernel (async).
|
|
|
|
**Arguments**:
|
|
|
|
- `code` - Code string to execute.
|
|
- `language` - Execution backend language. Currently only ``"python"``.
|
|
- `timeout` - Maximum seconds to wait for execution to complete.
|
|
- `jupyter_timeout` - Maximum seconds to wait for Jupyter to become
|
|
available.
|
|
- `on_result` - Called for each rich output (charts, images, expression
|
|
values).
|
|
- `on_stdout` - Called for each stdout chunk.
|
|
- `on_stderr` - Called for each stderr chunk.
|
|
- `on_error` - Called when the cell raises an exception.
|
|
|
|
|
|
**Returns**:
|
|
|
|
An :class:`Execution` with ``.results``, ``.logs``, ``.error``,
|
|
and a convenience ``.text`` property.
|
|
|
|
<a id="wrenn.code_interpreter"></a>
|
|
|
|
# wrenn.code\_interpreter
|
|
|
|
<a id="wrenn.code_interpreter.capsule"></a>
|
|
|
|
# wrenn.code\_interpreter.capsule
|
|
|
|
<a id="wrenn.code_interpreter.capsule.Capsule"></a>
|
|
|
|
## Capsule Objects
|
|
|
|
```python
|
|
class Capsule(BaseCapsule)
|
|
```
|
|
|
|
Code interpreter capsule with ``run_code`` support.
|
|
|
|
Uses ``code-runner-beta`` template by default::
|
|
|
|
from wrenn.code_interpreter import Capsule
|
|
|
|
capsule = Capsule()
|
|
result = capsule.run_code("print('hello')")
|
|
print(result.logs.stdout) # ["hello\n"]
|
|
|
|
<a id="wrenn.code_interpreter.capsule.Capsule.__init__"></a>
|
|
|
|
#### \_\_init\_\_
|
|
|
|
```python
|
|
def __init__(template: str | None = None,
|
|
vcpus: int | None = None,
|
|
memory_mb: int | None = None,
|
|
timeout: int | None = None,
|
|
*,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None,
|
|
**kwargs) -> None
|
|
```
|
|
|
|
Create a code interpreter capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `template` _str | None_ - Template to boot from. Defaults to
|
|
``"code-runner-beta"``.
|
|
- `vcpus` _int | None_ - Number of virtual CPUs.
|
|
- `memory_mb` _int | None_ - Memory in MiB.
|
|
- `timeout` _int | None_ - Inactivity TTL in seconds before auto-pause.
|
|
- `api_key` _str | None_ - Wrenn API key. Falls back to
|
|
``WRENN_API_KEY`` env var.
|
|
- `base_url` _str | None_ - API base URL override.
|
|
|
|
<a id="wrenn.code_interpreter.capsule.Capsule.create"></a>
|
|
|
|
#### create
|
|
|
|
```python
|
|
@classmethod
|
|
def create(cls,
|
|
template: str | None = None,
|
|
vcpus: int | None = None,
|
|
memory_mb: int | None = None,
|
|
timeout: int | None = None,
|
|
*,
|
|
wait: bool = False,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None) -> Capsule
|
|
```
|
|
|
|
Create a new code interpreter capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `template` _str | None_ - Template to boot from. Defaults to
|
|
``"code-runner-beta"``.
|
|
- `vcpus` _int | None_ - Number of virtual CPUs.
|
|
- `memory_mb` _int | None_ - Memory in MiB.
|
|
- `timeout` _int | None_ - Inactivity TTL in seconds before auto-pause.
|
|
- `wait` _bool_ - Block until the capsule reaches ``running`` status.
|
|
- `api_key` _str | None_ - Wrenn API key. Falls back to
|
|
``WRENN_API_KEY`` env var.
|
|
- `base_url` _str | None_ - API base URL override.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `Capsule` - A new code interpreter capsule instance.
|
|
|
|
<a id="wrenn.code_interpreter.capsule.Capsule.run_code"></a>
|
|
|
|
#### run\_code
|
|
|
|
```python
|
|
def run_code(
|
|
code: str,
|
|
language: str = "python",
|
|
timeout: float = 30,
|
|
jupyter_timeout: float = 30,
|
|
on_result: Callable[[Result], Any] | None = None,
|
|
on_stdout: Callable[[str], Any] | None = None,
|
|
on_stderr: Callable[[str], Any] | None = None,
|
|
on_error: Callable[[ExecutionError], Any] | None = None) -> Execution
|
|
```
|
|
|
|
Execute code in a persistent Jupyter kernel.
|
|
|
|
Variables, imports, and function definitions survive across calls.
|
|
|
|
**Arguments**:
|
|
|
|
- `code` - Code string to execute.
|
|
- `language` - Execution backend language. Currently only ``"python"``.
|
|
- `timeout` - Maximum seconds to wait for execution to complete.
|
|
- `jupyter_timeout` - Maximum seconds to wait for Jupyter to become
|
|
available.
|
|
- `on_result` - Called for each rich output (charts, images, expression
|
|
values).
|
|
- `on_stdout` - Called for each stdout chunk.
|
|
- `on_stderr` - Called for each stderr chunk.
|
|
- `on_error` - Called when the cell raises an exception.
|
|
|
|
|
|
**Returns**:
|
|
|
|
An :class:`Execution` with ``.results``, ``.logs``, ``.error``,
|
|
and a convenience ``.text`` property.
|
|
|
|
<a id="wrenn.exceptions"></a>
|
|
|
|
# wrenn.exceptions
|
|
|
|
<a id="wrenn.exceptions.WrennError"></a>
|
|
|
|
## WrennError Objects
|
|
|
|
```python
|
|
class WrennError(Exception)
|
|
```
|
|
|
|
Base exception for all Wrenn SDK errors.
|
|
|
|
All SDK exceptions inherit from this class, so you can catch
|
|
``WrennError`` to handle any API error generically.
|
|
|
|
**Attributes**:
|
|
|
|
- `code` _str_ - Machine-readable error code from the API
|
|
(e.g. ``"not_found"``).
|
|
- `message` _str_ - Human-readable error description.
|
|
- `status_code` _int_ - HTTP status code of the response.
|
|
|
|
<a id="wrenn.exceptions.WrennError.__init__"></a>
|
|
|
|
#### \_\_init\_\_
|
|
|
|
```python
|
|
def __init__(code: str, message: str, status_code: int) -> None
|
|
```
|
|
|
|
Initialize a WrennError.
|
|
|
|
**Arguments**:
|
|
|
|
- `code` _str_ - Machine-readable error code.
|
|
- `message` _str_ - Human-readable error description.
|
|
- `status_code` _int_ - HTTP status code of the response.
|
|
|
|
<a id="wrenn.exceptions.WrennValidationError"></a>
|
|
|
|
## WrennValidationError Objects
|
|
|
|
```python
|
|
class WrennValidationError(WrennError)
|
|
```
|
|
|
|
400 — Invalid request parameters.
|
|
|
|
<a id="wrenn.exceptions.WrennAuthenticationError"></a>
|
|
|
|
## WrennAuthenticationError Objects
|
|
|
|
```python
|
|
class WrennAuthenticationError(WrennError)
|
|
```
|
|
|
|
401 — Invalid or missing authentication.
|
|
|
|
<a id="wrenn.exceptions.WrennForbiddenError"></a>
|
|
|
|
## WrennForbiddenError Objects
|
|
|
|
```python
|
|
class WrennForbiddenError(WrennError)
|
|
```
|
|
|
|
403 — Authenticated but not authorized.
|
|
|
|
<a id="wrenn.exceptions.WrennNotFoundError"></a>
|
|
|
|
## WrennNotFoundError Objects
|
|
|
|
```python
|
|
class WrennNotFoundError(WrennError)
|
|
```
|
|
|
|
404 — Resource not found.
|
|
|
|
<a id="wrenn.exceptions.WrennConflictError"></a>
|
|
|
|
## WrennConflictError Objects
|
|
|
|
```python
|
|
class WrennConflictError(WrennError)
|
|
```
|
|
|
|
409 — State conflict (e.g. invalid_state).
|
|
|
|
<a id="wrenn.exceptions.WrennHostHasCapsulesError"></a>
|
|
|
|
## WrennHostHasCapsulesError Objects
|
|
|
|
```python
|
|
class WrennHostHasCapsulesError(WrennConflictError)
|
|
```
|
|
|
|
409 — Host still has running capsules.
|
|
|
|
**Attributes**:
|
|
|
|
- `capsule_ids` _list[str]_ - IDs of the capsules still running on the host.
|
|
|
|
<a id="wrenn.exceptions.WrennHostHasCapsulesError.__init__"></a>
|
|
|
|
#### \_\_init\_\_
|
|
|
|
```python
|
|
def __init__(code: str, message: str, status_code: int,
|
|
capsule_ids: list[str]) -> None
|
|
```
|
|
|
|
Initialize a WrennHostHasCapsulesError.
|
|
|
|
**Arguments**:
|
|
|
|
- `code` _str_ - Machine-readable error code.
|
|
- `message` _str_ - Human-readable error description.
|
|
- `status_code` _int_ - HTTP status code of the response.
|
|
- `capsule_ids` _list[str]_ - IDs of capsules still on the host.
|
|
|
|
<a id="wrenn.exceptions.WrennHostUnavailableError"></a>
|
|
|
|
## WrennHostUnavailableError Objects
|
|
|
|
```python
|
|
class WrennHostUnavailableError(WrennError)
|
|
```
|
|
|
|
503 — No suitable host available.
|
|
|
|
<a id="wrenn.exceptions.WrennAgentError"></a>
|
|
|
|
## WrennAgentError Objects
|
|
|
|
```python
|
|
class WrennAgentError(WrennError)
|
|
```
|
|
|
|
502 — Host agent returned an error.
|
|
|
|
<a id="wrenn.exceptions.WrennInternalError"></a>
|
|
|
|
## WrennInternalError Objects
|
|
|
|
```python
|
|
class WrennInternalError(WrennError)
|
|
```
|
|
|
|
500 — Unexpected server error.
|
|
|
|
<a id="wrenn.async_capsule"></a>
|
|
|
|
# wrenn.async\_capsule
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule"></a>
|
|
|
|
## AsyncCapsule Objects
|
|
|
|
```python
|
|
class AsyncCapsule()
|
|
```
|
|
|
|
Async Wrenn capsule with e2b-compatible interface.
|
|
|
|
Create via classmethod::
|
|
|
|
capsule = await AsyncCapsule.create(template="minimal")
|
|
|
|
Use as async context manager::
|
|
|
|
async with await AsyncCapsule.create() as capsule:
|
|
await capsule.commands.run("echo hello")
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.capsule_id"></a>
|
|
|
|
#### capsule\_id
|
|
|
|
```python
|
|
@property
|
|
def capsule_id() -> str
|
|
```
|
|
|
|
The capsule's unique identifier.
|
|
|
|
**Returns**:
|
|
|
|
- `str` - Capsule ID assigned by the Wrenn API.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.info"></a>
|
|
|
|
#### info
|
|
|
|
```python
|
|
@property
|
|
def info() -> CapsuleModel | None
|
|
```
|
|
|
|
Cached capsule metadata from the last API call.
|
|
|
|
**Returns**:
|
|
|
|
CapsuleModel | None: The last-fetched capsule model, or ``None``
|
|
if the capsule was connected without an initial fetch.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.create"></a>
|
|
|
|
#### create
|
|
|
|
```python
|
|
@classmethod
|
|
async def create(cls,
|
|
template: str | None = None,
|
|
vcpus: int | None = None,
|
|
memory_mb: int | None = None,
|
|
timeout: int | None = None,
|
|
*,
|
|
wait: bool = False,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None) -> AsyncCapsule
|
|
```
|
|
|
|
Create a new capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `template` _str | None_ - Template name to boot from.
|
|
- `vcpus` _int | None_ - Number of virtual CPUs.
|
|
- `memory_mb` _int | None_ - Memory in MiB.
|
|
- `timeout` _int | None_ - Inactivity TTL in seconds before auto-pause.
|
|
- `wait` _bool_ - Await until the capsule reaches ``running`` status.
|
|
- `api_key` _str | None_ - Wrenn API key. Falls back to
|
|
``WRENN_API_KEY`` env var.
|
|
- `base_url` _str | None_ - API base URL override.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `AsyncCapsule` - A new capsule instance.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.connect"></a>
|
|
|
|
#### connect
|
|
|
|
```python
|
|
@classmethod
|
|
async def connect(cls,
|
|
capsule_id: str,
|
|
*,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None) -> AsyncCapsule
|
|
```
|
|
|
|
Connect to an existing capsule, resuming it if paused.
|
|
|
|
**Arguments**:
|
|
|
|
- `capsule_id` _str_ - ID of the capsule to connect to.
|
|
- `api_key` _str | None_ - Wrenn API key. Falls back to
|
|
``WRENN_API_KEY`` env var.
|
|
- `base_url` _str | None_ - API base URL override.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `AsyncCapsule` - A capsule instance bound to the existing capsule.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.ping"></a>
|
|
|
|
#### ping
|
|
|
|
```python
|
|
async def ping() -> None
|
|
```
|
|
|
|
Reset the capsule inactivity timer.
|
|
|
|
Call this to prevent the capsule from being auto-paused when the
|
|
inactivity TTL is set.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.wait_ready"></a>
|
|
|
|
#### wait\_ready
|
|
|
|
```python
|
|
async def wait_ready(timeout: float = 30) -> None
|
|
```
|
|
|
|
Await until the capsule status is ``running``.
|
|
|
|
Polling interval adapts to the current transient status:
|
|
0.5 s for starting/resuming, 2 s for pausing, 1 s for stopping.
|
|
|
|
**Arguments**:
|
|
|
|
- `timeout` _float_ - Maximum seconds to wait. Defaults to ``30``.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `TimeoutError` - If the capsule does not reach ``running`` state
|
|
within ``timeout`` seconds.
|
|
- `RuntimeError` - If the capsule enters an error, stopped, or paused
|
|
state while waiting.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.is_running"></a>
|
|
|
|
#### is\_running
|
|
|
|
```python
|
|
async def is_running() -> bool
|
|
```
|
|
|
|
Check whether the capsule is currently running.
|
|
|
|
Makes a live API call to fetch current status.
|
|
|
|
**Returns**:
|
|
|
|
- `bool` - ``True`` if the capsule status is ``running``.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
@classmethod
|
|
async def list(cls,
|
|
*,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None) -> list[CapsuleModel]
|
|
```
|
|
|
|
List all capsules belonging to the team.
|
|
|
|
**Arguments**:
|
|
|
|
- `api_key` _str | None_ - Wrenn API key. Falls back to
|
|
``WRENN_API_KEY`` env var.
|
|
- `base_url` _str | None_ - API base URL override.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `list[CapsuleModel]` - All capsules for the authenticated team.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.pty"></a>
|
|
|
|
#### pty
|
|
|
|
```python
|
|
@asynccontextmanager
|
|
async def pty(cmd: str = "/bin/bash",
|
|
args: list[str] | None = None,
|
|
cols: int = 80,
|
|
rows: int = 24,
|
|
envs: dict[str, str] | None = None,
|
|
cwd: str | None = None) -> AsyncIterator[AsyncPtySession]
|
|
```
|
|
|
|
Open an async interactive PTY session backed by a WebSocket.
|
|
|
|
Use as an async context manager and async iterate over
|
|
:class:`PtyEvent` objects::
|
|
|
|
async with capsule.pty() as term:
|
|
await term.write(b"echo hello\n")
|
|
async for event in term:
|
|
if event.type == "output":
|
|
print(event.data.decode())
|
|
|
|
**Arguments**:
|
|
|
|
- `cmd` _str_ - Command to run inside the PTY. Defaults to
|
|
``"/bin/bash"``.
|
|
- `args` _list[str] | None_ - Additional arguments for ``cmd``.
|
|
- `cols` _int_ - Initial terminal column count. Defaults to ``80``.
|
|
- `rows` _int_ - Initial terminal row count. Defaults to ``24``.
|
|
- `envs` _dict[str, str] | None_ - Additional environment variables
|
|
to inject into the process.
|
|
- `cwd` _str | None_ - Working directory for the process.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `AsyncPtySession` - An interactive async PTY session.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.pty_connect"></a>
|
|
|
|
#### pty\_connect
|
|
|
|
```python
|
|
@asynccontextmanager
|
|
async def pty_connect(tag: str) -> AsyncIterator[AsyncPtySession]
|
|
```
|
|
|
|
Reconnect to an existing PTY session by tag.
|
|
|
|
**Arguments**:
|
|
|
|
- `tag` _str_ - Session tag returned in the ``started`` PTY event.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `AsyncPtySession` - The reconnected async PTY session.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.get_url"></a>
|
|
|
|
#### get\_url
|
|
|
|
```python
|
|
def get_url(port: int) -> str
|
|
```
|
|
|
|
Get the proxy URL for a port exposed inside this capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `port` _int_ - Port number to proxy.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `str` - A ``wss://`` (or ``ws://``) URL that proxies to the given
|
|
port inside the capsule.
|
|
|
|
<a id="wrenn.async_capsule.AsyncCapsule.create_snapshot"></a>
|
|
|
|
#### create\_snapshot
|
|
|
|
```python
|
|
async def create_snapshot(name: str | None = None,
|
|
overwrite: bool = False) -> Template
|
|
```
|
|
|
|
Create a snapshot template from this capsule's current state.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` _str | None_ - Name for the snapshot template. Auto-generated
|
|
if not provided.
|
|
- `overwrite` _bool_ - If ``True``, overwrite an existing template with
|
|
the same name. Defaults to ``False``.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `Template` - The created snapshot template.
|
|
|
|
<a id="wrenn.pty"></a>
|
|
|
|
# wrenn.pty
|
|
|
|
<a id="wrenn.pty.PtySession"></a>
|
|
|
|
## PtySession Objects
|
|
|
|
```python
|
|
class PtySession()
|
|
```
|
|
|
|
Interactive PTY session backed by a WebSocket.
|
|
|
|
Use as a context manager and iterate over events::
|
|
|
|
with sb.pty(cmd="/bin/bash") as term:
|
|
term.write(b"ls -la\n")
|
|
for event in term:
|
|
if event.type == "output":
|
|
sys.stdout.buffer.write(event.data)
|
|
elif event.type == "exit":
|
|
break
|
|
|
|
<a id="wrenn.pty.PtySession.tag"></a>
|
|
|
|
#### tag
|
|
|
|
```python
|
|
@property
|
|
def tag() -> str | None
|
|
```
|
|
|
|
Session tag. Available after the ``started`` event.
|
|
|
|
<a id="wrenn.pty.PtySession.pid"></a>
|
|
|
|
#### pid
|
|
|
|
```python
|
|
@property
|
|
def pid() -> int | None
|
|
```
|
|
|
|
Process PID. Available after the ``started`` event.
|
|
|
|
<a id="wrenn.pty.PtySession.write"></a>
|
|
|
|
#### write
|
|
|
|
```python
|
|
def write(data: bytes) -> None
|
|
```
|
|
|
|
Send raw bytes to the PTY stdin.
|
|
|
|
**Arguments**:
|
|
|
|
- `data` - Raw bytes to send. Base64-encoded internally.
|
|
|
|
<a id="wrenn.pty.PtySession.resize"></a>
|
|
|
|
#### resize
|
|
|
|
```python
|
|
def resize(cols: int, rows: int) -> None
|
|
```
|
|
|
|
Resize the PTY terminal.
|
|
|
|
**Arguments**:
|
|
|
|
- `cols` - New column count. Must be > 0.
|
|
- `rows` - New row count. Must be > 0.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `ValueError` - If cols or rows is 0.
|
|
|
|
<a id="wrenn.pty.PtySession.kill"></a>
|
|
|
|
#### kill
|
|
|
|
```python
|
|
def kill() -> None
|
|
```
|
|
|
|
Send SIGKILL to the PTY process.
|
|
|
|
<a id="wrenn.pty.AsyncPtySession"></a>
|
|
|
|
## AsyncPtySession Objects
|
|
|
|
```python
|
|
class AsyncPtySession()
|
|
```
|
|
|
|
Async interactive PTY session backed by a WebSocket.
|
|
|
|
Use as an async context manager and async iterate over events::
|
|
|
|
async with sb.pty(cmd="/bin/bash") as term:
|
|
await term.write(b"ls -la\n")
|
|
async for event in term:
|
|
if event.type == "output":
|
|
sys.stdout.buffer.write(event.data)
|
|
elif event.type == "exit":
|
|
break
|
|
|
|
<a id="wrenn.pty.AsyncPtySession.tag"></a>
|
|
|
|
#### tag
|
|
|
|
```python
|
|
@property
|
|
def tag() -> str | None
|
|
```
|
|
|
|
Session tag. Available after the ``started`` event.
|
|
|
|
<a id="wrenn.pty.AsyncPtySession.pid"></a>
|
|
|
|
#### pid
|
|
|
|
```python
|
|
@property
|
|
def pid() -> int | None
|
|
```
|
|
|
|
Process PID. Available after the ``started`` event.
|
|
|
|
<a id="wrenn.pty.AsyncPtySession.write"></a>
|
|
|
|
#### write
|
|
|
|
```python
|
|
async def write(data: bytes) -> None
|
|
```
|
|
|
|
Send raw bytes to the PTY stdin.
|
|
|
|
**Arguments**:
|
|
|
|
- `data` - Raw bytes to send. Base64-encoded internally.
|
|
|
|
<a id="wrenn.pty.AsyncPtySession.resize"></a>
|
|
|
|
#### resize
|
|
|
|
```python
|
|
async def resize(cols: int, rows: int) -> None
|
|
```
|
|
|
|
Resize the PTY terminal.
|
|
|
|
**Arguments**:
|
|
|
|
- `cols` - New column count. Must be > 0.
|
|
- `rows` - New row count. Must be > 0.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `ValueError` - If cols or rows is 0.
|
|
|
|
<a id="wrenn.pty.AsyncPtySession.kill"></a>
|
|
|
|
#### kill
|
|
|
|
```python
|
|
async def kill() -> None
|
|
```
|
|
|
|
Send SIGKILL to the PTY process.
|
|
|
|
<a id="wrenn.models._generated"></a>
|
|
|
|
# wrenn.models.\_generated
|
|
|
|
<a id="wrenn.models._generated.Peaks"></a>
|
|
|
|
## Peaks Objects
|
|
|
|
```python
|
|
class Peaks(BaseModel)
|
|
```
|
|
|
|
Maximum values over the last 30 days.
|
|
|
|
<a id="wrenn.models._generated.Series"></a>
|
|
|
|
## Series Objects
|
|
|
|
```python
|
|
class Series(BaseModel)
|
|
```
|
|
|
|
Parallel arrays for chart rendering.
|
|
|
|
<a id="wrenn.models._generated.Encoding"></a>
|
|
|
|
## Encoding Objects
|
|
|
|
```python
|
|
class Encoding(StrEnum)
|
|
```
|
|
|
|
Output encoding. "base64" when stdout/stderr contain binary data.
|
|
|
|
<a id="wrenn.models._generated.Type2"></a>
|
|
|
|
## Type2 Objects
|
|
|
|
```python
|
|
class Type2(StrEnum)
|
|
```
|
|
|
|
Host type. Regular hosts are shared; BYOC hosts belong to a team.
|
|
|
|
<a id="wrenn.models"></a>
|
|
|
|
# wrenn.models
|
|
|
|
<a id="wrenn.capsule"></a>
|
|
|
|
# wrenn.capsule
|
|
|
|
<a id="wrenn.capsule.Capsule"></a>
|
|
|
|
## Capsule Objects
|
|
|
|
```python
|
|
class Capsule()
|
|
```
|
|
|
|
A Wrenn capsule (sandbox) with e2b-compatible interface.
|
|
|
|
Create directly::
|
|
|
|
capsule = Capsule(api_key="wrn_...")
|
|
capsule = Capsule(template="minimal") # reads WRENN_API_KEY env
|
|
|
|
Or via classmethod::
|
|
|
|
capsule = Capsule.create(template="minimal")
|
|
|
|
Use as context manager for automatic cleanup::
|
|
|
|
with Capsule() as capsule:
|
|
capsule.commands.run("echo hello")
|
|
|
|
<a id="wrenn.capsule.Capsule.__init__"></a>
|
|
|
|
#### \_\_init\_\_
|
|
|
|
```python
|
|
def __init__(template: str | None = None,
|
|
vcpus: int | None = None,
|
|
memory_mb: int | None = None,
|
|
timeout: int | None = None,
|
|
*,
|
|
wait: bool = False,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None,
|
|
_capsule_id: str | None = None,
|
|
_client: WrennClient | None = None,
|
|
_info: CapsuleModel | None = None) -> None
|
|
```
|
|
|
|
Create and start a new capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `template` _str | None_ - Template name to boot from. Defaults to
|
|
the server-side default (``"minimal"``).
|
|
- `vcpus` _int | None_ - Number of virtual CPUs. Defaults to the
|
|
server-side default.
|
|
- `memory_mb` _int | None_ - Memory in MiB. Defaults to the
|
|
server-side default.
|
|
- `timeout` _int | None_ - Inactivity TTL in seconds before the capsule
|
|
is auto-paused. ``0`` disables auto-pause.
|
|
- `wait` _bool_ - If ``True``, block until the capsule status is
|
|
``running`` before returning.
|
|
- `api_key` _str | None_ - Wrenn API key (``wrn_...``). Falls back to
|
|
the ``WRENN_API_KEY`` environment variable.
|
|
- `base_url` _str | None_ - Wrenn API base URL. Falls back to
|
|
``WRENN_BASE_URL`` or the default production endpoint.
|
|
|
|
<a id="wrenn.capsule.Capsule.capsule_id"></a>
|
|
|
|
#### capsule\_id
|
|
|
|
```python
|
|
@property
|
|
def capsule_id() -> str
|
|
```
|
|
|
|
The capsule's unique identifier.
|
|
|
|
**Returns**:
|
|
|
|
- `str` - Capsule ID assigned by the Wrenn API.
|
|
|
|
<a id="wrenn.capsule.Capsule.info"></a>
|
|
|
|
#### info
|
|
|
|
```python
|
|
@property
|
|
def info() -> CapsuleModel | None
|
|
```
|
|
|
|
Cached capsule metadata from the last API call.
|
|
|
|
**Returns**:
|
|
|
|
CapsuleModel | None: The last-fetched capsule model, or ``None``
|
|
if the capsule was connected without an initial fetch.
|
|
|
|
<a id="wrenn.capsule.Capsule.create"></a>
|
|
|
|
#### create
|
|
|
|
```python
|
|
@classmethod
|
|
def create(cls,
|
|
template: str | None = None,
|
|
vcpus: int | None = None,
|
|
memory_mb: int | None = None,
|
|
timeout: int | None = None,
|
|
*,
|
|
wait: bool = False,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None) -> Capsule
|
|
```
|
|
|
|
Create a new capsule.
|
|
|
|
Equivalent to calling ``Capsule(...)`` directly.
|
|
|
|
**Arguments**:
|
|
|
|
- `template` _str | None_ - Template name to boot from.
|
|
- `vcpus` _int | None_ - Number of virtual CPUs.
|
|
- `memory_mb` _int | None_ - Memory in MiB.
|
|
- `timeout` _int | None_ - Inactivity TTL in seconds before auto-pause.
|
|
- `wait` _bool_ - Block until the capsule reaches ``running`` status.
|
|
- `api_key` _str | None_ - Wrenn API key. Falls back to
|
|
``WRENN_API_KEY`` env var.
|
|
- `base_url` _str | None_ - API base URL override.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `Capsule` - A new capsule instance.
|
|
|
|
<a id="wrenn.capsule.Capsule.connect"></a>
|
|
|
|
#### connect
|
|
|
|
```python
|
|
@classmethod
|
|
def connect(cls,
|
|
capsule_id: str,
|
|
*,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None) -> Capsule
|
|
```
|
|
|
|
Connect to an existing capsule, resuming it if paused.
|
|
|
|
**Arguments**:
|
|
|
|
- `capsule_id` _str_ - ID of the capsule to connect to.
|
|
- `api_key` _str | None_ - Wrenn API key. Falls back to
|
|
``WRENN_API_KEY`` env var.
|
|
- `base_url` _str | None_ - API base URL override.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `Capsule` - A capsule instance bound to the existing capsule.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `WrennNotFoundError` - If no capsule with the given ID exists.
|
|
|
|
<a id="wrenn.capsule.Capsule.ping"></a>
|
|
|
|
#### ping
|
|
|
|
```python
|
|
def ping() -> None
|
|
```
|
|
|
|
Reset the capsule inactivity timer.
|
|
|
|
Call this to prevent the capsule from being auto-paused when the
|
|
inactivity TTL is set.
|
|
|
|
<a id="wrenn.capsule.Capsule.wait_ready"></a>
|
|
|
|
#### wait\_ready
|
|
|
|
```python
|
|
def wait_ready(timeout: float = 30) -> None
|
|
```
|
|
|
|
Block until the capsule status is ``running``.
|
|
|
|
Polling interval adapts to the current transient status:
|
|
0.5 s for starting/resuming, 2 s for pausing, 1 s for stopping.
|
|
|
|
**Arguments**:
|
|
|
|
- `timeout` _float_ - Maximum seconds to wait. Defaults to ``30``.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `TimeoutError` - If the capsule does not reach ``running`` state
|
|
within ``timeout`` seconds.
|
|
- `RuntimeError` - If the capsule enters an error, stopped, or paused
|
|
state while waiting.
|
|
|
|
<a id="wrenn.capsule.Capsule.is_running"></a>
|
|
|
|
#### is\_running
|
|
|
|
```python
|
|
def is_running() -> bool
|
|
```
|
|
|
|
Check whether the capsule is currently running.
|
|
|
|
Makes a live API call to fetch current status.
|
|
|
|
**Returns**:
|
|
|
|
- `bool` - ``True`` if the capsule status is ``running``.
|
|
|
|
<a id="wrenn.capsule.Capsule.list"></a>
|
|
|
|
#### list
|
|
|
|
```python
|
|
@classmethod
|
|
def list(cls,
|
|
*,
|
|
api_key: str | None = None,
|
|
base_url: str | None = None) -> list[CapsuleModel]
|
|
```
|
|
|
|
List all capsules belonging to the team.
|
|
|
|
**Arguments**:
|
|
|
|
- `api_key` _str | None_ - Wrenn API key. Falls back to
|
|
``WRENN_API_KEY`` env var.
|
|
- `base_url` _str | None_ - API base URL override.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `list[CapsuleModel]` - All capsules for the authenticated team.
|
|
|
|
<a id="wrenn.capsule.Capsule.pty"></a>
|
|
|
|
#### pty
|
|
|
|
```python
|
|
@contextmanager
|
|
def pty(cmd: str = "/bin/bash",
|
|
args: list[str] | None = None,
|
|
cols: int = 80,
|
|
rows: int = 24,
|
|
envs: dict[str, str] | None = None,
|
|
cwd: str | None = None) -> Iterator[PtySession]
|
|
```
|
|
|
|
Open an interactive PTY session backed by a WebSocket.
|
|
|
|
Use as a context manager and iterate over :class:`PtyEvent` objects::
|
|
|
|
with capsule.pty() as term:
|
|
term.write(b"echo hello\n")
|
|
for event in term:
|
|
if event.type == "output":
|
|
print(event.data.decode())
|
|
|
|
**Arguments**:
|
|
|
|
- `cmd` _str_ - Command to run inside the PTY. Defaults to
|
|
``"/bin/bash"``.
|
|
- `args` _list[str] | None_ - Additional arguments for ``cmd``.
|
|
- `cols` _int_ - Initial terminal column count. Defaults to ``80``.
|
|
- `rows` _int_ - Initial terminal row count. Defaults to ``24``.
|
|
- `envs` _dict[str, str] | None_ - Additional environment variables to
|
|
inject into the process.
|
|
- `cwd` _str | None_ - Working directory for the process.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `PtySession` - An interactive PTY session.
|
|
|
|
<a id="wrenn.capsule.Capsule.pty_connect"></a>
|
|
|
|
#### pty\_connect
|
|
|
|
```python
|
|
@contextmanager
|
|
def pty_connect(tag: str) -> Iterator[PtySession]
|
|
```
|
|
|
|
Reconnect to an existing PTY session by tag.
|
|
|
|
**Arguments**:
|
|
|
|
- `tag` _str_ - Session tag returned in the ``started`` PTY event.
|
|
|
|
|
|
**Yields**:
|
|
|
|
- `PtySession` - The reconnected PTY session.
|
|
|
|
<a id="wrenn.capsule.Capsule.get_url"></a>
|
|
|
|
#### get\_url
|
|
|
|
```python
|
|
def get_url(port: int) -> str
|
|
```
|
|
|
|
Get the proxy URL for a port exposed inside this capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `port` _int_ - Port number to proxy.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `str` - A ``wss://`` (or ``ws://``) URL that proxies to the given
|
|
port inside the capsule.
|
|
|
|
<a id="wrenn.capsule.Capsule.create_snapshot"></a>
|
|
|
|
#### create\_snapshot
|
|
|
|
```python
|
|
def create_snapshot(name: str | None = None,
|
|
overwrite: bool = False) -> Template
|
|
```
|
|
|
|
Create a snapshot template from this capsule's current state.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` _str | None_ - Name for the snapshot template. Auto-generated
|
|
if not provided.
|
|
- `overwrite` _bool_ - If ``True``, overwrite an existing template with
|
|
the same name. Defaults to ``False``.
|
|
|
|
|
|
**Returns**:
|
|
|
|
- `Template` - The created snapshot template.
|
|
|
|
<a id="wrenn._config"></a>
|
|
|
|
# wrenn.\_config
|
|
|
|
<a id="wrenn._git._auth"></a>
|
|
|
|
# wrenn.\_git.\_auth
|
|
|
|
<a id="wrenn._git._auth.embed_credentials"></a>
|
|
|
|
#### embed\_credentials
|
|
|
|
```python
|
|
def embed_credentials(url: str, username: str, password: str) -> str
|
|
```
|
|
|
|
Embed HTTP(S) credentials into a git URL.
|
|
|
|
**Arguments**:
|
|
|
|
- `url` - Git repository URL.
|
|
- `username` - Username for authentication.
|
|
- `password` - Password or personal access token.
|
|
|
|
|
|
**Returns**:
|
|
|
|
URL with ``username:password@`` embedded in the netloc.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `ValueError` - If the URL scheme is not ``http`` or ``https``.
|
|
|
|
<a id="wrenn._git._auth.strip_credentials"></a>
|
|
|
|
#### strip\_credentials
|
|
|
|
```python
|
|
def strip_credentials(url: str) -> str
|
|
```
|
|
|
|
Remove embedded credentials from a git URL.
|
|
|
|
**Arguments**:
|
|
|
|
- `url` - Git repository URL, possibly with credentials.
|
|
|
|
|
|
**Returns**:
|
|
|
|
URL with credentials removed. Non-HTTP(S) URLs are returned
|
|
unchanged.
|
|
|
|
<a id="wrenn._git._auth.is_auth_error"></a>
|
|
|
|
#### is\_auth\_error
|
|
|
|
```python
|
|
def is_auth_error(stderr: str) -> bool
|
|
```
|
|
|
|
Check whether git stderr indicates an authentication failure.
|
|
|
|
**Arguments**:
|
|
|
|
- `stderr` - Combined stderr output from a git command.
|
|
|
|
|
|
**Returns**:
|
|
|
|
``True`` if any known auth-failure pattern is found.
|
|
|
|
<a id="wrenn._git._auth.build_credential_approve_cmd"></a>
|
|
|
|
#### build\_credential\_approve\_cmd
|
|
|
|
```python
|
|
def build_credential_approve_cmd(username: str,
|
|
password: str,
|
|
host: str = "github.com",
|
|
protocol: str = "https") -> str
|
|
```
|
|
|
|
Build a shell command that pipes credentials into ``git credential approve``.
|
|
|
|
**Arguments**:
|
|
|
|
- `username` - Git username.
|
|
- `password` - Password or personal access token.
|
|
- `host` - Target host. Defaults to ``"github.com"``.
|
|
- `protocol` - Protocol. Defaults to ``"https"``.
|
|
|
|
|
|
**Returns**:
|
|
|
|
A shell command string safe to pass to ``commands.run()``.
|
|
|
|
<a id="wrenn._git._cmd"></a>
|
|
|
|
# wrenn.\_git.\_cmd
|
|
|
|
Pure functions that build git argument lists and parse git output.
|
|
|
|
No I/O, no network, no imports from ``wrenn``. Every ``build_*`` function
|
|
returns a ``list[str]`` suitable for ``shlex.join()``. Every ``parse_*``
|
|
function takes raw stdout and returns a typed structure.
|
|
|
|
<a id="wrenn._git._cmd.FileStatus"></a>
|
|
|
|
## FileStatus Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class FileStatus()
|
|
```
|
|
|
|
A single entry from ``git status --porcelain=v1``.
|
|
|
|
**Attributes**:
|
|
|
|
- `path` _str_ - File path relative to the repository root.
|
|
- `index_status` _str_ - Index (staged) status character.
|
|
- `work_tree_status` _str_ - Working-tree status character.
|
|
- `renamed_from` _str | None_ - Original path when status is a rename.
|
|
|
|
<a id="wrenn._git._cmd.FileStatus.staged"></a>
|
|
|
|
#### staged
|
|
|
|
```python
|
|
@property
|
|
def staged() -> bool
|
|
```
|
|
|
|
Whether the change is staged in the index.
|
|
|
|
<a id="wrenn._git._cmd.FileStatus.status"></a>
|
|
|
|
#### status
|
|
|
|
```python
|
|
@property
|
|
def status() -> str
|
|
```
|
|
|
|
Normalized human-readable status label.
|
|
|
|
<a id="wrenn._git._cmd.GitStatus"></a>
|
|
|
|
## GitStatus Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class GitStatus()
|
|
```
|
|
|
|
Parsed output of ``git status --porcelain=v1 --branch``.
|
|
|
|
**Attributes**:
|
|
|
|
- `branch` _str | None_ - Current branch name, or ``None`` if detached.
|
|
- `upstream` _str | None_ - Upstream tracking branch.
|
|
- `ahead` _int_ - Commits ahead of upstream.
|
|
- `behind` _int_ - Commits behind upstream.
|
|
- `detached` _bool_ - Whether HEAD is detached.
|
|
- `files` _list[FileStatus]_ - Per-file status entries.
|
|
|
|
<a id="wrenn._git._cmd.GitStatus.is_clean"></a>
|
|
|
|
#### is\_clean
|
|
|
|
```python
|
|
@property
|
|
def is_clean() -> bool
|
|
```
|
|
|
|
``True`` when there are no changed or untracked files.
|
|
|
|
<a id="wrenn._git._cmd.GitStatus.has_staged"></a>
|
|
|
|
#### has\_staged
|
|
|
|
```python
|
|
@property
|
|
def has_staged() -> bool
|
|
```
|
|
|
|
``True`` when at least one file has staged changes.
|
|
|
|
<a id="wrenn._git._cmd.GitStatus.has_untracked"></a>
|
|
|
|
#### has\_untracked
|
|
|
|
```python
|
|
@property
|
|
def has_untracked() -> bool
|
|
```
|
|
|
|
``True`` when at least one file is untracked.
|
|
|
|
<a id="wrenn._git._cmd.GitStatus.has_conflicts"></a>
|
|
|
|
#### has\_conflicts
|
|
|
|
```python
|
|
@property
|
|
def has_conflicts() -> bool
|
|
```
|
|
|
|
``True`` when at least one file has merge conflicts.
|
|
|
|
<a id="wrenn._git._cmd.GitBranch"></a>
|
|
|
|
## GitBranch Objects
|
|
|
|
```python
|
|
@dataclass
|
|
class GitBranch()
|
|
```
|
|
|
|
A single branch entry.
|
|
|
|
**Attributes**:
|
|
|
|
- `name` _str_ - Branch name (short ref).
|
|
- `is_current` _bool_ - Whether this is the checked-out branch.
|
|
|
|
<a id="wrenn._git._cmd.build_clone"></a>
|
|
|
|
#### build\_clone
|
|
|
|
```python
|
|
def build_clone(url: str,
|
|
dest: str | None = None,
|
|
*,
|
|
branch: str | None = None,
|
|
depth: int | None = None) -> list[str]
|
|
```
|
|
|
|
Build ``git clone`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_init"></a>
|
|
|
|
#### build\_init
|
|
|
|
```python
|
|
def build_init(path: str = ".",
|
|
*,
|
|
bare: bool = False,
|
|
initial_branch: str | None = None) -> list[str]
|
|
```
|
|
|
|
Build ``git init`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_add"></a>
|
|
|
|
#### build\_add
|
|
|
|
```python
|
|
def build_add(paths: list[str] | None = None,
|
|
*,
|
|
all: bool = False) -> list[str]
|
|
```
|
|
|
|
Build ``git add`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_commit"></a>
|
|
|
|
#### build\_commit
|
|
|
|
```python
|
|
def build_commit(message: str,
|
|
*,
|
|
allow_empty: bool = False,
|
|
author_name: str | None = None,
|
|
author_email: str | None = None) -> list[str]
|
|
```
|
|
|
|
Build ``git commit`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_push"></a>
|
|
|
|
#### build\_push
|
|
|
|
```python
|
|
def build_push(remote: str = "origin",
|
|
branch: str | None = None,
|
|
*,
|
|
force: bool = False,
|
|
set_upstream: bool = False) -> list[str]
|
|
```
|
|
|
|
Build ``git push`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_pull"></a>
|
|
|
|
#### build\_pull
|
|
|
|
```python
|
|
def build_pull(remote: str = "origin",
|
|
branch: str | None = None,
|
|
*,
|
|
rebase: bool = False,
|
|
ff_only: bool = False) -> list[str]
|
|
```
|
|
|
|
Build ``git pull`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_status"></a>
|
|
|
|
#### build\_status
|
|
|
|
```python
|
|
def build_status() -> list[str]
|
|
```
|
|
|
|
Build ``git status`` arguments for porcelain parsing.
|
|
|
|
<a id="wrenn._git._cmd.build_branches"></a>
|
|
|
|
#### build\_branches
|
|
|
|
```python
|
|
def build_branches() -> list[str]
|
|
```
|
|
|
|
Build ``git branch`` arguments for structured parsing.
|
|
|
|
<a id="wrenn._git._cmd.build_create_branch"></a>
|
|
|
|
#### build\_create\_branch
|
|
|
|
```python
|
|
def build_create_branch(name: str,
|
|
*,
|
|
start_point: str | None = None) -> list[str]
|
|
```
|
|
|
|
Build ``git checkout -b`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_checkout"></a>
|
|
|
|
#### build\_checkout
|
|
|
|
```python
|
|
def build_checkout(name: str) -> list[str]
|
|
```
|
|
|
|
Build ``git checkout`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_delete_branch"></a>
|
|
|
|
#### build\_delete\_branch
|
|
|
|
```python
|
|
def build_delete_branch(name: str, *, force: bool = False) -> list[str]
|
|
```
|
|
|
|
Build ``git branch -d/-D`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_remote_add"></a>
|
|
|
|
#### build\_remote\_add
|
|
|
|
```python
|
|
def build_remote_add(name: str, url: str, *, fetch: bool = False) -> list[str]
|
|
```
|
|
|
|
Build ``git remote add`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_remote_get_url"></a>
|
|
|
|
#### build\_remote\_get\_url
|
|
|
|
```python
|
|
def build_remote_get_url(name: str = "origin") -> list[str]
|
|
```
|
|
|
|
Build ``git remote get-url`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_remote_set_url"></a>
|
|
|
|
#### build\_remote\_set\_url
|
|
|
|
```python
|
|
def build_remote_set_url(name: str, url: str) -> list[str]
|
|
```
|
|
|
|
Build ``git remote set-url`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_reset"></a>
|
|
|
|
#### build\_reset
|
|
|
|
```python
|
|
def build_reset(*,
|
|
mode: str | None = None,
|
|
ref: str | None = None,
|
|
paths: list[str] | None = None) -> list[str]
|
|
```
|
|
|
|
Build ``git reset`` arguments.
|
|
|
|
**Arguments**:
|
|
|
|
- `mode` - Reset mode (``soft``, ``mixed``, ``hard``, ``merge``, ``keep``).
|
|
- `ref` - Commit, branch, or ref to reset to.
|
|
- `paths` - Paths to reset (mutually exclusive with ``mode``).
|
|
|
|
<a id="wrenn._git._cmd.build_restore"></a>
|
|
|
|
#### build\_restore
|
|
|
|
```python
|
|
def build_restore(paths: list[str],
|
|
*,
|
|
staged: bool = False,
|
|
worktree: bool = False,
|
|
source: str | None = None) -> list[str]
|
|
```
|
|
|
|
Build ``git restore`` arguments.
|
|
|
|
**Arguments**:
|
|
|
|
- `paths` - Paths to restore.
|
|
- `staged` - Restore the index (unstage).
|
|
- `worktree` - Restore working-tree files.
|
|
- `source` - Commit or ref to restore from.
|
|
|
|
<a id="wrenn._git._cmd.build_config_set"></a>
|
|
|
|
#### build\_config\_set
|
|
|
|
```python
|
|
def build_config_set(key: str,
|
|
value: str,
|
|
*,
|
|
scope: str = "local",
|
|
repo_path: str | None = None) -> list[str]
|
|
```
|
|
|
|
Build ``git config`` set arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_config_get"></a>
|
|
|
|
#### build\_config\_get
|
|
|
|
```python
|
|
def build_config_get(key: str,
|
|
*,
|
|
scope: str = "local",
|
|
repo_path: str | None = None) -> list[str]
|
|
```
|
|
|
|
Build ``git config --get`` arguments.
|
|
|
|
<a id="wrenn._git._cmd.build_has_upstream"></a>
|
|
|
|
#### build\_has\_upstream
|
|
|
|
```python
|
|
def build_has_upstream() -> list[str]
|
|
```
|
|
|
|
Build arguments to check if current branch has upstream tracking.
|
|
|
|
<a id="wrenn._git._cmd.parse_status"></a>
|
|
|
|
#### parse\_status
|
|
|
|
```python
|
|
def parse_status(stdout: str) -> GitStatus
|
|
```
|
|
|
|
Parse ``git status --porcelain=v1 --branch`` output.
|
|
|
|
**Arguments**:
|
|
|
|
- `stdout` - Raw stdout from the git status command.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Parsed :class:`GitStatus`.
|
|
|
|
<a id="wrenn._git._cmd.parse_branches"></a>
|
|
|
|
#### parse\_branches
|
|
|
|
```python
|
|
def parse_branches(stdout: str) -> list[GitBranch]
|
|
```
|
|
|
|
Parse ``git branch --format=%(refname:short)\t%(HEAD)`` output.
|
|
|
|
**Arguments**:
|
|
|
|
- `stdout` - Raw stdout from the git branch command.
|
|
|
|
|
|
**Returns**:
|
|
|
|
List of :class:`GitBranch`.
|
|
|
|
<a id="wrenn._git.exceptions"></a>
|
|
|
|
# wrenn.\_git.exceptions
|
|
|
|
<a id="wrenn._git.exceptions.GitError"></a>
|
|
|
|
## GitError Objects
|
|
|
|
```python
|
|
class GitError(Exception)
|
|
```
|
|
|
|
Base exception for all git operations inside a capsule.
|
|
|
|
Not a subclass of :class:`WrennError` because git errors originate
|
|
from a process exit code, not an HTTP response.
|
|
|
|
**Attributes**:
|
|
|
|
- `message` _str_ - Human-readable error description.
|
|
- `stderr` _str_ - Raw stderr output from the git process.
|
|
- `exit_code` _int_ - Process exit code.
|
|
|
|
<a id="wrenn._git.exceptions.GitCommandError"></a>
|
|
|
|
## GitCommandError Objects
|
|
|
|
```python
|
|
class GitCommandError(GitError)
|
|
```
|
|
|
|
A git command exited with a non-zero exit code.
|
|
|
|
<a id="wrenn._git.exceptions.GitAuthError"></a>
|
|
|
|
## GitAuthError Objects
|
|
|
|
```python
|
|
class GitAuthError(GitError)
|
|
```
|
|
|
|
Authentication failed when communicating with a remote.
|
|
|
|
<a id="wrenn._git"></a>
|
|
|
|
# wrenn.\_git
|
|
|
|
Git operations inside a Wrenn capsule.
|
|
|
|
Provides :class:`Git` (sync) and :class:`AsyncGit` (async) interfaces
|
|
accessed via ``capsule.git``. All operations execute the real ``git``
|
|
binary inside the capsule through :class:`~wrenn.commands.Commands`.
|
|
|
|
<a id="wrenn._git.Git"></a>
|
|
|
|
## Git Objects
|
|
|
|
```python
|
|
class Git()
|
|
```
|
|
|
|
Sync git interface. Accessed via ``capsule.git``.
|
|
|
|
Executes the real ``git`` binary inside the capsule through
|
|
:meth:`Commands.run`. Methods raise :class:`GitCommandError` (or
|
|
:class:`GitAuthError`) on non-zero exit codes.
|
|
|
|
<a id="wrenn._git.Git.clone"></a>
|
|
|
|
#### clone
|
|
|
|
```python
|
|
def clone(url: str,
|
|
dest: str | None = None,
|
|
*,
|
|
branch: str | None = None,
|
|
depth: int | None = None,
|
|
username: str | None = None,
|
|
password: str | None = None,
|
|
dangerously_store_credentials: bool = False,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 300) -> CommandResult
|
|
```
|
|
|
|
Clone a remote repository into the capsule.
|
|
|
|
**Arguments**:
|
|
|
|
- `url` - Remote repository URL.
|
|
- `dest` - Destination path. Defaults to the repository name
|
|
derived from the URL.
|
|
- `branch` - Branch or tag to check out.
|
|
- `depth` - Create a shallow clone with this many commits.
|
|
- `username` - Username for HTTP(S) authentication.
|
|
- `password` - Password or token for HTTP(S) authentication.
|
|
- `dangerously_store_credentials` - If ``True``, leave credentials
|
|
embedded in the remote URL after cloning.
|
|
- `cwd` - Working directory for the command.
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds. Defaults to ``300``.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result with stdout, stderr, exit_code, and duration.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitAuthError` - If the remote rejected authentication.
|
|
- `GitCommandError` - If clone failed for another reason.
|
|
- `ValueError` - If *password* is provided without *username*.
|
|
|
|
<a id="wrenn._git.Git.init"></a>
|
|
|
|
#### init
|
|
|
|
```python
|
|
def init(path: str = ".",
|
|
*,
|
|
bare: bool = False,
|
|
initial_branch: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Initialize a new git repository.
|
|
|
|
**Arguments**:
|
|
|
|
- `path` - Destination path for the repository.
|
|
- `bare` - Create a bare repository.
|
|
- `initial_branch` - Name for the initial branch (e.g. ``"main"``).
|
|
- `cwd` - Working directory for the command.
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If init failed.
|
|
|
|
<a id="wrenn._git.Git.add"></a>
|
|
|
|
#### add
|
|
|
|
```python
|
|
def add(paths: list[str] | None = None,
|
|
*,
|
|
all: bool = False,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Stage files for commit.
|
|
|
|
**Arguments**:
|
|
|
|
- `paths` - Specific files to stage. If ``None``, stages the
|
|
current directory (or all with ``all=True``).
|
|
- `all` - Stage all changes including untracked files.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If add failed.
|
|
|
|
<a id="wrenn._git.Git.commit"></a>
|
|
|
|
#### commit
|
|
|
|
```python
|
|
def commit(message: str,
|
|
*,
|
|
allow_empty: bool = False,
|
|
author_name: str | None = None,
|
|
author_email: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Create a commit.
|
|
|
|
**Arguments**:
|
|
|
|
- `message` - Commit message.
|
|
- `allow_empty` - Allow creating a commit with no changes.
|
|
- `author_name` - Override the commit author name.
|
|
- `author_email` - Override the commit author email.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If commit failed.
|
|
|
|
<a id="wrenn._git.Git.push"></a>
|
|
|
|
#### push
|
|
|
|
```python
|
|
def push(remote: str = "origin",
|
|
branch: str | None = None,
|
|
*,
|
|
force: bool = False,
|
|
set_upstream: bool = False,
|
|
username: str | None = None,
|
|
password: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 60) -> CommandResult
|
|
```
|
|
|
|
Push commits to a remote.
|
|
|
|
**Arguments**:
|
|
|
|
- `remote` - Remote name. Defaults to ``"origin"``.
|
|
- `branch` - Branch to push. Defaults to the current branch.
|
|
- `force` - Force-push.
|
|
- `set_upstream` - Set upstream tracking reference.
|
|
- `username` - Username for HTTP(S) authentication.
|
|
- `password` - Password or token for HTTP(S) authentication.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitAuthError` - If authentication failed.
|
|
- `GitCommandError` - If push failed.
|
|
|
|
<a id="wrenn._git.Git.pull"></a>
|
|
|
|
#### pull
|
|
|
|
```python
|
|
def pull(remote: str = "origin",
|
|
branch: str | None = None,
|
|
*,
|
|
rebase: bool = False,
|
|
ff_only: bool = False,
|
|
username: str | None = None,
|
|
password: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 60) -> CommandResult
|
|
```
|
|
|
|
Pull changes from a remote.
|
|
|
|
**Arguments**:
|
|
|
|
- `remote` - Remote name. Defaults to ``"origin"``.
|
|
- `branch` - Branch to pull.
|
|
- `rebase` - Rebase instead of merge.
|
|
- `ff_only` - Only allow fast-forward merges.
|
|
- `username` - Username for HTTP(S) authentication.
|
|
- `password` - Password or token for HTTP(S) authentication.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitAuthError` - If authentication failed.
|
|
- `GitCommandError` - If pull failed.
|
|
|
|
<a id="wrenn._git.Git.status"></a>
|
|
|
|
#### status
|
|
|
|
```python
|
|
def status(*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> GitStatus
|
|
```
|
|
|
|
Get repository status.
|
|
|
|
**Arguments**:
|
|
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Parsed :class:`GitStatus` with branch info and file changes.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If the command failed.
|
|
|
|
<a id="wrenn._git.Git.branches"></a>
|
|
|
|
#### branches
|
|
|
|
```python
|
|
def branches(*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> list[GitBranch]
|
|
```
|
|
|
|
List local branches.
|
|
|
|
**Arguments**:
|
|
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
List of :class:`GitBranch`.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If the command failed.
|
|
|
|
<a id="wrenn._git.Git.create_branch"></a>
|
|
|
|
#### create\_branch
|
|
|
|
```python
|
|
def create_branch(name: str,
|
|
*,
|
|
start_point: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Create and check out a new branch.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` - Branch name.
|
|
- `start_point` - Commit or ref to branch from.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If the command failed.
|
|
|
|
<a id="wrenn._git.Git.checkout_branch"></a>
|
|
|
|
#### checkout\_branch
|
|
|
|
```python
|
|
def checkout_branch(name: str,
|
|
*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Check out an existing branch.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` - Branch name.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If the command failed.
|
|
|
|
<a id="wrenn._git.Git.delete_branch"></a>
|
|
|
|
#### delete\_branch
|
|
|
|
```python
|
|
def delete_branch(name: str,
|
|
*,
|
|
force: bool = False,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Delete a branch.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` - Branch name.
|
|
- `force` - Force-delete with ``-D``.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If the command failed.
|
|
|
|
<a id="wrenn._git.Git.remote_add"></a>
|
|
|
|
#### remote\_add
|
|
|
|
```python
|
|
def remote_add(name: str,
|
|
url: str,
|
|
*,
|
|
fetch: bool = False,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Add a remote.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` - Remote name (e.g. ``"origin"``).
|
|
- `url` - Remote URL.
|
|
- `fetch` - Fetch after adding.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If the command failed.
|
|
|
|
<a id="wrenn._git.Git.remote_get"></a>
|
|
|
|
#### remote\_get
|
|
|
|
```python
|
|
def remote_get(name: str = "origin",
|
|
*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> str | None
|
|
```
|
|
|
|
Get the URL of a remote.
|
|
|
|
Returns ``None`` if the remote does not exist rather than raising.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` - Remote name. Defaults to ``"origin"``.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Remote URL or ``None``.
|
|
|
|
<a id="wrenn._git.Git.reset"></a>
|
|
|
|
#### reset
|
|
|
|
```python
|
|
def reset(*,
|
|
mode: str | None = None,
|
|
ref: str | None = None,
|
|
paths: list[str] | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Reset the current HEAD.
|
|
|
|
**Arguments**:
|
|
|
|
- `mode` - Reset mode (``soft``, ``mixed``, ``hard``, ``merge``,
|
|
``keep``).
|
|
- `ref` - Commit, branch, or ref to reset to.
|
|
- `paths` - Paths to reset.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If the command failed.
|
|
|
|
<a id="wrenn._git.Git.restore"></a>
|
|
|
|
#### restore
|
|
|
|
```python
|
|
def restore(paths: list[str],
|
|
*,
|
|
staged: bool = False,
|
|
worktree: bool = False,
|
|
source: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Restore working-tree files or unstage changes.
|
|
|
|
**Arguments**:
|
|
|
|
- `paths` - Paths to restore.
|
|
- `staged` - Restore the index (unstage).
|
|
- `worktree` - Restore working-tree files.
|
|
- `source` - Commit or ref to restore from.
|
|
- `cwd` - Working directory (repository root).
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If the command failed.
|
|
|
|
<a id="wrenn._git.Git.set_config"></a>
|
|
|
|
#### set\_config
|
|
|
|
```python
|
|
def set_config(key: str,
|
|
value: str,
|
|
*,
|
|
scope: str = "local",
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Set a git config value.
|
|
|
|
**Arguments**:
|
|
|
|
- `key` - Config key (e.g. ``"user.name"``).
|
|
- `value` - Config value.
|
|
- `scope` - Config scope: ``"local"``, ``"global"``, or
|
|
``"system"``.
|
|
- `cwd` - Working directory (repository root). Required when
|
|
scope is ``"local"``.
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Command result.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `GitCommandError` - If the command failed.
|
|
|
|
<a id="wrenn._git.Git.get_config"></a>
|
|
|
|
#### get\_config
|
|
|
|
```python
|
|
def get_config(key: str,
|
|
*,
|
|
scope: str = "local",
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> str | None
|
|
```
|
|
|
|
Get a git config value.
|
|
|
|
Returns ``None`` if the key is not set rather than raising.
|
|
|
|
**Arguments**:
|
|
|
|
- `key` - Config key (e.g. ``"user.name"``).
|
|
- `scope` - Config scope: ``"local"``, ``"global"``, or
|
|
``"system"``.
|
|
- `cwd` - Working directory (repository root). Required when
|
|
scope is ``"local"``.
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Returns**:
|
|
|
|
Config value or ``None``.
|
|
|
|
<a id="wrenn._git.Git.configure_user"></a>
|
|
|
|
#### configure\_user
|
|
|
|
```python
|
|
def configure_user(name: str,
|
|
email: str,
|
|
*,
|
|
scope: str = "global",
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> None
|
|
```
|
|
|
|
Configure git user name and email.
|
|
|
|
**Arguments**:
|
|
|
|
- `name` - Git user name.
|
|
- `email` - Git user email.
|
|
- `scope` - Config scope. Defaults to ``"global"``.
|
|
- `cwd` - Working directory (repository root). Required when
|
|
scope is ``"local"``.
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `ValueError` - If *name* or *email* is empty.
|
|
- `GitCommandError` - If a config command failed.
|
|
|
|
<a id="wrenn._git.Git.dangerously_authenticate"></a>
|
|
|
|
#### dangerously\_authenticate
|
|
|
|
```python
|
|
def dangerously_authenticate(username: str,
|
|
password: str,
|
|
host: str = "github.com",
|
|
protocol: str = "https",
|
|
*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> None
|
|
```
|
|
|
|
Persist git credentials via the credential store.
|
|
|
|
.. warning::
|
|
|
|
Credentials are written in plain text to the capsule
|
|
filesystem and are accessible to any process running inside
|
|
the capsule. Prefer per-operation ``username``/``password``
|
|
parameters on :meth:`clone`, :meth:`push`, and :meth:`pull`
|
|
instead.
|
|
|
|
**Arguments**:
|
|
|
|
- `username` - Git username.
|
|
- `password` - Password or personal access token.
|
|
- `host` - Target host. Defaults to ``"github.com"``.
|
|
- `protocol` - Protocol. Defaults to ``"https"``.
|
|
- `cwd` - Working directory.
|
|
- `envs` - Extra environment variables.
|
|
- `timeout` - Command timeout in seconds.
|
|
|
|
|
|
**Raises**:
|
|
|
|
- `ValueError` - If *username* or *password* is empty.
|
|
- `GitCommandError` - If a command failed.
|
|
|
|
<a id="wrenn._git.AsyncGit"></a>
|
|
|
|
## AsyncGit Objects
|
|
|
|
```python
|
|
class AsyncGit()
|
|
```
|
|
|
|
Async git interface. Accessed via ``capsule.git``.
|
|
|
|
Async mirror of :class:`Git`. See that class for full method
|
|
documentation.
|
|
|
|
<a id="wrenn._git.AsyncGit.clone"></a>
|
|
|
|
#### clone
|
|
|
|
```python
|
|
async def clone(url: str,
|
|
dest: str | None = None,
|
|
*,
|
|
branch: str | None = None,
|
|
depth: int | None = None,
|
|
username: str | None = None,
|
|
password: str | None = None,
|
|
dangerously_store_credentials: bool = False,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 300) -> CommandResult
|
|
```
|
|
|
|
Clone a remote repository into the capsule.
|
|
|
|
<a id="wrenn._git.AsyncGit.init"></a>
|
|
|
|
#### init
|
|
|
|
```python
|
|
async def init(path: str = ".",
|
|
*,
|
|
bare: bool = False,
|
|
initial_branch: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Initialize a new git repository.
|
|
|
|
<a id="wrenn._git.AsyncGit.add"></a>
|
|
|
|
#### add
|
|
|
|
```python
|
|
async def add(paths: list[str] | None = None,
|
|
*,
|
|
all: bool = False,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Stage files for commit.
|
|
|
|
<a id="wrenn._git.AsyncGit.commit"></a>
|
|
|
|
#### commit
|
|
|
|
```python
|
|
async def commit(message: str,
|
|
*,
|
|
allow_empty: bool = False,
|
|
author_name: str | None = None,
|
|
author_email: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Create a commit.
|
|
|
|
<a id="wrenn._git.AsyncGit.push"></a>
|
|
|
|
#### push
|
|
|
|
```python
|
|
async def push(remote: str = "origin",
|
|
branch: str | None = None,
|
|
*,
|
|
force: bool = False,
|
|
set_upstream: bool = False,
|
|
username: str | None = None,
|
|
password: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 60) -> CommandResult
|
|
```
|
|
|
|
Push commits to a remote.
|
|
|
|
<a id="wrenn._git.AsyncGit.pull"></a>
|
|
|
|
#### pull
|
|
|
|
```python
|
|
async def pull(remote: str = "origin",
|
|
branch: str | None = None,
|
|
*,
|
|
rebase: bool = False,
|
|
ff_only: bool = False,
|
|
username: str | None = None,
|
|
password: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 60) -> CommandResult
|
|
```
|
|
|
|
Pull changes from a remote.
|
|
|
|
<a id="wrenn._git.AsyncGit.status"></a>
|
|
|
|
#### status
|
|
|
|
```python
|
|
async def status(*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> GitStatus
|
|
```
|
|
|
|
Get repository status.
|
|
|
|
<a id="wrenn._git.AsyncGit.branches"></a>
|
|
|
|
#### branches
|
|
|
|
```python
|
|
async def branches(*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> list[GitBranch]
|
|
```
|
|
|
|
List local branches.
|
|
|
|
<a id="wrenn._git.AsyncGit.create_branch"></a>
|
|
|
|
#### create\_branch
|
|
|
|
```python
|
|
async def create_branch(name: str,
|
|
*,
|
|
start_point: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Create and check out a new branch.
|
|
|
|
<a id="wrenn._git.AsyncGit.checkout_branch"></a>
|
|
|
|
#### checkout\_branch
|
|
|
|
```python
|
|
async def checkout_branch(name: str,
|
|
*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Check out an existing branch.
|
|
|
|
<a id="wrenn._git.AsyncGit.delete_branch"></a>
|
|
|
|
#### delete\_branch
|
|
|
|
```python
|
|
async def delete_branch(name: str,
|
|
*,
|
|
force: bool = False,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Delete a branch.
|
|
|
|
<a id="wrenn._git.AsyncGit.remote_add"></a>
|
|
|
|
#### remote\_add
|
|
|
|
```python
|
|
async def remote_add(name: str,
|
|
url: str,
|
|
*,
|
|
fetch: bool = False,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Add a remote.
|
|
|
|
<a id="wrenn._git.AsyncGit.remote_get"></a>
|
|
|
|
#### remote\_get
|
|
|
|
```python
|
|
async def remote_get(name: str = "origin",
|
|
*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> str | None
|
|
```
|
|
|
|
Get the URL of a remote. Returns ``None`` if not found.
|
|
|
|
<a id="wrenn._git.AsyncGit.reset"></a>
|
|
|
|
#### reset
|
|
|
|
```python
|
|
async def reset(*,
|
|
mode: str | None = None,
|
|
ref: str | None = None,
|
|
paths: list[str] | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Reset the current HEAD.
|
|
|
|
<a id="wrenn._git.AsyncGit.restore"></a>
|
|
|
|
#### restore
|
|
|
|
```python
|
|
async def restore(paths: list[str],
|
|
*,
|
|
staged: bool = False,
|
|
worktree: bool = False,
|
|
source: str | None = None,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Restore working-tree files or unstage changes.
|
|
|
|
<a id="wrenn._git.AsyncGit.set_config"></a>
|
|
|
|
#### set\_config
|
|
|
|
```python
|
|
async def set_config(key: str,
|
|
value: str,
|
|
*,
|
|
scope: str = "local",
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> CommandResult
|
|
```
|
|
|
|
Set a git config value.
|
|
|
|
<a id="wrenn._git.AsyncGit.get_config"></a>
|
|
|
|
#### get\_config
|
|
|
|
```python
|
|
async def get_config(key: str,
|
|
*,
|
|
scope: str = "local",
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> str | None
|
|
```
|
|
|
|
Get a git config value. Returns ``None`` if not set.
|
|
|
|
<a id="wrenn._git.AsyncGit.configure_user"></a>
|
|
|
|
#### configure\_user
|
|
|
|
```python
|
|
async def configure_user(name: str,
|
|
email: str,
|
|
*,
|
|
scope: str = "global",
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> None
|
|
```
|
|
|
|
Configure git user name and email.
|
|
|
|
<a id="wrenn._git.AsyncGit.dangerously_authenticate"></a>
|
|
|
|
#### dangerously\_authenticate
|
|
|
|
```python
|
|
async def dangerously_authenticate(username: str,
|
|
password: str,
|
|
host: str = "github.com",
|
|
protocol: str = "https",
|
|
*,
|
|
cwd: str | None = None,
|
|
envs: dict[str, str] | None = None,
|
|
timeout: int | None = 30) -> None
|
|
```
|
|
|
|
Persist git credentials via the credential store.
|
|
|
|
.. warning::
|
|
|
|
Credentials are written in plain text to the capsule
|
|
filesystem. Prefer per-operation ``username``/``password``
|
|
parameters instead.
|
|
|