kaqing 2.0.42__tar.gz → 2.0.44__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. {kaqing-2.0.42 → kaqing-2.0.44}/PKG-INFO +1 -1
  2. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/cd.py +1 -1
  3. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/cql_utils.py +1 -1
  4. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/ls.py +1 -3
  5. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/postgres/postgres.py +4 -16
  6. kaqing-2.0.44/adam/commands/postgres/postgres_completions.py +24 -0
  7. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/postgres/postgres_session.py +0 -8
  8. kaqing-2.0.42/adam/commands/postgres/pg_utils.py → kaqing-2.0.44/adam/commands/postgres/postgres_utils.py +5 -0
  9. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/preview_table.py +1 -3
  10. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_session.py +1 -1
  11. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/statefulsets.py +1 -0
  12. kaqing-2.0.44/adam/pg_table_completer.py +77 -0
  13. {kaqing-2.0.42 → kaqing-2.0.44}/adam/repl.py +3 -2
  14. kaqing-2.0.44/adam/version.py +5 -0
  15. {kaqing-2.0.42 → kaqing-2.0.44}/kaqing.egg-info/PKG-INFO +1 -1
  16. {kaqing-2.0.42 → kaqing-2.0.44}/kaqing.egg-info/SOURCES.txt +3 -1
  17. {kaqing-2.0.42 → kaqing-2.0.44}/setup.py +1 -1
  18. kaqing-2.0.42/adam/version.py +0 -5
  19. {kaqing-2.0.42 → kaqing-2.0.44}/README +0 -0
  20. {kaqing-2.0.42 → kaqing-2.0.44}/adam/__init__.py +0 -0
  21. {kaqing-2.0.42 → kaqing-2.0.44}/adam/app_session.py +0 -0
  22. {kaqing-2.0.42 → kaqing-2.0.44}/adam/apps.py +0 -0
  23. {kaqing-2.0.42 → kaqing-2.0.44}/adam/batch.py +0 -0
  24. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/__init__.py +0 -0
  25. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/check.py +0 -0
  26. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/check_context.py +0 -0
  27. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/check_result.py +0 -0
  28. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/check_utils.py +0 -0
  29. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/compactionstats.py +0 -0
  30. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/cpu.py +0 -0
  31. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/disk.py +0 -0
  32. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/gossip.py +0 -0
  33. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/issue.py +0 -0
  34. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/memory.py +0 -0
  35. {kaqing-2.0.42 → kaqing-2.0.44}/adam/checks/status.py +0 -0
  36. {kaqing-2.0.42 → kaqing-2.0.44}/adam/cli.py +0 -0
  37. {kaqing-2.0.42 → kaqing-2.0.44}/adam/cli_group.py +0 -0
  38. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/__init__.py +0 -0
  39. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/column.py +0 -0
  40. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/columns.py +0 -0
  41. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/compactions.py +0 -0
  42. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/cpu.py +0 -0
  43. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/dir_data.py +0 -0
  44. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/dir_snapshots.py +0 -0
  45. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/gossip.py +0 -0
  46. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/host_id.py +0 -0
  47. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/memory.py +0 -0
  48. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/node_address.py +0 -0
  49. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/node_load.py +0 -0
  50. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/node_owns.py +0 -0
  51. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/node_status.py +0 -0
  52. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/node_tokens.py +0 -0
  53. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/node_utils.py +0 -0
  54. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/pod_name.py +0 -0
  55. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/volume_cassandra.py +0 -0
  56. {kaqing-2.0.42 → kaqing-2.0.44}/adam/columns/volume_root.py +0 -0
  57. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/__init__.py +0 -0
  58. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/alter_tables.py +0 -0
  59. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/app.py +0 -0
  60. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/app_ping.py +0 -0
  61. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/bash.py +0 -0
  62. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/check.py +0 -0
  63. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/cli_commands.py +0 -0
  64. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/command.py +0 -0
  65. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/command_helpers.py +0 -0
  66. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/commands_utils.py +0 -0
  67. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/cp.py +0 -0
  68. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/cqlsh.py +0 -0
  69. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/__init__.py +0 -0
  70. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/code_start.py +0 -0
  71. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/code_stop.py +0 -0
  72. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/code_utils.py +0 -0
  73. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/deploy.py +0 -0
  74. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/deploy_frontend.py +0 -0
  75. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/deploy_pg_agent.py +0 -0
  76. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/deploy_pod.py +0 -0
  77. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/deploy_utils.py +0 -0
  78. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/undeploy.py +0 -0
  79. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/undeploy_frontend.py +0 -0
  80. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/undeploy_pg_agent.py +0 -0
  81. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/deploy/undeploy_pod.py +0 -0
  82. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/describe/__init__.py +0 -0
  83. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/describe/describe.py +0 -0
  84. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/describe/describe_keyspace.py +0 -0
  85. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/describe/describe_keyspaces.py +0 -0
  86. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/describe/describe_table.py +0 -0
  87. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/describe/describe_tables.py +0 -0
  88. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/devices.py +0 -0
  89. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/exit.py +0 -0
  90. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/help.py +0 -0
  91. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/issues.py +0 -0
  92. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/login.py +0 -0
  93. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/logs.py +0 -0
  94. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/medusa/__init__.py +0 -0
  95. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/medusa/medusa.py +0 -0
  96. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/medusa/medusa_backup.py +0 -0
  97. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/medusa/medusa_restore.py +0 -0
  98. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/medusa/medusa_show_backupjobs.py +0 -0
  99. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/medusa/medusa_show_restorejobs.py +0 -0
  100. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/nodetool.py +0 -0
  101. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/nodetool_commands.py +0 -0
  102. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/param_get.py +0 -0
  103. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/param_set.py +0 -0
  104. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/postgres/__init__.py +0 -0
  105. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/postgres/postgres_ls.py +0 -0
  106. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/postgres/postgres_preview.py +0 -0
  107. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/pwd.py +0 -0
  108. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/__init__.py +0 -0
  109. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper.py +0 -0
  110. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_forward.py +0 -0
  111. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_forward_stop.py +0 -0
  112. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_restart.py +0 -0
  113. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_run_abort.py +0 -0
  114. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_runs.py +0 -0
  115. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_runs_abort.py +0 -0
  116. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_schedule_activate.py +0 -0
  117. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_schedule_start.py +0 -0
  118. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_schedule_stop.py +0 -0
  119. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_schedules.py +0 -0
  120. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/reaper/reaper_status.py +0 -0
  121. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/repair/__init__.py +0 -0
  122. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/repair/repair.py +0 -0
  123. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/repair/repair_log.py +0 -0
  124. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/repair/repair_run.py +0 -0
  125. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/repair/repair_scan.py +0 -0
  126. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/repair/repair_stop.py +0 -0
  127. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/report.py +0 -0
  128. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/restart.py +0 -0
  129. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/rollout.py +0 -0
  130. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/shell.py +0 -0
  131. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/__init__.py +0 -0
  132. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show.py +0 -0
  133. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_adam.py +0 -0
  134. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_app_actions.py +0 -0
  135. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_app_id.py +0 -0
  136. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_app_queues.py +0 -0
  137. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_cassandra_status.py +0 -0
  138. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_cassandra_version.py +0 -0
  139. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_commands.py +0 -0
  140. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_login.py +0 -0
  141. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_params.py +0 -0
  142. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_processes.py +0 -0
  143. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_repairs.py +0 -0
  144. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/show/show_storage.py +0 -0
  145. {kaqing-2.0.42 → kaqing-2.0.44}/adam/commands/watch.py +0 -0
  146. {kaqing-2.0.42 → kaqing-2.0.44}/adam/config.py +0 -0
  147. {kaqing-2.0.42 → kaqing-2.0.44}/adam/embedded_apps.py +0 -0
  148. {kaqing-2.0.42 → kaqing-2.0.44}/adam/embedded_params.py +0 -0
  149. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/__init__.py +0 -0
  150. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/cassandra_clusters.py +0 -0
  151. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/cassandra_nodes.py +0 -0
  152. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/config_maps.py +0 -0
  153. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/custom_resources.py +0 -0
  154. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/deployment.py +0 -0
  155. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/ingresses.py +0 -0
  156. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/jobs.py +0 -0
  157. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/kube_context.py +0 -0
  158. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/pods.py +0 -0
  159. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/secrets.py +0 -0
  160. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/service_accounts.py +0 -0
  161. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/services.py +0 -0
  162. {kaqing-2.0.42 → kaqing-2.0.44}/adam/k8s_utils/volumes.py +0 -0
  163. {kaqing-2.0.42 → kaqing-2.0.44}/adam/log.py +0 -0
  164. {kaqing-2.0.42 → kaqing-2.0.44}/adam/pod_exec_result.py +0 -0
  165. {kaqing-2.0.42 → kaqing-2.0.44}/adam/repl_commands.py +0 -0
  166. {kaqing-2.0.42 → kaqing-2.0.44}/adam/repl_session.py +0 -0
  167. {kaqing-2.0.42 → kaqing-2.0.44}/adam/repl_state.py +0 -0
  168. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/__init__.py +0 -0
  169. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/authenticator.py +0 -0
  170. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/authn_ad.py +0 -0
  171. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/authn_okta.py +0 -0
  172. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/cred_cache.py +0 -0
  173. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/id_token.py +0 -0
  174. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/idp.py +0 -0
  175. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/idp_login.py +0 -0
  176. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/idp_session.py +0 -0
  177. {kaqing-2.0.42 → kaqing-2.0.44}/adam/sso/sso_config.py +0 -0
  178. {kaqing-2.0.42 → kaqing-2.0.44}/adam/utils.py +0 -0
  179. {kaqing-2.0.42 → kaqing-2.0.44}/kaqing.egg-info/dependency_links.txt +0 -0
  180. {kaqing-2.0.42 → kaqing-2.0.44}/kaqing.egg-info/entry_points.txt +0 -0
  181. {kaqing-2.0.42 → kaqing-2.0.44}/kaqing.egg-info/top_level.txt +0 -0
  182. {kaqing-2.0.42 → kaqing-2.0.44}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaqing
