From 6e528248414e330c9e25e81596ab47b8b8a5b701 Mon Sep 17 00:00:00 2001
From: terminaldweller <thabogre@gmail.com>
Date: Fri, 14 May 2021 22:44:50 +0430
Subject: first commit

---
 python/deviutil.py | 229 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 python/main.py     |  52 ++++++++++++
 2 files changed, 281 insertions(+)
 create mode 100755 python/deviutil.py
 create mode 100755 python/main.py

(limited to 'python')

diff --git a/python/deviutil.py b/python/deviutil.py
new file mode 100755
index 0000000..efbfe8b
--- /dev/null
+++ b/python/deviutil.py
@@ -0,0 +1,229 @@
+#!/usr/bin/python3
+
+import argparse
+import code
+import signal
+import sys
+import socket
+from abc import ABCMeta, abstractmethod
+
+
+class Colors:
+    purple = '\033[95m'
+    blue = '\033[94m'
+    green = '\033[92m'
+    yellow = '\033[93m'
+    red = '\033[91m'
+    grey = '\033[1;37m'
+    darkgrey = '\033[1;30m'
+    cyan = '\033[1;36m'
+    ENDC = '\033[0m'
+    BOLD = '\033[1m'
+    UNDERLINE = '\033[4m'
+
+
+def SigHandler_SIGINT(signum, frame):
+    print()
+    sys.exit(0)
+
+
+class Argparser(object):
+    def __init__(self):
+        parser = argparse.ArgumentParser()
+        parser.add_argument("--string", type=str, help="string")
+        parser.add_argument("--bool", action="store_true",
+                            help="bool", default=False)
+        parser.add_argument("--dbg", action="store_true",
+                            help="debug", default=False)
+        self.args = parser.parse_args()
+
+
+def ffs(offset, header_list, numbered, *args):
+    cn = Colors.green
+    ch = Colors.cyan
+    cd = Colors.blue
+    cb = Colors.BOLD
+    ci = Colors.red
+    ce = Colors.ENDC
+    max_column_width = []
+    lines = []
+    numbers_f = []
+    dummy = []
+
+    if numbered:
+        numbers_f.extend(range(1, len(args[-1])+1))
+        max_column_width.append(
+            max([len(repr(number)) for number in numbers_f]))
+        header_list.insert(0, "idx")
+
+    for arg in args:
+        max_column_width.append(max([len(repr(argette)) for argette in arg]))
+
+    index = range(0, len(header_list))
+    for header, width, i in zip(header_list, max_column_width, index):
+        max_column_width[i] = max(len(header), width) + offset
+
+    for i in index:
+        dummy.append(ch + cb + header_list[i].ljust(max_column_width[i]) + ce)
+    lines.append("".join(dummy))
+    dummy.clear()
+
+    index2 = range(0, len(args[-1]))
+    for i in index2:
+        if numbered:
+            dummy.append(ci+cb+repr(i).ljust(max_column_width[0])+ce)
+            for arg, width in zip(args, max_column_width[1:]):
+                dummy.append(cd+repr(arg[i]).ljust(width)+ce)
+        else:
+            for arg, width in zip(args, max_column_width):
+                dummy.append(cd+repr(arg[i]).ljust(width)+ce)
+        lines.append("".join(dummy))
+        dummy.clear()
+    return lines
+
+
+class Demon_Father:
+    __metalclass__ = ABCMeta
+
+    def __init__(self, pidfile):
+        self.pidfile = pidfile
+        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        self.server_address = ('localhost', 10000)
+
+    def daemonize(self):
+        try:
+            pid = os.fork()
+            if pid > 0:
+                sys.exit(0)
+        except OSError as err:
+            sys.stderr.write('fork #1 failed: {0}\n'.format(err))
+            sys.exit(1)
+        os.chdir('/')
+        os.setsid()
+        os.umask(0)
+        try:
+            pid = os.fork()
+            if pid > 0:
+                sys.exit(0)
+        except OSError as err:
+            sys.stderr.write('fork #2 failed: {0}\n'.format(err))
+            sys.exit(1)
+        sys.stdout.flush()
+        sys.stderr.flush()
+        si = open(os.devnull, 'r')
+        so = open(os.devnull, 'a+')
+        se = open(os.devnull, 'a+')
+        os.dup2(si.fileno(), sys.stdin.fileno())
+        os.dup2(so.fileno(), sys.stdout.fileno())
+        os.dup2(se.fileno(), sys.stderr.fileno())
+        atexit.register(self.delpid)
+        pid = str(os.getpid())
+        with open(self.pidfile, 'w+') as f:
+            f.write(pid + '\n')
+
+    def delpid(self):
+        self.pidfile.close()
+        os.remove(self.pidfile)
+
+    def start(self):
+        self.daemonize()
+        try:
+            with open(self.pidfile, 'r') as pf:
+                pid = int(pf.read().strip())
+        except IOError:
+            pid = None
+            '''
+        if pid:
+            message = "pidfile {0} already exist. " + "Daemon already running?\n"
+            sys.stderr.write(message.format(self.pidfile))
+            sys.exit(1)
+            '''
+        self.run()
+
+    def stop(self):
+        try:
+            with open(self.pidfile, 'r') as pf:
+                pid = int(pf.read().strip())
+        except IOError:
+            pid = None
+        if not pid:
+            message = "pidfile {0} does not exist. " + "Daemon not running?\n"
+            sys.stderr.write(message.format(self.pidfile))
+            return
+        try:
+            while 1:
+                os.kill(pid, signal.SIGTERM)
+                time.sleep(0.1)
+        except OSError as err:
+            e = str(err.args)
+            if e.find("No such process") > 0:
+                if os.path.exists(self.pidfile):
+                    os.remove(self.pidfile)
+            else:
+                print(str(err.args))
+                sys.exit(1)
+
+    def restart(self):
+        self.stop()
+        self.start()
+
+    @abstractmethod
+    def run(self):
+        pass
+
+
+def hexdump(obj):
+    count = int()
+    strrep = []
+    for byte in obj:
+        if count % 16 == 0:
+            for ch in strrep:
+                if ord(ch) > 32 and ord(ch) < 127:
+                    print(ch, end='')
+                else:
+                    pass
+            print()
+            strrep = []
+            print(format(count, "06x"), ': ', end='')
+            strrep.append(str(chr(byte)))
+            print(format(byte, '02x') + ' ', end='')
+        else:
+            pass
+            strrep += str(chr(byte))
+            print(format(byte, '02x') + ' ', end='')
+        count += 1
+    for i in range(0, 16-count % 16):
+        print("   ", end="")
+    for ch in strrep:
+        if ord(ch) > 32 and ord(ch) < 127:
+            print(ch, end='')
+        else:
+            pass
+    print()
+
+
+# write code here
+def premain(argparser):
+    signal.signal(signal.SIGINT, SigHandler_SIGINT)
+    # here
+    a = [0x2f, 0x6c, 0x69, 0x62, 0x36, 0x34, 0x2f, 0x6c, 0x64, 0x2d, 0x6c,
+         0x69, 0x6e, 0x75, 0x78, 0x2d, 0x78, 0x38, 0x36, 0x2d, 0x36, 0x34, 0x2e, 0x73, 0x6f, 0x2e, 0x32, 0x00]
+    hexdump(a)
+
+
+def main():
+    argparser = Argparser()
+    if argparser.args.dbg:
+        try:
+            premain(argparser)
+        except:
+            variables = globals().copy()
+            variables.update(locals())
+            shell = code.InteractiveConsole(variables)
+            shell.interact(banner="DEBUG REPL")
+    else:
+        premain(argparser)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/python/main.py b/python/main.py
new file mode 100755
index 0000000..6649cb2
--- /dev/null
+++ b/python/main.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python3
+# _*_ coding=utf-8 _*_
+
+import argparse
+import code
+import signal
+import sys
+
+
+def SigHandler_SIGINT(signum, frame):
+    print()
+    sys.exit(0)
+
+
+class Argparser(object):
+    def __init__(self):
+        parser = argparse.ArgumentParser()
+        parser.add_argument("--string", type=str, help="string")
+        parser.add_argument("--bool", action="store_true",
+                            help="bool", default=False)
+        parser.add_argument("--dbg", action="store_true",
+                            help="debug", default=False)
+        self.args = parser.parse_args()
+
+# write code here
+
+
+def premain(argparser):
+    signal.signal(signal.SIGINT, SigHandler_SIGINT)
+    # here
+
+
+def main():
+    argparser = Argparser()
+    if argparser.args.dbg:
+        try:
+            premain(argparser)
+        except Exception as e:
+            if hasattr(e, "__doc__"):
+                print(e.__doc__)
+            if hasattr(e, "message"):
+                print(e.message)
+            variables = globals().copy()
+            variables.update(locals())
+            shell = code.InteractiveConsole(variables)
+            shell.interact(banner="DEBUG REPL")
+    else:
+        premain(argparser)
+
+
+if __name__ == "__main__":
+    main()
-- 
cgit v1.2.3