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.
Files changed (36) hide show
  1. pytest_dsl/cli.py +28 -33
  2. pytest_dsl/core/auto_decorator.py +72 -53
  3. pytest_dsl/core/auto_directory.py +8 -5
  4. pytest_dsl/core/dsl_executor.py +56 -11
  5. pytest_dsl/core/http_request.py +272 -221
  6. pytest_dsl/core/lexer.py +3 -13
  7. pytest_dsl/core/parser.py +2 -2
  8. pytest_dsl/core/parsetab.py +69 -69
  9. pytest_dsl/core/plugin_discovery.py +1 -8
  10. pytest_dsl/core/yaml_loader.py +96 -19
  11. pytest_dsl/examples/assert/assertion_example.auto +1 -1
  12. pytest_dsl/examples/assert/boolean_test.auto +2 -2
  13. pytest_dsl/examples/assert/expression_test.auto +1 -1
  14. pytest_dsl/examples/custom/test_advanced_keywords.auto +2 -2
  15. pytest_dsl/examples/custom/test_custom_keywords.auto +2 -2
  16. pytest_dsl/examples/custom/test_default_values.auto +2 -2
  17. pytest_dsl/examples/http/file_reference_test.auto +1 -1
  18. pytest_dsl/examples/http/http_advanced.auto +1 -1
  19. pytest_dsl/examples/http/http_example.auto +1 -1
  20. pytest_dsl/examples/http/http_length_test.auto +1 -1
  21. pytest_dsl/examples/http/http_retry_assertions.auto +1 -1
  22. pytest_dsl/examples/http/http_retry_assertions_enhanced.auto +2 -2
  23. pytest_dsl/examples/http/http_with_yaml.auto +1 -1
  24. pytest_dsl/examples/quickstart/api_basics.auto +1 -1
  25. pytest_dsl/examples/quickstart/assertions.auto +1 -1
  26. pytest_dsl/examples/quickstart/loops.auto +2 -2
  27. pytest_dsl/keywords/assertion_keywords.py +76 -62
  28. pytest_dsl/keywords/global_keywords.py +43 -4
  29. pytest_dsl/keywords/http_keywords.py +58 -56
  30. {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.6.0.dist-info}/METADATA +138 -9
  31. pytest_dsl-0.6.0.dist-info/RECORD +68 -0
  32. {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.6.0.dist-info}/WHEEL +1 -1
  33. pytest_dsl-0.5.0.dist-info/RECORD +0 -68
  34. {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.6.0.dist-info}/entry_points.txt +0 -0
  35. {pytest_dsl-0.5.0.dist-info → pytest_dsl-0.6.0.dist-info}/licenses/LICENSE +0 -0
  36. {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 : TEARDOWN_KEYWORD DO statements END'''
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 : KEYWORD_KEYWORD ID LPAREN param_definitions RPAREN DO statements END'''
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
 
@@ -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 KEYWORD_KEYWORD LBRACKET LE LPAREN LT MINUS NAME_KEYWORD NE NUMBER PIPE PLACEHOLDER PLUS RANGE RBRACKET REMOTE_KEYWORD RETURN RPAREN STRING TAGS_KEYWORD TEARDOWN_KEYWORD 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_KEYWORD DO statements ENDdata_source : STRING USING IDcustom_keyword : KEYWORD_KEYWORD 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'
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',89),
48
- ('metadata_value -> ID','metadata_value',1,'p_metadata_value','parser.py',90),
49
- ('tags -> tag COMMA tags','tags',3,'p_tags','parser.py',95),
50
- ('tags -> tag','tags',1,'p_tags','parser.py',96),
51
- ('tag -> STRING','tag',1,'p_tag','parser.py',104),
52
- ('tag -> ID','tag',1,'p_tag','parser.py',105),
53
- ('statements -> statement statements','statements',2,'p_statements','parser.py',110),
54
- ('statements -> statement','statements',1,'p_statements','parser.py',111),
55
- ('statement -> assignment','statement',1,'p_statement','parser.py',119),
56
- ('statement -> keyword_call','statement',1,'p_statement','parser.py',120),
57
- ('statement -> remote_keyword_call','statement',1,'p_statement','parser.py',121),
58
- ('statement -> loop','statement',1,'p_statement','parser.py',122),
59
- ('statement -> custom_keyword','statement',1,'p_statement','parser.py',123),
60
- ('statement -> return_statement','statement',1,'p_statement','parser.py',124),
61
- ('statement -> if_statement','statement',1,'p_statement','parser.py',125),
62
- ('assignment -> ID EQUALS expression','assignment',3,'p_assignment','parser.py',130),
63
- ('assignment -> ID EQUALS keyword_call','assignment',3,'p_assignment','parser.py',131),
64
- ('assignment -> ID EQUALS remote_keyword_call','assignment',3,'p_assignment','parser.py',132),
65
- ('expression -> expr_atom','expression',1,'p_expression','parser.py',142),
66
- ('expression -> comparison_expr','expression',1,'p_expression','parser.py',143),
67
- ('expression -> arithmetic_expr','expression',1,'p_expression','parser.py',144),
68
- ('expr_atom -> NUMBER','expr_atom',1,'p_expr_atom','parser.py',153),
69
- ('expr_atom -> STRING','expr_atom',1,'p_expr_atom','parser.py',154),
70
- ('expr_atom -> PLACEHOLDER','expr_atom',1,'p_expr_atom','parser.py',155),
71
- ('expr_atom -> ID','expr_atom',1,'p_expr_atom','parser.py',156),
72
- ('expr_atom -> boolean_expr','expr_atom',1,'p_expr_atom','parser.py',157),
73
- ('expr_atom -> list_expr','expr_atom',1,'p_expr_atom','parser.py',158),
74
- ('expr_atom -> LPAREN expression RPAREN','expr_atom',3,'p_expr_atom','parser.py',159),
75
- ('boolean_expr -> TRUE','boolean_expr',1,'p_boolean_expr','parser.py',170),
76
- ('boolean_expr -> FALSE','boolean_expr',1,'p_boolean_expr','parser.py',171),
77
- ('list_expr -> LBRACKET list_items RBRACKET','list_expr',3,'p_list_expr','parser.py',176),
78
- ('list_expr -> LBRACKET RBRACKET','list_expr',2,'p_list_expr','parser.py',177),
79
- ('list_items -> list_item','list_items',1,'p_list_items','parser.py',185),
80
- ('list_items -> list_item COMMA list_items','list_items',3,'p_list_items','parser.py',186),
81
- ('list_item -> expression','list_item',1,'p_list_item','parser.py',194),
82
- ('loop -> FOR ID IN RANGE LPAREN expression COMMA expression RPAREN DO statements END','loop',12,'p_loop','parser.py',199),
83
- ('keyword_call -> LBRACKET ID RBRACKET COMMA parameter_list','keyword_call',5,'p_keyword_call','parser.py',204),
84
- ('keyword_call -> LBRACKET ID RBRACKET','keyword_call',3,'p_keyword_call','parser.py',205),
85
- ('parameter_list -> parameter_items','parameter_list',1,'p_parameter_list','parser.py',213),
86
- ('parameter_items -> parameter_item COMMA parameter_items','parameter_items',3,'p_parameter_items','parser.py',218),
87
- ('parameter_items -> parameter_item','parameter_items',1,'p_parameter_items','parser.py',219),
88
- ('parameter_item -> ID COLON expression','parameter_item',3,'p_parameter_item','parser.py',227),
89
- ('teardown -> TEARDOWN_KEYWORD DO statements END','teardown',4,'p_teardown','parser.py',232),
90
- ('data_source -> STRING USING ID','data_source',3,'p_data_source','parser.py',237),
91
- ('custom_keyword -> KEYWORD_KEYWORD ID LPAREN param_definitions RPAREN DO statements END','custom_keyword',8,'p_custom_keyword','parser.py',242),
92
- ('param_definitions -> param_def_list','param_definitions',1,'p_param_definitions','parser.py',247),
93
- ('param_definitions -> <empty>','param_definitions',0,'p_param_definitions','parser.py',248),
94
- ('param_def_list -> param_def COMMA param_def_list','param_def_list',3,'p_param_def_list','parser.py',256),
95
- ('param_def_list -> param_def','param_def_list',1,'p_param_def_list','parser.py',257),
96
- ('param_def -> ID EQUALS STRING','param_def',3,'p_param_def','parser.py',265),
97
- ('param_def -> ID EQUALS NUMBER','param_def',3,'p_param_def','parser.py',266),
98
- ('param_def -> ID','param_def',1,'p_param_def','parser.py',267),
99
- ('return_statement -> RETURN expression','return_statement',2,'p_return_statement','parser.py',275),
100
- ('if_statement -> IF expression DO statements END','if_statement',5,'p_if_statement','parser.py',280),
101
- ('if_statement -> IF expression DO statements ELSE statements END','if_statement',7,'p_if_statement','parser.py',281),
102
- ('comparison_expr -> expr_atom GT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',289),
103
- ('comparison_expr -> expr_atom LT expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',290),
104
- ('comparison_expr -> expr_atom GE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',291),
105
- ('comparison_expr -> expr_atom LE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',292),
106
- ('comparison_expr -> expr_atom EQ expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',293),
107
- ('comparison_expr -> expr_atom NE expr_atom','comparison_expr',3,'p_comparison_expr','parser.py',294),
108
- ('arithmetic_expr -> expression PLUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',317),
109
- ('arithmetic_expr -> expression MINUS expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',318),
110
- ('arithmetic_expr -> expression TIMES expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',319),
111
- ('arithmetic_expr -> expression DIVIDE expression','arithmetic_expr',3,'p_arithmetic_expr','parser.py',320),
112
- ('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET COMMA parameter_list','remote_keyword_call',7,'p_remote_keyword_call','parser.py',351),
113
- ('remote_keyword_call -> ID PIPE LBRACKET ID RBRACKET','remote_keyword_call',5,'p_remote_keyword_call','parser.py',352),
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
- 1. 先尝试导入内置的keywords包(向后兼容)
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
  # 获取当前工作目录,通常是用户项目的根目录
@@ -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 load_yaml_variables(config):
33
- """加载YAML变量文件
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
- config: pytest配置对象
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 = config.getoption('--yaml-vars-dir')
48
- if yaml_vars_dir is None:
49
- # 默认使用使用者项目根目录下的config目录
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
- print(f"目录中加载的文件: {', '.join(loaded_files)}")
61
- else:
62
- print(f"YAML变量目录不存在: {yaml_vars_dir}")
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)}")
@@ -39,6 +39,6 @@ username = [JSON提取],JSON数据:${json_data},JSONPath:'$.user.name',变量名
39
39
  bool_value = True
40
40
  [断言],条件:'${bool_value} == True',消息:'布尔值断言失败'
41
41
 
42
- @teardown do
42
+ teardown do
43
43
  [打印],内容:'所有断言测试通过!'
44
44
  end
@@ -29,6 +29,6 @@ bool_true = True
29
29
  bool_false = False
30
30
  [断言],条件:'${bool_true} and not ${bool_false}',消息:'变量布尔值表达式断言失败'
31
31
 
32
- @teardown do
32
+ teardown do
33
33
  [打印],内容:'所有布尔值断言测试通过!'
34
- end
34
+ end
@@ -44,6 +44,6 @@ text = "Hello, World!"
44
44
  [数据比较],实际值:'10 + 10',预期值:20,消息:'数据比较表达式失败'
45
45
  [数据比较],实际值:'len("Hello")',预期值:5,消息:'函数表达式比较失败'
46
46
 
47
- @teardown do
47
+ teardown do
48
48
  [打印],内容:'所有表达式断言测试通过!'
49
49
  end
@@ -26,6 +26,6 @@
26
26
  # 不进行复杂断言,只确认返回结果不为空
27
27
  [断言],条件:'${报告结果} != ""',消息:'报告结果不应为空'
28
28
 
29
- @teardown do
29
+ teardown do
30
30
  [打印],内容:'高级自定义关键字测试完成'
31
- end
31
+ end
@@ -32,6 +32,6 @@
32
32
 
33
33
  [断言],条件:'${文本长度} == 10',消息:'长度不匹配'
34
34
 
35
- @teardown do
35
+ teardown do
36
36
  [打印],内容:'自定义关键字测试完成'
37
- end
37
+ end
@@ -29,6 +29,6 @@
29
29
  报告结果1 = [生成报告消息],标题:"仅标题测试"
30
30
  [打印],内容:'使用默认内容的报告:\n${报告结果1}'
31
31
 
32
- @teardown do
32
+ teardown do
33
33
  [打印],内容:'默认值测试完成'
34
- end
34
+ end
@@ -106,6 +106,6 @@ current_date = "2024-04-08T12:00:00Z"
106
106
 
107
107
  [打印],内容:'请求JSON已合并: ${request_json}'
108
108
 
109
- @teardown do
109
+ teardown do
110
110
  [打印],内容:'外部文件引用测试完成!'
111
111
  end
@@ -86,6 +86,6 @@
86
86
 
87
87
  [打印],内容:'段落文本: ${p_text}'
88
88
 
89
- @teardown do
89
+ teardown do
90
90
  [打印],内容:'HTTP高级测试完成!'
91
91
  end
@@ -142,6 +142,6 @@
142
142
  [打印],内容:'获取的随机数: ${random_number}'
143
143
  [打印],内容:'断言重试测试完成!'
144
144
 
145
- @teardown do
145
+ teardown do
146
146
  [打印],内容:'HTTP请求测试完成!'
147
147
  end
@@ -50,6 +50,6 @@
50
50
  [打印],内容:'正文: ${body}'
51
51
  [打印],内容:'正文长度: ${body_length}'
52
52
 
53
- @teardown do
53
+ teardown do
54
54
  [打印],内容:'HTTP请求长度捕获测试完成!'
55
55
  end
@@ -86,6 +86,6 @@
86
86
  all: true # 重试所有断言
87
87
  ''',步骤名称:"全局断言重试示例"
88
88
 
89
- @teardown do
89
+ teardown do
90
90
  [打印],内容:'断言重试测试完成!'
91
91
  end
@@ -89,6 +89,6 @@
89
89
  all: true
90
90
  ''',步骤名称:"纯配置式重试示例"
91
91
 
92
- @teardown do
92
+ teardown do
93
93
  [打印],内容:'增强断言重试测试完成!'
94
- end
94
+ end
@@ -53,6 +53,6 @@
53
53
 
54
54
  [打印],内容:'请求参数: ${args}'
55
55
 
56
- @teardown do
56
+ teardown do
57
57
  [打印],内容:'YAML变量和模板测试完成!'
58
58
  end
@@ -50,6 +50,6 @@
50
50
  - ["jsonpath", "$.title", "eq", "测试标题"]
51
51
  ''',步骤名称:'创建新文章'
52
52
 
53
- @teardown do
53
+ teardown do
54
54
  [打印],内容:'API测试完成!'
55
55
  end
@@ -26,6 +26,6 @@ result = 53
26
26
  [打印],内容:'结果: ${result}'
27
27
  [断言],条件:'${result} == 53',消息:'结果不正确'
28
28
 
29
- @teardown do
29
+ teardown do
30
30
  [打印],内容:'断言测试完成!'
31
31
  end
@@ -19,6 +19,6 @@ end
19
19
 
20
20
  [打印],内容:'循环结束'
21
21
 
22
- @teardown do
22
+ teardown do
23
23
  [打印],内容:'变量和循环测试完成!'
24
- end
24
+ end