Merge pull request #192 from zabirauf/u/zabirauf/pip-reqs

Adding ability to install requirements from frontmatter through the /pipelines/add API
This commit is contained in:
Timothy Jaeryang Baek 2024-08-12 00:45:58 +02:00 committed by GitHub
commit 45e3a215b4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

38
main.py
View File

@ -26,6 +26,7 @@ import time
import json import json
import uuid import uuid
import sys import sys
import subprocess
from config import API_KEY, PIPELINES_DIR from config import API_KEY, PIPELINES_DIR
@ -105,12 +106,45 @@ def get_all_pipelines():
return 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): 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: 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) spec.loader.exec_module(module)
print(f"Loaded module: {module.__name__}") print(f"Loaded module: {module.__name__}")
if hasattr(module, "Pipeline"): if hasattr(module, "Pipeline"):