Initial commit

This commit is contained in:
pacnpal
2024-11-19 01:21:25 -05:00
commit ec39193430
6 changed files with 530 additions and 0 deletions

83
pip_add/utils.py Normal file
View File

@@ -0,0 +1,83 @@
import os
from pathlib import Path
from typing import Optional, List, Tuple
def find_requirements(start_dir: Optional[str] = None) -> Tuple[str, List[str]]:
"""
Find requirements files by searching up through parent directories.
Returns tuple of (chosen_file, all_found_files).
"""
requirements_files = [
'requirements.txt',
'requirements/base.txt',
'requirements/dev.txt',
'requirements/development.txt',
'requirements/prod.txt',
'requirements/production.txt'
]
if start_dir is None:
start_dir = os.getcwd()
current_dir = Path(start_dir).resolve()
found_files = []
# Search up through parent directories
while True:
for req_file in requirements_files:
req_path = current_dir / req_file
if req_path.exists():
found_files.append(str(req_path))
# Stop if we found files or reached root
if found_files or current_dir.parent == current_dir:
break
current_dir = current_dir.parent
# If no files found, default to requirements.txt in current directory
if not found_files:
default_file = os.path.join(start_dir, 'requirements.txt')
# Create the requirements directory if needed
os.makedirs(os.path.dirname(default_file), exist_ok=True)
# Create an empty requirements file
if not os.path.exists(default_file):
with open(default_file, 'w') as f:
f.write('# Python dependencies\n')
return default_file, [default_file]
# Prefer requirements.txt in the closest directory
for f in found_files:
if os.path.basename(f) == 'requirements.txt':
return f, found_files
# Otherwise take the first found file
return found_files[0], found_files
def add_to_requirements(package_name: str, version: str, requirements_file: str) -> None:
"""Add or update package in requirements file"""
requirement_line = f"{package_name}=={version}\n"
try:
with open(requirements_file, 'r') as f:
requirements = f.readlines()
except FileNotFoundError:
requirements = []
# Check if package exists and update it
package_exists = False
for i, line in enumerate(requirements):
if line.strip() and package_name == line.split('==')[0].strip():
requirements[i] = requirement_line
package_exists = True
break
# Add package if it doesn't exist
if not package_exists:
requirements.append(requirement_line)
# Create directory if it doesn't exist
os.makedirs(os.path.dirname(os.path.abspath(requirements_file)), exist_ok=True)
with open(requirements_file, 'w') as f:
f.writelines(requirements)