kaqing 2.0.95__py3-none-any.whl → 2.0.115__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.

Potentially problematic release.


This version of kaqing might be problematic. Click here for more details.

Files changed (89) hide show
  1. adam/batch.py +1 -15
  2. adam/commands/alter_tables.py +3 -14
  3. adam/commands/app.py +3 -3
  4. adam/commands/app_ping.py +2 -2
  5. adam/commands/audit/audit.py +26 -11
  6. adam/commands/audit/audit_repair_tables.py +20 -37
  7. adam/commands/audit/audit_run.py +58 -0
  8. adam/commands/audit/show_last10.py +51 -0
  9. adam/commands/audit/show_slow10.py +50 -0
  10. adam/commands/audit/show_top10.py +49 -0
  11. adam/commands/audit/utils_show_top10.py +59 -0
  12. adam/commands/bash/bash.py +124 -0
  13. adam/commands/bash/bash_completer.py +93 -0
  14. adam/commands/cat.py +55 -0
  15. adam/commands/cd.py +23 -11
  16. adam/commands/check.py +6 -0
  17. adam/commands/code.py +60 -0
  18. adam/commands/command.py +9 -4
  19. adam/commands/commands_utils.py +1 -2
  20. adam/commands/cql/cql_completions.py +7 -3
  21. adam/commands/cql/cql_utils.py +100 -8
  22. adam/commands/cql/cqlsh.py +10 -5
  23. adam/commands/deploy/deploy.py +7 -1
  24. adam/commands/deploy/deploy_pg_agent.py +2 -2
  25. adam/commands/deploy/undeploy.py +7 -1
  26. adam/commands/deploy/undeploy_pg_agent.py +2 -2
  27. adam/commands/devices.py +29 -0
  28. adam/commands/export/__init__.py +0 -0
  29. adam/commands/export/export.py +60 -0
  30. adam/commands/export/export_on_x.py +76 -0
  31. adam/commands/export/export_rmdbs.py +65 -0
  32. adam/commands/export/export_select.py +68 -0
  33. adam/commands/export/export_use.py +56 -0
  34. adam/commands/export/utils_export.py +253 -0
  35. adam/commands/help.py +9 -5
  36. adam/commands/issues.py +6 -0
  37. adam/commands/kubectl.py +41 -0
  38. adam/commands/login.py +6 -3
  39. adam/commands/logs.py +1 -0
  40. adam/commands/ls.py +39 -27
  41. adam/commands/medusa/medusa_show_backupjobs.py +1 -0
  42. adam/commands/nodetool.py +5 -2
  43. adam/commands/postgres/postgres.py +4 -4
  44. adam/commands/postgres/{postgres_session.py → postgres_context.py} +26 -27
  45. adam/commands/postgres/postgres_utils.py +5 -5
  46. adam/commands/postgres/psql_completions.py +1 -1
  47. adam/commands/preview_table.py +18 -32
  48. adam/commands/pwd.py +4 -3
  49. adam/commands/reaper/reaper.py +3 -0
  50. adam/commands/repair/repair.py +3 -3
  51. adam/commands/report.py +6 -0
  52. adam/commands/show/show.py +3 -1
  53. adam/commands/show/show_app_actions.py +3 -0
  54. adam/commands/show/show_app_queues.py +3 -2
  55. adam/commands/show/show_login.py +3 -0
  56. adam/config.py +1 -1
  57. adam/embedded_params.py +1 -1
  58. adam/pod_exec_result.py +7 -1
  59. adam/repl.py +121 -97
  60. adam/repl_commands.py +29 -17
  61. adam/repl_state.py +224 -44
  62. adam/sql/sql_completer.py +86 -62
  63. adam/sql/sql_state_machine.py +563 -0
  64. adam/sql/term_completer.py +3 -0
  65. adam/utils_athena.py +108 -74
  66. adam/utils_audits.py +104 -0
  67. adam/utils_export.py +42 -0
  68. adam/utils_k8s/app_clusters.py +33 -0
  69. adam/utils_k8s/app_pods.py +31 -0
  70. adam/utils_k8s/cassandra_clusters.py +4 -5
  71. adam/utils_k8s/cassandra_nodes.py +4 -4
  72. adam/utils_k8s/pods.py +42 -6
  73. adam/utils_k8s/statefulsets.py +2 -2
  74. adam/version.py +1 -1
  75. {kaqing-2.0.95.dist-info → kaqing-2.0.115.dist-info}/METADATA +1 -1
  76. {kaqing-2.0.95.dist-info → kaqing-2.0.115.dist-info}/RECORD +80 -67
  77. adam/commands/bash.py +0 -92
  78. adam/commands/cql/cql_table_completer.py +0 -8
  79. adam/commands/describe/describe.py +0 -46
  80. adam/commands/describe/describe_keyspace.py +0 -60
  81. adam/commands/describe/describe_keyspaces.py +0 -50
  82. adam/commands/describe/describe_table.py +0 -60
  83. adam/commands/describe/describe_tables.py +0 -50
  84. adam/commands/postgres/psql_table_completer.py +0 -11
  85. adam/sql/state_machine.py +0 -460
  86. /adam/commands/{describe → bash}/__init__.py +0 -0
  87. {kaqing-2.0.95.dist-info → kaqing-2.0.115.dist-info}/WHEEL +0 -0
  88. {kaqing-2.0.95.dist-info → kaqing-2.0.115.dist-info}/entry_points.txt +0 -0
  89. {kaqing-2.0.95.dist-info → kaqing-2.0.115.dist-info}/top_level.txt +0 -0