3
- Version: 2.0.42
3
+ Version: 2.0.44
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  License: UNKNOWN
@@ -1,5 +1,5 @@
1
1
  from adam.commands.command import Command
2
- from adam.commands.postgres.pg_utils import pg_database_names
2
+ from adam.commands.postgres.postgres_utils import pg_database_names
3
3
  from adam.commands.postgres.postgres_session import PostgresSession
4
4
  from adam.k8s_utils.cassandra_clusters import CassandraClusters
5
5
  from adam.k8s_utils.kube_context import KubeContext
@@ -11,7 +11,7 @@ from adam.utils import log2
11
11
 
12
12
  @functools.lru_cache()
13
13
  def keyspaces(state: ReplState, on_any=False):
14
- Config().wait_log("Inspecting Cassandra Keyspaces...")
14
+ Config().wait_log('Inspecting Cassandra Keyspaces...')
15
15
 
16
16
  r: list[PodExecResult] = run_cql(state, 'describe keyspaces', show_out=False, on_any=on_any)
17
17
  if not r:
@@ -1,16 +1,14 @@
1
1
  import copy
2
- import re
3
2
 
4
3
  from adam.commands.command import Command
5
4
  from adam.commands.commands_utils import show_pods, show_rollout
6
5
  from adam.commands.cqlsh import Cqlsh
