diff --git a/connpy/_version.py b/connpy/_version.py index ce59cc6..150af39 100644 --- a/connpy/_version.py +++ b/connpy/_version.py @@ -1,2 +1,2 @@ -__version__ = "3.4.2" +__version__ = "3.4.3" diff --git a/connpy/completion.py b/connpy/completion.py index 43f7a6c..b2617a6 100755 --- a/connpy/completion.py +++ b/connpy/completion.py @@ -66,14 +66,14 @@ def main(): strings=["profile"] if words[0] in ["list", "ls"]: strings=["profiles", "nodes", "folders"] - if words[0] in ["bulk", "mv", "cp", "copy", "export"]: + if words[0] in ["bulk", "mv", "cp", "copy"]: strings=["--help"] - if words[0] in ["--rm", "--del", "-r", "export"]: + if words[0] in ["--rm", "--del", "-r"]: strings.extend(folders) if words[0] in ["--rm", "--del", "-r", "--mod", "--edit", "-e", "--show", "-s", "mv", "move", "cp", "copy"]: strings.extend(nodes) - if words[0] in ["run", "import"]: - if words[-1] in ["run", "import"]: + if words[0] in ["run", "import", "export"]: + if words[-1] in ["run", "import", "export"]: path = './*' else: path = words[-1] + "*" @@ -83,10 +83,15 @@ def main(): pathstrings[i] += '/' strings = ["--help"] pathstrings = [s[2:] if s.startswith('./') else s for s in pathstrings] + if words[0] == "export": + pathstrings = [s for s in pathstrings if os.path.isdir(s)] strings.extend(pathstrings) if words[0] == "run": strings.extend(nodes) + elif wordsnumber >= 4 and words[0] == "export" and words[1] != "--help": + strings = [item for item in folders if not any(word in item for word in words[:-1])] + elif wordsnumber == 4: strings=[] if words[0] == "profile" and words[1] in ["--rm", "--del", "-r", "--mod", "--edit", "-e", "--show", "-s"]: @@ -98,6 +103,7 @@ def main(): if words[0] == "config" and words[1] in ["--fzf", "--allow-uppercase"]: strings=["true", "false"] + if app == "bash": strings = [s if s.endswith('/') else f"'{s} '" for s in strings] print('\t'.join(strings)) diff --git a/connpy/configfile.py b/connpy/configfile.py index e9165ff..68ef61a 100755 --- a/connpy/configfile.py +++ b/connpy/configfile.py @@ -320,8 +320,10 @@ class configfile: nodes.update(layer3) if filter: if isinstance(filter, str): + filter = "^(?!.*@).+$" if filter == "@" else filter nodes = {k: v for k, v in nodes.items() if re.search(filter, k)} elif isinstance(filter, list): + filter = ["^(?!.*@).+$" if item == "@" else item for item in filter] nodes = {k: v for k, v in nodes.items() if any(re.search(pattern, k) for pattern in filter)} else: raise ValueError("filter must be a string or a list of strings") diff --git a/connpy/connapp.py b/connpy/connapp.py index 219eb46..67c761a 100755 --- a/connpy/connapp.py +++ b/connpy/connapp.py @@ -107,7 +107,7 @@ class connapp: bulkparser.set_defaults(func=self._func_others) # EXPORTPARSER exportparser = subparsers.add_parser("export", help="Export connection folder to Yaml file") - exportparser.add_argument("export", nargs=2, action=self._store_type, help="Export [@subfolder]@folder /path/to/file.yml") + exportparser.add_argument("export", nargs="+", action=self._store_type, help="Export /path/to/file.yml [@subfolder1][@folder1] [@subfolderN][@folderN]") exportparser.set_defaults(func=self._func_export) # IMPORTPARSER importparser = subparsers.add_parser("import", help="Import connection folder to config from Yaml file") @@ -583,11 +583,12 @@ class connapp: exit(10) for k,v in imported.items(): uniques = self.config._explode_unique(k) - folder = f"@{uniques['folder']}" - matches = list(filter(lambda k: k == folder, self.folders)) - if len(matches) == 0: - uniquefolder = self.config._explode_unique(folder) - self.config._folder_add(**uniquefolder) + if "folder" in uniques: + folder = f"@{uniques['folder']}" + matches = list(filter(lambda k: k == folder, self.folders)) + if len(matches) == 0: + uniquefolder = self.config._explode_unique(folder) + self.config._folder_add(**uniquefolder) if "subfolder" in uniques: subfolder = f"@{uniques['subfolder']}@{uniques['folder']}" matches = list(filter(lambda k: k == subfolder, self.folders)) @@ -601,20 +602,23 @@ class connapp: return def _func_export(self, args): - matches = list(filter(lambda k: k == args.data[0], self.folders)) - if len(matches) == 0: - print("{} folder not found".format(args.data[0])) - exit(2) - if os.path.exists(args.data[1]): - print("File {} already exists".format(args.data[1])) + if os.path.exists(args.data[0]): + print("File {} already exists".format(args.data[0])) exit(14) + if len(args.data[1:]) == 0: + foldercons = self.config._getallnodesfull(extract = False) else: - foldercons = self.config._getallnodesfull(args.data[0], extract = False) - with open(args.data[1], "w") as file: - yaml.dump(foldercons, file, Dumper=NoAliasDumper, default_flow_style=False) - file.close() - print("File {} generated succesfully".format(args.data[1])) - exit() + for folder in args.data[1:]: + matches = list(filter(lambda k: k == folder, self.folders)) + if len(matches) == 0 and folder != "@": + print("{} folder not found".format(folder)) + exit(2) + foldercons = self.config._getallnodesfull(args.data[1:], extract = False) + with open(args.data[0], "w") as file: + yaml.dump(foldercons, file, Dumper=NoAliasDumper, default_flow_style=False) + file.close() + print("File {} generated succesfully".format(args.data[0])) + exit() return def _func_run(self, args): diff --git a/docs/connpy/index.html b/docs/connpy/index.html index 3b70611..da7778c 100644 --- a/docs/connpy/index.html +++ b/docs/connpy/index.html @@ -1614,8 +1614,10 @@ Categorize the user's request based on the operation they want to perform on nodes.update(layer3) if filter: if isinstance(filter, str): + filter = "^(?!.*@).+$" if filter == "@" else filter nodes = {k: v for k, v in nodes.items() if re.search(filter, k)} elif isinstance(filter, list): + filter = ["^(?!.*@).+$" if item == "@" else item for item in filter] nodes = {k: v for k, v in nodes.items() if any(re.search(pattern, k) for pattern in filter)} else: raise ValueError("filter must be a string or a list of strings") @@ -1894,7 +1896,7 @@ Categorize the user's request based on the operation they want to perform on bulkparser.set_defaults(func=self._func_others) # EXPORTPARSER exportparser = subparsers.add_parser("export", help="Export connection folder to Yaml file") - exportparser.add_argument("export", nargs=2, action=self._store_type, help="Export [@subfolder]@folder /path/to/file.yml") + exportparser.add_argument("export", nargs="+", action=self._store_type, help="Export /path/to/file.yml [@subfolder1][@folder1] [@subfolderN][@folderN]") exportparser.set_defaults(func=self._func_export) # IMPORTPARSER importparser = subparsers.add_parser("import", help="Import connection folder to config from Yaml file") @@ -2370,11 +2372,12 @@ Categorize the user's request based on the operation they want to perform on exit(10) for k,v in imported.items(): uniques = self.config._explode_unique(k) - folder = f"@{uniques['folder']}" - matches = list(filter(lambda k: k == folder, self.folders)) - if len(matches) == 0: - uniquefolder = self.config._explode_unique(folder) - self.config._folder_add(**uniquefolder) + if "folder" in uniques: + folder = f"@{uniques['folder']}" + matches = list(filter(lambda k: k == folder, self.folders)) + if len(matches) == 0: + uniquefolder = self.config._explode_unique(folder) + self.config._folder_add(**uniquefolder) if "subfolder" in uniques: subfolder = f"@{uniques['subfolder']}@{uniques['folder']}" matches = list(filter(lambda k: k == subfolder, self.folders)) @@ -2388,20 +2391,23 @@ Categorize the user's request based on the operation they want to perform on return def _func_export(self, args): - matches = list(filter(lambda k: k == args.data[0], self.folders)) - if len(matches) == 0: - print("{} folder not found".format(args.data[0])) - exit(2) - if os.path.exists(args.data[1]): - print("File {} already exists".format(args.data[1])) + if os.path.exists(args.data[0]): + print("File {} already exists".format(args.data[0])) exit(14) + if len(args.data[1:]) == 0: + foldercons = self.config._getallnodesfull(extract = False) else: - foldercons = self.config._getallnodesfull(args.data[0], extract = False) - with open(args.data[1], "w") as file: - yaml.dump(foldercons, file, Dumper=NoAliasDumper, default_flow_style=False) - file.close() - print("File {} generated succesfully".format(args.data[1])) - exit() + for folder in args.data[1:]: + matches = list(filter(lambda k: k == folder, self.folders)) + if len(matches) == 0 and folder != "@": + print("{} folder not found".format(folder)) + exit(2) + foldercons = self.config._getallnodesfull(args.data[1:], extract = False) + with open(args.data[0], "w") as file: + yaml.dump(foldercons, file, Dumper=NoAliasDumper, default_flow_style=False) + file.close() + print("File {} generated succesfully".format(args.data[0])) + exit() return def _func_run(self, args): @@ -3147,7 +3153,7 @@ tasks:
-def start(self, argv=['connpy', '-o', 'docs/', '--force', '--html'])
+def start(self, argv=['connpy', '--html', '-o', 'docs/', '-f'])