Fern: regenerated Python SDK (#3829)

This commit is contained in:
Stanislav Novosad
2025-10-27 16:26:37 -06:00
committed by GitHub
parent c12c047768
commit ba0b25cb4b
150 changed files with 8305 additions and 3701 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,33 +1,91 @@
# This file was auto-generated by Fern from our API Definition.
from .api_error import ApiError
from .client_wrapper import AsyncClientWrapper, BaseClientWrapper, SyncClientWrapper
from .datetime_utils import serialize_datetime
from .file import File, convert_file_dict_to_httpx_tuples, with_content_type
from .http_client import AsyncHttpClient, HttpClient
from .jsonable_encoder import jsonable_encoder
from .pydantic_utilities import (
IS_PYDANTIC_V2,
UniversalBaseModel,
UniversalRootModel,
parse_obj_as,
universal_field_validator,
universal_root_validator,
update_forward_refs,
)
from .query_encoder import encode_query
from .remove_none_from_dict import remove_none_from_dict
from .request_options import RequestOptions
from .serialization import FieldMetadata, convert_and_respect_annotation_metadata
# isort: skip_file
import typing
from importlib import import_module
if typing.TYPE_CHECKING:
from .api_error import ApiError
from .client_wrapper import AsyncClientWrapper, BaseClientWrapper, SyncClientWrapper
from .datetime_utils import serialize_datetime
from .file import File, convert_file_dict_to_httpx_tuples, with_content_type
from .http_client import AsyncHttpClient, HttpClient
from .http_response import AsyncHttpResponse, HttpResponse
from .jsonable_encoder import jsonable_encoder
from .pydantic_utilities import (
IS_PYDANTIC_V2,
UniversalBaseModel,
UniversalRootModel,
parse_obj_as,
universal_field_validator,
universal_root_validator,
update_forward_refs,
)
from .query_encoder import encode_query
from .remove_none_from_dict import remove_none_from_dict
from .request_options import RequestOptions
from .serialization import FieldMetadata, convert_and_respect_annotation_metadata
_dynamic_imports: typing.Dict[str, str] = {
"ApiError": ".api_error",
"AsyncClientWrapper": ".client_wrapper",
"AsyncHttpClient": ".http_client",
"AsyncHttpResponse": ".http_response",
"BaseClientWrapper": ".client_wrapper",
"FieldMetadata": ".serialization",
"File": ".file",
"HttpClient": ".http_client",
"HttpResponse": ".http_response",
"IS_PYDANTIC_V2": ".pydantic_utilities",
"RequestOptions": ".request_options",
"SyncClientWrapper": ".client_wrapper",
"UniversalBaseModel": ".pydantic_utilities",
"UniversalRootModel": ".pydantic_utilities",
"convert_and_respect_annotation_metadata": ".serialization",
"convert_file_dict_to_httpx_tuples": ".file",
"encode_query": ".query_encoder",
"jsonable_encoder": ".jsonable_encoder",
"parse_obj_as": ".pydantic_utilities",
"remove_none_from_dict": ".remove_none_from_dict",
"serialize_datetime": ".datetime_utils",
"universal_field_validator": ".pydantic_utilities",
"universal_root_validator": ".pydantic_utilities",
"update_forward_refs": ".pydantic_utilities",
"with_content_type": ".file",
}
def __getattr__(attr_name: str) -> typing.Any:
module_name = _dynamic_imports.get(attr_name)
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
module = import_module(module_name, __package__)
if module_name == f".{attr_name}":
return module
else:
return getattr(module, attr_name)
except ImportError as e:
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
except AttributeError as e:
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
def __dir__():
lazy_attrs = list(_dynamic_imports.keys())
return sorted(lazy_attrs)
__all__ = [
"ApiError",
"AsyncClientWrapper",
"AsyncHttpClient",
"AsyncHttpResponse",
"BaseClientWrapper",
"FieldMetadata",
"File",
"HttpClient",
"HttpResponse",
"IS_PYDANTIC_V2",
"RequestOptions",
"SyncClientWrapper",

View File

@@ -1,15 +1,23 @@
# This file was auto-generated by Fern from our API Definition.
import typing
from typing import Any, Dict, Optional
class ApiError(Exception):
status_code: typing.Optional[int]
body: typing.Any
headers: Optional[Dict[str, str]]
status_code: Optional[int]
body: Any
def __init__(self, *, status_code: typing.Optional[int] = None, body: typing.Any = None):
def __init__(
self,
*,
headers: Optional[Dict[str, str]] = None,
status_code: Optional[int] = None,
body: Any = None,
) -> None:
self.headers = headers
self.status_code = status_code
self.body = body
def __str__(self) -> str:
return f"status_code: {self.status_code}, body: {self.body}"
return f"headers: {self.headers}, status_code: {self.status_code}, body: {self.body}"

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
import typing
import httpx
from .http_client import HttpClient
from .http_client import AsyncHttpClient
from .http_client import AsyncHttpClient, HttpClient
class BaseClientWrapper:
@@ -11,26 +11,30 @@ class BaseClientWrapper:
self,
*,
api_key: typing.Optional[str] = None,
x_api_key: str,
headers: typing.Optional[typing.Dict[str, str]] = None,
base_url: str,
timeout: typing.Optional[float] = None,
):
self._api_key = api_key
self.x_api_key = x_api_key
self._headers = headers
self._base_url = base_url
self._timeout = timeout
def get_headers(self) -> typing.Dict[str, str]:
headers: typing.Dict[str, str] = {
"User-Agent": "skyvern/0.2.20",
"X-Fern-Language": "Python",
"X-Fern-SDK-Name": "skyvern",
"X-Fern-SDK-Version": "0.2.18",
"X-Fern-SDK-Version": "0.2.20",
**(self.get_custom_headers() or {}),
}
if self._api_key is not None:
headers["x-api-key"] = self._api_key
headers["x-api-key"] = self.x_api_key
return headers
def get_custom_headers(self) -> typing.Optional[typing.Dict[str, str]]:
return self._headers
def get_base_url(self) -> str:
return self._base_url
@@ -43,12 +47,12 @@ class SyncClientWrapper(BaseClientWrapper):
self,
*,
api_key: typing.Optional[str] = None,
x_api_key: str,
headers: typing.Optional[typing.Dict[str, str]] = None,
base_url: str,
timeout: typing.Optional[float] = None,
httpx_client: httpx.Client,
):
super().__init__(api_key=api_key, x_api_key=x_api_key, base_url=base_url, timeout=timeout)
super().__init__(api_key=api_key, headers=headers, base_url=base_url, timeout=timeout)
self.httpx_client = HttpClient(
httpx_client=httpx_client,
base_headers=self.get_headers,
@@ -62,12 +66,12 @@ class AsyncClientWrapper(BaseClientWrapper):
self,
*,
api_key: typing.Optional[str] = None,
x_api_key: str,
headers: typing.Optional[typing.Dict[str, str]] = None,
base_url: str,
timeout: typing.Optional[float] = None,
httpx_client: httpx.AsyncClient,
):
super().__init__(api_key=api_key, x_api_key=x_api_key, base_url=base_url, timeout=timeout)
super().__init__(api_key=api_key, headers=headers, base_url=base_url, timeout=timeout)
self.httpx_client = AsyncHttpClient(
httpx_client=httpx_client,
base_headers=self.get_headers,

View File

@@ -0,0 +1,18 @@
# This file was auto-generated by Fern from our API Definition.
from typing import Any, Dict
class ForceMultipartDict(Dict[str, Any]):
"""
A dictionary subclass that always evaluates to True in boolean contexts.
This is used to force multipart/form-data encoding in HTTP requests even when
the dictionary is empty, which would normally evaluate to False.
"""
def __bool__(self) -> bool:
return True
FORCE_MULTIPART = ForceMultipartDict()

View File

@@ -2,7 +2,6 @@
import asyncio
import email.utils
import json
import re
import time
import typing
@@ -11,12 +10,13 @@ from contextlib import asynccontextmanager, contextmanager
from random import random
import httpx
from .file import File, convert_file_dict_to_httpx_tuples
from .force_multipart import FORCE_MULTIPART
from .jsonable_encoder import jsonable_encoder
from .query_encoder import encode_query
from .remove_none_from_dict import remove_none_from_dict
from .request_options import RequestOptions
from httpx._types import RequestFiles
INITIAL_RETRY_DELAY_SECONDS = 0.5
MAX_RETRY_DELAY_SECONDS = 10
@@ -180,11 +180,17 @@ class HttpClient:
json: typing.Optional[typing.Any] = None,
data: typing.Optional[typing.Any] = None,
content: typing.Optional[typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]]] = None,
files: typing.Optional[typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]]] = None,
files: typing.Optional[
typing.Union[
typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]],
typing.List[typing.Tuple[str, File]],
]
] = None,
headers: typing.Optional[typing.Dict[str, typing.Any]] = None,
request_options: typing.Optional[RequestOptions] = None,
retries: int = 2,
omit: typing.Optional[typing.Any] = None,
force_multipart: typing.Optional[bool] = None,
) -> httpx.Response:
base_url = self.get_base_url(base_url)
timeout = (
@@ -195,6 +201,15 @@ class HttpClient:
json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
request_files: typing.Optional[RequestFiles] = (
convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
if (files is not None and files is not omit and isinstance(files, dict))
else None
)
if (request_files is None or len(request_files) == 0) and force_multipart:
request_files = FORCE_MULTIPART
response = self.httpx_client.request(
method=method,
url=urllib.parse.urljoin(f"{base_url}/", path),
@@ -227,11 +242,7 @@ class HttpClient:
json=json_body,
data=data_body,
content=content,
files=(
convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
if (files is not None and files is not omit)
else None
),
files=request_files,
timeout=timeout,
)
@@ -266,11 +277,17 @@ class HttpClient:
json: typing.Optional[typing.Any] = None,
data: typing.Optional[typing.Any] = None,
content: typing.Optional[typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]]] = None,
files: typing.Optional[typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]]] = None,
files: typing.Optional[
typing.Union[
typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]],
typing.List[typing.Tuple[str, File]],
]
] = None,
headers: typing.Optional[typing.Dict[str, typing.Any]] = None,
request_options: typing.Optional[RequestOptions] = None,
retries: int = 2,
omit: typing.Optional[typing.Any] = None,
force_multipart: typing.Optional[bool] = None,
) -> typing.Iterator[httpx.Response]:
base_url = self.get_base_url(base_url)
timeout = (
@@ -279,6 +296,15 @@ class HttpClient:
else self.base_timeout()
)
request_files: typing.Optional[RequestFiles] = (
convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
if (files is not None and files is not omit and isinstance(files, dict))
else None
)
if (request_files is None or len(request_files) == 0) and force_multipart:
request_files = FORCE_MULTIPART
json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
with self.httpx_client.stream(
@@ -313,11 +339,7 @@ class HttpClient:
json=json_body,
data=data_body,
content=content,
files=(
convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
if (files is not None and files is not omit)
else None
),
files=request_files,
timeout=timeout,
) as stream:
yield stream
@@ -356,11 +378,17 @@ class AsyncHttpClient:
json: typing.Optional[typing.Any] = None,
data: typing.Optional[typing.Any] = None,
content: typing.Optional[typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]]] = None,
files: typing.Optional[typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]]] = None,
files: typing.Optional[
typing.Union[
typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]],
typing.List[typing.Tuple[str, File]],
]
] = None,
headers: typing.Optional[typing.Dict[str, typing.Any]] = None,
request_options: typing.Optional[RequestOptions] = None,
retries: int = 2,
omit: typing.Optional[typing.Any] = None,
force_multipart: typing.Optional[bool] = None,
) -> httpx.Response:
base_url = self.get_base_url(base_url)
timeout = (
@@ -369,6 +397,15 @@ class AsyncHttpClient:
else self.base_timeout()
)
request_files: typing.Optional[RequestFiles] = (
convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
if (files is not None and files is not omit and isinstance(files, dict))
else None
)
if (request_files is None or len(request_files) == 0) and force_multipart:
request_files = FORCE_MULTIPART
json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
# Add the input to each of these and do None-safety checks
@@ -404,11 +441,7 @@ class AsyncHttpClient:
json=json_body,
data=data_body,
content=content,
files=(
convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
if files is not None
else None
),
files=request_files,
timeout=timeout,
)
@@ -442,11 +475,17 @@ class AsyncHttpClient:
json: typing.Optional[typing.Any] = None,
data: typing.Optional[typing.Any] = None,
content: typing.Optional[typing.Union[bytes, typing.Iterator[bytes], typing.AsyncIterator[bytes]]] = None,
files: typing.Optional[typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]]] = None,
files: typing.Optional[
typing.Union[
typing.Dict[str, typing.Optional[typing.Union[File, typing.List[File]]]],
typing.List[typing.Tuple[str, File]],
]
] = None,
headers: typing.Optional[typing.Dict[str, typing.Any]] = None,
request_options: typing.Optional[RequestOptions] = None,
retries: int = 2,
omit: typing.Optional[typing.Any] = None,
force_multipart: typing.Optional[bool] = None,
) -> typing.AsyncIterator[httpx.Response]:
base_url = self.get_base_url(base_url)
timeout = (
@@ -455,6 +494,15 @@ class AsyncHttpClient:
else self.base_timeout()
)
request_files: typing.Optional[RequestFiles] = (
convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
if (files is not None and files is not omit and isinstance(files, dict))
else None
)
if (request_files is None or len(request_files) == 0) and force_multipart:
request_files = FORCE_MULTIPART
json_body, data_body = get_request_body(json=json, data=data, request_options=request_options, omit=omit)
async with self.httpx_client.stream(
@@ -489,11 +537,7 @@ class AsyncHttpClient:
json=json_body,
data=data_body,
content=content,
files=(
convert_file_dict_to_httpx_tuples(remove_omit_from_dict(remove_none_from_dict(files), omit))
if files is not None
else None
),
files=request_files,
timeout=timeout,
) as stream:
yield stream

