kaqing 2.0.52__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.
- adam/__init__.py +0 -2
- adam/app_session.py +9 -12
- adam/apps.py +20 -6
- adam/batch.py +15 -19
- adam/checks/check_utils.py +19 -49
- adam/checks/compactionstats.py +1 -1
- adam/checks/cpu.py +9 -3
- adam/checks/cpu_metrics.py +52 -0
- adam/checks/disk.py +3 -4
- adam/checks/gossip.py +1 -1
- adam/checks/memory.py +3 -3
- adam/checks/status.py +1 -1
- adam/columns/columns.py +3 -1
- adam/columns/cpu.py +3 -1
- adam/columns/cpu_metrics.py +22 -0
- adam/columns/memory.py +3 -4
- adam/commands/__init__.py +24 -0
- adam/commands/alter_tables.py +37 -63
- adam/commands/app/app.py +38 -0
- adam/commands/{app_ping.py → app/app_ping.py} +8 -14
- adam/commands/app/show_app_actions.py +49 -0
- adam/commands/{show → app}/show_app_id.py +9 -12
- adam/commands/{show → app}/show_app_queues.py +8 -14
- adam/commands/app/utils_app.py +98 -0
- adam/commands/audit/audit.py +81 -0
- adam/commands/audit/audit_repair_tables.py +72 -0
- adam/commands/audit/audit_run.py +50 -0
- adam/commands/audit/show_last10.py +37 -0
- adam/commands/audit/show_slow10.py +36 -0
- adam/commands/audit/show_top10.py +36 -0
- adam/commands/audit/utils_show_top10.py +71 -0
- adam/commands/bash/__init__.py +5 -0
- adam/commands/bash/bash.py +36 -0
- adam/commands/bash/bash_completer.py +93 -0
- adam/commands/bash/utils_bash.py +16 -0
- adam/commands/cat.py +36 -0
- adam/commands/cd.py +14 -89
- adam/commands/check.py +18 -21
- adam/commands/cli_commands.py +5 -6
- adam/commands/clipboard_copy.py +86 -0
- adam/commands/code.py +57 -0
- adam/commands/command.py +197 -35
- adam/commands/commands_utils.py +15 -31
- adam/commands/cql/cql_completions.py +29 -8
- adam/commands/cql/cqlsh.py +12 -27
- adam/commands/cql/utils_cql.py +297 -0
- adam/commands/deploy/code_start.py +7 -10
- adam/commands/deploy/code_stop.py +4 -21
- adam/commands/deploy/code_utils.py +5 -5
- adam/commands/deploy/deploy.py +4 -21
- adam/commands/deploy/deploy_frontend.py +14 -17
- adam/commands/deploy/deploy_pg_agent.py +3 -6
- adam/commands/deploy/deploy_pod.py +71 -79
- adam/commands/deploy/deploy_utils.py +16 -26
- adam/commands/deploy/undeploy.py +4 -21
- adam/commands/deploy/undeploy_frontend.py +4 -7
- adam/commands/deploy/undeploy_pg_agent.py +6 -8
- adam/commands/deploy/undeploy_pod.py +15 -16
- adam/commands/devices/__init__.py +0 -0
- adam/commands/devices/device.py +123 -0
- adam/commands/devices/device_app.py +163 -0
- adam/commands/devices/device_auit_log.py +49 -0
- adam/commands/devices/device_cass.py +179 -0
- adam/commands/devices/device_export.py +84 -0
- adam/commands/devices/device_postgres.py +150 -0
- adam/commands/devices/devices.py +25 -0
- adam/commands/download_file.py +47 -0
- adam/commands/exit.py +1 -4
- adam/commands/export/__init__.py +0 -0
- adam/commands/export/clean_up_all_export_sessions.py +37 -0
- adam/commands/export/clean_up_export_sessions.py +39 -0
- adam/commands/export/download_export_session.py +39 -0
- adam/commands/export/drop_export_database.py +39 -0
- adam/commands/export/drop_export_databases.py +37 -0
- adam/commands/export/export.py +53 -0
- adam/commands/export/export_databases.py +245 -0
- adam/commands/export/export_select.py +59 -0
- adam/commands/export/export_select_x.py +54 -0
- adam/commands/export/export_sessions.py +209 -0
- adam/commands/export/export_use.py +49 -0
- adam/commands/export/exporter.py +332 -0
- adam/commands/export/import_files.py +44 -0
- adam/commands/export/import_session.py +44 -0
- adam/commands/export/importer.py +81 -0
- adam/commands/export/importer_athena.py +177 -0
- adam/commands/export/importer_sqlite.py +67 -0
- adam/commands/export/show_column_counts.py +45 -0
- adam/commands/export/show_export_databases.py +38 -0
- adam/commands/export/show_export_session.py +39 -0
- adam/commands/export/show_export_sessions.py +37 -0
- adam/commands/export/utils_export.py +343 -0
- adam/commands/find_files.py +51 -0
- adam/commands/find_processes.py +76 -0
- adam/commands/head.py +36 -0
- adam/commands/help.py +14 -9
- adam/commands/intermediate_command.py +49 -0
- adam/commands/issues.py +14 -40
- adam/commands/kubectl.py +38 -0
- adam/commands/login.py +26 -25
- adam/commands/logs.py +5 -7
- adam/commands/ls.py +11 -110
- adam/commands/medusa/medusa.py +4 -22
- adam/commands/medusa/medusa_backup.py +22 -29
- adam/commands/medusa/medusa_restore.py +40 -39
- adam/commands/medusa/medusa_show_backupjobs.py +19 -20
- adam/commands/medusa/medusa_show_restorejobs.py +15 -20
- adam/commands/nodetool.py +11 -15
- adam/commands/param_get.py +11 -14
- adam/commands/param_set.py +8 -12
- adam/commands/postgres/postgres.py +45 -46
- adam/commands/postgres/postgres_databases.py +269 -0
- adam/commands/postgres/postgres_ls.py +4 -8
- adam/commands/postgres/postgres_preview.py +5 -9
- adam/commands/postgres/psql_completions.py +4 -3
- adam/commands/postgres/utils_postgres.py +70 -0
- adam/commands/preview_table.py +10 -61
- adam/commands/pwd.py +14 -43
- adam/commands/reaper/reaper.py +4 -24
- adam/commands/reaper/reaper_forward.py +49 -56
- adam/commands/reaper/reaper_forward_session.py +6 -0
- adam/commands/reaper/reaper_forward_stop.py +10 -16
- adam/commands/reaper/reaper_restart.py +8 -15
- adam/commands/reaper/reaper_run_abort.py +8 -33
- adam/commands/reaper/reaper_runs.py +43 -58
- adam/commands/reaper/reaper_runs_abort.py +29 -49
- adam/commands/reaper/reaper_schedule_activate.py +9 -32
- adam/commands/reaper/reaper_schedule_start.py +9 -32
- adam/commands/reaper/reaper_schedule_stop.py +9 -32
- adam/commands/reaper/reaper_schedules.py +4 -14
- adam/commands/reaper/reaper_status.py +8 -16
- adam/commands/reaper/utils_reaper.py +194 -0
- adam/commands/repair/repair.py +4 -22
- adam/commands/repair/repair_log.py +6 -12
- adam/commands/repair/repair_run.py +29 -36
- adam/commands/repair/repair_scan.py +33 -39
- adam/commands/repair/repair_stop.py +6 -12
- adam/commands/report.py +25 -21
- adam/commands/restart.py +27 -28
- adam/commands/rollout.py +20 -25
- adam/commands/shell.py +12 -4
- adam/commands/show/show.py +11 -23
- adam/commands/show/show_adam.py +3 -3
- adam/commands/show/show_cassandra_repairs.py +35 -0
- adam/commands/show/show_cassandra_status.py +34 -52
- adam/commands/show/show_cassandra_version.py +5 -18
- adam/commands/show/show_commands.py +20 -25
- adam/commands/show/show_host.py +33 -0
- adam/commands/show/show_login.py +23 -27
- adam/commands/show/show_params.py +2 -5
- adam/commands/show/show_processes.py +16 -20
- adam/commands/show/show_storage.py +10 -20
- adam/commands/watch.py +27 -30
- adam/config.py +7 -15
- adam/embedded_params.py +1 -1
- adam/log.py +4 -4
- adam/pod_exec_result.py +13 -5
- adam/repl.py +126 -119
- adam/repl_commands.py +63 -29
- adam/repl_state.py +320 -71
- adam/sql/sql_completer.py +98 -383
- adam/sql/sql_state_machine.py +630 -0
- adam/sql/term_completer.py +14 -4
- adam/sso/authn_ad.py +6 -8
- adam/sso/authn_okta.py +4 -6
- adam/sso/cred_cache.py +4 -6
- adam/sso/idp.py +10 -13
- adam/utils.py +511 -10
- adam/utils_athena.py +145 -0
- adam/utils_audits.py +102 -0
- adam/utils_issues.py +32 -0
- adam/utils_k8s/__init__.py +0 -0
- adam/utils_k8s/app_clusters.py +28 -0
- adam/utils_k8s/app_pods.py +36 -0
- adam/utils_k8s/cassandra_clusters.py +44 -0
- adam/{k8s_utils → utils_k8s}/cassandra_nodes.py +11 -4
- adam/{k8s_utils → utils_k8s}/custom_resources.py +16 -17
- adam/{k8s_utils → utils_k8s}/deployment.py +2 -2
- adam/{k8s_utils → utils_k8s}/ingresses.py +2 -2
- adam/{k8s_utils → utils_k8s}/jobs.py +7 -11
- adam/utils_k8s/k8s.py +87 -0
- adam/{k8s_utils → utils_k8s}/kube_context.py +2 -2
- adam/{k8s_utils → utils_k8s}/pods.py +109 -74
- adam/{k8s_utils → utils_k8s}/secrets.py +7 -3
- adam/{k8s_utils → utils_k8s}/service_accounts.py +5 -4
- adam/{k8s_utils → utils_k8s}/services.py +2 -2
- adam/{k8s_utils → utils_k8s}/statefulsets.py +3 -14
- adam/utils_local.py +4 -0
- adam/utils_net.py +24 -0
- adam/utils_repl/__init__.py +0 -0
- adam/utils_repl/automata_completer.py +48 -0
- adam/utils_repl/repl_completer.py +46 -0
- adam/utils_repl/state_machine.py +173 -0
- adam/utils_sqlite.py +137 -0
- adam/version.py +1 -1
- {kaqing-2.0.52.dist-info → kaqing-2.0.184.dist-info}/METADATA +1 -1
- kaqing-2.0.184.dist-info/RECORD +244 -0
- adam/commands/app.py +0 -67
- adam/commands/bash.py +0 -87
- adam/commands/cp.py +0 -95
- adam/commands/cql/cql_table_completer.py +0 -8
- adam/commands/cql/cql_utils.py +0 -109
- adam/commands/describe/describe.py +0 -46
- adam/commands/describe/describe_keyspace.py +0 -60
- adam/commands/describe/describe_keyspaces.py +0 -50
- adam/commands/describe/describe_table.py +0 -60
- adam/commands/describe/describe_tables.py +0 -50
- adam/commands/devices.py +0 -89
- adam/commands/postgres/postgres_session.py +0 -240
- adam/commands/postgres/postgres_utils.py +0 -31
- adam/commands/postgres/psql_table_completer.py +0 -11
- adam/commands/reaper/reaper_session.py +0 -159
- adam/commands/show/show_app_actions.py +0 -53
- adam/commands/show/show_repairs.py +0 -47
- adam/k8s_utils/cassandra_clusters.py +0 -35
- adam/sql/sql_utils.py +0 -5
- kaqing-2.0.52.dist-info/RECORD +0 -184
- /adam/commands/{describe → app}/__init__.py +0 -0
- /adam/{k8s_utils → commands/audit}/__init__.py +0 -0
- /adam/{k8s_utils → utils_k8s}/config_maps.py +0 -0
- /adam/{k8s_utils → utils_k8s}/volumes.py +0 -0
- {kaqing-2.0.52.dist-info → kaqing-2.0.184.dist-info}/WHEEL +0 -0
- {kaqing-2.0.52.dist-info → kaqing-2.0.184.dist-info}/entry_points.txt +0 -0
- {kaqing-2.0.52.dist-info → kaqing-2.0.184.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
from abc import abstractmethod
|
|
2
|
+
from typing import Generic, TypeVar
|
|
3
|
+
|
|
4
|
+
from adam.utils import log_exc
|
|
5
|
+
|
|
6
|
+
__all__ = [
|
|
7
|
+
'State',
|
|
8
|
+
'StateMachine',
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
T = TypeVar('T')
|
|
12
|
+
|
|
13
|
+
class State:
|
|
14
|
+
def __init__(self, state: str, comeback_token: str = None, comeback_state: str = None):
|
|
15
|
+
self.state = state
|
|
16
|
+
self.comeback_token = comeback_token
|
|
17
|
+
self.comeback_state = comeback_state
|
|
18
|
+
self.context: dict[str, str] = {}
|
|
19
|
+
|
|
20
|
+
def __str__(self):
|
|
21
|
+
return f'{self.state if self.state else None} comeback[{self.comeback_token} {self.comeback_state}]'
|
|
22
|
+
|
|
23
|
+
class StateMachine(Generic[T]):
|
|
24
|
+
@abstractmethod
|
|
25
|
+
def spec(self) -> str:
|
|
26
|
+
return None
|
|
27
|
+
|
|
28
|
+
@abstractmethod
|
|
29
|
+
def keywords(self) -> list[str]:
|
|
30
|
+
return None
|
|
31
|
+
|
|
32
|
+
def expandable_names(self):
|
|
33
|
+
return []
|
|
34
|
+
|
|
35
|
+
def incomplete_name_transition_condition(self, from_s: str, token: str, to_s: str, suggestions: str) -> list[str]:
|
|
36
|
+
if not suggestions:
|
|
37
|
+
return None
|
|
38
|
+
|
|
39
|
+
tokens = [token]
|
|
40
|
+
if '|' in token:
|
|
41
|
+
tokens = token.split('|')
|
|
42
|
+
|
|
43
|
+
if 'name' not in tokens:
|
|
44
|
+
return None
|
|
45
|
+
|
|
46
|
+
return tokens
|
|
47
|
+
|
|
48
|
+
def __init__(self, indent=0, push_level = 0, debug = False):
|
|
49
|
+
self.states: dict[str, State] = {}
|
|
50
|
+
self.suggestions: dict[str, str] = {}
|
|
51
|
+
|
|
52
|
+
self.indent = indent
|
|
53
|
+
self.push_level = push_level
|
|
54
|
+
self.comebacks: dict[int, str] = {}
|
|
55
|
+
self.debug = debug
|
|
56
|
+
|
|
57
|
+
from_ss_to_add = []
|
|
58
|
+
from_ss = ['']
|
|
59
|
+
words: str = None
|
|
60
|
+
for l in self.spec():
|
|
61
|
+
t_and_w = l.split('^')
|
|
62
|
+
if len(t_and_w) > 1:
|
|
63
|
+
words = t_and_w[1].strip()
|
|
64
|
+
else:
|
|
65
|
+
words = None
|
|
66
|
+
|
|
67
|
+
tks = t_and_w[0].strip(' ').split('>')
|
|
68
|
+
if not l.startswith('-'):
|
|
69
|
+
if words:
|
|
70
|
+
self.suggestions[tks[0].strip(' ')] = words
|
|
71
|
+
|
|
72
|
+
if len(tks) == 1:
|
|
73
|
+
from_ss_to_add.append(tks[0].strip(' '))
|
|
74
|
+
continue
|
|
75
|
+
|
|
76
|
+
from_ss = []
|
|
77
|
+
from_ss.extend(from_ss_to_add)
|
|
78
|
+
from_ss_to_add = []
|
|
79
|
+
from_ss.append(tks[0].strip(' '))
|
|
80
|
+
|
|
81
|
+
self.add_transitions(from_ss, tks, words)
|
|
82
|
+
|
|
83
|
+
def add_transitions(self, from_ss: list[str], tks: list[str], words: str):
|
|
84
|
+
token = tks[1].strip(' ')
|
|
85
|
+
if len(tks) > 2:
|
|
86
|
+
to_s = tks[2].strip(' ')
|
|
87
|
+
for from_s in from_ss:
|
|
88
|
+
self.add_whitespace_transition(from_s, to_s)
|
|
89
|
+
self.add_transition(from_s, token, to_s)
|
|
90
|
+
self.add_incomplete_name_transition(from_s, token, to_s, words)
|
|
91
|
+
elif '<' in tks[0]:
|
|
92
|
+
from_and_token = tks[0].split('<')
|
|
93
|
+
if len(from_and_token) > 1:
|
|
94
|
+
for from_s in from_ss:
|
|
95
|
+
self.add_comeback_transition(from_s, from_and_token[1], tks[1].strip(' '))
|
|
96
|
+
|
|
97
|
+
def add_whitespace_transition(self, from_s: str, to_s: str):
|
|
98
|
+
if self.witespace_transition_condition(from_s, to_s):
|
|
99
|
+
if self.debug:
|
|
100
|
+
print(f'{from_s[:-1]} > _ = {to_s}')
|
|
101
|
+
self.states[f'{from_s[:-1]} > _'] = State(from_s)
|
|
102
|
+
|
|
103
|
+
def witespace_transition_condition(self, from_s: str, to_s: str):
|
|
104
|
+
return from_s.endswith('_')
|
|
105
|
+
|
|
106
|
+
def add_incomplete_name_transition(self, from_s: str, token: str, to_s: str, words: str):
|
|
107
|
+
if tokens := self.incomplete_name_transition_condition(from_s, token, to_s, words):
|
|
108
|
+
self.suggestions[to_s] = words
|
|
109
|
+
for token in tokens:
|
|
110
|
+
if self.debug:
|
|
111
|
+
print(f'{to_s} > {token} = {to_s}')
|
|
112
|
+
self.states[f'{to_s} > {token}'] = State(to_s)
|
|
113
|
+
|
|
114
|
+
def add_transition(self, from_s: str, token: str, to_s: str):
|
|
115
|
+
tokens = [token]
|
|
116
|
+
if '|' in token:
|
|
117
|
+
tokens = token.split('|')
|
|
118
|
+
|
|
119
|
+
for t in tokens:
|
|
120
|
+
if t == '_or_':
|
|
121
|
+
t = '||'
|
|
122
|
+
elif t == 'pipe':
|
|
123
|
+
t = '|'
|
|
124
|
+
elif t == '_rdr0_':
|
|
125
|
+
t = '<'
|
|
126
|
+
elif t == '_rdr1_':
|
|
127
|
+
t = '>'
|
|
128
|
+
elif t == '_rdr2_':
|
|
129
|
+
t = '2>'
|
|
130
|
+
|
|
131
|
+
if self.debug:
|
|
132
|
+
print(f'{from_s} > {t} = {to_s}')
|
|
133
|
+
self.states[f'{from_s} > {t}'] = State(to_s)
|
|
134
|
+
|
|
135
|
+
def add_comeback_transition(self, from_s: str, token: str, to_s: str):
|
|
136
|
+
key = f'{from_s} > ('
|
|
137
|
+
orig = self.states[key]
|
|
138
|
+
if not orig:
|
|
139
|
+
raise Exception(f'from state not found for {key}')
|
|
140
|
+
|
|
141
|
+
orig.comeback_token = token
|
|
142
|
+
orig.comeback_state = to_s
|
|
143
|
+
if self.debug:
|
|
144
|
+
print(f'{from_s} > ) = {to_s}')
|
|
145
|
+
self.states[key] = orig
|
|
146
|
+
|
|
147
|
+
def traverse_tokens(self, tokens: list[str], state: State = State('')):
|
|
148
|
+
for token in tokens[:-1]:
|
|
149
|
+
if not token:
|
|
150
|
+
continue
|
|
151
|
+
|
|
152
|
+
if self.debug:
|
|
153
|
+
print(f'{token} ', end='')
|
|
154
|
+
|
|
155
|
+
last_name = None
|
|
156
|
+
|
|
157
|
+
if (t := token.lower()) in self.keywords():
|
|
158
|
+
token = t
|
|
159
|
+
elif token in ['*', ',', '.']:
|
|
160
|
+
pass
|
|
161
|
+
else:
|
|
162
|
+
last_name = token
|
|
163
|
+
token = 'word'
|
|
164
|
+
|
|
165
|
+
with log_exc():
|
|
166
|
+
context = state.context
|
|
167
|
+
state = self.states[f'{state.state} > {token}']
|
|
168
|
+
state.context = context
|
|
169
|
+
|
|
170
|
+
if last_name:
|
|
171
|
+
state.context['last_name'] = last_name
|
|
172
|
+
|
|
173
|
+
return state
|
adam/utils_sqlite.py
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
from collections.abc import Callable
|
|
2
|
+
|
|
3
|
+
import functools
|
|
4
|
+
import glob
|
|
5
|
+
import os
|
|
6
|
+
import sqlite3
|
|
7
|
+
import pandas
|
|
8
|
+
|
|
9
|
+
from adam.config import Config
|
|
10
|
+
from adam.utils import tabulize, log, wait_log
|
|
11
|
+
|
|
12
|
+
class CursorHandler:
|
|
13
|
+
def __init__(self, conn: sqlite3.Connection):
|
|
14
|
+
self.conn = conn
|
|
15
|
+
self.cursor = None
|
|
16
|
+
|
|
17
|
+
def __enter__(self):
|
|
18
|
+
self.cursor = self.conn.cursor()
|
|
19
|
+
|
|
20
|
+
return self.cursor
|
|
21
|
+
|
|
22
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
23
|
+
if self.cursor:
|
|
24
|
+
self.cursor.close()
|
|
25
|
+
|
|
26
|
+
return False
|
|
27
|
+
|
|
28
|
+
class SQLiteConnectionHandler:
|
|
29
|
+
def __init__(self, database: str, keyspace = None):
|
|
30
|
+
self.database = database
|
|
31
|
+
self.keyspace = keyspace
|
|
32
|
+
self.conn = None
|
|
33
|
+
|
|
34
|
+
def __enter__(self) -> sqlite3.Connection:
|
|
35
|
+
self.conn = SQLite.connect(self.database, self.keyspace)
|
|
36
|
+
|
|
37
|
+
self.conn.__enter__()
|
|
38
|
+
|
|
39
|
+
return self.conn
|
|
40
|
+
|
|
41
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
42
|
+
if self.conn:
|
|
43
|
+
self.conn.__exit__(exc_type, exc_val, exc_tb)
|
|
44
|
+
|
|
45
|
+
return False
|
|
46
|
+
|
|
47
|
+
def sqlite(database: str, keyspace = None):
|
|
48
|
+
return SQLiteConnectionHandler(database, keyspace=keyspace)
|
|
49
|
+
|
|
50
|
+
# no state utility class
|
|
51
|
+
class SQLite:
|
|
52
|
+
def cursor(conn: sqlite3.Connection):
|
|
53
|
+
return CursorHandler(conn)
|
|
54
|
+
|
|
55
|
+
def local_db_dir():
|
|
56
|
+
return Config().get('export.sqlite.local-db-dir', '/tmp/qing-db')
|
|
57
|
+
|
|
58
|
+
def keyspace(database: str):
|
|
59
|
+
return '_'.join(database.replace(".db", "").split('_')[1:])
|
|
60
|
+
|
|
61
|
+
@functools.lru_cache()
|
|
62
|
+
def database_names(prefix: str = None):
|
|
63
|
+
wait_log('Inspecting export databases...')
|
|
64
|
+
|
|
65
|
+
pattern = f'{SQLite.local_db_dir()}/s*.db'
|
|
66
|
+
if prefix:
|
|
67
|
+
pattern = f'{SQLite.local_db_dir()}/{prefix}*'
|
|
68
|
+
return [os.path.basename(f) for f in glob.glob(pattern)]
|
|
69
|
+
|
|
70
|
+
def clear_cache(cache: str = None):
|
|
71
|
+
SQLite.database_names.cache_clear()
|
|
72
|
+
SQLite.table_names.cache_clear()
|
|
73
|
+
|
|
74
|
+
@functools.lru_cache()
|
|
75
|
+
def table_names(database: str):
|
|
76
|
+
tokens = database.replace('.db', '').split('_')
|
|
77
|
+
ts_prefix = tokens[0]
|
|
78
|
+
keyspace = '_'.join(tokens[1:])
|
|
79
|
+
|
|
80
|
+
conn = None
|
|
81
|
+
tables = []
|
|
82
|
+
try:
|
|
83
|
+
conn = sqlite3.connect(f'{SQLite.local_db_dir()}/{ts_prefix}_{keyspace}.db')
|
|
84
|
+
with SQLite.cursor(conn) as cursor:
|
|
85
|
+
cursor.execute("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;")
|
|
86
|
+
|
|
87
|
+
tables = [row[0] for row in cursor.fetchall() if row[0] != "sqlite_sequence"]
|
|
88
|
+
|
|
89
|
+
return tables
|
|
90
|
+
except sqlite3.Error as e:
|
|
91
|
+
print(f"Error connecting to or querying the database: {e}")
|
|
92
|
+
return []
|
|
93
|
+
finally:
|
|
94
|
+
if conn:
|
|
95
|
+
conn.close()
|
|
96
|
+
|
|
97
|
+
def connect(database: str, keyspace: str = None):
|
|
98
|
+
os.makedirs(SQLite.local_db_dir(), exist_ok=True)
|
|
99
|
+
|
|
100
|
+
if keyspace:
|
|
101
|
+
return sqlite3.connect(f'{SQLite.local_db_dir()}/{database}_{keyspace}.db')
|
|
102
|
+
else:
|
|
103
|
+
conn = sqlite3.connect(f'{SQLite.local_db_dir()}/{database}_root.db')
|
|
104
|
+
with SQLite.cursor(conn) as cursor:
|
|
105
|
+
for d in SQLite.database_names(database):
|
|
106
|
+
if d != f'{database}.db':
|
|
107
|
+
q = f"ATTACH DATABASE '{SQLite.local_db_dir()}/{d}' AS {SQLite.keyspace(d)}"
|
|
108
|
+
cursor.execute(q)
|
|
109
|
+
|
|
110
|
+
return conn
|
|
111
|
+
|
|
112
|
+
@functools.lru_cache()
|
|
113
|
+
def column_names(tables: list[str] = [], database: str = None, function: str = 'audit', partition_cols_only = False):
|
|
114
|
+
pass
|
|
115
|
+
|
|
116
|
+
def run_query(query: str, database: str = None, output: Callable[[str], str] = None) -> tuple[int, str]:
|
|
117
|
+
with sqlite(database) as conn:
|
|
118
|
+
return SQLite.run_query_with_conn(conn, query, output=output)
|
|
119
|
+
|
|
120
|
+
def run_query_with_conn(conn, query: str, output: Callable[[str], str] = None) -> tuple[int, str]:
|
|
121
|
+
log_file = None
|
|
122
|
+
|
|
123
|
+
df = SQLite.query(conn, query)
|
|
124
|
+
lines = ['\t'.join(map(str, line)) for line in df.values.tolist()]
|
|
125
|
+
out = tabulize(lines, header='\t'.join(df.columns.tolist()), separator='\t', to=0)
|
|
126
|
+
if output:
|
|
127
|
+
log_file = output(out)
|
|
128
|
+
else:
|
|
129
|
+
log(out)
|
|
130
|
+
|
|
131
|
+
return len(lines), log_file
|
|
132
|
+
|
|
133
|
+
def query(conn, sql: str) -> tuple[str, str, list]:
|
|
134
|
+
return pandas.read_sql_query(sql, conn)
|
|
135
|
+
|
|
136
|
+
def log_prefix():
|
|
137
|
+
return Config().get('export.log-prefix', '/tmp/qing')
|
adam/version.py
CHANGED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
adam/__init__.py,sha256=is7iqn2nhRzPymhTEajITEFVyvROZ9GWfNsZX3L5g_o,45
|
|
2
|
+
adam/app_session.py,sha256=4bRs1uYvaFWnWlTyQctSeR3BE2Dk0bVe509LbqvX9iE,6841
|
|
3
|
+
adam/apps.py,sha256=f1qsIOYjn4fdpCvMfOBns5YEiA5fMm7yZu3cQrK6z2M,7049
|
|
4
|
+
adam/batch.py,sha256=c1FgH3-glAqBdAXMEGBe9MTHnqGFUXfsgLB1Mw9LV60,24041
|
|
5
|
+
adam/cli.py,sha256=03pIZdomAu7IL-GSP6Eun_PKwwISShRAmfx6eVRPGC0,458
|
|
6
|
+
adam/cli_group.py,sha256=W3zy1BghCtVcEXizq8fBH-93ZRVVwgAyGPzy0sHno1Y,593
|
|
7
|
+
adam/config.py,sha256=LJWT9eiKhNj6qYDKx8TAkCmlBsxXTxLbYuSppnP5SGA,2697
|
|
8
|
+
adam/embedded_apps.py,sha256=lKPx63mKzJbNmwz0rgL4gF76M9fDGxraYTtNAIGnZ_s,419
|
|
9
|
+
adam/embedded_params.py,sha256=esYTcFkYUoGFjLHNz8wZ6uMLOlNq_yONTE2_Umb8ThU,6287
|
|
10
|
+
adam/log.py,sha256=vcJ1Q8LLnt3NSXqpVcKjAI2OZE6KaD3PEi1kfu_D8qs,1156
|
|
11
|
+
adam/pod_exec_result.py,sha256=85jy_5dS6TEEk5ijU0B62YfUycxmD3dG8mhIHFPipc8,1260
|
|
12
|
+
adam/repl.py,sha256=RYF94UkstdPgqkZUmN6pTqEBIyCf0IGiGMPzjmGNrYA,7421
|
|
13
|
+
adam/repl_commands.py,sha256=MKiawgYi0A28WMeu7oOKZSJvBmA9FKyPJ3c6fAGI5Hs,6906
|
|
14
|
+
adam/repl_session.py,sha256=uIogcvWBh7wd8QQ-p_JgLsyJ8YJgINw5vOd6JIsd7Vo,472
|
|
15
|
+
adam/repl_state.py,sha256=gBYi5WKQ5KaTcCSFB193IcW8HalrqjwtHkvx_-vwW1Q,15810
|
|
16
|
+
adam/utils.py,sha256=YCZ_qUlIAWigzPYarzUrtKGA0A03pZe_AtDuMFZE6rk,21729
|
|
17
|
+
adam/utils_athena.py,sha256=13ZtBlOIDhIvZYRGRLtDrKrEcn4VIq87IZVrIkM1mAM,5389
|
|
18
|
+
adam/utils_audits.py,sha256=lZ2U1AcROxLB4652auG091QFTPs_YNzbtdXBiK6bY_Y,4063
|
|
19
|
+
adam/utils_issues.py,sha256=nWhzUXmD2IfbT8MzjdyvuvpKrtUoieF74O2joaWFpUU,1438
|
|
20
|
+
adam/utils_local.py,sha256=3RIvP5ZluJhOl-z9qi5U4bLFP5_vuYGnjcY-koO40lE,109
|
|
21
|
+
adam/utils_net.py,sha256=byEtNVr8iG9UaD7dM77dN2WEBClB7YNKult7LKFTCOc,428
|
|
22
|
+
adam/utils_sqlite.py,sha256=z34AxQL1HZBcv704NXZsMerWt-BPtnCUUw1rZHQB9Bw,4330
|
|
23
|
+
adam/version.py,sha256=kYLgDfH_OX0upFxTpysYQpCmiJusQM-UuG8SS3sisJg,140
|
|
24
|
+
adam/checks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
adam/checks/check.py,sha256=Qopr3huYcMu2bzQgb99dEUYjFzkjKHRI76S6KA9b9Rk,702
|
|
26
|
+
adam/checks/check_context.py,sha256=FEHkQ32jY1EDopQ2uYWqy9v7aEEX1orLpJWhopwAlh4,402
|
|
27
|
+
adam/checks/check_result.py,sha256=5_DVNgkCC9t7xFJYNsjd9bfXA1I4vYb6K3kmN8cdMrA,669
|
|
28
|
+
adam/checks/check_utils.py,sha256=oF4nOTqHY_ynf8M3kvDqzSzxA7-vScobxP9W_oWp8No,2736
|
|
29
|
+
adam/checks/compactionstats.py,sha256=NFi9RcRImZqCJBZs3LH851RHmlu4BO0s_QOsvkdUxKQ,2304
|
|
30
|
+
adam/checks/cpu.py,sha256=j1CFzDO77uTpnYW7xUbx0OzHkQksc2IEXLPXenDo2wE,2978
|
|
31
|
+
adam/checks/cpu_metrics.py,sha256=ymDxof0l4PdRp527nFAJae7Yzn7zjAOvDMZiBwS50QY,2023
|
|
32
|
+
adam/checks/disk.py,sha256=pmjNUEF4rrYtQGcHfv9K78q8cCbAsZeg6qE3KN-IbBU,5215
|
|
33
|
+
adam/checks/gossip.py,sha256=60PeVkhtMWziiYILPwMKfesFjOanIn-nxeZZL5nUHQs,3119
|
|
34
|
+
adam/checks/issue.py,sha256=u3E6yCpDGGJiveKXdpkrKq7HQRTrG7aR2XLCoO-ys7U,498
|
|
35
|
+
adam/checks/memory.py,sha256=1TPoC_eL7QmMMJfaclW3hoSxudsUc4qvrzzb0Z4f5Kw,3056
|
|
36
|
+
adam/checks/status.py,sha256=4IFCesrovCbGKgbJxLr0VxjGGWmmF23ZQNfHUFb5Kyg,2140
|
|
37
|
+
adam/columns/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
|
+
adam/columns/column.py,sha256=O_5ptfx136BKdLo8enDvSL3HlId1dkjMM2XUumg1tNA,956
|
|
39
|
+
adam/columns/columns.py,sha256=AqUhIdu8dlaZuA96rWW3TBnR6SdbvQkr02ZGyHZKKmU,1708
|
|
40
|
+
adam/columns/compactions.py,sha256=ybIEYTkDuRTBLIUNurGhu1jhVnf1UEpJ0abo3GTgmKw,928
|
|
41
|
+
adam/columns/cpu.py,sha256=b_kFLUwBFxAkZXmqu-L7stuJDT_5bbEUZPLiTOQaBKg,585
|
|
42
|
+
adam/columns/cpu_metrics.py,sha256=4CWz-hwJhAW00Yd-7jKWRYIPviyjY4THp_FulMW6otc,711
|
|
43
|
+
adam/columns/dir_data.py,sha256=gDLcrwMZ6dEVTmpvc35yX3iNY97mQ5q0eQojm8tZ2so,545
|
|
44
|
+
adam/columns/dir_snapshots.py,sha256=OSseuf7gAvT-_ujLvGt43jF-q7QVJNDcvqOK47QSJbk,451
|
|
45
|
+
adam/columns/gossip.py,sha256=KKUycFG-8YxMh9VYUrYOFwPVvnh-0i19k---DrpW93g,656
|
|
46
|
+
adam/columns/host_id.py,sha256=oqesvFCzUu0utkcH5mhYg0vx7lAW2EIDoezgY_CCP_Y,350
|
|
47
|
+
adam/columns/memory.py,sha256=yUjHcdhoiivJQB2kVimCSuzkhZTiPSugwtJ8invoub0,706
|
|
48
|
+
adam/columns/node_address.py,sha256=PqSm2FtR0NAhc-R17sPRJJ3c6eWlJLHPctu8RsCslcM,355
|
|
49
|
+
adam/columns/node_load.py,sha256=Oc-kdfezYBP5eWDug-ijgM48x6XRNjwxxoQDZt_MbQc,349
|
|
50
|
+
adam/columns/node_owns.py,sha256=Iv5FDYV0m3ZM2JK05Fl485ZxDgOxZHDIN9KYNJc6Zdg,349
|
|
51
|
+
adam/columns/node_status.py,sha256=im52GfdETXVJVM00fU5OjJM2FvLZrgqpLkWKCwWhjAs,353
|
|
52
|
+
adam/columns/node_tokens.py,sha256=38D9xJ3uA48gzEYBtIiIUbZJcteM1H4KryzJNn01uZ8,353
|
|
53
|
+
adam/columns/node_utils.py,sha256=ql2StXmASC7equuabZVZEQ_BPTu2KkS99gY_3JXpIvU,774
|
|
54
|
+
adam/columns/pod_name.py,sha256=IYw0ZKA7Fb9LaGXENqzZTiTgL98tahwFRtfy0KkKh2Q,280
|
|
55
|
+
adam/columns/volume_cassandra.py,sha256=9KRNOzjNYganI9avN6zaA5_-7yxD4rV-KNxro9CSUg4,753
|
|
56
|
+
adam/columns/volume_root.py,sha256=29ujLoCAf9LO75u62LxEaPD58s6ihV-tcK17OeLSOM0,556
|
|
57
|
+
adam/commands/__init__.py,sha256=xMC9cRhdshstKEgmu5-euiAE53vvWItKqUzlKhTteAg,1302
|
|
58
|
+
adam/commands/alter_tables.py,sha256=yNqIYDoZd2xZEl3hc8E6V1Br6_BEM3X7DCnXFGuR1pQ,3216
|
|
59
|
+
adam/commands/cat.py,sha256=faPselbEKg9g7iROZyeMUkroaYL3D1pe5UT12ZQVTu4,1210
|
|
60
|
+
adam/commands/cd.py,sha256=g6GGHqg72pfxjVL_s5KFne2GL8taikWRWgCEU1nDRqg,1338
|
|
61
|
+
adam/commands/check.py,sha256=5aa4DAIMB24HNY-zYwHGthQM_9qwB-vlKpzeaq65HBs,2314
|
|
62
|
+
adam/commands/cli_commands.py,sha256=TGnm2uxtuDRmkNNMlPOpYAXJkgDQEuhDeimBcwsEtC8,3574
|
|
63
|
+
adam/commands/clipboard_copy.py,sha256=H5NgTiJPK9pybqJ2lPvbTodVLkTjoqNrPeEanVg_mbY,3107
|
|
64
|
+
adam/commands/code.py,sha256=q95MN9Ts7xjCAUZB50Q8MJYNPzny-4FeI2LdwMBzozQ,1890
|
|
65
|
+
adam/commands/command.py,sha256=LPsrGIBwVawRNAnP0jvovbxVLifAQftpzUQjymHIrYY,9204
|
|
66
|
+
adam/commands/command_helpers.py,sha256=leOJJK1UXczNTJHN9TGMCbIpUpmpreULvQ-TvnsYS7w,1134
|
|
67
|
+
adam/commands/commands_utils.py,sha256=E5i592tpfpNqKFHcyvOdCqMmg7RdHWfRwRN3zxVzfQs,2734
|
|
68
|
+
adam/commands/download_file.py,sha256=edfBKapK7URHRMnIJn6a6HMNFmFD-kUq62Z3DHdtyT4,1693
|
|
69
|
+
adam/commands/exit.py,sha256=T7bCEShd6MXQ8rXak7vGZTvqEOejPOUPtbdfy7d8WWA,753
|
|
70
|
+
adam/commands/find_files.py,sha256=2yx-RhOHvok0y0wxYf-OChWghEQc_pnp3B_nASt33zk,1480
|
|
71
|
+
adam/commands/find_processes.py,sha256=jrIwz8YtQRO4I-zov1wfjcLpCJ_nDRDMmL9iZWg1ztg,2911
|
|
72
|
+
adam/commands/head.py,sha256=vcGSi-5ImB3ik8d6LUxijogyEvUeyiYiOml8qZJmT-A,1216
|
|
73
|
+
adam/commands/help.py,sha256=SYaJL-7mApfSlfkDvY2uKl7onyr54ntDmMSQ18sfaZw,1886
|
|
74
|
+
adam/commands/intermediate_command.py,sha256=6g3rei97hKwO-pG_Wisp6T5DSiychcMY8CoTnf39Hfc,1721
|
|
75
|
+
adam/commands/issues.py,sha256=5evrVBzc4sCMHwQ9LmuGAgoPBINr-OCa9FZMJVJDwH8,1431
|
|
76
|
+
adam/commands/kubectl.py,sha256=kCXIl_9vNDW6CBirCeowQjJ2UhidlCEDBP8XOVIloF8,993
|
|
77
|
+
adam/commands/login.py,sha256=rY8P3wpWZOBN-68QRZfDfBvd0wjLUkwbTNPduqAOoVA,2073
|
|
78
|
+
adam/commands/logs.py,sha256=CS4eh5JWzoXboYSXXpiE6CDsky1Jsu61Q1MZAqGjOB8,1142
|
|
79
|
+
adam/commands/ls.py,sha256=b6EBzjXdlagOkpD_OM77I_n18ikGub5obtuerruA9yA,1298
|
|
80
|
+
adam/commands/nodetool.py,sha256=Fz6hbBHmp7zY5Xr4EVmOqVAVLo0RjADwsBePCFVWPT8,2191
|
|
81
|
+
adam/commands/nodetool_commands.py,sha256=5IgWC3rmeDD1cgwqQjiiWzi-wJpJ3n_8pAzz_9phXuk,2635
|
|
82
|
+
adam/commands/param_get.py,sha256=3IpAn4_T-_NlSkEXyv0jkBJ_aHE-e9hdY5YVaZlIKBI,1357
|
|
83
|
+
adam/commands/param_set.py,sha256=v1oKyr7Efv7YpnwuXj-dm4M_vo9F1FNIdQHSb6F_t1o,1351
|
|
84
|
+
adam/commands/preview_table.py,sha256=sw2vqItIo4YuaawFOecS5lYl-cMfYiLgeR0fKG23o4A,1255
|
|
85
|
+
adam/commands/pwd.py,sha256=aQKMHEONxTM2h1nv3dT9rj6cUl3WUZC6SD8nrfNYrZI,1427
|
|
86
|
+
adam/commands/report.py,sha256=IESGEq6akUY2IznKUZV90_5s2gRM4npexFQH7Pa3rAI,2086
|
|
87
|
+
adam/commands/restart.py,sha256=CUjHxdWznqgY2BdYcHHKH2eolj3cPeE5xbMjkIiyJ2A,2202
|
|
88
|
+
adam/commands/rollout.py,sha256=BmlvnVffPGCERfXxdJJFnxtU3yDILp5016N7C-EWCOE,3032
|
|
89
|
+
adam/commands/shell.py,sha256=UQs4TEIDiZOjJrVsZJ_O9DDtn_k3K7-ifg1ZBsJFnsU,1155
|
|
90
|
+
adam/commands/watch.py,sha256=q3kJd6YSO_ZxQ107EeIWZsW8m2X7YIGT3QPXjKloTIo,2459
|
|
91
|
+
adam/commands/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
92
|
+
adam/commands/app/app.py,sha256=mjieddAahG3wnXMOIcrrclVqzqsA-6gRvTLjp6Qr4Gs,1198
|
|
93
|
+
adam/commands/app/app_ping.py,sha256=VOPaWE2DQjAXlN1uonH2chNItiTUt7HqltQDA2LkwrU,1207
|
|
94
|
+
adam/commands/app/show_app_actions.py,sha256=vChdR20zGEBMRJotwGPyRjpteoFawaIU6fZnVdBtj_w,1742
|
|
95
|
+
adam/commands/app/show_app_id.py,sha256=4Y4uTZa7J5NJI6W8OTqtS5ynCoflYiPVz98c-h3hNBo,1359
|
|
96
|
+
adam/commands/app/show_app_queues.py,sha256=F6qFqnUqiNocvWROj8oXQmmLYU9e8S51N8ao6P0wp-Y,1234
|
|
97
|
+
adam/commands/app/utils_app.py,sha256=TQM7AH4hCk7Wl88r-rzecEZ7djejp3vtVGvug63kGD8,3024
|
|
98
|
+
adam/commands/audit/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
99
|
+
adam/commands/audit/audit.py,sha256=WLWPnLry90kdrxZy0odNHwL9E3xvHe0TtFN2JfvJJKY,3157
|
|
100
|
+
adam/commands/audit/audit_repair_tables.py,sha256=F4EuDV4pObZJ4Xc2lj32vadTQQyCdxiyGWznQqm4YTw,2575
|
|
101
|
+
adam/commands/audit/audit_run.py,sha256=yFrLGRYblEwOgB2nxEjicSVD3ZzcYV4hmH0AoB7u8OE,1698
|
|
102
|
+
adam/commands/audit/show_last10.py,sha256=jCDFVeyAO_ofi4PwVPaAlcB8wF2lNPLoN1eWhwoNgnU,1041
|
|
103
|
+
adam/commands/audit/show_slow10.py,sha256=a0KU9Z6Z93eWqcrnJ-Ssz1U2488aUk62dLOZcnM5pFg,1040
|
|
104
|
+
adam/commands/audit/show_top10.py,sha256=7uqgkdrEfK0-ucsQrpyaa6_9i3nOpWJ116sNL-fkKUA,1033
|
|
105
|
+
adam/commands/audit/utils_show_top10.py,sha256=o37sWLEJD16eoWPM3Rql_H-noLHVMp4DH1VeTpnFeNA,2354
|
|
106
|
+
adam/commands/bash/__init__.py,sha256=K4BBF_T-6czi7uqBN-WQg3eNvG-ePJF3IPp8eyGyqmk,163
|
|
107
|
+
adam/commands/bash/bash.py,sha256=AvXehWWltrT9sXttpeGFhRoNO0PAjyNEiqnbxSiNpZI,1168
|
|
108
|
+
adam/commands/bash/bash_completer.py,sha256=IStUg5LLTqc3vjupw33WtXUG9zRQ37BctjDYGDyYEXU,3883
|
|
109
|
+
adam/commands/bash/utils_bash.py,sha256=LmpTVPaM0aEMDqKPFnyEp5EidAyQQiiUkcvRjvOu-20,433
|
|
110
|
+
adam/commands/cql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
111
|
+
adam/commands/cql/cql_completions.py,sha256=Wr37WHWO4-zAYMRlG38GpfxFAIFHlmBUKSAHHsx7ftU,1465
|
|
112
|
+
adam/commands/cql/cqlsh.py,sha256=JWoxx75d5Kn1vDpmSfTjHVfeMpL-r0zIIrODutQipQI,2383
|
|
113
|
+
adam/commands/cql/utils_cql.py,sha256=4YRD7mYzVxW050oWl7JhOuBZ7JOmWcc1oXFdo6pYp80,11259
|
|
114
|
+
adam/commands/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
115
|
+
adam/commands/deploy/code_start.py,sha256=0h8AIPjThC7uxa4HVkYMdC-7qCNXk0QXO1zDrzIOA4s,1335
|
|
116
|
+
adam/commands/deploy/code_stop.py,sha256=R9zvNVD4NLUD3J6ktZ53Rsalzn-t0ZxEpeyOoiizfgU,1153
|
|
117
|
+
adam/commands/deploy/code_utils.py,sha256=H0XgKxVV1Rt3JRjZlssUHwkttuRQ0n6JjjsYw-jn5kI,3285
|
|
118
|
+
adam/commands/deploy/deploy.py,sha256=TmJbWS6JPts8mfPakguTMA88xjstdiUgYfA2aacLA2E,821
|
|
119
|
+
adam/commands/deploy/deploy_frontend.py,sha256=msfDZW8aAlL8E5ve36VkWthuqmXONGRVe7djqLo3i7g,1689
|
|
120
|
+
adam/commands/deploy/deploy_pg_agent.py,sha256=BeM1jpGVHzcpTl4Bs2LaVfyHeqYo0tYRdqnst0AYuas,1150
|
|
121
|
+
adam/commands/deploy/deploy_pod.py,sha256=as7E-2bO1v7IY_3G8iOhrGajFxrGQFYfWebJKMWx16s,4541
|
|
122
|
+
adam/commands/deploy/deploy_utils.py,sha256=P_Z-8tY_ZZuucsHL-8r5rt1c0LfIM-CYpvPsTiM4oe8,1241
|
|
123
|
+
adam/commands/deploy/undeploy.py,sha256=QblQDQOjesNbMfi0Rx_D3oxC93LEPfTVqDj5sLAc84g,873
|
|
124
|
+
adam/commands/deploy/undeploy_frontend.py,sha256=khgxZ94bXlQ8c737B_J-gE0pNBA0GaIQmxCapnkI98c,1210
|
|
125
|
+
adam/commands/deploy/undeploy_pg_agent.py,sha256=X73_0dadpn_DFW1rQMQssE3NQbmovllEXkxFDAunPms,1259
|
|
126
|
+
adam/commands/deploy/undeploy_pod.py,sha256=Pc5xpU4z5_CHrtz3cAzReT4Qxyks2kQ-uWSRUnAYiJ4,1907
|
|
127
|
+
adam/commands/devices/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
+
adam/commands/devices/device.py,sha256=NEGeE-uWjW_AJPZufuVe3FKuPrPh59iCMNh4nk7r2FI,3490
|
|
129
|
+
adam/commands/devices/device_app.py,sha256=ZqS5bNq2fBAkuYzYfiSRPt1k26-Cc6u5Fo5AcCWPY_s,6373
|
|
130
|
+
adam/commands/devices/device_auit_log.py,sha256=kOP5QwDixwVPupd1A0PG2RY0fq_aeEdx4MRWegnj2Ow,1560
|
|
131
|
+
adam/commands/devices/device_cass.py,sha256=45tEDKETZF20Bj3lPyFLkcJ7VDmGVB8mVtBWq8YGcps,6754
|
|
132
|
+
adam/commands/devices/device_export.py,sha256=dkXVrBzfVyqT4sLIZBHxYqJl9whXhs3UM1WgaHXuWyY,2932
|
|
133
|
+
adam/commands/devices/device_postgres.py,sha256=up-F3dW7nMqtnOcw9WQVeZ3FjwM5F2PjSwV1bgAMEiI,5508
|
|
134
|
+
adam/commands/devices/devices.py,sha256=-VV8nU-Qcebx2g2ftOywmgrn8wW7-teCpxFQjU9wBR4,965
|
|
135
|
+
adam/commands/export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
136
|
+
adam/commands/export/clean_up_all_export_sessions.py,sha256=YpGBrOMYY2n_G-fQMpJPZSEHIC9zArWayYWbaOHOkY8,1161
|
|
137
|
+
adam/commands/export/clean_up_export_sessions.py,sha256=AaYaMG8x0lRCzOs8-vAH1J76Y-iLX1QOkwC4rMu8nXw,1328
|
|
138
|
+
adam/commands/export/download_export_session.py,sha256=tY8AQpGI9hN-WCR9ezjn6N2ue_ZHWPkCp--N7S_9GuE,1493
|
|
139
|
+
adam/commands/export/drop_export_database.py,sha256=3S6yj0OuMknPZ1MpPad7eCm1V6BdDn6enHcjRC_fjek,1232
|
|
140
|
+
adam/commands/export/drop_export_databases.py,sha256=WzOm4Ykf1O_ZRjF8oZn_PaKTuIzxFeRJhqWfsENCstg,1095
|
|
141
|
+
adam/commands/export/export.py,sha256=l-3dSKXVdAteicfQvkLmELRJ42LBmCAqhOqL0uthrJA,2105
|
|
142
|
+
adam/commands/export/export_databases.py,sha256=g736a1WZqkTjsddNdX0NwQJV8SnAJWHbBSMS6fWZ5Ro,8158
|
|
143
|
+
adam/commands/export/export_select.py,sha256=WDpyQOmKQ1DuAeZUvgu3K32gOCNgV5uWG7fwCMGTszY,2117
|
|
144
|
+
adam/commands/export/export_select_x.py,sha256=WuSkuhB4yfz0IVt3-Dd42GG7FTWoNzBhVsfieEN51W0,2020
|
|
145
|
+
adam/commands/export/export_sessions.py,sha256=ZGixNge-xCDf5qNIPM9hGEJnQw16vM8AVKClURDONmY,7420
|
|
146
|
+
adam/commands/export/export_use.py,sha256=1Z-N19wK_tkqoCHR2XqFGod4hr2BTJkhNJfcxiL-BuE,1518
|
|
147
|
+
adam/commands/export/exporter.py,sha256=Oh---HyjjgeyX9h9flvmEvh4DXkziWwfZTnndnqo0j4,15222
|
|
148
|
+
adam/commands/export/import_files.py,sha256=OIAZUVcwvWSKLjyLi6298bdMYRPPFldNXykvrQSsUYY,1625
|
|
149
|
+
adam/commands/export/import_session.py,sha256=cbLQts9kkZBwEhpHV_fDhcHN2uzfsjdYvhzr4Vx6xDw,1640
|
|
150
|
+
adam/commands/export/importer.py,sha256=QI_SH3PvIJWQtC8wo5cjz_0IEZ1ts760zGazXw2Kj4A,2726
|
|
151
|
+
adam/commands/export/importer_athena.py,sha256=St6n5C4bB0J-41z-rk712pA1yWsjbdyrCuBAOgF3a74,7809
|
|
152
|
+
adam/commands/export/importer_sqlite.py,sha256=t0zYiV5pp3X22eO7wKGc4MbP9Gp4AWTVAaGJMzuexR0,2713
|
|
153
|
+
adam/commands/export/show_column_counts.py,sha256=uv8KfWRpQL4KyyrKpKoZpBV8REuYIvDO6FqWDaV368A,1661
|
|
154
|
+
adam/commands/export/show_export_databases.py,sha256=EhMFdWLMtW0sHd0i1V2pAPrFozxDxLSkKGtnflhOhsY,1257
|
|
155
|
+
adam/commands/export/show_export_session.py,sha256=Rby9WRMzhDhRKzAWl2fYgOMI9kVG1jH0dgHMQB4r_60,1421
|
|
156
|
+
adam/commands/export/show_export_sessions.py,sha256=WklIVsvY7_DUeykOTdibpPYuwpxqZdQLBsoKLpKOQy8,1153
|
|
157
|
+
adam/commands/export/utils_export.py,sha256=Q_NmUBNmxMgcs_NUnsJmRVea4N0TE2x9tvNlB90CuT4,12433
|
|
158
|
+
adam/commands/medusa/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
159
|
+
adam/commands/medusa/medusa.py,sha256=Ey2kJpoKqPFP6m623B3ciMoLur5SVcHEBYsvW7G7aAY,958
|
|
160
|
+
adam/commands/medusa/medusa_backup.py,sha256=n-caJjd3WObm2tplVKUG-GahWoOwDS2pk_MZKQl0S7Q,1812
|
|
161
|
+
adam/commands/medusa/medusa_restore.py,sha256=MetDgcWj0BznrgoEkCvZ0ZAHwHP3SJCIE7CAvBy30-w,3330
|
|
162
|
+
adam/commands/medusa/medusa_show_backupjobs.py,sha256=rYP5r_NXAQcWrsstv4UngAb4gbQ8xOuyH9EFs1K00hA,1795
|
|
163
|
+
adam/commands/medusa/medusa_show_restorejobs.py,sha256=rgNg-fy0EbTBd2PghOM-w16PrtqL9QCE0Z0vhIcK8CE,1584
|
|
164
|
+
adam/commands/postgres/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
|
+
adam/commands/postgres/postgres.py,sha256=UhnNC29sigqwMGw4Kj71jwkBTLEYWbWvLu_4-4cDyuU,3452
|
|
166
|
+
adam/commands/postgres/postgres_databases.py,sha256=p9jgyEPkPZuZMpM5aEJXhv4aZu8CDy36XlejZVqu5vw,11417
|
|
167
|
+
adam/commands/postgres/postgres_ls.py,sha256=yT-V1mGnvImaIr4s75FUsV5klcrOB7HHJwWbY6h1Kpk,1111
|
|
168
|
+
adam/commands/postgres/postgres_preview.py,sha256=Bmw3YC98tFdjUx2CRHOakcvLHCOLtEiKxvNDjlDoRo0,1174
|
|
169
|
+
adam/commands/postgres/psql_completions.py,sha256=HuBxb8vl6SELJxWmbKYwOobGqZOYMoK0wkIQD7RfCeI,363
|
|
170
|
+
adam/commands/postgres/utils_postgres.py,sha256=rZbJecJRqHOHg6MyGZjenv_q1CB9EYSAv2IIQ88GmXM,2133
|
|
171
|
+
adam/commands/reaper/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
172
|
+
adam/commands/reaper/reaper.py,sha256=Xrfjvqtn5txnaMwofBb77yEsmSYLO_-Bi43ABq2ZmaQ,1398
|
|
173
|
+
adam/commands/reaper/reaper_forward.py,sha256=O5L4SnZdeFMtJqc5SHYVCYQcfkQ2-JnDN9rEX7u_8Xg,3307
|
|
174
|
+
adam/commands/reaper/reaper_forward_session.py,sha256=CfKMYQPDZYQBtYQjxcPs7ns5e8AGZj9Q0LD8dOxvLl0,160
|
|
175
|
+
adam/commands/reaper/reaper_forward_stop.py,sha256=a8i6Zp4rYKFt6qC7iqpf57gDZTMAtZy1H1PXq5tTOHM,1375
|
|
176
|
+
adam/commands/reaper/reaper_restart.py,sha256=Ms3OWhV6pqEtmQiupvKO9ArTVBPlniPtg4BwPCgaFq8,1173
|
|
177
|
+
adam/commands/reaper/reaper_run_abort.py,sha256=f3D2EhtiPiLXBOx0vY-XmBivDrgLbppb4dgnStucNVk,1276
|
|
178
|
+
adam/commands/reaper/reaper_runs.py,sha256=DjD-K2XCGQyekLf3QfoidApr-S5yI2lb9dSo51042sk,3045
|
|
179
|
+
adam/commands/reaper/reaper_runs_abort.py,sha256=ykY8D5fcZwqMRebM2JxFClVksjeDIBTIQe5nSk5oyp0,2058
|
|
180
|
+
adam/commands/reaper/reaper_schedule_activate.py,sha256=PELW78_kblgGegyRFXtIOMf3eIHxJt2D3jNEYITwHFw,1485
|
|
181
|
+
adam/commands/reaper/reaper_schedule_start.py,sha256=VjZ2E-pm8QpnVuMYw53VhfXUgfORC-DjJoDiERKqxYM,1472
|
|
182
|
+
adam/commands/reaper/reaper_schedule_stop.py,sha256=FWaUF3j8R6v57bNQm2np96QwsvBUS3Ee7TDDl5avbRM,1464
|
|
183
|
+
adam/commands/reaper/reaper_schedules.py,sha256=vbvt0JojQecWCo5i4M-3HenWSnJU68F1MAoWcPhp8bo,1071
|
|
184
|
+
adam/commands/reaper/reaper_status.py,sha256=IuRbQwlZB4pDZu4iuPk5TXdTqvzBTMtAl68tHiiPZM0,1801
|
|
185
|
+
adam/commands/reaper/utils_reaper.py,sha256=vOMemHAL0-qGvwSZEwE8OwnF7KDT2f2cOD9YrjYYFgk,7392
|
|
186
|
+
adam/commands/repair/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
187
|
+
adam/commands/repair/repair.py,sha256=tNNJk01Bo8KYeogoUO0oGzwErCfFZz_aW7CmzP81Fs4,830
|
|
188
|
+
adam/commands/repair/repair_log.py,sha256=UCdcTE_4gdZxgQ-suDPk5uKMEDytubzucT_zEMUQ6Ck,1063
|
|
189
|
+
adam/commands/repair/repair_run.py,sha256=l78BWpa8wcuSPvYoweVDko57e2fFP6u0ZYbMHQE4FsM,2560
|
|
190
|
+
adam/commands/repair/repair_scan.py,sha256=-7dS9i-_5WO9uHW_PhA0Wi0bY1RvP5sHeQJXl5VB6Ps,2424
|
|
191
|
+
adam/commands/repair/repair_stop.py,sha256=J-IMeQCDo9bA6GbY98rM4456uAMtezX40zVIECEMjws,1097
|
|
192
|
+
adam/commands/show/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
193
|
+
adam/commands/show/show.py,sha256=0kBGHeSNdnRsIarZO-MmNhYFARUoCONZlDLbX4OOfZk,1724
|
|
194
|
+
adam/commands/show/show_adam.py,sha256=zmzgIvWo9hg0v6YyA26N-xGZipVome22AtrZ9iI6oSw,1298
|
|
195
|
+
adam/commands/show/show_cassandra_repairs.py,sha256=wmv_fOKr_SwZnMCFDjtRBNEFuXoQNbCSAxoxgPknDhA,1129
|
|
196
|
+
adam/commands/show/show_cassandra_status.py,sha256=GLWYS7__qB1gBhQFI1dQ9LH5OXggOvKHqyslmYzcO0w,4612
|
|
197
|
+
adam/commands/show/show_cassandra_version.py,sha256=O-vTwnK5mSyhFNRDGQ2c-3YNAbW0TZo1pndvD6kMRMo,1144
|
|
198
|
+
adam/commands/show/show_commands.py,sha256=G391M-hQkB7fSOmjYqyYfNu3qb0Mglx9iBqLvqSuhzY,1884
|
|
199
|
+
adam/commands/show/show_host.py,sha256=b7UrC_n9qRp9jHuQqint1YDEmBbC2dZUjHr59Wff-nM,868
|
|
200
|
+
adam/commands/show/show_login.py,sha256=l5vwFvNQ9WcppSJU_f6xVKGznz32OYd76EImFdR0xEo,1816
|
|
201
|
+
adam/commands/show/show_params.py,sha256=Y-mj-qMql448KmLEVUWIJ1EqzSzSpaYIdiKsLI8FtAg,944
|
|
202
|
+
adam/commands/show/show_processes.py,sha256=Qh0R_fC4QfkC6B9mLeeiReZDmFCNf5emxdYAlztdQjw,2075
|
|
203
|
+
adam/commands/show/show_storage.py,sha256=RUG91-ae6yr1BVb8QOrvaM3pPp38255mIF1rkG2OmlQ,1561
|
|
204
|
+
adam/sql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
205
|
+
adam/sql/sql_completer.py,sha256=RO-S4OiBuDPUL8EWiymB8JexIwgwNXx1QzErDxuL3y4,3939
|
|
206
|
+
adam/sql/sql_state_machine.py,sha256=3m8JsIg_tojwaHY5AdPl6UEE4ZnB5hbhOOApFfozhVo,39144
|
|
207
|
+
adam/sql/term_completer.py,sha256=HZjOV4fEV9LraoMjkk8lHxNvzRtSIYsGUJhSMOhuoHY,2599
|
|
208
|
+
adam/sso/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
209
|
+
adam/sso/authenticator.py,sha256=BCm16L9zf5aLU47-sTCnudn2zLPwd8M2wwRminJfsqw,615
|
|
210
|
+
adam/sso/authn_ad.py,sha256=FQbOJOT_goH7YSr2iqnHh8Ao-WL0jPaE3KyIe3T7g7Y,5786
|
|
211
|
+
adam/sso/authn_okta.py,sha256=e4DjNvCDw646L0SM0aWt_lT2q69MqtzTJiYQpo_EuAQ,4505
|
|
212
|
+
adam/sso/cred_cache.py,sha256=9c-Cdz4xlJ3FakqVmVkBVfQ0XLweDivdlu3kdIMLbFs,2039
|
|
213
|
+
adam/sso/id_token.py,sha256=wmVZ8S0sjScnOxmSvOKlIEKgnvdWqhsgq9XjFe355O4,744
|
|
214
|
+
adam/sso/idp.py,sha256=Fml1IwP2n3e-j3SFtH3uqL8h9dhQ62J3oM4d37svIu8,5775
|
|
215
|
+
adam/sso/idp_login.py,sha256=QAtCUeDTVWliJy40RK_oac8Vgybr13xH8wzeBoxPaa8,1754
|
|
216
|
+
adam/sso/idp_session.py,sha256=9BUHNRf70u4rVKrVY1HKPOEmOviXvkjam8WJxmXSKIM,1735
|
|
217
|
+
adam/sso/sso_config.py,sha256=5N8WZgIJQBtHUy585XLRWKjpU87_v6QluyNK9E27D5s,2459
|
|
218
|
+
adam/utils_k8s/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
219
|
+
adam/utils_k8s/app_clusters.py,sha256=TGqJxlZ0JLqBW806gKDxRxr1BMsCBa6ni8CxEusNgU0,1220
|
|
220
|
+
adam/utils_k8s/app_pods.py,sha256=sWt8c04UtViEPn_7hOZy6sJ5lWlIFrCEE5cWbROaNB8,1539
|
|
221
|
+
adam/utils_k8s/cassandra_clusters.py,sha256=0jJ5-5PJoJKEf4ZiGwdmZi0h3_SakjUPawj3etQ2N4I,1680
|
|
222
|
+
adam/utils_k8s/cassandra_nodes.py,sha256=xUbheZqIxNwuPHA1v2Bb8n1C_aU6xYYbwNirdvUt-uc,1556
|
|
223
|
+
adam/utils_k8s/config_maps.py,sha256=vc9A-2D1-1mindCMFL1wuysDOXb0RCl4BdjC6B6usXI,1194
|
|
224
|
+
adam/utils_k8s/custom_resources.py,sha256=95zVZchFtFWGZ_P-jLaSMl6WYTObn7PqeTLxZ_HKoEo,7599
|
|
225
|
+
adam/utils_k8s/deployment.py,sha256=SLhnMm5GMXwEldj2OupSFBUsvNjynwSNrv5tIDvLMrc,2921
|
|
226
|
+
adam/utils_k8s/ingresses.py,sha256=q8nJTIoxa_dVrGMl1HS5yTS_11jLNBAnWlc2ZishMEE,3458
|
|
227
|
+
adam/utils_k8s/jobs.py,sha256=HbUBNXcKcuXaNzc8NmqR_Sq35yHQ_qeQtiQFFM-J2QY,2534
|
|
228
|
+
adam/utils_k8s/k8s.py,sha256=hq3kPTdDB9Fyny64mFLepOgtqpEEVw6wm6IveWzBRfY,3133
|
|
229
|
+
adam/utils_k8s/kube_context.py,sha256=gu9ZyO2yVuv4B5eu3PSdyjrza46Pj5u6sjnfSAP49wg,3295
|
|
230
|
+
adam/utils_k8s/pods.py,sha256=fRUWVeiuoLRgrkjtyba52HmSediqKfbDK1oyfLa81kA,11425
|
|
231
|
+
adam/utils_k8s/secrets.py,sha256=xnqRSumCIcPaASDcErzxjx1BCE-qJkPoG5wIP7YHzIo,2430
|
|
232
|
+
adam/utils_k8s/service_accounts.py,sha256=OF1-UwWupUAvn_rqNNTWsF3BWYgaLiGTJfinn8sreog,6342
|
|
233
|
+
adam/utils_k8s/services.py,sha256=7K6CxvYntbCsRjTZVcuYiBb5WPH7A5CTWTlUGvaVDRg,3154
|
|
234
|
+
adam/utils_k8s/statefulsets.py,sha256=06ccJhkkFQekIG8gIS9BicMZV1FVX_FKZOOxzdaTUcA,4097
|
|
235
|
+
adam/utils_k8s/volumes.py,sha256=RIBmlOSWM3V3QVXLCFT0owVOyh4rGG1ETp521a-6ndo,1137
|
|
236
|
+
adam/utils_repl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
237
|
+
adam/utils_repl/automata_completer.py,sha256=LJP_2WHHR7AtjX00MJ59VGQEL3t0XS-qYnDmMaZe-Tk,1641
|
|
238
|
+
adam/utils_repl/repl_completer.py,sha256=lsu0vWFdTs8SSSY9gxHN-fQSap-Wqz1QhMF4FqGf7qA,1722
|
|
239
|
+
adam/utils_repl/state_machine.py,sha256=kO4_oSi_M53f3QQjINzzb2VFptjbnqX3KRC0G8LqqeA,5426
|
|
240
|
+
kaqing-2.0.184.dist-info/METADATA,sha256=5ZeiZUxoUrX92OhF0Ka8_mqYDTmim2afFb9lNIWNK40,133
|
|
241
|
+
kaqing-2.0.184.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
|
242
|
+
kaqing-2.0.184.dist-info/entry_points.txt,sha256=SkzhuQJUWsXOzHeZ5TgQ2c3_g53UGK23zzJU_JTZOZI,39
|
|
243
|
+
kaqing-2.0.184.dist-info/top_level.txt,sha256=8_2PZkwBb-xDcnc8a2rAbQeJhXKXskc7zTP7pSPa1fw,5
|
|
244
|
+
kaqing-2.0.184.dist-info/RECORD,,
|
adam/commands/app.py
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
|
|
3
|
-
from adam.apps import Apps
|
|
4
|
-
from adam.commands.command import Command
|
|
5
|
-
from adam.repl_state import ReplState, RequiredState
|
|
6
|
-
from adam.app_session import AppSession
|
|
7
|
-
from adam.utils import log2
|
|
8
|
-
|
|
9
|
-
class App(Command):
|
|
10
|
-
COMMAND = 'app'
|
|
11
|
-
|
|
12
|
-
# the singleton pattern
|
|
13
|
-
def __new__(cls, *args, **kwargs):
|
|
14
|
-
if not hasattr(cls, 'instance'): cls.instance = super(App, cls).__new__(cls)
|
|
15
|
-
|
|
16
|
-
return cls.instance
|
|
17
|
-
|
|
18
|
-
def __init__(self, successor: Command=None):
|
|
19
|
-
super().__init__(successor)
|
|
20
|
-
|
|
21
|
-
def command(self):
|
|
22
|
-
return App.COMMAND
|
|
23
|
-
|
|
24
|
-
def required(self):
|
|
25
|
-
return RequiredState.CLUSTER_OR_POD
|
|
26
|
-
|
|
27
|
-
def run(self, cmd: str, state: ReplState):
|
|
28
|
-
if not(args := self.args(cmd)):
|
|
29
|
-
return super().run(cmd, state)
|
|
30
|
-
|
|
31
|
-
state, args = self.apply_state(args, state)
|
|
32
|
-
if not self.validate_state(state, app_required=RequiredState.APP_APP):
|
|
33
|
-
return state
|
|
34
|
-
|
|
35
|
-
args, forced = Command.extract_options(args, '--force')
|
|
36
|
-
|
|
37
|
-
if not args:
|
|
38
|
-
return 'arg missing'
|
|
39
|
-
|
|
40
|
-
t_f = args[0].split('.')
|
|
41
|
-
if len(t_f) < 2:
|
|
42
|
-
return 'arg missing'
|
|
43
|
-
|
|
44
|
-
payload, valid = Apps().payload(t_f[0], t_f[1], args[1:] if len(args) > 1 else [])
|
|
45
|
-
if not valid:
|
|
46
|
-
log2('Missing one or more action arguments.')
|
|
47
|
-
return state
|
|
48
|
-
|
|
49
|
-
if payload:
|
|
50
|
-
try:
|
|
51
|
-
payload = json.loads(payload)
|
|
52
|
-
except json.decoder.JSONDecodeError as e:
|
|
53
|
-
log2(f'Invalid json argument: {e}')
|
|
54
|
-
return state
|
|
55
|
-
|
|
56
|
-
AppSession.run(state.app_env, state.app_app, state.namespace, t_f[0], t_f[1], payload=payload, forced=forced)
|
|
57
|
-
|
|
58
|
-
return state
|
|
59
|
-
|
|
60
|
-
def completion(self, state: ReplState):
|
|
61
|
-
if state.app_app:
|
|
62
|
-
return super().completion(state, {'--force': None})
|
|
63
|
-
|
|
64
|
-
return {}
|
|
65
|
-
|
|
66
|
-
def help(self, _: ReplState):
|
|
67
|
-
return f"{App.COMMAND} [--force]\t post app API query with type and function"
|