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.
Files changed (258) hide show
  1. code0_hercules-1.3.0.dist-info/METADATA +79 -0
  2. code0_hercules-1.3.0.dist-info/RECORD +258 -0
  3. code0_hercules-1.3.0.dist-info/WHEEL +5 -0
  4. code0_hercules-1.3.0.dist-info/entry_points.txt +2 -0
  5. code0_hercules-1.3.0.dist-info/top_level.txt +1 -0
  6. hercules/__init__.py +81 -0
  7. hercules/_metadata.py +38 -0
  8. hercules/_tsgen/convert.mjs +96 -0
  9. hercules/_tsgen/package-lock.json +366 -0
  10. hercules/_tsgen/package.json +11 -0
  11. hercules/_tucana/__init__.py +29 -0
  12. hercules/_tucana/helpers.py +73 -0
  13. hercules/action.py +345 -0
  14. hercules/actions/__init__.py +21 -0
  15. hercules/actions/execution.py +121 -0
  16. hercules/actions/flow_execution.py +11 -0
  17. hercules/actions/flow_update.py +18 -0
  18. hercules/actions/module_configurations.py +14 -0
  19. hercules/actions/sub_flow_execution.py +14 -0
  20. hercules/cli.py +137 -0
  21. hercules/decorators/__init__.py +0 -0
  22. hercules/decorators/datatype.py +39 -0
  23. hercules/decorators/event.py +35 -0
  24. hercules/decorators/function.py +59 -0
  25. hercules/decorators/meta.py +82 -0
  26. hercules/decorators/runtime_event.py +15 -0
  27. hercules/decorators/runtime_function.py +18 -0
  28. hercules/definitions/__init__.py +162 -0
  29. hercules/definitions/cron_action/__init__.py +0 -0
  30. hercules/definitions/cron_action/data_types/__init__.py +0 -0
  31. hercules/definitions/cron_action/data_types/cron_day_of_month.py +11 -0
  32. hercules/definitions/cron_action/data_types/cron_day_of_week.py +11 -0
  33. hercules/definitions/cron_action/data_types/cron_hour.py +11 -0
  34. hercules/definitions/cron_action/data_types/cron_minute.py +11 -0
  35. hercules/definitions/cron_action/data_types/cron_month.py +11 -0
  36. hercules/definitions/cron_action/runtime_flow_types/__init__.py +0 -0
  37. hercules/definitions/cron_action/runtime_flow_types/cron.py +19 -0
  38. hercules/definitions/rest_action/__init__.py +0 -0
  39. hercules/definitions/rest_action/data_types/__init__.py +0 -0
  40. hercules/definitions/rest_action/data_types/rest_adapter_input.py +19 -0
  41. hercules/definitions/rest_action/data_types/rest_auth_type.py +19 -0
  42. hercules/definitions/rest_action/data_types/rest_auth_value.py +11 -0
  43. hercules/definitions/rest_action/runtime_flow_types/__init__.py +0 -0
  44. hercules/definitions/rest_action/runtime_flow_types/rest.py +20 -0
  45. hercules/definitions/rest_action/runtime_functions/__init__.py +0 -0
  46. hercules/definitions/rest_action/runtime_functions/rest_control_respond.py +21 -0
  47. hercules/definitions/taurus_boolean/__init__.py +0 -0
  48. hercules/definitions/taurus_boolean/data_types/__init__.py +0 -0
  49. hercules/definitions/taurus_boolean/data_types/boolean.py +11 -0
  50. hercules/definitions/taurus_boolean/runtime_functions/__init__.py +0 -0
  51. hercules/definitions/taurus_boolean/runtime_functions/std_boolean_as_number.py +18 -0
  52. hercules/definitions/taurus_boolean/runtime_functions/std_boolean_as_text.py +18 -0
  53. hercules/definitions/taurus_boolean/runtime_functions/std_boolean_from_number.py +18 -0
  54. hercules/definitions/taurus_boolean/runtime_functions/std_boolean_from_text.py +18 -0
  55. hercules/definitions/taurus_boolean/runtime_functions/std_boolean_is_equal.py +19 -0
  56. hercules/definitions/taurus_boolean/runtime_functions/std_boolean_negate.py +18 -0
  57. hercules/definitions/taurus_color/__init__.py +0 -0
  58. hercules/definitions/taurus_color/data_types/__init__.py +0 -0
  59. hercules/definitions/taurus_color/data_types/color.py +17 -0
  60. hercules/definitions/taurus_color/runtime_functions/__init__.py +0 -0
  61. hercules/definitions/taurus_color/runtime_functions/std_color_as_hex.py +18 -0
  62. hercules/definitions/taurus_color/runtime_functions/std_color_as_hsl.py +18 -0
  63. hercules/definitions/taurus_color/runtime_functions/std_color_as_rgb.py +18 -0
  64. hercules/definitions/taurus_color/runtime_functions/std_color_from_hex.py +18 -0
  65. hercules/definitions/taurus_color/runtime_functions/std_color_from_hsl.py +21 -0
  66. hercules/definitions/taurus_color/runtime_functions/std_color_from_rgb.py +21 -0
  67. hercules/definitions/taurus_control/__init__.py +0 -0
  68. hercules/definitions/taurus_control/data_types/__init__.py +0 -0
  69. hercules/definitions/taurus_control/data_types/comparator.py +21 -0
  70. hercules/definitions/taurus_control/data_types/consumer.py +20 -0
  71. hercules/definitions/taurus_control/data_types/predicate.py +20 -0
  72. hercules/definitions/taurus_control/data_types/runnable.py +13 -0
  73. hercules/definitions/taurus_control/data_types/transform.py +20 -0
  74. hercules/definitions/taurus_control/runtime_functions/__init__.py +0 -0
  75. hercules/definitions/taurus_control/runtime_functions/std_control_if.py +19 -0
  76. hercules/definitions/taurus_control/runtime_functions/std_control_if_else.py +21 -0
  77. hercules/definitions/taurus_control/runtime_functions/std_control_return.py +18 -0
  78. hercules/definitions/taurus_control/runtime_functions/std_control_stop.py +16 -0
  79. hercules/definitions/taurus_control/runtime_functions/std_control_value.py +18 -0
  80. hercules/definitions/taurus_date/__init__.py +0 -0
  81. hercules/definitions/taurus_date/data_types/__init__.py +0 -0
  82. hercules/definitions/taurus_date/data_types/date.py +11 -0
  83. hercules/definitions/taurus_date/data_types/hour.py +11 -0
  84. hercules/definitions/taurus_date/data_types/minute.py +11 -0
  85. hercules/definitions/taurus_date/data_types/month.py +22 -0
  86. hercules/definitions/taurus_date/runtime_functions/__init__.py +0 -0
  87. hercules/definitions/taurus_date/runtime_functions/std_date_format.py +20 -0
  88. hercules/definitions/taurus_date/runtime_functions/std_date_from.py +24 -0
  89. hercules/definitions/taurus_date/runtime_functions/std_date_from_text.py +19 -0
  90. hercules/definitions/taurus_date/runtime_functions/std_date_from_unix.py +18 -0
  91. hercules/definitions/taurus_date/runtime_functions/std_date_now.py +16 -0
  92. hercules/definitions/taurus_file/__init__.py +0 -0
  93. hercules/definitions/taurus_file/data_types/__init__.py +0 -0
  94. hercules/definitions/taurus_file/data_types/file.py +19 -0
  95. hercules/definitions/taurus_file/runtime_functions/__init__.py +0 -0
  96. hercules/definitions/taurus_file/runtime_functions/std_file_size.py +18 -0
  97. hercules/definitions/taurus_http/__init__.py +0 -0
  98. hercules/definitions/taurus_http/data_types/__init__.py +0 -0
  99. hercules/definitions/taurus_http/data_types/http_auth_place.py +12 -0
  100. hercules/definitions/taurus_http/data_types/http_auth_type.py +17 -0
  101. hercules/definitions/taurus_http/data_types/http_auth_value.py +11 -0
  102. hercules/definitions/taurus_http/data_types/http_method.py +16 -0
  103. hercules/definitions/taurus_http/data_types/http_payload.py +11 -0
  104. hercules/definitions/taurus_http/data_types/http_request.py +19 -0
  105. hercules/definitions/taurus_http/data_types/http_response.py +18 -0
  106. hercules/definitions/taurus_http/data_types/http_schema.py +31 -0
  107. hercules/definitions/taurus_http/data_types/http_status_code.py +13 -0
  108. hercules/definitions/taurus_http/data_types/http_url.py +13 -0
  109. hercules/definitions/taurus_http/runtime_functions/__init__.py +0 -0
  110. hercules/definitions/taurus_http/runtime_functions/http_request_send.py +26 -0
  111. hercules/definitions/taurus_list/__init__.py +0 -0
  112. hercules/definitions/taurus_list/data_types/__init__.py +0 -0
  113. hercules/definitions/taurus_list/data_types/list.py +13 -0
  114. hercules/definitions/taurus_list/runtime_functions/__init__.py +0 -0
  115. hercules/definitions/taurus_list/runtime_functions/std_list_at.py +20 -0
  116. hercules/definitions/taurus_list/runtime_functions/std_list_concat.py +20 -0
  117. hercules/definitions/taurus_list/runtime_functions/std_list_filter.py +19 -0
  118. hercules/definitions/taurus_list/runtime_functions/std_list_find.py +20 -0
  119. hercules/definitions/taurus_list/runtime_functions/std_list_find_index.py +19 -0
  120. hercules/definitions/taurus_list/runtime_functions/std_list_find_last.py +20 -0
  121. hercules/definitions/taurus_list/runtime_functions/std_list_first.py +18 -0
  122. hercules/definitions/taurus_list/runtime_functions/std_list_flat.py +18 -0
  123. hercules/definitions/taurus_list/runtime_functions/std_list_for_each.py +19 -0
  124. hercules/definitions/taurus_list/runtime_functions/std_list_index_of.py +19 -0
  125. hercules/definitions/taurus_list/runtime_functions/std_list_is_empty.py +18 -0
  126. hercules/definitions/taurus_list/runtime_functions/std_list_join.py +19 -0
  127. hercules/definitions/taurus_list/runtime_functions/std_list_last.py +18 -0
  128. hercules/definitions/taurus_list/runtime_functions/std_list_map.py +19 -0
  129. hercules/definitions/taurus_list/runtime_functions/std_list_max.py +18 -0
  130. hercules/definitions/taurus_list/runtime_functions/std_list_min.py +18 -0
  131. hercules/definitions/taurus_list/runtime_functions/std_list_pop.py +18 -0
  132. hercules/definitions/taurus_list/runtime_functions/std_list_push.py +19 -0
  133. hercules/definitions/taurus_list/runtime_functions/std_list_remove.py +19 -0
  134. hercules/definitions/taurus_list/runtime_functions/std_list_reverse.py +18 -0
  135. hercules/definitions/taurus_list/runtime_functions/std_list_size.py +18 -0
  136. hercules/definitions/taurus_list/runtime_functions/std_list_sort.py +19 -0
  137. hercules/definitions/taurus_list/runtime_functions/std_list_sort_reverse.py +19 -0
  138. hercules/definitions/taurus_list/runtime_functions/std_list_sum.py +18 -0
  139. hercules/definitions/taurus_list/runtime_functions/std_list_to_unique.py +18 -0
  140. hercules/definitions/taurus_number/__init__.py +0 -0
  141. hercules/definitions/taurus_number/data_types/__init__.py +0 -0
  142. hercules/definitions/taurus_number/data_types/number.py +11 -0
  143. hercules/definitions/taurus_number/runtime_functions/__init__.py +0 -0
  144. hercules/definitions/taurus_number/runtime_functions/std_number_abs.py +18 -0
  145. hercules/definitions/taurus_number/runtime_functions/std_number_add.py +19 -0
  146. hercules/definitions/taurus_number/runtime_functions/std_number_arccos.py +18 -0
  147. hercules/definitions/taurus_number/runtime_functions/std_number_arcsin.py +18 -0
  148. hercules/definitions/taurus_number/runtime_functions/std_number_arctan.py +18 -0
  149. hercules/definitions/taurus_number/runtime_functions/std_number_as_text.py +18 -0
  150. hercules/definitions/taurus_number/runtime_functions/std_number_clamp.py +20 -0
  151. hercules/definitions/taurus_number/runtime_functions/std_number_cos.py +18 -0
  152. hercules/definitions/taurus_number/runtime_functions/std_number_cosh.py +18 -0
  153. hercules/definitions/taurus_number/runtime_functions/std_number_divide.py +20 -0
  154. hercules/definitions/taurus_number/runtime_functions/std_number_euler.py +16 -0
  155. hercules/definitions/taurus_number/runtime_functions/std_number_exponential.py +19 -0
  156. hercules/definitions/taurus_number/runtime_functions/std_number_from_text.py +18 -0
  157. hercules/definitions/taurus_number/runtime_functions/std_number_has_digits.py +18 -0
  158. hercules/definitions/taurus_number/runtime_functions/std_number_is_equal.py +19 -0
  159. hercules/definitions/taurus_number/runtime_functions/std_number_is_greater.py +19 -0
  160. hercules/definitions/taurus_number/runtime_functions/std_number_is_less.py +19 -0
  161. hercules/definitions/taurus_number/runtime_functions/std_number_is_positive.py +18 -0
  162. hercules/definitions/taurus_number/runtime_functions/std_number_is_zero.py +18 -0
  163. hercules/definitions/taurus_number/runtime_functions/std_number_ln.py +18 -0
  164. hercules/definitions/taurus_number/runtime_functions/std_number_log.py +19 -0
  165. hercules/definitions/taurus_number/runtime_functions/std_number_max.py +19 -0
  166. hercules/definitions/taurus_number/runtime_functions/std_number_min.py +19 -0
  167. hercules/definitions/taurus_number/runtime_functions/std_number_modulo.py +19 -0
  168. hercules/definitions/taurus_number/runtime_functions/std_number_multiply.py +19 -0
  169. hercules/definitions/taurus_number/runtime_functions/std_number_negate.py +18 -0
  170. hercules/definitions/taurus_number/runtime_functions/std_number_pi.py +16 -0
  171. hercules/definitions/taurus_number/runtime_functions/std_number_random_number.py +19 -0
  172. hercules/definitions/taurus_number/runtime_functions/std_number_remove_digits.py +18 -0
  173. hercules/definitions/taurus_number/runtime_functions/std_number_root.py +19 -0
  174. hercules/definitions/taurus_number/runtime_functions/std_number_round.py +19 -0
  175. hercules/definitions/taurus_number/runtime_functions/std_number_round_down.py +19 -0
  176. hercules/definitions/taurus_number/runtime_functions/std_number_round_up.py +19 -0
  177. hercules/definitions/taurus_number/runtime_functions/std_number_sin.py +18 -0
  178. hercules/definitions/taurus_number/runtime_functions/std_number_sinh.py +18 -0
  179. hercules/definitions/taurus_number/runtime_functions/std_number_square.py +18 -0
  180. hercules/definitions/taurus_number/runtime_functions/std_number_square_root.py +18 -0
  181. hercules/definitions/taurus_number/runtime_functions/std_number_subtract.py +19 -0
  182. hercules/definitions/taurus_number/runtime_functions/std_number_tan.py +18 -0
  183. hercules/definitions/taurus_object/__init__.py +0 -0
  184. hercules/definitions/taurus_object/data_types/__init__.py +0 -0
  185. hercules/definitions/taurus_object/data_types/object.py +13 -0
  186. hercules/definitions/taurus_object/data_types/type.py +13 -0
  187. hercules/definitions/taurus_object/runtime_functions/__init__.py +0 -0
  188. hercules/definitions/taurus_object/runtime_functions/std_object_contains_key.py +19 -0
  189. hercules/definitions/taurus_object/runtime_functions/std_object_get.py +19 -0
  190. hercules/definitions/taurus_object/runtime_functions/std_object_keys.py +18 -0
  191. hercules/definitions/taurus_object/runtime_functions/std_object_set.py +20 -0
  192. hercules/definitions/taurus_object/runtime_functions/std_object_size.py +18 -0
  193. hercules/definitions/taurus_text/__init__.py +0 -0
  194. hercules/definitions/taurus_text/data_types/__init__.py +0 -0
  195. hercules/definitions/taurus_text/data_types/text.py +11 -0
  196. hercules/definitions/taurus_text/data_types/text_encoding.py +13 -0
  197. hercules/definitions/taurus_text/runtime_functions/__init__.py +0 -0
  198. hercules/definitions/taurus_text/runtime_functions/std_text_append.py +19 -0
  199. hercules/definitions/taurus_text/runtime_functions/std_text_as_bytes.py +18 -0
  200. hercules/definitions/taurus_text/runtime_functions/std_text_at.py +19 -0
  201. hercules/definitions/taurus_text/runtime_functions/std_text_byte_size.py +18 -0
  202. hercules/definitions/taurus_text/runtime_functions/std_text_capitalize.py +18 -0
  203. hercules/definitions/taurus_text/runtime_functions/std_text_chars.py +18 -0
  204. hercules/definitions/taurus_text/runtime_functions/std_text_contains.py +19 -0
  205. hercules/definitions/taurus_text/runtime_functions/std_text_decode.py +19 -0
  206. hercules/definitions/taurus_text/runtime_functions/std_text_encode.py +19 -0
  207. hercules/definitions/taurus_text/runtime_functions/std_text_ends_with.py +19 -0
  208. hercules/definitions/taurus_text/runtime_functions/std_text_from_ascii.py +18 -0
  209. hercules/definitions/taurus_text/runtime_functions/std_text_hex.py +18 -0
  210. hercules/definitions/taurus_text/runtime_functions/std_text_index_of.py +19 -0
  211. hercules/definitions/taurus_text/runtime_functions/std_text_insert.py +20 -0
  212. hercules/definitions/taurus_text/runtime_functions/std_text_is_equal.py +19 -0
  213. hercules/definitions/taurus_text/runtime_functions/std_text_length.py +18 -0
  214. hercules/definitions/taurus_text/runtime_functions/std_text_lowercase.py +18 -0
  215. hercules/definitions/taurus_text/runtime_functions/std_text_octal.py +18 -0
  216. hercules/definitions/taurus_text/runtime_functions/std_text_prepend.py +19 -0
  217. hercules/definitions/taurus_text/runtime_functions/std_text_remove.py +20 -0
  218. hercules/definitions/taurus_text/runtime_functions/std_text_replace.py +20 -0
  219. hercules/definitions/taurus_text/runtime_functions/std_text_replace_first.py +21 -0
  220. hercules/definitions/taurus_text/runtime_functions/std_text_replace_last.py +20 -0
  221. hercules/definitions/taurus_text/runtime_functions/std_text_reverse.py +18 -0
  222. hercules/definitions/taurus_text/runtime_functions/std_text_split.py +19 -0
  223. hercules/definitions/taurus_text/runtime_functions/std_text_starts_with.py +19 -0
  224. hercules/definitions/taurus_text/runtime_functions/std_text_swapcase.py +18 -0
  225. hercules/definitions/taurus_text/runtime_functions/std_text_to_ascii.py +18 -0
  226. hercules/definitions/taurus_text/runtime_functions/std_text_trim.py +18 -0
  227. hercules/definitions/taurus_text/runtime_functions/std_text_uppercase.py +18 -0
  228. hercules/events.py +23 -0
  229. hercules/internal/__init__.py +0 -0
  230. hercules/internal/connection.py +37 -0
  231. hercules/internal/literal.py +113 -0
  232. hercules/internal/module_builder.py +261 -0
  233. hercules/internal/pydantic_codegen.py +82 -0
  234. hercules/internal/schema.py +158 -0
  235. hercules/internal/tsgen.py +93 -0
  236. hercules/manager/__init__.py +0 -0
  237. hercules/manager/base.py +73 -0
  238. hercules/manager/config.py +45 -0
  239. hercules/manager/datatype.py +8 -0
  240. hercules/manager/event.py +8 -0
  241. hercules/manager/flow.py +12 -0
  242. hercules/manager/function.py +8 -0
  243. hercules/manager/runtime_event.py +8 -0
  244. hercules/manager/runtime_function.py +8 -0
  245. hercules/map/__init__.py +0 -0
  246. hercules/map/datatype.py +41 -0
  247. hercules/map/event.py +74 -0
  248. hercules/map/function.py +76 -0
  249. hercules/map/runtime_event.py +43 -0
  250. hercules/map/runtime_function.py +64 -0
  251. hercules/models/__init__.py +0 -0
  252. hercules/models/datatype.py +49 -0
  253. hercules/models/event.py +35 -0
  254. hercules/models/function.py +37 -0
  255. hercules/models/runtime_event.py +29 -0
  256. hercules/models/runtime_function.py +33 -0
  257. hercules/schema.py +38 -0
  258. 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."""
@@ -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