View File

@@ -0,0 +1,55 @@
# This file was auto-generated by Fern from our API Definition.
from typing import Dict, Generic, TypeVar
import httpx
# Generic to represent the underlying type of the data wrapped by the HTTP response.
T = TypeVar("T")
class BaseHttpResponse:
"""Minimalist HTTP response wrapper that exposes response headers."""
_response: httpx.Response
def __init__(self, response: httpx.Response):
self._response = response
@property
def headers(self) -> Dict[str, str]:
return dict(self._response.headers)
class HttpResponse(Generic[T], BaseHttpResponse):
"""HTTP response wrapper that exposes response headers and data."""
_data: T
def __init__(self, response: httpx.Response, data: T):
super().__init__(response)
self._data = data
@property
def data(self) -> T:
return self._data
def close(self) -> None:
self._response.close()
class AsyncHttpResponse(Generic[T], BaseHttpResponse):
"""HTTP response wrapper that exposes response headers and data."""
_data: T
def __init__(self, response: httpx.Response, data: T):
super().__init__(response)
self._data = data
@property
def data(self) -> T:
return self._data
async def close(self) -> None:
await self._response.aclose()

View File

@@ -0,0 +1,42 @@
# This file was auto-generated by Fern from our API Definition.
# isort: skip_file
import typing
from importlib import import_module
if typing.TYPE_CHECKING:
from ._api import EventSource, aconnect_sse, connect_sse
from ._exceptions import SSEError
from ._models import ServerSentEvent
_dynamic_imports: typing.Dict[str, str] = {
"EventSource": "._api",
"SSEError": "._exceptions",
"ServerSentEvent": "._models",
"aconnect_sse": "._api",
"connect_sse": "._api",
}
def __getattr__(attr_name: str) -> typing.Any:
module_name = _dynamic_imports.get(attr_name)
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
module = import_module(module_name, __package__)
if module_name == f".{attr_name}":
return module
else:
return getattr(module, attr_name)
except ImportError as e:
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
except AttributeError as e:
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
def __dir__():
lazy_attrs = list(_dynamic_imports.keys())
return sorted(lazy_attrs)
__all__ = ["EventSource", "SSEError", "ServerSentEvent", "aconnect_sse", "connect_sse"]

View File

@@ -0,0 +1,112 @@
# This file was auto-generated by Fern from our API Definition.
import re
from contextlib import asynccontextmanager, contextmanager
from typing import Any, AsyncGenerator, AsyncIterator, Iterator, cast
import httpx
from ._decoders import SSEDecoder
from ._exceptions import SSEError
from ._models import ServerSentEvent
class EventSource:
def __init__(self, response: httpx.Response) -> None:
self._response = response
def _check_content_type(self) -> None:
content_type = self._response.headers.get("content-type", "").partition(";")[0]
if "text/event-stream" not in content_type:
raise SSEError(
f"Expected response header Content-Type to contain 'text/event-stream', got {content_type!r}"
)
def _get_charset(self) -> str:
"""Extract charset from Content-Type header, fallback to UTF-8."""
content_type = self._response.headers.get("content-type", "")
# Parse charset parameter using regex
charset_match = re.search(r"charset=([^;\s]+)", content_type, re.IGNORECASE)
if charset_match:
charset = charset_match.group(1).strip("\"'")
# Validate that it's a known encoding
try:
# Test if the charset is valid by trying to encode/decode
"test".encode(charset).decode(charset)
return charset
except (LookupError, UnicodeError):
# If charset is invalid, fall back to UTF-8
pass
# Default to UTF-8 if no charset specified or invalid charset
return "utf-8"
@property
def response(self) -> httpx.Response:
return self._response
def iter_sse(self) -> Iterator[ServerSentEvent]:
self._check_content_type()
decoder = SSEDecoder()
charset = self._get_charset()
buffer = ""
for chunk in self._response.iter_bytes():
# Decode chunk using detected charset
text_chunk = chunk.decode(charset, errors="replace")
buffer += text_chunk
# Process complete lines
while "\n" in buffer:
line, buffer = buffer.split("\n", 1)
line = line.rstrip("\r")
sse = decoder.decode(line)
# when we reach a "\n\n" => line = ''
# => decoder will attempt to return an SSE Event
if sse is not None:
yield sse
# Process any remaining data in buffer
if buffer.strip():
line = buffer.rstrip("\r")
sse = decoder.decode(line)
if sse is not None:
yield sse
async def aiter_sse(self) -> AsyncGenerator[ServerSentEvent, None]:
self._check_content_type()
decoder = SSEDecoder()
lines = cast(AsyncGenerator[str, None], self._response.aiter_lines())
try:
async for line in lines:
line = line.rstrip("\n")
sse = decoder.decode(line)
if sse is not None:
yield sse
finally:
await lines.aclose()
@contextmanager
def connect_sse(client: httpx.Client, method: str, url: str, **kwargs: Any) -> Iterator[EventSource]:
headers = kwargs.pop("headers", {})
headers["Accept"] = "text/event-stream"
headers["Cache-Control"] = "no-store"
with client.stream(method, url, headers=headers, **kwargs) as response:
yield EventSource(response)
@asynccontextmanager
async def aconnect_sse(
client: httpx.AsyncClient,
method: str,
url: str,
**kwargs: Any,
) -> AsyncIterator[EventSource]:
headers = kwargs.pop("headers", {})
headers["Accept"] = "text/event-stream"
headers["Cache-Control"] = "no-store"
async with client.stream(method, url, headers=headers, **kwargs) as response:
yield EventSource(response)

View File

@@ -0,0 +1,61 @@
# This file was auto-generated by Fern from our API Definition.
from typing import List, Optional
from ._models import ServerSentEvent
class SSEDecoder:
def __init__(self) -> None:
self._event = ""
self._data: List[str] = []
self._last_event_id = ""
self._retry: Optional[int] = None
def decode(self, line: str) -> Optional[ServerSentEvent]:
# See: https://html.spec.whatwg.org/multipage/server-sent-events.html#event-stream-interpretation # noqa: E501
if not line:
if not self._event and not self._data and not self._last_event_id and self._retry is None:
return None
sse = ServerSentEvent(
event=self._event,
data="\n".join(self._data),
id=self._last_event_id,
retry=self._retry,
)
# NOTE: as per the SSE spec, do not reset last_event_id.
self._event = ""
self._data = []
self._retry = None
return sse
if line.startswith(":"):
return None
fieldname, _, value = line.partition(":")
if value.startswith(" "):
value = value[1:]
if fieldname == "event":
self._event = value
elif fieldname == "data":
self._data.append(value)
elif fieldname == "id":
if "\0" in value:
pass
else:
self._last_event_id = value
elif fieldname == "retry":
try:
self._retry = int(value)
except (TypeError, ValueError):
pass
else:
pass # Field is ignored.
return None

