Skip to content

Commit a16e729

Browse files
Merge pull request #63 from romeokienzler/main
add containerless operator builder
2 parents 09c8ab0 + 555f088 commit a16e729

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

Diff for: pyproject.toml

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ dependencies = [
4040

4141
[project.scripts]
4242
c3_create_operator = "c3.create_operator:main"
43+
c3_create_containerless_operator = "c3.create_containerless_operator:main"
4344
c3_create_gridwrapper = "c3.create_gridwrapper:main"
4445

4546
[tool.setuptools.packages.find]

Diff for: src/c3/create_containerless_operator.py

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import argparse
2+
import os
3+
import sys
4+
import logging
5+
import subprocess
6+
import re
7+
8+
def create_containerless_operator(
9+
file_path,
10+
version,
11+
):
12+
13+
logging.debug(f'Called create_containerless_operator with {file_path}')
14+
15+
filename, file_extension = os.path.splitext(file_path)
16+
17+
if file_extension != '.py':
18+
raise NotImplementedError('Containerless operators currenly only support python scripts')
19+
20+
all_pip_packages_found = ''
21+
with open(file_path, 'r') as file:
22+
for line in file:
23+
if re.search('pip ', line):
24+
pip_packages = re.sub('[#, ,!]*pip[ ]*install[ ]*', '', line)
25+
logging.debug(f'PIP packages found: {pip_packages}')
26+
all_pip_packages_found += (f' {pip_packages}')
27+
logging.info(f'all PIP packages found: {all_pip_packages_found}')
28+
29+
30+
subprocess.run(';'.join(['rm -Rf claimedenv','python -m venv claimedenv',
31+
'source ./claimedenv/bin/activate',
32+
f'pip install {all_pip_packages_found.strip()}',
33+
'pip list',
34+
f'zip -r {filename}.zip {file_path} claimedenv',
35+
'rm -Rf claimedenv']), shell=True)
36+
37+
38+
39+
def main():
40+
parser = argparse.ArgumentParser()
41+
parser.add_argument('FILE_PATH', type=str,
42+
help='Path to python script or notebook')
43+
parser.add_argument('ADDITIONAL_FILES', type=str, nargs='*', default=None,
44+
help='Paths to additional files to include in the container image')
45+
parser.add_argument('-v', '--version', type=str, default=None,
46+
help='Container image version. Auto-increases the version number if not provided (default 0.1)')
47+
parser.add_argument('-l', '--log_level', type=str, default='INFO')
48+
args = parser.parse_args()
49+
50+
# Init logging
51+
root = logging.getLogger()
52+
root.setLevel(args.log_level)
53+
handler = logging.StreamHandler(sys.stdout)
54+
formatter = logging.Formatter('%(levelname)s - %(message)s')
55+
handler.setFormatter(formatter)
56+
handler.setLevel(args.log_level)
57+
root.addHandler(handler)
58+
59+
create_containerless_operator(
60+
file_path=args.FILE_PATH,
61+
version=args.version,
62+
)
63+
64+
if __name__ == '__main__':
65+
main()

0 commit comments

Comments
 (0)