From 5ed3719a8b0e2f632f7eb325c34ad60a42131ace Mon Sep 17 00:00:00 2001 From: Zohaib Rauf Date: Thu, 1 Aug 2024 22:22:32 -0700 Subject: [PATCH 1/2] Adding ability to install requirements from frontmatter through the pipelines/add API --- main.py | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/main.py b/main.py index 7c6d7e99..0a742f38 100644 --- a/main.py +++ b/main.py @@ -105,12 +105,45 @@ def get_all_pipelines(): return pipelines +def parse_frontmatter(content): + frontmatter = {} + for line in content.split('\n'): + if ':' in line: + key, value = line.split(':', 1) + frontmatter[key.strip().lower()] = value.strip() + return frontmatter + +def install_frontmatter_requirements(requirements): + if requirements: + req_list = [req.strip() for req in requirements.split(',')] + for req in req_list: + print(f"Installing requirement: {req}") + subprocess.check_call([sys.executable, "-m", "pip", "install", req]) + else: + print("No requirements found in frontmatter.") async def load_module_from_path(module_name, module_path): - spec = importlib.util.spec_from_file_location(module_name, module_path) - module = importlib.util.module_from_spec(spec) try: + # Read the module content + with open(module_path, 'r') as file: + content = file.read() + + # Parse frontmatter + frontmatter = {} + if content.startswith('"""'): + end = content.find('"""', 3) + if end != -1: + frontmatter_content = content[3:end] + frontmatter = parse_frontmatter(frontmatter_content) + + # Install requirements if specified + if 'requirements' in frontmatter: + install_frontmatter_requirements(frontmatter['requirements']) + + # Load the module + spec = importlib.util.spec_from_file_location(module_name, module_path) + module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) print(f"Loaded module: {module.__name__}") if hasattr(module, "Pipeline"): From 042a3f87277f30fa3450f5c15e3841c02c0fdeb9 Mon Sep 17 00:00:00 2001 From: Zohaib Rauf Date: Thu, 1 Aug 2024 23:01:55 -0700 Subject: [PATCH 2/2] added import --- main.py | 1 + 1 file changed, 1 insertion(+) diff --git a/main.py b/main.py index 0a742f38..33c04997 100644 --- a/main.py +++ b/main.py @@ -26,6 +26,7 @@ import json import uuid import sys +import subprocess from config import API_KEY, PIPELINES_DIR