dockge-cli/dockge_cli/client/commands/functions.py

138 lines
3.8 KiB
Python
Raw Normal View History

2024-07-03 18:36:22 +00:00
from urllib.parse import urlparse
from getpass import getpass
import re
2024-07-03 18:36:22 +00:00
from ...models import Credentials
from ...service import storage
2024-07-12 21:25:52 +00:00
from ...service.connection import DockgeConnection
2024-07-05 22:16:41 +00:00
from ..utils import stack_formatter, status_formatter, generic_formatter, credential_parser_factory
2024-07-03 18:36:22 +00:00
2024-07-05 22:16:41 +00:00
class FunctionBindings():
2024-07-05 14:05:35 +00:00
"""
Helper class that provides all the static methods in an organized way
This is an abstraction layer of the CLI, as those functions only do little preprocessing before calling the actural DockgeConnection
"""
2024-07-03 18:36:22 +00:00
@staticmethod
def __setup():
2024-07-05 22:16:41 +00:00
"""
Creates a connection and logs into Dockge
"""
2024-07-03 18:36:22 +00:00
con = DockgeConnection()
con.connect_and_login()
return con
@staticmethod
def host(extra_args):
2024-07-05 14:05:35 +00:00
"""
host command binding
"""
2024-07-03 18:36:22 +00:00
if len(extra_args) > 0:
mat = re.search(r"((\w+\.)?\w+\.\w+(\/.+)?)", extra_args[0], re.IGNORECASE)
if mat is None:
raise ValueError("Given host did not match regex")
res = urlparse(f"https://{mat[0]}")
2024-07-03 18:36:22 +00:00
if all([res.scheme, res.netloc]):
storage.put("host", mat[0])
2024-07-03 18:36:22 +00:00
else:
raise ValueError(f"Malformed URL {extra_args[0]}")
print(storage.get("host"))
@staticmethod
def login(extra_args):
2024-07-05 14:05:35 +00:00
"""
login command binding
"""
print(f"WARNING! These credentials will be saved unencrypted in {storage._file.absolute()}")
2024-07-03 18:36:22 +00:00
if len(extra_args) > 0:
2024-07-05 22:16:41 +00:00
credentials = credential_parser_factory().parse_args(extra_args, namespace=Credentials)
2024-07-03 18:36:22 +00:00
storage.put("username", credentials.username, encoded=True)
storage.put("password", credentials.password, encoded=True)
return
storage.put("username", input("Username: "), encoded=True)
storage.put("password", getpass("Password: "), encoded=True)
@staticmethod
def logout(_):
2024-07-05 14:05:35 +00:00
"""
logout command binding
"""
2024-07-03 18:36:22 +00:00
storage.remove("username")
storage.remove("password")
@staticmethod
def exit(_):
2024-07-05 14:05:35 +00:00
"""
exit command binding
"""
2024-07-03 18:36:22 +00:00
storage.clear()
@staticmethod
def list(_):
2024-07-05 14:05:35 +00:00
"""
list command binding
"""
2024-07-05 22:16:41 +00:00
con = FunctionBindings.__setup()
2024-07-03 18:36:22 +00:00
stack_formatter(con.list_stacks())
con.disconnect()
@staticmethod
def status(extra_args):
2024-07-05 14:05:35 +00:00
"""
status command binding
"""
2024-07-05 22:16:41 +00:00
con = FunctionBindings.__setup()
2024-07-03 18:36:22 +00:00
status_formatter(con.list_stack(extra_args[0]))
con.disconnect()
@staticmethod
def restart(extra_args):
2024-07-05 14:05:35 +00:00
"""
restart command binding
"""
2024-07-05 22:16:41 +00:00
con = FunctionBindings.__setup()
2024-07-03 18:36:22 +00:00
generic_formatter(con.restart(extra_args[0]))
con.disconnect()
@staticmethod
def update(extra_args):
2024-07-05 14:05:35 +00:00
"""
update command binding
"""
2024-07-05 22:16:41 +00:00
con = FunctionBindings.__setup()
2024-07-03 18:36:22 +00:00
generic_formatter(con.update(extra_args[0]))
con.disconnect()
@staticmethod
def stop(extra_args):
2024-07-05 14:05:35 +00:00
"""
stop command binding
"""
2024-07-05 22:16:41 +00:00
con = FunctionBindings.__setup()
2024-07-03 18:36:22 +00:00
generic_formatter(con.stop(extra_args[0]))
con.disconnect()
@staticmethod
def start(extra_args):
2024-07-05 14:05:35 +00:00
"""
start command binding
"""
2024-07-05 22:16:41 +00:00
con = FunctionBindings.__setup()
2024-07-03 18:36:22 +00:00
generic_formatter(con.start(extra_args[0]))
con.disconnect()
@staticmethod
def down(extra_args):
2024-07-05 14:05:35 +00:00
"""
down command binding
"""
2024-07-05 22:16:41 +00:00
con = FunctionBindings.__setup()
2024-07-03 18:36:22 +00:00
generic_formatter(con.down(extra_args[0]))
con.disconnect()
@staticmethod
def help():
2024-07-05 14:05:35 +00:00
"""
exit command binding - This should never be invoked
"""
2024-07-03 18:36:22 +00:00
print("WTF")