pytest-dsl 0.5.0__py3-none-any.whl → 0.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pytest_dsl/cli.py +28 -33
- pytest_dsl/core/auto_decorator.py +72 -53
- pytest_dsl/core/auto_directory.py +8 -5
- pytest_dsl/core/dsl_executor.py +56 -11
- pytest_dsl/core/http_request.py +272 -221
- pytest_dsl/core/lexer.py +3 -13
- pytest_dsl/core/parser.py +2 -2
- pytest_dsl/core/parsetab.py +69 -69
- pytest_dsl/core/plugin_discovery.py +1 -8
- pytest_dsl/core/yaml_loader.py +96 -19
- pytest_dsl/examples/assert/assertion_example.auto +1 -1
- pytest_dsl/examples/assert/boolean_test.auto +2 -2
- pytest_dsl/examples/assert/expression_test.auto +1 -1
- pytest_dsl/examples/custom/test_advanced_keywords.auto +2 -2
- pytest_dsl/examples/custom/test_custom_keywords.auto +2 -2
- pytest_dsl/examples/custom/test_default_values.auto +2 -2
- pytest_dsl/examples/http/file_reference_test.auto +1 -1
- pytest_dsl/examples/http/http_advanced.auto +1 -1
- pytest_dsl/examples/http/http_example.auto +1 -1
- pytest_dsl/examples/http/http_length_test.auto +1 -1
- pytest_dsl/examples/http/http_retry_assertions.auto +1 -1
- pytest_dsl/examples/http/http_retry_assertions_enhanced.auto +2 -2
- pytest_dsl/examples/http/http_with_yaml.auto +1 -1
- pytest_dsl/examples/quickstart/api_basics.auto +1 -1
- pytest_dsl/examples/quickstart/assertions.auto +1 -1
- pytest_dsl/examples/quickstart/loops.auto +2 -2
- pytest_dsl/keywords/assertion_keywords.py +76 -62
- pytest_dsl/keywords/global_keywords.py +43 -4
- pytest_dsl/keywords/http_keywords.py +58 -56
- {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.6.0.dist-info}/METADATA +138 -9
- pytest_dsl-0.6.0.dist-info/RECORD +68 -0
- {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.6.0.dist-info}/WHEEL +1 -1
- pytest_dsl-0.5.0.dist-info/RECORD +0 -68
- {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.6.0.dist-info}/entry_points.txt +0 -0
- {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.6.0.dist-info}/licenses/LICENSE +0 -0
- {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.6.0.dist-info}/top_level.txt +0 -0
pytest_dsl/core/lexer.py
CHANGED
@@ -13,7 +13,9 @@ reserved = {
|
|
13
13
|
'return': 'RETURN', # 添加return关键字支持
|
14
14
|
'else': 'ELSE', # 添加else关键字支持
|
15
15
|
'if': 'IF', # 添加if关键字支持
|
16
|
-
'as': 'AS' # 添加as关键字支持,用于远程关键字别名
|
16
|
+
'as': 'AS', # 添加as关键字支持,用于远程关键字别名
|
17
|
+
'function': 'FUNCTION', # 添加function关键字支持,用于自定义关键字定义
|
18
|
+
'teardown': 'TEARDOWN' # 添加teardown关键字支持,用于清理操作
|
17
19
|
}
|
18
20
|
|
19
21
|
# token 名称列表
|
@@ -35,9 +37,7 @@ tokens = [
|
|
35
37
|
'TAGS_KEYWORD',
|
36
38
|
'AUTHOR_KEYWORD',
|
37
39
|
'DATE_KEYWORD',
|
38
|
-
'TEARDOWN_KEYWORD',
|
39
40
|
'DATA_KEYWORD', # Add new token for @data keyword
|
40
|
-
'KEYWORD_KEYWORD', # 添加@keyword关键字
|
41
41
|
'IMPORT_KEYWORD', # 添加@import关键字
|
42
42
|
'REMOTE_KEYWORD', # 添加@remote关键字
|
43
43
|
'GT', # 大于 >
|
@@ -132,21 +132,11 @@ def t_DATE_KEYWORD(t):
|
|
132
132
|
return t
|
133
133
|
|
134
134
|
|
135
|
-
def t_TEARDOWN_KEYWORD(t):
|
136
|
-
r'@teardown'
|
137
|
-
return t
|
138
|
-
|
139
|
-
|
140
135
|
def t_DATA_KEYWORD(t):
|
141
136
|
r'@data'
|
142
137
|
return t
|
143
138
|
|
144
139
|
|
145
|
-
def t_KEYWORD_KEYWORD(t):
|
146
|
-
r'@keyword'
|
147
|
-
return t
|
148
|
-
|
149
|
-
|
150
140
|
def t_IMPORT_KEYWORD(t):
|
151
141
|
r'@import'
|
152
142
|
return t
|
pytest_dsl/core/parser.py
CHANGED
@@ -231,7 +231,7 @@ def p_parameter_item(p):
|
|
231
231
|
|
232
232
|
|
233
233
|
def p_teardown(p):
|
234
|
-
'''teardown :
|
234
|
+
'''teardown : TEARDOWN DO statements END'''
|
235
235
|
p[0] = Node('Teardown', [p[3]])
|
236
236
|
|
237
237
|
|
@@ -241,7 +241,7 @@ def p_data_source(p):
|
|
241
241
|
|
242
242
|
|
243
243
|
def p_custom_keyword(p):
|
244
|
-
'''custom_keyword :
|
244
|
+
'''custom_keyword : FUNCTION ID LPAREN param_definitions RPAREN DO statements END'''
|
245
245
|
p[0] = Node('CustomKeyword', [p[4], p[7]], p[2])
|
246
246
|
|
247
247
|
|
pytest_dsl/core/parsetab.py
CHANGED
@@ -6,9 +6,9 @@ _tabversion = '3.10'
|
|
6
6
|
|
7
7
|
_lr_method = 'LALR'
|
8
8
|
|
9
|
-
_lr_signature = 'leftCOMMAleftGTLTGELEEQNEleftPLUSMINUSleftTIMESDIVIDErightEQUALSAS AUTHOR_KEYWORD COLON COMMA DATA_KEYWORD DATE DATE_KEYWORD DESCRIPTION_KEYWORD DIVIDE DO ELSE END EQ EQUALS FALSE FOR GE GT ID IF IMPORT_KEYWORD IN
|
9
|
+
_lr_signature = 'leftCOMMAleftGTLTGELEEQNEleftPLUSMINUSleftTIMESDIVIDErightEQUALSAS AUTHOR_KEYWORD COLON COMMA DATA_KEYWORD DATE DATE_KEYWORD DESCRIPTION_KEYWORD DIVIDE DO ELSE END EQ EQUALS FALSE FOR FUNCTION GE GT ID IF IMPORT_KEYWORD IN LBRACKET LE LPAREN LT MINUS NAME_KEYWORD NE NUMBER PIPE PLACEHOLDER PLUS RANGE RBRACKET REMOTE_KEYWORD RETURN RPAREN STRING TAGS_KEYWORD TEARDOWN TIMES TRUE USINGstart : metadata statements teardown\n | metadata statements\n | statements teardown\n | statementsmetadata : metadata_items\n | emptyempty :metadata_items : metadata_item metadata_items\n | metadata_itemmetadata_item : NAME_KEYWORD COLON metadata_value\n | DESCRIPTION_KEYWORD COLON metadata_value\n | TAGS_KEYWORD COLON LBRACKET tags RBRACKET\n | AUTHOR_KEYWORD COLON metadata_value\n | DATE_KEYWORD COLON DATE\n | DATA_KEYWORD COLON data_source\n | IMPORT_KEYWORD COLON STRING\n | REMOTE_KEYWORD COLON STRING AS IDmetadata_value : STRING\n | IDtags : tag COMMA tags\n | tagtag : STRING\n | IDstatements : statement statements\n | statementstatement : assignment\n | keyword_call\n | remote_keyword_call\n | loop\n | custom_keyword\n | return_statement\n | if_statementassignment : ID EQUALS expression\n | ID EQUALS keyword_call\n | ID EQUALS remote_keyword_callexpression : expr_atom\n | comparison_expr\n | arithmetic_exprexpr_atom : NUMBER\n | STRING\n | PLACEHOLDER\n | ID\n | boolean_expr\n | list_expr\n | LPAREN expression RPARENboolean_expr : TRUE\n | FALSElist_expr : LBRACKET list_items RBRACKET\n | LBRACKET RBRACKETlist_items : list_item\n | list_item COMMA list_itemslist_item : expressionloop : FOR ID IN RANGE LPAREN expression COMMA expression RPAREN DO statements ENDkeyword_call : LBRACKET ID RBRACKET COMMA parameter_list\n | LBRACKET ID RBRACKETparameter_list : parameter_itemsparameter_items : parameter_item COMMA parameter_items\n | parameter_itemparameter_item : ID COLON expressionteardown : TEARDOWN DO statements ENDdata_source : STRING USING IDcustom_keyword : FUNCTION ID LPAREN param_definitions RPAREN DO statements ENDparam_definitions : param_def_list\n | param_def_list : param_def COMMA param_def_list\n | param_defparam_def : ID EQUALS STRING\n | ID EQUALS NUMBER\n | IDreturn_statement : RETURN expressionif_statement : IF expression DO statements END\n | IF expression DO statements ELSE statements ENDcomparison_expr : expr_atom GT expr_atom\n | expr_atom LT expr_atom\n | expr_atom GE expr_atom\n | expr_atom LE expr_atom\n | expr_atom EQ expr_atom\n | expr_atom NE expr_atomarithmetic_expr : expression PLUS expression\n | expression MINUS expression\n | expression TIMES expression\n | expression DIVIDE expressionremote_keyword_call : ID PIPE LBRACKET ID RBRACKET COMMA parameter_list\n | ID PIPE LBRACKET ID RBRACKET'
|
10
10
|
|
11
|
-
_lr_action_items = {'ID':([0,2,4,5,6,7,8,9,10,11,12,13,14,18,25,26,27,28,33,34,35,38,43,47,48,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,74,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,96,99,105,106,107,115,116,117,118,119,120,121,122,123,124,125,126,127,130,131,133,134,135,136,137,138,139,142,144,145,147,148,149,153,156,157,158,159,161,163,165,167,],[24,24,-5,-6,24,-9,-26,-27,-28,-29,-30,-31,-32,37,45,46,54,54,-8,66,66,66,76,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,54,-46,-47,54,24,-10,-18,-19,-11,104,-55,-13,-14,-15,-16,-42,-33,-34,-35,108,109,111,54,54,54,54,54,54,54,54,54,54,-49,24,132,136,137,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,54,-12,104,-54,-56,-58,-61,-17,-84,54,111,-71,24,54,132,132,24,-59,-57,-83,54,-72,-62,24,-53,]),'LBRACKET':([0,2,4,5,6,7,8,9,10,11,12,13,14,27,28,33,36,43,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,69,70,71,72,74,76,77,78,79,80,84,85,86,87,88,89,90,91,92,93,96,99,115,116,117,118,119,120,121,122,123,124,125,126,127,130,133,134,135,136,137,138,139,144,145,147,153,156,157,158,159,161,163,165,167,],[18,18,-5,-6,18,-9,-26,-27,-28,-29,-30,-31,-32,60,60,-8,68,80,81,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,60,-46,-47,60,18,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,60,60,60,60,60,60,60,60,60,60,60,-49,18,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,60,-12,-54,-56,-58,-61,-17,-84,60,-71,18,60,18,-59,-57,-83,60,-72,-62,18,-53,]),'FOR':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,58,59,63,64,65,66,67,69,70,71,72,74,76,77,78,79,96,99,115,116,117,118,119,120,121,122,123,124,125,126,130,133,134,135,136,137,138,144,145,153,156,157,158,161,163,165,167,],[25,25,-5,-6,25,-9,-26,-27,-28,-29,-30,-31,-32,-8,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,25,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,-49,25,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-12,-54,-56,-58,-61,-17,-84,-71,25,25,-59,-57,-83,-72,-62,25,-53,]),'KEYWORD_KEYWORD':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,58,59,63,64,65,66,67,69,70,71,72,74,76,77,78,79,96,99,115,116,117,118,119,120,121,122,123,124,125,126,130,133,134,135,136,137,138,144,145,153,156,157,158,161,163,165,167,],[26,26,-5,-6,26,-9,-26,-27,-28,-29,-30,-31,-32,-8,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,26,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,-49,26,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-12,-54,-56,-58,-61,-17,-84,-71,26,26,-59,-57,-83,-72,-62,26,-53,]),'RETURN':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,58,59,63,64,65,66,67,69,70,71,72,74,76,77,78,79,96,99,115,116,117,118,119,120,121,122,123,124,125,126,130,133,134,135,136,137,138,144,145,153,156,157,158,161,163,165,167,],[27,27,-5,-6,27,-9,-26,-27,-28,-29,-30,-31,-32,-8,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,27,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,-49,27,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-12,-54,-56,-58,-61,-17,-84,-71,27,27,-59,-57,-83,-72,-62,27,-53,]),'IF':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,58,59,63,64,65,66,67,69,70,71,72,74,76,77,78,79,96,99,115,116,117,118,119,120,121,122,123,124,125,126,130,133,134,135,136,137,138,144,145,153,156,157,158,161,163,165,167,],[28,28,-5,-6,28,-9,-26,-27,-28,-29,-30,-31,-32,-8,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,28,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,-49,28,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-12,-54,-56,-58,-61,-17,-84,-71,28,28,-59,-57,-83,-72,-62,28,-53,]),'NAME_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[15,15,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'DESCRIPTION_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[16,16,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'TAGS_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[17,17,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'AUTHOR_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[19,19,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'DATE_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[20,20,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'DATA_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[21,21,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'IMPORT_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[22,22,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'REMOTE_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[23,23,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'$end':([1,3,6,8,9,10,11,12,13,14,29,30,32,47,48,49,50,51,52,53,54,55,56,58,59,62,69,76,77,78,79,96,115,116,117,118,119,120,121,122,123,124,125,126,129,133,134,135,138,144,156,157,158,161,163,167,],[0,-4,-25,-26,-27,-28,-29,-30,-31,-32,-2,-3,-24,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-1,-55,-42,-33,-34,-35,-49,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-60,-54,-56,-58,-84,-71,-59,-57,-83,-72,-62,-53,]),'TEARDOWN_KEYWORD':([3,6,8,9,10,11,12,13,14,29,32,47,48,49,50,51,52,53,54,55,56,58,59,69,76,77,78,79,96,115,116,117,118,119,120,121,122,123,124,125,126,133,134,135,138,144,156,157,158,161,163,167,],[31,-25,-26,-27,-28,-29,-30,-31,-32,31,-24,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-55,-42,-33,-34,-35,-49,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-54,-56,-58,-84,-71,-59,-57,-83,-72,-62,-53,]),'END':([6,8,9,10,11,12,13,14,32,47,48,49,50,51,52,53,54,55,56,58,59,69,76,77,78,79,96,100,115,116,117,118,119,120,121,122,123,124,125,126,128,133,134,135,138,144,155,156,157,158,160,161,163,166,167,],[-25,-26,-27,-28,-29,-30,-31,-32,-24,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-55,-42,-33,-34,-35,-49,129,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,144,-54,-56,-58,-84,-71,161,-59,-57,-83,163,-72,-62,167,-53,]),'ELSE':([6,8,9,10,11,12,13,14,32,47,48,49,50,51,52,53,54,55,56,58,59,69,76,77,78,79,96,115,116,117,118,119,120,121,122,123,124,125,126,128,133,134,135,138,144,156,157,158,161,163,167,],[-25,-26,-27,-28,-29,-30,-31,-32,-24,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-55,-42,-33,-34,-35,-49,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,145,-54,-56,-58,-84,-71,-59,-57,-83,-72,-62,-53,]),'COLON':([15,16,17,19,20,21,22,23,132,],[34,35,36,38,39,40,41,42,147,]),'EQUALS':([24,111,],[43,140,]),'PIPE':([24,76,],[44,44,]),'NUMBER':([27,28,43,57,60,80,84,85,86,87,88,89,90,91,92,93,127,139,140,147,159,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,152,51,51,]),'STRING':([27,28,34,35,38,40,41,42,43,57,60,68,80,84,85,86,87,88,89,90,91,92,93,127,131,139,140,147,159,],[52,52,65,65,65,73,74,75,52,52,52,103,52,52,52,52,52,52,52,52,52,52,52,52,103,52,151,52,52,]),'PLACEHOLDER':([27,28,43,57,60,80,84,85,86,87,88,89,90,91,92,93,127,139,147,159,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'LPAREN':([27,28,43,46,57,60,80,84,85,86,87,88,89,90,91,92,93,110,127,139,147,159,],[57,57,57,83,57,57,57,57,57,57,57,57,57,57,57,57,57,139,57,57,57,57,]),'TRUE':([27,28,43,57,60,80,84,85,86,87,88,89,90,91,92,93,127,139,147,159,],[58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,]),'FALSE':([27,28,43,57,60,80,84,85,86,87,88,89,90,91,92,93,127,139,147,159,],[59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,]),'DO':([31,48,49,50,51,52,53,54,55,56,58,59,61,96,115,116,117,118,119,120,121,122,123,124,125,126,141,164,],[63,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,99,-49,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,153,165,]),'RBRACKET':([37,48,49,50,51,52,53,54,55,56,58,59,60,80,95,96,97,98,101,102,103,104,108,109,115,116,117,118,119,120,121,122,123,124,125,126,143,146,],[69,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,96,96,126,-49,-50,-52,130,-21,-22,-23,69,138,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-51,-20,]),'DATE':([39,],[71,]),'IN':([45,],[82,]),'PLUS':([47,48,49,50,51,52,53,54,55,56,58,59,61,76,77,94,96,98,108,115,116,117,118,119,120,121,122,123,124,125,126,150,156,162,],[84,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,84,-42,84,84,-49,84,-42,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,84,84,84,]),'MINUS':([47,48,49,50,51,52,53,54,55,56,58,59,61,76,77,94,96,98,108,115,116,117,118,119,120,121,122,123,124,125,126,150,156,162,],[85,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,85,-42,85,85,-49,85,-42,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,85,85,85,]),'TIMES':([47,48,49,50,51,52,53,54,55,56,58,59,61,76,77,94,96,98,108,115,116,117,118,119,120,121,122,123,124,125,126,150,156,162,],[86,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,86,-42,86,86,-49,86,-42,86,86,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,86,86,86,]),'DIVIDE':([47,48,49,50,51,52,53,54,55,56,58,59,61,76,77,94,96,98,108,115,116,117,118,119,120,121,122,123,124,125,126,150,156,162,],[87,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,87,-42,87,87,-49,87,-42,87,87,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,87,87,87,]),'RPAREN':([48,49,50,51,52,53,54,55,56,58,59,83,94,96,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,151,152,154,162,],[-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-64,125,-49,-69,141,-63,-66,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-67,-68,-65,164,]),'COMMA':([48,49,50,51,52,53,54,55,56,58,59,69,96,97,98,102,103,104,108,111,114,115,116,117,118,119,120,121,122,123,124,125,126,135,138,150,151,152,156,],[-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,105,-49,127,-52,131,-22,-23,-42,-69,142,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,148,149,159,-67,-68,-59,]),'GT':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[88,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'LT':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[89,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'GE':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[90,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'LE':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[91,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'EQ':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[92,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'NE':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[93,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'USING':([73,],[106,]),'AS':([75,],[107,]),'RANGE':([82,],[110,]),}
|
11
|
+
_lr_action_items = {'ID':([0,2,4,5,6,7,8,9,10,11,12,13,14,18,25,26,27,28,33,34,35,38,43,47,48,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,68,69,70,71,72,74,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,96,99,105,106,107,115,116,117,118,119,120,121,122,123,124,125,126,127,130,131,133,134,135,136,137,138,139,142,144,145,147,148,149,153,156,157,158,159,161,163,165,167,],[24,24,-5,-6,24,-9,-26,-27,-28,-29,-30,-31,-32,37,45,46,54,54,-8,66,66,66,76,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,54,-46,-47,54,24,-10,-18,-19,-11,104,-55,-13,-14,-15,-16,-42,-33,-34,-35,108,109,111,54,54,54,54,54,54,54,54,54,54,-49,24,132,136,137,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,54,-12,104,-54,-56,-58,-61,-17,-84,54,111,-71,24,54,132,132,24,-59,-57,-83,54,-72,-62,24,-53,]),'LBRACKET':([0,2,4,5,6,7,8,9,10,11,12,13,14,27,28,33,36,43,44,47,48,49,50,51,52,53,54,55,56,57,58,59,60,63,64,65,66,67,69,70,71,72,74,76,77,78,79,80,84,85,86,87,88,89,90,91,92,93,96,99,115,116,117,118,119,120,121,122,123,124,125,126,127,130,133,134,135,136,137,138,139,144,145,147,153,156,157,158,159,161,163,165,167,],[18,18,-5,-6,18,-9,-26,-27,-28,-29,-30,-31,-32,60,60,-8,68,80,81,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,60,-46,-47,60,18,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,60,60,60,60,60,60,60,60,60,60,60,-49,18,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,60,-12,-54,-56,-58,-61,-17,-84,60,-71,18,60,18,-59,-57,-83,60,-72,-62,18,-53,]),'FOR':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,58,59,63,64,65,66,67,69,70,71,72,74,76,77,78,79,96,99,115,116,117,118,119,120,121,122,123,124,125,126,130,133,134,135,136,137,138,144,145,153,156,157,158,161,163,165,167,],[25,25,-5,-6,25,-9,-26,-27,-28,-29,-30,-31,-32,-8,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,25,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,-49,25,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-12,-54,-56,-58,-61,-17,-84,-71,25,25,-59,-57,-83,-72,-62,25,-53,]),'FUNCTION':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,58,59,63,64,65,66,67,69,70,71,72,74,76,77,78,79,96,99,115,116,117,118,119,120,121,122,123,124,125,126,130,133,134,135,136,137,138,144,145,153,156,157,158,161,163,165,167,],[26,26,-5,-6,26,-9,-26,-27,-28,-29,-30,-31,-32,-8,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,26,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,-49,26,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-12,-54,-56,-58,-61,-17,-84,-71,26,26,-59,-57,-83,-72,-62,26,-53,]),'RETURN':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,58,59,63,64,65,66,67,69,70,71,72,74,76,77,78,79,96,99,115,116,117,118,119,120,121,122,123,124,125,126,130,133,134,135,136,137,138,144,145,153,156,157,158,161,163,165,167,],[27,27,-5,-6,27,-9,-26,-27,-28,-29,-30,-31,-32,-8,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,27,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,-49,27,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-12,-54,-56,-58,-61,-17,-84,-71,27,27,-59,-57,-83,-72,-62,27,-53,]),'IF':([0,2,4,5,6,7,8,9,10,11,12,13,14,33,47,48,49,50,51,52,53,54,55,56,58,59,63,64,65,66,67,69,70,71,72,74,76,77,78,79,96,99,115,116,117,118,119,120,121,122,123,124,125,126,130,133,134,135,136,137,138,144,145,153,156,157,158,161,163,165,167,],[28,28,-5,-6,28,-9,-26,-27,-28,-29,-30,-31,-32,-8,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,28,-10,-18,-19,-11,-55,-13,-14,-15,-16,-42,-33,-34,-35,-49,28,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-12,-54,-56,-58,-61,-17,-84,-71,28,28,-59,-57,-83,-72,-62,28,-53,]),'NAME_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[15,15,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'DESCRIPTION_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[16,16,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'TAGS_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[17,17,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'AUTHOR_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[19,19,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'DATE_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[20,20,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'DATA_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[21,21,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'IMPORT_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[22,22,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'REMOTE_KEYWORD':([0,7,64,65,66,67,70,71,72,74,130,136,137,],[23,23,-10,-18,-19,-11,-13,-14,-15,-16,-12,-61,-17,]),'$end':([1,3,6,8,9,10,11,12,13,14,29,30,32,47,48,49,50,51,52,53,54,55,56,58,59,62,69,76,77,78,79,96,115,116,117,118,119,120,121,122,123,124,125,126,129,133,134,135,138,144,156,157,158,161,163,167,],[0,-4,-25,-26,-27,-28,-29,-30,-31,-32,-2,-3,-24,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-1,-55,-42,-33,-34,-35,-49,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-60,-54,-56,-58,-84,-71,-59,-57,-83,-72,-62,-53,]),'TEARDOWN':([3,6,8,9,10,11,12,13,14,29,32,47,48,49,50,51,52,53,54,55,56,58,59,69,76,77,78,79,96,115,116,117,118,119,120,121,122,123,124,125,126,133,134,135,138,144,156,157,158,161,163,167,],[31,-25,-26,-27,-28,-29,-30,-31,-32,31,-24,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-55,-42,-33,-34,-35,-49,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-54,-56,-58,-84,-71,-59,-57,-83,-72,-62,-53,]),'END':([6,8,9,10,11,12,13,14,32,47,48,49,50,51,52,53,54,55,56,58,59,69,76,77,78,79,96,100,115,116,117,118,119,120,121,122,123,124,125,126,128,133,134,135,138,144,155,156,157,158,160,161,163,166,167,],[-25,-26,-27,-28,-29,-30,-31,-32,-24,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-55,-42,-33,-34,-35,-49,129,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,144,-54,-56,-58,-84,-71,161,-59,-57,-83,163,-72,-62,167,-53,]),'ELSE':([6,8,9,10,11,12,13,14,32,47,48,49,50,51,52,53,54,55,56,58,59,69,76,77,78,79,96,115,116,117,118,119,120,121,122,123,124,125,126,128,133,134,135,138,144,156,157,158,161,163,167,],[-25,-26,-27,-28,-29,-30,-31,-32,-24,-70,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-55,-42,-33,-34,-35,-49,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,145,-54,-56,-58,-84,-71,-59,-57,-83,-72,-62,-53,]),'COLON':([15,16,17,19,20,21,22,23,132,],[34,35,36,38,39,40,41,42,147,]),'EQUALS':([24,111,],[43,140,]),'PIPE':([24,76,],[44,44,]),'NUMBER':([27,28,43,57,60,80,84,85,86,87,88,89,90,91,92,93,127,139,140,147,159,],[51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,152,51,51,]),'STRING':([27,28,34,35,38,40,41,42,43,57,60,68,80,84,85,86,87,88,89,90,91,92,93,127,131,139,140,147,159,],[52,52,65,65,65,73,74,75,52,52,52,103,52,52,52,52,52,52,52,52,52,52,52,52,103,52,151,52,52,]),'PLACEHOLDER':([27,28,43,57,60,80,84,85,86,87,88,89,90,91,92,93,127,139,147,159,],[53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,]),'LPAREN':([27,28,43,46,57,60,80,84,85,86,87,88,89,90,91,92,93,110,127,139,147,159,],[57,57,57,83,57,57,57,57,57,57,57,57,57,57,57,57,57,139,57,57,57,57,]),'TRUE':([27,28,43,57,60,80,84,85,86,87,88,89,90,91,92,93,127,139,147,159,],[58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,58,]),'FALSE':([27,28,43,57,60,80,84,85,86,87,88,89,90,91,92,93,127,139,147,159,],[59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,]),'DO':([31,48,49,50,51,52,53,54,55,56,58,59,61,96,115,116,117,118,119,120,121,122,123,124,125,126,141,164,],[63,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,99,-49,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,153,165,]),'RBRACKET':([37,48,49,50,51,52,53,54,55,56,58,59,60,80,95,96,97,98,101,102,103,104,108,109,115,116,117,118,119,120,121,122,123,124,125,126,143,146,],[69,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,96,96,126,-49,-50,-52,130,-21,-22,-23,69,138,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-51,-20,]),'DATE':([39,],[71,]),'IN':([45,],[82,]),'PLUS':([47,48,49,50,51,52,53,54,55,56,58,59,61,76,77,94,96,98,108,115,116,117,118,119,120,121,122,123,124,125,126,150,156,162,],[84,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,84,-42,84,84,-49,84,-42,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,84,84,84,]),'MINUS':([47,48,49,50,51,52,53,54,55,56,58,59,61,76,77,94,96,98,108,115,116,117,118,119,120,121,122,123,124,125,126,150,156,162,],[85,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,85,-42,85,85,-49,85,-42,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,85,85,85,]),'TIMES':([47,48,49,50,51,52,53,54,55,56,58,59,61,76,77,94,96,98,108,115,116,117,118,119,120,121,122,123,124,125,126,150,156,162,],[86,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,86,-42,86,86,-49,86,-42,86,86,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,86,86,86,]),'DIVIDE':([47,48,49,50,51,52,53,54,55,56,58,59,61,76,77,94,96,98,108,115,116,117,118,119,120,121,122,123,124,125,126,150,156,162,],[87,-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,87,-42,87,87,-49,87,-42,87,87,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,87,87,87,]),'RPAREN':([48,49,50,51,52,53,54,55,56,58,59,83,94,96,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,151,152,154,162,],[-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,-64,125,-49,-69,141,-63,-66,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,-67,-68,-65,164,]),'COMMA':([48,49,50,51,52,53,54,55,56,58,59,69,96,97,98,102,103,104,108,111,114,115,116,117,118,119,120,121,122,123,124,125,126,135,138,150,151,152,156,],[-36,-37,-38,-39,-40,-41,-42,-43,-44,-46,-47,105,-49,127,-52,131,-22,-23,-42,-69,142,-79,-80,-81,-82,-73,-74,-75,-76,-77,-78,-45,-48,148,149,159,-67,-68,-59,]),'GT':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[88,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'LT':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[89,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'GE':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[90,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'LE':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[91,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'EQ':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[92,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'NE':([48,51,52,53,54,55,56,58,59,76,96,108,125,126,],[93,-39,-40,-41,-42,-43,-44,-46,-47,-42,-49,-42,-45,-48,]),'USING':([73,],[106,]),'AS':([75,],[107,]),'RANGE':([82,],[110,]),}
|
12
12
|
|
13
13
|
_lr_action = {}
|
14
14
|
for _k, _v in _lr_action_items.items():
|
@@ -44,71 +44,71 @@ _lr_productions = [
|
|
44
44
|
('metadata_item -> DATA_KEYWORD COLON data_source','metadata_item',3,'p_metadata_item','parser.py',70),
|
45
45
|
('metadata_item -> IMPORT_KEYWORD COLON STRING','metadata_item',3,'p_metadata_item','parser.py',71),
|
46
46
|
('metadata_item -> REMOTE_KEYWORD COLON STRING AS ID','metadata_item',5,'p_metadata_item','parser.py',72),
|
47
|
-
('metadata_value -> STRING','metadata_value',1,'p_metadata_value','parser.py',
|
48
|
-
('metadata_value -> ID','metadata_value',1,'p_metadata_value','parser.py',
|
49
|
-
('tags -> tag COMMA tags','tags',3,'p_tags','parser.py',
|
50
|
-
('tags -> tag','tags',1,'p_tags','parser.py',
|
51
|
-
('tag -> STRING','tag',1,'p_tag','parser.py',
|
52
|
-
('tag -> ID','tag',1,'p_tag','parser.py',
|
53
|
-
('statements -> statement statements','statements',2,'p_statements','parser.py',
|
54
|
-
('statements -> statement','statements',1,'p_statements','parser.py',
|
55
|
-
('statement -> assignment','statement',1,'p_statement','parser.py',
|
56
|
-
('statement -> keyword_call','statement',1,'p_statement','parser.py',
|
57
|
-
('statement -> remote_keyword_call','statement',1,'p_statement','parser.py',
|
58
|
-
('statement -> loop','statement',1,'p_statement','parser.py',
|
59
|
-
('statement -> custom_keyword','statement',1,'p_statement','parser.py',
|
60
|
-
('statement -> return_statement','statement',1,'p_statement','parser.py',
|
61
|
-
('statement -> if_statement','statement',1,'p_statement','parser.py',
|
62
|
-
('assignment -> ID EQUALS expression','assignment',3,'p_assignment','parser.py',
|
63
|
-
('assignment -> ID EQUALS keyword_call','assignment',3,'p_assignment','parser.py',
|
64
|
-
('assignment -> ID EQUALS remote_keyword_call','assignment',3,'p_assignment','parser.py',
|
65
|
-
('expression -> expr_atom','expression',1,'p_expression','parser.py',
|
66
|
-
('expression -> comparison_expr','expression',1,'p_expression','parser.py',
|
67
|
-
('expression -> arithmetic_expr','expression',1,'p_expression','parser.py',
|
68
|
-
('expr_atom -> NUMBER','expr_atom',1,'p_expr_atom','parser.py',
|
69
|
-
('expr_atom -> STRING','expr_atom',1,'p_expr_atom','parser.py',
|
70
|
-
('expr_atom -> PLACEHOLDER','expr_atom',1,'p_expr_atom','parser.py',
|
71
|
-
('expr_atom -> ID','expr_atom',1,'p_expr_atom','parser.py',
|
72
|
-
('expr_atom -> boolean_expr','expr_atom',1,'p_expr_atom','parser.py',
|
73
|
-
('expr_atom -> list_expr','expr_atom',1,'p_expr_atom','parser.py',
|
74
|
-
('expr_atom -> LPAREN expression RPAREN','expr_atom',3,'p_expr_atom','parser.py',
|
75
|
-
('boolean_expr -> TRUE','boolean_expr',1,'p_boolean_expr','parser.py',
|
76
|
-
('boolean_expr -> FALSE','boolean_expr',1,'p_boolean_expr','parser.py',
|
77
|
-
('list_expr -> LBRACKET list_items RBRACKET','list_expr',3,'p_list_expr','parser.py',
|
78
|
-
('list_expr -> LBRACKET RBRACKET','list_expr',2,'p_list_expr','parser.py',
|
79
|
-
('list_items -> list_item','list_items',1,'p_list_items','parser.py',
|
80
|
-
('list_items -> list_item COMMA list_items','list_items',3,'p_list_items','parser.py',
|
81
|
-
('list_item -> expression','list_item',1,'p_list_item','parser.py',
|
82
|
-
('loop -> FOR ID IN RANGE LPAREN expression COMMA expression RPAREN DO statements END','loop',12,'p_loop','parser.py',
|
83
|
-
('keyword_call -> LBRACKET ID RBRACKET COMMA parameter_list','keyword_call',5,'p_keyword_call','parser.py',
|
84
|
-
('keyword_call -> LBRACKET ID RBRACKET','keyword_call',3,'p_keyword_call','parser.py',
|
85
|
-
('parameter_list -> parameter_items','parameter_list',1,'p_parameter_list','parser.py',
|
86
|
-
('parameter_items -> parameter_item COMMA parameter_items','parameter_items',3,'p_parameter_items','parser.py',
|
87
|
-
('parameter_items -> parameter_item','parameter_items',1,'p_parameter_items','parser.py',
|
88
|
-
('parameter_item -> ID COLON expression','parameter_item',3,'p_parameter_item','parser.py',
|
89
|
-
('teardown ->
|
90
|
-
('data_source -> STRING USING ID','data_source',3,'p_data_source','parser.py',
|
91
|
-
('custom_keyword ->
|
92
|
-
('param_definitions -> param_def_list','param_definitions',1,'p_param_definitions','parser.py',
|
93
|
-
('param_definitions -> <empty>','param_definitions',0,'p_param_definitions','parser.py',
|
94
|
-
('param_def_list -> param_def COMMA param_def_list','param_def_list',3,'p_param_def_list','parser.py',
|
95
|
-
('param_def_list -> param_def','param_def_list',1,'p_param_def_list','parser.py',
|
96
|
-
('param_def -> ID EQUALS STRING','param_def',3,'p_param_def','parser.py',
|
97
|
-
('param_def -> ID EQUALS NUMBER','param_def',3,'p_param_def','parser.py',
|
98
|
-
('param_def -> ID','param_def',1,'p_param_def','parser.py',
|
99
|
-
('return_statement -> RETURN expression','return_statement',2,'p_return_statement','parser.py',
|
100
|
-
('if_statement -> IF expression DO statements END','if_statement',5,'p_if_statement','parser.py',
|
101
|
-
('if_statement -> IF expression DO statements ELSE statements END','if_statement',7,'p_if_statement','parser.py',
|
102
|
-
('comparison_expr -> expr_atom GT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',
|
103
|
-
('comparison_expr -> expr_atom LT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',
|
104
|
-
('comparison_expr -> expr_atom GE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',
|
105
|
-
('comparison_expr -> expr_atom LE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',
|
106
|
-
('comparison_expr -> expr_atom EQ expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',
|
107
|
-
('comparison_expr -> expr_atom NE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',
|
108
|
-
('arithmetic_expr -> expression PLUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',
|
109
|
-
('arithmetic_expr -> expression MINUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',
|
110
|
-
('arithmetic_expr -> expression TIMES expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',
|
111
|
-
('arithmetic_expr -> expression DIVIDE expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',
|
112
|
-
('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET COMMA parameter_list','remote_keyword_call',7,'p_remote_keyword_call','parser.py',
|
113
|
-
('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET','remote_keyword_call',5,'p_remote_keyword_call','parser.py',
|
47
|
+
('metadata_value -> STRING','metadata_value',1,'p_metadata_value','parser.py',91),
|
48
|
+
('metadata_value -> ID','metadata_value',1,'p_metadata_value','parser.py',92),
|
49
|
+
('tags -> tag COMMA tags','tags',3,'p_tags','parser.py',97),
|
50
|
+
('tags -> tag','tags',1,'p_tags','parser.py',98),
|
51
|
+
('tag -> STRING','tag',1,'p_tag','parser.py',106),
|
52
|
+
('tag -> ID','tag',1,'p_tag','parser.py',107),
|
53
|
+
('statements -> statement statements','statements',2,'p_statements','parser.py',112),
|
54
|
+
('statements -> statement','statements',1,'p_statements','parser.py',113),
|
55
|
+
('statement -> assignment','statement',1,'p_statement','parser.py',121),
|
56
|
+
('statement -> keyword_call','statement',1,'p_statement','parser.py',122),
|
57
|
+
('statement -> remote_keyword_call','statement',1,'p_statement','parser.py',123),
|
58
|
+
('statement -> loop','statement',1,'p_statement','parser.py',124),
|
59
|
+
('statement -> custom_keyword','statement',1,'p_statement','parser.py',125),
|
60
|
+
('statement -> return_statement','statement',1,'p_statement','parser.py',126),
|
61
|
+
('statement -> if_statement','statement',1,'p_statement','parser.py',127),
|
62
|
+
('assignment -> ID EQUALS expression','assignment',3,'p_assignment','parser.py',132),
|
63
|
+
('assignment -> ID EQUALS keyword_call','assignment',3,'p_assignment','parser.py',133),
|
64
|
+
('assignment -> ID EQUALS remote_keyword_call','assignment',3,'p_assignment','parser.py',134),
|
65
|
+
('expression -> expr_atom','expression',1,'p_expression','parser.py',144),
|
66
|
+
('expression -> comparison_expr','expression',1,'p_expression','parser.py',145),
|
67
|
+
('expression -> arithmetic_expr','expression',1,'p_expression','parser.py',146),
|
68
|
+
('expr_atom -> NUMBER','expr_atom',1,'p_expr_atom','parser.py',155),
|
69
|
+
('expr_atom -> STRING','expr_atom',1,'p_expr_atom','parser.py',156),
|
70
|
+
('expr_atom -> PLACEHOLDER','expr_atom',1,'p_expr_atom','parser.py',157),
|
71
|
+
('expr_atom -> ID','expr_atom',1,'p_expr_atom','parser.py',158),
|
72
|
+
('expr_atom -> boolean_expr','expr_atom',1,'p_expr_atom','parser.py',159),
|
73
|
+
('expr_atom -> list_expr','expr_atom',1,'p_expr_atom','parser.py',160),
|
74
|
+
('expr_atom -> LPAREN expression RPAREN','expr_atom',3,'p_expr_atom','parser.py',161),
|
75
|
+
('boolean_expr -> TRUE','boolean_expr',1,'p_boolean_expr','parser.py',172),
|
76
|
+
('boolean_expr -> FALSE','boolean_expr',1,'p_boolean_expr','parser.py',173),
|
77
|
+
('list_expr -> LBRACKET list_items RBRACKET','list_expr',3,'p_list_expr','parser.py',178),
|
78
|
+
('list_expr -> LBRACKET RBRACKET','list_expr',2,'p_list_expr','parser.py',179),
|
79
|
+
('list_items -> list_item','list_items',1,'p_list_items','parser.py',187),
|
80
|
+
('list_items -> list_item COMMA list_items','list_items',3,'p_list_items','parser.py',188),
|
81
|
+
('list_item -> expression','list_item',1,'p_list_item','parser.py',196),
|
82
|
+
('loop -> FOR ID IN RANGE LPAREN expression COMMA expression RPAREN DO statements END','loop',12,'p_loop','parser.py',201),
|
83
|
+
('keyword_call -> LBRACKET ID RBRACKET COMMA parameter_list','keyword_call',5,'p_keyword_call','parser.py',206),
|
84
|
+
('keyword_call -> LBRACKET ID RBRACKET','keyword_call',3,'p_keyword_call','parser.py',207),
|
85
|
+
('parameter_list -> parameter_items','parameter_list',1,'p_parameter_list','parser.py',215),
|
86
|
+
('parameter_items -> parameter_item COMMA parameter_items','parameter_items',3,'p_parameter_items','parser.py',220),
|
87
|
+
('parameter_items -> parameter_item','parameter_items',1,'p_parameter_items','parser.py',221),
|
88
|
+
('parameter_item -> ID COLON expression','parameter_item',3,'p_parameter_item','parser.py',229),
|
89
|
+
('teardown -> TEARDOWN DO statements END','teardown',4,'p_teardown','parser.py',234),
|
90
|
+
('data_source -> STRING USING ID','data_source',3,'p_data_source','parser.py',239),
|
91
|
+
('custom_keyword -> FUNCTION ID LPAREN param_definitions RPAREN DO statements END','custom_keyword',8,'p_custom_keyword','parser.py',244),
|
92
|
+
('param_definitions -> param_def_list','param_definitions',1,'p_param_definitions','parser.py',249),
|
93
|
+
('param_definitions -> <empty>','param_definitions',0,'p_param_definitions','parser.py',250),
|
94
|
+
('param_def_list -> param_def COMMA param_def_list','param_def_list',3,'p_param_def_list','parser.py',258),
|
95
|
+
('param_def_list -> param_def','param_def_list',1,'p_param_def_list','parser.py',259),
|
96
|
+
('param_def -> ID EQUALS STRING','param_def',3,'p_param_def','parser.py',267),
|
97
|
+
('param_def -> ID EQUALS NUMBER','param_def',3,'p_param_def','parser.py',268),
|
98
|
+
('param_def -> ID','param_def',1,'p_param_def','parser.py',269),
|
99
|
+
('return_statement -> RETURN expression','return_statement',2,'p_return_statement','parser.py',277),
|
100
|
+
('if_statement -> IF expression DO statements END','if_statement',5,'p_if_statement','parser.py',282),
|
101
|
+
('if_statement -> IF expression DO statements ELSE statements END','if_statement',7,'p_if_statement','parser.py',283),
|
102
|
+
('comparison_expr -> expr_atom GT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',291),
|
103
|
+
('comparison_expr -> expr_atom LT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',292),
|
104
|
+
('comparison_expr -> expr_atom GE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',293),
|
105
|
+
('comparison_expr -> expr_atom LE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',294),
|
106
|
+
('comparison_expr -> expr_atom EQ expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',295),
|
107
|
+
('comparison_expr -> expr_atom NE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',296),
|
108
|
+
('arithmetic_expr -> expression PLUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',319),
|
109
|
+
('arithmetic_expr -> expression MINUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',320),
|
110
|
+
('arithmetic_expr -> expression TIMES expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',321),
|
111
|
+
('arithmetic_expr -> expression DIVIDE expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',322),
|
112
|
+
('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET COMMA parameter_list','remote_keyword_call',7,'p_remote_keyword_call','parser.py',353),
|
113
|
+
('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET','remote_keyword_call',5,'p_remote_keyword_call','parser.py',354),
|
114
114
|
]
|
@@ -114,15 +114,8 @@ def scan_local_keywords() -> None:
|
|
114
114
|
"""
|
115
115
|
扫描本地keywords目录中的关键字
|
116
116
|
|
117
|
-
|
118
|
-
2. 再查找并导入用户项目根目录下的keywords目录中的Python模块
|
117
|
+
再查找并导入用户项目根目录下的keywords目录中的Python模块
|
119
118
|
"""
|
120
|
-
# 1. 尝试导入内置的keywords包
|
121
|
-
try:
|
122
|
-
import keywords
|
123
|
-
except ImportError:
|
124
|
-
print("提示: 未找到内置关键字包")
|
125
|
-
|
126
119
|
# 2. 查找并导入用户项目中的keywords目录
|
127
120
|
try:
|
128
121
|
# 获取当前工作目录,通常是用户项目的根目录
|
pytest_dsl/core/yaml_loader.py
CHANGED
@@ -10,7 +10,7 @@ from pytest_dsl.core.yaml_vars import yaml_vars
|
|
10
10
|
|
11
11
|
def add_yaml_options(parser):
|
12
12
|
"""添加YAML变量相关的命令行参数选项
|
13
|
-
|
13
|
+
|
14
14
|
Args:
|
15
15
|
parser: pytest命令行参数解析器
|
16
16
|
"""
|
@@ -29,34 +29,111 @@ def add_yaml_options(parser):
|
|
29
29
|
)
|
30
30
|
|
31
31
|
|
32
|
-
def
|
33
|
-
"""
|
34
|
-
|
35
|
-
从命令行参数指定的文件和目录加载YAML变量。
|
36
|
-
|
32
|
+
def load_yaml_variables_from_args(yaml_files=None, yaml_vars_dir=None, project_root=None):
|
33
|
+
"""从参数加载YAML变量文件(通用函数)
|
34
|
+
|
37
35
|
Args:
|
38
|
-
|
36
|
+
yaml_files: YAML文件列表
|
37
|
+
yaml_vars_dir: YAML变量目录路径
|
38
|
+
project_root: 项目根目录(用于默认config目录)
|
39
39
|
"""
|
40
40
|
# 加载单个YAML文件
|
41
|
-
yaml_files = config.getoption('--yaml-vars')
|
42
41
|
if yaml_files:
|
43
42
|
yaml_vars.load_yaml_files(yaml_files)
|
44
43
|
print(f"已加载YAML变量文件: {', '.join(yaml_files)}")
|
45
44
|
|
46
45
|
# 加载目录中的YAML文件
|
47
|
-
yaml_vars_dir
|
48
|
-
|
49
|
-
|
50
|
-
# 通过pytest的rootdir获取使用者的项目根目录
|
51
|
-
project_root = config.rootdir
|
52
|
-
yaml_vars_dir = str(project_root / 'config')
|
46
|
+
if yaml_vars_dir is None and project_root:
|
47
|
+
# 默认使用项目根目录下的config目录
|
48
|
+
yaml_vars_dir = str(Path(project_root) / 'config')
|
53
49
|
print(f"使用默认YAML变量目录: {yaml_vars_dir}")
|
54
|
-
|
55
|
-
if Path(yaml_vars_dir).exists():
|
50
|
+
|
51
|
+
if yaml_vars_dir and Path(yaml_vars_dir).exists():
|
56
52
|
yaml_vars.load_from_directory(yaml_vars_dir)
|
57
53
|
print(f"已加载YAML变量目录: {yaml_vars_dir}")
|
58
54
|
loaded_files = yaml_vars.get_loaded_files()
|
59
55
|
if loaded_files:
|
60
|
-
|
61
|
-
|
62
|
-
|
56
|
+
# 过滤出当前目录的文件
|
57
|
+
if yaml_vars_dir:
|
58
|
+
dir_files = [f for f in loaded_files if Path(f).parent == Path(yaml_vars_dir)]
|
59
|
+
if dir_files:
|
60
|
+
print(f"目录中加载的文件: {', '.join(dir_files)}")
|
61
|
+
else:
|
62
|
+
print(f"加载的文件: {', '.join(loaded_files)}")
|
63
|
+
elif yaml_vars_dir:
|
64
|
+
print(f"YAML变量目录不存在: {yaml_vars_dir}")
|
65
|
+
|
66
|
+
# 加载完YAML变量后,自动连接远程服务器
|
67
|
+
load_remote_servers_from_yaml()
|
68
|
+
|
69
|
+
|
70
|
+
def load_yaml_variables(config):
|
71
|
+
"""加载YAML变量文件(pytest插件接口)
|
72
|
+
|
73
|
+
从pytest配置对象中获取命令行参数并加载YAML变量。
|
74
|
+
|
75
|
+
Args:
|
76
|
+
config: pytest配置对象
|
77
|
+
"""
|
78
|
+
# 获取命令行参数
|
79
|
+
yaml_files = config.getoption('--yaml-vars')
|
80
|
+
yaml_vars_dir = config.getoption('--yaml-vars-dir')
|
81
|
+
project_root = config.rootdir
|
82
|
+
|
83
|
+
# 调用通用加载函数
|
84
|
+
load_yaml_variables_from_args(
|
85
|
+
yaml_files=yaml_files,
|
86
|
+
yaml_vars_dir=yaml_vars_dir,
|
87
|
+
project_root=project_root
|
88
|
+
)
|
89
|
+
|
90
|
+
|
91
|
+
def load_remote_servers_from_yaml():
|
92
|
+
"""从YAML配置中自动加载远程服务器
|
93
|
+
|
94
|
+
检查YAML变量中是否包含remote_servers配置,如果有则自动连接这些服务器。
|
95
|
+
"""
|
96
|
+
try:
|
97
|
+
# 获取远程服务器配置
|
98
|
+
remote_servers_config = yaml_vars.get_variable('remote_servers')
|
99
|
+
if not remote_servers_config:
|
100
|
+
|
101
|
+
return
|
102
|
+
|
103
|
+
print(f"发现 {len(remote_servers_config)} 个远程服务器配置")
|
104
|
+
|
105
|
+
# 导入远程关键字管理器
|
106
|
+
from pytest_dsl.remote.keyword_client import remote_keyword_manager
|
107
|
+
|
108
|
+
# 遍历配置并连接服务器
|
109
|
+
for server_name, server_config in remote_servers_config.items():
|
110
|
+
try:
|
111
|
+
url = server_config.get('url')
|
112
|
+
alias = server_config.get('alias', server_name)
|
113
|
+
api_key = server_config.get('api_key')
|
114
|
+
sync_config = server_config.get('sync_config')
|
115
|
+
|
116
|
+
if not url:
|
117
|
+
print(f"跳过服务器 {server_name}: 缺少URL配置")
|
118
|
+
continue
|
119
|
+
|
120
|
+
print(f"正在连接远程服务器: {server_name} ({url}) 别名: {alias}")
|
121
|
+
|
122
|
+
# 注册远程服务器
|
123
|
+
success = remote_keyword_manager.register_remote_server(
|
124
|
+
url=url,
|
125
|
+
alias=alias,
|
126
|
+
api_key=api_key,
|
127
|
+
sync_config=sync_config
|
128
|
+
)
|
129
|
+
|
130
|
+
if success:
|
131
|
+
print(f"成功连接到远程服务器: {server_name} ({url})")
|
132
|
+
else:
|
133
|
+
print(f"连接远程服务器失败: {server_name} ({url})")
|
134
|
+
|
135
|
+
except Exception as e:
|
136
|
+
print(f"连接远程服务器 {server_name} 时发生错误: {str(e)}")
|
137
|
+
|
138
|
+
except Exception as e:
|
139
|
+
print(f"加载远程服务器配置时发生错误: {str(e)}")
|