kaqing 2.0.110__py3-none-any.whl → 2.0.184__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 (204) hide show
  1. adam/__init__.py +0 -2
  2. adam/app_session.py +9 -12
  3. adam/apps.py +18 -4
  4. adam/batch.py +5 -5
  5. adam/checks/check_utils.py +16 -46
  6. adam/checks/cpu.py +7 -1
  7. adam/checks/cpu_metrics.py +52 -0
  8. adam/checks/disk.py +2 -3
  9. adam/columns/columns.py +3 -1
  10. adam/columns/cpu.py +3 -1
  11. adam/columns/cpu_metrics.py +22 -0
  12. adam/columns/memory.py +3 -4
  13. adam/commands/__init__.py +24 -0
  14. adam/commands/alter_tables.py +33 -48
  15. adam/commands/app/__init__.py +0 -0
  16. adam/commands/app/app.py +38 -0
  17. adam/commands/{app_ping.py → app/app_ping.py} +7 -13
  18. adam/commands/app/show_app_actions.py +49 -0
  19. adam/commands/{show → app}/show_app_id.py +8 -11
  20. adam/commands/{show → app}/show_app_queues.py +7 -14
  21. adam/commands/app/utils_app.py +98 -0
  22. adam/commands/audit/audit.py +27 -31
  23. adam/commands/audit/audit_repair_tables.py +14 -18
  24. adam/commands/audit/audit_run.py +16 -23
  25. adam/commands/audit/show_last10.py +4 -17
  26. adam/commands/audit/show_slow10.py +4 -17
  27. adam/commands/audit/show_top10.py +4 -16
  28. adam/commands/audit/utils_show_top10.py +15 -3
  29. adam/commands/bash/__init__.py +5 -0
  30. adam/commands/bash/bash.py +36 -0
  31. adam/commands/bash/bash_completer.py +93 -0
  32. adam/commands/bash/utils_bash.py +16 -0
  33. adam/commands/cat.py +36 -0
  34. adam/commands/cd.py +11 -95
  35. adam/commands/check.py +15 -24
  36. adam/commands/cli_commands.py +2 -3
  37. adam/commands/clipboard_copy.py +86 -0
  38. adam/commands/code.py +57 -0
  39. adam/commands/command.py +198 -40
  40. adam/commands/commands_utils.py +12 -27
  41. adam/commands/cql/cql_completions.py +27 -10
  42. adam/commands/cql/cqlsh.py +12 -30
  43. adam/commands/cql/utils_cql.py +297 -0
  44. adam/commands/deploy/code_start.py +7 -10
  45. adam/commands/deploy/code_stop.py +4 -21
  46. adam/commands/deploy/code_utils.py +3 -3
  47. adam/commands/deploy/deploy.py +4 -27
  48. adam/commands/deploy/deploy_frontend.py +14 -17
  49. adam/commands/deploy/deploy_pg_agent.py +3 -6
  50. adam/commands/deploy/deploy_pod.py +65 -73
  51. adam/commands/deploy/deploy_utils.py +14 -24
  52. adam/commands/deploy/undeploy.py +4 -27
  53. adam/commands/deploy/undeploy_frontend.py +4 -7
  54. adam/commands/deploy/undeploy_pg_agent.py +6 -8
  55. adam/commands/deploy/undeploy_pod.py +11 -12
  56. adam/commands/devices/__init__.py +0 -0
  57. adam/commands/devices/device.py +123 -0
  58. adam/commands/devices/device_app.py +163 -0
  59. adam/commands/devices/device_auit_log.py +49 -0
  60. adam/commands/devices/device_cass.py +179 -0
  61. adam/commands/devices/device_export.py +84 -0
  62. adam/commands/devices/device_postgres.py +150 -0
  63. adam/commands/devices/devices.py +25 -0
  64. adam/commands/download_file.py +47 -0
  65. adam/commands/exit.py +1 -4
  66. adam/commands/export/__init__.py +0 -0
  67. adam/commands/export/clean_up_all_export_sessions.py +37 -0
  68. adam/commands/export/clean_up_export_sessions.py +39 -0
  69. adam/commands/export/download_export_session.py +39 -0
  70. adam/commands/export/drop_export_database.py +39 -0
  71. adam/commands/export/drop_export_databases.py +37 -0
  72. adam/commands/export/export.py +53 -0
  73. adam/commands/export/export_databases.py +245 -0
  74. adam/commands/export/export_select.py +59 -0
  75. adam/commands/export/export_select_x.py +54 -0
  76. adam/commands/export/export_sessions.py +209 -0
  77. adam/commands/export/export_use.py +49 -0
  78. adam/commands/export/exporter.py +332 -0
  79. adam/commands/export/import_files.py +44 -0
  80. adam/commands/export/import_session.py +44 -0
  81. adam/commands/export/importer.py +81 -0
  82. adam/commands/export/importer_athena.py +177 -0
  83. adam/commands/export/importer_sqlite.py +67 -0
  84. adam/commands/export/show_column_counts.py +45 -0
  85. adam/commands/export/show_export_databases.py +38 -0
  86. adam/commands/export/show_export_session.py +39 -0
  87. adam/commands/export/show_export_sessions.py +37 -0
  88. adam/commands/export/utils_export.py +343 -0
  89. adam/commands/find_files.py +51 -0
  90. adam/commands/find_processes.py +76 -0
  91. adam/commands/head.py +36 -0
  92. adam/commands/help.py +5 -3
  93. adam/commands/intermediate_command.py +49 -0
  94. adam/commands/issues.py +11 -43
  95. adam/commands/kubectl.py +38 -0
  96. adam/commands/login.py +22 -24
  97. adam/commands/logs.py +3 -6
  98. adam/commands/ls.py +11 -116
  99. adam/commands/medusa/medusa.py +4 -22
  100. adam/commands/medusa/medusa_backup.py +20 -27
  101. adam/commands/medusa/medusa_restore.py +38 -37
  102. adam/commands/medusa/medusa_show_backupjobs.py +16 -18
  103. adam/commands/medusa/medusa_show_restorejobs.py +13 -18
  104. adam/commands/nodetool.py +11 -17
  105. adam/commands/param_get.py +11 -14
  106. adam/commands/param_set.py +8 -12
  107. adam/commands/postgres/postgres.py +45 -46
  108. adam/commands/postgres/postgres_databases.py +269 -0
  109. adam/commands/postgres/postgres_ls.py +4 -8
  110. adam/commands/postgres/postgres_preview.py +5 -9
  111. adam/commands/postgres/psql_completions.py +4 -3
  112. adam/commands/postgres/utils_postgres.py +70 -0
  113. adam/commands/preview_table.py +8 -44
  114. adam/commands/pwd.py +14 -46
  115. adam/commands/reaper/reaper.py +4 -27
  116. adam/commands/reaper/reaper_forward.py +49 -56
  117. adam/commands/reaper/reaper_forward_session.py +6 -0
  118. adam/commands/reaper/reaper_forward_stop.py +10 -16
  119. adam/commands/reaper/reaper_restart.py +7 -14
  120. adam/commands/reaper/reaper_run_abort.py +8 -33
  121. adam/commands/reaper/reaper_runs.py +43 -58
  122. adam/commands/reaper/reaper_runs_abort.py +29 -49
  123. adam/commands/reaper/reaper_schedule_activate.py +9 -32
  124. adam/commands/reaper/reaper_schedule_start.py +9 -32
  125. adam/commands/reaper/reaper_schedule_stop.py +9 -32
  126. adam/commands/reaper/reaper_schedules.py +4 -14
  127. adam/commands/reaper/reaper_status.py +8 -16
  128. adam/commands/reaper/utils_reaper.py +194 -0
  129. adam/commands/repair/repair.py +4 -22
  130. adam/commands/repair/repair_log.py +5 -11
  131. adam/commands/repair/repair_run.py +27 -34
  132. adam/commands/repair/repair_scan.py +32 -38
  133. adam/commands/repair/repair_stop.py +5 -11
  134. adam/commands/report.py +27 -29
  135. adam/commands/restart.py +25 -26
  136. adam/commands/rollout.py +19 -24
  137. adam/commands/shell.py +12 -4
  138. adam/commands/show/show.py +10 -25
  139. adam/commands/show/show_adam.py +3 -3
  140. adam/commands/show/show_cassandra_repairs.py +35 -0
  141. adam/commands/show/show_cassandra_status.py +33 -51
  142. adam/commands/show/show_cassandra_version.py +5 -18
  143. adam/commands/show/show_commands.py +20 -25
  144. adam/commands/show/show_host.py +1 -1
  145. adam/commands/show/show_login.py +20 -27
  146. adam/commands/show/show_params.py +2 -5
  147. adam/commands/show/show_processes.py +15 -19
  148. adam/commands/show/show_storage.py +10 -20
  149. adam/commands/watch.py +26 -29
  150. adam/config.py +5 -14
  151. adam/embedded_params.py +1 -1
  152. adam/log.py +4 -4
  153. adam/pod_exec_result.py +6 -3
  154. adam/repl.py +69 -115
  155. adam/repl_commands.py +52 -19
  156. adam/repl_state.py +161 -40
  157. adam/sql/sql_completer.py +52 -27
  158. adam/sql/sql_state_machine.py +131 -19
  159. adam/sso/authn_ad.py +6 -8
  160. adam/sso/authn_okta.py +4 -6
  161. adam/sso/cred_cache.py +3 -5
  162. adam/sso/idp.py +9 -12
  163. adam/utils.py +511 -9
  164. adam/utils_athena.py +145 -0
  165. adam/utils_audits.py +12 -103
  166. adam/utils_issues.py +32 -0
  167. adam/utils_k8s/app_clusters.py +28 -0
  168. adam/utils_k8s/app_pods.py +36 -0
  169. adam/utils_k8s/cassandra_clusters.py +30 -19
  170. adam/utils_k8s/cassandra_nodes.py +3 -3
  171. adam/utils_k8s/custom_resources.py +16 -17
  172. adam/utils_k8s/ingresses.py +2 -2
  173. adam/utils_k8s/jobs.py +7 -11
  174. adam/utils_k8s/k8s.py +87 -0
  175. adam/utils_k8s/kube_context.py +2 -2
  176. adam/utils_k8s/pods.py +89 -78
  177. adam/utils_k8s/secrets.py +4 -4
  178. adam/utils_k8s/service_accounts.py +5 -4
  179. adam/utils_k8s/services.py +2 -2
  180. adam/utils_k8s/statefulsets.py +1 -12
  181. adam/utils_local.py +4 -0
  182. adam/utils_net.py +4 -4
  183. adam/utils_repl/__init__.py +0 -0
  184. adam/utils_repl/automata_completer.py +48 -0
  185. adam/utils_repl/repl_completer.py +46 -0
  186. adam/utils_repl/state_machine.py +173 -0
  187. adam/utils_sqlite.py +137 -0
  188. adam/version.py +1 -1
  189. {kaqing-2.0.110.dist-info → kaqing-2.0.184.dist-info}/METADATA +1 -1
  190. kaqing-2.0.184.dist-info/RECORD +244 -0
  191. adam/commands/app.py +0 -67
  192. adam/commands/bash.py +0 -150
  193. adam/commands/cp.py +0 -95
  194. adam/commands/cql/cql_utils.py +0 -112
  195. adam/commands/devices.py +0 -118
  196. adam/commands/postgres/postgres_context.py +0 -239
  197. adam/commands/postgres/postgres_utils.py +0 -31
  198. adam/commands/reaper/reaper_session.py +0 -159
  199. adam/commands/show/show_app_actions.py +0 -56
  200. adam/commands/show/show_repairs.py +0 -47
  201. kaqing-2.0.110.dist-info/RECORD +0 -187
  202. {kaqing-2.0.110.dist-info → kaqing-2.0.184.dist-info}/WHEEL +0 -0
  203. {kaqing-2.0.110.dist-info → kaqing-2.0.184.dist-info}/entry_points.txt +0 -0
  204. {kaqing-2.0.110.dist-info → kaqing-2.0.184.dist-info}/top_level.txt +0 -0
