prepare for nodes parallel

This commit is contained in:
fluzzi 2022-03-30 17:36:27 -03:00
parent 3b7bee233e
commit 59b38bb58a
3 changed files with 60 additions and 20 deletions

View File

@ -87,14 +87,20 @@ class configfile:
return False return False
return result return result
def getitem(self, unique): def getitem(self, unique, keys = None):
uniques = self._explode_unique(unique) uniques = self._explode_unique(unique)
if unique.startswith("@"): if unique.startswith("@"):
if uniques.keys() >= {"folder", "subfolder"}: if uniques.keys() >= {"folder", "subfolder"}:
folder = self.connections[uniques["folder"]][uniques["subfolder"]] folder = self.connections[uniques["folder"]][uniques["subfolder"]]
else: else:
folder = self.connections[uniques["folder"]] folder = self.connections[uniques["folder"]]
return folder newfolder = folder.copy()
newfolder.pop("type")
if keys == None:
return newfolder
else:
f_newfolder = dict((k, newfolder[k]) for k in keys)
return f_newfolder
else: else:
if uniques.keys() >= {"folder", "subfolder"}: if uniques.keys() >= {"folder", "subfolder"}:
node = self.connections[uniques["folder"]][uniques["subfolder"]][uniques["id"]] node = self.connections[uniques["folder"]][uniques["subfolder"]][uniques["id"]]
@ -102,7 +108,8 @@ class configfile:
node = self.connections[uniques["folder"]][uniques["id"]] node = self.connections[uniques["folder"]][uniques["id"]]
else: else:
node = self.connections[uniques["id"]] node = self.connections[uniques["id"]]
return node newnode = node.copy()
return newnode
def _connections_add(self,*, id, host, folder='', subfolder='', options='', logs='', password='', port='', protocol='', user='', type = "connection" ): def _connections_add(self,*, id, host, folder='', subfolder='', options='', logs='', password='', port='', protocol='', user='', type = "connection" ):
if folder == '': if folder == '':

View File

@ -88,6 +88,10 @@ class connapp:
if args.action == "connect" or args.action == "debug": if args.action == "connect" or args.action == "debug":
if args.data == None: if args.data == None:
matches = self.nodes matches = self.nodes
if len(matches) == 0:
print("There are no nodes created")
print("try: conn --help")
exit(9)
else: else:
if args.data.startswith("@"): if args.data.startswith("@"):
matches = list(filter(lambda k: args.data in k, self.nodes)) matches = list(filter(lambda k: args.data in k, self.nodes))

View File

@ -104,6 +104,8 @@ class node:
def interact(self, debug = False): def interact(self, debug = False):
connect = self._connect(debug = debug) connect = self._connect(debug = debug)
if connect == True: if connect == True:
size = re.search('columns=([0-9]+).*lines=([0-9]+)',str(os.get_terminal_size()))
self.child.setwinsize(int(size.group(2)),int(size.group(1)))
print("Connected to " + self.unique + " at " + self.host + (":" if self.port != '' else '') + self.port + " via: " + self.protocol) print("Connected to " + self.unique + " at " + self.host + (":" if self.port != '' else '') + self.port + " via: " + self.protocol)
if 'logfile' in dir(self): if 'logfile' in dir(self):
self.child.logfile_read = open(self.logfile, "wb") self.child.logfile_read = open(self.logfile, "wb")
@ -121,21 +123,33 @@ class node:
def run(self, commands,*, folder = '', prompt = '>$|#$|\$$|>.$|#.$|\$.$', stdout = False): def run(self, commands,*, folder = '', prompt = '>$|#$|\$$|>.$|#.$|\$.$', stdout = False):
connect = self._connect() connect = self._connect()
if connect == True: if connect == True:
winsize = self.child.getwinsize() expects = [prompt, pexpect.EOF]
self.child.setwinsize(65535,winsize[1])
output = '' output = ''
if isinstance(commands, list): if isinstance(commands, list):
for c in commands: for c in commands:
self.child.expect(prompt) result = self.child.expect(expects)
self.child.sendline(c) self.child.sendline(c)
match result:
case 0:
output = output + self.child.before.decode() + self.child.after.decode() output = output + self.child.before.decode() + self.child.after.decode()
case 1:
output = output + self.child.before.decode()
else: else:
self.child.expect(prompt) result = self.child.expect(expects)
self.child.sendline(commands) self.child.sendline(commands)
match result:
case 0:
output = output + self.child.before.decode() + self.child.after.decode() output = output + self.child.before.decode() + self.child.after.decode()
self.child.expect(prompt) case 1:
output = output + self.child.before.decode()
result = self.child.expect(expects)
match result:
case 0:
output = output + self.child.before.decode() + self.child.after.decode() output = output + self.child.before.decode() + self.child.after.decode()
case 1:
output = output + self.child.before.decode()
self.child.close() self.child.close()
output = output.lstrip()
if stdout == True: if stdout == True:
print(output) print(output)
if folder != '': if folder != '':
@ -146,35 +160,50 @@ class node:
self.output = output self.output = output
return output return output
else: else:
self.output = connect
return connect return connect
def test(self, commands, expected, *, prompt = '>$|#$|\$$|>.$|#.$|\$.$'): def test(self, commands, expected, *, prompt = '>$|#$|\$$|>.$|#.$|\$.$'):
connect = self._connect() connect = self._connect()
if connect == True: if connect == True:
winsize = self.child.getwinsize() expects = [prompt, pexpect.EOF]
self.child.setwinsize(65535,winsize[1])
output = '' output = ''
if isinstance(commands, list): if isinstance(commands, list):
for c in commands: for c in commands:
self.child.expect(prompt) result = self.child.expect(expects)
self.child.sendline(c) self.child.sendline(c)
match result:
case 0:
output = output + self.child.before.decode() + self.child.after.decode() output = output + self.child.before.decode() + self.child.after.decode()
case 1:
output = output + self.child.before.decode()
else: else:
self.child.expect(prompt) self.child.expect(expects)
self.child.sendline(commands) self.child.sendline(commands)
output = output + self.child.before.decode() + self.child.after.decode() output = output + self.child.before.decode() + self.child.after.decode()
expects = [expected, prompt] expects = [expected, prompt, pexpect.EOF]
results = self.child.expect(expects) results = self.child.expect(expects)
output = output + self.child.before.decode() + self.child.after.decode()
self.output = output
match results: match results:
case 0: case 0:
self.child.close() self.child.close()
self.test = True
output = output + self.child.before.decode() + self.child.after.decode()
output = output.lstrip()
self.output = output
return True return True
case 1: case 1 | 2:
self.child.close() self.child.close()
self.test = False
if results == 1:
output = output + self.child.before.decode() + self.child.after.decode()
elif results == 2:
output = output + self.child.before.decode()
output = output.lstrip()
self.output = output
return False return False
else: else:
self.test = None
self.output = connect
return connect return connect
def _connect(self, debug = False): def _connect(self, debug = False):