code0-hercules 1.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- code0_hercules-1.3.0.dist-info/METADATA +79 -0
- code0_hercules-1.3.0.dist-info/RECORD +258 -0
- code0_hercules-1.3.0.dist-info/WHEEL +5 -0
- code0_hercules-1.3.0.dist-info/entry_points.txt +2 -0
- code0_hercules-1.3.0.dist-info/top_level.txt +1 -0
- hercules/__init__.py +81 -0
- hercules/_metadata.py +38 -0
- hercules/_tsgen/convert.mjs +96 -0
- hercules/_tsgen/package-lock.json +366 -0
- hercules/_tsgen/package.json +11 -0
- hercules/_tucana/__init__.py +29 -0
- hercules/_tucana/helpers.py +73 -0
- hercules/action.py +345 -0
- hercules/actions/__init__.py +21 -0
- hercules/actions/execution.py +121 -0
- hercules/actions/flow_execution.py +11 -0
- hercules/actions/flow_update.py +18 -0
- hercules/actions/module_configurations.py +14 -0
- hercules/actions/sub_flow_execution.py +14 -0
- hercules/cli.py +137 -0
- hercules/decorators/__init__.py +0 -0
- hercules/decorators/datatype.py +39 -0
- hercules/decorators/event.py +35 -0
- hercules/decorators/function.py +59 -0
- hercules/decorators/meta.py +82 -0
- hercules/decorators/runtime_event.py +15 -0
- hercules/decorators/runtime_function.py +18 -0
- hercules/definitions/__init__.py +162 -0
- hercules/definitions/cron_action/__init__.py +0 -0
- hercules/definitions/cron_action/data_types/__init__.py +0 -0
- hercules/definitions/cron_action/data_types/cron_day_of_month.py +11 -0
- hercules/definitions/cron_action/data_types/cron_day_of_week.py +11 -0
- hercules/definitions/cron_action/data_types/cron_hour.py +11 -0
- hercules/definitions/cron_action/data_types/cron_minute.py +11 -0
- hercules/definitions/cron_action/data_types/cron_month.py +11 -0
- hercules/definitions/cron_action/runtime_flow_types/__init__.py +0 -0
- hercules/definitions/cron_action/runtime_flow_types/cron.py +19 -0
- hercules/definitions/rest_action/__init__.py +0 -0
- hercules/definitions/rest_action/data_types/__init__.py +0 -0
- hercules/definitions/rest_action/data_types/rest_adapter_input.py +19 -0
- hercules/definitions/rest_action/data_types/rest_auth_type.py +19 -0
- hercules/definitions/rest_action/data_types/rest_auth_value.py +11 -0
- hercules/definitions/rest_action/runtime_flow_types/__init__.py +0 -0
- hercules/definitions/rest_action/runtime_flow_types/rest.py +20 -0
- hercules/definitions/rest_action/runtime_functions/__init__.py +0 -0
- hercules/definitions/rest_action/runtime_functions/rest_control_respond.py +21 -0
- hercules/definitions/taurus_boolean/__init__.py +0 -0
- hercules/definitions/taurus_boolean/data_types/__init__.py +0 -0
- hercules/definitions/taurus_boolean/data_types/boolean.py +11 -0
- hercules/definitions/taurus_boolean/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_boolean/runtime_functions/std_boolean_as_number.py +18 -0
- hercules/definitions/taurus_boolean/runtime_functions/std_boolean_as_text.py +18 -0
- hercules/definitions/taurus_boolean/runtime_functions/std_boolean_from_number.py +18 -0
- hercules/definitions/taurus_boolean/runtime_functions/std_boolean_from_text.py +18 -0
- hercules/definitions/taurus_boolean/runtime_functions/std_boolean_is_equal.py +19 -0
- hercules/definitions/taurus_boolean/runtime_functions/std_boolean_negate.py +18 -0
- hercules/definitions/taurus_color/__init__.py +0 -0
- hercules/definitions/taurus_color/data_types/__init__.py +0 -0
- hercules/definitions/taurus_color/data_types/color.py +17 -0
- hercules/definitions/taurus_color/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_color/runtime_functions/std_color_as_hex.py +18 -0
- hercules/definitions/taurus_color/runtime_functions/std_color_as_hsl.py +18 -0
- hercules/definitions/taurus_color/runtime_functions/std_color_as_rgb.py +18 -0
- hercules/definitions/taurus_color/runtime_functions/std_color_from_hex.py +18 -0
- hercules/definitions/taurus_color/runtime_functions/std_color_from_hsl.py +21 -0
- hercules/definitions/taurus_color/runtime_functions/std_color_from_rgb.py +21 -0
- hercules/definitions/taurus_control/__init__.py +0 -0
- hercules/definitions/taurus_control/data_types/__init__.py +0 -0
- hercules/definitions/taurus_control/data_types/comparator.py +21 -0
- hercules/definitions/taurus_control/data_types/consumer.py +20 -0
- hercules/definitions/taurus_control/data_types/predicate.py +20 -0
- hercules/definitions/taurus_control/data_types/runnable.py +13 -0
- hercules/definitions/taurus_control/data_types/transform.py +20 -0
- hercules/definitions/taurus_control/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_control/runtime_functions/std_control_if.py +19 -0
- hercules/definitions/taurus_control/runtime_functions/std_control_if_else.py +21 -0
- hercules/definitions/taurus_control/runtime_functions/std_control_return.py +18 -0
- hercules/definitions/taurus_control/runtime_functions/std_control_stop.py +16 -0
- hercules/definitions/taurus_control/runtime_functions/std_control_value.py +18 -0
- hercules/definitions/taurus_date/__init__.py +0 -0
- hercules/definitions/taurus_date/data_types/__init__.py +0 -0
- hercules/definitions/taurus_date/data_types/date.py +11 -0
- hercules/definitions/taurus_date/data_types/hour.py +11 -0
- hercules/definitions/taurus_date/data_types/minute.py +11 -0
- hercules/definitions/taurus_date/data_types/month.py +22 -0
- hercules/definitions/taurus_date/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_date/runtime_functions/std_date_format.py +20 -0
- hercules/definitions/taurus_date/runtime_functions/std_date_from.py +24 -0
- hercules/definitions/taurus_date/runtime_functions/std_date_from_text.py +19 -0
- hercules/definitions/taurus_date/runtime_functions/std_date_from_unix.py +18 -0
- hercules/definitions/taurus_date/runtime_functions/std_date_now.py +16 -0
- hercules/definitions/taurus_file/__init__.py +0 -0
- hercules/definitions/taurus_file/data_types/__init__.py +0 -0
- hercules/definitions/taurus_file/data_types/file.py +19 -0
- hercules/definitions/taurus_file/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_file/runtime_functions/std_file_size.py +18 -0
- hercules/definitions/taurus_http/__init__.py +0 -0
- hercules/definitions/taurus_http/data_types/__init__.py +0 -0
- hercules/definitions/taurus_http/data_types/http_auth_place.py +12 -0
- hercules/definitions/taurus_http/data_types/http_auth_type.py +17 -0
- hercules/definitions/taurus_http/data_types/http_auth_value.py +11 -0
- hercules/definitions/taurus_http/data_types/http_method.py +16 -0
- hercules/definitions/taurus_http/data_types/http_payload.py +11 -0
- hercules/definitions/taurus_http/data_types/http_request.py +19 -0
- hercules/definitions/taurus_http/data_types/http_response.py +18 -0
- hercules/definitions/taurus_http/data_types/http_schema.py +31 -0
- hercules/definitions/taurus_http/data_types/http_status_code.py +13 -0
- hercules/definitions/taurus_http/data_types/http_url.py +13 -0
- hercules/definitions/taurus_http/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_http/runtime_functions/http_request_send.py +26 -0
- hercules/definitions/taurus_list/__init__.py +0 -0
- hercules/definitions/taurus_list/data_types/__init__.py +0 -0
- hercules/definitions/taurus_list/data_types/list.py +13 -0
- hercules/definitions/taurus_list/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_at.py +20 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_concat.py +20 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_filter.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_find.py +20 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_find_index.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_find_last.py +20 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_first.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_flat.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_for_each.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_index_of.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_is_empty.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_join.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_last.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_map.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_max.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_min.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_pop.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_push.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_remove.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_reverse.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_size.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_sort.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_sort_reverse.py +19 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_sum.py +18 -0
- hercules/definitions/taurus_list/runtime_functions/std_list_to_unique.py +18 -0
- hercules/definitions/taurus_number/__init__.py +0 -0
- hercules/definitions/taurus_number/data_types/__init__.py +0 -0
- hercules/definitions/taurus_number/data_types/number.py +11 -0
- hercules/definitions/taurus_number/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_abs.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_add.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_arccos.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_arcsin.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_arctan.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_as_text.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_clamp.py +20 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_cos.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_cosh.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_divide.py +20 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_euler.py +16 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_exponential.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_from_text.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_has_digits.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_is_equal.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_is_greater.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_is_less.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_is_positive.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_is_zero.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_ln.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_log.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_max.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_min.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_modulo.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_multiply.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_negate.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_pi.py +16 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_random_number.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_remove_digits.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_root.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_round.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_round_down.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_round_up.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_sin.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_sinh.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_square.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_square_root.py +18 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_subtract.py +19 -0
- hercules/definitions/taurus_number/runtime_functions/std_number_tan.py +18 -0
- hercules/definitions/taurus_object/__init__.py +0 -0
- hercules/definitions/taurus_object/data_types/__init__.py +0 -0
- hercules/definitions/taurus_object/data_types/object.py +13 -0
- hercules/definitions/taurus_object/data_types/type.py +13 -0
- hercules/definitions/taurus_object/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_object/runtime_functions/std_object_contains_key.py +19 -0
- hercules/definitions/taurus_object/runtime_functions/std_object_get.py +19 -0
- hercules/definitions/taurus_object/runtime_functions/std_object_keys.py +18 -0
- hercules/definitions/taurus_object/runtime_functions/std_object_set.py +20 -0
- hercules/definitions/taurus_object/runtime_functions/std_object_size.py +18 -0
- hercules/definitions/taurus_text/__init__.py +0 -0
- hercules/definitions/taurus_text/data_types/__init__.py +0 -0
- hercules/definitions/taurus_text/data_types/text.py +11 -0
- hercules/definitions/taurus_text/data_types/text_encoding.py +13 -0
- hercules/definitions/taurus_text/runtime_functions/__init__.py +0 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_append.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_as_bytes.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_at.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_byte_size.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_capitalize.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_chars.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_contains.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_decode.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_encode.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_ends_with.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_from_ascii.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_hex.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_index_of.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_insert.py +20 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_is_equal.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_length.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_lowercase.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_octal.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_prepend.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_remove.py +20 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_replace.py +20 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_replace_first.py +21 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_replace_last.py +20 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_reverse.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_split.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_starts_with.py +19 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_swapcase.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_to_ascii.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_trim.py +18 -0
- hercules/definitions/taurus_text/runtime_functions/std_text_uppercase.py +18 -0
- hercules/events.py +23 -0
- hercules/internal/__init__.py +0 -0
- hercules/internal/connection.py +37 -0
- hercules/internal/literal.py +113 -0
- hercules/internal/module_builder.py +261 -0
- hercules/internal/pydantic_codegen.py +82 -0
- hercules/internal/schema.py +158 -0
- hercules/internal/tsgen.py +93 -0
- hercules/manager/__init__.py +0 -0
- hercules/manager/base.py +73 -0
- hercules/manager/config.py +45 -0
- hercules/manager/datatype.py +8 -0
- hercules/manager/event.py +8 -0
- hercules/manager/flow.py +12 -0
- hercules/manager/function.py +8 -0
- hercules/manager/runtime_event.py +8 -0
- hercules/manager/runtime_function.py +8 -0
- hercules/map/__init__.py +0 -0
- hercules/map/datatype.py +41 -0
- hercules/map/event.py +74 -0
- hercules/map/function.py +76 -0
- hercules/map/runtime_event.py +43 -0
- hercules/map/runtime_function.py +64 -0
- hercules/models/__init__.py +0 -0
- hercules/models/datatype.py +49 -0
- hercules/models/event.py +35 -0
- hercules/models/function.py +37 -0
- hercules/models/runtime_event.py +29 -0
- hercules/models/runtime_function.py +33 -0
- hercules/schema.py +38 -0
- hercules/types.py +88 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""Runtime function mapping (port of ``src/map/runtime_function.map.ts``)."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from dataclasses import replace
|
|
5
|
+
|
|
6
|
+
from hercules._metadata import get_metadata
|
|
7
|
+
from hercules.models.function import FunctionParameterProps
|
|
8
|
+
from hercules.models.runtime_function import RuntimeFunctionProps
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _fill_parameter(param: FunctionParameterProps) -> FunctionParameterProps:
|
|
12
|
+
return replace(
|
|
13
|
+
param,
|
|
14
|
+
name=param.name or [],
|
|
15
|
+
description=param.description or [],
|
|
16
|
+
documentation=param.documentation or [],
|
|
17
|
+
hidden=param.hidden or False,
|
|
18
|
+
optional=param.optional or False,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def runtime_function_map(klass: type) -> RuntimeFunctionProps:
|
|
23
|
+
identifier = get_metadata("hercules:identifier", klass)
|
|
24
|
+
runtime_parameters = get_metadata("hercules:function_parameters", klass) or []
|
|
25
|
+
name = get_metadata("hercules:name", klass) or []
|
|
26
|
+
display_message = get_metadata("hercules:display_message", klass) or []
|
|
27
|
+
description = get_metadata("hercules:description", klass) or []
|
|
28
|
+
deprecation_message = get_metadata("hercules:deprecation_message", klass) or []
|
|
29
|
+
alias = get_metadata("hercules:alias", klass) or []
|
|
30
|
+
documentation = get_metadata("hercules:documentation", klass) or []
|
|
31
|
+
signature = get_metadata("hercules:signature", klass)
|
|
32
|
+
display_icon = get_metadata("hercules:display_icon", klass) or ""
|
|
33
|
+
throws_error = get_metadata("hercules:throws_error", klass) or False
|
|
34
|
+
design = get_metadata("hercules:design", klass)
|
|
35
|
+
|
|
36
|
+
if not identifier:
|
|
37
|
+
raise ValueError(
|
|
38
|
+
f"Runtime function class {klass.__name__} is missing an identifier. "
|
|
39
|
+
f'Add @Identifier("your_identifier") to the class.'
|
|
40
|
+
)
|
|
41
|
+
if not signature:
|
|
42
|
+
raise ValueError(
|
|
43
|
+
f"Runtime function class {klass.__name__} is missing a signature. "
|
|
44
|
+
f'Add @Signature("(param1: TYPE_1): RETURN_TYPE") to the class.'
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
instance = klass()
|
|
48
|
+
handler = instance.run
|
|
49
|
+
|
|
50
|
+
return RuntimeFunctionProps(
|
|
51
|
+
runtime_name=identifier,
|
|
52
|
+
signature=signature,
|
|
53
|
+
throws_error=throws_error,
|
|
54
|
+
name=name,
|
|
55
|
+
description=description,
|
|
56
|
+
documentation=documentation,
|
|
57
|
+
deprecation_message=deprecation_message,
|
|
58
|
+
display_message=display_message,
|
|
59
|
+
alias=alias,
|
|
60
|
+
display_icon=display_icon or "tabler:note",
|
|
61
|
+
design=design,
|
|
62
|
+
parameters=[_fill_parameter(p) for p in runtime_parameters],
|
|
63
|
+
handler=handler,
|
|
64
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Data type models (port of ``src/models/datatype.model.ts``)."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from typing import List, Optional
|
|
5
|
+
|
|
6
|
+
from hercules.schema import Schema
|
|
7
|
+
from hercules.internal.schema import pydantic_to_rules, pydantic_to_type_string
|
|
8
|
+
from hercules.types import Translation
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class DataTypeProps:
|
|
12
|
+
"""A resolved data type definition.
|
|
13
|
+
|
|
14
|
+
``type`` is computed lazily from the schema so that errors (e.g. a recursive
|
|
15
|
+
schema that cannot be inlined) surface only when the type string is read.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(
|
|
19
|
+
self,
|
|
20
|
+
identifier: str,
|
|
21
|
+
schema: Schema,
|
|
22
|
+
name: Optional[List[Translation]] = None,
|
|
23
|
+
display_message: Optional[List[Translation]] = None,
|
|
24
|
+
alias: Optional[List[Translation]] = None,
|
|
25
|
+
generic_keys: Optional[List[str]] = None,
|
|
26
|
+
type_string: Optional[str] = None,
|
|
27
|
+
) -> None:
|
|
28
|
+
self.identifier = identifier
|
|
29
|
+
self.schema = schema
|
|
30
|
+
self.name = name or []
|
|
31
|
+
self.display_message = display_message or []
|
|
32
|
+
self.alias = alias or []
|
|
33
|
+
self.generic_keys = generic_keys or []
|
|
34
|
+
# ``type_string`` is an explicit TypeScript type to emit verbatim. The
|
|
35
|
+
# generated built-in definitions use it to keep cross-data-type identifier
|
|
36
|
+
# references byte-exact; user-authored data types leave it unset and the
|
|
37
|
+
# type is derived from the Pydantic schema instead.
|
|
38
|
+
self._type_string = type_string
|
|
39
|
+
self.rules = pydantic_to_rules(schema)
|
|
40
|
+
|
|
41
|
+
@property
|
|
42
|
+
def type(self) -> str:
|
|
43
|
+
if self._type_string is not None:
|
|
44
|
+
return self._type_string
|
|
45
|
+
return pydantic_to_type_string(self.schema)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class DataTypeRunnable:
|
|
49
|
+
"""Base class for data type definitions."""
|
hercules/models/event.py
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"""Event (flow type) models (port of ``src/models/event.model.ts``)."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import List, Optional, Union
|
|
6
|
+
|
|
7
|
+
from hercules._tucana.helpers import PlainValue
|
|
8
|
+
from hercules.types import FlowTypeSetting_UniquenessScope, Translation
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class EventSettingProps:
|
|
13
|
+
identifier: str
|
|
14
|
+
unique: Optional[Union[int, str]] = None
|
|
15
|
+
linked_data_type_identifiers: Optional[List[str]] = None
|
|
16
|
+
default_value: Optional[PlainValue] = None
|
|
17
|
+
name: Optional[List[Translation]] = None
|
|
18
|
+
description: Optional[List[Translation]] = None
|
|
19
|
+
optional: Optional[bool] = None
|
|
20
|
+
hidden: Optional[bool] = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass
|
|
24
|
+
class EventModel:
|
|
25
|
+
identifier: str
|
|
26
|
+
signature: str
|
|
27
|
+
settings: Optional[List[EventSettingProps]] = None
|
|
28
|
+
editable: Optional[bool] = None
|
|
29
|
+
name: Optional[List[Translation]] = None
|
|
30
|
+
description: Optional[List[Translation]] = None
|
|
31
|
+
documentation: Optional[List[Translation]] = None
|
|
32
|
+
display_message: Optional[List[Translation]] = None
|
|
33
|
+
alias: Optional[List[Translation]] = None
|
|
34
|
+
display_icon: Optional[str] = None
|
|
35
|
+
runtime_identifier: Optional[str] = None
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"""Function definition models (port of ``src/models/function.model.ts``)."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from typing import List, Optional
|
|
6
|
+
|
|
7
|
+
from hercules._tucana.helpers import PlainValue
|
|
8
|
+
from hercules.types import Translation
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass
|
|
12
|
+
class FunctionParameterProps:
|
|
13
|
+
runtime_name: str
|
|
14
|
+
default_value: Optional[PlainValue] = None
|
|
15
|
+
name: Optional[List[Translation]] = None
|
|
16
|
+
description: Optional[List[Translation]] = None
|
|
17
|
+
documentation: Optional[List[Translation]] = None
|
|
18
|
+
hidden: Optional[bool] = None
|
|
19
|
+
optional: Optional[bool] = None
|
|
20
|
+
runtime_definition_name: Optional[str] = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
@dataclass
|
|
24
|
+
class FunctionProps:
|
|
25
|
+
runtime_definition_name: str
|
|
26
|
+
runtime_name: str
|
|
27
|
+
signature: str
|
|
28
|
+
parameters: Optional[List[FunctionParameterProps]] = None
|
|
29
|
+
throws_error: Optional[bool] = None
|
|
30
|
+
name: Optional[List[Translation]] = None
|
|
31
|
+
description: Optional[List[Translation]] = None
|
|
32
|
+
documentation: Optional[List[Translation]] = None
|
|
33
|
+
deprecation_message: Optional[List[Translation]] = None
|
|
34
|
+
display_message: Optional[List[Translation]] = None
|
|
35
|
+
alias: Optional[List[Translation]] = None
|
|
36
|
+
display_icon: Optional[str] = None
|
|
37
|
+
design: Optional[str] = None
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"""Runtime event (runtime flow type) models.
|
|
2
|
+
|
|
3
|
+
Port of ``src/models/runtime_event.model.ts``.
|
|
4
|
+
"""
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from typing import List, Optional
|
|
9
|
+
|
|
10
|
+
from hercules.models.event import EventSettingProps
|
|
11
|
+
from hercules.types import Translation
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class RuntimeEventRunnable:
|
|
15
|
+
"""Base class for runtime events (runtime flow types)."""
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class RuntimeEventProps:
|
|
20
|
+
identifier: str
|
|
21
|
+
signature: str
|
|
22
|
+
settings: Optional[List[EventSettingProps]] = None
|
|
23
|
+
editable: Optional[bool] = None
|
|
24
|
+
name: Optional[List[Translation]] = None
|
|
25
|
+
description: Optional[List[Translation]] = None
|
|
26
|
+
documentation: Optional[List[Translation]] = None
|
|
27
|
+
display_message: Optional[List[Translation]] = None
|
|
28
|
+
alias: Optional[List[Translation]] = None
|
|
29
|
+
display_icon: Optional[str] = None
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"""Runtime function models (port of ``src/models/runtime_function.model.ts``)."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass
|
|
5
|
+
from typing import Callable, List, Optional
|
|
6
|
+
|
|
7
|
+
from hercules._tucana.helpers import PlainValue
|
|
8
|
+
from hercules.models.function import FunctionParameterProps
|
|
9
|
+
from hercules.types import Translation
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class RuntimeFunctionRunnable:
|
|
13
|
+
"""Base class for runtime functions. Subclasses implement ``run``."""
|
|
14
|
+
|
|
15
|
+
def run(self, *args): # pragma: no cover - overridden by subclasses
|
|
16
|
+
raise NotImplementedError
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
@dataclass
|
|
20
|
+
class RuntimeFunctionProps:
|
|
21
|
+
runtime_name: str
|
|
22
|
+
signature: str
|
|
23
|
+
handler: Callable[..., PlainValue]
|
|
24
|
+
parameters: Optional[List[FunctionParameterProps]] = None
|
|
25
|
+
throws_error: Optional[bool] = None
|
|
26
|
+
name: Optional[List[Translation]] = None
|
|
27
|
+
description: Optional[List[Translation]] = None
|
|
28
|
+
documentation: Optional[List[Translation]] = None
|
|
29
|
+
deprecation_message: Optional[List[Translation]] = None
|
|
30
|
+
display_message: Optional[List[Translation]] = None
|
|
31
|
+
alias: Optional[List[Translation]] = None
|
|
32
|
+
display_icon: Optional[str] = None
|
|
33
|
+
design: Optional[str] = None
|
hercules/schema.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Data-type schema surface, built on Pydantic v2.
|
|
2
|
+
|
|
3
|
+
Data types are described with plain Pydantic models. Object shapes are ordinary
|
|
4
|
+
``BaseModel`` subclasses; scalar/primitive shapes (a bare ``number``, a
|
|
5
|
+
constrained ``string``, ``Record<string, unknown>``, ...) use ``RootModel``. The
|
|
6
|
+
model is turned into a TypeScript type string and validation rules by
|
|
7
|
+
:mod:`hercules.internal.schema`.
|
|
8
|
+
|
|
9
|
+
Example::
|
|
10
|
+
|
|
11
|
+
from hercules.schema import BaseModel, RootModel, Annotated, StringConstraints
|
|
12
|
+
|
|
13
|
+
class Email(RootModel[Annotated[str, StringConstraints(pattern=r"^[^@]+@[^@]+$")]]):
|
|
14
|
+
pass
|
|
15
|
+
|
|
16
|
+
class User(BaseModel):
|
|
17
|
+
name: str
|
|
18
|
+
email: Email
|
|
19
|
+
"""
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
from typing import Type
|
|
23
|
+
|
|
24
|
+
from typing_extensions import Annotated
|
|
25
|
+
from pydantic import BaseModel, RootModel, Field, StringConstraints, ConfigDict
|
|
26
|
+
|
|
27
|
+
# A data-type schema is any Pydantic model class (``RootModel`` is a ``BaseModel``).
|
|
28
|
+
Schema = Type[BaseModel]
|
|
29
|
+
|
|
30
|
+
__all__ = [
|
|
31
|
+
"Schema",
|
|
32
|
+
"BaseModel",
|
|
33
|
+
"RootModel",
|
|
34
|
+
"Field",
|
|
35
|
+
"StringConstraints",
|
|
36
|
+
"ConfigDict",
|
|
37
|
+
"Annotated",
|
|
38
|
+
]
|
hercules/types.py
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"""Shared types for the hercules SDK (port of ``src/types.ts``)."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from typing import Any, Awaitable, Callable, List, Optional, Protocol, Union
|
|
6
|
+
|
|
7
|
+
from hercules._tucana.helpers import PlainValue
|
|
8
|
+
from tucana.generated.shared.flow_type_pb2 import FlowTypeSetting
|
|
9
|
+
from tucana.generated.shared.runtime_flow_type_pb2 import RuntimeFlowTypeSetting
|
|
10
|
+
from tucana.generated.shared.struct_pb2 import Struct
|
|
11
|
+
|
|
12
|
+
# Re-export the uniqueness scope enums (mirror the TS re-exports).
|
|
13
|
+
FlowTypeSetting_UniquenessScope = FlowTypeSetting.UniquenessScope
|
|
14
|
+
RuntimeFlowTypeSetting_UniquenessScope = RuntimeFlowTypeSetting.UniquenessScope
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
"PlainValue",
|
|
18
|
+
"Struct",
|
|
19
|
+
"FlowTypeSetting_UniquenessScope",
|
|
20
|
+
"RuntimeFlowTypeSetting_UniquenessScope",
|
|
21
|
+
"Translation",
|
|
22
|
+
"SubFlow",
|
|
23
|
+
"FunctionContext",
|
|
24
|
+
"ProjectConfiguration",
|
|
25
|
+
"ConfigurationDefinition",
|
|
26
|
+
"RuntimeError",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class Translation:
|
|
32
|
+
code: str
|
|
33
|
+
content: str
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class SubFlow(Protocol):
|
|
37
|
+
"""A sub flow passed as a parameter (e.g. a CONSUMER).
|
|
38
|
+
|
|
39
|
+
Call it with the sub flow's parameters to execute it and await its result.
|
|
40
|
+
The input/output schema declared for the sub flow by the caller are exposed
|
|
41
|
+
via :attr:`input_schema` / :attr:`output_schema` (either may be ``None`` if
|
|
42
|
+
the caller omitted it).
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
input_schema: Optional[Struct]
|
|
46
|
+
output_schema: Optional[Struct]
|
|
47
|
+
|
|
48
|
+
def __call__(self, *args: PlainValue) -> Awaitable[PlainValue]: ...
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass
|
|
52
|
+
class ProjectConfiguration:
|
|
53
|
+
project_id: int
|
|
54
|
+
config_values: List[dict] = field(default_factory=list)
|
|
55
|
+
find_config: Callable[[str], Optional[PlainValue]] = lambda identifier: None
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@dataclass
|
|
59
|
+
class FunctionContext:
|
|
60
|
+
project_id: int
|
|
61
|
+
execution_id: str
|
|
62
|
+
matched_config: ProjectConfiguration
|
|
63
|
+
execute_flow: Callable[..., Awaitable[PlainValue]]
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@dataclass
|
|
67
|
+
class ConfigurationDefinition:
|
|
68
|
+
identifier: str
|
|
69
|
+
type: str
|
|
70
|
+
name: Optional[List[Translation]] = None
|
|
71
|
+
description: Optional[List[Translation]] = None
|
|
72
|
+
hidden: Optional[bool] = None
|
|
73
|
+
optional: Optional[bool] = None
|
|
74
|
+
linked_data_types: Optional[List[str]] = None
|
|
75
|
+
default_value: Optional[PlainValue] = None
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class RuntimeError(Exception):
|
|
79
|
+
"""Raised (or reported) when a runtime function fails with a known code."""
|
|
80
|
+
|
|
81
|
+
def __init__(self, code: str, description: Optional[str] = None) -> None:
|
|
82
|
+
message = f"Runtime error with code {code} occurred." + (
|
|
83
|
+
f" Description: {description}" if description else ""
|
|
84
|
+
)
|
|
85
|
+
super().__init__(message)
|
|
86
|
+
self.name = "RuntimeErrorException"
|
|
87
|
+
self.code = code
|
|
88
|
+
self.description = description
|