@@ -2,6 +2,7 @@ from typing import Callable
2
2
  from sqlparse.sql import Token
3
3
  from sqlparse import tokens as TOKEN
4
4
 
5
+ from adam.utils import log_exc
5
6
  from adam.utils_repl.state_machine import StateMachine, State
6
7
 
7
8
  __all__ = [
@@ -73,10 +74,11 @@ SQL_SPEC = [
73
74
  '- < ) > select_from_sq',
74
75
  'select_from_lp_ > select > select',
75
76
  'select_from_x > , > select_from_x_comma_ ^ (select,tables',
77
+ '- > ; > ',
76
78
  'select_from_sq_ > as > select_from_x_as ^ as',
77
79
  'select_from_x_comma_ > name|audit > select_from_x ^ tables',
78
- 'select_from_x_ ^ as,where,inner join,left outer join,right outer join,full outer join,group by,order by,limit',
79
- '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',
80
+ 'select_from_x_ ^ as,where,inner join,left outer join,right outer join,full outer join,group by,order by,limit,&',
81
+ '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,&',
80
82
  '- > as > select_from_x_as',
81
83
  '- > where > select_where',
82
84
  '- > order > select_order',
@@ -94,8 +96,11 @@ SQL_SPEC = [
94
96
  '- > right outer join > select_join',
95
97
  '- > full > select_from_x_full',
96
98
  '- > full outer join > select_join',
99
+ '- > ; > ',
100
+ '- > & > select_from_x$',
97
101
  'select_from_x_as_ > name > select_from_x_as_x ^ x,y,z',
98
102
  'select_from_x_as_x > , > select_from_x_as_x_comma_',
103
+ '- > ; > ',
99
104
  'select_from_x_as_x_comma_ > name|audit > select_from_x ^ tables',
100
105
  'select_where_ > name > select_where_a ^ columns',
101
106
  'select_where_a > name > select_where_a ^ columns,=,<,<=,>,>=,<>',
@@ -114,28 +119,41 @@ SQL_SPEC = [
114
119
  'select_where_a_in_lp_a_comma_ > name|single|num > select_where_a_in_lp_a ^ single',
115
120
  'select_where_a_not_op > name|single|num > select_where_sc ^ single',
116
121
  'select_where_a_op > name|single|num > select_where_sc ^ single',
117
- 'select_where_sc_ > and|or > select_where ^ and,or,order by,group by,limit',
122
+ 'select_where_sc > ; > ',
123
+ 'select_where_sc_ > and|or > select_where ^ and,or,order by,group by,limit,&',
118
124
  '- > group > select_group',
119
125
  '- > group by > select_group_by',
120
126
  '- > order > select_order',
121
127
  '- > order by > select_order_by',
122
128
  '- > limit > select_where_sc_limit',
129
+ '- > ; > ',
130
+ '- > & > select_from_x$',
123
131
  'select_group_ > by > select_group_by ^ by',
124
132
  'select_group_by_ > name > select_group_by_a ^ columns',
125
133
  'select_group_by_a > , > select_group_by_a_comma_ ^ columns',
134
+ '- > ; > ',
126
135
  'select_group_by_a_comma_ > name > select_group_by_a ^ columns',
127
- 'select_group_by_a_ > limit > select_where_sc_limit ^ limit,order by',
136
+ 'select_group_by_a_ > limit > select_where_sc_limit ^ limit,order by,&',
128
137
  '- > order > select_order',
129
138
  '- > order by > select_order_by',
139
+ '- > ; > ',
140
+ '- > & > select_from_x$',
130
141
  'select_order_ > by > select_order_by ^ by',
131
142
  'select_order_by_ > name > select_order_by_a ^ columns',
132
143
  'select_order_by_a > , > select_order_by_a_comma_',
144
+ '- > ; > ',
133
145
  'select_order_by_a_comma_ > name > select_order_by_a ^ columns',
134
- 'select_order_by_a_ > desc|asc > select_order_by_a_desc ^ desc,asc,limit',
146
+ 'select_order_by_a_ > desc|asc > select_order_by_a_desc ^ desc,asc,limit,&',
135
147
  '- > limit > select_where_sc_limit',
148
+ '- > ; > ',
149
+ '- > & > select_from_x$',
136
150
  'select_order_by_a_desc > , > select_order_by_a_comma_',
137
- 'select_order_by_a_desc_ > limit > select_where_sc_limit ^ limit',
151
+ '- > ; > ',
152
+ 'select_order_by_a_desc_ > limit > select_where_sc_limit ^ limit,&',
153
+ '- > ; > ',
154
+ '- > & > select_from_x$',
138
155
  'select_where_sc_limit_ > num > select_where_sc_limit_num ^ 1',
156
+ 'select_where_sc_limit_num > ; > ',
139
157
  'select_where_sc_limit_num_rp__ > as > select_from_x_as ^ as',
140
158
  'select_where_x_inner_ > join > select_join',
141
159
  'select_join_ > name|audit > select_x_join_y ^ tables',
@@ -158,6 +176,7 @@ SQL_SPEC = [
158
176
  'select_x_join_y_on_a_ > comparison > select_x_join_y_on_a_op ^ =',
159
177
  'select_x_join_y_on_a_op > name > select_x_join_y_on_a_op_b ^ columns',
160
178
  'select_x_join_y_on_a_op_b > _ > select_from_x_as_x_',
179
+ '- > ; > ',
161
180
 
162
181
  # <insert_statement> ::= INSERT INTO <table_name> [ ( <column_list> ) ]
163
182
  # VALUES ( <value_list> )
@@ -188,7 +207,9 @@ SQL_SPEC = [
188
207
  'insert_values > ( > insert_values_lp_',
189
208
  'insert_values_lp_ > name|single|num > insert_values_lp_v ^ single',
190
209
  'insert_values_lp_v > , > insert_values_lp_v_comma_',
210
+ '- > ) > insert_values_lp_v_rp_',
191
211
  'insert_values_lp_v_comma_ > name|single|num > insert_values_lp_v',
212
+ 'insert_values_lp_v_rp__ > & > insert_values_lp_v_rp_$ ^ &',
192
213
 
193
214
  # <update_statement> ::= UPDATE <table_name>
194
215
  # SET <set_clause_list>
@@ -209,8 +230,9 @@ SQL_SPEC = [
209
230
  'update_set_a_op > name|single|num > update_set_sc ^ single',
210
231
  'update_set_sc > , > update_set_sc_comma_',
211
232
  'update_set_sc_comma_ > name > update_set_a ^ id',
212
- 'update_set_sc_ > , > update_set_sc_comma_ ^ where',
233
+ 'update_set_sc_ > , > update_set_sc_comma_ ^ where,&',
213
234
  '- > where > update_where',
235
+ '- > & > update_set_sc$ ^ &',
214
236
  'update_where_ > name > update_where_a ^ id',
215
237
  'update_where_a > comparison > update_where_a_op',
216
238
  'update_where_a_ > comparison > update_where_a_op ^ =,<,<=,>,>=,<>,like,not,in',
@@ -227,7 +249,7 @@ SQL_SPEC = [
227
249
  'update_where_a_in_lp_a_comma_ > name|single|num > update_where_a_in_lp_a ^ single',
228
250
  'update_where_a_not_op > name|single|num > update_where_sc ^ single',
229
251
  'update_where_a_op > name|single|num > update_where_sc ^ single',
230
- 'update_where_sc_ > and|or > update_where ^ and,or',
252
+ 'update_where_sc_ > and|or > update_where ^ and,or,&',
231
253
 
232
254
  # <delete_statement> ::= DELETE FROM <table_name> [ WHERE <search_condition> ]
233
255
 
@@ -322,10 +344,10 @@ SQL_KEYWORDS = [
322
344
  'describe', 'preview'
323
345
  ]
324
346
 
325
- EXPANDABLE_NAMES = {'tables', 'columns', 'partition-columns', 'table-props', 'table-props-values'}
347
+ EXPANDABLE_NAMES = {'keyspaces', 'tables', 'columns', 'partition-columns', 'table-props', 'table-props-values'}
326
348
 
327
349
  CQL_SPEC = SQL_SPEC + [
328
- ' > select > select ^ select,insert,update,delete,alter,describe,preview',
350
+ ' > select > select ^ select,insert,update,delete,alter,describe,preview,consistency,export,import,drop,clean',
329
351
 
330
352
  # ALTER TABLE [ <keyspace_name> . ] <table_name>
331
353
  # ( ALTER <column_name> TYPE <cql_type>
@@ -344,7 +366,7 @@ CQL_SPEC = SQL_SPEC + [
344
366
  'alter_table_with_p_op_v_ > --include-reaper > alter_table_with_p_op_v_$ ^ --include-reaper',
345
367
 
346
368
  ' > describe > describe',
347
- 'describe_ > table > desc_table ^ table,`tables`,keyspace,keyspaces,schema',
369
+ 'describe_ > table > desc_table ^ table,`tables`,keyspace,`keyspaces`,schema',
348
370
  '- > tables > desc_tables',
349
371
  '- > keyspace > desc_keyspace',
350
372
  '- > keyspaces > desc_keyspaces',
@@ -352,17 +374,88 @@ CQL_SPEC = SQL_SPEC + [
352
374
  'desc_table_ > name > desc_table_t ^ tables',
353
375
  'desc_table_t_ > & > desc_table_t_$ ^ &',
354
376
  'desc_tables_ > & > desc_tables_$ ^ &',
355
- 'desc_keyspace_ > name > desc_keyspace_k',
377
+ 'desc_keyspace_ > name > desc_keyspace_k ^ keyspaces',
356
378
  'desc_keyspace_k_ > & > desc_keyspace_k_$ ^ &',
357
379
  'desc_schema_ > & > desc_schema_$ ^ &',
380
+
381
+ ' > export > export',
382
+ 'export_ > name > export_table ^ *,tables',
383
+ '- > * > export_all',
384
+ 'export_all_ > in > export_in ^ in,with',
385
+ '- > with > export_with',
386
+ 'export_table > ( > export_table_lp_ ^ (,comma,with,tables',
387
+ '- > , > export_table_comma_',
388
+ '- > . > export_table ^ tables',
389
+ 'export_table_ > ( > export_table_lp_ ^ as,(,comma,with consistency,to',
390
+ '- > , > export_table_comma_',
391
+ '- > as > export_as',
392
+ '- > with > export_with',
393
+ '- > to > export_table_to',
394
+ 'export_table_comma_ > name > export_table ^ tables',
395
+ 'export_table_lp_ > name > export_table_lp_a ^ columns',
396
+ 'export_table_lp_a > , > export_table_lp_a_comma_',
397
+ '- > ) > export_table_lp_a_comma_rp_',
398
+ 'export_table_lp_a_comma_ > name > export_table_lp_a ^ columns',
399
+ 'export_table_lp_a_comma_rp_ > as > export_as ^ as,with consistency',
400
+ '- > , > export ^ with consistency',
401
+ '- > with > export_with',
402
+ 'export_as_ > name > export_as_f',
403
+ 'export_as_f > , > export_table_comma_',
404
+ 'export_as_f_ > , > export_table_comma_ ^ with consistency,to',
405
+ '- > with > export_with',
406
+ '- > to > export_table_to',
407
+ 'export_in_ > name > export_in_k ^ keyspaces',
408
+ 'export_in_k_ > with > export_with ^ with consistency',
409
+ 'export_with_ > consistency > export_with_consistency ^ consistency',
410
+ 'export_with_consistency_ > quorum|all|serial|one|each_quorum|local_quorum|any|local_one|two|three|local_serial > export_with_quorum ^ quorum,all,serial,one,each_quorum,local_quorum,any,local_one,two,three,local_serial',
411
+ 'export_table_to_ > athena|sqlite|csv > export_table_to$ ^ athena,sqlite,csv',
412
+
413
+ ' > import > import',
414
+ 'import_ > session > import_session ^ session,files',
415
+ '- > files > import_files',
416
+ 'import_session_ > name > import_session_s ^ export-sessions-incomplete',
417
+ 'import_session_s_ > to > import_session_to ^ to',
418
+ 'import_files_ > name > import_files_f',
419
+ 'import_files_f > , > import_files',
420
+ 'import_files_f_ > as > import_files_f_as ^ as',
421
+ 'import_files_f_as_ > name > import_files_f_as_a',
422
+ 'import_files_f_as_a_ > to > import_session_to ^ to',
423
+ 'import_session_to_ > athena|sqlite > import_session_to$ ^ athena,sqlite',
424
+
425
+ ' > consistency > consistency',
426
+ 'consistency_ > quorum|all|serial|one|each_quorum|local_quorum|any|local_one|two|three|local_serial > consistency_quorum ^ quorum,all,serial,one,each_quorum,local_quorum,any,local_one,two,three,local_serial',
427
+ 'consistency_quorum > ; > ',
428
+
429
+ ' > drop > drop',
430
+ 'drop_ > all > drop_all ^ all export databases,export database',
431
+ '- > export > drop_export',
432
+ 'drop_all_ > export > drop_all_export ^ export databases',
433
+ 'drop_all_export_ > databases > drop_all_dbs ^ databases',
434
+ 'drop_export_ > database > drop_export_db ^ database',
435
+ 'drop_export_db_ > name > drop_export_db$ ^ export-dbs',
436
+
437
+ ' > clean > clean',
438
+ 'clean_ > up > clean_up ^ up all export sessions,up export session',
439
+ 'clean_up_ > all > clean_up_all ^ all export sessions,export sessions',
440
+ '- > export > clean_up_export',
441
+ 'clean_up_all_ > export > clean_up_all_export ^ export sessions',
442
+ 'clean_up_all_export_ > sessions > clean_up_all_sessions ^ sessions',
443
+ 'clean_up_export_ > sessions > clean_up_export_sessions ^ sessions',
444
+ 'clean_up_export_sessions_ > name > clean_up_export_sessions$ ^ export-sessions',
358
445
  ]
359
446
 
360
447
  CQL_KEYWORDS = SQL_KEYWORDS + [
361
- 'schema', 'keyspace', 'keyspaces', 'tables'
448
+ 'schema', 'keyspace', 'keyspaces', 'tables', 'export', 'copy', 'consistency',
449
+ 'quorum', 'all', 'serial', 'one', 'each_quorum', 'local_quorum', 'any', 'local_one', 'two', 'three', 'local_serial', 'to',
450
+ 'database', 'databases', 'session', 'sessions', 'clean', 'up', 'athena', 'sqlite', 'csv', 'import', 'files'
362
451
  ]
363
452
 
453
+ CQL_EXPANDABLE_NAMES = EXPANDABLE_NAMES | {
454
+ 'export-dbs', 'export-sessions', 'export-sessions-incomplete'
455
+ }
456
+
364
457
  ATHENA_SPEC = SQL_SPEC + [
365
- ' > select > select ^ select,insert,update,delete,alter,describe,preview',
458
+ ' > select > select ^ select,insert,update,delete,alter,describe,preview,drop',
366
459
 
367
460
  'alter_table_t_ > add > alter_table_add ^ add partition,drop partition',
368
461
  'alter_table_add_ > partition > alter_partition ^ partition',
@@ -378,13 +471,26 @@ ATHENA_SPEC = SQL_SPEC + [
378
471
  'describe_ > name > desc_t ^ tables',
379
472
  'desc_t_ > name > desc_t_',
380
473
 
381
- 'repair'
474
+ 'repair',
475
+
476
+ ' > drop > drop',
477
+ 'drop_ > all > drop_all ^ all export databases,export database',
478
+ '- > export > drop_export',
479
+ 'drop_all_ > export > drop_all_export ^ export databases',
480
+ 'drop_all_export_ > databases > drop_all_dbs ^ databases',
481
+ 'drop_export_ > database > drop_export_db ^ database',
482
+ 'drop_export_db_ > name > drop_export_db$ ^ export-dbs',
382
483
  ]
383
484
 
384
485
  ATHENA_KEYWORDS = SQL_KEYWORDS + [
385
- 'partition'
486
+ 'partition',
487
+ 'database', 'databases', 'session', 'sessions', 'clean', 'up', 'all', 'export'
386
488
  ]
387
489
 
490
+ ATHENA_EXPANDABLE_NAMES = EXPANDABLE_NAMES | {
491
+ 'export-dbs'
492
+ }
493
+
388
494
  class SqlStateMachine(StateMachine[Token]):
389
495
  def __init__(self, indent=0, push_level = 0, debug = False):
390
496
  super().__init__(indent, push_level, debug)
@@ -449,11 +555,13 @@ class SqlStateMachine(StateMachine[Token]):
449
555
  elif it == ')':
450
556
  self.push_level -= 1
451
557
  comeback_state = handle_pop()
558
+ elif it == '.' and 'last_name' in state.context and (ln := state.context['last_name']):
559
+ state.context['last_namespace'] = ln
452
560
 
453
561
  elif token.ttype == TOKEN.Operator.Comparison:
454
562
  it = 'comparison'
455
563
 
456
- try:
564
+ with log_exc(False):
457
565
  # print(f'\n{state.to_s} > {it} > ', end='')
458
566
  if comeback_state:
459
567
  state = comeback_state
@@ -464,8 +572,6 @@ class SqlStateMachine(StateMachine[Token]):
464
572
 
465
573
  if last_name:
466
574
  state.context['last_name'] = last_name
467
- except:
468
- pass
469
575
 
470
576
  return state
471
577
 
@@ -507,6 +613,9 @@ class CqlStateMachine(SqlStateMachine):
507
613
  def keywords(self):
508
614
  return CQL_KEYWORDS
509
615
 
616
+ def expandable_names(self):
617
+ return CQL_EXPANDABLE_NAMES
618
+
510
619
  class AthenaStateMachine(SqlStateMachine):
511
620
  def __init__(self, indent=0, push_level = 0, debug = False):
512
621
  super().__init__(indent, push_level, debug)
@@ -516,3 +625,6 @@ class AthenaStateMachine(SqlStateMachine):
516
625
 
517
626
  def keywords(self):
518
627
  return ATHENA_KEYWORDS
628
+
629
+ def expandable_names(self):
630
+ return ATHENA_EXPANDABLE_NAMES
adam/sso/authn_ad.py CHANGED
@@ -1,6 +1,5 @@
1
1
  import json
2
2
  import re
3
- import traceback
4
3
  import jwt
5
4
  import requests
6
5
  from urllib.parse import urlparse, parse_qs
@@ -8,6 +7,7 @@ from urllib.parse import urlparse, parse_qs
8
7
  from adam.log import Log
9
8
  from adam.sso.authenticator import Authenticator
10
9
  from adam.sso.id_token import IdToken
10
+ from adam.utils import debug, log_exc
11
11
  from .idp_login import IdpLogin
12
12
  from adam.config import Config
13
13
 
@@ -33,7 +33,7 @@ class AdAuthenticator(Authenticator):
33
33
 
34
34
  session = requests.Session()
35
35
  r = session.get(idp_uri)
36
- Config().debug(f'{r.status_code} {idp_uri}')
36
+ debug(f'{r.status_code} {idp_uri}')
37
37
 
38
38
  config = self.validate_and_return_config(r)
39
39
 
@@ -52,7 +52,7 @@ class AdAuthenticator(Authenticator):
52
52
  r = session.post(login_uri, data=body, headers={
53
53
  'Content-Type': 'application/x-www-form-urlencoded'
54
54
  })
55
- Config().debug(f'{r.status_code} {login_uri}')
55
+ debug(f'{r.status_code} {login_uri}')
56
56
 
57
57
  config = self.validate_and_return_config(r)
58
58
 
@@ -69,7 +69,7 @@ class AdAuthenticator(Authenticator):
69
69
  r = session.post(kmsi_uri, data=body, headers={
70
70
  'Content-Type': 'application/x-www-form-urlencoded'
71
71
  })
72
- Config().debug(f'{r.status_code} {kmsi_uri}')
72
+ debug(f'{r.status_code} {kmsi_uri}')
73
73
 
74
74
  if (config := self.extract_config_object(r.text)):
75
75
  if 'sErrorCode' in config and config['sErrorCode'] == '50058':
@@ -101,7 +101,7 @@ class AdAuthenticator(Authenticator):
101
101
 
102
102
  def validate_and_return_config(self, r: requests.Response):
103
103
  if r.status_code < 200 or r.status_code >= 300:
104
- Config().debug(r.text)
104
+ debug(r.text)
105
105
 
106
106
  return None
107
107
 
@@ -138,7 +138,7 @@ class AdAuthenticator(Authenticator):
138
138
 
139
139
  def parse_id_token(self, id_token: str) -> IdToken:
140
140
  jwks_url = Config().get('idps.ad.jwks-uri', '')
141
- try:
141
+ with log_exc():
142
142
  jwks_client = jwt.PyJWKClient(jwks_url, cache_jwk_set=True, lifespan=360)
143
143
  signing_key = jwks_client.get_signing_key_from_jwt(id_token)
144
144
  data = jwt.decode(
@@ -163,7 +163,5 @@ class AdAuthenticator(Authenticator):
163
163
  nbf=data['nbf'] if 'nbf' in data else 0,
164
164
  exp=data['exp'] if 'exp' in data else 0
165
165
  )
166
- except:
167
- Config().debug(traceback.format_exc())
168
166
 
169
167
  return None
adam/sso/authn_okta.py CHANGED
@@ -8,7 +8,7 @@ from adam.sso.id_token import IdToken
8
8
 
9
9
  from .idp_login import IdpLogin
10
10
  from adam.config import Config
11
- from adam.utils import log2
11
+ from adam.utils import debug, log2, log_exc
12
12
 
13
13
  class OktaException(Exception):
14
14
  pass
@@ -49,7 +49,7 @@ class OktaAuthenticator(Authenticator):
49
49
 
50
50
  session = requests.Session()
51
51
  response = session.post(authn_uri, headers=headers, data=json.dumps(payload))
52
- Config().debug(f'{response.status_code} {authn_uri}')
52
+ debug(f'{response.status_code} {authn_uri}')
53
53
  auth_response = response.json()
54
54
 
55
55
  if 'sessionToken' not in auth_response:
@@ -59,7 +59,7 @@ class OktaAuthenticator(Authenticator):
59
59
 
60
60
  url = f'{idp_uri}&sessionToken={session_token}'
61
61
  r = session.get(url)
62
- Config().debug(f'{r.status_code} {url}')
62
+ debug(f'{r.status_code} {url}')
63
63
 
64
64
  id_token = OktaAuthenticator().extract(r.text, r'.*name=\"id_token\" value=\"(.*?)\".*')
65
65
  if not id_token:
@@ -95,7 +95,7 @@ class OktaAuthenticator(Authenticator):
95
95
  return None
96
96
 
97
97
  jwks_url = Config().get('idps.okta.jwks-uri', 'https://c3energy.okta.com/oauth2/v1/keys')
98
- try:
98
+ with log_exc():
99
99
  jwks_client = jwt.PyJWKClient(jwks_url, cache_jwk_set=True, lifespan=360)
100
100
  signing_key = jwks_client.get_signing_key_from_jwt(id_token)
101
101
  data = jwt.decode(
@@ -121,7 +121,5 @@ class OktaAuthenticator(Authenticator):
121
121
  nbf=data['nbf'] if 'nbf' in data else 0,
122
122
  exp=data['exp'] if 'exp' in data else 0
123
123
  )
124
- except:
125
- pass
126
124
 
127
125
  return None
adam/sso/cred_cache.py CHANGED
@@ -1,9 +1,9 @@
1
1
  import os
2
2
  from pathlib import Path
3
- import traceback
4
3
  from dotenv import load_dotenv
5
4
 
6
5
  from adam.config import Config
6
+ from adam.utils import debug, log_exc
7
7
  from adam.utils_k8s.kube_context import KubeContext
8
8
 
9
9
  class CredCache:
@@ -34,10 +34,8 @@ class CredCache:
34
34
  def cache(self, username: str, password: str = None):
35
35
  if os.path.exists(self.env_f):
36
36
  with open(self.env_f, 'w') as file:
37
- try:
37
+ with log_exc():
38
38
  file.truncate()
39
- except:
40
- Config().debug(traceback.format_exc())
41
39
 
42
40
  updated = []
43
41
  updated.append(f'IDP_USERNAME={username}')
@@ -56,4 +54,4 @@ class CredCache:
56
54
  if password:
57
55
  self.overrides['IDP_PASSWORD'] = password
58
56
 
59
- Config().debug(f'Cached username: {username}, password: {password}, try load: {self.get_username()}')
57
+ debug(f'Cached username: {username}, password: {password}, try load: {self.get_username()}')
adam/sso/idp.py CHANGED
@@ -3,7 +3,6 @@ import getpass
3
3
  import os
4
4
  import sys
5
5
  import termios
6
- import traceback
7
6
  from typing import Callable, TypeVar
8
7
  import requests
9
8
  from kubernetes import config
@@ -15,7 +14,7 @@ from .cred_cache import CredCache
15
14
  from .idp_session import IdpSession
16
15
  from .idp_login import IdpLogin
17
16
  from adam.config import Config
18
- from adam.utils import log, log2
17
+ from adam.utils import debug, log, log_exc
19
18
 
20
19
  T = TypeVar('T')
21
20
 
@@ -31,6 +30,8 @@ class Idp:
31
30
  def login(app_host: str, username: str = None, idp_uri: str = None, forced = False, use_token_from_env = True, use_cached_creds = True, verify = True) -> IdpLogin:
32
31
  session: IdpSession = IdpSession.create(username, app_host, app_host, idp_uri=idp_uri)
33
32
 
33
+ debug(f'Idp.login({username})')
34
+
34
35
  if use_token_from_env:
35
36
  if l0 := session.login_from_env_var():
36
37
  return l0
@@ -39,11 +40,9 @@ class Idp:
39
40
  token_server = Config().get('app.login.token-server-url', 'http://localhost:{port}').replace('{port}', port)
40
41
  res: requests.Response = requests.get(token_server)
41
42
  if res.status_code == 200 and res.text:
42
- try:
43
+ with log_exc():
43
44
  # may fail if the idp token is not complete
44
45
  return session.login_from_token(res.text)
45
- except:
46
- pass
47
46
 
48
47
  r: IdpLogin = None
49
48
  try:
@@ -57,10 +56,11 @@ class Idp:
57
56
  default_user: str = None
58
57
  if use_cached_creds:
59
58
  default_user = CredCache().get_username()
60
- Config().debug(f'User read from cache: {default_user}')
59
+ debug(f'User read from cache: {default_user}')
61
60
 
62
- if from_env := os.getenv('USERNAME'):
63
- default_user = from_env
61
+ # no value in using USERNAME
62
+ # if from_env := os.getenv('USERNAME') and in_docker():
63
+ # default_user = from_env
64
64
  if default_user and default_user != username:
65
65
  session = IdpSession.create(default_user, app_host, app_host)
66
66
 
@@ -125,7 +125,7 @@ class Idp:
125
125
  termios.tcsetattr(fd, termios.TCSADRAIN, old)
126
126
 
127
127
  def try_kubeconfig(username: str, kubeconfig: str):
128
- try:
128
+ with log_exc():
129
129
  if kubeconfig[0] == '\t':
130
130
  kubeconfig = kubeconfig[1:]
131
131
  kubeconfig_string = base64.b64decode(kubeconfig.encode('ascii') + b'==').decode('utf-8')
@@ -136,8 +136,5 @@ class Idp:
136
136
  Secrets.list_secrets(os.getenv('NAMESPACE'))
137
137
 
138
138
  return IdpLogin(None, None, None, username)
139
- except:
140
- Config().debug(traceback.format_exc())
141
- pass
142
139
 
143
140
  return None