View File

@@ -0,0 +1,7 @@
# This file was auto-generated by Fern from our API Definition.
import httpx
class SSEError(httpx.TransportError):
pass

View File

@@ -0,0 +1,17 @@
# This file was auto-generated by Fern from our API Definition.
import json
from dataclasses import dataclass
from typing import Any, Optional
@dataclass(frozen=True)
class ServerSentEvent:
event: str = "message"
data: str = ""
id: str = ""
retry: Optional[int] = None
def json(self) -> Any:
"""Parse the data field as JSON."""
return json.loads(self.data)

View File

@@ -17,7 +17,6 @@ from types import GeneratorType
from typing import Any, Callable, Dict, List, Optional, Set, Union
import pydantic
from .datetime_utils import serialize_datetime
from .pydantic_utilities import (
IS_PYDANTIC_V2,

View File

@@ -2,90 +2,66 @@
# nopycln: file
import datetime as dt
import typing
from collections import defaultdict
import typing_extensions
from typing import Any, Callable, ClassVar, Dict, List, Mapping, Optional, Set, Tuple, Type, TypeVar, Union, cast
import pydantic
from .datetime_utils import serialize_datetime
from .serialization import convert_and_respect_annotation_metadata
IS_PYDANTIC_V2 = pydantic.VERSION.startswith("2.")
if IS_PYDANTIC_V2:
# isort will try to reformat the comments on these imports, which breaks mypy
# isort: off
from pydantic.v1.datetime_parse import ( # type: ignore # pyright: ignore[reportMissingImports] # Pydantic v2
parse_date as parse_date,
)
from pydantic.v1.datetime_parse import ( # pyright: ignore[reportMissingImports] # Pydantic v2
parse_datetime as parse_datetime,
)
from pydantic.v1.json import ( # type: ignore # pyright: ignore[reportMissingImports] # Pydantic v2
ENCODERS_BY_TYPE as encoders_by_type,
)
from pydantic.v1.typing import ( # type: ignore # pyright: ignore[reportMissingImports] # Pydantic v2
get_args as get_args,
)
from pydantic.v1.typing import ( # pyright: ignore[reportMissingImports] # Pydantic v2
get_origin as get_origin,
)
from pydantic.v1.typing import ( # pyright: ignore[reportMissingImports] # Pydantic v2
is_literal_type as is_literal_type,
)
from pydantic.v1.typing import ( # pyright: ignore[reportMissingImports] # Pydantic v2
is_union as is_union,
)
from pydantic.v1.fields import ModelField as ModelField # type: ignore # pyright: ignore[reportMissingImports] # Pydantic v2
from pydantic.v1.datetime_parse import parse_date as parse_date
from pydantic.v1.datetime_parse import parse_datetime as parse_datetime
from pydantic.v1.fields import ModelField as ModelField
from pydantic.v1.json import ENCODERS_BY_TYPE as encoders_by_type # type: ignore[attr-defined]
from pydantic.v1.typing import get_args as get_args
from pydantic.v1.typing import get_origin as get_origin
from pydantic.v1.typing import is_literal_type as is_literal_type
from pydantic.v1.typing import is_union as is_union
else:
from pydantic.datetime_parse import parse_date as parse_date # type: ignore # Pydantic v1
from pydantic.datetime_parse import parse_datetime as parse_datetime # type: ignore # Pydantic v1
from pydantic.fields import ModelField as ModelField # type: ignore # Pydantic v1
from pydantic.json import ENCODERS_BY_TYPE as encoders_by_type # type: ignore # Pydantic v1
from pydantic.typing import get_args as get_args # type: ignore # Pydantic v1
from pydantic.typing import get_origin as get_origin # type: ignore # Pydantic v1
from pydantic.typing import is_literal_type as is_literal_type # type: ignore # Pydantic v1
from pydantic.typing import is_union as is_union # type: ignore # Pydantic v1
from pydantic.datetime_parse import parse_date as parse_date # type: ignore[no-redef]
from pydantic.datetime_parse import parse_datetime as parse_datetime # type: ignore[no-redef]
from pydantic.fields import ModelField as ModelField # type: ignore[attr-defined, no-redef]
from pydantic.json import ENCODERS_BY_TYPE as encoders_by_type # type: ignore[no-redef]
from pydantic.typing import get_args as get_args # type: ignore[no-redef]
from pydantic.typing import get_origin as get_origin # type: ignore[no-redef]
from pydantic.typing import is_literal_type as is_literal_type # type: ignore[no-redef]
from pydantic.typing import is_union as is_union # type: ignore[no-redef]
# isort: on
from .datetime_utils import serialize_datetime
from .serialization import convert_and_respect_annotation_metadata
from typing_extensions import TypeAlias
T = TypeVar("T")
Model = TypeVar("Model", bound=pydantic.BaseModel)
T = typing.TypeVar("T")
Model = typing.TypeVar("Model", bound=pydantic.BaseModel)
def parse_obj_as(type_: typing.Type[T], object_: typing.Any) -> T:
def parse_obj_as(type_: Type[T], object_: Any) -> T:
dealiased_object = convert_and_respect_annotation_metadata(object_=object_, annotation=type_, direction="read")
if IS_PYDANTIC_V2:
adapter = pydantic.TypeAdapter(type_) # type: ignore # Pydantic v2
adapter = pydantic.TypeAdapter(type_) # type: ignore[attr-defined]
return adapter.validate_python(dealiased_object)
else:
return pydantic.parse_obj_as(type_, dealiased_object)
return pydantic.parse_obj_as(type_, dealiased_object)
def to_jsonable_with_fallback(
obj: typing.Any, fallback_serializer: typing.Callable[[typing.Any], typing.Any]
) -> typing.Any:
def to_jsonable_with_fallback(obj: Any, fallback_serializer: Callable[[Any], Any]) -> Any:
if IS_PYDANTIC_V2:
from pydantic_core import to_jsonable_python
return to_jsonable_python(obj, fallback=fallback_serializer)
else:
return fallback_serializer(obj)
return fallback_serializer(obj)
class UniversalBaseModel(pydantic.BaseModel):
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(
model_config: ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict( # type: ignore[typeddict-unknown-key]
# Allow fields beginning with `model_` to be used in the model
protected_namespaces=(),
) # type: ignore # Pydantic v2
)
@pydantic.model_serializer(mode="wrap", when_used="json") # type: ignore # Pydantic v2
def serialize_model(self, handler: pydantic.SerializerFunctionWrapHandler) -> typing.Any: # type: ignore # Pydantic v2
serialized = handler(self)
@pydantic.model_serializer(mode="plain", when_used="json") # type: ignore[attr-defined]
def serialize_model(self) -> Any: # type: ignore[name-defined]
serialized = self.dict() # type: ignore[attr-defined]
data = {k: serialize_datetime(v) if isinstance(v, dt.datetime) else v for k, v in serialized.items()}
return data
@@ -96,34 +72,28 @@ class UniversalBaseModel(pydantic.BaseModel):
json_encoders = {dt.datetime: serialize_datetime}
@classmethod
def model_construct(
cls: typing.Type["Model"], _fields_set: typing.Optional[typing.Set[str]] = None, **values: typing.Any
) -> "Model":
def model_construct(cls: Type["Model"], _fields_set: Optional[Set[str]] = None, **values: Any) -> "Model":
dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read")
return cls.construct(_fields_set, **dealiased_object)
@classmethod
def construct(
cls: typing.Type["Model"], _fields_set: typing.Optional[typing.Set[str]] = None, **values: typing.Any
) -> "Model":
def construct(cls: Type["Model"], _fields_set: Optional[Set[str]] = None, **values: Any) -> "Model":
dealiased_object = convert_and_respect_annotation_metadata(object_=values, annotation=cls, direction="read")
if IS_PYDANTIC_V2:
return super().model_construct(_fields_set, **dealiased_object) # type: ignore # Pydantic v2
else:
return super().construct(_fields_set, **dealiased_object)
return super().model_construct(_fields_set, **dealiased_object) # type: ignore[misc]
return super().construct(_fields_set, **dealiased_object)
def json(self, **kwargs: typing.Any) -> str:
kwargs_with_defaults: typing.Any = {
def json(self, **kwargs: Any) -> str:
kwargs_with_defaults = {
"by_alias": True,
"exclude_unset": True,
**kwargs,
}
if IS_PYDANTIC_V2:
return super().model_dump_json(**kwargs_with_defaults) # type: ignore # Pydantic v2
else:
return super().json(**kwargs_with_defaults)
return super().model_dump_json(**kwargs_with_defaults) # type: ignore[misc]
return super().json(**kwargs_with_defaults)
def dict(self, **kwargs: typing.Any) -> typing.Dict[str, typing.Any]:
def dict(self, **kwargs: Any) -> Dict[str, Any]:
"""
Override the default dict method to `exclude_unset` by default. This function patches
`exclude_unset` to work include fields within non-None default values.
@@ -134,21 +104,21 @@ class UniversalBaseModel(pydantic.BaseModel):
# We'd ideally do the same for Pydantic V2, but it shells out to a library to serialize models
# that we have less control over, and this is less intrusive than custom serializers for now.
if IS_PYDANTIC_V2:
kwargs_with_defaults_exclude_unset: typing.Any = {
kwargs_with_defaults_exclude_unset = {
**kwargs,
"by_alias": True,
"exclude_unset": True,
"exclude_none": False,
}
kwargs_with_defaults_exclude_none: typing.Any = {
kwargs_with_defaults_exclude_none = {
**kwargs,
"by_alias": True,
"exclude_none": True,
"exclude_unset": False,
}
dict_dump = deep_union_pydantic_dicts(
super().model_dump(**kwargs_with_defaults_exclude_unset), # type: ignore # Pydantic v2
super().model_dump(**kwargs_with_defaults_exclude_none), # type: ignore # Pydantic v2
super().model_dump(**kwargs_with_defaults_exclude_unset), # type: ignore[misc]
super().model_dump(**kwargs_with_defaults_exclude_none), # type: ignore[misc]
)
else:
@@ -168,7 +138,7 @@ class UniversalBaseModel(pydantic.BaseModel):
if default is not None:
self.__fields_set__.add(name)
kwargs_with_defaults_exclude_unset_include_fields: typing.Any = {
kwargs_with_defaults_exclude_unset_include_fields = {
"by_alias": True,
"exclude_unset": True,
"include": _fields_set,
@@ -177,15 +147,16 @@ class UniversalBaseModel(pydantic.BaseModel):
dict_dump = super().dict(**kwargs_with_defaults_exclude_unset_include_fields)
return convert_and_respect_annotation_metadata(object_=dict_dump, annotation=self.__class__, direction="write")
return cast(
Dict[str, Any],
convert_and_respect_annotation_metadata(object_=dict_dump, annotation=self.__class__, direction="write"),
)
def _union_list_of_pydantic_dicts(
source: typing.List[typing.Any], destination: typing.List[typing.Any]
) -> typing.List[typing.Any]:
converted_list: typing.List[typing.Any] = []
def _union_list_of_pydantic_dicts(source: List[Any], destination: List[Any]) -> List[Any]:
converted_list: List[Any] = []
for i, item in enumerate(source):
destination_value = destination[i] # type: ignore
destination_value = destination[i]
if isinstance(item, dict):
converted_list.append(deep_union_pydantic_dicts(item, destination_value))
elif isinstance(item, list):
@@ -195,9 +166,7 @@ def _union_list_of_pydantic_dicts(
return converted_list
def deep_union_pydantic_dicts(
source: typing.Dict[str, typing.Any], destination: typing.Dict[str, typing.Any]
) -> typing.Dict[str, typing.Any]:
def deep_union_pydantic_dicts(source: Dict[str, Any], destination: Dict[str, Any]) -> Dict[str, Any]:
for key, value in source.items():
node = destination.setdefault(key, {})
if isinstance(value, dict):
@@ -215,18 +184,16 @@ def deep_union_pydantic_dicts(
if IS_PYDANTIC_V2:
class V2RootModel(UniversalBaseModel, pydantic.RootModel): # type: ignore # Pydantic v2
class V2RootModel(UniversalBaseModel, pydantic.RootModel): # type: ignore[misc, name-defined, type-arg]
pass
UniversalRootModel: typing_extensions.TypeAlias = V2RootModel # type: ignore
UniversalRootModel: TypeAlias = V2RootModel # type: ignore[misc]
else:
UniversalRootModel: typing_extensions.TypeAlias = UniversalBaseModel # type: ignore
UniversalRootModel: TypeAlias = UniversalBaseModel # type: ignore[misc, no-redef]
def encode_by_type(o: typing.Any) -> typing.Any:
encoders_by_class_tuples: typing.Dict[typing.Callable[[typing.Any], typing.Any], typing.Tuple[typing.Any, ...]] = (
defaultdict(tuple)
)
def encode_by_type(o: Any) -> Any:
encoders_by_class_tuples: Dict[Callable[[Any], Any], Tuple[Any, ...]] = defaultdict(tuple)
for type_, encoder in encoders_by_type.items():
encoders_by_class_tuples[encoder] += (type_,)
@@ -237,54 +204,49 @@ def encode_by_type(o: typing.Any) -> typing.Any:
return encoder(o)
def update_forward_refs(model: typing.Type["Model"], **localns: typing.Any) -> None:
def update_forward_refs(model: Type["Model"], **localns: Any) -> None:
if IS_PYDANTIC_V2:
model.model_rebuild(raise_errors=False) # type: ignore # Pydantic v2
model.model_rebuild(raise_errors=False) # type: ignore[attr-defined]
else:
model.update_forward_refs(**localns)
# Mirrors Pydantic's internal typing
AnyCallable = typing.Callable[..., typing.Any]
AnyCallable = Callable[..., Any]
def universal_root_validator(
pre: bool = False,
) -> typing.Callable[[AnyCallable], AnyCallable]:
) -> Callable[[AnyCallable], AnyCallable]:
def decorator(func: AnyCallable) -> AnyCallable:
if IS_PYDANTIC_V2:
return pydantic.model_validator(mode="before" if pre else "after")(func) # type: ignore # Pydantic v2
else:
return pydantic.root_validator(pre=pre)(func) # type: ignore # Pydantic v1
return cast(AnyCallable, pydantic.model_validator(mode="before" if pre else "after")(func)) # type: ignore[attr-defined]
return cast(AnyCallable, pydantic.root_validator(pre=pre)(func)) # type: ignore[call-overload]
return decorator
def universal_field_validator(field_name: str, pre: bool = False) -> typing.Callable[[AnyCallable], AnyCallable]:
def universal_field_validator(field_name: str, pre: bool = False) -> Callable[[AnyCallable], AnyCallable]:
def decorator(func: AnyCallable) -> AnyCallable:
if IS_PYDANTIC_V2:
return pydantic.field_validator(field_name, mode="before" if pre else "after")(func) # type: ignore # Pydantic v2
else:
return pydantic.validator(field_name, pre=pre)(func) # type: ignore # Pydantic v1
return cast(AnyCallable, pydantic.field_validator(field_name, mode="before" if pre else "after")(func)) # type: ignore[attr-defined]
return cast(AnyCallable, pydantic.validator(field_name, pre=pre)(func))
return decorator
PydanticField = typing.Union[ModelField, pydantic.fields.FieldInfo]
PydanticField = Union[ModelField, pydantic.fields.FieldInfo]
def _get_model_fields(
model: typing.Type["Model"],
) -> typing.Mapping[str, PydanticField]:
def _get_model_fields(model: Type["Model"]) -> Mapping[str, PydanticField]:
if IS_PYDANTIC_V2:
return model.model_fields # type: ignore # Pydantic v2
else:
return model.__fields__ # type: ignore # Pydantic v1
return cast(Mapping[str, PydanticField], model.model_fields) # type: ignore[attr-defined]
return cast(Mapping[str, PydanticField], model.__fields__)
def _get_field_default(field: PydanticField) -> typing.Any:
def _get_field_default(field: PydanticField) -> Any:
try:
value = field.get_default() # type: ignore # Pydantic < v1.10.15
value = field.get_default() # type: ignore[union-attr]
except:
value = field.default
if IS_PYDANTIC_V2:

View File

@@ -4,9 +4,8 @@ import collections
import inspect
import typing
import typing_extensions
import pydantic
import typing_extensions
class FieldMetadata:
@@ -161,7 +160,12 @@ def _convert_mapping(
direction: typing.Literal["read", "write"],
) -> typing.Mapping[str, object]:
converted_object: typing.Dict[str, object] = {}
annotations = typing_extensions.get_type_hints(expected_type, include_extras=True)
try:
annotations = typing_extensions.get_type_hints(expected_type, include_extras=True)
except NameError:
# The TypedDict contains a circular reference, so
# we use the __annotations__ attribute directly.
annotations = getattr(expected_type, "__annotations__", {})
aliases_to_field_names = _get_alias_to_field_name(annotations)
for key, value in object_.items():
if direction == "read" and key in aliases_to_field_names:

View File

@@ -1,8 +1,42 @@
# This file was auto-generated by Fern from our API Definition.
from .bad_request_error import BadRequestError
from .forbidden_error import ForbiddenError
from .not_found_error import NotFoundError
from .unprocessable_entity_error import UnprocessableEntityError
# isort: skip_file
import typing
from importlib import import_module
if typing.TYPE_CHECKING:
from .bad_request_error import BadRequestError
from .forbidden_error import ForbiddenError
from .not_found_error import NotFoundError
from .unprocessable_entity_error import UnprocessableEntityError
_dynamic_imports: typing.Dict[str, str] = {
"BadRequestError": ".bad_request_error",
"ForbiddenError": ".forbidden_error",
"NotFoundError": ".not_found_error",
"UnprocessableEntityError": ".unprocessable_entity_error",
}
def __getattr__(attr_name: str) -> typing.Any:
module_name = _dynamic_imports.get(attr_name)
if module_name is None:
raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
try:
module = import_module(module_name, __package__)
if module_name == f".{attr_name}":
return module
else:
return getattr(module, attr_name)
except ImportError as e:
raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
except AttributeError as e:
raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
def __dir__():
lazy_attrs = list(_dynamic_imports.keys())
return sorted(lazy_attrs)
__all__ = ["BadRequestError", "ForbiddenError", "NotFoundError", "UnprocessableEntityError"]

View File

@@ -1,9 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.api_error import ApiError
import typing
from ..core.api_error import ApiError
class BadRequestError(ApiError):
def __init__(self, body: typing.Optional[typing.Any]):
super().__init__(status_code=400, body=body)
def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None):
super().__init__(status_code=400, headers=headers, body=body)

View File

@@ -1,9 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.api_error import ApiError
import typing
from ..core.api_error import ApiError
class ForbiddenError(ApiError):
def __init__(self, body: typing.Optional[typing.Any]):
super().__init__(status_code=403, body=body)
def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None):
super().__init__(status_code=403, headers=headers, body=body)

View File

@@ -1,9 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.api_error import ApiError
import typing
from ..core.api_error import ApiError
class NotFoundError(ApiError):
def __init__(self, body: typing.Optional[typing.Any]):
super().__init__(status_code=404, body=body)
def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None):
super().__init__(status_code=404, headers=headers, body=body)

View File

@@ -1,9 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.api_error import ApiError
import typing
from ..core.api_error import ApiError
class UnprocessableEntityError(ApiError):
def __init__(self, body: typing.Optional[typing.Any]):
super().__init__(status_code=422, body=body)
def __init__(self, body: typing.Optional[typing.Any], headers: typing.Optional[typing.Dict[str, str]] = None):
super().__init__(status_code=422, headers=headers, body=body)

4066
skyvern/client/raw_client.py Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +1,4 @@
# This file was auto-generated by Fern from our API Definition.
# isort: skip_file

View File

@@ -1,19 +1,26 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.client_wrapper import SyncClientWrapper
import typing
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
from ..core.jsonable_encoder import jsonable_encoder
from ..core.pydantic_utilities import parse_obj_as
from ..errors.unprocessable_entity_error import UnprocessableEntityError
from json.decoder import JSONDecodeError
from ..core.api_error import ApiError
from ..core.client_wrapper import AsyncClientWrapper
from .raw_client import AsyncRawScriptsClient, RawScriptsClient
class ScriptsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
self._raw_client = RawScriptsClient(client_wrapper=client_wrapper)
@property
def with_raw_response(self) -> RawScriptsClient:
"""
Retrieves a raw implementation of this client that returns raw responses.
Returns
-------
RawScriptsClient
"""
return self._raw_client
def run_script(
self, script_id: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -40,45 +47,29 @@ class ScriptsClient:
client = Skyvern(
api_key="YOUR_API_KEY",
x_api_key="YOUR_X_API_KEY",
)
client.scripts.run_script(
script_id="s_abc123",
)
"""
_response = self._client_wrapper.httpx_client.request(
f"v1/scripts/{jsonable_encoder(script_id)}/run",
method="POST",
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
return typing.cast(
typing.Optional[typing.Any],
parse_obj_as(
type_=typing.Optional[typing.Any], # type: ignore
object_=_response.json(),
),
)
if _response.status_code == 422:
raise UnprocessableEntityError(
typing.cast(
typing.Optional[typing.Any],
parse_obj_as(
type_=typing.Optional[typing.Any], # type: ignore
object_=_response.json(),
),
)
)
_response_json = _response.json()
except JSONDecodeError:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
_response = self._raw_client.run_script(script_id, request_options=request_options)
return _response.data
class AsyncScriptsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
self._raw_client = AsyncRawScriptsClient(client_wrapper=client_wrapper)
@property
def with_raw_response(self) -> AsyncRawScriptsClient:
"""
Retrieves a raw implementation of this client that returns raw responses.
Returns
-------
AsyncRawScriptsClient
"""
return self._raw_client
async def run_script(
self, script_id: str, *, request_options: typing.Optional[RequestOptions] = None
@@ -107,7 +98,6 @@ class AsyncScriptsClient:
client = AsyncSkyvern(
api_key="YOUR_API_KEY",
x_api_key="YOUR_X_API_KEY",
)
@@ -119,31 +109,5 @@ class AsyncScriptsClient:
asyncio.run(main())
"""
_response = await self._client_wrapper.httpx_client.request(
f"v1/scripts/{jsonable_encoder(script_id)}/run",
method="POST",
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
return typing.cast(
typing.Optional[typing.Any],
parse_obj_as(
type_=typing.Optional[typing.Any], # type: ignore
object_=_response.json(),
),
)
if _response.status_code == 422:
raise UnprocessableEntityError(
typing.cast(
typing.Optional[typing.Any],
parse_obj_as(
type_=typing.Optional[typing.Any], # type: ignore
object_=_response.json(),
),
)
)
_response_json = _response.json()
except JSONDecodeError:
raise ApiError(status_code=_response.status_code, body=_response.text)
raise ApiError(status_code=_response.status_code, body=_response_json)
_response = await self._raw_client.run_script(script_id, request_options=request_options)
return _response.data

View File

@@ -0,0 +1,126 @@
# This file was auto-generated by Fern from our API Definition.
import typing
from json.decoder import JSONDecodeError
from ..core.api_error import ApiError
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.http_response import AsyncHttpResponse, HttpResponse
from ..core.jsonable_encoder import jsonable_encoder
from ..core.pydantic_utilities import parse_obj_as
from ..core.request_options import RequestOptions
from ..errors.unprocessable_entity_error import UnprocessableEntityError
class RawScriptsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
self._client_wrapper = client_wrapper
def run_script(
self, script_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> HttpResponse[typing.Optional[typing.Any]]:
"""
Run a script
Parameters
----------
script_id : str
The unique identifier of the script
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
HttpResponse[typing.Optional[typing.Any]]
Successful Response
"""
_response = self._client_wrapper.httpx_client.request(
f"v1/scripts/{jsonable_encoder(script_id)}/run",
method="POST",
request_options=request_options,
)
try:
if _response is None or not _response.text.strip():
return HttpResponse(response=_response, data=None)
if 200 <= _response.status_code < 300:
_data = typing.cast(
typing.Optional[typing.Any],
parse_obj_as(
type_=typing.Optional[typing.Any], # type: ignore
object_=_response.json(),
),
)
return HttpResponse(response=_response, data=_data)
if _response.status_code == 422:
raise UnprocessableEntityError(
headers=dict(_response.headers),
body=typing.cast(
typing.Optional[typing.Any],
parse_obj_as(
type_=typing.Optional[typing.Any], # type: ignore
object_=_response.json(),
),
),
)
_response_json = _response.json()
except JSONDecodeError:
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)
class AsyncRawScriptsClient:
def __init__(self, *, client_wrapper: AsyncClientWrapper):
self._client_wrapper = client_wrapper
async def run_script(
self, script_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> AsyncHttpResponse[typing.Optional[typing.Any]]:
"""
Run a script
Parameters
----------
script_id : str
The unique identifier of the script
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
AsyncHttpResponse[typing.Optional[typing.Any]]
Successful Response
"""
_response = await self._client_wrapper.httpx_client.request(
f"v1/scripts/{jsonable_encoder(script_id)}/run",
method="POST",
request_options=request_options,
)
try:
if _response is None or not _response.text.strip():
return AsyncHttpResponse(response=_response, data=None)
if 200 <= _response.status_code < 300:
_data = typing.cast(
typing.Optional[typing.Any],
parse_obj_as(
type_=typing.Optional[typing.Any], # type: ignore
object_=_response.json(),
),
)
return AsyncHttpResponse(response=_response, data=_data)
if _response.status_code == 422:
raise UnprocessableEntityError(
headers=dict(_response.headers),
body=typing.cast(
typing.Optional[typing.Any],
parse_obj_as(
type_=typing.Optional[typing.Any], # type: ignore
object_=_response.json(),
),
),
)
_response_json = _response.json()
except JSONDecodeError:
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response_json)

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .action_type import ActionType
import datetime as dt
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .action_status import ActionStatus
from .user_defined_error import UserDefinedError
from .action_type import ActionType
from .input_or_select_context import InputOrSelectContext
from .select_option import SelectOption
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .user_defined_error import UserDefinedError
class Action(UniversalBaseModel):

View File

@@ -1,14 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .context_parameter import ContextParameter
from .output_parameter import OutputParameter
from __future__ import annotations
import typing
from .run_engine import RunEngine
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .action_block_data_schema import ActionBlockDataSchema
from .action_block_parameters_item import ActionBlockParametersItem
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .output_parameter import OutputParameter
from .run_engine import RunEngine
class ActionBlock(UniversalBaseModel):
@@ -47,3 +48,8 @@ class ActionBlock(UniversalBaseModel):
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
update_forward_refs(ActionBlock)

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from .workflow_parameter_type import WorkflowParameterType
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from ..core.pydantic_utilities import update_forward_refs
from .workflow_parameter_type import WorkflowParameterType
class ActionBlockParametersItem_AwsSecret(UniversalBaseModel):
@@ -172,8 +172,8 @@ class ActionBlockParametersItem_Context(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402
from .context_parameter_source import ContextParameterSource # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
class ActionBlockParametersItem_Credential(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .run_engine import RunEngine
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .run_engine import RunEngine
class ActionBlockYaml(UniversalBaseModel):

View File

@@ -16,6 +16,7 @@ ActionType = typing.Union[
"terminate",
"complete",
"reload_page",
"close_page",
"extract",
"verification_code",
"goto_url",

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import pydantic
from .artifact_type import ArtifactType
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .artifact_type import ArtifactType
class Artifact(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class AwsSecretParameter(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class AwsSecretParameterYaml(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class AzureSecretParameter(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class AzureVaultCredentialParameter(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class AzureVaultCredentialParameterYaml(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class BitwardenCreditCardDataParameter(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class BitwardenCreditCardDataParameterYaml(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class BitwardenLoginCredentialParameter(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class BitwardenLoginCredentialParameterYaml(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class BitwardenSensitiveInformationParameter(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class BitwardenSensitiveInformationParameterYaml(UniversalBaseModel):

View File

@@ -24,6 +24,7 @@ BlockType = typing.Union[
"goto_url",
"pdf_parser",
"http_request",
"human_interaction",
],
typing.Any,
]

View File

@@ -1,11 +1,11 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import pydantic
import typing
from .file_info import FileInfo
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .file_info import FileInfo
class BrowserSessionResponse(UniversalBaseModel):

View File

@@ -1,12 +1,13 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .context_parameter import ContextParameter
from .output_parameter import OutputParameter
from __future__ import annotations
import typing
from .code_block_parameters_item import CodeBlockParametersItem
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .code_block_parameters_item import CodeBlockParametersItem
from .output_parameter import OutputParameter
class CodeBlock(UniversalBaseModel):
@@ -26,3 +27,8 @@ class CodeBlock(UniversalBaseModel):
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
update_forward_refs(CodeBlock)

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from .workflow_parameter_type import WorkflowParameterType
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from ..core.pydantic_utilities import update_forward_refs
from .workflow_parameter_type import WorkflowParameterType
class CodeBlockParametersItem_AwsSecret(UniversalBaseModel):
@@ -172,8 +172,8 @@ class CodeBlockParametersItem_Context(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402
from .context_parameter_source import ContextParameterSource # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
class CodeBlockParametersItem_Credential(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class CodeBlockYaml(UniversalBaseModel):

View File

@@ -1,12 +1,12 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .context_parameter_value import ContextParameterValue
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import update_forward_refs
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
class ContextParameter(UniversalBaseModel):
@@ -25,6 +25,6 @@ class ContextParameter(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter_source import ContextParameterSource # noqa: E402
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
update_forward_refs(ContextParameter)

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .workflow_parameter_type import WorkflowParameterType
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from ..core.pydantic_utilities import update_forward_refs
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from .workflow_parameter_type import WorkflowParameterType
class ContextParameterSource_Workflow(UniversalBaseModel):
@@ -51,7 +51,7 @@ class ContextParameterSource_Context(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
class ContextParameterSource_AwsSecret(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class ContextParameterYaml(UniversalBaseModel):

View File

@@ -1,7 +1,8 @@
# This file was auto-generated by Fern from our API Definition.
import typing
from .non_empty_password_credential import NonEmptyPasswordCredential
from .non_empty_credit_card_credential import NonEmptyCreditCardCredential
from .non_empty_password_credential import NonEmptyPasswordCredential
CreateCredentialRequestCredential = typing.Union[NonEmptyPasswordCredential, NonEmptyCreditCardCredential]

View File

@@ -1,11 +1,12 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import pydantic
import typing
from .file_node import FileNode
from __future__ import annotations
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
class CreateScriptResponse(UniversalBaseModel):
@@ -29,7 +30,7 @@ class CreateScriptResponse(UniversalBaseModel):
Total number of files in the script
"""
file_tree: typing.Dict[str, FileNode] = pydantic.Field()
file_tree: typing.Dict[str, "FileNode"] = pydantic.Field()
"""
Hierarchical file tree structure
"""
@@ -47,3 +48,8 @@ class CreateScriptResponse(UniversalBaseModel):
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .file_node import FileNode # noqa: E402, F401, I001
update_forward_refs(CreateScriptResponse)

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class CredentialParameter(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class CredentialParameterYaml(UniversalBaseModel):

View File

@@ -1,11 +1,11 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .credential_response_credential import CredentialResponseCredential
from .credential_type_output import CredentialTypeOutput
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
class CredentialResponse(UniversalBaseModel):

View File

@@ -1,7 +1,8 @@
# This file was auto-generated by Fern from our API Definition.
import typing
from .password_credential_response import PasswordCredentialResponse
from .credit_card_credential_response import CreditCardCredentialResponse
from .password_credential_response import PasswordCredentialResponse
CredentialResponseCredential = typing.Union[PasswordCredentialResponse, CreditCardCredentialResponse]

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class CreditCardCredentialResponse(UniversalBaseModel):
"""

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .output_parameter import OutputParameter
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .output_parameter import OutputParameter
class DownloadToS3Block(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class DownloadToS3BlockYaml(UniversalBaseModel):

View File

@@ -1,14 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .context_parameter import ContextParameter
from .output_parameter import OutputParameter
from __future__ import annotations
import typing
from .run_engine import RunEngine
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .extraction_block_data_schema import ExtractionBlockDataSchema
from .extraction_block_parameters_item import ExtractionBlockParametersItem
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .output_parameter import OutputParameter
from .run_engine import RunEngine
class ExtractionBlock(UniversalBaseModel):
@@ -47,3 +48,8 @@ class ExtractionBlock(UniversalBaseModel):
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
update_forward_refs(ExtractionBlock)

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from .workflow_parameter_type import WorkflowParameterType
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from ..core.pydantic_utilities import update_forward_refs
from .workflow_parameter_type import WorkflowParameterType
class ExtractionBlockParametersItem_AwsSecret(UniversalBaseModel):
@@ -172,8 +172,8 @@ class ExtractionBlockParametersItem_Context(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402
from .context_parameter_source import ContextParameterSource # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
class ExtractionBlockParametersItem_Credential(UniversalBaseModel):

View File

@@ -1,11 +1,11 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .run_engine import RunEngine
from .extraction_block_yaml_data_schema import ExtractionBlockYamlDataSchema
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .extraction_block_yaml_data_schema import ExtractionBlockYamlDataSchema
from .run_engine import RunEngine
class ExtractionBlockYaml(UniversalBaseModel):

View File

@@ -1,14 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .context_parameter import ContextParameter
from .output_parameter import OutputParameter
from __future__ import annotations
import typing
from .run_engine import RunEngine
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .file_download_block_data_schema import FileDownloadBlockDataSchema
from .file_download_block_parameters_item import FileDownloadBlockParametersItem
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .output_parameter import OutputParameter
from .run_engine import RunEngine
class FileDownloadBlock(UniversalBaseModel):
@@ -47,3 +48,8 @@ class FileDownloadBlock(UniversalBaseModel):
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
update_forward_refs(FileDownloadBlock)

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from .workflow_parameter_type import WorkflowParameterType
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from ..core.pydantic_utilities import update_forward_refs
from .workflow_parameter_type import WorkflowParameterType
class FileDownloadBlockParametersItem_AwsSecret(UniversalBaseModel):
@@ -172,8 +172,8 @@ class FileDownloadBlockParametersItem_Context(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402
from .context_parameter_source import ContextParameterSource # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
class FileDownloadBlockParametersItem_Credential(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .run_engine import RunEngine
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .run_engine import RunEngine
class FileDownloadBlockYaml(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import pydantic
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class FileInfo(UniversalBaseModel):

View File

@@ -1,12 +1,12 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import pydantic
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
from ..core.pydantic_utilities import update_forward_refs
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
class FileNode(UniversalBaseModel):

View File

@@ -1,11 +1,11 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .output_parameter import OutputParameter
import typing
from .file_type import FileType
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .file_type import FileType
from .output_parameter import OutputParameter
class FileParserBlock(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .file_type import FileType
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .file_type import FileType
class FileParserBlockYaml(UniversalBaseModel):

View File

@@ -1,13 +1,13 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .output_parameter import OutputParameter
import typing
from .file_storage_type import FileStorageType
import typing_extensions
from ..core.serialization import FieldMetadata
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
import typing_extensions
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from ..core.serialization import FieldMetadata
from .file_storage_type import FileStorageType
from .output_parameter import OutputParameter
class FileUploadBlock(UniversalBaseModel):

View File

@@ -1,12 +1,12 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .file_storage_type import FileStorageType
import typing_extensions
from ..core.serialization import FieldMetadata
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
import typing_extensions
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from ..core.serialization import FieldMetadata
from .file_storage_type import FileStorageType
class FileUploadBlockYaml(UniversalBaseModel):

View File

@@ -1,14 +1,13 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
from .context_parameter import ContextParameter
from .output_parameter import OutputParameter
import typing
from .for_loop_block_loop_over import ForLoopBlockLoopOver
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import update_forward_refs
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .for_loop_block_loop_over import ForLoopBlockLoopOver
from .output_parameter import OutputParameter
class ForLoopBlock(UniversalBaseModel):
@@ -32,6 +31,7 @@ class ForLoopBlock(UniversalBaseModel):
extra = pydantic.Extra.allow
from .for_loop_block_loop_blocks_item import ForLoopBlockLoopBlocksItem # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .for_loop_block_loop_blocks_item import ForLoopBlockLoopBlocksItem # noqa: E402, F401, I001
update_forward_refs(ForLoopBlock)

View File

@@ -1,40 +1,41 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
from .context_parameter import ContextParameter
import typing
from .output_parameter import OutputParameter
from .run_engine import RunEngine
import pydantic
import typing_extensions
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from ..core.serialization import FieldMetadata
from .action_block_data_schema import ActionBlockDataSchema
from .action_block_parameters_item import ActionBlockParametersItem
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .aws_secret_parameter import AwsSecretParameter
from .code_block_parameters_item import CodeBlockParametersItem
from .extraction_block_data_schema import ExtractionBlockDataSchema
from .extraction_block_parameters_item import ExtractionBlockParametersItem
from .file_download_block_data_schema import FileDownloadBlockDataSchema
from .file_download_block_parameters_item import FileDownloadBlockParametersItem
from .file_storage_type import FileStorageType
import typing_extensions
from ..core.serialization import FieldMetadata
from .file_type import FileType
from .for_loop_block_loop_over import ForLoopBlockLoopOver
from .url_block_data_schema import UrlBlockDataSchema
from .url_block_parameters_item import UrlBlockParametersItem
from .http_request_block_parameters_item import HttpRequestBlockParametersItem
from .human_interaction_block_data_schema import HumanInteractionBlockDataSchema
from .human_interaction_block_parameters_item import HumanInteractionBlockParametersItem
from .login_block_data_schema import LoginBlockDataSchema
from .login_block_parameters_item import LoginBlockParametersItem
from .navigation_block_data_schema import NavigationBlockDataSchema
from .navigation_block_parameters_item import NavigationBlockParametersItem
from .aws_secret_parameter import AwsSecretParameter
from .output_parameter import OutputParameter
from .run_engine import RunEngine
from .task_block_data_schema import TaskBlockDataSchema
from .task_block_parameters_item import TaskBlockParametersItem
from .text_prompt_block_parameters_item import TextPromptBlockParametersItem
from .url_block_data_schema import UrlBlockDataSchema
from .url_block_parameters_item import UrlBlockParametersItem
from .validation_block_data_schema import ValidationBlockDataSchema
from .validation_block_parameters_item import ValidationBlockParametersItem
from .wait_block_parameters_item import WaitBlockParametersItem
from ..core.pydantic_utilities import update_forward_refs
class ForLoopBlockLoopBlocksItem_Action(UniversalBaseModel):
@@ -263,7 +264,7 @@ class ForLoopBlockLoopBlocksItem_ForLoop(UniversalBaseModel):
extra = pydantic.Extra.allow
from .for_loop_block import ForLoopBlock # noqa: E402
from .for_loop_block import ForLoopBlock # noqa: E402, F401, I001
class ForLoopBlockLoopBlocksItem_GotoUrl(UniversalBaseModel):
@@ -330,6 +331,53 @@ class ForLoopBlockLoopBlocksItem_HttpRequest(UniversalBaseModel):
extra = pydantic.Extra.allow
class ForLoopBlockLoopBlocksItem_HumanInteraction(UniversalBaseModel):
block_type: typing.Literal["human_interaction"] = "human_interaction"
label: str
output_parameter: OutputParameter
continue_on_failure: typing.Optional[bool] = None
model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
disable_cache: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
engine: typing.Optional[RunEngine] = None
complete_criterion: typing.Optional[str] = None
terminate_criterion: typing.Optional[str] = None
navigation_goal: typing.Optional[str] = None
data_extraction_goal: typing.Optional[str] = None
data_schema: typing.Optional[HumanInteractionBlockDataSchema] = None
error_code_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
max_retries: typing.Optional[int] = None
max_steps_per_run: typing.Optional[int] = None
parameters: typing.Optional[typing.List[HumanInteractionBlockParametersItem]] = None
complete_on_download: typing.Optional[bool] = None
download_suffix: typing.Optional[str] = None
totp_verification_url: typing.Optional[str] = None
totp_identifier: typing.Optional[str] = None
cache_actions: typing.Optional[bool] = None
complete_verification: typing.Optional[bool] = None
include_action_history_in_verification: typing.Optional[bool] = None
download_timeout: typing.Optional[float] = None
instructions: typing.Optional[str] = None
positive_descriptor: typing.Optional[str] = None
negative_descriptor: typing.Optional[str] = None
timeout_seconds: typing.Optional[int] = None
sender: typing.Optional[str] = None
recipients: typing.Optional[typing.List[str]] = None
subject: typing.Optional[str] = None
body: typing.Optional[str] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class ForLoopBlockLoopBlocksItem_Login(UniversalBaseModel):
block_type: typing.Literal["login"] = "login"
label: str
@@ -618,6 +666,8 @@ class ForLoopBlockLoopBlocksItem_Wait(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
ForLoopBlockLoopBlocksItem = typing.Union[
ForLoopBlockLoopBlocksItem_Action,
ForLoopBlockLoopBlocksItem_Code,
@@ -629,6 +679,7 @@ ForLoopBlockLoopBlocksItem = typing.Union[
ForLoopBlockLoopBlocksItem_ForLoop,
ForLoopBlockLoopBlocksItem_GotoUrl,
ForLoopBlockLoopBlocksItem_HttpRequest,
ForLoopBlockLoopBlocksItem_HumanInteraction,
ForLoopBlockLoopBlocksItem_Login,
ForLoopBlockLoopBlocksItem_Navigation,
ForLoopBlockLoopBlocksItem_PdfParser,
@@ -640,4 +691,17 @@ ForLoopBlockLoopBlocksItem = typing.Union[
ForLoopBlockLoopBlocksItem_Validation,
ForLoopBlockLoopBlocksItem_Wait,
]
update_forward_refs(ForLoopBlockLoopBlocksItem_Action)
update_forward_refs(ForLoopBlockLoopBlocksItem_Code)
update_forward_refs(ForLoopBlockLoopBlocksItem_Extraction)
update_forward_refs(ForLoopBlockLoopBlocksItem_FileDownload)
update_forward_refs(ForLoopBlockLoopBlocksItem_ForLoop)
update_forward_refs(ForLoopBlockLoopBlocksItem_GotoUrl)
update_forward_refs(ForLoopBlockLoopBlocksItem_HttpRequest)
update_forward_refs(ForLoopBlockLoopBlocksItem_HumanInteraction)
update_forward_refs(ForLoopBlockLoopBlocksItem_Login)
update_forward_refs(ForLoopBlockLoopBlocksItem_Navigation)
update_forward_refs(ForLoopBlockLoopBlocksItem_Task)
update_forward_refs(ForLoopBlockLoopBlocksItem_TextPrompt)
update_forward_refs(ForLoopBlockLoopBlocksItem_Validation)
update_forward_refs(ForLoopBlockLoopBlocksItem_Wait)

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from .workflow_parameter_type import WorkflowParameterType
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from ..core.pydantic_utilities import update_forward_refs
from .workflow_parameter_type import WorkflowParameterType
class ForLoopBlockLoopOver_AwsSecret(UniversalBaseModel):
@@ -172,8 +172,8 @@ class ForLoopBlockLoopOver_Context(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402
from .context_parameter_source import ContextParameterSource # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
class ForLoopBlockLoopOver_Credential(UniversalBaseModel):

View File

@@ -1,11 +1,11 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import update_forward_refs
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
class ForLoopBlockYaml(UniversalBaseModel):
@@ -27,6 +27,6 @@ class ForLoopBlockYaml(UniversalBaseModel):
extra = pydantic.Extra.allow
from .for_loop_block_yaml_loop_blocks_item import ForLoopBlockYamlLoopBlocksItem # noqa: E402
from .for_loop_block_yaml_loop_blocks_item import ForLoopBlockYamlLoopBlocksItem # noqa: E402, F401, I001
update_forward_refs(ForLoopBlockYaml)

View File

@@ -1,18 +1,18 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import pydantic
import typing_extensions
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from ..core.serialization import FieldMetadata
from .extraction_block_yaml_data_schema import ExtractionBlockYamlDataSchema
from .file_storage_type import FileStorageType
from .file_type import FileType
from .run_engine import RunEngine
from .task_block_yaml_data_schema import TaskBlockYamlDataSchema
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .file_storage_type import FileStorageType
import typing_extensions
from ..core.serialization import FieldMetadata
from .file_type import FileType
from .extraction_block_yaml_data_schema import ExtractionBlockYamlDataSchema
from ..core.pydantic_utilities import update_forward_refs
class ForLoopBlockYamlLoopBlocksItem_Task(UniversalBaseModel):
@@ -71,7 +71,7 @@ class ForLoopBlockYamlLoopBlocksItem_ForLoop(UniversalBaseModel):
extra = pydantic.Extra.allow
from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402
from .for_loop_block_yaml import ForLoopBlockYaml # noqa: E402, F401, I001
class ForLoopBlockYamlLoopBlocksItem_Code(UniversalBaseModel):
@@ -374,6 +374,30 @@ class ForLoopBlockYamlLoopBlocksItem_Wait(UniversalBaseModel):
extra = pydantic.Extra.allow
class ForLoopBlockYamlLoopBlocksItem_HumanInteraction(UniversalBaseModel):
block_type: typing.Literal["human_interaction"] = "human_interaction"
label: str
continue_on_failure: typing.Optional[bool] = None
model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
instructions: typing.Optional[str] = None
positive_descriptor: typing.Optional[str] = None
negative_descriptor: typing.Optional[str] = None
timeout_seconds: int
sender: str
recipients: typing.List[str]
subject: str
body: str
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class ForLoopBlockYamlLoopBlocksItem_FileDownload(UniversalBaseModel):
block_type: typing.Literal["file_download"] = "file_download"
label: str
@@ -501,6 +525,7 @@ ForLoopBlockYamlLoopBlocksItem = typing.Union[
ForLoopBlockYamlLoopBlocksItem_Extraction,
ForLoopBlockYamlLoopBlocksItem_Login,
ForLoopBlockYamlLoopBlocksItem_Wait,
ForLoopBlockYamlLoopBlocksItem_HumanInteraction,
ForLoopBlockYamlLoopBlocksItem_FileDownload,
ForLoopBlockYamlLoopBlocksItem_GotoUrl,
ForLoopBlockYamlLoopBlocksItem_PdfParser,

View File

@@ -1,18 +1,19 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .run_status import RunStatus
from .task_run_response_output import TaskRunResponseOutput
from .file_info import FileInfo
import datetime as dt
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .file_info import FileInfo
from .run_status import RunStatus
from .script_run_response import ScriptRunResponse
from .task_run_request import TaskRunRequest
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .workflow_run_response_output import WorkflowRunResponseOutput
from .task_run_response_output import TaskRunResponseOutput
from .workflow_run_request import WorkflowRunRequest
from .workflow_run_response_output import WorkflowRunResponseOutput
class GetRunResponse_TaskV1(UniversalBaseModel):

View File

@@ -1,12 +1,13 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .context_parameter import ContextParameter
from .output_parameter import OutputParameter
from __future__ import annotations
import typing
from .http_request_block_parameters_item import HttpRequestBlockParametersItem
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .http_request_block_parameters_item import HttpRequestBlockParametersItem
from .output_parameter import OutputParameter
class HttpRequestBlock(UniversalBaseModel):
@@ -31,3 +32,8 @@ class HttpRequestBlock(UniversalBaseModel):
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
update_forward_refs(HttpRequestBlock)

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from .workflow_parameter_type import WorkflowParameterType
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from ..core.pydantic_utilities import update_forward_refs
from .workflow_parameter_type import WorkflowParameterType
class HttpRequestBlockParametersItem_AwsSecret(UniversalBaseModel):
@@ -172,8 +172,8 @@ class HttpRequestBlockParametersItem_Context(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402
from .context_parameter_source import ContextParameterSource # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
class HttpRequestBlockParametersItem_Credential(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class HttpRequestBlockYaml(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .validation_error import ValidationError
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .validation_error import ValidationError
class HttpValidationError(UniversalBaseModel):

View File

@@ -0,0 +1,75 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .human_interaction_block_data_schema import HumanInteractionBlockDataSchema
from .human_interaction_block_parameters_item import HumanInteractionBlockParametersItem
from .output_parameter import OutputParameter
from .run_engine import RunEngine
class HumanInteractionBlock(UniversalBaseModel):
"""
A block for human/agent interaction.
For the first pass at this, the implicit behaviour is that the user is given a single binary
choice (a go//no-go).
If the human:
- chooses positively, the workflow continues
- chooses negatively, the workflow is terminated
- does not respond within the timeout period, the workflow terminates
"""
label: str
output_parameter: OutputParameter
continue_on_failure: typing.Optional[bool] = None
model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
disable_cache: typing.Optional[bool] = None
task_type: typing.Optional[str] = None
url: typing.Optional[str] = None
title: typing.Optional[str] = None
engine: typing.Optional[RunEngine] = None
complete_criterion: typing.Optional[str] = None
terminate_criterion: typing.Optional[str] = None
navigation_goal: typing.Optional[str] = None
data_extraction_goal: typing.Optional[str] = None
data_schema: typing.Optional[HumanInteractionBlockDataSchema] = None
error_code_mapping: typing.Optional[typing.Dict[str, typing.Optional[str]]] = None
max_retries: typing.Optional[int] = None
max_steps_per_run: typing.Optional[int] = None
parameters: typing.Optional[typing.List[HumanInteractionBlockParametersItem]] = None
complete_on_download: typing.Optional[bool] = None
download_suffix: typing.Optional[str] = None
totp_verification_url: typing.Optional[str] = None
totp_identifier: typing.Optional[str] = None
cache_actions: typing.Optional[bool] = None
complete_verification: typing.Optional[bool] = None
include_action_history_in_verification: typing.Optional[bool] = None
download_timeout: typing.Optional[float] = None
instructions: typing.Optional[str] = None
positive_descriptor: typing.Optional[str] = None
negative_descriptor: typing.Optional[str] = None
timeout_seconds: typing.Optional[int] = None
sender: typing.Optional[str] = None
recipients: typing.Optional[typing.List[str]] = None
subject: typing.Optional[str] = None
body: typing.Optional[str] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
update_forward_refs(HumanInteractionBlock)

View File

@@ -0,0 +1,7 @@
# This file was auto-generated by Fern from our API Definition.
import typing
HumanInteractionBlockDataSchema = typing.Union[
typing.Dict[str, typing.Optional[typing.Any]], typing.List[typing.Optional[typing.Any]], str
]

View File

@@ -0,0 +1,277 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
import datetime as dt
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from .workflow_parameter_type import WorkflowParameterType
class HumanInteractionBlockParametersItem_AwsSecret(UniversalBaseModel):
parameter_type: typing.Literal["aws_secret"] = "aws_secret"
key: str
description: typing.Optional[str] = None
aws_secret_parameter_id: str
workflow_id: str
aws_key: str
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class HumanInteractionBlockParametersItem_AzureSecret(UniversalBaseModel):
parameter_type: typing.Literal["azure_secret"] = "azure_secret"
key: str
description: typing.Optional[str] = None
azure_secret_parameter_id: str
workflow_id: str
azure_key: str
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class HumanInteractionBlockParametersItem_AzureVaultCredential(UniversalBaseModel):
parameter_type: typing.Literal["azure_vault_credential"] = "azure_vault_credential"
key: str
description: typing.Optional[str] = None
azure_vault_credential_parameter_id: str
workflow_id: str
vault_name: str
username_key: str
password_key: str
totp_secret_key: typing.Optional[str] = None
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class HumanInteractionBlockParametersItem_BitwardenCreditCardData(UniversalBaseModel):
parameter_type: typing.Literal["bitwarden_credit_card_data"] = "bitwarden_credit_card_data"
key: str
description: typing.Optional[str] = None
bitwarden_credit_card_data_parameter_id: str
workflow_id: str
bitwarden_client_id_aws_secret_key: str
bitwarden_client_secret_aws_secret_key: str
bitwarden_master_password_aws_secret_key: str
bitwarden_collection_id: str
bitwarden_item_id: str
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class HumanInteractionBlockParametersItem_BitwardenLoginCredential(UniversalBaseModel):
parameter_type: typing.Literal["bitwarden_login_credential"] = "bitwarden_login_credential"
key: str
description: typing.Optional[str] = None
bitwarden_login_credential_parameter_id: str
workflow_id: str
bitwarden_client_id_aws_secret_key: str
bitwarden_client_secret_aws_secret_key: str
bitwarden_master_password_aws_secret_key: str
url_parameter_key: typing.Optional[str] = None
bitwarden_collection_id: typing.Optional[str] = None
bitwarden_item_id: typing.Optional[str] = None
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class HumanInteractionBlockParametersItem_BitwardenSensitiveInformation(UniversalBaseModel):
parameter_type: typing.Literal["bitwarden_sensitive_information"] = "bitwarden_sensitive_information"
key: str
description: typing.Optional[str] = None
bitwarden_sensitive_information_parameter_id: str
workflow_id: str
bitwarden_client_id_aws_secret_key: str
bitwarden_client_secret_aws_secret_key: str
bitwarden_master_password_aws_secret_key: str
bitwarden_collection_id: str
bitwarden_identity_key: str
bitwarden_identity_fields: typing.List[str]
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class HumanInteractionBlockParametersItem_Context(UniversalBaseModel):
parameter_type: typing.Literal["context"] = "context"
key: str
description: typing.Optional[str] = None
source: "ContextParameterSource"
value: typing.Optional[ContextParameterValue] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
class HumanInteractionBlockParametersItem_Credential(UniversalBaseModel):
parameter_type: typing.Literal["credential"] = "credential"
key: str
description: typing.Optional[str] = None
credential_parameter_id: str
workflow_id: str
credential_id: str
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class HumanInteractionBlockParametersItem_Onepassword(UniversalBaseModel):
parameter_type: typing.Literal["onepassword"] = "onepassword"
key: str
description: typing.Optional[str] = None
onepassword_credential_parameter_id: str
workflow_id: str
vault_id: str
item_id: str
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class HumanInteractionBlockParametersItem_Output(UniversalBaseModel):
parameter_type: typing.Literal["output"] = "output"
key: str
description: typing.Optional[str] = None
output_parameter_id: str
workflow_id: str
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
class HumanInteractionBlockParametersItem_Workflow(UniversalBaseModel):
parameter_type: typing.Literal["workflow"] = "workflow"
key: str
description: typing.Optional[str] = None
workflow_parameter_id: str
workflow_parameter_type: WorkflowParameterType
workflow_id: str
default_value: typing.Optional[WorkflowParameterDefaultValue] = None
created_at: dt.datetime
modified_at: dt.datetime
deleted_at: typing.Optional[dt.datetime] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow
HumanInteractionBlockParametersItem = typing.Union[
HumanInteractionBlockParametersItem_AwsSecret,
HumanInteractionBlockParametersItem_AzureSecret,
HumanInteractionBlockParametersItem_AzureVaultCredential,
HumanInteractionBlockParametersItem_BitwardenCreditCardData,
HumanInteractionBlockParametersItem_BitwardenLoginCredential,
HumanInteractionBlockParametersItem_BitwardenSensitiveInformation,
HumanInteractionBlockParametersItem_Context,
HumanInteractionBlockParametersItem_Credential,
HumanInteractionBlockParametersItem_Onepassword,
HumanInteractionBlockParametersItem_Output,
HumanInteractionBlockParametersItem_Workflow,
]
update_forward_refs(HumanInteractionBlockParametersItem_Context)

View File

@@ -0,0 +1,29 @@
# This file was auto-generated by Fern from our API Definition.
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class HumanInteractionBlockYaml(UniversalBaseModel):
label: str
continue_on_failure: typing.Optional[bool] = None
model: typing.Optional[typing.Dict[str, typing.Optional[typing.Any]]] = None
instructions: typing.Optional[str] = None
positive_descriptor: typing.Optional[str] = None
negative_descriptor: typing.Optional[str] = None
timeout_seconds: int
sender: str
recipients: typing.List[str]
subject: str
body: str
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
class Config:
frozen = True
smart_union = True
extra = pydantic.Extra.allow

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class InputOrSelectContext(UniversalBaseModel):

View File

@@ -1,14 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .context_parameter import ContextParameter
from .output_parameter import OutputParameter
from __future__ import annotations
import typing
from .run_engine import RunEngine
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .login_block_data_schema import LoginBlockDataSchema
from .login_block_parameters_item import LoginBlockParametersItem
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .output_parameter import OutputParameter
from .run_engine import RunEngine
class LoginBlock(UniversalBaseModel):
@@ -47,3 +48,8 @@ class LoginBlock(UniversalBaseModel):
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
update_forward_refs(LoginBlock)

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from .workflow_parameter_type import WorkflowParameterType
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from ..core.pydantic_utilities import update_forward_refs
from .workflow_parameter_type import WorkflowParameterType
class LoginBlockParametersItem_AwsSecret(UniversalBaseModel):
@@ -172,8 +172,8 @@ class LoginBlockParametersItem_Context(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402
from .context_parameter_source import ContextParameterSource # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
class LoginBlockParametersItem_Credential(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .run_engine import RunEngine
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .run_engine import RunEngine
class LoginBlockYaml(UniversalBaseModel):

View File

@@ -1,14 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
from .context_parameter import ContextParameter
from .output_parameter import OutputParameter
from __future__ import annotations
import typing
from .run_engine import RunEngine
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .navigation_block_data_schema import NavigationBlockDataSchema
from .navigation_block_parameters_item import NavigationBlockParametersItem
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from .output_parameter import OutputParameter
from .run_engine import RunEngine
class NavigationBlock(UniversalBaseModel):
@@ -47,3 +48,8 @@ class NavigationBlock(UniversalBaseModel):
frozen = True
smart_union = True
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402, F401, I001
update_forward_refs(NavigationBlock)

View File

@@ -1,15 +1,15 @@
# This file was auto-generated by Fern from our API Definition.
from __future__ import annotations
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel, update_forward_refs
from .context_parameter_value import ContextParameterValue
from .workflow_parameter_type import WorkflowParameterType
from .workflow_parameter_default_value import WorkflowParameterDefaultValue
from ..core.pydantic_utilities import update_forward_refs
from .workflow_parameter_type import WorkflowParameterType
class NavigationBlockParametersItem_AwsSecret(UniversalBaseModel):
@@ -172,8 +172,8 @@ class NavigationBlockParametersItem_Context(UniversalBaseModel):
extra = pydantic.Extra.allow
from .context_parameter import ContextParameter # noqa: E402
from .context_parameter_source import ContextParameterSource # noqa: E402
from .context_parameter import ContextParameter # noqa: E402, F401, I001
from .context_parameter_source import ContextParameterSource # noqa: E402, F401, I001
class NavigationBlockParametersItem_Credential(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from .run_engine import RunEngine
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .run_engine import RunEngine
class NavigationBlockYaml(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class NonEmptyCreditCardCredential(UniversalBaseModel):
"""

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import pydantic
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .totp_type import TotpType
from ..core.pydantic_utilities import IS_PYDANTIC_V2
class NonEmptyPasswordCredential(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class OnePasswordCredentialParameter(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class OnePasswordCredentialParameterYaml(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
import datetime as dt
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class OutputParameter(UniversalBaseModel):

View File

@@ -1,9 +1,9 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import typing
from ..core.pydantic_utilities import IS_PYDANTIC_V2
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
class OutputParameterYaml(UniversalBaseModel):

View File

@@ -1,10 +1,10 @@
# This file was auto-generated by Fern from our API Definition.
from ..core.pydantic_utilities import UniversalBaseModel
import pydantic
import typing
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .totp_type import TotpType
from ..core.pydantic_utilities import IS_PYDANTIC_V2
class PasswordCredentialResponse(UniversalBaseModel):

Some files were not shown because too many files have changed in this diff Show More