7
- from adam.commands.postgres.pg_utils import pg_database_names, pg_table_names
6
+ from adam.commands.postgres.postgres_utils import pg_database_names, pg_table_names
8
7
  from adam.commands.postgres.postgres_session import PostgresSession
9
8
  from adam.config import Config
10
9
  from adam.k8s_utils.custom_resources import CustomResources
11
10
  from adam.k8s_utils.ingresses import Ingresses
12
11
  from adam.k8s_utils.kube_context import KubeContext
13
- from adam.k8s_utils.services import Services
14
12
  from adam.k8s_utils.statefulsets import StatefulSets
15
13
  from adam.pod_exec_result import PodExecResult
16
14
  from adam.repl_state import ReplState
@@ -1,8 +1,8 @@
1
- import functools
2
1
  import click
3
2
 
4
3
  from adam.commands.command import Command
5
- from adam.commands.postgres.pg_utils import pg_table_names
4
+ from adam.commands.postgres.postgres_completions import pg_completions
5
+ from adam.commands.postgres.postgres_utils import pg_table_names
6
6
  from .postgres_ls import PostgresLs
7
7
  from .postgres_preview import PostgresPreview
8
8
  from .postgres_session import PostgresSession
@@ -68,20 +68,8 @@ class Postgres(Command):
68
68
  leaf = {}