adam/sql/state_machine.py DELETED
@@ -1,460 +0,0 @@
1
- # <select_statement> ::= SELECT <select_list>
2
- # FROM <table_expression>
3
- # [WHERE <search_condition>]
4
- # [<group_by_clause>]
5
- # [<having_clause>]
6
- # [<order_by_clause>]
7
- # [<limit_clause>]
8
-
9
- # <search_condition> ::= <boolean_term>
10
- # | <search_condition> OR <boolean_term>
11
-
12
- # <boolean_term> ::= <boolean_factor>
13
- # | <boolean_term> AND <boolean_factor>
14
-
15
- # <boolean_factor> ::= [NOT] <predicate>
16
- # | ([NOT] <search_condition>)
17
-
18
- # <predicate> ::= <comparison_predicate>
19
- # | <between_predicate>
20
- # | <in_predicate>
21
- # | <like_predicate>
22
- # | <null_predicate>
23
- # | <exists_predicate>
24
- # | <quantified_predicate>
25
- # | <unique_predicate>
26
- # | <match_predicate>
27
- # | <overlaps_predicate>
28
- # | <distinct_predicate>
29
- # | <member_predicate>
30
- # | <submultiset_predicate>
31
- # | <set_predicate>
32
-
33
- # <comparison_predicate> ::= <row_value_expression> <comparison_operator> <row_value_expression>
34
- # <comparison_operator> ::= '=' | '<>' | '<' | '<=' | '>' | '>='
35
-
36
- # <row_value_expression> ::= <value_expression>
37
- # | (<value_expression> [ { <comma> <value_expression> }... ])
38
-
39
- # <value_expression> ::= <numeric_value_expression>
40
- # | <string_value_expression>
41
- # | <datetime_value_expression>
42
- # | <interval_value_expression>
43
- # | <boolean_value_expression>
44
- # | <user_defined_type_value_expression>
45
- # | <reference_value_expression>
46
- # | <collection_value_expression>
47
- # | <row_value_constructor>
48
- # | <case_expression>
49
- # | <cast_expression>
50
- # | <subquery>
51
- # | NULL
52
- # | DEFAULT
53
- # | <identifier>
54
- # | <literal>
55
-
56
- # <insert_statement> ::= INSERT INTO <table_name> [ ( <column_list> ) ]
57
- # VALUES ( <value_list> )
58
- # | INSERT INTO <table_name> [ ( <column_list> ) ]
59
- # <query_expression>
60
-
61
- # <table_name> ::= <identifier>
62
-
63
- # <column_list> ::= <column_name> [ , <column_list> ]
64
-
65
- # <column_name> ::= <identifier>
66
-
67
- # <value_list> ::= <expression> [ , <value_list> ]
68
-
69
- # <query_expression> ::= SELECT <select_list> FROM <table_reference_list> [ WHERE <search_condition> ] [ GROUP BY <grouping_column_list> ] [ HAVING <search_condition> ] [ ORDER BY <sort_specification_list> ]
70
-
71
- # <update_statement> ::= UPDATE <table_name>
72
- # SET <set_clause_list>
73
- # [WHERE <search_condition>]
74
-
75
- # <set_clause_list> ::= <set_clause> { , <set_clause> }
76
-
77
- # <set_clause> ::= <column_name> = <update_value>
78
-
79
- # <update_value> ::= <expression> | NULL | DEFAULT
80
-
81
- # <search_condition> ::= <boolean_expression>
82
-
83
- # <delete_statement> ::= DELETE FROM <table_name> [ WHERE <search_condition> ]
84
-
85
- # <table_name> ::= <identifier>
86
-
87
- # <search_condition> ::= <boolean_expression>
88
-
89
- # <boolean_expression> ::= <predicate>
90
- # | <boolean_expression> AND <predicate>
91
- # | <boolean_expression> OR <predicate>
92
- # | NOT <predicate>
93
- # | ( <boolean_expression> )
94
-
95
- # <predicate> ::= <expression> <comparison_operator> <expression>
96
- # | <expression> IS NULL
97
- # | <expression> IS NOT NULL
98
- # | <expression> LIKE <pattern> [ ESCAPE <escape_character> ]
99
- # | <expression> IN ( <expression_list> )
100
- # | EXISTS ( <select_statement> )
101
- # | ... (other predicates)
102
-
103
- # <comparison_operator> ::= = | <> | != | > | < | >= | <=
104
-
105
- # <expression> ::= <literal>
106
- # | <column_name>
107
- # | <function_call>
108
- # | ( <expression> )
109
- # | <expression> <arithmetic_operator> <expression>
110
- # | ... (other expressions)
111
-
112
- # <literal> ::= <numeric_literal> | <string_literal> | <boolean_literal> | <date_literal> | ...
113
-
114
- # <column_name> ::= <identifier>
115
-
116
- # <identifier> ::= <letter> { <letter> | <digit> | _ }...
117
-
118
- # <pattern> ::= <string_literal>
119
-
120
- # <escape_character> ::= <string_literal> (single character)
121
-
122
- # <expression_list> ::= <expression> { , <expression> }...
123
-
124
- from sqlparse.sql import Token
125
- from sqlparse import tokens as T
126
-
127
- __all__ = [
128
- "StateMachine",
129
- ]
130
-
131
- SPEC = [
132
- ' > select > select',
133
- 'select_ > name|* > select_a ^ *',
134
- 'select_a > , > select_a_comma_',
135
- 'select_a_comma_ > name|* > select_a ^ *',
136
- 'select_a_ > from > select_from ^ from',
137
- 'select_from_ > name|audit > select_from_x ^ (select,tables',
138
- '- > ( > select_from_lp_',
139
- '- < ) > select_from_sq',
140
- 'select_from_lp_ > select > select',
141
- 'select_from_x > , > select_from_x_comma_ ^ (select,tables',
142
- 'select_from_sq_ > as > select_from_x_as ^ as',
143
- 'select_from_x_comma_ > name > select_from_x ^ tables',
144
- 'select_from_x_ ^ as,where,inner join,left outer join,right outer join,full outer join,group by,order by,limit',
145
- 'select_from_x_as_x_ > , > select_from_x_comma_ ^ where,inner join,left outer join,right outer join,full outer join,group by,order by,limit',
146
- '- > as > select_from_x_as',
147
- '- > where > select_where',
148
- '- > order > select_order',
149
- '- > order by > select_order_by',
150
- '- > limit > select_where_sc_limit',
151
- '- > group > select_group',
152
- '- > group by > select_group_by',
153
- '- > inner > select_from_x_inner',
154
- '- > inner join > select_join',
155
- '- > left > select_from_x_left',
156
- '- > left join > select_join',
157
- '- > left outer join > select_join',
158
- '- > right > select_from_x_right',
159
- '- > right join > select_join',
160
- '- > right outer join > select_join',
161
- '- > full > select_from_x_full',
162
- '- > full outer join > select_join',
163
- 'select_from_x_as_ > name > select_from_x_as_x ^ x,y,z',
164
- 'select_from_x_as_x > , > select_from_x_as_x_comma_',
165
- 'select_from_x_as_x_comma_ > name > select_from_x ^ tables',
166
- 'select_where_ > name > select_where_a ^ columns',
167
- 'select_where_a > name > select_where_a ^ columns,=,<,<=,>,>=,<>',
168
- '- > comparison > select_where_a_op',
169
- 'select_where_a_ > comparison > select_where_a_op ^ =,<,<=,>,>=,<>,like,not,in',
170
- '- > not > select_where_a_not',
171
- '- > in > select_where_a_in',
172
- 'select_where_a_not_ > comparison > select_where_a_not_op ^ like,in',
173
- '- > in > select_where_a_in',
174
- 'select_where_a_in > ( > select_where_a_in_lp_ ^ (',
175
- '- < ) > select_where_sc',
176
- 'select_where_a_in_lp_ > name|single|num > select_where_a_in_lp_a ^ single,select',
177
- '- > select > select_where_a_in_lp_select',
178
- 'select_where_a_in_lp_select_ > name > select_a ^ id',
179
- 'select_where_a_in_lp_a > , > select_where_a_in_lp_a_comma_ ^ comma,)',
180
- 'select_where_a_in_lp_a_comma_ > name|single|num > select_where_a_in_lp_a ^ single',
181
- 'select_where_a_not_op > name|single|num > select_where_sc ^ single',
182
- 'select_where_a_op > name|single|num > select_where_sc ^ single',
183
- 'select_where_sc_ > and|or > select_where ^ and,or,order by,group by,limit',
184
- '- > group > select_group',
185
- '- > group by > select_group_by',
186
- '- > order > select_order',
187
- '- > order by > select_order_by',
188
- '- > limit > select_where_sc_limit',
189
- 'select_group_ > by > select_group_by ^ by',
190
- 'select_group_by_ > name > select_group_by_a ^ columns',
191
- 'select_group_by_a > name > select_group_by_a ^ columns',
192
- '- > , > select_group_by_a_comma_ ^ columns',
193
- 'select_group_by_a_comma_ > name > select_group_by_a ^ columns',
194
- 'select_group_by_a_ > limit > select_where_sc_limit ^ limit,order by',
195
- '- > order > select_order',
196
- '- > order by > select_order_by',
197
- 'select_order_ > by > select_order_by ^ by',
198
- 'select_order_by_ > name > select_order_by_a ^ columns',
199
- 'select_order_by_a > name > select_order_by_a ^ columns',
200
- '- > , > select_order_by_a_comma_',
201
- 'select_order_by_a_comma_ > name > select_order_by_a ^ columns',
202
- 'select_order_by_a_ > desc|asc > select_order_by_a_desc ^ desc,asc,limit',
203
- '- > limit > select_where_sc_limit',
204
- 'select_order_by_a_desc > , > select_order_by_a_comma_',
205
- 'select_order_by_a_desc_ > limit > select_where_sc_limit ^ limit',
206
- 'select_where_sc_limit_ > num > select_where_sc_limit_num ^ 1',
207
- 'select_where_sc_limit_num_rp__ > as > select_from_x_as ^ as',
208
- 'select_where_x_inner_ > join > select_join',
209
- 'select_join_ > name > select_x_join_y ^ tables',
210
- 'select_from_x_left_ > join > select_join ^ outer join',
211
- '- > outer > select_from_x_left_outer',
212
- 'select_from_x_left_outer_ > join > select_join ^ join',
213
- 'select_from_x_right_ > join > select_join ^ outer join',
214
- '- > outer > select_from_x_right_outer',
215
- 'select_from_x_right_outer_ > join > select_join ^ join',
216
- 'select_from_x_full_ > join > select_join ^ outer join',
217
- '- > outer > select_from_x_full_outer',
218
- 'select_from_x_full_outer_ > join > select_join ^ join',
219
- 'select_x_join_y > name > select_x_join_y ^ tables',
220
- 'select_x_join_y_ > as > select_x_join_y_as ^ as,on',
221
- '- > on > select_x_join_y_on ^ as,on',
222
- 'select_x_join_y_as_ > name > select_x_join_y_as_y ^ x,y,z',
223
- 'select_x_join_y_as_y_ > on > select_x_join_y_on ^ on',
224
- 'select_x_join_y_on_ > name > select_x_join_y_on_a ^ columns',
225
- 'select_x_join_y_on_a > name > select_x_join_y_on_a ^ columns,=',
226
- '- > comparison > select_x_join_y_on_a_op',
227
- 'select_x_join_y_on_a_ > comparison > select_x_join_y_on_a_op ^ =',
228
- 'select_x_join_y_on_a_op > name > select_x_join_y_on_a_op_b ^ columns',
229
- 'select_x_join_y_on_a_op_b > name > select_x_join_y_on_a_op_b ^ columns',
230
- '- > _ > select_from_x_as_x_',
231
-
232
-
233
- ' > insert > insert',
234
- 'insert_ > into > insert_into ^ into',
235
- 'insert_into_ > name > insert_into_x ^ tables',
236
- 'insert_into_x > name > insert_into_x ^ tables',
237
- '- > ( > insert_into_x_lp_',
238
- 'insert_into_x_ > ( > insert_into_x_lp_ ^ (,values(',
239
- '- > values > insert_values',
240
- 'insert_into_x_lp_ > name > insert_into_x_lp_a ^ id',
241
- 'insert_into_x_lp_a > , > insert_into_x_lp_a_comma_',
242
- '- > ) > insert_into_x_lp_a_rp_',
243
- 'insert_into_x_lp_a_comma_ > name > insert_into_x_lp_a ^ id',
244
- 'insert_into_x_lp_a_rp__ > values > insert_values ^ values(,select',
245
- '- > select > select',
246
- 'insert_values > ( > insert_values_lp_',
247
- 'insert_values_lp_ > name|single|num > insert_values_lp_v ^ single',
248
- 'insert_values_lp_v > , > insert_values_lp_v_comma_',
249
- 'insert_values_lp_v_comma_ > name|single|num > insert_values_lp_v',
250
-
251
-
252
- ' > update > update',
253
- 'update_ > name > update_x ^ tables',
254
- 'update_x > name > update_x ^ tables',
255
- 'update_x_ > set > update_set ^ set',
256
- 'update_set_ > name > update_set_a ^ id',
257
- 'update_set_a > comparison > update_set_a_op',
258
- 'update_set_a_op > name|single|num > update_set_sc ^ single',
259
- 'update_set_sc > , > update_set_sc_comma_',
260
- 'update_set_sc_comma_ > name > update_set_a ^ id',
261
- 'update_set_sc_ > , > update_set_sc_comma_ ^ where',
262
- '- > where > update_where',
263
- 'update_where_ > name > update_where_a ^ id',
264
- 'update_where_a > comparison > update_where_a_op',
265
- 'update_where_a_ > comparison > update_where_a_op ^ =,<,<=,>,>=,<>,like,not,in',
266
- '- > not > update_where_a_not',
267
- '- > in > update_where_a_in',
268
- 'update_where_a_not_ > comparison > update_where_a_not_op ^ like,in',
269
- '- > in > update_where_a_in',
270
- 'update_where_a_in > ( > update_where_a_in_lp_ ^ (',
271
- '- < ) > update_where_sc',
272
- 'update_where_a_in_lp_ > name|single|num > update_where_a_in_lp_a ^ single,select',
273
- '- > select > update_where_a_in_lp_select',
274
- 'update_where_a_in_lp_select_ > name > select_a ^ id',
275
- 'update_where_a_in_lp_a > , > update_where_a_in_lp_a_comma_ ^ comma,)',
276
- 'update_where_a_in_lp_a_comma_ > name|single|num > update_where_a_in_lp_a ^ single',
277
- 'update_where_a_not_op > name|single|num > update_where_sc ^ single',
278
- 'update_where_a_op > name|single|num > update_where_sc ^ single',
279
- 'update_where_sc_ > and|or > update_where ^ and,or',
280
-
281
-
282
- ' > delete > delete',
283
- 'delete_ > from > delete_from ^ from',
284
- 'delete_from_ > name > delete_from_x ^ tables',
285
- 'delete_from_x > name > delete_from_x ^ tables',
286
- 'delete_from_x_ > where > update_where ^ where',
287
- ]
288
-
289
- KEYWORDS = [
290
- 'select', 'from', 'as', 'not', 'in', 'where',
291
- 'and', 'or', 'group', 'by', 'group by', 'order', 'order by', 'limit', 'asc', 'desc',
292
- 'inner join', 'on', 'left', 'right', 'full', 'outer', 'left outer join',
293
- 'left join', 'right outer join', 'right join', 'full join', 'full outer join',
294
- 'insert', 'into', 'values',
295
- 'update', 'where', 'set',
296
- 'delete',
297
- 'audit'
298
- ]
299
-
300
- class StateTo:
301
- def __init__(self, to_s: str, comeback_token: str = None, comeback_state: str = None):
302
- self.to_s = to_s
303
- self.comeback_token = comeback_token
304
- self.comeback_state = comeback_state
305
-
306
- def __str__(self):
307
- return f'{self.to_s} comeback[{self.comeback_token} {self.comeback_state}]'
308
-
309
- class StateMachine:
310
- def __init__(self, indent=0, lp_level = 0, debug = False):
311
- self.states: dict[str, StateTo] = {}
312
- self.suggestions: dict[str, str] = {}
313
-
314
- self.indent = indent
315
- self.lp_level = lp_level
316
- self.comebacks: dict[int, str] = {}
317
- self.debug = debug
318
-
319
- from_ss_to_add = []
320
- from_ss = ['']
321
- words: str = None
322
- for l in SPEC:
323
- t_and_w = l.split('^')
324
- if len(t_and_w) > 1:
325
- words = t_and_w[1]
326
- else:
327
- words = None
328
-
329
- tks = t_and_w[0].strip(' ').split('>')
330
- if not l.startswith('-'):
331
- if words:
332
- self.suggestions[tks[0].strip(' ')] = words
333
-
334
- if len(tks) == 1:
335
- from_ss_to_add.append(tks[0].strip(' '))
336
- continue
337
-
338
- from_ss = []
339
- from_ss.extend(from_ss_to_add)
340
- from_ss_to_add = []
341
- from_ss.append(tks[0].strip(' '))
342
-
343
- self.add_transitions(from_ss, tks)
344
-
345
- def add_transitions(self, from_ss: list[str], tks: list[str]):
346
- token = tks[1].strip(' ')
347
- if len(tks) > 2:
348
- to_s = tks[2].strip(' ')
349
- for from_s in from_ss:
350
- self.add_whitespace_transition(from_s, to_s)
351
- self.add_transition(from_s, token, to_s)
352
- elif '<' in tks[0]:
353
- from_and_token = tks[0].split('<')
354
- if len(from_and_token) > 1:
355
- for from_s in from_ss:
356
- self.add_comeback_transition(from_s, from_and_token[1], tks[1].strip(' '))
357
-
358
- def add_whitespace_transition(self, from_s: str, to_s: str):
359
- # add whitespace transition if a state with trailing whitespace is found from from states, for example, select > _ > select_
360
- if from_s.endswith('_') and not from_s.endswith('_comma_') and not from_s.endswith('_lp_') and not from_s.endswith('_rp_'):
361
- if self.debug:
362
- print(f'{from_s[:-1]} > _ = {to_s}')
363
- self.states[f'{from_s[:-1]} > _'] = StateTo(from_s)
364
-
365
- def add_transition(self, from_s: str, token: str, to_s: str):
366
- tokens = [token]
367
- if '|' in token:
368
- tokens = token.split('|')
369
-
370
- for t in tokens:
371
- if self.debug:
372
- print(f'{from_s} > {t} = {to_s}')
373
- self.states[f'{from_s} > {t}'] = StateTo(to_s)
374
-
375
- def add_comeback_transition(self, from_s: str, token: str, to_s: str):
376
- key = f'{from_s} > ('
377
- orig = self.states[key]
378
- if not orig:
379
- raise Exception(f'from state not found for {key}')
380
-
381
- orig.comeback_token = token
382
- orig.comeback_state = to_s
383
- if self.debug:
384
- print(f'{from_s} > ) = {to_s}')
385
- self.states[key] = orig
386
-
387
- def traverse_tokens(self, tokens: list[Token], state: StateTo = StateTo('')):
388
- def handle_opening_parenthesis():
389
- if f'{state.to_s} > {it}' in self.states:
390
- state_test = self.states[f'{state.to_s} > {it}']
391
- if state_test.comeback_token:
392
- self.comebacks[self.lp_level] = state_test.comeback_state
393
-
394
- def handle_closing_parenthesis():
395
- if self.lp_level in self.comebacks:
396
- try:
397
- return StateTo(self.comebacks[self.lp_level])
398
- finally:
399
- del self.comebacks[self.lp_level]
400
-
401
- return None
402
-
403
- for token in tokens:
404
- if self.debug:
405
- if token.ttype == T.Whitespace:
406
- print('_ ', end='')
407
- elif token.ttype in [T.DML, T.Wildcard, T.Punctuation]:
408
- print(f'{token.value} ', end='')
409
- elif token.ttype:
410
- tks = str(token.ttype).split('.')
411
- typ = tks[len(tks) - 1]
412
- if ' ' in token.value:
413
- print(f'"{token.value}:{typ}" ', end='')
414
- else:
415
- print(f'{token.value}:{typ} ', end='')
416
- # print(" " * self.indent + f"Token: {token.value}, Type: {token.ttype}@{token.ttype.__class__}")
417
-
418
- if token.is_group:
419
- state = self.traverse_tokens(token.tokens, state)
420
- else:
421
- comeback_state = None
422
-
423
- it = ''
424
- if (t := token.value.lower()) in KEYWORDS:
425
- it = t
426
- elif token.ttype == T.Text.Whitespace:
427
- it = '_'
428
- elif token.ttype == T.Name:
429
- it = 'name'
430
- elif token.ttype == T.Literal.String.Single:
431
- it = 'single'
432
- elif token.ttype in [T.Literal.Number.Integer, T.Literal.Number.Float]:
433
- it = 'num'
434
- elif token.ttype == T.Wildcard:
435
- it = '*'
436
- elif token.ttype == T.Punctuation:
437
- it = token.value
438
-
439
- if it == '(':
440
- handle_opening_parenthesis()
441
- self.lp_level += 1
442
- elif it == ')':
443
- self.lp_level -= 1
444
- comeback_state = handle_closing_parenthesis()
445
-
446
- elif token.ttype == T.Operator.Comparison:
447
- it = 'comparison'
448
-
449
- try:
450
- # print(f'\n{state.to_s} > {it} > ', end='')
451
- if comeback_state:
452
- state = comeback_state
453
- else:
454
- state = self.states[f'{state.to_s} > {it}']
455
- # print(state)
456
- except:
457
- pass
458
- # print('error')
459
-
460
- return state
File without changes