kaqing 1.98.137__py3-none-any.whl → 1.98.139__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.
adam/batch.py CHANGED
@@ -22,7 +22,6 @@ from adam.commands.report import Report
22
22
  from adam.commands.restart import Restart
23
23
  from adam.commands.rollout import RollOut
24
24
  from adam.commands.show.show import Show, ShowCommandHelper
25
- from adam.commands.user_entry import UserEntry
26
25
  from adam.commands.watch import Watch
27
26
  from adam.k8s_utils.kube_context import KubeContext
28
27
  from adam.repl import enter_repl
@@ -261,16 +260,6 @@ def undeploy(kubeconfig: str, config: str, param: list[str], namespace: str, ext
261
260
  run_command(Undeploy(), kubeconfig, config, param, None, namespace, None, extra_args)
262
261
 
263
262
 
264
- @cli.command(context_settings=dict(ignore_unknown_options=True, allow_extra_args=True), cls=PodCommandHelper, help='Get cassandra log.')
265
- @click.option('--kubeconfig', '-k', required=False, metavar='path', help='path to kubeconfig file')
266
- @click.option('--config', default='params.yaml', metavar='path', help='path to kaqing parameters file')
267
- @click.option('--param', '-v', multiple=True, metavar='<key>=<value>', help='parameter override')
268
- @click.option('--namespace', '-n', required=False, metavar='namespace', help='Kubernetes namespace')
269
- @click.argument('extra_args', nargs=-1, metavar='<pod>', type=click.UNPROCESSED)
270
- def entry(kubeconfig: str, config: str, param: list[str], namespace: str, extra_args):
271
- run_command(UserEntry(), kubeconfig, config, param, None, namespace, None, extra_args)
272
-
273
-
274
263
  @cli.command(context_settings=dict(ignore_unknown_options=True, allow_extra_args=True), cls=ClusterOrPodCommandHelper, help='Watch pods in cluster.')
275
264
  @click.option('--kubeconfig', '-k', required=False, metavar='path', help='path to kubeconfig file')
276
265
  @click.option('--config', default='params.yaml', metavar='path', help='path to kaqing parameters file')
@@ -283,7 +272,7 @@ def watch(kubeconfig: str, config: str, param: list[str], cluster: str, namespac
283
272
 
284
273
 
285
274
  def run_command(cmd: Command, kubeconfig: str, config: str, params: list[str], cluster:str, namespace: str, pod: str, extra_args):
286
- is_user_entry = cmd.command() == UserEntry().command()
275
+ is_user_entry = False
287
276
 
288
277
  KubeContext.init_config(kubeconfig, is_user_entry=is_user_entry)
289
278
  if not KubeContext.init_params(config, params, is_user_entry=is_user_entry):
adam/version.py CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding: utf-8 -*-
3
3
 
4
- __version__ = "1.98.137" #: the working version
4
+ __version__ = "1.98.139" #: the working version
5
5
  __release__ = "1.0.0" #: the release version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: kaqing
3
- Version: 1.98.137
3
+ Version: 1.98.139
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  License: UNKNOWN
@@ -1,7 +1,7 @@
1
1
  adam/__init__.py,sha256=oVw1FNd9HZPJ7wm6BNn5ybyNGJLjJ8kopMeBiwgMaOI,59
2
2
  adam/app_session.py,sha256=Klypm4JYHOlovaRCHAZ2P_Mj_nheMlcQgX403R0TJGk,6969
3
3
  adam/apps.py,sha256=UTpUJBAMRFvR8kJZwileGC0UmPvsOjJ_AgvWoGmnIFI,6701
4
- adam/batch.py,sha256=Bf5Q07_DW8FEUwuXCq70qjkKs2Sarv1ujNYpBFBQfQM,24102
4
+ adam/batch.py,sha256=o82yYDgyoJw1t87QyAfn9jGqIcWX23ehRI21U4JUTv8,23221
5
5
  adam/cli.py,sha256=03pIZdomAu7IL-GSP6Eun_PKwwISShRAmfx6eVRPGC0,458
6
6
  adam/cli_group.py,sha256=W3zy1BghCtVcEXizq8fBH-93ZRVVwgAyGPzy0sHno1Y,593
7
7
  adam/config.py,sha256=38UcmYRxf-Kq4iPbKS7tNPQqN64fam1bWNy6jhWREd0,2552
@@ -14,7 +14,7 @@ adam/repl_commands.py,sha256=ionPWjPhzrzm59zbhO1WsGGcLVba3bnPl6uPjvQ4C34,4093
14
14
  adam/repl_session.py,sha256=uIogcvWBh7wd8QQ-p_JgLsyJ8YJgINw5vOd6JIsd7Vo,472
15
15
  adam/repl_state.py,sha256=QarrUAwYWOz3YTemtaf2opbHLa5a3LEsyuonNwhvOhk,7131
16
16
  adam/utils.py,sha256=j7p7iruLuV11swa0z9ZLBgoJHu_nkTSVKtQe0q71gmk,7025
17
- adam/version.py,sha256=hkdSB7jQd7sx68C4limTG--1XsA1tCsUDYlYQsBH1jQ,141
17
+ adam/version.py,sha256=rQTb_obJrUOP5N1EJzEqcCJkxbkdKobYc_9ZyhKgA7A,141
18
18
  adam/checks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  adam/checks/check.py,sha256=Qopr3huYcMu2bzQgb99dEUYjFzkjKHRI76S6KA9b9Rk,702
20
20
  adam/checks/check_context.py,sha256=FEHkQ32jY1EDopQ2uYWqy9v7aEEX1orLpJWhopwAlh4,402
@@ -76,7 +76,6 @@ adam/commands/report.py,sha256=Ky45LIzSlB_X4V12JZWjU3SA2u4_FKRencRTq7psOWU,1944
76
76
  adam/commands/restart.py,sha256=Hik1t5rjH2ATZv4tzwrGB3e44b3dNuATgY327_Nb8Bs,2044
77
77
  adam/commands/rollout.py,sha256=52_4ijna3v-8Oug12et43DRHFDNhiN34p6xLTQmhdbQ,2959
78
78
  adam/commands/shell.py,sha256=wY_PIx7Lt6vuxhFArlfxdEnBbrouCJ3yNHhFn17DEqw,848
79
- adam/commands/user_entry.py,sha256=TJBffUJTVAuJw-UJWv2JOoeEy1iQBXAOLahQJsmX1RY,4719
80
79
  adam/commands/watch.py,sha256=mmBFpB8T1V7zrNs5b2YNyDDztMym_ILPDdkrbdAXTas,2438
81
80
  adam/commands/deploy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
81
  adam/commands/deploy/code_start.py,sha256=-iH8HThTNM83IfBxT_LqTByuHVatV9d-Il4OYOfrwLI,1370
@@ -157,8 +156,8 @@ adam/sso/idp.py,sha256=fvcwUw_URTgsO6ySaqTIw0zQT2qRO1IPSGhf6rPtybo,5804
157
156
  adam/sso/idp_login.py,sha256=QAtCUeDTVWliJy40RK_oac8Vgybr13xH8wzeBoxPaa8,1754
158
157
  adam/sso/idp_session.py,sha256=9BUHNRf70u4rVKrVY1HKPOEmOviXvkjam8WJxmXSKIM,1735
159
158
  adam/sso/sso_config.py,sha256=5N8WZgIJQBtHUy585XLRWKjpU87_v6QluyNK9E27D5s,2459
160
- kaqing-1.98.137.dist-info/METADATA,sha256=_FcNlCuY04Z-UEQu0IULyiTZN-XgLfpJh9F2JSsvC8k,134
161
- kaqing-1.98.137.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
162
- kaqing-1.98.137.dist-info/entry_points.txt,sha256=SkzhuQJUWsXOzHeZ5TgQ2c3_g53UGK23zzJU_JTZOZI,39
163
- kaqing-1.98.137.dist-info/top_level.txt,sha256=8_2PZkwBb-xDcnc8a2rAbQeJhXKXskc7zTP7pSPa1fw,5
164
- kaqing-1.98.137.dist-info/RECORD,,
159
+ kaqing-1.98.139.dist-info/METADATA,sha256=piyMN5GQFcQcua01ZJ4CDsD7yi_qlSINzeMBOaJaiDs,134
160
+ kaqing-1.98.139.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
161
+ kaqing-1.98.139.dist-info/entry_points.txt,sha256=SkzhuQJUWsXOzHeZ5TgQ2c3_g53UGK23zzJU_JTZOZI,39
162
+ kaqing-1.98.139.dist-info/top_level.txt,sha256=8_2PZkwBb-xDcnc8a2rAbQeJhXKXskc7zTP7pSPa1fw,5
163
+ kaqing-1.98.139.dist-info/RECORD,,
@@ -1,133 +0,0 @@
1
- from functools import partial
2
- from http.server import BaseHTTPRequestHandler, HTTPServer
3
- import os
4
- import re
5
- import subprocess
6
- import signal
7
- import threading
8
- import traceback
9
-
10
- from adam.commands.deploy.code_utils import get_available_port
11
- from adam.config import Config
12
- from adam.sso.idp import Idp
13
- from adam.app_session import AppSession, IdpLogin
14
- from adam.apps import Apps
15
- from adam.commands.command import Command
16
- from adam.repl_state import ReplState
17
- from adam.utils import log2
18
-
19
- class TokenHandler(BaseHTTPRequestHandler):
20
- def __init__(self, port: int, user: str, idp_token: str, *args, **kwargs):
21
- self.port = port
22
- self.user = user
23
- self.idp_token = idp_token
24
- super().__init__(*args, **kwargs)
25
-
26
- def log_request(self, code='-', size='-'):
27
- pass
28
-
29
- def do_GET(self):
30
- Config().debug(f'Token request from cient: {self.client_address}\r')
31
- ports = self.get_user_ports()
32
- Config().debug(f'ports: {ports}\r')
33
- if os.getenv('CHECK_CLIENT_PORT', 'true').lower() != 'true' or self.client_address[1] in ports:
34
- self.send_response(200)
35
- self.send_header('Content-type', 'text/plain')
36
- self.end_headers()
37
- self.wfile.write(self.idp_token.encode('utf8'))
38
- else:
39
- self.send_response(403)
40
- self.send_header('Content-type', 'text/plain')
41
- self.end_headers()
42
- self.wfile.write(f'Port: {self.port} has not been opened by you.\n'.encode('utf8'))
43
-
44
- def get_user_ports(self):
45
- # this needs SYS_PTRACE capability with the container
46
- ports = []
47
-
48
- # curl 627299 sahn 5u IPv4 542049941 0t0 TCP localhost:39524->localhost:8001 (ESTABLISHED)
49
- command = ['bash', '-c', f"lsof -i -P 2> /dev/null | grep {self.user} | grep localhost" + " | awk '{print $9}'"]
50
- result = subprocess.run(command, capture_output=True, text=True, check=True)
51
- for line in result.stdout.split('\n'):
52
- groups = re.match(r'localhost:(.*?)->localhost:(.*)$', line)
53
- if groups:
54
- ports.append(int(groups[1]))
55
-
56
- return ports
57
-
58
- class UserEntry(Command):
59
- COMMAND = 'entry'
60
-
61
- # the singleton pattern
62
- def __new__(cls, *args, **kwargs):
63
- if not hasattr(cls, 'instance'): cls.instance = super(UserEntry, cls).__new__(cls)
64
-
65
- return cls.instance
66
-
67
- def __init__(self, successor: Command=None):
68
- super().__init__(successor)
69
-
70
- def command(self):
71
- return UserEntry.COMMAND
72
-
73
- def run_token_server(port: int, user: str, idp_token: str):
74
- server_address = ('localhost', port)
75
- handler = partial(TokenHandler, port, user, idp_token)
76
- httpd = HTTPServer(server_address, handler)
77
- Config().debug(f"Serving on port {port}")
78
- httpd.serve_forever()
79
-
80
- def run(self, cmd: str, state: ReplState):
81
- def custom_handler(signum, frame):
82
- AppSession.ctrl_c_entered = True
83
-
84
- signal.signal(signal.SIGINT, custom_handler)
85
-
86
- if not(args := self.args(cmd)):
87
- return super().run(cmd, state)
88
-
89
- state, args = self.apply_state(args, state)
90
- args, debug = Command.extract_options(args, 'd')
91
- if debug:
92
- Config().set('debug.show-out', True)
93
-
94
- username: str = None
95
- if len(args) > 0:
96
- username = args[0]
97
-
98
- login: IdpLogin = None
99
- while not login:
100
- try:
101
- if not(host := Apps.app_host('c3', 'c3', state.namespace)):
102
- log2('Cannot locate ingress for app.')
103
- username = None
104
- continue
105
-
106
- if not (login := Idp.login(host, username=username, use_token_from_env=False, use_cached_creds=False)):
107
- log2('Invalid username/password. Please try again.')
108
- username = None
109
- except Exception as e:
110
- log2(e)
111
-
112
- Config().debug(traceback.format_exc())
113
-
114
- server_port = get_available_port()
115
- server_thread = threading.Thread(target=UserEntry.run_token_server, args=(server_port, login.shell_user(), login.ser()), daemon=True)
116
- server_thread.start()
117
-
118
- sh = f'{os.getcwd()}/login.sh'
119
- if not os.path.exists(sh):
120
- sh = f'{os.getcwd()}/docker/login.sh'
121
-
122
- if os.getenv('PASS_DOWN_IDP_TOKEN', "false").lower() == "true":
123
- os.system(f'{sh} {login.shell_user()} {server_port} {login.ser()}')
124
- else:
125
- os.system(f'{sh} {login.shell_user()} {server_port}')
126
-
127
- return state
128
-
129
- def completion(self, _: ReplState):
130
- return {}
131
-
132
- def help(self, _: ReplState):
133
- return f'{UserEntry.COMMAND}\t ttyd user entry'