69
69
  session = PostgresSession(state.namespace, state.pg_path)
70
70
  if session.db:
71
- if tables := pg_table_names(state.namespace, state.pg_path):
72
- leaf = {
73
- '\h': None,
74
- '\d': None,
75
- '\dt': None,
76
- '\du': None,
77
- 'delete': {'from': {t: {'where': {'id': {'=': None}}} for t in tables}},
78
- 'insert': {'into': {t: {'values': None} for t in tables}},
79
- 'select': {'*': {'from': {t: {
80
- 'limit': {'1': None},
81
- 'where': {'id': {'=': None}}
82
- } for t in tables}}},
83
- 'update': {t: {'set': None} for t in tables},
84
- }
71
+ if pg_table_names(state.namespace, state.pg_path):
72
+ leaf = pg_completions(state.namespace, state.pg_path)
85
73
  elif state.pg_path:
86
74
  leaf = {
87
75
  '\h': None,
@@ -0,0 +1,24 @@
1
+ from adam.pg_table_completer import PgTableCompleter
2
+
3
+ def pg_completions(ns: str, pg_path: str):
4
+ table = PgTableCompleter(ns, pg_path)
5
+ return {
6
+ '\h': None,
7
+ '\d': None,
8
+ '\dt': None,
9
+ '\du': None,
10
+ # 'delete': {'from': {ts: {'where': {'id': {'=': None}}}}},
11
+ # 'insert': {'into': {ts: {'values': None}}},
12
+ # 'select': {'*': {'from': {ts: {
13
+ # 'limit': {'1': None},
14
+ # 'where': {'id': {'=': None}}
15
+ # }}}},
16
+ # 'update': {ts: {'set': None}},
17
+ 'delete': {'from': table.nested({'where': {'id': {'=': None}}})},
18
+ 'insert': {'into': table.nested({'values': None})},
19
+ 'select': {'*': {'from': table.nested({
20
+ 'limit': {'1': None},
21
+ 'where': {'id': {'=': None}}
22
+ })}},
23
+ 'update': table.nested({'set': None}),
24
+ }
@@ -25,13 +25,6 @@ class PostgresSession:
25
25
  if len(tks) > 1:
26
26
  self.db = tks[1]
27
27
 
28
- # works only for databases()
29
- def __eq__(self, other: 'PostgresSession'):
30
- return self.host == other.host
31
-
32
- def __hash__(self):
33
- return hash(self.host)
34
-
35
28
  def find_namespace(self, arg: str):
36
29
  if arg:
37
30
  tks = arg.split('@')
@@ -82,7 +75,6 @@ class PostgresSession:
82
75
 
83
76
  return [s for s in ss if not excludes(s)]
84
77
 
85
- @functools.lru_cache()
86
78
  def databases(self):
87
79
  dbs = []
88
80
  # List of databases
@@ -1,13 +1,18 @@
1
1
  import functools
2
2
 
3
3
  from adam.commands.postgres.postgres_session import PostgresSession
4
+ from adam.config import Config
4
5
 
6
+ @functools.lru_cache()
5
7
  def pg_database_names(ns: str, pg_path: str):
8
+ Config().wait_log('Inspecting Postgres Databases...')
9
+
6
10
  pg = PostgresSession(ns, pg_path)
7
11
  return [db['name'] for db in pg.databases() if db['owner'] == PostgresSession.default_owner()]
8
12
 
9
13
  @functools.lru_cache()
10
14
  def pg_table_names(ns: str, pg_path: str):
15
+ Config().wait_log('Inspecting Postgres Database...')
11
16
  return [table['name'] for table in pg_tables(ns, pg_path) if table['schema'] == PostgresSession.default_schema()]
12
17
 
13
18
  def pg_tables(ns: str, pg_path: str):
@@ -2,7 +2,6 @@ import functools
2
2
 
3
3
  from adam.commands.command import Command
4
4
  from adam.commands.cql_utils import run_cql, tables
5
- from adam.commands.postgres.pg_utils import pg_table_names
6
5
  from adam.commands.postgres.postgres_session import PostgresSession
7
6
  from adam.config import Config
8
7
  from adam.repl_state import ReplState, RequiredState
@@ -72,8 +71,7 @@ class PreviewTable(Command):
72
71
 
73
72
  def completion(self, state: ReplState):
74
73
  if state.device == ReplState.P:
75
- if tables := pg_table_names(state.namespace, state.pg_path):
76
- return {PreviewTable.COMMAND: {table: None for table in tables}}
74
+ return {PreviewTable.COMMAND: {f'<pg_tables:{state.namespace}:{state.pg_path}>': None}}
77
75
  elif state.sts:
78
76
  tables = PreviewTable.cql_tables(state)
79
77
  return {PreviewTable.COMMAND: {f'{k}.{t}': None for k, ts in tables.items() for t in ts}}
@@ -149,7 +149,7 @@ class ReaperSession:
149
149
  return ReaperSession.schedules_ids_by_cluster[state.sts]
150
150
 
151
151
  if reaper := ReaperSession.create(state):
152
- Config().wait_log("Inspecting Cassandra Reaper...")
152
+ Config().wait_log('Inspecting Cassandra Reaper...')
153
153
 
154
154
  schedules = reaper.schedule_ids(state, show_output = False)
155
155
  ReaperSession.schedules_ids_by_cluster[state.sts] = schedules
@@ -24,6 +24,7 @@ class StatefulSets:
24
24
 
25
25
  return statefulsets.items
26
26
 
27
+ @functools.lru_cache()
27
28
  def list_sts_name_and_ns():
28
29
  return [(statefulset.metadata.name, statefulset.metadata.namespace) for statefulset in StatefulSets.list_sts()]
29
30
 
@@ -0,0 +1,77 @@
1
+ from typing import Any, Dict, Iterable, Mapping, Optional, Set, Union
2
+ from prompt_toolkit.completion import CompleteEvent, Completer, Completion, NestedCompleter, WordCompleter
3
+ from prompt_toolkit.document import Document
4
+
5
+ from adam.commands.postgres.postgres_utils import pg_table_names
6
+
7
+ NestedDict = Mapping[str, Union[Any, Set[str], None, Completer]]
8
+
9
+ class PgTableCompleter(Completer):
10
+ def __init__(self, namespace: str, pg_path: str, nested_dict: NestedDict = None, ignore_case: bool = True):
11
+ self.namespace = namespace
12
+ self.pg_path = pg_path
13
+ self.ignore_case = ignore_case
14
+ if nested_dict:
15
+ self.append_nested_dict(nested_dict)
16
+
17
+ def __repr__(self) -> str:
18
+ return "PgTableCompleter(%r, pg_path=%r)" % (self.namespace, self.pg_path)
19
+
20
+ def nested(self, data: NestedDict):
21
+ return PgTableCompleter(self.namespace, self.pg_path).append_nested_dict(data)
22
+
23
+ def append_nested_dict(self, data: NestedDict) -> "PgTableCompleter":
24
+ options: Dict[str, Optional[Completer]] = {}
25
+ for key, value in data.items():
26
+ if isinstance(value, Completer):
27
+ options[key] = value
28
+ elif isinstance(value, dict):
29
+ options[key] = NestedCompleter.from_nested_dict(value)
30
+ elif isinstance(value, set):
31
+ options[key] = NestedCompleter.from_nested_dict({item: None for item in value})
32
+ else:
33
+ assert value is None
34
+ options[key] = None
35
+
36
+ self.options = options
37
+
38
+ return self
39
+
40
+ def get_completions(
41
+ self, document: Document, complete_event: CompleteEvent
42
+ ) -> Iterable[Completion]:
43
+ text = document.text_before_cursor.lstrip()
44
+ stripped_len = len(document.text_before_cursor) - len(text)
45
+
46
+ if " " in text:
47
+ second_term = None
48
+ tokens = text.split()
49
+ if len(tokens) > 1:
50
+ second_term = tokens[1]
51
+ if second_term:
52
+ completer = self.options.get(second_term)
53
+
54
+ if completer is not None:
55
+ first_term = tokens[0]
56
+ remaining_text = text[len(first_term) :].lstrip()
57
+ move_cursor = len(text) - len(remaining_text) + stripped_len
58
+
59
+ remaining_text = remaining_text[len(second_term) :].lstrip()
60
+ move_cursor = len(text) - len(remaining_text) + stripped_len
61
+
62
+ new_document = Document(
63
+ remaining_text,
64
+ cursor_position=document.cursor_position - move_cursor,
65
+ )
66
+
67
+ for c in completer.get_completions(new_document, complete_event):
68
+ yield c
69
+ else:
70
+ completer = WordCompleter(
71
+ list(self.options.keys()), ignore_case=self.ignore_case
72
+ )
73
+ for c in completer.get_completions(document, complete_event):
74
+ yield c
75
+ else:
76
+ for t in pg_table_names(self.namespace, self.pg_path):
77
+ yield Completion(t)
@@ -105,8 +105,9 @@ def enter_repl(state: ReplState):
105
105
  completions = deep_sort_dict(deep_merge_dicts(completions, cmd.completion(state)))
106
106
  finally:
107
107
  if Config().get('debugs.timings', False):
108
- Config().debug('Timing completion calc', cmd.command(), f'{time.time() - s1:.2f}')
108
+ log2(f'Timing auto-completion-calc {cmd.command()}: {time.time() - s1:.2f}')
109
109
 
110
+ # print(json.dumps(completions, indent=4))
110
111
  completer = NestedCompleter.from_nested_dict(completions)
111
112
 
112
113
  cmd = session.prompt(prompt_msg(), completer=completer, key_bindings=kb)
@@ -153,7 +154,7 @@ def enter_repl(state: ReplState):
153
154
  finally:
154
155
  Config().clear_wait_log_flag()
155
156
  if Config().get('debugs.timings', False) and 'cmd' in locals() and 's0' in locals():
156
- print('Timing command', cmd, f'{time.time() - s0:.2f}')
157
+ log2(f'Timing command {cmd}: {time.time() - s0:.2f}')
157
158
 
158
159
  @cli.command(context_settings=dict(ignore_unknown_options=True, allow_extra_args=True), cls=ClusterCommandHelper, help="Enter interactive shell.")
159
160
  @click.option('--kubeconfig', '-k', required=False, metavar='path', help='path to kubeconfig file')
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ __version__ = "2.0.44" #: the working version
5
+ __release__ = "1.0.0" #: the release version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaqing
3
- Version: 2.0.42
3
+ Version: 2.0.44
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  License: UNKNOWN
@@ -10,6 +10,7 @@ adam/config.py
10
10
  adam/embedded_apps.py
11
11
  adam/embedded_params.py
12
12
  adam/log.py
13
+ adam/pg_table_completer.py
13
14
  adam/pod_exec_result.py
14
15
  adam/repl.py
15
16
  adam/repl_commands.py
@@ -106,11 +107,12 @@ adam/commands/medusa/medusa_restore.py
106
107
  adam/commands/medusa/medusa_show_backupjobs.py
107
108
  adam/commands/medusa/medusa_show_restorejobs.py
108
109
  adam/commands/postgres/__init__.py
109
- adam/commands/postgres/pg_utils.py
110
110
  adam/commands/postgres/postgres.py
111
+ adam/commands/postgres/postgres_completions.py
111
112
  adam/commands/postgres/postgres_ls.py
112
113
  adam/commands/postgres/postgres_preview.py
113
114
  adam/commands/postgres/postgres_session.py
115
+ adam/commands/postgres/postgres_utils.py
114
116
  adam/commands/reaper/__init__.py
115
117
  adam/commands/reaper/reaper.py
116
118
  adam/commands/reaper/reaper_forward.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name='kaqing',
5
- version='2.0.42',
5
+ version='2.0.44',
6
6
  packages=find_packages(),
7
7
  entry_points={
8
8
  'console_scripts': [
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding: utf-8 -*-
3
-
4
- __version__ = "2.0.42" #: the working version
5
- __release__ = "1.0.0" #: the release version
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes