diff options
| author | Jan Tuomi <jan-sebastian.tuomi@aalto.fi> | 2016-03-17 20:55:11 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan-sebastian.tuomi@aalto.fi> | 2016-03-17 23:02:34 +0200 |
| commit | b6dc3ba88e5ef0a7e4509c88665372cb04a36f06 (patch) | |
| tree | 11649dec1e48377571a98edea0a9fdf0b2fcb377 /src | |
| parent | ddbf8a86cf4ef071f289aceda1035818948d2292 (diff) | |
Arch packaging
Diffstat (limited to 'src')
| -rw-r--r-- | src/python-sshmgr/setup.py | 16 | ||||
| -rw-r--r-- | src/python-sshmgr/sshmgr/__init__.py | 0 | ||||
| -rwxr-xr-x | src/python-sshmgr/sshmgr/manager.py | 100 | ||||
| -rw-r--r-- | src/python-sshmgr/sshmgr/utils/__init__.py | 0 | ||||
| -rw-r--r-- | src/python-sshmgr/sshmgr/utils/getch.py | 40 |
5 files changed, 156 insertions, 0 deletions
diff --git a/src/python-sshmgr/setup.py b/src/python-sshmgr/setup.py new file mode 100644 index 0000000..2889e9b --- /dev/null +++ b/src/python-sshmgr/setup.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python + +from setuptools import setup + +setup(name='sshmgr', + version='0.1', + description='', + author='Jan Tuomi', + author_email='jan-sebastian.tuomi@aalto.fi', + url='', + packages=['sshmgr', 'sshmgr.utils'], + entry_points= {'console_scripts': [ + 'sshmgr = sshmgr.manager:start', + ], + }, +) diff --git a/src/python-sshmgr/sshmgr/__init__.py b/src/python-sshmgr/sshmgr/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/python-sshmgr/sshmgr/__init__.py diff --git a/src/python-sshmgr/sshmgr/manager.py b/src/python-sshmgr/sshmgr/manager.py new file mode 100755 index 0000000..a55aa07 --- /dev/null +++ b/src/python-sshmgr/sshmgr/manager.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +from os import system +from sshmgr.utils.getch import getch +import os.path + +CONN_DB_PATH = os.path.join(os.path.expanduser("~"), ".sshmgr-db") + +class Manager: + def __init__(self): + pass + + def load_conns(self): + conns = [] + try: + with open(CONN_DB_PATH) as f: + conns = [l.strip() for l in f.readlines()] + except FileNotFoundError: + with open(CONN_DB_PATH, 'w') as f: + conns = [] + except: + print("Could not load connections from file. ({:s})".format(CONN_DB_PATH)) + getch() + + return conns + + def create_new(self, conns): + name = input("Name the new connection: ") + conns.append(name) + + self.save_conns(conns) + + def save_conns(self, conns): + with open(CONN_DB_PATH, 'w') as f: + for conn in conns: + f.write("{:s}\n".format(conn)) + + def get_connection(self, conns, c): + try: + num = int(c) + except ValueError: + print("Selection needs to be a number!") + return False + + if num < 1 or num > len(conns): + print("Selection not in range!") + return False + + selection = conns[num - 1] + return selection + + def connect(self, connection): + system("screen ssh {}".format(connection)) + + def delete_conn(self, conns): + c = input("Which connection should be removed? ") + deleted = self.get_connection(conns, c) + if not deleted: + print("Nothing was deleted.") + getch() + return + + conns = [conn for conn in conns if conn != deleted] + self.save_conns(conns) + + def run(self): + running = True + while running: + conns = self.load_conns() + system("clear") + + print("Select connection: ") + for i,conn in enumerate(conns): + print("({:d}) {:s}".format(i + 1, conn)) + print("(n) New connection") + print("(d) Delete connection") + print("(q) Quit") + + c = getch() + + if (c == "q"): + return + elif (c == "d"): + self.delete_conn(conns) + elif (c == "n"): + self.create_new(conns) + else: + connection = self.get_connection(conns, c) + if not connection: + print("Select a valid connection.") + getch() + else: + self.connect(connection) + return + +def start(): + s = Manager() + s.run() + +if __name__ == "__main__": + start() diff --git a/src/python-sshmgr/sshmgr/utils/__init__.py b/src/python-sshmgr/sshmgr/utils/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/src/python-sshmgr/sshmgr/utils/__init__.py diff --git a/src/python-sshmgr/sshmgr/utils/getch.py b/src/python-sshmgr/sshmgr/utils/getch.py new file mode 100644 index 0000000..3ee4b25 --- /dev/null +++ b/src/python-sshmgr/sshmgr/utils/getch.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +class _Getch: + """Gets a single character from standard input. Does not echo to the +screen.""" + def __init__(self): + try: + self.impl = _GetchWindows() + except ImportError: + self.impl = _GetchUnix() + + def __call__(self): return self.impl() + + +class _GetchUnix: + def __init__(self): + import tty, sys + + def __call__(self): + import sys, tty, termios + fd = sys.stdin.fileno() + old_settings = termios.tcgetattr(fd) + try: + tty.setraw(sys.stdin.fileno()) + ch = sys.stdin.read(1) + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) + return ch + + +class _GetchWindows: + def __init__(self): + import msvcrt + + def __call__(self): + import msvcrt + return msvcrt.getch() + + +getch = _Getch() |
