docker/generate_requirements.py (25 lines of code) (raw):
import os
import tomllib
docker_folders = [x for x in os.listdir(".") if os.path.isdir(x)]
with open('../poetry.lock', 'rb') as fp:
poetry_lock = tomllib.load(fp)
with open('../pyproject.toml', 'rb') as fp:
pyproject_toml = tomllib.load(fp)
all_deps = pyproject_toml['tool']['poetry']['dependencies']
all_deps = [x.lower() for x in all_deps]
lib_versions = {x['name'].lower(): x['version']
for x in poetry_lock['package']
# if x['name'].lower() in all_deps
}
lib_versions = {k: v.split('+')[0] for k, v in lib_versions.items()}
lib_versions['uvicorn[standard]'] = lib_versions['uvicorn']
for folder_name in docker_folders:
if not os.path.exists(f'./{folder_name}/requirements.txt'):
continue
with open(f'{folder_name}/requirements.txt', 'r') as fp:
requirements = fp.read().split()
requirements = [x.split('==')[0] for x in requirements]
requirements = [x.split('~=')[0] for x in requirements]
requirements = [f'{x.lower()}=={lib_versions[x.lower()]}'
for x in requirements]
with open(f'{folder_name}/requirements.txt', 'w') as fp:
fp.write('\n'.join(requirements))