aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/flupy/cli
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/flupy/cli
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/flupy/cli')
-rw-r--r--.venv/lib/python3.12/site-packages/flupy/cli/__init__.py0
-rw-r--r--.venv/lib/python3.12/site-packages/flupy/cli/cli.py89
-rw-r--r--.venv/lib/python3.12/site-packages/flupy/cli/utils.py34
3 files changed, 123 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/flupy/cli/__init__.py b/.venv/lib/python3.12/site-packages/flupy/cli/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/flupy/cli/__init__.py
diff --git a/.venv/lib/python3.12/site-packages/flupy/cli/cli.py b/.venv/lib/python3.12/site-packages/flupy/cli/cli.py
new file mode 100644
index 00000000..2fed0da8
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/flupy/cli/cli.py
@@ -0,0 +1,89 @@
+import argparse
+import importlib
+import sys
+from signal import SIG_DFL, SIGPIPE, signal
+from typing import Any, Dict, Generator, List, Optional
+
+from flupy import __version__, flu, walk_dirs, walk_files
+
+
+def read_file(path: str) -> Generator[str, None, None]:
+ """Yield lines from a file given its path"""
+ with open(path, "r") as f:
+ yield from f
+
+
+def parse_args(args: List[str]) -> argparse.Namespace:
+ """Parse input arguments"""
+ parser = argparse.ArgumentParser(
+ description="flupy: a fluent interface for python collections",
+ formatter_class=argparse.RawTextHelpFormatter,
+ )
+ parser.add_argument("-v", "--version", action="version", version="%(prog)s " + __version__)
+ parser.add_argument("command", help="command to execute against input")
+ parser.add_argument("-f", "--file", help="path to input file")
+ parser.add_argument(
+ "-i",
+ "--import",
+ nargs="*",
+ default=[],
+ help="modules to import\n"
+ "Syntax: <module>:<object>:<alias>\n"
+ "Examples:\n"
+ "\t'import os' = '-i os'\n"
+ "\t'import os as op_sys' = '-i os::op_sys'\n"
+ "\t'from os import environ' = '-i os:environ'\n"
+ "\t'from os import environ as env' = '-i os:environ:env'\n",
+ )
+ return parser.parse_args(args)
+
+
+def build_import_dict(imps: List[str]) -> Dict[str, Any]:
+ """Execute CLI scoped imports"""
+ import_dict = {}
+ for imp_stx in imps:
+ module, _, obj_alias = imp_stx.partition(":")
+ obj, _, alias = obj_alias.partition(":")
+
+ if not obj:
+ import_dict[alias or module] = importlib.import_module(module)
+ else:
+ _garb = importlib.import_module(module)
+ import_dict[alias or obj] = getattr(_garb, obj)
+ return import_dict
+
+
+def main(argv: Optional[List[str]] = None) -> None:
+ """CLI Entrypoint"""
+ args = parse_args(argv[1:] if argv is not None else sys.argv[1:])
+
+ _command = args.command
+ _file = args.file
+ _import = getattr(args, "import")
+
+ import_dict = build_import_dict(_import)
+
+ if _file:
+ _ = flu(read_file(_file)).map(str.rstrip)
+ else:
+ # Do not raise exception for Broken Pipe
+ signal(SIGPIPE, SIG_DFL)
+ _ = flu(sys.stdin).map(str.rstrip)
+
+ locals_dict = {
+ "flu": flu,
+ "_": _,
+ "walk_files": walk_files,
+ "walk_dirs": walk_dirs,
+ }
+
+ pipeline = eval(_command, import_dict, locals_dict)
+
+ if hasattr(pipeline, "__iter__") and not isinstance(pipeline, (str, bytes)):
+ for r in pipeline:
+ sys.stdout.write(str(r) + "\n")
+
+ elif pipeline is None:
+ pass
+ else:
+ sys.stdout.write(str(pipeline) + "\n")
diff --git a/.venv/lib/python3.12/site-packages/flupy/cli/utils.py b/.venv/lib/python3.12/site-packages/flupy/cli/utils.py
new file mode 100644
index 00000000..02ee150b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/flupy/cli/utils.py
@@ -0,0 +1,34 @@
+# pylint: disable=invalid-name
+import os
+from typing import Generator
+
+from flupy.fluent import Fluent, flu
+
+
+def walk_files(*pathes: str, abspath: bool = True) -> "Fluent[str]":
+ """Yield files recursively starting from each location in *pathes"""
+
+ if pathes == ():
+ pathes = (".",)
+
+ def _impl() -> Generator[str, None, None]:
+ for path in pathes:
+ for d, _, files in os.walk(path):
+ for x in files:
+ rel_path = os.path.join(d, x)
+ if abspath:
+ yield os.path.abspath(rel_path)
+ else:
+ yield rel_path
+
+ return flu(_impl())
+
+
+def walk_dirs(path: str = ".") -> "Fluent[str]":
+ """Yield files recursively starting from *path"""
+
+ def _impl() -> Generator[str, None, None]:
+ for d, _, _ in os.walk(path):
+ yield d
+
+ return flu(_impl())