StepFunctions: Proper Parser (#7418)
This commit is contained in:
parent
6e0b4c6519
commit
5d4ea2f393
1
.github/workflows/build.yml
vendored
1
.github/workflows/build.yml
vendored
@ -69,6 +69,7 @@ jobs:
|
||||
pip install -r requirements-dev.txt
|
||||
- name: Lint
|
||||
run:
|
||||
mkdir .mypy_cache
|
||||
make lint
|
||||
|
||||
javatest:
|
||||
|
5
.github/workflows/tests_servermode.yml
vendored
5
.github/workflows/tests_servermode.yml
vendored
@ -59,10 +59,11 @@ jobs:
|
||||
- name: "Stop MotoServer"
|
||||
if: always()
|
||||
run: |
|
||||
ls -la
|
||||
docker stop motoserver
|
||||
mkdir serverlogs
|
||||
cp server_output.log serverlogs/server_output.log
|
||||
docker stop motoserver
|
||||
- name: Archive TF logs
|
||||
- name: Archive Server logs
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
|
@ -7731,7 +7731,7 @@
|
||||
|
||||
## stepfunctions
|
||||
<details>
|
||||
<summary>36% implemented</summary>
|
||||
<summary>55% implemented</summary>
|
||||
|
||||
- [ ] create_activity
|
||||
- [X] create_state_machine
|
||||
@ -7742,31 +7742,31 @@
|
||||
- [ ] delete_state_machine_version
|
||||
- [ ] describe_activity
|
||||
- [X] describe_execution
|
||||
- [ ] describe_map_run
|
||||
- [X] describe_map_run
|
||||
- [X] describe_state_machine
|
||||
- [ ] describe_state_machine_alias
|
||||
- [ ] describe_state_machine_for_execution
|
||||
- [X] describe_state_machine_for_execution
|
||||
- [ ] get_activity_task
|
||||
- [X] get_execution_history
|
||||
- [ ] list_activities
|
||||
- [X] list_executions
|
||||
- [ ] list_map_runs
|
||||
- [X] list_map_runs
|
||||
- [ ] list_state_machine_aliases
|
||||
- [ ] list_state_machine_versions
|
||||
- [X] list_state_machines
|
||||
- [X] list_tags_for_resource
|
||||
- [ ] publish_state_machine_version
|
||||
- [ ] redrive_execution
|
||||
- [ ] send_task_failure
|
||||
- [ ] send_task_heartbeat
|
||||
- [ ] send_task_success
|
||||
- [X] send_task_failure
|
||||
- [X] send_task_heartbeat
|
||||
- [X] send_task_success
|
||||
- [X] start_execution
|
||||
- [ ] start_sync_execution
|
||||
- [X] stop_execution
|
||||
- [X] tag_resource
|
||||
- [ ] test_state
|
||||
- [X] untag_resource
|
||||
- [ ] update_map_run
|
||||
- [X] update_map_run
|
||||
- [X] update_state_machine
|
||||
- [ ] update_state_machine_alias
|
||||
</details>
|
||||
|
@ -1,3 +1,6 @@
|
||||
ignore:
|
||||
- "moto/stepfunctions/parser/asl/antlr"
|
||||
|
||||
codecov:
|
||||
notify:
|
||||
# Leave a GitHub comment after all builds have passed
|
||||
|
@ -22,6 +22,7 @@ If you are using the decorators, some options are configurable within the decora
|
||||
"reset_boto3_session": True,
|
||||
},
|
||||
"iam": {"load_aws_managed_policies": False},
|
||||
"stepfunctions": {"execute_state_machine": True},
|
||||
})
|
||||
|
||||
|
||||
|
@ -12,6 +12,8 @@
|
||||
stepfunctions
|
||||
=============
|
||||
|
||||
.. autoclass:: moto.stepfunctions.models.StepFunctionBackend
|
||||
|
||||
|start-h3| Implemented features for this service |end-h3|
|
||||
|
||||
- [ ] create_activity
|
||||
@ -23,58 +25,31 @@ stepfunctions
|
||||
- [ ] delete_state_machine_version
|
||||
- [ ] describe_activity
|
||||
- [X] describe_execution
|
||||
|
||||
The status of every execution is set to 'RUNNING' by default.
|
||||
Set the following environment variable if you want to get a FAILED status back:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
SF_EXECUTION_HISTORY_TYPE=FAILURE
|
||||
|
||||
|
||||
- [ ] describe_map_run
|
||||
- [X] describe_map_run
|
||||
- [X] describe_state_machine
|
||||
- [ ] describe_state_machine_alias
|
||||
- [ ] describe_state_machine_for_execution
|
||||
- [X] describe_state_machine_for_execution
|
||||
- [ ] get_activity_task
|
||||
- [X] get_execution_history
|
||||
|
||||
A static list of successful events is returned by default.
|
||||
Set the following environment variable if you want to get a static list of events for a failed execution:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
SF_EXECUTION_HISTORY_TYPE=FAILURE
|
||||
|
||||
|
||||
- [ ] list_activities
|
||||
- [X] list_executions
|
||||
|
||||
The status of every execution is set to 'RUNNING' by default.
|
||||
Set the following environment variable if you want to get a FAILED status back:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
SF_EXECUTION_HISTORY_TYPE=FAILURE
|
||||
|
||||
|
||||
- [ ] list_map_runs
|
||||
- [X] list_map_runs
|
||||
- [ ] list_state_machine_aliases
|
||||
- [ ] list_state_machine_versions
|
||||
- [X] list_state_machines
|
||||
- [X] list_tags_for_resource
|
||||
- [ ] publish_state_machine_version
|
||||
- [ ] redrive_execution
|
||||
- [ ] send_task_failure
|
||||
- [ ] send_task_heartbeat
|
||||
- [ ] send_task_success
|
||||
- [X] send_task_failure
|
||||
- [X] send_task_heartbeat
|
||||
- [X] send_task_success
|
||||
- [X] start_execution
|
||||
- [ ] start_sync_execution
|
||||
- [X] stop_execution
|
||||
- [X] tag_resource
|
||||
- [ ] test_state
|
||||
- [X] untag_resource
|
||||
- [ ] update_map_run
|
||||
- [X] update_map_run
|
||||
- [X] update_state_machine
|
||||
- [ ] update_state_machine_alias
|
||||
|
||||
|
@ -21,6 +21,10 @@ class _iam_config(TypedDict, total=False):
|
||||
load_aws_managed_policies: bool
|
||||
|
||||
|
||||
class _sfn_config(TypedDict, total=False):
|
||||
execute_state_machine: bool
|
||||
|
||||
|
||||
DefaultConfig = TypedDict(
|
||||
"DefaultConfig",
|
||||
{
|
||||
@ -28,6 +32,7 @@ DefaultConfig = TypedDict(
|
||||
"core": _core_config,
|
||||
"lambda": _docker_config,
|
||||
"iam": _iam_config,
|
||||
"stepfunctions": _sfn_config,
|
||||
},
|
||||
total=False,
|
||||
)
|
||||
@ -41,6 +46,7 @@ default_user_config: DefaultConfig = {
|
||||
"reset_boto3_session": True,
|
||||
},
|
||||
"iam": {"load_aws_managed_policies": False},
|
||||
"stepfunctions": {"execute_state_machine": False},
|
||||
}
|
||||
|
||||
|
||||
|
@ -128,6 +128,8 @@ class MotoAPIBackend(BaseBackend):
|
||||
default_user_config["batch"] = config["batch"]
|
||||
if "lambda" in config:
|
||||
default_user_config["lambda"] = config["lambda"]
|
||||
if "stepfunctions" in config:
|
||||
default_user_config["stepfunctions"] = config["stepfunctions"]
|
||||
|
||||
|
||||
moto_api_backend = MotoAPIBackend(region_name="global", account_id=DEFAULT_ACCOUNT_ID)
|
||||
|
@ -73,7 +73,7 @@ class StateMachine(CloudFormationModel):
|
||||
raise ExecutionDoesNotExist(
|
||||
"Execution Does Not Exist: '" + execution_arn + "'"
|
||||
)
|
||||
execution.stop()
|
||||
execution.stop(stop_date=datetime.now(), error="", cause="")
|
||||
return execution
|
||||
|
||||
def _ensure_execution_name_doesnt_exist(self, name: str) -> None:
|
||||
@ -265,6 +265,12 @@ class Execution:
|
||||
else "FAILED"
|
||||
)
|
||||
self.stop_date: Optional[str] = None
|
||||
self.account_id = account_id
|
||||
self.region_name = region_name
|
||||
self.output: Optional[str] = None
|
||||
self.output_details: Optional[str] = None
|
||||
self.cause: Optional[str] = None
|
||||
self.error: Optional[str] = None
|
||||
|
||||
def get_execution_history(self, roleArn: str) -> List[Dict[str, Any]]:
|
||||
sf_execution_history_type = settings.get_sf_execution_history_type()
|
||||
@ -365,12 +371,28 @@ class Execution:
|
||||
]
|
||||
return []
|
||||
|
||||
def stop(self) -> None:
|
||||
def stop(self, *args: Any, **kwargs: Any) -> None:
|
||||
self.status = "ABORTED"
|
||||
self.stop_date = iso_8601_datetime_with_milliseconds()
|
||||
|
||||
|
||||
class StepFunctionBackend(BaseBackend):
|
||||
"""
|
||||
Configure Moto to explicitly parse and execute the StateMachine:
|
||||
|
||||
.. sourcecode:: python
|
||||
|
||||
@mock_aws(config={"stepfunctions": {"execute_state_machine": True}})
|
||||
|
||||
By default, executing a StateMachine does nothing, and calling `describe_state_machine` will return static data.
|
||||
|
||||
Set the following environment variable if you want to get the static data to have a FAILED status:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
SF_EXECUTION_HISTORY_TYPE=FAILURE
|
||||
|
||||
"""
|
||||
|
||||
# https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/stepfunctions.html#SFN.Client.create_state_machine
|
||||
# A name must not contain:
|
||||
@ -484,7 +506,6 @@ class StepFunctionBackend(BaseBackend):
|
||||
def __init__(self, region_name: str, account_id: str):
|
||||
super().__init__(region_name, account_id)
|
||||
self.state_machines: List[StateMachine] = []
|
||||
self.executions: List[Execution] = []
|
||||
self._account_id = None
|
||||
|
||||
def create_state_machine(
|
||||
@ -556,14 +577,6 @@ class StepFunctionBackend(BaseBackend):
|
||||
def list_executions(
|
||||
self, state_machine_arn: str, status_filter: Optional[str] = None
|
||||
) -> List[Execution]:
|
||||
"""
|
||||
The status of every execution is set to 'RUNNING' by default.
|
||||
Set the following environment variable if you want to get a FAILED status back:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
SF_EXECUTION_HISTORY_TYPE=FAILURE
|
||||
"""
|
||||
executions = self.describe_state_machine(state_machine_arn).executions
|
||||
|
||||
if status_filter:
|
||||
@ -572,14 +585,6 @@ class StepFunctionBackend(BaseBackend):
|
||||
return sorted(executions, key=lambda x: x.start_date, reverse=True)
|
||||
|
||||
def describe_execution(self, execution_arn: str) -> Execution:
|
||||
"""
|
||||
The status of every execution is set to 'RUNNING' by default.
|
||||
Set the following environment variable if you want to get a FAILED status back:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
SF_EXECUTION_HISTORY_TYPE=FAILURE
|
||||
"""
|
||||
self._validate_execution_arn(execution_arn)
|
||||
state_machine = self._get_state_machine_for_execution(execution_arn)
|
||||
exctn = next(
|
||||
@ -593,14 +598,6 @@ class StepFunctionBackend(BaseBackend):
|
||||
return exctn
|
||||
|
||||
def get_execution_history(self, execution_arn: str) -> List[Dict[str, Any]]:
|
||||
"""
|
||||
A static list of successful events is returned by default.
|
||||
Set the following environment variable if you want to get a static list of events for a failed execution:
|
||||
|
||||
.. sourcecode:: bash
|
||||
|
||||
SF_EXECUTION_HISTORY_TYPE=FAILURE
|
||||
"""
|
||||
self._validate_execution_arn(execution_arn)
|
||||
state_machine = self._get_state_machine_for_execution(execution_arn)
|
||||
execution = next(
|
||||
@ -613,6 +610,13 @@ class StepFunctionBackend(BaseBackend):
|
||||
)
|
||||
return execution.get_execution_history(state_machine.roleArn)
|
||||
|
||||
def describe_state_machine_for_execution(self, execution_arn: str) -> StateMachine:
|
||||
for sm in self.state_machines:
|
||||
for exc in sm.executions:
|
||||
if exc.execution_arn == execution_arn:
|
||||
return sm
|
||||
raise ResourceNotFound(execution_arn)
|
||||
|
||||
def list_tags_for_resource(self, arn: str) -> List[Dict[str, str]]:
|
||||
try:
|
||||
state_machine = self.describe_state_machine(arn)
|
||||
@ -634,6 +638,30 @@ class StepFunctionBackend(BaseBackend):
|
||||
except StateMachineDoesNotExist:
|
||||
raise ResourceNotFound(resource_arn)
|
||||
|
||||
def send_task_failure(self, task_token: str) -> None:
|
||||
pass
|
||||
|
||||
def send_task_heartbeat(self, task_token: str) -> None:
|
||||
pass
|
||||
|
||||
def send_task_success(self, task_token: str, outcome: str) -> None:
|
||||
pass
|
||||
|
||||
def describe_map_run(self, map_run_arn: str) -> Dict[str, Any]:
|
||||
return {}
|
||||
|
||||
def list_map_runs(self, execution_arn: str) -> Any:
|
||||
return []
|
||||
|
||||
def update_map_run(
|
||||
self,
|
||||
map_run_arn: str,
|
||||
max_concurrency: int,
|
||||
tolerated_failure_count: str,
|
||||
tolerated_failure_percentage: str,
|
||||
) -> None:
|
||||
pass
|
||||
|
||||
def _validate_name(self, name: str) -> None:
|
||||
if any(invalid_char in name for invalid_char in self.invalid_chars_for_name):
|
||||
raise InvalidName("Invalid Name: '" + name + "'")
|
||||
|
3
moto/stepfunctions/parser/README.md
Normal file
3
moto/stepfunctions/parser/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
In-memory ASL (Amazon StepFunctions Language) parser.
|
||||
|
||||
Created for Localstack by @mepalma (https://github.com/MEPalma)
|
0
moto/stepfunctions/parser/__init__.py
Normal file
0
moto/stepfunctions/parser/__init__.py
Normal file
1048
moto/stepfunctions/parser/api.py
Normal file
1048
moto/stepfunctions/parser/api.py
Normal file
File diff suppressed because it is too large
Load Diff
0
moto/stepfunctions/parser/asl/__init__.py
Normal file
0
moto/stepfunctions/parser/asl/__init__.py
Normal file
79
moto/stepfunctions/parser/asl/antlr/ASLIntrinsicLexer.g4
Normal file
79
moto/stepfunctions/parser/asl/antlr/ASLIntrinsicLexer.g4
Normal file
@ -0,0 +1,79 @@
|
||||
lexer grammar ASLIntrinsicLexer;
|
||||
|
||||
DOLLAR: '$';
|
||||
DOT: '.';
|
||||
STAR: '*';
|
||||
COMMA: ',';
|
||||
LPAREN: '(';
|
||||
RPAREN: ')';
|
||||
LBRACK: '[';
|
||||
RBRACK: ']';
|
||||
LDIAM: '<';
|
||||
RDIAM: '>';
|
||||
ATDOT: '@.';
|
||||
ATDOTLENGTHDASH: '@.length-';
|
||||
ANDAND: '&&';
|
||||
OROR: '||';
|
||||
EQEQ: '==';
|
||||
EQ: '=';
|
||||
|
||||
TRUE: 'true';
|
||||
FALSE: 'false';
|
||||
|
||||
States: 'States';
|
||||
Format: 'Format';
|
||||
StringToJson: 'StringToJson';
|
||||
JsonToString: 'JsonToString';
|
||||
Array: 'Array';
|
||||
ArrayPartition: 'ArrayPartition';
|
||||
ArrayContains: 'ArrayContains';
|
||||
ArrayRange: 'ArrayRange';
|
||||
ArrayGetItem: 'ArrayGetItem';
|
||||
ArrayLength: 'ArrayLength';
|
||||
ArrayUnique: 'ArrayUnique';
|
||||
Base64Encode: 'Base64Encode';
|
||||
Base64Decode: 'Base64Decode';
|
||||
Hash: 'Hash';
|
||||
JsonMerge: 'JsonMerge';
|
||||
MathRandom: 'MathRandom';
|
||||
MathAdd: 'MathAdd';
|
||||
StringSplit: 'StringSplit';
|
||||
UUID: 'UUID';
|
||||
|
||||
|
||||
STRING
|
||||
: '\'' (ESC | SAFECODEPOINT)*? '\''
|
||||
;
|
||||
|
||||
fragment ESC
|
||||
: '\\' (UNICODE | .)
|
||||
;
|
||||
fragment UNICODE
|
||||
: 'u' HEX HEX HEX HEX
|
||||
;
|
||||
fragment HEX
|
||||
: [0-9a-fA-F]
|
||||
;
|
||||
fragment SAFECODEPOINT
|
||||
: ~ ['\\\u0000-\u001F]
|
||||
;
|
||||
|
||||
INT
|
||||
: '-'? ('0' | [1-9] [0-9]*)
|
||||
;
|
||||
|
||||
NUMBER
|
||||
: '-'? INT ('.' [0-9] +)? EXP?
|
||||
;
|
||||
|
||||
fragment EXP
|
||||
: [Ee] [+\-]? INT
|
||||
;
|
||||
|
||||
IDENTIFIER
|
||||
: ([0-9a-zA-Z_] | UNICODE)+
|
||||
;
|
||||
|
||||
WS
|
||||
: [ \t\n] + -> skip
|
||||
;
|
92
moto/stepfunctions/parser/asl/antlr/ASLIntrinsicParser.g4
Normal file
92
moto/stepfunctions/parser/asl/antlr/ASLIntrinsicParser.g4
Normal file
@ -0,0 +1,92 @@
|
||||
parser grammar ASLIntrinsicParser;
|
||||
|
||||
options {
|
||||
tokenVocab=ASLIntrinsicLexer;
|
||||
}
|
||||
|
||||
func_decl
|
||||
: states_func_decl
|
||||
;
|
||||
|
||||
states_func_decl
|
||||
: States DOT state_fun_name func_arg_list
|
||||
;
|
||||
|
||||
state_fun_name
|
||||
: Format
|
||||
| StringToJson
|
||||
| JsonToString
|
||||
| Array
|
||||
| ArrayPartition
|
||||
| ArrayContains
|
||||
| ArrayRange
|
||||
| ArrayGetItem
|
||||
| ArrayLength
|
||||
| ArrayUnique
|
||||
| Base64Encode
|
||||
| Base64Decode
|
||||
| Hash
|
||||
| JsonMerge
|
||||
| MathRandom
|
||||
| MathAdd
|
||||
| StringSplit
|
||||
| UUID
|
||||
;
|
||||
|
||||
func_arg_list
|
||||
: LPAREN func_arg (COMMA func_arg)* RPAREN
|
||||
| LPAREN RPAREN
|
||||
;
|
||||
|
||||
func_arg
|
||||
: STRING #func_arg_string
|
||||
| INT #func_arg_int
|
||||
| NUMBER #func_arg_float
|
||||
| (TRUE | FALSE) #func_arg_bool
|
||||
| context_path #func_arg_context_path
|
||||
| json_path #func_arg_json_path
|
||||
| func_decl #func_arg_func_decl
|
||||
;
|
||||
|
||||
context_path
|
||||
: DOLLAR json_path
|
||||
;
|
||||
|
||||
json_path
|
||||
: DOLLAR DOT json_path_part (DOT json_path_part)*
|
||||
;
|
||||
|
||||
json_path_part
|
||||
: json_path_iden
|
||||
| json_path_iden_qual
|
||||
;
|
||||
|
||||
json_path_iden
|
||||
: identifier
|
||||
;
|
||||
|
||||
json_path_iden_qual
|
||||
: json_path_iden json_path_qual
|
||||
;
|
||||
|
||||
json_path_qual
|
||||
: LBRACK RBRACK #json_path_qual_void
|
||||
| LBRACK INT RBRACK #json_path_qual_idx
|
||||
| LBRACK json_path_query RBRACK #json_path_qual_query
|
||||
;
|
||||
|
||||
json_path_query
|
||||
: STAR # json_path_query_star
|
||||
| ATDOT json_path_iden
|
||||
( (LDIAM | RDIAM | EQEQ) INT
|
||||
| EQ STRING
|
||||
) # json_path_query_cmp
|
||||
| ATDOTLENGTHDASH INT # json_path_query_length
|
||||
| json_path_query ((ANDAND | OROR) json_path_query)+ # json_path_query_binary
|
||||
;
|
||||
|
||||
identifier
|
||||
: IDENTIFIER
|
||||
// States.
|
||||
| state_fun_name
|
||||
;
|
200
moto/stepfunctions/parser/asl/antlr/ASLLexer.g4
Normal file
200
moto/stepfunctions/parser/asl/antlr/ASLLexer.g4
Normal file
@ -0,0 +1,200 @@
|
||||
lexer grammar ASLLexer;
|
||||
|
||||
// Symbols.
|
||||
COMMA: ',';
|
||||
COLON: ':';
|
||||
LBRACK: '[';
|
||||
RBRACK: ']';
|
||||
LBRACE: '{';
|
||||
RBRACE: '}';
|
||||
|
||||
// Literals.
|
||||
TRUE: 'true';
|
||||
FALSE: 'false';
|
||||
NULL: 'null';
|
||||
|
||||
// Keywords.
|
||||
COMMENT: '"Comment"';
|
||||
STATES: '"States"';
|
||||
STARTAT: '"StartAt"';
|
||||
NEXTSTATE: '"NextState"';
|
||||
VERSION: '"Version"';
|
||||
|
||||
TYPE: '"Type"';
|
||||
TASK: '"Task"';
|
||||
CHOICE: '"Choice"';
|
||||
FAIL: '"Fail"';
|
||||
SUCCEED: '"Succeed"';
|
||||
PASS: '"Pass"';
|
||||
WAIT: '"Wait"';
|
||||
PARALLEL: '"Parallel"';
|
||||
MAP: '"Map"';
|
||||
|
||||
CHOICES: '"Choices"';
|
||||
VARIABLE: '"Variable"';
|
||||
DEFAULT: '"Default"';
|
||||
BRANCHES: '"Branches"';
|
||||
|
||||
AND: '"And"';
|
||||
BOOLEANEQUALS: '"BooleanEquals"';
|
||||
BOOLEANQUALSPATH: '"BooleanEqualsPath"';
|
||||
ISBOOLEAN: '"IsBoolean"';
|
||||
ISNULL: '"IsNull"';
|
||||
ISNUMERIC: '"IsNumeric"';
|
||||
ISPRESENT: '"IsPresent"';
|
||||
ISSTRING: '"IsString"';
|
||||
ISTIMESTAMP: '"IsTimestamp"';
|
||||
NOT: '"Not"';
|
||||
NUMERICEQUALS: '"NumericEquals"';
|
||||
NUMERICEQUALSPATH: '"NumericEqualsPath"';
|
||||
NUMERICGREATERTHAN: '"NumericGreaterThan"';
|
||||
NUMERICGREATERTHANPATH: '"NumericGreaterThanPath"';
|
||||
NUMERICGREATERTHANEQUALS: '"NumericGreaterThanEquals"';
|
||||
NUMERICGREATERTHANEQUALSPATH: '"NumericGreaterThanEqualsPath"';
|
||||
NUMERICLESSTHAN: '"NumericLessThan"';
|
||||
NUMERICLESSTHANPATH: '"NumericLessThanPath"';
|
||||
NUMERICLESSTHANEQUALS: '"NumericLessThanEquals"';
|
||||
NUMERICLESSTHANEQUALSPATH: '"NumericLessThanEqualsPath"';
|
||||
OR: '"Or"';
|
||||
STRINGEQUALS: '"StringEquals"';
|
||||
STRINGEQUALSPATH: '"StringEqualsPath"';
|
||||
STRINGGREATERTHAN: '"StringGreaterThan"';
|
||||
STRINGGREATERTHANPATH: '"StringGreaterThanPath"';
|
||||
STRINGGREATERTHANEQUALS: '"StringGreaterThanEquals"';
|
||||
STRINGGREATERTHANEQUALSPATH: '"StringGreaterThanEqualsPath"';
|
||||
STRINGLESSTHAN: '"StringLessThan"';
|
||||
STRINGLESSTHANPATH: '"StringLessThanPath"';
|
||||
STRINGLESSTHANEQUALS: '"StringLessThanEquals"';
|
||||
STRINGLESSTHANEQUALSPATH: '"StringLessThanEqualsPath"';
|
||||
STRINGMATCHES: '"StringMatches"';
|
||||
TIMESTAMPEQUALS: '"TimestampEquals"';
|
||||
TIMESTAMPEQUALSPATH: '"TimestampEqualsPath"';
|
||||
TIMESTAMPGREATERTHAN: '"TimestampGreaterThan"';
|
||||
TIMESTAMPGREATERTHANPATH: '"TimestampGreaterThanPath"';
|
||||
TIMESTAMPGREATERTHANEQUALS: '"TimestampGreaterThanEquals"';
|
||||
TIMESTAMPGREATERTHANEQUALSPATH: '"TimestampGreaterThanEqualsPath"';
|
||||
TIMESTAMPLESSTHAN: '"TimestampLessThan"';
|
||||
TIMESTAMPLESSTHANPATH: '"TimestampLessThanPath"';
|
||||
TIMESTAMPLESSTHANEQUALS: '"TimestampLessThanEquals"';
|
||||
TIMESTAMPLESSTHANEQUALSPATH: '"TimestampLessThanEqualsPath"';
|
||||
|
||||
SECONDSPATH: '"SecondsPath"';
|
||||
SECONDS: '"Seconds"';
|
||||
TIMESTAMPPATH: '"TimestampPath"';
|
||||
TIMESTAMP: '"Timestamp"';
|
||||
|
||||
TIMEOUTSECONDS: '"TimeoutSeconds"';
|
||||
TIMEOUTSECONDSPATH: '"TimeoutSecondsPath"';
|
||||
|
||||
HEARTBEATSECONDS: '"HeartbeatSeconds"';
|
||||
HEARTBEATSECONDSPATH: '"HeartbeatSecondsPath"';
|
||||
|
||||
PROCESSORCONFIG: '"ProcessorConfig"';
|
||||
MODE: '"Mode"';
|
||||
INLINE: '"INLINE"';
|
||||
DISTRIBUTED: '"DISTRIBUTED"';
|
||||
EXECUTIONTYPE: '"ExecutionType"';
|
||||
STANDARD: '"STANDARD"';
|
||||
|
||||
ITEMPROCESSOR: '"ItemProcessor"';
|
||||
ITERATOR: '"Iterator"';
|
||||
ITEMSELECTOR: '"ItemSelector"';
|
||||
MAXCONCURRENCY: '"MaxConcurrency"';
|
||||
|
||||
RESOURCE: '"Resource"';
|
||||
INPUTPATH: '"InputPath"';
|
||||
OUTPUTPATH: '"OutputPath"';
|
||||
ITEMSPATH: '"ItemsPath"';
|
||||
RESULTPATH: '"ResultPath"';
|
||||
RESULT: '"Result"';
|
||||
PARAMETERS: '"Parameters"';
|
||||
RESULTSELECTOR: '"ResultSelector"';
|
||||
|
||||
ITEMREADER: '"ItemReader"';
|
||||
READERCONFIG: '"ReaderConfig"';
|
||||
INPUTTYPE: '"InputType"';
|
||||
CSVHEADERLOCATION: '"CSVHeaderLocation"';
|
||||
CSVHEADERS: '"CSVHeaders"';
|
||||
MAXITEMS: '"MaxItems"';
|
||||
MAXITEMSPATH: '"MaxItemsPath"';
|
||||
|
||||
NEXT: '"Next"';
|
||||
END: '"End"';
|
||||
|
||||
CAUSE: '"Cause"';
|
||||
ERROR: '"Error"';
|
||||
|
||||
// Retry.
|
||||
RETRY: '"Retry"';
|
||||
ERROREQUALS: '"ErrorEquals"';
|
||||
INTERVALSECONDS: '"IntervalSeconds"';
|
||||
MAXATTEMPTS: '"MaxAttempts"';
|
||||
BACKOFFRATE: '"BackoffRate"';
|
||||
|
||||
// Catch.
|
||||
CATCH: '"Catch"';
|
||||
|
||||
// ErrorNames
|
||||
ERRORNAMEStatesALL: '"States.ALL"';
|
||||
ERRORNAMEStatesHeartbeatTimeout: '"States.HeartbeatTimeout"';
|
||||
ERRORNAMEStatesTimeout: '"States.Timeout"';
|
||||
ERRORNAMEStatesTaskFailed: '"States.TaskFailed"';
|
||||
ERRORNAMEStatesPermissions: '"States.Permissions"';
|
||||
ERRORNAMEStatesResultPathMatchFailure: '"States.ResultPathMatchFailure"';
|
||||
ERRORNAMEStatesParameterPathFailure: '"States.ParameterPathFailure"';
|
||||
ERRORNAMEStatesBranchFailed: '"States.BranchFailed"';
|
||||
ERRORNAMEStatesNoChoiceMatched: '"States.NoChoiceMatched"';
|
||||
ERRORNAMEStatesIntrinsicFailure: '"States.IntrinsicFailure"';
|
||||
ERRORNAMEStatesExceedToleratedFailureThreshold: '"States.ExceedToleratedFailureThreshold"';
|
||||
ERRORNAMEStatesItemReaderFailed: '"States.ItemReaderFailed"';
|
||||
ERRORNAMEStatesResultWriterFailed: '"States.ResultWriterFailed"';
|
||||
// Read-only:
|
||||
ERRORNAMEStatesRuntime: '"States.Runtime"';
|
||||
|
||||
// Strings.
|
||||
|
||||
STRINGDOLLAR
|
||||
: '"' (ESC | SAFECODEPOINT)* '.$"'
|
||||
;
|
||||
|
||||
STRINGPATHCONTEXTOBJ
|
||||
: '"$$' (ESC | SAFECODEPOINT)* '"'
|
||||
;
|
||||
|
||||
STRINGPATH
|
||||
: '"$' (ESC | SAFECODEPOINT)* '"'
|
||||
;
|
||||
|
||||
STRING
|
||||
: '"' (ESC | SAFECODEPOINT)* '"'
|
||||
;
|
||||
fragment ESC
|
||||
: '\\' (["\\/bfnrt] | UNICODE)
|
||||
;
|
||||
fragment UNICODE
|
||||
: 'u' HEX HEX HEX HEX
|
||||
;
|
||||
fragment HEX
|
||||
: [0-9a-fA-F]
|
||||
;
|
||||
fragment SAFECODEPOINT
|
||||
: ~ ["\\\u0000-\u001F]
|
||||
;
|
||||
|
||||
// Numbers.
|
||||
INT
|
||||
: '0' | [1-9] [0-9]*
|
||||
;
|
||||
|
||||
NUMBER
|
||||
: '-'? INT ('.' [0-9] +)? EXP?
|
||||
;
|
||||
|
||||
fragment EXP
|
||||
: [Ee] [+\-]? INT
|
||||
;
|
||||
|
||||
// Whitespace.
|
||||
WS
|
||||
: [ \t\n\r] + -> skip
|
||||
;
|
682
moto/stepfunctions/parser/asl/antlr/ASLParser.g4
Normal file
682
moto/stepfunctions/parser/asl/antlr/ASLParser.g4
Normal file
@ -0,0 +1,682 @@
|
||||
parser grammar ASLParser;
|
||||
|
||||
options {
|
||||
tokenVocab=ASLLexer;
|
||||
}
|
||||
|
||||
program_decl
|
||||
: LBRACE
|
||||
top_layer_stmt (COMMA top_layer_stmt)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
top_layer_stmt
|
||||
: comment_decl
|
||||
| version_decl
|
||||
| startat_decl
|
||||
| states_decl
|
||||
| timeout_seconds_decl
|
||||
;
|
||||
|
||||
startat_decl
|
||||
: STARTAT COLON keyword_or_string
|
||||
;
|
||||
|
||||
comment_decl
|
||||
: COMMENT COLON keyword_or_string
|
||||
;
|
||||
|
||||
version_decl
|
||||
: VERSION COLON keyword_or_string
|
||||
;
|
||||
|
||||
state_stmt
|
||||
: comment_decl
|
||||
| type_decl
|
||||
| input_path_decl
|
||||
| resource_decl
|
||||
| next_decl
|
||||
| result_decl
|
||||
| result_path_decl
|
||||
| output_path_decl
|
||||
| end_decl
|
||||
| default_decl
|
||||
| choices_decl
|
||||
| error_decl
|
||||
| cause_decl
|
||||
| seconds_decl
|
||||
| seconds_path_decl
|
||||
| timestamp_decl
|
||||
| timestamp_path_decl
|
||||
| items_path_decl
|
||||
| item_processor_decl
|
||||
| iterator_decl
|
||||
| item_selector_decl
|
||||
| item_reader_decl
|
||||
| max_concurrency_decl
|
||||
| timeout_seconds_decl
|
||||
| timeout_seconds_path_decl
|
||||
| heartbeat_seconds_decl
|
||||
| heartbeat_seconds_path_decl
|
||||
| branches_decl
|
||||
| parameters_decl
|
||||
| retry_decl
|
||||
| catch_decl
|
||||
| result_selector_decl
|
||||
;
|
||||
|
||||
states_decl
|
||||
: STATES
|
||||
COLON
|
||||
LBRACE
|
||||
state_decl (COMMA state_decl)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
state_name
|
||||
: keyword_or_string
|
||||
;
|
||||
|
||||
// TODO: avoid redefinitions? -> check listener ok?
|
||||
state_decl
|
||||
: state_name
|
||||
COLON
|
||||
state_decl_body
|
||||
;
|
||||
|
||||
state_decl_body
|
||||
: LBRACE
|
||||
state_stmt (COMMA state_stmt)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
type_decl
|
||||
: TYPE COLON state_type
|
||||
;
|
||||
|
||||
next_decl
|
||||
: NEXT COLON keyword_or_string
|
||||
;
|
||||
|
||||
resource_decl
|
||||
: RESOURCE COLON keyword_or_string
|
||||
;
|
||||
|
||||
input_path_decl
|
||||
: INPUTPATH COLON (NULL | keyword_or_string)
|
||||
;
|
||||
|
||||
result_decl
|
||||
: RESULT COLON json_value_decl
|
||||
;
|
||||
|
||||
result_path_decl
|
||||
: RESULTPATH COLON (NULL | keyword_or_string)
|
||||
;
|
||||
|
||||
output_path_decl
|
||||
: OUTPUTPATH COLON (NULL | keyword_or_string)
|
||||
;
|
||||
|
||||
end_decl
|
||||
: END COLON (TRUE | FALSE)
|
||||
;
|
||||
|
||||
default_decl
|
||||
: DEFAULT COLON keyword_or_string
|
||||
;
|
||||
|
||||
error_decl
|
||||
: ERROR COLON keyword_or_string
|
||||
;
|
||||
|
||||
cause_decl
|
||||
: CAUSE COLON keyword_or_string
|
||||
;
|
||||
|
||||
seconds_decl
|
||||
: SECONDS COLON INT
|
||||
;
|
||||
|
||||
seconds_path_decl
|
||||
: SECONDSPATH COLON keyword_or_string
|
||||
;
|
||||
|
||||
timestamp_decl
|
||||
: TIMESTAMP COLON keyword_or_string
|
||||
;
|
||||
|
||||
timestamp_path_decl
|
||||
: TIMESTAMPPATH COLON keyword_or_string
|
||||
;
|
||||
|
||||
items_path_decl
|
||||
: ITEMSPATH COLON keyword_or_string
|
||||
;
|
||||
|
||||
max_concurrency_decl
|
||||
: MAXCONCURRENCY COLON INT
|
||||
;
|
||||
|
||||
parameters_decl
|
||||
: PARAMETERS COLON payload_tmpl_decl
|
||||
;
|
||||
|
||||
timeout_seconds_decl
|
||||
: TIMEOUTSECONDS COLON INT
|
||||
;
|
||||
|
||||
timeout_seconds_path_decl
|
||||
: TIMEOUTSECONDSPATH COLON STRINGPATH
|
||||
;
|
||||
|
||||
heartbeat_seconds_decl
|
||||
: HEARTBEATSECONDS COLON INT
|
||||
;
|
||||
|
||||
heartbeat_seconds_path_decl
|
||||
: HEARTBEATSECONDSPATH COLON STRINGPATH
|
||||
;
|
||||
|
||||
payload_tmpl_decl
|
||||
: LBRACE payload_binding (COMMA payload_binding)* RBRACE
|
||||
| LBRACE RBRACE
|
||||
;
|
||||
|
||||
payload_binding
|
||||
: STRINGDOLLAR COLON STRINGPATH #payload_binding_path
|
||||
| STRINGDOLLAR COLON STRINGPATHCONTEXTOBJ #payload_binding_path_context_obj
|
||||
| STRINGDOLLAR COLON intrinsic_func #payload_binding_intrinsic_func
|
||||
| keyword_or_string COLON payload_value_decl #payload_binding_value
|
||||
;
|
||||
|
||||
intrinsic_func
|
||||
: STRING
|
||||
;
|
||||
|
||||
payload_arr_decl
|
||||
: LBRACK payload_value_decl (COMMA payload_value_decl)* RBRACK
|
||||
| LBRACK RBRACK
|
||||
;
|
||||
|
||||
payload_value_decl
|
||||
: payload_binding
|
||||
| payload_arr_decl
|
||||
| payload_tmpl_decl
|
||||
| payload_value_lit
|
||||
;
|
||||
|
||||
payload_value_lit
|
||||
: NUMBER #payload_value_float
|
||||
| INT #payload_value_int
|
||||
| (TRUE | FALSE) #payload_value_bool
|
||||
| NULL #payload_value_null
|
||||
| keyword_or_string #payload_value_str
|
||||
;
|
||||
|
||||
result_selector_decl
|
||||
: RESULTSELECTOR COLON payload_tmpl_decl
|
||||
;
|
||||
|
||||
state_type
|
||||
: TASK
|
||||
| PASS
|
||||
| CHOICE
|
||||
| FAIL
|
||||
| SUCCEED
|
||||
| WAIT
|
||||
| MAP
|
||||
| PARALLEL
|
||||
;
|
||||
|
||||
choices_decl
|
||||
: CHOICES
|
||||
COLON
|
||||
LBRACK
|
||||
choice_rule (COMMA choice_rule)*
|
||||
RBRACK
|
||||
;
|
||||
|
||||
choice_rule
|
||||
: LBRACE
|
||||
comparison_variable_stmt (COMMA comparison_variable_stmt)+
|
||||
RBRACE #choice_rule_comparison_variable
|
||||
| LBRACE
|
||||
comparison_composite_stmt (COMMA comparison_composite_stmt)*
|
||||
RBRACE #choice_rule_comparison_composite
|
||||
;
|
||||
|
||||
comparison_variable_stmt
|
||||
: variable_decl
|
||||
| comparison_func
|
||||
| next_decl
|
||||
;
|
||||
|
||||
comparison_composite_stmt
|
||||
: comparison_composite
|
||||
| next_decl
|
||||
;
|
||||
|
||||
comparison_composite
|
||||
// TODO: this allows for Next definitions in nested choice_rules, is this supported at parse time?
|
||||
: choice_operator COLON
|
||||
( choice_rule
|
||||
| LBRACK
|
||||
choice_rule (COMMA choice_rule)*
|
||||
RBRACK
|
||||
)
|
||||
;
|
||||
|
||||
variable_decl
|
||||
: VARIABLE COLON keyword_or_string
|
||||
;
|
||||
|
||||
comparison_func
|
||||
: comparison_op COLON json_value_decl
|
||||
;
|
||||
|
||||
branches_decl
|
||||
: BRANCHES
|
||||
COLON
|
||||
LBRACK
|
||||
program_decl (COMMA program_decl)*
|
||||
RBRACK
|
||||
;
|
||||
|
||||
item_processor_decl
|
||||
: ITEMPROCESSOR
|
||||
COLON
|
||||
LBRACE
|
||||
item_processor_item (COMMA item_processor_item)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
item_processor_item
|
||||
: processor_config_decl
|
||||
| startat_decl
|
||||
| states_decl
|
||||
| comment_decl
|
||||
;
|
||||
|
||||
processor_config_decl
|
||||
: PROCESSORCONFIG
|
||||
COLON
|
||||
LBRACE
|
||||
processor_config_field (COMMA processor_config_field)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
processor_config_field
|
||||
: mode_decl
|
||||
| execution_decl
|
||||
;
|
||||
|
||||
mode_decl
|
||||
: MODE COLON mode_type
|
||||
;
|
||||
|
||||
mode_type
|
||||
: INLINE
|
||||
| DISTRIBUTED
|
||||
;
|
||||
|
||||
execution_decl
|
||||
: EXECUTIONTYPE COLON execution_type
|
||||
;
|
||||
|
||||
execution_type
|
||||
: STANDARD
|
||||
;
|
||||
|
||||
iterator_decl
|
||||
: ITERATOR
|
||||
COLON
|
||||
LBRACE
|
||||
iterator_decl_item (COMMA iterator_decl_item)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
iterator_decl_item
|
||||
: startat_decl
|
||||
| states_decl
|
||||
| comment_decl
|
||||
;
|
||||
|
||||
item_selector_decl
|
||||
: ITEMSELECTOR COLON payload_tmpl_decl
|
||||
;
|
||||
|
||||
item_reader_decl
|
||||
: ITEMREADER
|
||||
COLON
|
||||
LBRACE
|
||||
items_reader_field (COMMA items_reader_field)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
items_reader_field
|
||||
: resource_decl
|
||||
| parameters_decl
|
||||
| reader_config_decl
|
||||
;
|
||||
|
||||
reader_config_decl
|
||||
: READERCONFIG
|
||||
COLON
|
||||
LBRACE
|
||||
reader_config_field (COMMA reader_config_field)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
reader_config_field
|
||||
: input_type_decl
|
||||
| csv_header_location_decl
|
||||
| csv_headers_decl
|
||||
| max_items_decl
|
||||
| max_items_path_decl
|
||||
;
|
||||
|
||||
input_type_decl
|
||||
: INPUTTYPE COLON keyword_or_string
|
||||
;
|
||||
|
||||
csv_header_location_decl
|
||||
: CSVHEADERLOCATION COLON keyword_or_string
|
||||
;
|
||||
|
||||
csv_headers_decl // TODO: are empty "CSVHeaders" list values supported?
|
||||
: CSVHEADERS
|
||||
COLON
|
||||
LBRACK
|
||||
keyword_or_string (COMMA keyword_or_string)*
|
||||
RBRACK
|
||||
;
|
||||
|
||||
max_items_decl
|
||||
: MAXITEMS COLON INT
|
||||
;
|
||||
|
||||
max_items_path_decl
|
||||
: MAXITEMSPATH COLON STRINGPATH
|
||||
;
|
||||
|
||||
retry_decl
|
||||
: RETRY
|
||||
COLON
|
||||
LBRACK
|
||||
(retrier_decl (COMMA retrier_decl)*)?
|
||||
RBRACK
|
||||
;
|
||||
|
||||
retrier_decl
|
||||
: LBRACE
|
||||
retrier_stmt (COMMA retrier_stmt)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
retrier_stmt
|
||||
: error_equals_decl
|
||||
| interval_seconds_decl
|
||||
| max_attempts_decl
|
||||
| backoff_rate_decl
|
||||
;
|
||||
|
||||
error_equals_decl
|
||||
: ERROREQUALS
|
||||
COLON
|
||||
LBRACK
|
||||
error_name (COMMA error_name)*
|
||||
RBRACK
|
||||
;
|
||||
|
||||
interval_seconds_decl
|
||||
: INTERVALSECONDS COLON INT
|
||||
;
|
||||
|
||||
max_attempts_decl
|
||||
: MAXATTEMPTS COLON INT
|
||||
;
|
||||
|
||||
backoff_rate_decl
|
||||
: BACKOFFRATE COLON (INT | NUMBER)
|
||||
;
|
||||
|
||||
catch_decl
|
||||
: CATCH
|
||||
COLON
|
||||
LBRACK
|
||||
(catcher_decl (COMMA catcher_decl)*)?
|
||||
RBRACK
|
||||
;
|
||||
|
||||
catcher_decl
|
||||
: LBRACE
|
||||
catcher_stmt (COMMA catcher_stmt)*
|
||||
RBRACE
|
||||
;
|
||||
|
||||
catcher_stmt
|
||||
: error_equals_decl
|
||||
| result_path_decl
|
||||
| next_decl
|
||||
;
|
||||
|
||||
comparison_op
|
||||
: BOOLEANEQUALS
|
||||
| BOOLEANQUALSPATH
|
||||
| ISBOOLEAN
|
||||
| ISNULL
|
||||
| ISNUMERIC
|
||||
| ISPRESENT
|
||||
| ISSTRING
|
||||
| ISTIMESTAMP
|
||||
| NUMERICEQUALS
|
||||
| NUMERICEQUALSPATH
|
||||
| NUMERICGREATERTHAN
|
||||
| NUMERICGREATERTHANPATH
|
||||
| NUMERICGREATERTHANEQUALS
|
||||
| NUMERICGREATERTHANEQUALSPATH
|
||||
| NUMERICLESSTHAN
|
||||
| NUMERICLESSTHANPATH
|
||||
| NUMERICLESSTHANEQUALS
|
||||
| NUMERICLESSTHANEQUALSPATH
|
||||
| STRINGEQUALS
|
||||
| STRINGEQUALSPATH
|
||||
| STRINGGREATERTHAN
|
||||
| STRINGGREATERTHANPATH
|
||||
| STRINGGREATERTHANEQUALS
|
||||
| STRINGGREATERTHANEQUALSPATH
|
||||
| STRINGLESSTHAN
|
||||
| STRINGLESSTHANPATH
|
||||
| STRINGLESSTHANEQUALS
|
||||
| STRINGLESSTHANEQUALSPATH
|
||||
| STRINGMATCHES
|
||||
| TIMESTAMPEQUALS
|
||||
| TIMESTAMPEQUALSPATH
|
||||
| TIMESTAMPGREATERTHAN
|
||||
| TIMESTAMPGREATERTHANPATH
|
||||
| TIMESTAMPGREATERTHANEQUALS
|
||||
| TIMESTAMPGREATERTHANEQUALSPATH
|
||||
| TIMESTAMPLESSTHAN
|
||||
| TIMESTAMPLESSTHANPATH
|
||||
| TIMESTAMPLESSTHANEQUALS
|
||||
| TIMESTAMPLESSTHANEQUALSPATH
|
||||
;
|
||||
|
||||
choice_operator
|
||||
: NOT
|
||||
| AND
|
||||
| OR
|
||||
;
|
||||
|
||||
states_error_name
|
||||
: ERRORNAMEStatesALL
|
||||
| ERRORNAMEStatesHeartbeatTimeout
|
||||
| ERRORNAMEStatesTimeout
|
||||
| ERRORNAMEStatesTaskFailed
|
||||
| ERRORNAMEStatesPermissions
|
||||
| ERRORNAMEStatesResultPathMatchFailure
|
||||
| ERRORNAMEStatesParameterPathFailure
|
||||
| ERRORNAMEStatesBranchFailed
|
||||
| ERRORNAMEStatesNoChoiceMatched
|
||||
| ERRORNAMEStatesIntrinsicFailure
|
||||
| ERRORNAMEStatesExceedToleratedFailureThreshold
|
||||
| ERRORNAMEStatesItemReaderFailed
|
||||
| ERRORNAMEStatesResultWriterFailed
|
||||
| ERRORNAMEStatesRuntime
|
||||
;
|
||||
|
||||
error_name
|
||||
: states_error_name
|
||||
| keyword_or_string
|
||||
;
|
||||
|
||||
json_obj_decl
|
||||
: LBRACE json_binding (COMMA json_binding)* RBRACE
|
||||
| LBRACE RBRACE
|
||||
;
|
||||
|
||||
json_binding
|
||||
: keyword_or_string COLON json_value_decl
|
||||
;
|
||||
|
||||
json_arr_decl
|
||||
: LBRACK json_value_decl (COMMA json_value_decl)* RBRACK
|
||||
| LBRACK RBRACK
|
||||
;
|
||||
|
||||
json_value_decl
|
||||
: NUMBER
|
||||
| INT
|
||||
| TRUE
|
||||
| FALSE
|
||||
| NULL
|
||||
| json_binding
|
||||
| json_arr_decl
|
||||
| json_obj_decl
|
||||
| keyword_or_string
|
||||
;
|
||||
|
||||
keyword_or_string // TODO: check keywords can be used as strings.
|
||||
: STRINGDOLLAR
|
||||
| STRINGPATHCONTEXTOBJ
|
||||
| STRINGPATH
|
||||
| STRING
|
||||
//
|
||||
| COMMENT
|
||||
| STATES
|
||||
| STARTAT
|
||||
| NEXTSTATE
|
||||
| TYPE
|
||||
| TASK
|
||||
| CHOICE
|
||||
| FAIL
|
||||
| SUCCEED
|
||||
| PASS
|
||||
| WAIT
|
||||
| PARALLEL
|
||||
| MAP
|
||||
| CHOICES
|
||||
| VARIABLE
|
||||
| DEFAULT
|
||||
| BRANCHES
|
||||
| AND
|
||||
| BOOLEANEQUALS
|
||||
| BOOLEANQUALSPATH
|
||||
| ISBOOLEAN
|
||||
| ISNULL
|
||||
| ISNUMERIC
|
||||
| ISPRESENT
|
||||
| ISSTRING
|
||||
| ISTIMESTAMP
|
||||
| NOT
|
||||
| NUMERICEQUALS
|
||||
| NUMERICEQUALSPATH
|
||||
| NUMERICGREATERTHAN
|
||||
| NUMERICGREATERTHANPATH
|
||||
| NUMERICGREATERTHANEQUALS
|
||||
| NUMERICGREATERTHANEQUALSPATH
|
||||
| NUMERICLESSTHAN
|
||||
| NUMERICLESSTHANPATH
|
||||
| NUMERICLESSTHANEQUALS
|
||||
| NUMERICLESSTHANEQUALSPATH
|
||||
| OR
|
||||
| STRINGEQUALS
|
||||
| STRINGEQUALSPATH
|
||||
| STRINGGREATERTHAN
|
||||
| STRINGGREATERTHANPATH
|
||||
| STRINGGREATERTHANEQUALS
|
||||
| STRINGGREATERTHANEQUALSPATH
|
||||
| STRINGLESSTHAN
|
||||
| STRINGLESSTHANPATH
|
||||
| STRINGLESSTHANEQUALS
|
||||
| STRINGLESSTHANEQUALSPATH
|
||||
| STRINGMATCHES
|
||||
| TIMESTAMPEQUALS
|
||||
| TIMESTAMPEQUALSPATH
|
||||
| TIMESTAMPGREATERTHAN
|
||||
| TIMESTAMPGREATERTHANPATH
|
||||
| TIMESTAMPGREATERTHANEQUALS
|
||||
| TIMESTAMPGREATERTHANEQUALSPATH
|
||||
| TIMESTAMPLESSTHAN
|
||||
| TIMESTAMPLESSTHANPATH
|
||||
| TIMESTAMPLESSTHANEQUALS
|
||||
| TIMESTAMPLESSTHANEQUALSPATH
|
||||
| SECONDSPATH
|
||||
| SECONDS
|
||||
| TIMESTAMPPATH
|
||||
| TIMESTAMP
|
||||
| TIMEOUTSECONDS
|
||||
| TIMEOUTSECONDSPATH
|
||||
| HEARTBEATSECONDS
|
||||
| HEARTBEATSECONDSPATH
|
||||
| PROCESSORCONFIG
|
||||
| MODE
|
||||
| INLINE
|
||||
| DISTRIBUTED
|
||||
| EXECUTIONTYPE
|
||||
| STANDARD
|
||||
| ITEMPROCESSOR
|
||||
| ITERATOR
|
||||
| ITEMSELECTOR
|
||||
| MAXCONCURRENCY
|
||||
| RESOURCE
|
||||
| INPUTPATH
|
||||
| OUTPUTPATH
|
||||
| ITEMSPATH
|
||||
| RESULTPATH
|
||||
| RESULT
|
||||
| PARAMETERS
|
||||
| RESULTSELECTOR
|
||||
| ITEMREADER
|
||||
| READERCONFIG
|
||||
| INPUTTYPE
|
||||
| CSVHEADERLOCATION
|
||||
| CSVHEADERS
|
||||
| MAXITEMS
|
||||
| MAXITEMSPATH
|
||||
| NEXT
|
||||
| END
|
||||
| CAUSE
|
||||
| ERROR
|
||||
| RETRY
|
||||
| ERROREQUALS
|
||||
| INTERVALSECONDS
|
||||
| MAXATTEMPTS
|
||||
| BACKOFFRATE
|
||||
| CATCH
|
||||
| ERRORNAMEStatesALL
|
||||
| ERRORNAMEStatesHeartbeatTimeout
|
||||
| ERRORNAMEStatesTimeout
|
||||
| ERRORNAMEStatesTaskFailed
|
||||
| ERRORNAMEStatesPermissions
|
||||
| ERRORNAMEStatesResultPathMatchFailure
|
||||
| ERRORNAMEStatesParameterPathFailure
|
||||
| ERRORNAMEStatesBranchFailed
|
||||
| ERRORNAMEStatesNoChoiceMatched
|
||||
| ERRORNAMEStatesIntrinsicFailure
|
||||
| ERRORNAMEStatesExceedToleratedFailureThreshold
|
||||
| ERRORNAMEStatesItemReaderFailed
|
||||
| ERRORNAMEStatesResultWriterFailed
|
||||
| ERRORNAMEStatesRuntime
|
||||
;
|
0
moto/stepfunctions/parser/asl/antlr/__init__.py
Normal file
0
moto/stepfunctions/parser/asl/antlr/__init__.py
Normal file
File diff suppressed because one or more lines are too long
3851
moto/stepfunctions/parser/asl/antlr/runtime/ASLIntrinsicLexer.py
Normal file
3851
moto/stepfunctions/parser/asl/antlr/runtime/ASLIntrinsicLexer.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,79 @@
|
||||
DOLLAR=1
|
||||
DOT=2
|
||||
STAR=3
|
||||
COMMA=4
|
||||
LPAREN=5
|
||||
RPAREN=6
|
||||
LBRACK=7
|
||||
RBRACK=8
|
||||
LDIAM=9
|
||||
RDIAM=10
|
||||
ATDOT=11
|
||||
ATDOTLENGTHDASH=12
|
||||
ANDAND=13
|
||||
OROR=14
|
||||
EQEQ=15
|
||||
EQ=16
|
||||
TRUE=17
|
||||
FALSE=18
|
||||
States=19
|
||||
Format=20
|
||||
StringToJson=21
|
||||
JsonToString=22
|
||||
Array=23
|
||||
ArrayPartition=24
|
||||
ArrayContains=25
|
||||
ArrayRange=26
|
||||
ArrayGetItem=27
|
||||
ArrayLength=28
|
||||
ArrayUnique=29
|
||||
Base64Encode=30
|
||||
Base64Decode=31
|
||||
Hash=32
|
||||
JsonMerge=33
|
||||
MathRandom=34
|
||||
MathAdd=35
|
||||
StringSplit=36
|
||||
UUID=37
|
||||
STRING=38
|
||||
INT=39
|
||||
NUMBER=40
|
||||
IDENTIFIER=41
|
||||
WS=42
|
||||
'$'=1
|
||||
'.'=2
|
||||
'*'=3
|
||||
','=4
|
||||
'('=5
|
||||
')'=6
|
||||
'['=7
|
||||
']'=8
|
||||
'<'=9
|
||||
'>'=10
|
||||
'@.'=11
|
||||
'@.length-'=12
|
||||
'&&'=13
|
||||
'||'=14
|
||||
'=='=15
|
||||
'='=16
|
||||
'true'=17
|
||||
'false'=18
|
||||
'States'=19
|
||||
'Format'=20
|
||||
'StringToJson'=21
|
||||
'JsonToString'=22
|
||||
'Array'=23
|
||||
'ArrayPartition'=24
|
||||
'ArrayContains'=25
|
||||
'ArrayRange'=26
|
||||
'ArrayGetItem'=27
|
||||
'ArrayLength'=28
|
||||
'ArrayUnique'=29
|
||||
'Base64Encode'=30
|
||||
'Base64Decode'=31
|
||||
'Hash'=32
|
||||
'JsonMerge'=33
|
||||
'MathRandom'=34
|
||||
'MathAdd'=35
|
||||
'StringSplit'=36
|
||||
'UUID'=37
|
@ -0,0 +1,108 @@
|
||||
token literal names:
|
||||
null
|
||||
'$'
|
||||
'.'
|
||||
'*'
|
||||
','
|
||||
'('
|
||||
')'
|
||||
'['
|
||||
']'
|
||||
'<'
|
||||
'>'
|
||||
'@.'
|
||||
'@.length-'
|
||||
'&&'
|
||||
'||'
|
||||
'=='
|
||||
'='
|
||||
'true'
|
||||
'false'
|
||||
'States'
|
||||
'Format'
|
||||
'StringToJson'
|
||||
'JsonToString'
|
||||
'Array'
|
||||
'ArrayPartition'
|
||||
'ArrayContains'
|
||||
'ArrayRange'
|
||||
'ArrayGetItem'
|
||||
'ArrayLength'
|
||||
'ArrayUnique'
|
||||
'Base64Encode'
|
||||
'Base64Decode'
|
||||
'Hash'
|
||||
'JsonMerge'
|
||||
'MathRandom'
|
||||
'MathAdd'
|
||||
'StringSplit'
|
||||
'UUID'
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
null
|
||||
|
||||
token symbolic names:
|
||||
null
|
||||
DOLLAR
|
||||
DOT
|
||||
STAR
|
||||
COMMA
|
||||
LPAREN
|
||||
RPAREN
|
||||
LBRACK
|
||||
RBRACK
|
||||
LDIAM
|
||||
RDIAM
|
||||
ATDOT
|
||||
ATDOTLENGTHDASH
|
||||
ANDAND
|
||||
OROR
|
||||
EQEQ
|
||||
EQ
|
||||
TRUE
|
||||
FALSE
|
||||
States
|
||||
Format
|
||||
StringToJson
|
||||
JsonToString
|
||||
Array
|
||||
ArrayPartition
|
||||
ArrayContains
|
||||
ArrayRange
|
||||
ArrayGetItem
|
||||
ArrayLength
|
||||
ArrayUnique
|
||||
Base64Encode
|
||||
Base64Decode
|
||||
Hash
|
||||
JsonMerge
|
||||
MathRandom
|
||||
MathAdd
|
||||
StringSplit
|
||||
UUID
|
||||
STRING
|
||||
INT
|
||||
NUMBER
|
||||
IDENTIFIER
|
||||
WS
|
||||
|
||||
rule names:
|
||||
func_decl
|
||||
states_func_decl
|
||||
state_fun_name
|
||||
func_arg_list
|
||||
func_arg
|
||||
context_path
|
||||
json_path
|
||||
json_path_part
|
||||
json_path_iden
|
||||
json_path_iden_qual
|
||||
json_path_qual
|
||||
json_path_query
|
||||
identifier
|
||||
|
||||
|
||||
atn:
|
||||
[4, 1, 42, 123, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 40, 8, 3, 10, 3, 12, 3, 43, 9, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 49, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 58, 8, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 68, 8, 6, 10, 6, 12, 6, 71, 9, 6, 1, 7, 1, 7, 3, 7, 75, 8, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 91, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 101, 8, 11, 1, 11, 1, 11, 3, 11, 105, 8, 11, 1, 11, 1, 11, 1, 11, 4, 11, 110, 8, 11, 11, 11, 12, 11, 111, 5, 11, 114, 8, 11, 10, 11, 12, 11, 117, 9, 11, 1, 12, 1, 12, 3, 12, 121, 8, 12, 1, 12, 0, 1, 22, 13, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 0, 4, 1, 0, 20, 37, 1, 0, 17, 18, 2, 0, 9, 10, 15, 15, 1, 0, 13, 14, 127, 0, 26, 1, 0, 0, 0, 2, 28, 1, 0, 0, 0, 4, 33, 1, 0, 0, 0, 6, 48, 1, 0, 0, 0, 8, 57, 1, 0, 0, 0, 10, 59, 1, 0, 0, 0, 12, 62, 1, 0, 0, 0, 14, 74, 1, 0, 0, 0, 16, 76, 1, 0, 0, 0, 18, 78, 1, 0, 0, 0, 20, 90, 1, 0, 0, 0, 22, 104, 1, 0, 0, 0, 24, 120, 1, 0, 0, 0, 26, 27, 3, 2, 1, 0, 27, 1, 1, 0, 0, 0, 28, 29, 5, 19, 0, 0, 29, 30, 5, 2, 0, 0, 30, 31, 3, 4, 2, 0, 31, 32, 3, 6, 3, 0, 32, 3, 1, 0, 0, 0, 33, 34, 7, 0, 0, 0, 34, 5, 1, 0, 0, 0, 35, 36, 5, 5, 0, 0, 36, 41, 3, 8, 4, 0, 37, 38, 5, 4, 0, 0, 38, 40, 3, 8, 4, 0, 39, 37, 1, 0, 0, 0, 40, 43, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 41, 42, 1, 0, 0, 0, 42, 44, 1, 0, 0, 0, 43, 41, 1, 0, 0, 0, 44, 45, 5, 6, 0, 0, 45, 49, 1, 0, 0, 0, 46, 47, 5, 5, 0, 0, 47, 49, 5, 6, 0, 0, 48, 35, 1, 0, 0, 0, 48, 46, 1, 0, 0, 0, 49, 7, 1, 0, 0, 0, 50, 58, 5, 38, 0, 0, 51, 58, 5, 39, 0, 0, 52, 58, 5, 40, 0, 0, 53, 58, 7, 1, 0, 0, 54, 58, 3, 10, 5, 0, 55, 58, 3, 12, 6, 0, 56, 58, 3, 0, 0, 0, 57, 50, 1, 0, 0, 0, 57, 51, 1, 0, 0, 0, 57, 52, 1, 0, 0, 0, 57, 53, 1, 0, 0, 0, 57, 54, 1, 0, 0, 0, 57, 55, 1, 0, 0, 0, 57, 56, 1, 0, 0, 0, 58, 9, 1, 0, 0, 0, 59, 60, 5, 1, 0, 0, 60, 61, 3, 12, 6, 0, 61, 11, 1, 0, 0, 0, 62, 63, 5, 1, 0, 0, 63, 64, 5, 2, 0, 0, 64, 69, 3, 14, 7, 0, 65, 66, 5, 2, 0, 0, 66, 68, 3, 14, 7, 0, 67, 65, 1, 0, 0, 0, 68, 71, 1, 0, 0, 0, 69, 67, 1, 0, 0, 0, 69, 70, 1, 0, 0, 0, 70, 13, 1, 0, 0, 0, 71, 69, 1, 0, 0, 0, 72, 75, 3, 16, 8, 0, 73, 75, 3, 18, 9, 0, 74, 72, 1, 0, 0, 0, 74, 73, 1, 0, 0, 0, 75, 15, 1, 0, 0, 0, 76, 77, 3, 24, 12, 0, 77, 17, 1, 0, 0, 0, 78, 79, 3, 16, 8, 0, 79, 80, 3, 20, 10, 0, 80, 19, 1, 0, 0, 0, 81, 82, 5, 7, 0, 0, 82, 91, 5, 8, 0, 0, 83, 84, 5, 7, 0, 0, 84, 85, 5, 39, 0, 0, 85, 91, 5, 8, 0, 0, 86, 87, 5, 7, 0, 0, 87, 88, 3, 22, 11, 0, 88, 89, 5, 8, 0, 0, 89, 91, 1, 0, 0, 0, 90, 81, 1, 0, 0, 0, 90, 83, 1, 0, 0, 0, 90, 86, 1, 0, 0, 0, 91, 21, 1, 0, 0, 0, 92, 93, 6, 11, -1, 0, 93, 105, 5, 3, 0, 0, 94, 95, 5, 11, 0, 0, 95, 100, 3, 16, 8, 0, 96, 97, 7, 2, 0, 0, 97, 101, 5, 39, 0, 0, 98, 99, 5, 16, 0, 0, 99, 101, 5, 38, 0, 0, 100, 96, 1, 0, 0, 0, 100, 98, 1, 0, 0, 0, 101, 105, 1, 0, 0, 0, 102, 103, 5, 12, 0, 0, 103, 105, 5, 39, 0, 0, 104, 92, 1, 0, 0, 0, 104, 94, 1, 0, 0, 0, 104, 102, 1, 0, 0, 0, 105, 115, 1, 0, 0, 0, 106, 109, 10, 1, 0, 0, 107, 108, 7, 3, 0, 0, 108, 110, 3, 22, 11, 0, 109, 107, 1, 0, 0, 0, 110, 111, 1, 0, 0, 0, 111, 109, 1, 0, 0, 0, 111, 112, 1, 0, 0, 0, 112, 114, 1, 0, 0, 0, 113, 106, 1, 0, 0, 0, 114, 117, 1, 0, 0, 0, 115, 113, 1, 0, 0, 0, 115, 116, 1, 0, 0, 0, 116, 23, 1, 0, 0, 0, 117, 115, 1, 0, 0, 0, 118, 121, 5, 41, 0, 0, 119, 121, 3, 4, 2, 0, 120, 118, 1, 0, 0, 0, 120, 119, 1, 0, 0, 0, 121, 25, 1, 0, 0, 0, 11, 41, 48, 57, 69, 74, 90, 100, 104, 111, 115, 120]
|
2661
moto/stepfunctions/parser/asl/antlr/runtime/ASLIntrinsicParser.py
Normal file
2661
moto/stepfunctions/parser/asl/antlr/runtime/ASLIntrinsicParser.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,79 @@
|
||||
DOLLAR=1
|
||||
DOT=2
|
||||
STAR=3
|
||||
COMMA=4
|
||||
LPAREN=5
|
||||
RPAREN=6
|
||||
LBRACK=7
|
||||
RBRACK=8
|
||||
LDIAM=9
|
||||
RDIAM=10
|
||||
ATDOT=11
|
||||
ATDOTLENGTHDASH=12
|
||||
ANDAND=13
|
||||
OROR=14
|
||||
EQEQ=15
|
||||
EQ=16
|
||||
TRUE=17
|
||||
FALSE=18
|
||||
States=19
|
||||
Format=20
|
||||
StringToJson=21
|
||||
JsonToString=22
|
||||
Array=23
|
||||
ArrayPartition=24
|
||||
ArrayContains=25
|
||||
ArrayRange=26
|
||||
ArrayGetItem=27
|
||||
ArrayLength=28
|
||||
ArrayUnique=29
|
||||
Base64Encode=30
|
||||
Base64Decode=31
|
||||
Hash=32
|
||||
JsonMerge=33
|
||||
MathRandom=34
|
||||
MathAdd=35
|
||||
StringSplit=36
|
||||
UUID=37
|
||||
STRING=38
|
||||
INT=39
|
||||
NUMBER=40
|
||||
IDENTIFIER=41
|
||||
WS=42
|
||||
'$'=1
|
||||
'.'=2
|
||||
'*'=3
|
||||
','=4
|
||||
'('=5
|
||||
')'=6
|
||||
'['=7
|
||||
']'=8
|
||||
'<'=9
|
||||
'>'=10
|
||||
'@.'=11
|
||||
'@.length-'=12
|
||||
'&&'=13
|
||||
'||'=14
|
||||
'=='=15
|
||||
'='=16
|
||||
'true'=17
|
||||
'false'=18
|
||||
'States'=19
|
||||
'Format'=20
|
||||
'StringToJson'=21
|
||||
'JsonToString'=22
|
||||
'Array'=23
|
||||
'ArrayPartition'=24
|
||||
'ArrayContains'=25
|
||||
'ArrayRange'=26
|
||||
'ArrayGetItem'=27
|
||||
'ArrayLength'=28
|
||||
'ArrayUnique'=29
|
||||
'Base64Encode'=30
|
||||
'Base64Decode'=31
|
||||
'Hash'=32
|
||||
'JsonMerge'=33
|
||||
'MathRandom'=34
|
||||
'MathAdd'=35
|
||||
'StringSplit'=36
|
||||
'UUID'=37
|
@ -0,0 +1,243 @@
|
||||
# Generated from /Users/mep/LocalStack/localstack/localstack/services/stepfunctions/asl/antlr/ASLIntrinsicParser.g4 by ANTLR 4.13.1
|
||||
from antlr4 import ParseTreeListener
|
||||
|
||||
if "." in __name__:
|
||||
from .ASLIntrinsicParser import ASLIntrinsicParser
|
||||
else:
|
||||
from ASLIntrinsicParser import ASLIntrinsicParser
|
||||
|
||||
# This class defines a complete listener for a parse tree produced by ASLIntrinsicParser.
|
||||
class ASLIntrinsicParserListener(ParseTreeListener):
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#func_decl.
|
||||
def enterFunc_decl(self, ctx: ASLIntrinsicParser.Func_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#func_decl.
|
||||
def exitFunc_decl(self, ctx: ASLIntrinsicParser.Func_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#states_func_decl.
|
||||
def enterStates_func_decl(self, ctx: ASLIntrinsicParser.States_func_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#states_func_decl.
|
||||
def exitStates_func_decl(self, ctx: ASLIntrinsicParser.States_func_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#state_fun_name.
|
||||
def enterState_fun_name(self, ctx: ASLIntrinsicParser.State_fun_nameContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#state_fun_name.
|
||||
def exitState_fun_name(self, ctx: ASLIntrinsicParser.State_fun_nameContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#func_arg_list.
|
||||
def enterFunc_arg_list(self, ctx: ASLIntrinsicParser.Func_arg_listContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#func_arg_list.
|
||||
def exitFunc_arg_list(self, ctx: ASLIntrinsicParser.Func_arg_listContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#func_arg_string.
|
||||
def enterFunc_arg_string(self, ctx: ASLIntrinsicParser.Func_arg_stringContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#func_arg_string.
|
||||
def exitFunc_arg_string(self, ctx: ASLIntrinsicParser.Func_arg_stringContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#func_arg_int.
|
||||
def enterFunc_arg_int(self, ctx: ASLIntrinsicParser.Func_arg_intContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#func_arg_int.
|
||||
def exitFunc_arg_int(self, ctx: ASLIntrinsicParser.Func_arg_intContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#func_arg_float.
|
||||
def enterFunc_arg_float(self, ctx: ASLIntrinsicParser.Func_arg_floatContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#func_arg_float.
|
||||
def exitFunc_arg_float(self, ctx: ASLIntrinsicParser.Func_arg_floatContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#func_arg_bool.
|
||||
def enterFunc_arg_bool(self, ctx: ASLIntrinsicParser.Func_arg_boolContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#func_arg_bool.
|
||||
def exitFunc_arg_bool(self, ctx: ASLIntrinsicParser.Func_arg_boolContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#func_arg_context_path.
|
||||
def enterFunc_arg_context_path(
|
||||
self, ctx: ASLIntrinsicParser.Func_arg_context_pathContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#func_arg_context_path.
|
||||
def exitFunc_arg_context_path(
|
||||
self, ctx: ASLIntrinsicParser.Func_arg_context_pathContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#func_arg_json_path.
|
||||
def enterFunc_arg_json_path(
|
||||
self, ctx: ASLIntrinsicParser.Func_arg_json_pathContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#func_arg_json_path.
|
||||
def exitFunc_arg_json_path(self, ctx: ASLIntrinsicParser.Func_arg_json_pathContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#func_arg_func_decl.
|
||||
def enterFunc_arg_func_decl(
|
||||
self, ctx: ASLIntrinsicParser.Func_arg_func_declContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#func_arg_func_decl.
|
||||
def exitFunc_arg_func_decl(self, ctx: ASLIntrinsicParser.Func_arg_func_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#context_path.
|
||||
def enterContext_path(self, ctx: ASLIntrinsicParser.Context_pathContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#context_path.
|
||||
def exitContext_path(self, ctx: ASLIntrinsicParser.Context_pathContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path.
|
||||
def enterJson_path(self, ctx: ASLIntrinsicParser.Json_pathContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path.
|
||||
def exitJson_path(self, ctx: ASLIntrinsicParser.Json_pathContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_part.
|
||||
def enterJson_path_part(self, ctx: ASLIntrinsicParser.Json_path_partContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_part.
|
||||
def exitJson_path_part(self, ctx: ASLIntrinsicParser.Json_path_partContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_iden.
|
||||
def enterJson_path_iden(self, ctx: ASLIntrinsicParser.Json_path_idenContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_iden.
|
||||
def exitJson_path_iden(self, ctx: ASLIntrinsicParser.Json_path_idenContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_iden_qual.
|
||||
def enterJson_path_iden_qual(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_iden_qualContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_iden_qual.
|
||||
def exitJson_path_iden_qual(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_iden_qualContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_qual_void.
|
||||
def enterJson_path_qual_void(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_qual_voidContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_qual_void.
|
||||
def exitJson_path_qual_void(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_qual_voidContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_qual_idx.
|
||||
def enterJson_path_qual_idx(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_qual_idxContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_qual_idx.
|
||||
def exitJson_path_qual_idx(self, ctx: ASLIntrinsicParser.Json_path_qual_idxContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_qual_query.
|
||||
def enterJson_path_qual_query(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_qual_queryContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_qual_query.
|
||||
def exitJson_path_qual_query(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_qual_queryContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_query_cmp.
|
||||
def enterJson_path_query_cmp(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_cmpContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_query_cmp.
|
||||
def exitJson_path_query_cmp(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_cmpContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_query_length.
|
||||
def enterJson_path_query_length(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_lengthContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_query_length.
|
||||
def exitJson_path_query_length(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_lengthContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_query_binary.
|
||||
def enterJson_path_query_binary(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_binaryContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_query_binary.
|
||||
def exitJson_path_query_binary(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_binaryContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#json_path_query_star.
|
||||
def enterJson_path_query_star(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_starContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#json_path_query_star.
|
||||
def exitJson_path_query_star(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_starContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLIntrinsicParser#identifier.
|
||||
def enterIdentifier(self, ctx: ASLIntrinsicParser.IdentifierContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLIntrinsicParser#identifier.
|
||||
def exitIdentifier(self, ctx: ASLIntrinsicParser.IdentifierContext):
|
||||
pass
|
||||
|
||||
|
||||
del ASLIntrinsicParser
|
@ -0,0 +1,133 @@
|
||||
# Generated from /Users/mep/LocalStack/localstack/localstack/services/stepfunctions/asl/antlr/ASLIntrinsicParser.g4 by ANTLR 4.13.1
|
||||
from antlr4 import ParseTreeVisitor
|
||||
|
||||
if "." in __name__:
|
||||
from .ASLIntrinsicParser import ASLIntrinsicParser
|
||||
else:
|
||||
from ASLIntrinsicParser import ASLIntrinsicParser
|
||||
|
||||
# This class defines a complete generic visitor for a parse tree produced by ASLIntrinsicParser.
|
||||
|
||||
|
||||
class ASLIntrinsicParserVisitor(ParseTreeVisitor):
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#func_decl.
|
||||
def visitFunc_decl(self, ctx: ASLIntrinsicParser.Func_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#states_func_decl.
|
||||
def visitStates_func_decl(self, ctx: ASLIntrinsicParser.States_func_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#state_fun_name.
|
||||
def visitState_fun_name(self, ctx: ASLIntrinsicParser.State_fun_nameContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#func_arg_list.
|
||||
def visitFunc_arg_list(self, ctx: ASLIntrinsicParser.Func_arg_listContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#func_arg_string.
|
||||
def visitFunc_arg_string(self, ctx: ASLIntrinsicParser.Func_arg_stringContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#func_arg_int.
|
||||
def visitFunc_arg_int(self, ctx: ASLIntrinsicParser.Func_arg_intContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#func_arg_float.
|
||||
def visitFunc_arg_float(self, ctx: ASLIntrinsicParser.Func_arg_floatContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#func_arg_bool.
|
||||
def visitFunc_arg_bool(self, ctx: ASLIntrinsicParser.Func_arg_boolContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#func_arg_context_path.
|
||||
def visitFunc_arg_context_path(
|
||||
self, ctx: ASLIntrinsicParser.Func_arg_context_pathContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#func_arg_json_path.
|
||||
def visitFunc_arg_json_path(
|
||||
self, ctx: ASLIntrinsicParser.Func_arg_json_pathContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#func_arg_func_decl.
|
||||
def visitFunc_arg_func_decl(
|
||||
self, ctx: ASLIntrinsicParser.Func_arg_func_declContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#context_path.
|
||||
def visitContext_path(self, ctx: ASLIntrinsicParser.Context_pathContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path.
|
||||
def visitJson_path(self, ctx: ASLIntrinsicParser.Json_pathContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_part.
|
||||
def visitJson_path_part(self, ctx: ASLIntrinsicParser.Json_path_partContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_iden.
|
||||
def visitJson_path_iden(self, ctx: ASLIntrinsicParser.Json_path_idenContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_iden_qual.
|
||||
def visitJson_path_iden_qual(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_iden_qualContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_qual_void.
|
||||
def visitJson_path_qual_void(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_qual_voidContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_qual_idx.
|
||||
def visitJson_path_qual_idx(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_qual_idxContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_qual_query.
|
||||
def visitJson_path_qual_query(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_qual_queryContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_query_cmp.
|
||||
def visitJson_path_query_cmp(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_cmpContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_query_length.
|
||||
def visitJson_path_query_length(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_lengthContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_query_binary.
|
||||
def visitJson_path_query_binary(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_binaryContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#json_path_query_star.
|
||||
def visitJson_path_query_star(
|
||||
self, ctx: ASLIntrinsicParser.Json_path_query_starContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLIntrinsicParser#identifier.
|
||||
def visitIdentifier(self, ctx: ASLIntrinsicParser.IdentifierContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
|
||||
del ASLIntrinsicParser
|
421
moto/stepfunctions/parser/asl/antlr/runtime/ASLLexer.interp
Normal file
421
moto/stepfunctions/parser/asl/antlr/runtime/ASLLexer.interp
Normal file
File diff suppressed because one or more lines are too long
19662
moto/stepfunctions/parser/asl/antlr/runtime/ASLLexer.py
Normal file
19662
moto/stepfunctions/parser/asl/antlr/runtime/ASLLexer.py
Normal file
File diff suppressed because it is too large
Load Diff
259
moto/stepfunctions/parser/asl/antlr/runtime/ASLLexer.tokens
Normal file
259
moto/stepfunctions/parser/asl/antlr/runtime/ASLLexer.tokens
Normal file
@ -0,0 +1,259 @@
|
||||
COMMA=1
|
||||
COLON=2
|
||||
LBRACK=3
|
||||
RBRACK=4
|
||||
LBRACE=5
|
||||
RBRACE=6
|
||||
TRUE=7
|
||||
FALSE=8
|
||||
NULL=9
|
||||
COMMENT=10
|
||||
STATES=11
|
||||
STARTAT=12
|
||||
NEXTSTATE=13
|
||||
VERSION=14
|
||||
TYPE=15
|
||||
TASK=16
|
||||
CHOICE=17
|
||||
FAIL=18
|
||||
SUCCEED=19
|
||||
PASS=20
|
||||
WAIT=21
|
||||
PARALLEL=22
|
||||
MAP=23
|
||||
CHOICES=24
|
||||
VARIABLE=25
|
||||
DEFAULT=26
|
||||
BRANCHES=27
|
||||
AND=28
|
||||
BOOLEANEQUALS=29
|
||||
BOOLEANQUALSPATH=30
|
||||
ISBOOLEAN=31
|
||||
ISNULL=32
|
||||
ISNUMERIC=33
|
||||
ISPRESENT=34
|
||||
ISSTRING=35
|
||||
ISTIMESTAMP=36
|
||||
NOT=37
|
||||
NUMERICEQUALS=38
|
||||
NUMERICEQUALSPATH=39
|
||||
NUMERICGREATERTHAN=40
|
||||
NUMERICGREATERTHANPATH=41
|
||||
NUMERICGREATERTHANEQUALS=42
|
||||
NUMERICGREATERTHANEQUALSPATH=43
|
||||
NUMERICLESSTHAN=44
|
||||
NUMERICLESSTHANPATH=45
|
||||
NUMERICLESSTHANEQUALS=46
|
||||
NUMERICLESSTHANEQUALSPATH=47
|
||||
OR=48
|
||||
STRINGEQUALS=49
|
||||
STRINGEQUALSPATH=50
|
||||
STRINGGREATERTHAN=51
|
||||
STRINGGREATERTHANPATH=52
|
||||
STRINGGREATERTHANEQUALS=53
|
||||
STRINGGREATERTHANEQUALSPATH=54
|
||||
STRINGLESSTHAN=55
|
||||
STRINGLESSTHANPATH=56
|
||||
STRINGLESSTHANEQUALS=57
|
||||
STRINGLESSTHANEQUALSPATH=58
|
||||
STRINGMATCHES=59
|
||||
TIMESTAMPEQUALS=60
|
||||
TIMESTAMPEQUALSPATH=61
|
||||
TIMESTAMPGREATERTHAN=62
|
||||
TIMESTAMPGREATERTHANPATH=63
|
||||
TIMESTAMPGREATERTHANEQUALS=64
|
||||
TIMESTAMPGREATERTHANEQUALSPATH=65
|
||||
TIMESTAMPLESSTHAN=66
|
||||
TIMESTAMPLESSTHANPATH=67
|
||||
TIMESTAMPLESSTHANEQUALS=68
|
||||
TIMESTAMPLESSTHANEQUALSPATH=69
|
||||
SECONDSPATH=70
|
||||
SECONDS=71
|
||||
TIMESTAMPPATH=72
|
||||
TIMESTAMP=73
|
||||
TIMEOUTSECONDS=74
|
||||
TIMEOUTSECONDSPATH=75
|
||||
HEARTBEATSECONDS=76
|
||||
HEARTBEATSECONDSPATH=77
|
||||
PROCESSORCONFIG=78
|
||||
MODE=79
|
||||
INLINE=80
|
||||
DISTRIBUTED=81
|
||||
EXECUTIONTYPE=82
|
||||
STANDARD=83
|
||||
ITEMPROCESSOR=84
|
||||
ITERATOR=85
|
||||
ITEMSELECTOR=86
|
||||
MAXCONCURRENCY=87
|
||||
RESOURCE=88
|
||||
INPUTPATH=89
|
||||
OUTPUTPATH=90
|
||||
ITEMSPATH=91
|
||||
RESULTPATH=92
|
||||
RESULT=93
|
||||
PARAMETERS=94
|
||||
RESULTSELECTOR=95
|
||||
ITEMREADER=96
|
||||
READERCONFIG=97
|
||||
INPUTTYPE=98
|
||||
CSVHEADERLOCATION=99
|
||||
CSVHEADERS=100
|
||||
MAXITEMS=101
|
||||
MAXITEMSPATH=102
|
||||
NEXT=103
|
||||
END=104
|
||||
CAUSE=105
|
||||
ERROR=106
|
||||
RETRY=107
|
||||
ERROREQUALS=108
|
||||
INTERVALSECONDS=109
|
||||
MAXATTEMPTS=110
|
||||
BACKOFFRATE=111
|
||||
CATCH=112
|
||||
ERRORNAMEStatesALL=113
|
||||
ERRORNAMEStatesHeartbeatTimeout=114
|
||||
ERRORNAMEStatesTimeout=115
|
||||
ERRORNAMEStatesTaskFailed=116
|
||||
ERRORNAMEStatesPermissions=117
|
||||
ERRORNAMEStatesResultPathMatchFailure=118
|
||||
ERRORNAMEStatesParameterPathFailure=119
|
||||
ERRORNAMEStatesBranchFailed=120
|
||||
ERRORNAMEStatesNoChoiceMatched=121
|
||||
ERRORNAMEStatesIntrinsicFailure=122
|
||||
ERRORNAMEStatesExceedToleratedFailureThreshold=123
|
||||
ERRORNAMEStatesItemReaderFailed=124
|
||||
ERRORNAMEStatesResultWriterFailed=125
|
||||
ERRORNAMEStatesRuntime=126
|
||||
STRINGDOLLAR=127
|
||||
STRINGPATHCONTEXTOBJ=128
|
||||
STRINGPATH=129
|
||||
STRING=130
|
||||
INT=131
|
||||
NUMBER=132
|
||||
WS=133
|
||||
','=1
|
||||
':'=2
|
||||
'['=3
|
||||
']'=4
|
||||
'{'=5
|
||||
'}'=6
|
||||
'true'=7
|
||||
'false'=8
|
||||
'null'=9
|
||||
'"Comment"'=10
|
||||
'"States"'=11
|
||||
'"StartAt"'=12
|
||||
'"NextState"'=13
|
||||
'"Version"'=14
|
||||
'"Type"'=15
|
||||
'"Task"'=16
|
||||
'"Choice"'=17
|
||||
'"Fail"'=18
|
||||
'"Succeed"'=19
|
||||
'"Pass"'=20
|
||||
'"Wait"'=21
|
||||
'"Parallel"'=22
|
||||
'"Map"'=23
|
||||
'"Choices"'=24
|
||||
'"Variable"'=25
|
||||
'"Default"'=26
|
||||
'"Branches"'=27
|
||||
'"And"'=28
|
||||
'"BooleanEquals"'=29
|
||||
'"BooleanEqualsPath"'=30
|
||||
'"IsBoolean"'=31
|
||||
'"IsNull"'=32
|
||||
'"IsNumeric"'=33
|
||||
'"IsPresent"'=34
|
||||
'"IsString"'=35
|
||||
'"IsTimestamp"'=36
|
||||
'"Not"'=37
|
||||
'"NumericEquals"'=38
|
||||
'"NumericEqualsPath"'=39
|
||||
'"NumericGreaterThan"'=40
|
||||
'"NumericGreaterThanPath"'=41
|
||||
'"NumericGreaterThanEquals"'=42
|
||||
'"NumericGreaterThanEqualsPath"'=43
|
||||
'"NumericLessThan"'=44
|
||||
'"NumericLessThanPath"'=45
|
||||
'"NumericLessThanEquals"'=46
|
||||
'"NumericLessThanEqualsPath"'=47
|
||||
'"Or"'=48
|
||||
'"StringEquals"'=49
|
||||
'"StringEqualsPath"'=50
|
||||
'"StringGreaterThan"'=51
|
||||
'"StringGreaterThanPath"'=52
|
||||
'"StringGreaterThanEquals"'=53
|
||||
'"StringGreaterThanEqualsPath"'=54
|
||||
'"StringLessThan"'=55
|
||||
'"StringLessThanPath"'=56
|
||||
'"StringLessThanEquals"'=57
|
||||
'"StringLessThanEqualsPath"'=58
|
||||
'"StringMatches"'=59
|
||||
'"TimestampEquals"'=60
|
||||
'"TimestampEqualsPath"'=61
|
||||
'"TimestampGreaterThan"'=62
|
||||
'"TimestampGreaterThanPath"'=63
|
||||
'"TimestampGreaterThanEquals"'=64
|
||||
'"TimestampGreaterThanEqualsPath"'=65
|
||||
'"TimestampLessThan"'=66
|
||||
'"TimestampLessThanPath"'=67
|
||||
'"TimestampLessThanEquals"'=68
|
||||
'"TimestampLessThanEqualsPath"'=69
|
||||
'"SecondsPath"'=70
|
||||
'"Seconds"'=71
|
||||
'"TimestampPath"'=72
|
||||
'"Timestamp"'=73
|
||||
'"TimeoutSeconds"'=74
|
||||
'"TimeoutSecondsPath"'=75
|
||||
'"HeartbeatSeconds"'=76
|
||||
'"HeartbeatSecondsPath"'=77
|
||||
'"ProcessorConfig"'=78
|
||||
'"Mode"'=79
|
||||
'"INLINE"'=80
|
||||
'"DISTRIBUTED"'=81
|
||||
'"ExecutionType"'=82
|
||||
'"STANDARD"'=83
|
||||
'"ItemProcessor"'=84
|
||||
'"Iterator"'=85
|
||||
'"ItemSelector"'=86
|
||||
'"MaxConcurrency"'=87
|
||||
'"Resource"'=88
|
||||
'"InputPath"'=89
|
||||
'"OutputPath"'=90
|
||||
'"ItemsPath"'=91
|
||||
'"ResultPath"'=92
|
||||
'"Result"'=93
|
||||
'"Parameters"'=94
|
||||
'"ResultSelector"'=95
|
||||
'"ItemReader"'=96
|
||||
'"ReaderConfig"'=97
|
||||
'"InputType"'=98
|
||||
'"CSVHeaderLocation"'=99
|
||||
'"CSVHeaders"'=100
|
||||
'"MaxItems"'=101
|
||||
'"MaxItemsPath"'=102
|
||||
'"Next"'=103
|
||||
'"End"'=104
|
||||
'"Cause"'=105
|
||||
'"Error"'=106
|
||||
'"Retry"'=107
|
||||
'"ErrorEquals"'=108
|
||||
'"IntervalSeconds"'=109
|
||||
'"MaxAttempts"'=110
|
||||
'"BackoffRate"'=111
|
||||
'"Catch"'=112
|
||||
'"States.ALL"'=113
|
||||
'"States.HeartbeatTimeout"'=114
|
||||
'"States.Timeout"'=115
|
||||
'"States.TaskFailed"'=116
|
||||
'"States.Permissions"'=117
|
||||
'"States.ResultPathMatchFailure"'=118
|
||||
'"States.ParameterPathFailure"'=119
|
||||
'"States.BranchFailed"'=120
|
||||
'"States.NoChoiceMatched"'=121
|
||||
'"States.IntrinsicFailure"'=122
|
||||
'"States.ExceedToleratedFailureThreshold"'=123
|
||||
'"States.ItemReaderFailed"'=124
|
||||
'"States.ResultWriterFailed"'=125
|
||||
'"States.Runtime"'=126
|
364
moto/stepfunctions/parser/asl/antlr/runtime/ASLParser.interp
Normal file
364
moto/stepfunctions/parser/asl/antlr/runtime/ASLParser.interp
Normal file
File diff suppressed because one or more lines are too long
14824
moto/stepfunctions/parser/asl/antlr/runtime/ASLParser.py
Normal file
14824
moto/stepfunctions/parser/asl/antlr/runtime/ASLParser.py
Normal file
File diff suppressed because it is too large
Load Diff
259
moto/stepfunctions/parser/asl/antlr/runtime/ASLParser.tokens
Normal file
259
moto/stepfunctions/parser/asl/antlr/runtime/ASLParser.tokens
Normal file
@ -0,0 +1,259 @@
|
||||
COMMA=1
|
||||
COLON=2
|
||||
LBRACK=3
|
||||
RBRACK=4
|
||||
LBRACE=5
|
||||
RBRACE=6
|
||||
TRUE=7
|
||||
FALSE=8
|
||||
NULL=9
|
||||
COMMENT=10
|
||||
STATES=11
|
||||
STARTAT=12
|
||||
NEXTSTATE=13
|
||||
VERSION=14
|
||||
TYPE=15
|
||||
TASK=16
|
||||
CHOICE=17
|
||||
FAIL=18
|
||||
SUCCEED=19
|
||||
PASS=20
|
||||
WAIT=21
|
||||
PARALLEL=22
|
||||
MAP=23
|
||||
CHOICES=24
|
||||
VARIABLE=25
|
||||
DEFAULT=26
|
||||
BRANCHES=27
|
||||
AND=28
|
||||
BOOLEANEQUALS=29
|
||||
BOOLEANQUALSPATH=30
|
||||
ISBOOLEAN=31
|
||||
ISNULL=32
|
||||
ISNUMERIC=33
|
||||
ISPRESENT=34
|
||||
ISSTRING=35
|
||||
ISTIMESTAMP=36
|
||||
NOT=37
|
||||
NUMERICEQUALS=38
|
||||
NUMERICEQUALSPATH=39
|
||||
NUMERICGREATERTHAN=40
|
||||
NUMERICGREATERTHANPATH=41
|
||||
NUMERICGREATERTHANEQUALS=42
|
||||
NUMERICGREATERTHANEQUALSPATH=43
|
||||
NUMERICLESSTHAN=44
|
||||
NUMERICLESSTHANPATH=45
|
||||
NUMERICLESSTHANEQUALS=46
|
||||
NUMERICLESSTHANEQUALSPATH=47
|
||||
OR=48
|
||||
STRINGEQUALS=49
|
||||
STRINGEQUALSPATH=50
|
||||
STRINGGREATERTHAN=51
|
||||
STRINGGREATERTHANPATH=52
|
||||
STRINGGREATERTHANEQUALS=53
|
||||
STRINGGREATERTHANEQUALSPATH=54
|
||||
STRINGLESSTHAN=55
|
||||
STRINGLESSTHANPATH=56
|
||||
STRINGLESSTHANEQUALS=57
|
||||
STRINGLESSTHANEQUALSPATH=58
|
||||
STRINGMATCHES=59
|
||||
TIMESTAMPEQUALS=60
|
||||
TIMESTAMPEQUALSPATH=61
|
||||
TIMESTAMPGREATERTHAN=62
|
||||
TIMESTAMPGREATERTHANPATH=63
|
||||
TIMESTAMPGREATERTHANEQUALS=64
|
||||
TIMESTAMPGREATERTHANEQUALSPATH=65
|
||||
TIMESTAMPLESSTHAN=66
|
||||
TIMESTAMPLESSTHANPATH=67
|
||||
TIMESTAMPLESSTHANEQUALS=68
|
||||
TIMESTAMPLESSTHANEQUALSPATH=69
|
||||
SECONDSPATH=70
|
||||
SECONDS=71
|
||||
TIMESTAMPPATH=72
|
||||
TIMESTAMP=73
|
||||
TIMEOUTSECONDS=74
|
||||
TIMEOUTSECONDSPATH=75
|
||||
HEARTBEATSECONDS=76
|
||||
HEARTBEATSECONDSPATH=77
|
||||
PROCESSORCONFIG=78
|
||||
MODE=79
|
||||
INLINE=80
|
||||
DISTRIBUTED=81
|
||||
EXECUTIONTYPE=82
|
||||
STANDARD=83
|
||||
ITEMPROCESSOR=84
|
||||
ITERATOR=85
|
||||
ITEMSELECTOR=86
|
||||
MAXCONCURRENCY=87
|
||||
RESOURCE=88
|
||||
INPUTPATH=89
|
||||
OUTPUTPATH=90
|
||||
ITEMSPATH=91
|
||||
RESULTPATH=92
|
||||
RESULT=93
|
||||
PARAMETERS=94
|
||||
RESULTSELECTOR=95
|
||||
ITEMREADER=96
|
||||
READERCONFIG=97
|
||||
INPUTTYPE=98
|
||||
CSVHEADERLOCATION=99
|
||||
CSVHEADERS=100
|
||||
MAXITEMS=101
|
||||
MAXITEMSPATH=102
|
||||
NEXT=103
|
||||
END=104
|
||||
CAUSE=105
|
||||
ERROR=106
|
||||
RETRY=107
|
||||
ERROREQUALS=108
|
||||
INTERVALSECONDS=109
|
||||
MAXATTEMPTS=110
|
||||
BACKOFFRATE=111
|
||||
CATCH=112
|
||||
ERRORNAMEStatesALL=113
|
||||
ERRORNAMEStatesHeartbeatTimeout=114
|
||||
ERRORNAMEStatesTimeout=115
|
||||
ERRORNAMEStatesTaskFailed=116
|
||||
ERRORNAMEStatesPermissions=117
|
||||
ERRORNAMEStatesResultPathMatchFailure=118
|
||||
ERRORNAMEStatesParameterPathFailure=119
|
||||
ERRORNAMEStatesBranchFailed=120
|
||||
ERRORNAMEStatesNoChoiceMatched=121
|
||||
ERRORNAMEStatesIntrinsicFailure=122
|
||||
ERRORNAMEStatesExceedToleratedFailureThreshold=123
|
||||
ERRORNAMEStatesItemReaderFailed=124
|
||||
ERRORNAMEStatesResultWriterFailed=125
|
||||
ERRORNAMEStatesRuntime=126
|
||||
STRINGDOLLAR=127
|
||||
STRINGPATHCONTEXTOBJ=128
|
||||
STRINGPATH=129
|
||||
STRING=130
|
||||
INT=131
|
||||
NUMBER=132
|
||||
WS=133
|
||||
','=1
|
||||
':'=2
|
||||
'['=3
|
||||
']'=4
|
||||
'{'=5
|
||||
'}'=6
|
||||
'true'=7
|
||||
'false'=8
|
||||
'null'=9
|
||||
'"Comment"'=10
|
||||
'"States"'=11
|
||||
'"StartAt"'=12
|
||||
'"NextState"'=13
|
||||
'"Version"'=14
|
||||
'"Type"'=15
|
||||
'"Task"'=16
|
||||
'"Choice"'=17
|
||||
'"Fail"'=18
|
||||
'"Succeed"'=19
|
||||
'"Pass"'=20
|
||||
'"Wait"'=21
|
||||
'"Parallel"'=22
|
||||
'"Map"'=23
|
||||
'"Choices"'=24
|
||||
'"Variable"'=25
|
||||
'"Default"'=26
|
||||
'"Branches"'=27
|
||||
'"And"'=28
|
||||
'"BooleanEquals"'=29
|
||||
'"BooleanEqualsPath"'=30
|
||||
'"IsBoolean"'=31
|
||||
'"IsNull"'=32
|
||||
'"IsNumeric"'=33
|
||||
'"IsPresent"'=34
|
||||
'"IsString"'=35
|
||||
'"IsTimestamp"'=36
|
||||
'"Not"'=37
|
||||
'"NumericEquals"'=38
|
||||
'"NumericEqualsPath"'=39
|
||||
'"NumericGreaterThan"'=40
|
||||
'"NumericGreaterThanPath"'=41
|
||||
'"NumericGreaterThanEquals"'=42
|
||||
'"NumericGreaterThanEqualsPath"'=43
|
||||
'"NumericLessThan"'=44
|
||||
'"NumericLessThanPath"'=45
|
||||
'"NumericLessThanEquals"'=46
|
||||
'"NumericLessThanEqualsPath"'=47
|
||||
'"Or"'=48
|
||||
'"StringEquals"'=49
|
||||
'"StringEqualsPath"'=50
|
||||
'"StringGreaterThan"'=51
|
||||
'"StringGreaterThanPath"'=52
|
||||
'"StringGreaterThanEquals"'=53
|
||||
'"StringGreaterThanEqualsPath"'=54
|
||||
'"StringLessThan"'=55
|
||||
'"StringLessThanPath"'=56
|
||||
'"StringLessThanEquals"'=57
|
||||
'"StringLessThanEqualsPath"'=58
|
||||
'"StringMatches"'=59
|
||||
'"TimestampEquals"'=60
|
||||
'"TimestampEqualsPath"'=61
|
||||
'"TimestampGreaterThan"'=62
|
||||
'"TimestampGreaterThanPath"'=63
|
||||
'"TimestampGreaterThanEquals"'=64
|
||||
'"TimestampGreaterThanEqualsPath"'=65
|
||||
'"TimestampLessThan"'=66
|
||||
'"TimestampLessThanPath"'=67
|
||||
'"TimestampLessThanEquals"'=68
|
||||
'"TimestampLessThanEqualsPath"'=69
|
||||
'"SecondsPath"'=70
|
||||
'"Seconds"'=71
|
||||
'"TimestampPath"'=72
|
||||
'"Timestamp"'=73
|
||||
'"TimeoutSeconds"'=74
|
||||
'"TimeoutSecondsPath"'=75
|
||||
'"HeartbeatSeconds"'=76
|
||||
'"HeartbeatSecondsPath"'=77
|
||||
'"ProcessorConfig"'=78
|
||||
'"Mode"'=79
|
||||
'"INLINE"'=80
|
||||
'"DISTRIBUTED"'=81
|
||||
'"ExecutionType"'=82
|
||||
'"STANDARD"'=83
|
||||
'"ItemProcessor"'=84
|
||||
'"Iterator"'=85
|
||||
'"ItemSelector"'=86
|
||||
'"MaxConcurrency"'=87
|
||||
'"Resource"'=88
|
||||
'"InputPath"'=89
|
||||
'"OutputPath"'=90
|
||||
'"ItemsPath"'=91
|
||||
'"ResultPath"'=92
|
||||
'"Result"'=93
|
||||
'"Parameters"'=94
|
||||
'"ResultSelector"'=95
|
||||
'"ItemReader"'=96
|
||||
'"ReaderConfig"'=97
|
||||
'"InputType"'=98
|
||||
'"CSVHeaderLocation"'=99
|
||||
'"CSVHeaders"'=100
|
||||
'"MaxItems"'=101
|
||||
'"MaxItemsPath"'=102
|
||||
'"Next"'=103
|
||||
'"End"'=104
|
||||
'"Cause"'=105
|
||||
'"Error"'=106
|
||||
'"Retry"'=107
|
||||
'"ErrorEquals"'=108
|
||||
'"IntervalSeconds"'=109
|
||||
'"MaxAttempts"'=110
|
||||
'"BackoffRate"'=111
|
||||
'"Catch"'=112
|
||||
'"States.ALL"'=113
|
||||
'"States.HeartbeatTimeout"'=114
|
||||
'"States.Timeout"'=115
|
||||
'"States.TaskFailed"'=116
|
||||
'"States.Permissions"'=117
|
||||
'"States.ResultPathMatchFailure"'=118
|
||||
'"States.ParameterPathFailure"'=119
|
||||
'"States.BranchFailed"'=120
|
||||
'"States.NoChoiceMatched"'=121
|
||||
'"States.IntrinsicFailure"'=122
|
||||
'"States.ExceedToleratedFailureThreshold"'=123
|
||||
'"States.ItemReaderFailed"'=124
|
||||
'"States.ResultWriterFailed"'=125
|
||||
'"States.Runtime"'=126
|
809
moto/stepfunctions/parser/asl/antlr/runtime/ASLParserListener.py
Normal file
809
moto/stepfunctions/parser/asl/antlr/runtime/ASLParserListener.py
Normal file
@ -0,0 +1,809 @@
|
||||
# Generated from /Users/mep/LocalStack/localstack/localstack/services/stepfunctions/asl/antlr/ASLParser.g4 by ANTLR 4.13.1
|
||||
from antlr4 import ParseTreeListener
|
||||
|
||||
if "." in __name__:
|
||||
from .ASLParser import ASLParser
|
||||
else:
|
||||
from ASLParser import ASLParser
|
||||
|
||||
# This class defines a complete listener for a parse tree produced by ASLParser.
|
||||
class ASLParserListener(ParseTreeListener):
|
||||
|
||||
# Enter a parse tree produced by ASLParser#program_decl.
|
||||
def enterProgram_decl(self, ctx: ASLParser.Program_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#program_decl.
|
||||
def exitProgram_decl(self, ctx: ASLParser.Program_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#top_layer_stmt.
|
||||
def enterTop_layer_stmt(self, ctx: ASLParser.Top_layer_stmtContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#top_layer_stmt.
|
||||
def exitTop_layer_stmt(self, ctx: ASLParser.Top_layer_stmtContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#startat_decl.
|
||||
def enterStartat_decl(self, ctx: ASLParser.Startat_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#startat_decl.
|
||||
def exitStartat_decl(self, ctx: ASLParser.Startat_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#comment_decl.
|
||||
def enterComment_decl(self, ctx: ASLParser.Comment_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#comment_decl.
|
||||
def exitComment_decl(self, ctx: ASLParser.Comment_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#version_decl.
|
||||
def enterVersion_decl(self, ctx: ASLParser.Version_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#version_decl.
|
||||
def exitVersion_decl(self, ctx: ASLParser.Version_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#state_stmt.
|
||||
def enterState_stmt(self, ctx: ASLParser.State_stmtContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#state_stmt.
|
||||
def exitState_stmt(self, ctx: ASLParser.State_stmtContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#states_decl.
|
||||
def enterStates_decl(self, ctx: ASLParser.States_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#states_decl.
|
||||
def exitStates_decl(self, ctx: ASLParser.States_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#state_name.
|
||||
def enterState_name(self, ctx: ASLParser.State_nameContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#state_name.
|
||||
def exitState_name(self, ctx: ASLParser.State_nameContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#state_decl.
|
||||
def enterState_decl(self, ctx: ASLParser.State_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#state_decl.
|
||||
def exitState_decl(self, ctx: ASLParser.State_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#state_decl_body.
|
||||
def enterState_decl_body(self, ctx: ASLParser.State_decl_bodyContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#state_decl_body.
|
||||
def exitState_decl_body(self, ctx: ASLParser.State_decl_bodyContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#type_decl.
|
||||
def enterType_decl(self, ctx: ASLParser.Type_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#type_decl.
|
||||
def exitType_decl(self, ctx: ASLParser.Type_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#next_decl.
|
||||
def enterNext_decl(self, ctx: ASLParser.Next_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#next_decl.
|
||||
def exitNext_decl(self, ctx: ASLParser.Next_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#resource_decl.
|
||||
def enterResource_decl(self, ctx: ASLParser.Resource_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#resource_decl.
|
||||
def exitResource_decl(self, ctx: ASLParser.Resource_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#input_path_decl.
|
||||
def enterInput_path_decl(self, ctx: ASLParser.Input_path_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#input_path_decl.
|
||||
def exitInput_path_decl(self, ctx: ASLParser.Input_path_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#result_decl.
|
||||
def enterResult_decl(self, ctx: ASLParser.Result_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#result_decl.
|
||||
def exitResult_decl(self, ctx: ASLParser.Result_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#result_path_decl.
|
||||
def enterResult_path_decl(self, ctx: ASLParser.Result_path_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#result_path_decl.
|
||||
def exitResult_path_decl(self, ctx: ASLParser.Result_path_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#output_path_decl.
|
||||
def enterOutput_path_decl(self, ctx: ASLParser.Output_path_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#output_path_decl.
|
||||
def exitOutput_path_decl(self, ctx: ASLParser.Output_path_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#end_decl.
|
||||
def enterEnd_decl(self, ctx: ASLParser.End_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#end_decl.
|
||||
def exitEnd_decl(self, ctx: ASLParser.End_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#default_decl.
|
||||
def enterDefault_decl(self, ctx: ASLParser.Default_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#default_decl.
|
||||
def exitDefault_decl(self, ctx: ASLParser.Default_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#error_decl.
|
||||
def enterError_decl(self, ctx: ASLParser.Error_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#error_decl.
|
||||
def exitError_decl(self, ctx: ASLParser.Error_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#cause_decl.
|
||||
def enterCause_decl(self, ctx: ASLParser.Cause_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#cause_decl.
|
||||
def exitCause_decl(self, ctx: ASLParser.Cause_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#seconds_decl.
|
||||
def enterSeconds_decl(self, ctx: ASLParser.Seconds_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#seconds_decl.
|
||||
def exitSeconds_decl(self, ctx: ASLParser.Seconds_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#seconds_path_decl.
|
||||
def enterSeconds_path_decl(self, ctx: ASLParser.Seconds_path_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#seconds_path_decl.
|
||||
def exitSeconds_path_decl(self, ctx: ASLParser.Seconds_path_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#timestamp_decl.
|
||||
def enterTimestamp_decl(self, ctx: ASLParser.Timestamp_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#timestamp_decl.
|
||||
def exitTimestamp_decl(self, ctx: ASLParser.Timestamp_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#timestamp_path_decl.
|
||||
def enterTimestamp_path_decl(self, ctx: ASLParser.Timestamp_path_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#timestamp_path_decl.
|
||||
def exitTimestamp_path_decl(self, ctx: ASLParser.Timestamp_path_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#items_path_decl.
|
||||
def enterItems_path_decl(self, ctx: ASLParser.Items_path_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#items_path_decl.
|
||||
def exitItems_path_decl(self, ctx: ASLParser.Items_path_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#max_concurrency_decl.
|
||||
def enterMax_concurrency_decl(self, ctx: ASLParser.Max_concurrency_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#max_concurrency_decl.
|
||||
def exitMax_concurrency_decl(self, ctx: ASLParser.Max_concurrency_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#parameters_decl.
|
||||
def enterParameters_decl(self, ctx: ASLParser.Parameters_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#parameters_decl.
|
||||
def exitParameters_decl(self, ctx: ASLParser.Parameters_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#timeout_seconds_decl.
|
||||
def enterTimeout_seconds_decl(self, ctx: ASLParser.Timeout_seconds_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#timeout_seconds_decl.
|
||||
def exitTimeout_seconds_decl(self, ctx: ASLParser.Timeout_seconds_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#timeout_seconds_path_decl.
|
||||
def enterTimeout_seconds_path_decl(
|
||||
self, ctx: ASLParser.Timeout_seconds_path_declContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#timeout_seconds_path_decl.
|
||||
def exitTimeout_seconds_path_decl(
|
||||
self, ctx: ASLParser.Timeout_seconds_path_declContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#heartbeat_seconds_decl.
|
||||
def enterHeartbeat_seconds_decl(self, ctx: ASLParser.Heartbeat_seconds_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#heartbeat_seconds_decl.
|
||||
def exitHeartbeat_seconds_decl(self, ctx: ASLParser.Heartbeat_seconds_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#heartbeat_seconds_path_decl.
|
||||
def enterHeartbeat_seconds_path_decl(
|
||||
self, ctx: ASLParser.Heartbeat_seconds_path_declContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#heartbeat_seconds_path_decl.
|
||||
def exitHeartbeat_seconds_path_decl(
|
||||
self, ctx: ASLParser.Heartbeat_seconds_path_declContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_tmpl_decl.
|
||||
def enterPayload_tmpl_decl(self, ctx: ASLParser.Payload_tmpl_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_tmpl_decl.
|
||||
def exitPayload_tmpl_decl(self, ctx: ASLParser.Payload_tmpl_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_binding_path.
|
||||
def enterPayload_binding_path(self, ctx: ASLParser.Payload_binding_pathContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_binding_path.
|
||||
def exitPayload_binding_path(self, ctx: ASLParser.Payload_binding_pathContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_binding_path_context_obj.
|
||||
def enterPayload_binding_path_context_obj(
|
||||
self, ctx: ASLParser.Payload_binding_path_context_objContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_binding_path_context_obj.
|
||||
def exitPayload_binding_path_context_obj(
|
||||
self, ctx: ASLParser.Payload_binding_path_context_objContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_binding_intrinsic_func.
|
||||
def enterPayload_binding_intrinsic_func(
|
||||
self, ctx: ASLParser.Payload_binding_intrinsic_funcContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_binding_intrinsic_func.
|
||||
def exitPayload_binding_intrinsic_func(
|
||||
self, ctx: ASLParser.Payload_binding_intrinsic_funcContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_binding_value.
|
||||
def enterPayload_binding_value(self, ctx: ASLParser.Payload_binding_valueContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_binding_value.
|
||||
def exitPayload_binding_value(self, ctx: ASLParser.Payload_binding_valueContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#intrinsic_func.
|
||||
def enterIntrinsic_func(self, ctx: ASLParser.Intrinsic_funcContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#intrinsic_func.
|
||||
def exitIntrinsic_func(self, ctx: ASLParser.Intrinsic_funcContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_arr_decl.
|
||||
def enterPayload_arr_decl(self, ctx: ASLParser.Payload_arr_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_arr_decl.
|
||||
def exitPayload_arr_decl(self, ctx: ASLParser.Payload_arr_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_value_decl.
|
||||
def enterPayload_value_decl(self, ctx: ASLParser.Payload_value_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_value_decl.
|
||||
def exitPayload_value_decl(self, ctx: ASLParser.Payload_value_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_value_float.
|
||||
def enterPayload_value_float(self, ctx: ASLParser.Payload_value_floatContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_value_float.
|
||||
def exitPayload_value_float(self, ctx: ASLParser.Payload_value_floatContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_value_int.
|
||||
def enterPayload_value_int(self, ctx: ASLParser.Payload_value_intContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_value_int.
|
||||
def exitPayload_value_int(self, ctx: ASLParser.Payload_value_intContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_value_bool.
|
||||
def enterPayload_value_bool(self, ctx: ASLParser.Payload_value_boolContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_value_bool.
|
||||
def exitPayload_value_bool(self, ctx: ASLParser.Payload_value_boolContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_value_null.
|
||||
def enterPayload_value_null(self, ctx: ASLParser.Payload_value_nullContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_value_null.
|
||||
def exitPayload_value_null(self, ctx: ASLParser.Payload_value_nullContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#payload_value_str.
|
||||
def enterPayload_value_str(self, ctx: ASLParser.Payload_value_strContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#payload_value_str.
|
||||
def exitPayload_value_str(self, ctx: ASLParser.Payload_value_strContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#result_selector_decl.
|
||||
def enterResult_selector_decl(self, ctx: ASLParser.Result_selector_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#result_selector_decl.
|
||||
def exitResult_selector_decl(self, ctx: ASLParser.Result_selector_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#state_type.
|
||||
def enterState_type(self, ctx: ASLParser.State_typeContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#state_type.
|
||||
def exitState_type(self, ctx: ASLParser.State_typeContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#choices_decl.
|
||||
def enterChoices_decl(self, ctx: ASLParser.Choices_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#choices_decl.
|
||||
def exitChoices_decl(self, ctx: ASLParser.Choices_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#choice_rule_comparison_variable.
|
||||
def enterChoice_rule_comparison_variable(
|
||||
self, ctx: ASLParser.Choice_rule_comparison_variableContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#choice_rule_comparison_variable.
|
||||
def exitChoice_rule_comparison_variable(
|
||||
self, ctx: ASLParser.Choice_rule_comparison_variableContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#choice_rule_comparison_composite.
|
||||
def enterChoice_rule_comparison_composite(
|
||||
self, ctx: ASLParser.Choice_rule_comparison_compositeContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#choice_rule_comparison_composite.
|
||||
def exitChoice_rule_comparison_composite(
|
||||
self, ctx: ASLParser.Choice_rule_comparison_compositeContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#comparison_variable_stmt.
|
||||
def enterComparison_variable_stmt(
|
||||
self, ctx: ASLParser.Comparison_variable_stmtContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#comparison_variable_stmt.
|
||||
def exitComparison_variable_stmt(
|
||||
self, ctx: ASLParser.Comparison_variable_stmtContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#comparison_composite_stmt.
|
||||
def enterComparison_composite_stmt(
|
||||
self, ctx: ASLParser.Comparison_composite_stmtContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#comparison_composite_stmt.
|
||||
def exitComparison_composite_stmt(
|
||||
self, ctx: ASLParser.Comparison_composite_stmtContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#comparison_composite.
|
||||
def enterComparison_composite(self, ctx: ASLParser.Comparison_compositeContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#comparison_composite.
|
||||
def exitComparison_composite(self, ctx: ASLParser.Comparison_compositeContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#variable_decl.
|
||||
def enterVariable_decl(self, ctx: ASLParser.Variable_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#variable_decl.
|
||||
def exitVariable_decl(self, ctx: ASLParser.Variable_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#comparison_func.
|
||||
def enterComparison_func(self, ctx: ASLParser.Comparison_funcContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#comparison_func.
|
||||
def exitComparison_func(self, ctx: ASLParser.Comparison_funcContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#branches_decl.
|
||||
def enterBranches_decl(self, ctx: ASLParser.Branches_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#branches_decl.
|
||||
def exitBranches_decl(self, ctx: ASLParser.Branches_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#item_processor_decl.
|
||||
def enterItem_processor_decl(self, ctx: ASLParser.Item_processor_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#item_processor_decl.
|
||||
def exitItem_processor_decl(self, ctx: ASLParser.Item_processor_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#item_processor_item.
|
||||
def enterItem_processor_item(self, ctx: ASLParser.Item_processor_itemContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#item_processor_item.
|
||||
def exitItem_processor_item(self, ctx: ASLParser.Item_processor_itemContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#processor_config_decl.
|
||||
def enterProcessor_config_decl(self, ctx: ASLParser.Processor_config_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#processor_config_decl.
|
||||
def exitProcessor_config_decl(self, ctx: ASLParser.Processor_config_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#processor_config_field.
|
||||
def enterProcessor_config_field(self, ctx: ASLParser.Processor_config_fieldContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#processor_config_field.
|
||||
def exitProcessor_config_field(self, ctx: ASLParser.Processor_config_fieldContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#mode_decl.
|
||||
def enterMode_decl(self, ctx: ASLParser.Mode_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#mode_decl.
|
||||
def exitMode_decl(self, ctx: ASLParser.Mode_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#mode_type.
|
||||
def enterMode_type(self, ctx: ASLParser.Mode_typeContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#mode_type.
|
||||
def exitMode_type(self, ctx: ASLParser.Mode_typeContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#execution_decl.
|
||||
def enterExecution_decl(self, ctx: ASLParser.Execution_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#execution_decl.
|
||||
def exitExecution_decl(self, ctx: ASLParser.Execution_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#execution_type.
|
||||
def enterExecution_type(self, ctx: ASLParser.Execution_typeContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#execution_type.
|
||||
def exitExecution_type(self, ctx: ASLParser.Execution_typeContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#iterator_decl.
|
||||
def enterIterator_decl(self, ctx: ASLParser.Iterator_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#iterator_decl.
|
||||
def exitIterator_decl(self, ctx: ASLParser.Iterator_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#iterator_decl_item.
|
||||
def enterIterator_decl_item(self, ctx: ASLParser.Iterator_decl_itemContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#iterator_decl_item.
|
||||
def exitIterator_decl_item(self, ctx: ASLParser.Iterator_decl_itemContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#item_selector_decl.
|
||||
def enterItem_selector_decl(self, ctx: ASLParser.Item_selector_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#item_selector_decl.
|
||||
def exitItem_selector_decl(self, ctx: ASLParser.Item_selector_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#item_reader_decl.
|
||||
def enterItem_reader_decl(self, ctx: ASLParser.Item_reader_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#item_reader_decl.
|
||||
def exitItem_reader_decl(self, ctx: ASLParser.Item_reader_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#items_reader_field.
|
||||
def enterItems_reader_field(self, ctx: ASLParser.Items_reader_fieldContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#items_reader_field.
|
||||
def exitItems_reader_field(self, ctx: ASLParser.Items_reader_fieldContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#reader_config_decl.
|
||||
def enterReader_config_decl(self, ctx: ASLParser.Reader_config_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#reader_config_decl.
|
||||
def exitReader_config_decl(self, ctx: ASLParser.Reader_config_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#reader_config_field.
|
||||
def enterReader_config_field(self, ctx: ASLParser.Reader_config_fieldContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#reader_config_field.
|
||||
def exitReader_config_field(self, ctx: ASLParser.Reader_config_fieldContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#input_type_decl.
|
||||
def enterInput_type_decl(self, ctx: ASLParser.Input_type_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#input_type_decl.
|
||||
def exitInput_type_decl(self, ctx: ASLParser.Input_type_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#csv_header_location_decl.
|
||||
def enterCsv_header_location_decl(
|
||||
self, ctx: ASLParser.Csv_header_location_declContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#csv_header_location_decl.
|
||||
def exitCsv_header_location_decl(
|
||||
self, ctx: ASLParser.Csv_header_location_declContext
|
||||
):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#csv_headers_decl.
|
||||
def enterCsv_headers_decl(self, ctx: ASLParser.Csv_headers_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#csv_headers_decl.
|
||||
def exitCsv_headers_decl(self, ctx: ASLParser.Csv_headers_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#max_items_decl.
|
||||
def enterMax_items_decl(self, ctx: ASLParser.Max_items_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#max_items_decl.
|
||||
def exitMax_items_decl(self, ctx: ASLParser.Max_items_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#max_items_path_decl.
|
||||
def enterMax_items_path_decl(self, ctx: ASLParser.Max_items_path_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#max_items_path_decl.
|
||||
def exitMax_items_path_decl(self, ctx: ASLParser.Max_items_path_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#retry_decl.
|
||||
def enterRetry_decl(self, ctx: ASLParser.Retry_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#retry_decl.
|
||||
def exitRetry_decl(self, ctx: ASLParser.Retry_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#retrier_decl.
|
||||
def enterRetrier_decl(self, ctx: ASLParser.Retrier_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#retrier_decl.
|
||||
def exitRetrier_decl(self, ctx: ASLParser.Retrier_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#retrier_stmt.
|
||||
def enterRetrier_stmt(self, ctx: ASLParser.Retrier_stmtContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#retrier_stmt.
|
||||
def exitRetrier_stmt(self, ctx: ASLParser.Retrier_stmtContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#error_equals_decl.
|
||||
def enterError_equals_decl(self, ctx: ASLParser.Error_equals_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#error_equals_decl.
|
||||
def exitError_equals_decl(self, ctx: ASLParser.Error_equals_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#interval_seconds_decl.
|
||||
def enterInterval_seconds_decl(self, ctx: ASLParser.Interval_seconds_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#interval_seconds_decl.
|
||||
def exitInterval_seconds_decl(self, ctx: ASLParser.Interval_seconds_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#max_attempts_decl.
|
||||
def enterMax_attempts_decl(self, ctx: ASLParser.Max_attempts_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#max_attempts_decl.
|
||||
def exitMax_attempts_decl(self, ctx: ASLParser.Max_attempts_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#backoff_rate_decl.
|
||||
def enterBackoff_rate_decl(self, ctx: ASLParser.Backoff_rate_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#backoff_rate_decl.
|
||||
def exitBackoff_rate_decl(self, ctx: ASLParser.Backoff_rate_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#catch_decl.
|
||||
def enterCatch_decl(self, ctx: ASLParser.Catch_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#catch_decl.
|
||||
def exitCatch_decl(self, ctx: ASLParser.Catch_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#catcher_decl.
|
||||
def enterCatcher_decl(self, ctx: ASLParser.Catcher_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#catcher_decl.
|
||||
def exitCatcher_decl(self, ctx: ASLParser.Catcher_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#catcher_stmt.
|
||||
def enterCatcher_stmt(self, ctx: ASLParser.Catcher_stmtContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#catcher_stmt.
|
||||
def exitCatcher_stmt(self, ctx: ASLParser.Catcher_stmtContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#comparison_op.
|
||||
def enterComparison_op(self, ctx: ASLParser.Comparison_opContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#comparison_op.
|
||||
def exitComparison_op(self, ctx: ASLParser.Comparison_opContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#choice_operator.
|
||||
def enterChoice_operator(self, ctx: ASLParser.Choice_operatorContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#choice_operator.
|
||||
def exitChoice_operator(self, ctx: ASLParser.Choice_operatorContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#states_error_name.
|
||||
def enterStates_error_name(self, ctx: ASLParser.States_error_nameContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#states_error_name.
|
||||
def exitStates_error_name(self, ctx: ASLParser.States_error_nameContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#error_name.
|
||||
def enterError_name(self, ctx: ASLParser.Error_nameContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#error_name.
|
||||
def exitError_name(self, ctx: ASLParser.Error_nameContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#json_obj_decl.
|
||||
def enterJson_obj_decl(self, ctx: ASLParser.Json_obj_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#json_obj_decl.
|
||||
def exitJson_obj_decl(self, ctx: ASLParser.Json_obj_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#json_binding.
|
||||
def enterJson_binding(self, ctx: ASLParser.Json_bindingContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#json_binding.
|
||||
def exitJson_binding(self, ctx: ASLParser.Json_bindingContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#json_arr_decl.
|
||||
def enterJson_arr_decl(self, ctx: ASLParser.Json_arr_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#json_arr_decl.
|
||||
def exitJson_arr_decl(self, ctx: ASLParser.Json_arr_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#json_value_decl.
|
||||
def enterJson_value_decl(self, ctx: ASLParser.Json_value_declContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#json_value_decl.
|
||||
def exitJson_value_decl(self, ctx: ASLParser.Json_value_declContext):
|
||||
pass
|
||||
|
||||
# Enter a parse tree produced by ASLParser#keyword_or_string.
|
||||
def enterKeyword_or_string(self, ctx: ASLParser.Keyword_or_stringContext):
|
||||
pass
|
||||
|
||||
# Exit a parse tree produced by ASLParser#keyword_or_string.
|
||||
def exitKeyword_or_string(self, ctx: ASLParser.Keyword_or_stringContext):
|
||||
pass
|
||||
|
||||
|
||||
del ASLParser
|
413
moto/stepfunctions/parser/asl/antlr/runtime/ASLParserVisitor.py
Normal file
413
moto/stepfunctions/parser/asl/antlr/runtime/ASLParserVisitor.py
Normal file
@ -0,0 +1,413 @@
|
||||
# Generated from /Users/mep/LocalStack/localstack/localstack/services/stepfunctions/asl/antlr/ASLParser.g4 by ANTLR 4.13.1
|
||||
from antlr4 import ParseTreeVisitor
|
||||
|
||||
if "." in __name__:
|
||||
from .ASLParser import ASLParser
|
||||
else:
|
||||
from ASLParser import ASLParser
|
||||
|
||||
# This class defines a complete generic visitor for a parse tree produced by ASLParser.
|
||||
|
||||
|
||||
class ASLParserVisitor(ParseTreeVisitor):
|
||||
|
||||
# Visit a parse tree produced by ASLParser#program_decl.
|
||||
def visitProgram_decl(self, ctx: ASLParser.Program_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#top_layer_stmt.
|
||||
def visitTop_layer_stmt(self, ctx: ASLParser.Top_layer_stmtContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#startat_decl.
|
||||
def visitStartat_decl(self, ctx: ASLParser.Startat_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#comment_decl.
|
||||
def visitComment_decl(self, ctx: ASLParser.Comment_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#version_decl.
|
||||
def visitVersion_decl(self, ctx: ASLParser.Version_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#state_stmt.
|
||||
def visitState_stmt(self, ctx: ASLParser.State_stmtContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#states_decl.
|
||||
def visitStates_decl(self, ctx: ASLParser.States_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#state_name.
|
||||
def visitState_name(self, ctx: ASLParser.State_nameContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#state_decl.
|
||||
def visitState_decl(self, ctx: ASLParser.State_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#state_decl_body.
|
||||
def visitState_decl_body(self, ctx: ASLParser.State_decl_bodyContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#type_decl.
|
||||
def visitType_decl(self, ctx: ASLParser.Type_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#next_decl.
|
||||
def visitNext_decl(self, ctx: ASLParser.Next_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#resource_decl.
|
||||
def visitResource_decl(self, ctx: ASLParser.Resource_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#input_path_decl.
|
||||
def visitInput_path_decl(self, ctx: ASLParser.Input_path_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#result_decl.
|
||||
def visitResult_decl(self, ctx: ASLParser.Result_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#result_path_decl.
|
||||
def visitResult_path_decl(self, ctx: ASLParser.Result_path_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#output_path_decl.
|
||||
def visitOutput_path_decl(self, ctx: ASLParser.Output_path_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#end_decl.
|
||||
def visitEnd_decl(self, ctx: ASLParser.End_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#default_decl.
|
||||
def visitDefault_decl(self, ctx: ASLParser.Default_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#error_decl.
|
||||
def visitError_decl(self, ctx: ASLParser.Error_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#cause_decl.
|
||||
def visitCause_decl(self, ctx: ASLParser.Cause_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#seconds_decl.
|
||||
def visitSeconds_decl(self, ctx: ASLParser.Seconds_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#seconds_path_decl.
|
||||
def visitSeconds_path_decl(self, ctx: ASLParser.Seconds_path_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#timestamp_decl.
|
||||
def visitTimestamp_decl(self, ctx: ASLParser.Timestamp_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#timestamp_path_decl.
|
||||
def visitTimestamp_path_decl(self, ctx: ASLParser.Timestamp_path_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#items_path_decl.
|
||||
def visitItems_path_decl(self, ctx: ASLParser.Items_path_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#max_concurrency_decl.
|
||||
def visitMax_concurrency_decl(self, ctx: ASLParser.Max_concurrency_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#parameters_decl.
|
||||
def visitParameters_decl(self, ctx: ASLParser.Parameters_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#timeout_seconds_decl.
|
||||
def visitTimeout_seconds_decl(self, ctx: ASLParser.Timeout_seconds_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#timeout_seconds_path_decl.
|
||||
def visitTimeout_seconds_path_decl(
|
||||
self, ctx: ASLParser.Timeout_seconds_path_declContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#heartbeat_seconds_decl.
|
||||
def visitHeartbeat_seconds_decl(self, ctx: ASLParser.Heartbeat_seconds_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#heartbeat_seconds_path_decl.
|
||||
def visitHeartbeat_seconds_path_decl(
|
||||
self, ctx: ASLParser.Heartbeat_seconds_path_declContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_tmpl_decl.
|
||||
def visitPayload_tmpl_decl(self, ctx: ASLParser.Payload_tmpl_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_binding_path.
|
||||
def visitPayload_binding_path(self, ctx: ASLParser.Payload_binding_pathContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_binding_path_context_obj.
|
||||
def visitPayload_binding_path_context_obj(
|
||||
self, ctx: ASLParser.Payload_binding_path_context_objContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_binding_intrinsic_func.
|
||||
def visitPayload_binding_intrinsic_func(
|
||||
self, ctx: ASLParser.Payload_binding_intrinsic_funcContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_binding_value.
|
||||
def visitPayload_binding_value(self, ctx: ASLParser.Payload_binding_valueContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#intrinsic_func.
|
||||
def visitIntrinsic_func(self, ctx: ASLParser.Intrinsic_funcContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_arr_decl.
|
||||
def visitPayload_arr_decl(self, ctx: ASLParser.Payload_arr_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_value_decl.
|
||||
def visitPayload_value_decl(self, ctx: ASLParser.Payload_value_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_value_float.
|
||||
def visitPayload_value_float(self, ctx: ASLParser.Payload_value_floatContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_value_int.
|
||||
def visitPayload_value_int(self, ctx: ASLParser.Payload_value_intContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_value_bool.
|
||||
def visitPayload_value_bool(self, ctx: ASLParser.Payload_value_boolContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_value_null.
|
||||
def visitPayload_value_null(self, ctx: ASLParser.Payload_value_nullContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#payload_value_str.
|
||||
def visitPayload_value_str(self, ctx: ASLParser.Payload_value_strContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#result_selector_decl.
|
||||
def visitResult_selector_decl(self, ctx: ASLParser.Result_selector_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#state_type.
|
||||
def visitState_type(self, ctx: ASLParser.State_typeContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#choices_decl.
|
||||
def visitChoices_decl(self, ctx: ASLParser.Choices_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#choice_rule_comparison_variable.
|
||||
def visitChoice_rule_comparison_variable(
|
||||
self, ctx: ASLParser.Choice_rule_comparison_variableContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#choice_rule_comparison_composite.
|
||||
def visitChoice_rule_comparison_composite(
|
||||
self, ctx: ASLParser.Choice_rule_comparison_compositeContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#comparison_variable_stmt.
|
||||
def visitComparison_variable_stmt(
|
||||
self, ctx: ASLParser.Comparison_variable_stmtContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#comparison_composite_stmt.
|
||||
def visitComparison_composite_stmt(
|
||||
self, ctx: ASLParser.Comparison_composite_stmtContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#comparison_composite.
|
||||
def visitComparison_composite(self, ctx: ASLParser.Comparison_compositeContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#variable_decl.
|
||||
def visitVariable_decl(self, ctx: ASLParser.Variable_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#comparison_func.
|
||||
def visitComparison_func(self, ctx: ASLParser.Comparison_funcContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#branches_decl.
|
||||
def visitBranches_decl(self, ctx: ASLParser.Branches_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#item_processor_decl.
|
||||
def visitItem_processor_decl(self, ctx: ASLParser.Item_processor_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#item_processor_item.
|
||||
def visitItem_processor_item(self, ctx: ASLParser.Item_processor_itemContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#processor_config_decl.
|
||||
def visitProcessor_config_decl(self, ctx: ASLParser.Processor_config_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#processor_config_field.
|
||||
def visitProcessor_config_field(self, ctx: ASLParser.Processor_config_fieldContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#mode_decl.
|
||||
def visitMode_decl(self, ctx: ASLParser.Mode_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#mode_type.
|
||||
def visitMode_type(self, ctx: ASLParser.Mode_typeContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#execution_decl.
|
||||
def visitExecution_decl(self, ctx: ASLParser.Execution_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#execution_type.
|
||||
def visitExecution_type(self, ctx: ASLParser.Execution_typeContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#iterator_decl.
|
||||
def visitIterator_decl(self, ctx: ASLParser.Iterator_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#iterator_decl_item.
|
||||
def visitIterator_decl_item(self, ctx: ASLParser.Iterator_decl_itemContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#item_selector_decl.
|
||||
def visitItem_selector_decl(self, ctx: ASLParser.Item_selector_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#item_reader_decl.
|
||||
def visitItem_reader_decl(self, ctx: ASLParser.Item_reader_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#items_reader_field.
|
||||
def visitItems_reader_field(self, ctx: ASLParser.Items_reader_fieldContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#reader_config_decl.
|
||||
def visitReader_config_decl(self, ctx: ASLParser.Reader_config_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#reader_config_field.
|
||||
def visitReader_config_field(self, ctx: ASLParser.Reader_config_fieldContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#input_type_decl.
|
||||
def visitInput_type_decl(self, ctx: ASLParser.Input_type_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#csv_header_location_decl.
|
||||
def visitCsv_header_location_decl(
|
||||
self, ctx: ASLParser.Csv_header_location_declContext
|
||||
):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#csv_headers_decl.
|
||||
def visitCsv_headers_decl(self, ctx: ASLParser.Csv_headers_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#max_items_decl.
|
||||
def visitMax_items_decl(self, ctx: ASLParser.Max_items_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#max_items_path_decl.
|
||||
def visitMax_items_path_decl(self, ctx: ASLParser.Max_items_path_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#retry_decl.
|
||||
def visitRetry_decl(self, ctx: ASLParser.Retry_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#retrier_decl.
|
||||
def visitRetrier_decl(self, ctx: ASLParser.Retrier_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#retrier_stmt.
|
||||
def visitRetrier_stmt(self, ctx: ASLParser.Retrier_stmtContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#error_equals_decl.
|
||||
def visitError_equals_decl(self, ctx: ASLParser.Error_equals_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#interval_seconds_decl.
|
||||
def visitInterval_seconds_decl(self, ctx: ASLParser.Interval_seconds_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#max_attempts_decl.
|
||||
def visitMax_attempts_decl(self, ctx: ASLParser.Max_attempts_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#backoff_rate_decl.
|
||||
def visitBackoff_rate_decl(self, ctx: ASLParser.Backoff_rate_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#catch_decl.
|
||||
def visitCatch_decl(self, ctx: ASLParser.Catch_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#catcher_decl.
|
||||
def visitCatcher_decl(self, ctx: ASLParser.Catcher_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#catcher_stmt.
|
||||
def visitCatcher_stmt(self, ctx: ASLParser.Catcher_stmtContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#comparison_op.
|
||||
def visitComparison_op(self, ctx: ASLParser.Comparison_opContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#choice_operator.
|
||||
def visitChoice_operator(self, ctx: ASLParser.Choice_operatorContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#states_error_name.
|
||||
def visitStates_error_name(self, ctx: ASLParser.States_error_nameContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#error_name.
|
||||
def visitError_name(self, ctx: ASLParser.Error_nameContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#json_obj_decl.
|
||||
def visitJson_obj_decl(self, ctx: ASLParser.Json_obj_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#json_binding.
|
||||
def visitJson_binding(self, ctx: ASLParser.Json_bindingContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#json_arr_decl.
|
||||
def visitJson_arr_decl(self, ctx: ASLParser.Json_arr_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#json_value_decl.
|
||||
def visitJson_value_decl(self, ctx: ASLParser.Json_value_declContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
# Visit a parse tree produced by ASLParser#keyword_or_string.
|
||||
def visitKeyword_or_string(self, ctx: ASLParser.Keyword_or_stringContext):
|
||||
return self.visitChildren(ctx)
|
||||
|
||||
|
||||
del ASLParser
|
27
moto/stepfunctions/parser/asl/antlt4utils/antlr4utils.py
Normal file
27
moto/stepfunctions/parser/asl/antlt4utils/antlr4utils.py
Normal file
@ -0,0 +1,27 @@
|
||||
from typing import Optional
|
||||
|
||||
from antlr4 import ParserRuleContext
|
||||
from antlr4.tree.Tree import ParseTree, TerminalNodeImpl
|
||||
|
||||
|
||||
class Antlr4Utils:
|
||||
@staticmethod
|
||||
def is_production(
|
||||
pt: ParseTree, rule_index: Optional[int] = None
|
||||
) -> Optional[ParserRuleContext]:
|
||||
if isinstance(pt, ParserRuleContext):
|
||||
prc = pt.getRuleContext() # noqa
|
||||
if rule_index is not None:
|
||||
return prc if prc.getRuleIndex() == rule_index else None
|
||||
return prc
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def is_terminal(
|
||||
pt: ParseTree, token_type: Optional[int] = None
|
||||
) -> Optional[TerminalNodeImpl]:
|
||||
if isinstance(pt, TerminalNodeImpl):
|
||||
if token_type is not None:
|
||||
return pt if pt.getSymbol().type == token_type else None
|
||||
return pt
|
||||
return None
|
0
moto/stepfunctions/parser/asl/component/__init__.py
Normal file
0
moto/stepfunctions/parser/asl/component/__init__.py
Normal file
@ -0,0 +1,30 @@
|
||||
from typing import Final, List
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.catch.catch_outcome import (
|
||||
CatchOutcome,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.catch.catcher_decl import (
|
||||
CatcherDecl,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.catch.catcher_outcome import (
|
||||
CatcherOutcome,
|
||||
CatcherOutcomeCaught,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class CatchDecl(EvalComponent):
|
||||
def __init__(self, catchers: List[CatcherDecl]):
|
||||
self.catchers: Final[List[CatcherDecl]] = catchers
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
for catcher in self.catchers:
|
||||
catcher.eval(env)
|
||||
catcher_outcome: CatcherOutcome = env.stack.pop()
|
||||
|
||||
if isinstance(catcher_outcome, CatcherOutcomeCaught):
|
||||
env.stack.append(CatchOutcome.Caught)
|
||||
return
|
||||
|
||||
env.stack.append(CatchOutcome.NotCaught)
|
@ -0,0 +1,6 @@
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class CatchOutcome(Enum):
|
||||
Caught = 0
|
||||
NotCaught = 1
|
@ -0,0 +1,96 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.catch.catcher_outcome import (
|
||||
CatcherOutcomeCaught,
|
||||
CatcherOutcomeNotCaught,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.catch.catcher_props import (
|
||||
CatcherProps,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.error_equals_decl import (
|
||||
ErrorEqualsDecl,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.failure_event import (
|
||||
FailureEvent,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.flow.next import Next
|
||||
from moto.stepfunctions.parser.asl.component.common.path.result_path import ResultPath
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class CatcherDecl(EvalComponent):
|
||||
_DEFAULT_RESULT_PATH: Final[ResultPath] = ResultPath(result_path_src="$")
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
error_equals: ErrorEqualsDecl,
|
||||
next_decl: Next,
|
||||
result_path: ResultPath = _DEFAULT_RESULT_PATH,
|
||||
):
|
||||
self.error_equals: Final[ErrorEqualsDecl] = error_equals
|
||||
self.result_path: Final[ResultPath] = (
|
||||
result_path or CatcherDecl._DEFAULT_RESULT_PATH
|
||||
)
|
||||
self.next_decl: Final[Next] = next_decl
|
||||
|
||||
@classmethod
|
||||
def from_catcher_props(cls, props: CatcherProps) -> CatcherDecl:
|
||||
return cls(
|
||||
error_equals=props.get(
|
||||
typ=ErrorEqualsDecl,
|
||||
raise_on_missing=ValueError(
|
||||
f"Missing ErrorEquals declaration for Catcher declaration, in props '{props}'."
|
||||
),
|
||||
),
|
||||
next_decl=props.get(
|
||||
typ=Next,
|
||||
raise_on_missing=ValueError(
|
||||
f"Missing Next declaration for Catcher declaration, in props '{props}'."
|
||||
),
|
||||
),
|
||||
result_path=props.get(typ=ResultPath),
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _extract_error_cause(failure_event: FailureEvent) -> dict:
|
||||
# TODO: consider formalising all EventDetails to ensure FailureEvent can always reach the state below.
|
||||
# As per AWS's Api specification, all failure event carry one
|
||||
# details field, with at least fields 'cause and 'error'
|
||||
specs_event_details = list(failure_event.event_details.values())
|
||||
if (
|
||||
len(specs_event_details) != 1
|
||||
and "error" in specs_event_details
|
||||
and "cause" in specs_event_details
|
||||
):
|
||||
raise RuntimeError(
|
||||
f"Internal Error: invalid event details declaration in FailureEvent: '{failure_event}'."
|
||||
)
|
||||
spec_event_details: dict = list(failure_event.event_details.values())[0]
|
||||
error = spec_event_details["error"]
|
||||
cause = spec_event_details.get("cause") or ""
|
||||
# Stepfunctions renames these fields to capital in this scenario.
|
||||
return {
|
||||
"Error": error,
|
||||
"Cause": cause,
|
||||
}
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
failure_event: FailureEvent = env.stack.pop()
|
||||
|
||||
env.stack.append(failure_event.error_name)
|
||||
self.error_equals.eval(env)
|
||||
|
||||
equals: bool = env.stack.pop()
|
||||
if equals:
|
||||
error_cause: dict = self._extract_error_cause(failure_event)
|
||||
env.stack.append(error_cause)
|
||||
|
||||
self.result_path.eval(env)
|
||||
env.next_state_name = self.next_decl.name
|
||||
env.stack.append(CatcherOutcomeCaught())
|
||||
else:
|
||||
env.stack.append(failure_event)
|
||||
env.stack.append(CatcherOutcomeNotCaught())
|
@ -0,0 +1,13 @@
|
||||
import abc
|
||||
|
||||
|
||||
class CatcherOutcome(abc.ABC):
|
||||
...
|
||||
|
||||
|
||||
class CatcherOutcomeCaught(CatcherOutcome):
|
||||
pass
|
||||
|
||||
|
||||
class CatcherOutcomeNotCaught(CatcherOutcome):
|
||||
pass
|
@ -0,0 +1,5 @@
|
||||
from moto.stepfunctions.parser.asl.parse.typed_props import TypedProps
|
||||
|
||||
|
||||
class CatcherProps(TypedProps):
|
||||
pass
|
@ -0,0 +1,8 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class CauseDecl(Component):
|
||||
def __init__(self, cause: str):
|
||||
self.cause: Final[str] = cause
|
@ -0,0 +1,8 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class Comment(Component):
|
||||
def __init__(self, comment: str):
|
||||
self.comment: Final[str] = comment
|
@ -0,0 +1,8 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class ErrorDecl(Component):
|
||||
def __init__(self, error: str):
|
||||
self.error: Final[str] = error
|
@ -0,0 +1,20 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.error_name import (
|
||||
ErrorName,
|
||||
)
|
||||
|
||||
|
||||
class CustomErrorName(ErrorName):
|
||||
"""
|
||||
States MAY report errors with other names, which MUST NOT begin with the prefix "States.".
|
||||
"""
|
||||
|
||||
_ILLEGAL_PREFIX: Final[str] = "States."
|
||||
|
||||
def __init__(self, error_name: str):
|
||||
if error_name.startswith(CustomErrorName._ILLEGAL_PREFIX):
|
||||
raise ValueError(
|
||||
f"Custom Error Names MUST NOT begin with the prefix 'States.', got '{error_name}'."
|
||||
)
|
||||
super().__init__(error_name=error_name)
|
@ -0,0 +1,62 @@
|
||||
from typing import Final, List
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.error_name import (
|
||||
ErrorName,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.states_error_name import (
|
||||
StatesErrorName,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.states_error_name_type import (
|
||||
StatesErrorNameType,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class ErrorEqualsDecl(EvalComponent):
|
||||
"""
|
||||
ErrorEquals value MUST be a non-empty array of Strings, which match Error Names.
|
||||
Each Retrier MUST contain a field named "ErrorEquals" whose value MUST be a non-empty array of Strings,
|
||||
which match Error Names.
|
||||
"""
|
||||
|
||||
_STATE_ALL_ERROR: Final[StatesErrorName] = StatesErrorName(
|
||||
typ=StatesErrorNameType.StatesALL
|
||||
)
|
||||
_STATE_TASK_ERROR: Final[StatesErrorName] = StatesErrorName(
|
||||
typ=StatesErrorNameType.StatesTaskFailed
|
||||
)
|
||||
|
||||
def __init__(self, error_names: List[ErrorName]):
|
||||
# The reserved name "States.ALL" in a Retrier’s "ErrorEquals" field is a wildcard
|
||||
# and matches any Error Name. Such a value MUST appear alone in the "ErrorEquals"
|
||||
# array and MUST appear in the last Retrier in the "Retry" array.
|
||||
if ErrorEqualsDecl._STATE_ALL_ERROR in error_names and len(error_names) > 1:
|
||||
raise ValueError(
|
||||
f"States.ALL must appear alone in the ErrorEquals array, got '{error_names}'."
|
||||
)
|
||||
|
||||
# TODO: how to handle duplicate ErrorName?
|
||||
self.error_names: List[ErrorName] = error_names
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
"""
|
||||
When a state reports an error, the interpreter scans through the Retriers and,
|
||||
when the Error Name appears in the value of a Retrier’s "ErrorEquals" field, implements the retry policy
|
||||
described in that Retrier.
|
||||
This pops the error from the stack, and appends the bool of this check.
|
||||
"""
|
||||
|
||||
# Try to reduce error response to ErrorName or pass exception upstream.
|
||||
error_name: ErrorName = env.stack.pop()
|
||||
|
||||
if ErrorEqualsDecl._STATE_ALL_ERROR in self.error_names:
|
||||
res = True
|
||||
elif ErrorEqualsDecl._STATE_TASK_ERROR in self.error_names and not isinstance(
|
||||
error_name, StatesErrorName
|
||||
): # TODO: consider binding a 'context' variable to error_names to more formally detect their evaluation type.
|
||||
res = True
|
||||
else:
|
||||
res = error_name in self.error_names
|
||||
|
||||
env.stack.append(res)
|
@ -0,0 +1,19 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import abc
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class ErrorName(Component, abc.ABC):
|
||||
def __init__(self, error_name: str):
|
||||
self.error_name: Final[str] = error_name
|
||||
|
||||
def matches(self, error_name: str) -> bool:
|
||||
return self.error_name == error_name
|
||||
|
||||
def __eq__(self, other):
|
||||
if isinstance(other, ErrorName):
|
||||
return self.matches(other.error_name)
|
||||
return False
|
@ -0,0 +1,58 @@
|
||||
from typing import Final, Optional, Tuple
|
||||
|
||||
from moto.stepfunctions.parser.api import ExecutionFailedEventDetails, HistoryEventType
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.error_name import (
|
||||
ErrorName,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.eval.event.event_detail import EventDetails
|
||||
|
||||
|
||||
class FailureEvent:
|
||||
error_name: Final[Optional[ErrorName]]
|
||||
event_type: Final[HistoryEventType]
|
||||
event_details: Final[Optional[EventDetails]]
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
error_name: Optional[ErrorName],
|
||||
event_type: HistoryEventType,
|
||||
event_details: Optional[EventDetails] = None,
|
||||
):
|
||||
self.error_name = error_name
|
||||
self.event_type = event_type
|
||||
self.event_details = event_details
|
||||
|
||||
|
||||
class FailureEventException(Exception):
|
||||
failure_event: Final[FailureEvent]
|
||||
|
||||
def __init__(self, failure_event: FailureEvent):
|
||||
self.failure_event = failure_event
|
||||
|
||||
def extract_error_cause_pair(self) -> Optional[Tuple[Optional[str], Optional[str]]]:
|
||||
if self.failure_event.event_details is None:
|
||||
return None
|
||||
|
||||
failure_event_spec = list(self.failure_event.event_details.values())[0]
|
||||
|
||||
error = None
|
||||
cause = None
|
||||
if "error" in failure_event_spec:
|
||||
error = failure_event_spec["error"]
|
||||
if "cause" in failure_event_spec:
|
||||
cause = failure_event_spec["cause"]
|
||||
return error, cause
|
||||
|
||||
def get_execution_failed_event_details(
|
||||
self,
|
||||
) -> Optional[ExecutionFailedEventDetails]:
|
||||
maybe_error_cause_pair = self.extract_error_cause_pair()
|
||||
if maybe_error_cause_pair is None:
|
||||
return None
|
||||
execution_failed_event_details = ExecutionFailedEventDetails()
|
||||
error, cause = maybe_error_cause_pair
|
||||
if error:
|
||||
execution_failed_event_details["error"] = error
|
||||
if cause:
|
||||
execution_failed_event_details["cause"] = cause
|
||||
return execution_failed_event_details
|
@ -0,0 +1,21 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.error_name import (
|
||||
ErrorName,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.states_error_name_type import (
|
||||
StatesErrorNameType,
|
||||
)
|
||||
|
||||
|
||||
class StatesErrorName(ErrorName):
|
||||
def __init__(self, typ: StatesErrorNameType):
|
||||
super().__init__(error_name=typ.to_name())
|
||||
self.typ: Final[StatesErrorNameType] = typ
|
||||
|
||||
@classmethod
|
||||
def from_name(cls, error_name: str) -> StatesErrorName:
|
||||
error_name_type: StatesErrorNameType = StatesErrorNameType.from_name(error_name)
|
||||
return cls(typ=error_name_type)
|
@ -0,0 +1,52 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from enum import Enum
|
||||
from typing import Dict, Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.antlr.runtime.ASLLexer import ASLLexer
|
||||
|
||||
|
||||
class StatesErrorNameType(Enum):
|
||||
StatesALL = ASLLexer.ERRORNAMEStatesALL
|
||||
StatesHeartbeatTimeout = ASLLexer.ERRORNAMEStatesHeartbeatTimeout
|
||||
StatesTimeout = ASLLexer.ERRORNAMEStatesTimeout
|
||||
StatesTaskFailed = ASLLexer.ERRORNAMEStatesTaskFailed
|
||||
StatesPermissions = ASLLexer.ERRORNAMEStatesPermissions
|
||||
StatesResultPathMatchFailure = ASLLexer.ERRORNAMEStatesResultPathMatchFailure
|
||||
StatesParameterPathFailure = ASLLexer.ERRORNAMEStatesParameterPathFailure
|
||||
StatesBranchFailed = ASLLexer.ERRORNAMEStatesBranchFailed
|
||||
StatesNoChoiceMatched = ASLLexer.ERRORNAMEStatesNoChoiceMatched
|
||||
StatesIntrinsicFailure = ASLLexer.ERRORNAMEStatesIntrinsicFailure
|
||||
StatesExceedToleratedFailureThreshold = (
|
||||
ASLLexer.ERRORNAMEStatesExceedToleratedFailureThreshold
|
||||
)
|
||||
StatesItemReaderFailed = ASLLexer.ERRORNAMEStatesItemReaderFailed
|
||||
StatesResultWriterFailed = ASLLexer.ERRORNAMEStatesResultWriterFailed
|
||||
StatesRuntime = ASLLexer.ERRORNAMEStatesRuntime
|
||||
|
||||
def to_name(self) -> str:
|
||||
return _error_name(self)
|
||||
|
||||
@classmethod
|
||||
def from_name(cls, name: str) -> StatesErrorNameType:
|
||||
error_name = _REVERSE_NAME_LOOKUP.get(name, None)
|
||||
if error_name is None:
|
||||
raise ValueError(f"Unknown ErrorName type, got: '{name}'.")
|
||||
return cls(error_name.value)
|
||||
|
||||
|
||||
def _error_name(error_name: StatesErrorNameType) -> str:
|
||||
return ASLLexer.literalNames[error_name.value][2:-2]
|
||||
|
||||
|
||||
def _reverse_error_name_lookup() -> Dict[str, StatesErrorNameType]:
|
||||
lookup: Dict[str, StatesErrorNameType] = dict()
|
||||
for error_name in StatesErrorNameType:
|
||||
error_text: str = _error_name(error_name)
|
||||
lookup[error_text] = error_name
|
||||
return lookup
|
||||
|
||||
|
||||
_REVERSE_NAME_LOOKUP: Final[
|
||||
Dict[str, StatesErrorNameType]
|
||||
] = _reverse_error_name_lookup()
|
@ -0,0 +1,9 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class End(Component):
|
||||
def __init__(self, is_end: bool):
|
||||
# Designates this state as a terminal state (ends the execution) if set to true.
|
||||
self.is_end: Final[bool] = is_end
|
11
moto/stepfunctions/parser/asl/component/common/flow/next.py
Normal file
11
moto/stepfunctions/parser/asl/component/common/flow/next.py
Normal file
@ -0,0 +1,11 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class Next(Component):
|
||||
name: Final[str]
|
||||
|
||||
def __init__(self, name: str):
|
||||
# The name of the next state that is run when the current state finishes.
|
||||
self.name = name
|
@ -0,0 +1,8 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class StartAt(Component):
|
||||
def __init__(self, start_at_name: str):
|
||||
self.start_at_name: Final[str] = start_at_name
|
15
moto/stepfunctions/parser/asl/component/common/parameters.py
Normal file
15
moto/stepfunctions/parser/asl/component/common/parameters.py
Normal file
@ -0,0 +1,15 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadtmpl.payload_tmpl import (
|
||||
PayloadTmpl,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class Parameters(EvalComponent):
|
||||
def __init__(self, payload_tmpl: PayloadTmpl):
|
||||
self.payload_tmpl: Final[PayloadTmpl] = payload_tmpl
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
self.payload_tmpl.eval(env=env)
|
@ -0,0 +1,24 @@
|
||||
import copy
|
||||
from typing import Final, Optional
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
from moto.stepfunctions.parser.asl.utils.json_path import JSONPathUtils
|
||||
|
||||
|
||||
class InputPath(EvalComponent):
|
||||
DEFAULT_PATH: Final[str] = "$"
|
||||
|
||||
input_path_src: Final[Optional[str]]
|
||||
|
||||
def __init__(self, input_path_src: Optional[str]):
|
||||
self.input_path_src = input_path_src
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
if self.input_path_src is None:
|
||||
value = dict()
|
||||
elif self.input_path_src == InputPath.DEFAULT_PATH:
|
||||
value = env.inp
|
||||
else:
|
||||
value = JSONPathUtils.extract_json(self.input_path_src, env.inp)
|
||||
env.stack.append(copy.deepcopy(value))
|
@ -0,0 +1,19 @@
|
||||
import copy
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
from moto.stepfunctions.parser.asl.utils.json_path import JSONPathUtils
|
||||
|
||||
|
||||
class ItemsPath(EvalComponent):
|
||||
DEFAULT_PATH: Final[str] = "$"
|
||||
|
||||
def __init__(self, items_path_src: str = DEFAULT_PATH):
|
||||
self.items_path_src: Final[str] = items_path_src
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
if self.items_path_src != ItemsPath.DEFAULT_PATH:
|
||||
value = copy.deepcopy(env.stack[-1])
|
||||
value = JSONPathUtils.extract_json(self.items_path_src, value)
|
||||
env.stack.append(value)
|
@ -0,0 +1,22 @@
|
||||
from typing import Final, Optional
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
from moto.stepfunctions.parser.asl.utils.json_path import JSONPathUtils
|
||||
|
||||
|
||||
class OutputPath(EvalComponent):
|
||||
DEFAULT_PATH: Final[str] = "$"
|
||||
|
||||
output_path: Final[Optional[str]]
|
||||
|
||||
def __init__(self, output_path: Optional[str]):
|
||||
self.output_path = output_path
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
if self.output_path is None:
|
||||
env.inp = dict()
|
||||
else:
|
||||
current_output = env.stack.pop()
|
||||
state_output = JSONPathUtils.extract_json(self.output_path, current_output)
|
||||
env.inp = state_output
|
@ -0,0 +1,33 @@
|
||||
import copy
|
||||
from typing import Final, Optional
|
||||
|
||||
from jsonpath_ng import parse
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class ResultPath(EvalComponent):
|
||||
DEFAULT_PATH: Final[str] = "$"
|
||||
|
||||
result_path_src: Final[Optional[str]]
|
||||
|
||||
def __init__(self, result_path_src: Optional[str]):
|
||||
self.result_path_src = result_path_src
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
state_input = copy.deepcopy(env.inp)
|
||||
|
||||
# Discard task output if there is one, and set the output ot be the state's input.
|
||||
if self.result_path_src is None:
|
||||
env.stack.clear()
|
||||
env.stack.append(state_input)
|
||||
return
|
||||
|
||||
# Transform the output with the input.
|
||||
current_output = env.stack.pop()
|
||||
result_expr = parse(self.result_path_src)
|
||||
state_output = result_expr.update_or_create(
|
||||
state_input, copy.deepcopy(current_output)
|
||||
)
|
||||
env.stack.append(state_output)
|
@ -0,0 +1,7 @@
|
||||
import abc
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
|
||||
|
||||
class PayloadValue(EvalComponent, abc.ABC):
|
||||
...
|
@ -0,0 +1,18 @@
|
||||
from typing import Final, List
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payload_value import (
|
||||
PayloadValue,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class PayloadArr(PayloadValue):
|
||||
def __init__(self, payload_values: List[PayloadValue]):
|
||||
self.payload_values: Final[List[PayloadValue]] = payload_values
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
arr = list()
|
||||
for payload_value in self.payload_values:
|
||||
payload_value.eval(env)
|
||||
arr.append(env.stack.pop())
|
||||
env.stack.append(arr)
|
@ -0,0 +1,22 @@
|
||||
import abc
|
||||
from typing import Any, Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payload_value import (
|
||||
PayloadValue,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class PayloadBinding(PayloadValue, abc.ABC):
|
||||
def __init__(self, field: str):
|
||||
self.field: Final[str] = field
|
||||
|
||||
@abc.abstractmethod
|
||||
def _eval_val(self, env: Environment) -> Any:
|
||||
...
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
cnt: dict = env.stack.pop()
|
||||
val = self._eval_val(env=env)
|
||||
cnt[self.field] = val
|
||||
env.stack.append(cnt)
|
@ -0,0 +1,27 @@
|
||||
from typing import Any, Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadbinding.payload_binding import (
|
||||
PayloadBinding,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.intrinsic.function.function import Function
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
from moto.stepfunctions.parser.asl.parse.intrinsic.intrinsic_parser import (
|
||||
IntrinsicParser,
|
||||
)
|
||||
|
||||
|
||||
class PayloadBindingIntrinsicFunc(PayloadBinding):
|
||||
def __init__(self, field: str, intrinsic_func: str):
|
||||
super().__init__(field=field)
|
||||
self.src: Final[str] = intrinsic_func
|
||||
self.function: Final[Function] = IntrinsicParser.parse(self.src)
|
||||
|
||||
@classmethod
|
||||
def from_raw(cls, string_dollar: str, intrinsic_func: str):
|
||||
field: str = string_dollar[:-2]
|
||||
return cls(field=field, intrinsic_func=intrinsic_func)
|
||||
|
||||
def _eval_val(self, env: Environment) -> Any:
|
||||
self.function.eval(env=env)
|
||||
val = env.stack.pop()
|
||||
return val
|
@ -0,0 +1,49 @@
|
||||
from typing import Any, Final
|
||||
|
||||
from moto.stepfunctions.parser.api import HistoryEventType, TaskFailedEventDetails
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.failure_event import (
|
||||
FailureEvent,
|
||||
FailureEventException,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.states_error_name import (
|
||||
StatesErrorName,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.states_error_name_type import (
|
||||
StatesErrorNameType,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadbinding.payload_binding import (
|
||||
PayloadBinding,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
from moto.stepfunctions.parser.asl.eval.event.event_detail import EventDetails
|
||||
from moto.stepfunctions.parser.asl.utils.encoding import to_json_str
|
||||
from moto.stepfunctions.parser.asl.utils.json_path import JSONPathUtils
|
||||
|
||||
|
||||
class PayloadBindingPath(PayloadBinding):
|
||||
def __init__(self, field: str, path: str):
|
||||
super().__init__(field=field)
|
||||
self.path: Final[str] = path
|
||||
|
||||
@classmethod
|
||||
def from_raw(cls, string_dollar: str, string_path: str):
|
||||
field: str = string_dollar[:-2]
|
||||
return cls(field=field, path=string_path)
|
||||
|
||||
def _eval_val(self, env: Environment) -> Any:
|
||||
inp = env.stack[-1]
|
||||
try:
|
||||
value = JSONPathUtils.extract_json(self.path, inp)
|
||||
except RuntimeError:
|
||||
failure_event = FailureEvent(
|
||||
error_name=StatesErrorName(typ=StatesErrorNameType.StatesRuntime),
|
||||
event_type=HistoryEventType.TaskFailed,
|
||||
event_details=EventDetails(
|
||||
taskFailedEventDetails=TaskFailedEventDetails(
|
||||
error=StatesErrorNameType.StatesRuntime.to_name(),
|
||||
cause=f"The JSONPath {self.path} specified for the field {self.field}.$ could not be found in the input {to_json_str(inp)}",
|
||||
)
|
||||
),
|
||||
)
|
||||
raise FailureEventException(failure_event=failure_event)
|
||||
return value
|
@ -0,0 +1,30 @@
|
||||
from typing import Any, Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadbinding.payload_binding import (
|
||||
PayloadBinding,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
from moto.stepfunctions.parser.asl.utils.json_path import JSONPathUtils
|
||||
|
||||
|
||||
class PayloadBindingPathContextObj(PayloadBinding):
|
||||
def __init__(self, field: str, path_context_obj: str):
|
||||
super().__init__(field=field)
|
||||
self.path_context_obj: Final[str] = path_context_obj
|
||||
|
||||
@classmethod
|
||||
def from_raw(cls, string_dollar: str, string_path_context_obj: str):
|
||||
field: str = string_dollar[:-2]
|
||||
path_context_obj: str = string_path_context_obj[1:]
|
||||
return cls(field=field, path_context_obj=path_context_obj)
|
||||
|
||||
def _eval_val(self, env: Environment) -> Any:
|
||||
if self.path_context_obj.endswith("Task.Token"):
|
||||
task_token = env.context_object_manager.update_task_token()
|
||||
env.callback_pool_manager.add(task_token)
|
||||
value = task_token
|
||||
else:
|
||||
value = JSONPathUtils.extract_json(
|
||||
self.path_context_obj, env.context_object_manager.context_object
|
||||
)
|
||||
return value
|
@ -0,0 +1,20 @@
|
||||
from typing import Any, Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payload_value import (
|
||||
PayloadValue,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadbinding.payload_binding import (
|
||||
PayloadBinding,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class PayloadBindingValue(PayloadBinding):
|
||||
def __init__(self, field: str, value: PayloadValue):
|
||||
super().__init__(field=field)
|
||||
self.value: Final[PayloadValue] = value
|
||||
|
||||
def _eval_val(self, env: Environment) -> Any:
|
||||
self.value.eval(env)
|
||||
val: Any = env.stack.pop()
|
||||
return val
|
@ -0,0 +1,19 @@
|
||||
from typing import Final, List
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payload_value import (
|
||||
PayloadValue,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadbinding.payload_binding import (
|
||||
PayloadBinding,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class PayloadTmpl(PayloadValue):
|
||||
def __init__(self, payload_bindings: List[PayloadBinding]):
|
||||
self.payload_bindings: Final[List[PayloadBinding]] = payload_bindings
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
env.stack.append(dict())
|
||||
for payload_binding in self.payload_bindings:
|
||||
payload_binding.eval(env)
|
@ -0,0 +1,10 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadvaluelit.payload_value_lit import (
|
||||
PayloadValueLit,
|
||||
)
|
||||
|
||||
|
||||
class PayloadValueBool(PayloadValueLit):
|
||||
def __init__(self, val: bool):
|
||||
self.val: Final[bool] = val
|
@ -0,0 +1,10 @@
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadvaluelit.payload_value_lit import (
|
||||
PayloadValueLit,
|
||||
)
|
||||
|
||||
|
||||
class PayloadValueFloat(PayloadValueLit):
|
||||
val: float
|
||||
|
||||
def __init__(self, val: float):
|
||||
super().__init__(val=val)
|
@ -0,0 +1,10 @@
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadvaluelit.payload_value_lit import (
|
||||
PayloadValueLit,
|
||||
)
|
||||
|
||||
|
||||
class PayloadValueInt(PayloadValueLit):
|
||||
val: int
|
||||
|
||||
def __init__(self, val: int):
|
||||
super().__init__(val=val)
|
@ -0,0 +1,17 @@
|
||||
import abc
|
||||
from typing import Any
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payload_value import (
|
||||
PayloadValue,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class PayloadValueLit(PayloadValue, abc.ABC):
|
||||
val: Any
|
||||
|
||||
def __init__(self, val: Any):
|
||||
self.val: Any = val
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
env.stack.append(self.val)
|
@ -0,0 +1,10 @@
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadvaluelit.payload_value_lit import (
|
||||
PayloadValueLit,
|
||||
)
|
||||
|
||||
|
||||
class PayloadValueNull(PayloadValueLit):
|
||||
val: None
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(val=None)
|
@ -0,0 +1,10 @@
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadvaluelit.payload_value_lit import (
|
||||
PayloadValueLit,
|
||||
)
|
||||
|
||||
|
||||
class PayloadValueStr(PayloadValueLit):
|
||||
val: str
|
||||
|
||||
def __init__(self, val: str):
|
||||
super().__init__(val=val)
|
@ -0,0 +1,13 @@
|
||||
from moto.stepfunctions.parser.asl.component.common.payload.payloadvalue.payloadtmpl.payload_tmpl import (
|
||||
PayloadTmpl,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class ResultSelector(EvalComponent):
|
||||
def __init__(self, payload_tmpl: PayloadTmpl):
|
||||
self.payload_tmpl: PayloadTmpl = payload_tmpl
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
self.payload_tmpl.eval(env=env)
|
@ -0,0 +1,20 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class BackoffRateDecl(Component):
|
||||
"""
|
||||
"BackoffRate": a number which is the multiplier that increases the retry interval on each
|
||||
attempt (default: 2.0). The value of BackoffRate MUST be greater than or equal to 1.0.
|
||||
"""
|
||||
|
||||
DEFAULT_RATE: Final[float] = 2.0
|
||||
MIN_RATE: Final[float] = 1.0
|
||||
|
||||
def __init__(self, rate: float = DEFAULT_RATE):
|
||||
if rate < self.MIN_RATE:
|
||||
raise ValueError(
|
||||
f"The value of BackoffRate MUST be greater than or equal to 1.0, got '{rate}'."
|
||||
)
|
||||
self.rate: Final[float] = rate
|
@ -0,0 +1,19 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class IntervalSecondsDecl(Component):
|
||||
"""
|
||||
IntervalSeconds: its value MUST be a positive integer, representing the number of seconds before the
|
||||
first retry attempt (default value: 1);
|
||||
"""
|
||||
|
||||
DEFAULT_SECONDS: Final[int] = 1
|
||||
|
||||
def __init__(self, seconds: int = DEFAULT_SECONDS):
|
||||
if seconds < 0:
|
||||
raise ValueError(
|
||||
f"IntervalSeconds value must be a positive integer, found '{seconds}'."
|
||||
)
|
||||
self.seconds: Final[int] = seconds
|
@ -0,0 +1,19 @@
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class MaxAttemptsDecl(Component):
|
||||
"""
|
||||
"MaxAttempts": value MUST be a non-negative integer, representing the maximum number
|
||||
of retry attempts (default: 3)
|
||||
"""
|
||||
|
||||
DEFAULT_ATTEMPTS: Final[int] = 3
|
||||
|
||||
def __init__(self, attempts: int = DEFAULT_ATTEMPTS):
|
||||
if attempts < 0:
|
||||
raise ValueError(
|
||||
f"MaxAttempts value MUST be a non-negative integer, got '{attempts}'."
|
||||
)
|
||||
self.attempts: Final[int] = attempts
|
@ -0,0 +1,88 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import time
|
||||
from typing import Final, Optional
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.error_equals_decl import (
|
||||
ErrorEqualsDecl,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.retry.backoff_rate_decl import (
|
||||
BackoffRateDecl,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.retry.interval_seconds_decl import (
|
||||
IntervalSecondsDecl,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.retry.max_attempts_decl import (
|
||||
MaxAttemptsDecl,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.retry.retrier_outcome import (
|
||||
RetrierOutcome,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.retry.retrier_props import (
|
||||
RetrierProps,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class RetrierDecl(EvalComponent):
|
||||
def __init__(
|
||||
self,
|
||||
error_equals: ErrorEqualsDecl,
|
||||
interval_seconds: Optional[IntervalSecondsDecl] = None,
|
||||
max_attempts: Optional[MaxAttemptsDecl] = None,
|
||||
backoff_rate: Optional[BackoffRateDecl] = None,
|
||||
):
|
||||
self.error_equals: Final[ErrorEqualsDecl] = error_equals
|
||||
self.interval_seconds: Final[IntervalSecondsDecl] = (
|
||||
interval_seconds or IntervalSecondsDecl()
|
||||
)
|
||||
self.max_attempts: Final[MaxAttemptsDecl] = max_attempts or MaxAttemptsDecl()
|
||||
self.backoff_rate: Final[BackoffRateDecl] = backoff_rate or BackoffRateDecl()
|
||||
|
||||
self._attempts_counter: int = 0
|
||||
self._next_interval_seconds: float = self.interval_seconds.seconds
|
||||
|
||||
@classmethod
|
||||
def from_retrier_props(cls, props: RetrierProps) -> RetrierDecl:
|
||||
return cls(
|
||||
error_equals=props.get(
|
||||
typ=ErrorEqualsDecl,
|
||||
raise_on_missing=ValueError(
|
||||
f"Missing ErrorEquals declaration for Retrier declaration, in props '{props}'."
|
||||
),
|
||||
),
|
||||
interval_seconds=props.get(IntervalSecondsDecl),
|
||||
max_attempts=props.get(MaxAttemptsDecl),
|
||||
backoff_rate=props.get(BackoffRateDecl),
|
||||
)
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
# When a state reports an error, the interpreter scans through the Retriers and, when the Error Name appears
|
||||
# in the value of a Retrier’s "ErrorEquals" field, implements the retry policy described in that Retrier.
|
||||
|
||||
self.error_equals.eval(env)
|
||||
res: bool = env.stack.pop()
|
||||
|
||||
# This Retrier does not match
|
||||
if not res:
|
||||
env.stack.append(RetrierOutcome.Skipped)
|
||||
return
|
||||
|
||||
# This is a matching Retrier, but was exhausted.
|
||||
self._attempts_counter += 1
|
||||
if self._attempts_counter > self.max_attempts.attempts:
|
||||
env.stack.append(RetrierOutcome.Failed)
|
||||
return
|
||||
|
||||
# Execute the Retrier logic.
|
||||
# TODO: continue after interrupts?
|
||||
time.sleep(self._next_interval_seconds)
|
||||
|
||||
self._next_interval_seconds = (
|
||||
self._attempts_counter
|
||||
* self.interval_seconds.seconds
|
||||
* self.backoff_rate.rate
|
||||
)
|
||||
|
||||
env.stack.append(RetrierOutcome.Executed)
|
@ -0,0 +1,7 @@
|
||||
import enum
|
||||
|
||||
|
||||
class RetrierOutcome(enum.Enum):
|
||||
Executed = 0
|
||||
Failed = 1
|
||||
Skipped = 2
|
@ -0,0 +1,5 @@
|
||||
from moto.stepfunctions.parser.asl.parse.typed_props import TypedProps
|
||||
|
||||
|
||||
class RetrierProps(TypedProps):
|
||||
pass
|
@ -0,0 +1,40 @@
|
||||
from typing import Final, List
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.common.error_name.error_name import (
|
||||
ErrorName,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.retry.retrier_decl import (
|
||||
RetrierDecl,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.retry.retrier_outcome import (
|
||||
RetrierOutcome,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.common.retry.retry_outcome import (
|
||||
RetryOutcome,
|
||||
)
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
|
||||
|
||||
class RetryDecl(EvalComponent):
|
||||
def __init__(self, retriers: List[RetrierDecl]):
|
||||
self.retriers: Final[List[RetrierDecl]] = retriers
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
error_name: ErrorName = env.stack.pop()
|
||||
|
||||
for retrier in self.retriers:
|
||||
env.stack.append(error_name)
|
||||
retrier.eval(env)
|
||||
outcome: RetrierOutcome = env.stack.pop()
|
||||
|
||||
if outcome == RetrierOutcome.Skipped:
|
||||
continue
|
||||
elif outcome == RetrierOutcome.Executed:
|
||||
env.stack.append(RetryOutcome.CanRetry)
|
||||
return
|
||||
elif outcome == RetrierOutcome.Failed:
|
||||
env.stack.append(RetryOutcome.CannotRetry)
|
||||
return
|
||||
|
||||
env.stack.append(RetryOutcome.NoRetrier)
|
@ -0,0 +1,7 @@
|
||||
from enum import Enum
|
||||
|
||||
|
||||
class RetryOutcome(Enum):
|
||||
CanRetry = 0
|
||||
CannotRetry = 1
|
||||
NoRetrier = 2
|
@ -0,0 +1,46 @@
|
||||
import abc
|
||||
from typing import Final
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
from moto.stepfunctions.parser.asl.utils.json_path import JSONPathUtils
|
||||
|
||||
|
||||
class Heartbeat(EvalComponent, abc.ABC):
|
||||
@abc.abstractmethod
|
||||
def _eval_seconds(self, env: Environment) -> int:
|
||||
...
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
seconds = self._eval_seconds(env=env)
|
||||
env.stack.append(seconds)
|
||||
|
||||
|
||||
class HeartbeatSeconds(Heartbeat):
|
||||
def __init__(self, heartbeat_seconds: int):
|
||||
if not isinstance(heartbeat_seconds, int) and heartbeat_seconds <= 0:
|
||||
raise ValueError(
|
||||
f"Expected non-negative integer for HeartbeatSeconds, got '{heartbeat_seconds}' instead."
|
||||
)
|
||||
self.heartbeat_seconds: Final[int] = heartbeat_seconds
|
||||
|
||||
def _eval_seconds(self, env: Environment) -> int:
|
||||
return self.heartbeat_seconds
|
||||
|
||||
|
||||
class HeartbeatSecondsPath(Heartbeat):
|
||||
def __init__(self, path: str):
|
||||
self.path: Final[str] = path
|
||||
|
||||
@classmethod
|
||||
def from_raw(cls, path: str):
|
||||
return cls(path=path)
|
||||
|
||||
def _eval_seconds(self, env: Environment) -> int:
|
||||
inp = env.stack[-1]
|
||||
seconds = JSONPathUtils.extract_json(self.path, inp)
|
||||
if not isinstance(seconds, int) and seconds <= 0:
|
||||
raise ValueError(
|
||||
f"Expected non-negative integer for HeartbeatSecondsPath, got '{seconds}' instead."
|
||||
)
|
||||
return seconds
|
@ -0,0 +1,65 @@
|
||||
import abc
|
||||
from typing import Final, Optional
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.eval_component import EvalComponent
|
||||
from moto.stepfunctions.parser.asl.eval.environment import Environment
|
||||
from moto.stepfunctions.parser.asl.utils.json_path import JSONPathUtils
|
||||
|
||||
|
||||
class Timeout(EvalComponent, abc.ABC):
|
||||
@abc.abstractmethod
|
||||
def is_default_value(self) -> bool:
|
||||
...
|
||||
|
||||
@abc.abstractmethod
|
||||
def _eval_seconds(self, env: Environment) -> int:
|
||||
...
|
||||
|
||||
def _eval_body(self, env: Environment) -> None:
|
||||
seconds = self._eval_seconds(env=env)
|
||||
env.stack.append(seconds)
|
||||
|
||||
|
||||
class TimeoutSeconds(Timeout):
|
||||
DEFAULT_TIMEOUT_SECONDS: Final[int] = 99999999
|
||||
|
||||
def __init__(self, timeout_seconds: int, is_default: Optional[bool] = None):
|
||||
if not isinstance(timeout_seconds, int) and timeout_seconds <= 0:
|
||||
raise ValueError(
|
||||
f"Expected non-negative integer for TimeoutSeconds, got '{timeout_seconds}' instead."
|
||||
)
|
||||
self.timeout_seconds: Final[int] = timeout_seconds
|
||||
self.is_default: Optional[bool] = is_default
|
||||
|
||||
def is_default_value(self) -> bool:
|
||||
if self.is_default is not None:
|
||||
return self.is_default
|
||||
return self.timeout_seconds == self.DEFAULT_TIMEOUT_SECONDS
|
||||
|
||||
def _eval_seconds(self, env: Environment) -> int:
|
||||
return self.timeout_seconds
|
||||
|
||||
|
||||
class TimeoutSecondsPath(Timeout):
|
||||
def __init__(self, path: str):
|
||||
self.path: Final[str] = path
|
||||
|
||||
@classmethod
|
||||
def from_raw(cls, path: str):
|
||||
return cls(path=path)
|
||||
|
||||
def is_default_value(self) -> bool:
|
||||
return False
|
||||
|
||||
def _eval_seconds(self, env: Environment) -> int:
|
||||
inp = env.stack[-1]
|
||||
seconds = JSONPathUtils.extract_json(self.path, inp)
|
||||
if not isinstance(seconds, int) and seconds <= 0:
|
||||
raise ValueError(
|
||||
f"Expected non-negative integer for TimeoutSecondsPath, got '{seconds}' instead."
|
||||
)
|
||||
return seconds
|
||||
|
||||
|
||||
class EvalTimeoutError(TimeoutError):
|
||||
pass
|
17
moto/stepfunctions/parser/asl/component/common/version.py
Normal file
17
moto/stepfunctions/parser/asl/component/common/version.py
Normal file
@ -0,0 +1,17 @@
|
||||
from typing import Final, Set
|
||||
|
||||
from moto.stepfunctions.parser.asl.component.component import Component
|
||||
|
||||
|
||||
class Version(Component):
|
||||
_SUPPORTED_VERSIONS: Final[Set[str]] = {"1.0"}
|
||||
|
||||
version: Final[str]
|
||||
|
||||
def __init__(self, version: str):
|
||||
if version not in self._SUPPORTED_VERSIONS:
|
||||
raise ValueError(
|
||||
f"Version value '{version}' is not accepted. Supported Versions: {list(self._SUPPORTED_VERSIONS)}"
|
||||
)
|
||||
|
||||
self.version = version
|
9
moto/stepfunctions/parser/asl/component/component.py
Normal file
9
moto/stepfunctions/parser/asl/component/component.py
Normal file
@ -0,0 +1,9 @@
|
||||
import abc
|
||||
|
||||
|
||||
class Component(abc.ABC):
|
||||
def __str__(self):
|
||||
return f"({self.__class__.__name__}| {vars(self)}"
|
||||
|
||||
def __repr__(self):
|
||||
return str(self)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user