From 77a9d7b45fb5188d6b10bb3da49ee7cedf89b99b Mon Sep 17 00:00:00 2001 From: Romeo Kienzler Date: Tue, 11 Nov 2025 14:24:00 +0100 Subject: [PATCH] reorg after consolidation Signed-off-by: Romeo Kienzler --- LICENSE | 2 +- LICENSE.md | 202 ------ LICENSE.txt | 202 ------ {src => build/lib/c3}/__init__.py | 0 build/lib/c3/create_containerless_operator.py | 94 +++ build/lib/c3/create_gridwrapper.py | 256 +++++++ build/lib/c3/create_operator.py | 525 ++++++++++++++ build/lib/c3/notebook.py | 98 +++ build/lib/c3/operator_utils.py | 43 ++ build/lib/c3/parser.py | 211 ++++++ build/lib/c3/pythonscript.py | 96 +++ build/lib/c3/rscript.py | 88 +++ build/lib/c3/templates/R_dockerfile_template | 11 + build/lib/c3/templates/__init__.py | 66 ++ build/lib/c3/templates/component_setup_code.R | 14 + .../lib/c3/templates/component_setup_code.py | 35 + .../component_setup_code_wo_logging.py | 17 + .../c3/templates/cos_grid_wrapper_template.py | 217 ++++++ .../c3/templates/cwl_component_template.cwl | 15 + .../templates/folder_grid_wrapper_template.py | 137 ++++ .../lib/c3/templates/grid_wrapper_template.py | 205 ++++++ .../c3/templates/kfp_component_template.yaml | 18 + .../kubernetes_job_template.job.yaml | 17 + .../legacy_cos_grid_wrapper_template.py | 352 ++++++++++ .../c3/templates/python_dockerfile_template | 11 + .../templates/s3kv_grid_wrapper_template.py | 643 ++++++++++++++++++ .../templates/simple_grid_wrapper_template.py | 105 +++ build/lib/c3/utils.py | 146 ++++ build/lib/claimed/__init__.py | 0 {src => build/lib/claimed}/claimed.py | 0 build/lib/mlx/__init__.py | 0 build/lib/mlx/cos_backend.py | 111 +++ build/lib/mlx/s3_kv_store.py | 271 ++++++++ {src => build/lib}/scripts/claimed | 0 dist/claimed-0.2.2-py3-none-any.whl | Bin 0 -> 59844 bytes dist/claimed-0.2.2.tar.gz | Bin 0 -> 507570 bytes pyproject.toml | 14 +- src/claimed.egg-info/PKG-INFO | 289 ++++++++ src/claimed.egg-info/SOURCES.txt | 314 +++++++++ src/claimed.egg-info/dependency_links.txt | 1 + src/claimed.egg-info/entry_points.txt | 5 + src/claimed.egg-info/not-zip-safe | 1 + src/claimed.egg-info/requires.txt | 5 + src/claimed.egg-info/top_level.txt | 3 + src/claimed/__init__.py | 0 src/claimed/claimed.py | 12 + src/claimed/scripts/claimed | 79 +++ src/{ => mlx}/schema/dataset.json | 0 src/{ => mlx}/schema/job.json | 0 src/{ => mlx}/schema/model.json | 0 src/{ => mlx}/schema/notebook.json | 0 src/{ => mlx}/schema/pipeline.json | 0 src/{ => mlx}/schema/pipeline_operator.json | 0 53 files changed, 4520 insertions(+), 411 deletions(-) delete mode 100644 LICENSE.md delete mode 100644 LICENSE.txt rename {src => build/lib/c3}/__init__.py (100%) create mode 100644 build/lib/c3/create_containerless_operator.py create mode 100644 build/lib/c3/create_gridwrapper.py create mode 100644 build/lib/c3/create_operator.py create mode 100644 build/lib/c3/notebook.py create mode 100644 build/lib/c3/operator_utils.py create mode 100644 build/lib/c3/parser.py create mode 100644 build/lib/c3/pythonscript.py create mode 100644 build/lib/c3/rscript.py create mode 100644 build/lib/c3/templates/R_dockerfile_template create mode 100644 build/lib/c3/templates/__init__.py create mode 100644 build/lib/c3/templates/component_setup_code.R create mode 100644 build/lib/c3/templates/component_setup_code.py create mode 100644 build/lib/c3/templates/component_setup_code_wo_logging.py create mode 100644 build/lib/c3/templates/cos_grid_wrapper_template.py create mode 100644 build/lib/c3/templates/cwl_component_template.cwl create mode 100644 build/lib/c3/templates/folder_grid_wrapper_template.py create mode 100644 build/lib/c3/templates/grid_wrapper_template.py create mode 100644 build/lib/c3/templates/kfp_component_template.yaml create mode 100644 build/lib/c3/templates/kubernetes_job_template.job.yaml create mode 100644 build/lib/c3/templates/legacy_cos_grid_wrapper_template.py create mode 100644 build/lib/c3/templates/python_dockerfile_template create mode 100644 build/lib/c3/templates/s3kv_grid_wrapper_template.py create mode 100644 build/lib/c3/templates/simple_grid_wrapper_template.py create mode 100644 build/lib/c3/utils.py create mode 100644 build/lib/claimed/__init__.py rename {src => build/lib/claimed}/claimed.py (100%) create mode 100644 build/lib/mlx/__init__.py create mode 100644 build/lib/mlx/cos_backend.py create mode 100644 build/lib/mlx/s3_kv_store.py rename {src => build/lib}/scripts/claimed (100%) create mode 100644 dist/claimed-0.2.2-py3-none-any.whl create mode 100644 dist/claimed-0.2.2.tar.gz create mode 100644 src/claimed.egg-info/PKG-INFO create mode 100644 src/claimed.egg-info/SOURCES.txt create mode 100644 src/claimed.egg-info/dependency_links.txt create mode 100644 src/claimed.egg-info/entry_points.txt create mode 100644 src/claimed.egg-info/not-zip-safe create mode 100644 src/claimed.egg-info/requires.txt create mode 100644 src/claimed.egg-info/top_level.txt create mode 100644 src/claimed/__init__.py create mode 100644 src/claimed/claimed.py create mode 100755 src/claimed/scripts/claimed rename src/{ => mlx}/schema/dataset.json (100%) rename src/{ => mlx}/schema/job.json (100%) rename src/{ => mlx}/schema/model.json (100%) rename src/{ => mlx}/schema/notebook.json (100%) rename src/{ => mlx}/schema/pipeline.json (100%) rename src/{ => mlx}/schema/pipeline_operator.json (100%) diff --git a/LICENSE b/LICENSE index 261eeb9e..3c66b2ee 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2025 The Linux Foundation AI Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 8f71f43f..00000000 --- a/LICENSE.md +++ /dev/null @@ -1,202 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index d6456956..00000000 --- a/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/src/__init__.py b/build/lib/c3/__init__.py similarity index 100% rename from src/__init__.py rename to build/lib/c3/__init__.py diff --git a/build/lib/c3/create_containerless_operator.py b/build/lib/c3/create_containerless_operator.py new file mode 100644 index 00000000..b72f48d2 --- /dev/null +++ b/build/lib/c3/create_containerless_operator.py @@ -0,0 +1,94 @@ +import argparse +import os +import sys +import logging +import subprocess +import re +from c3.create_operator import create_cwl_component +from c3.pythonscript import Pythonscript +from c3.templates import component_setup_code_wo_logging, python_component_setup_code + +def create_containerless_operator( + file_path, + version, + skip_logging = False + ): + + if version is None: + version = 'latest' + + logging.debug(f'Called create_containerless_operator {version} with {file_path}') + + filename, file_extension = os.path.splitext(file_path) + + if file_extension != '.py': + raise NotImplementedError('Containerless operators currenly only support python scripts') + + all_pip_packages_found = '' + with open(file_path, 'r') as file: + for line in file: + if re.search('pip ', line): + pip_packages = re.sub('[#, ,!]*pip[ ]*install[ ]*', '', line) + logging.debug(f'PIP packages found: {pip_packages}') + all_pip_packages_found += (f' {pip_packages}') + logging.info(f'all PIP packages found: {all_pip_packages_found}') + + + # prepend init code to script + target_code = 'runnable.py' + + if os.path.exists(target_code): + os.remove(target_code) + + with open(file_path, 'r') as f: + script = f.read() + if skip_logging: + script = component_setup_code_wo_logging + script + else: + script = python_component_setup_code + script + with open(target_code, 'w') as f: + f.write(script) + + subprocess.run(';'.join(['rm -Rf claimedenv','python -m venv claimedenv', + 'source ./claimedenv/bin/activate', + f'pip install {all_pip_packages_found.strip()}', + 'pip list', + f'zip -r claimed-{filename}:{version}.zip {target_code} claimedenv', + 'rm -Rf claimedenv', + f'rm {target_code}']), shell=True) + script_data = Pythonscript(file_path) + inputs = script_data.get_inputs() + outputs = script_data.get_outputs() + + create_cwl_component(filename, "containerless", version, file_path, inputs, outputs) + + + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('FILE_PATH', type=str, + help='Path to python script or notebook') + parser.add_argument('ADDITIONAL_FILES', type=str, nargs='*', default=None, + help='Paths to additional files to include in the container image') + parser.add_argument('-v', '--version', type=str, default=None, + help='Container image version. Auto-increases the version number if not provided (default 0.1)') + parser.add_argument('-l', '--log_level', type=str, default='INFO') + args = parser.parse_args() + + # Init logging + root = logging.getLogger() + root.setLevel(args.log_level) + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter('%(levelname)s - %(message)s') + handler.setFormatter(formatter) + handler.setLevel(args.log_level) + root.addHandler(handler) + + create_containerless_operator( + file_path=args.FILE_PATH, + version=args.version, + ) + +if __name__ == '__main__': + main() diff --git a/build/lib/c3/create_gridwrapper.py b/build/lib/c3/create_gridwrapper.py new file mode 100644 index 00000000..e8184ea3 --- /dev/null +++ b/build/lib/c3/create_gridwrapper.py @@ -0,0 +1,256 @@ +import logging +import os +import argparse +import sys +from string import Template +from c3.pythonscript import Pythonscript +from c3.utils import convert_notebook +from c3.create_operator import create_operator +from c3.templates import component_setup_code_wo_logging +import c3 + + +def wrap_component(component_path, + component_description, + component_dependencies, + component_interface, + component_inputs, + component_process, + backend, + ): + # get component name from path + component_name = os.path.splitext(os.path.basename(component_path))[0] + + logging.info(f'Using backend: {backend}') + + backends = { + 'local': c3.templates.grid_wrapper_template, + 'cos': c3.templates.cos_grid_wrapper_template, + 'legacy_cos': c3.templates.legacy_cos_grid_wrapper_template, + 's3kv': c3.templates.s3kv_grid_wrapper_template, + 'grid_wrapper': c3.templates.grid_wrapper_template, + 'cos_grid_wrapper': c3.templates.cos_grid_wrapper_template, + 'legacy_cos_grid_wrapper': c3.templates.legacy_cos_grid_wrapper_template, + 's3kv_grid_wrapper': c3.templates.s3kv_grid_wrapper_template, + 'simple_grid_wrapper': c3.templates.simple_grid_wrapper_template, + 'folder_grid_wrapper': c3.templates.folder_grid_wrapper_template, + } + gw_template = backends.get(backend) + + logging.debug(f'Using backend template: {gw_template}') + + grid_wrapper_code = gw_template.substitute( + component_name=component_name, + component_description=component_description, + component_dependencies=component_dependencies, + component_inputs=component_inputs, + component_interface=component_interface, + component_process=component_process, + ) + + # Write edited code to file + grid_wrapper_file = f'gw_{component_name}.py' + grid_wrapper_file_path = os.path.join(os.path.dirname(component_path), grid_wrapper_file) + # remove 'component_' from gw path + grid_wrapper_file_path = grid_wrapper_file_path.replace('component_', '') + with open(grid_wrapper_file_path, 'w') as f: + f.write(grid_wrapper_code) + + logging.info(f'Saved wrapped component to {grid_wrapper_file_path}') + + return grid_wrapper_file_path + + +def get_component_elements(file_path): + # get required elements from component code + py = Pythonscript(file_path) + # convert description into a string with a single line + description = (py.get_description().replace('\n', ' ').replace('"', '\'')) + inputs = py.get_inputs() + outputs = py.get_outputs() + dependencies = py.get_requirements() + + # combine dependencies list + dependencies = '\n# '.join(dependencies) + + # generate interface code from inputs + interface = '' + type_to_func = {'String': '', 'Boolean': 'bool', 'Integer': 'int', 'Float': 'float'} + for variable, d in inputs.items(): + interface += f"# {d['description']}\n" + if (d['type'] == 'String' and d['default'] is not None and + (d['default'] == '' or d['default'][0] not in '\'\"')): + # Add quotation marks + d['default'] = "'" + d['default'] + "'" + interface += f"component_{variable} = {type_to_func[d['type']]}(os.getenv('{variable}', {d['default']}))\n" + + # TODO: Implement output interface + if len(outputs) > 0: + logging.warning('Found output paths in the component code which is currently not supported.') + + # generate kwargs for the subprocesses + process_inputs = ', '.join([f'{i}=component_{i}' for i in inputs.keys()]) + # use log level from grid wrapper + process_inputs = process_inputs.replace('component_log_level', 'log_level') + + return description, interface, process_inputs, dependencies + + +# Adding code +def edit_component_code(file_path, component_process): + file_name = os.path.basename(file_path) + if file_path.endswith('.ipynb'): + logging.info('Convert notebook to python script') + target_file = convert_notebook(file_path) + file_path = target_file + file_name = os.path.basename(file_path) + else: + # write edited code to different file + target_file = os.path.join(os.path.dirname(file_path), 'component_' + file_name.replace('-', '_')) + + target_file_name = os.path.basename(target_file) + + with open(file_path, 'r') as f: + script = f.read() + assert component_process in script, (f'Did not find the grid process {component_process} in the script. ' + f'Please provide the grid process in the arguments `-p `.') + # Add code for logging and cli parameters to the beginning of the script + script = component_setup_code_wo_logging + script + # replace old filename with new file name + script = script.replace(file_name, target_file_name) + with open(target_file, 'w') as f: + f.write(script) + + if '__main__' not in script: + logging.warning('No __main__ found in component code. Grid wrapper will import functions from component, ' + 'which can lead to unexpected behaviour without using __main__.') + + logging.info('Saved component python script in ' + target_file) + + return target_file + + +def apply_grid_wrapper(file_path, component_process, backend): + assert file_path.endswith('.py') or file_path.endswith('.ipynb'), \ + "Please provide a component file path to a python script or notebook." + + file_path = edit_component_code(file_path, component_process) + + description, interface, inputs, dependencies = get_component_elements(file_path) + + component_elements = dict( + component_path=file_path, + component_description=description, + component_dependencies=dependencies, + component_interface=interface, + component_inputs=inputs, + component_process=component_process + ) + + logging.debug('Wrap component with parameters:') + for component, value in component_elements.items(): + logging.debug(component + ':\n' + str(value) + '\n') + + logging.info('Wrap component') + grid_wrapper_file_path = wrap_component(backend=backend, **component_elements) + return grid_wrapper_file_path, file_path + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('FILE_PATH', type=str, + help='Path to python script or notebook') + parser.add_argument('ADDITIONAL_FILES', type=str, nargs='*', + help='List of paths to additional files to include in the container image') + parser.add_argument('-p', '--component_process', type=str, default='grid_process', + help='Name of the component sub process that is executed for each batch.') + parser.add_argument('-b', '--backend', type=str, default='local', + help='Define backend. Default: local. Others: cos, s3kv, legacy_cos (with automatic file download/upload)') + parser.add_argument('-r', '--repository', type=str, default=None, + help='Container registry address, e.g. docker.io/') + parser.add_argument('-v', '--version', type=str, default=None, + help='Container image version. Auto-increases the version number if not provided (default 0.1)') + parser.add_argument('--rename', type=str, nargs='?', default=None, const='', + help='Rename existing yaml files (argument without value leads to modified_{file name})') + parser.add_argument('--overwrite', action='store_true', help='Overwrite existing yaml files') + parser.add_argument('-l', '--log_level', type=str, default='INFO') + parser.add_argument('--dockerfile_template_path', type=str, default='', + help='Path to custom dockerfile template') + parser.add_argument('--dockerfile', type=str, default='Dockerfile.generated', + help='Name or path of the generated dockerfile.') + parser.add_argument('--local_mode', action='store_true', + help='Continue processing after docker errors.') + parser.add_argument('--no-cache', action='store_true', help='Not using cache for docker build.') + parser.add_argument('--skip-logging', action='store_true', + help='Exclude logging code from component setup code') + parser.add_argument('--keep-generated-files', action='store_true', + help='Do not delete temporary generated files.') + parser.add_argument('--platform', type=str, default='linux/amd64', + help='Select image platform, default is linux/amd64. Alternativly, select linux/arm64".') + parser.add_argument('--image_version', type=str, default='python3.12', + help='Select python or R version (defaults to python3.12).') + + args = parser.parse_args() + + # Init logging + root = logging.getLogger() + root.setLevel(args.log_level) + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter('%(levelname)s - %(message)s') + handler.setFormatter(formatter) + handler.setLevel(args.log_level) + root.addHandler(handler) + + grid_wrapper_file_path = component_path = '' + try: + grid_wrapper_file_path, component_path = apply_grid_wrapper( + file_path=args.FILE_PATH, + component_process=args.component_process, + backend=args.backend, + ) + + logging.info('Generate CLAIMED operator for grid wrapper') + + # Add component path and init file path to additional_files + args.ADDITIONAL_FILES.append(component_path) + + # Update dockerfile template if specified + if args.dockerfile_template_path != '': + logging.info(f'Uses custom dockerfile template from {args.dockerfile_template_path}') + with open(args.dockerfile_template_path, 'r') as f: + custom_dockerfile_template = Template(f.read()) + else: + custom_dockerfile_template = None + + create_operator( + file_path=grid_wrapper_file_path, + repository=args.repository, + version=args.version, + custom_dockerfile_template=custom_dockerfile_template, + additional_files=args.ADDITIONAL_FILES, + log_level=args.log_level, + local_mode=args.local_mode, + no_cache=args.no_cache, + overwrite_files=args.overwrite, + rename_files=args.rename, + skip_logging=args.skip_logging, + keep_generated_files=args.keep_generated_files, + platform=args.platform, + dockerfile=args.dockerfile, + image_version=args.image_version, + ) + except Exception as err: + logging.error('Error while generating CLAIMED grid wrapper. ' + 'Consider using `--log_level DEBUG` and `--keep-generated-files` for debugging.') + raise err + finally: + if not args.keep_generated_files: + logging.info('Remove local component file and grid wrapper code.') + if os.path.isfile(grid_wrapper_file_path): + os.remove(grid_wrapper_file_path) + if os.path.isfile(component_path): + os.remove(component_path) + + +if __name__ == '__main__': + main() diff --git a/build/lib/c3/create_operator.py b/build/lib/c3/create_operator.py new file mode 100644 index 00000000..0e2bb738 --- /dev/null +++ b/build/lib/c3/create_operator.py @@ -0,0 +1,525 @@ + +import os +import sys +import logging +import shutil +import argparse +import subprocess +import glob +import re +import json +from pathlib import Path +from string import Template +from typing import Optional +from c3.pythonscript import Pythonscript +from c3.notebook import Notebook +from c3.rscript import Rscript +from c3.utils import convert_notebook, get_image_version +from c3.templates import (python_component_setup_code, component_setup_code_wo_logging, r_component_setup_code, + python_dockerfile_template, r_dockerfile_template, + kfp_component_template, kubernetes_job_template, cwl_component_template) + +CLAIMED_VERSION = 'V0.1' + + +def create_dockerfile(dockerfile_template, dockerfile, requirements, target_code, target_dir, additional_files, + working_dir, command, image_version): + # Check for requirements file + for i in range(len(requirements)): + if '-r ' in requirements[i]: + r_file_search = re.search('-r ~?\/?([^\s]*\.txt)', requirements[i]) + if len(r_file_search.groups()): + # Get file from regex + requirements_file = r_file_search.groups()[0] + if requirements_file not in additional_files and os.path.isfile(requirements_file): + # Add missing requirements text file to additional files + additional_files.append(r_file_search.groups()[0]) + if '/' not in requirements[i]: + # Add missing home directory to the command `pip install -r ~/requirements.txt` + requirements[i] = requirements[i].replace('-r ', '-r ~/') + + requirements_docker = list(map(lambda s: 'RUN ' + s, requirements)) + requirements_docker = '\n'.join(requirements_docker) + additional_files_docker = list(map(lambda s: f"ADD {s} {working_dir}{s}", additional_files)) + additional_files_docker = '\n'.join(additional_files_docker) + + # Select base image + if 'python' in command: + base_image = f"registry.access.redhat.com/ubi8/python-{image_version.strip('python').replace('.', '')}" + elif command == 'Rscript': + if 'python' in image_version: + # Using default R version + image_version = 'R4.3.2' + base_image = f"r-base:{image_version.strip('Rr:')}" + else: + raise ValueError(f'Unrecognized command {command}') + logging.info(f'Using base image {base_image}') + + docker_file = dockerfile_template.substitute( + base_image=base_image, + requirements_docker=requirements_docker, + target_code=target_code, + target_dir=target_dir, + additional_files_docker=additional_files_docker, + working_dir=working_dir, + command=os.path.basename(command), + ) + + logging.info('Create Dockerfile') + with open(dockerfile, "w") as text_file: + text_file.write(docker_file) + logging.debug(f'{dockerfile}:\n' + docker_file) + + +def create_kfp_component(name, description, repository, version, command, target_code, target_dir, file_path, inputs, outputs): + + inputs_list = str() + for input, options in inputs.items(): + inputs_list += f'- {{name: {input}, type: {options["type"]}, description: "{options["description"]}"' + if options['default'] is not None: + if not options["default"].startswith('"'): + options["default"] = f'"{options["default"]}"' + inputs_list += f', default: {options["default"]}' + inputs_list += '}\n' + + outputs_list = str() + for output, options in outputs.items(): + outputs_list += f'- {{name: {output}, type: String, description: "{options["description"]}"}}\n' + + parameter_list = str() + for index, key in enumerate(list(inputs.keys()) + list(outputs.keys())): + parameter_list += f'{key}="${{{index}}}" ' + + parameter_values = str() + for input_key in inputs.keys(): + parameter_values += f" - {{inputValue: {input_key}}}\n" + for output_key in outputs.keys(): + parameter_values += f" - {{outputPath: {output_key}}}\n" + + yaml = kfp_component_template.substitute( + name=name, + description=description, + repository=repository, + version=version, + inputs=inputs_list, + outputs=outputs_list, + command=os.path.basename(command), + target_dir=target_dir, + target_code=target_code, + parameter_list=parameter_list, + parameter_values=parameter_values, + ) + + logging.debug('KubeFlow component yaml:\n' + yaml) + target_yaml_path = str(Path(file_path).with_suffix('.yaml')) + + logging.info(f'Write KubeFlow component yaml to {target_yaml_path}') + with open(target_yaml_path, "w") as text_file: + text_file.write(yaml) + + +def create_kubernetes_job(name, repository, version, target_code, target_dir, command, working_dir, file_path, inputs): + # get environment entries + env_entries = str() + for key in list(inputs.keys()): + env_entries += f" - name: {key}\n value: value_of_{key}\n" + env_entries = env_entries.rstrip() + + job_yaml = kubernetes_job_template.substitute( + name=name, + repository=repository, + version=version, + target_code=target_code, + target_dir=target_dir, + env_entries=env_entries, + command=command, + working_dir=working_dir, + ) + + logging.debug('Kubernetes job yaml:\n' + job_yaml) + target_job_yaml_path = str(Path(file_path).with_suffix('.job.yaml')) + + logging.info(f'Write kubernetes job yaml to {target_job_yaml_path}') + with open(target_job_yaml_path, "w") as text_file: + text_file.write(job_yaml) + + +def create_cwl_component(name, repository, version, file_path, inputs, outputs): + type_dict = {'String': 'string', 'Integer': 'int', 'Float': 'float', 'Boolean': 'bool'} + # get environment entries + i = 1 + input_envs = str() + for input, options in inputs.items(): + i += 1 + # Convert string default value to CWL types + default_value = options['default'] if options['type'] == 'String' and options['default'] != '"None"' \ + else options['default'].strip('"\'') + input_envs += (f" {input}:\n type: {type_dict[options['type']]}\n default: {default_value}\n " + f"inputBinding:\n position: {i}\n prefix: --{input}\n") + + if len(outputs) == 0: + output_envs = '[]' + else: + output_envs = '\n' + for output, options in outputs.items(): + i += 1 + output_envs += (f" {output}:\n type: string\n " + f"inputBinding:\n position: {i}\n prefix: --{output}\n") + + cwl = cwl_component_template.substitute( + name=name, + repository=repository, + version=version, + inputs=input_envs, + outputs=output_envs, + ) + + logging.debug('CWL component:\n' + cwl) + target_cwl_path = str(Path(file_path).with_suffix('.cwl')) + + logging.info(f'Write cwl component to {target_cwl_path}') + with open(target_cwl_path, "w") as text_file: + text_file.write(cwl) + + +def check_existing_files(file_path, rename_files, overwrite_files): + if rename_files is None and overwrite_files: + # Overwrite potential files + return + + target_job_yaml_path = Path(file_path).with_suffix('.job.yaml') + + # Check for existing job yaml + if target_job_yaml_path.is_file(): + if rename_files is None: + # Ask user + rename_files = input(f'\nFound a existing Kubernetes job file at {target_job_yaml_path}.\n' + f'ENTER to overwrite the file, write Y to rename the file to ' + f'modified_{target_job_yaml_path.name}, or provide a custom name:\n') + if rename_files.strip() == '': + # Overwrite file + return + elif rename_files.lower() == 'y': + # Default file name + new_file_name = 'modified_' + Path(file_path).name + else: + # Rename to custom name + new_file_name = rename_files + + modified_path = (target_job_yaml_path.parent / new_file_name).with_suffix('.job.yaml') + # Check if modified path exists and potentially overwrite + if modified_path.exists(): + if overwrite_files: + logging.info(f'Overwriting modified path {modified_path}.') + else: + overwrite = input(f'Modified path {modified_path} already exists. ENTER to overwrite the file.') + if overwrite != '': + logging.error(f'Abort creating operator. Please rename file manually and rerun the script.') + raise FileExistsError + + os.rename(str(target_job_yaml_path), str(modified_path)) + logging.info(f'Renamed Kubernetes job file to {modified_path}') + # TODO: Should we check other files too? Currently assuming no modification for yaml and cwl. + + +def print_claimed_command(name, repository, version, inputs): + claimed_command = f"claimed --component {repository}/claimed-{name}:{version}" + for input, options in inputs.items(): + claimed_command += f" --{input} {options['default']}" + logging.info(f'Run operators locally with claimed-cli:\n{claimed_command}') + + +def remove_temporary_files(file_path, target_code): + logging.info(f'Remove local files') + # remove temporary files + if file_path != target_code: + os.remove(target_code) + if os.path.isfile('Dockerfile'): + os.remove('Dockerfile') + + +def create_operator(file_path: str, + repository: str, + version: str, + custom_dockerfile_template: Optional[Template], + additional_files: str = None, + log_level='INFO', + local_mode=False, + no_cache=False, + rename_files=None, + overwrite_files=False, + skip_logging=False, + keep_generated_files=False, + platform='linux/amd64', + dockerfile='Dockerfile.generated', + image_version='python3.12', + ): + logging.info('Parameters: ') + logging.info('file_path: ' + file_path) + logging.info('repository: ' + str(repository)) + logging.info('version: ' + str(version)) + logging.info('additional_files: ' + '; '.join(additional_files)) + + if file_path.endswith('.py'): + # use temp file for processing + target_code = 'claimed_' + os.path.basename(file_path) + # Copy file to current working directory + shutil.copy(file_path, target_code) + # Add code for logging and cli parameters to the beginning of the script + with open(target_code, 'r') as f: + script = f.read() + if skip_logging: + script = component_setup_code_wo_logging + script + else: + script = python_component_setup_code + script + with open(target_code, 'w') as f: + f.write(script) + # getting parameter from the script + script_data = Pythonscript(target_code) + dockerfile_template = custom_dockerfile_template or python_dockerfile_template + command = '/opt/app-root/bin/python' + working_dir = '/opt/app-root/src/' + + elif file_path.endswith('.ipynb'): + # use temp file for processing + target_code = 'claimed_' + os.path.basename(file_path) + # Copy file to current working directory + shutil.copy(file_path, target_code) + with open(target_code, 'r') as json_file: + notebook = json.load(json_file) + # Add code for logging and cli parameters to the beginning of the notebook + notebook['cells'].insert(0, { + 'cell_type': 'code', 'execution_count': None, 'metadata': {}, 'outputs': [], + 'source': component_setup_code_wo_logging if skip_logging else python_component_setup_code}) + with open(target_code, 'w') as json_file: + json.dump(notebook, json_file) + # getting parameter from the script + script_data = Notebook(target_code) + dockerfile_template = custom_dockerfile_template or python_dockerfile_template + command = '/opt/app-root/bin/ipython' + working_dir = '/opt/app-root/src/' + + elif file_path.lower().endswith('.r'): + # use temp file for processing + target_code = 'claimed_' + os.path.basename(file_path) + # Copy file to current working directory + shutil.copy(file_path, target_code) + # Add code for logging and cli parameters to the beginning of the script + with open(target_code, 'r') as f: + script = f.read() + script = r_component_setup_code + script + with open(target_code, 'w') as f: + f.write(script) + # getting parameter from the script + script_data = Rscript(target_code) + dockerfile_template = custom_dockerfile_template or r_dockerfile_template + command = 'Rscript' + working_dir = '/home/docker/' + else: + raise NotImplementedError('Please provide a file_path to a jupyter notebook, python script, or R script.') + + name = script_data.get_name() + # convert description into a string with a single line + description = ('"' + script_data.get_description().replace('\n', ' ').replace('"', '\'') + + ' – CLAIMED ' + CLAIMED_VERSION + '"') + inputs = script_data.get_inputs() + outputs = script_data.get_outputs() + requirements = script_data.get_requirements() + # Strip 'claimed-' from name of copied temp file + if name.startswith('claimed-'): + name = name[8:] + target_dir = os.path.dirname(file_path) + # Check that the main file is within the cwd + if '../' in target_dir: + raise PermissionError(f"Forbidden path outside the docker build context: {target_dir}. " + f"Change the current working directory to include the file.") + elif target_dir != '': + target_dir += '/' + + logging.info('Operator name: ' + name) + logging.info('Description: ' + description) + logging.info('Inputs:\n' + ('\n'.join([f'{k}: {v}' for k, v in inputs.items()]))) + logging.info('Outputs:\n' + ('\n'.join([f'{k}: {v}' for k, v in outputs.items()]))) + logging.info('Requirements: ' + '; '.join(requirements)) + logging.debug(f'Target code: {target_code}') + logging.debug(f'Target directory: {target_dir}') + + # Load all additional files + logging.debug('Looking for additional files:') + additional_files_found = [] + for file_pattern in additional_files: + if '../' in file_pattern: + # Check that additional file are within the cwd + raise PermissionError(f"Forbidden path outside the docker build context: {file_pattern}. " + f"Change the current working directory to include all additional files.") + # Include files based on wildcards + files_found = glob.glob(file_pattern) + if len(files_found) == 0: + raise FileNotFoundError(f'No additional files for path {file_pattern}.') + additional_files_found.extend(files_found) + logging.debug(f'Searched for "{file_pattern}". Found {", ".join(files_found)}') + logging.info(f'Found {len(additional_files_found)} additional files and directories\n' + f'{", ".join(additional_files_found)}') + + create_dockerfile(dockerfile_template, dockerfile, requirements, target_code, target_dir, additional_files_found, + working_dir, command, image_version) + + if version is None: + # auto increase version based on registered images + version = get_image_version(repository, name) + + if repository is None: + if not local_mode: + logging.warning('No repository provided. The container image is only saved locally. Add `-r ` ' + 'to push the image to a container registry or run `--local_mode` to suppress this warning.') + local_mode = True + repository = 'local' + + if subprocess.run('docker buildx', shell=True, stdout=subprocess.PIPE).returncode == 0: + # Using docker buildx + logging.debug('Using docker buildx') + build_command = f'docker buildx build -f {dockerfile}' + else: + logging.debug('Using docker build. Consider installing docker-buildx.') + build_command = f'docker build -f {dockerfile}' + + logging.info(f'Building container image claimed-{name}:{version}') + try: + # Run docker build + subprocess.run( + f"{build_command} --platform {platform} -t claimed-{name}:{version} . {'--no-cache' if no_cache else ''}", + stdout=None if log_level == 'DEBUG' else subprocess.PIPE, check=True, shell=True + ) + if repository is not None: + # Run docker tag + logging.debug(f'Tagging images with "latest" and "{version}"') + subprocess.run( + f"docker tag claimed-{name}:{version} {repository}/claimed-{name}:{version}", + stdout=None if log_level == 'DEBUG' else subprocess.PIPE, check=True, shell=True, + ) + subprocess.run( + f"docker tag claimed-{name}:{version} {repository}/claimed-{name}:latest", + stdout=None if log_level == 'DEBUG' else subprocess.PIPE, check=True, shell=True, + ) + except Exception as err: + logging.error('Docker build failed. Consider running C3 with `--log_level DEBUG` to see the docker build logs.') + if not keep_generated_files: + remove_temporary_files(file_path, target_code) + raise err + logging.info(f'Successfully built image claimed-{name}:{version}') + + if local_mode: + logging.info(f'No repository provided, skip docker push.') + else: + logging.info(f'Pushing images to registry {repository}') + try: + # Run docker push + subprocess.run( + f"docker push {repository}/claimed-{name}:latest", + stdout=None if log_level == 'DEBUG' else subprocess.PIPE, check=True, shell=True, + ) + subprocess.run( + f"docker push {repository}/claimed-{name}:{version}", + stdout=None if log_level == 'DEBUG' else subprocess.PIPE, check=True, shell=True, + ) + logging.info('Successfully pushed image to registry') + except Exception as err: + logging.error(f'Could not push images to namespace {repository}. ' + f'Please check if docker is logged in or select a namespace with access.') + if not keep_generated_files: + remove_temporary_files(file_path, target_code) + raise err + + # Check for existing files and optionally modify them before overwriting + try: + check_existing_files(file_path, rename_files, overwrite_files) + except Exception as err: + if not keep_generated_files: + remove_temporary_files(file_path, target_code) + raise err + + # Create application scripts + create_kfp_component(name, description, repository, version, command, target_code, target_dir, file_path, inputs, + outputs) + + create_kubernetes_job(name, repository, version, target_code, target_dir, command, working_dir, file_path, inputs) + + create_cwl_component(name, repository, version, file_path, inputs, outputs) + + print_claimed_command(name, repository, version, inputs) + + # Remove temp files + if not keep_generated_files: + remove_temporary_files(file_path, target_code) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('FILE_PATH', type=str, + help='Path to python script or notebook') + parser.add_argument('ADDITIONAL_FILES', type=str, nargs='*', + help='Paths to additional files to include in the container image') + parser.add_argument('-r', '--repository', type=str, default=None, + help='Container registry address, e.g. docker.io/') + parser.add_argument('-v', '--version', type=str, default=None, + help='Container image version. Auto-increases the version number if not provided (default 0.1)') + parser.add_argument('--rename', type=str, nargs='?', default=None, const='', + help='Rename existing yaml files (argument without value leads to modified_{file name})') + parser.add_argument('--overwrite', action='store_true', help='Overwrite existing yaml files') + parser.add_argument('-l', '--log_level', type=str, default='INFO') + parser.add_argument('--dockerfile_template_path', type=str, default='', + help='Path to custom dockerfile template') + parser.add_argument('--dockerfile', type=str, default='Dockerfile.generated', + help='Name or path of the generated dockerfile.') + parser.add_argument('--local_mode', action='store_true', + help='Continue processing after docker errors.') + parser.add_argument('--no-cache', action='store_true', help='Not using cache for docker build.') + parser.add_argument('--skip-logging', action='store_true', + help='Exclude logging code from component setup code') + parser.add_argument('--keep-generated-files', action='store_true', + help='Do not delete temporary generated files.') + parser.add_argument('--platform', type=str, default='linux/amd64', + help='Select image platform, default is linux/amd64. Alternativly, select linux/arm64".') + parser.add_argument('--image_version', type=str, default='python3.12', + help='Select python or R version (defaults to python3.12).') + + args = parser.parse_args() + + # Init logging + root = logging.getLogger() + root.setLevel(args.log_level) + handler = logging.StreamHandler(sys.stdout) + formatter = logging.Formatter('%(levelname)s - %(message)s') + handler.setFormatter(formatter) + handler.setLevel(args.log_level) + root.addHandler(handler) + + # Update dockerfile template if specified + if args.dockerfile_template_path != '': + logging.info(f'Uses custom dockerfile template from {args.dockerfile_template_path}') + with open(args.dockerfile_template_path, 'r') as f: + custom_dockerfile_template = Template(f.read()) + else: + custom_dockerfile_template = None + + create_operator( + file_path=args.FILE_PATH, + repository=args.repository, + version=args.version, + custom_dockerfile_template=custom_dockerfile_template, + additional_files=args.ADDITIONAL_FILES, + log_level=args.log_level, + local_mode=args.local_mode, + no_cache=args.no_cache, + overwrite_files=args.overwrite, + rename_files=args.rename, + skip_logging=args.skip_logging, + keep_generated_files=args.keep_generated_files, + platform=args.platform, + dockerfile=args.dockerfile, + image_version=args.image_version, + ) + + +if __name__ == '__main__': + main() diff --git a/build/lib/c3/notebook.py b/build/lib/c3/notebook.py new file mode 100644 index 00000000..1a5a25bb --- /dev/null +++ b/build/lib/c3/notebook.py @@ -0,0 +1,98 @@ +import json +import re +import os +import logging +from c3.parser import ContentParser, NotebookReader + + +class Notebook(): + def __init__(self, path): + self.path = path + with open(path) as json_file: + self.notebook = json.load(json_file) + + self.name = os.path.basename(path)[:-6].replace('_', '-').lower() + + if self.notebook['cells'][1]['cell_type'] == self.notebook['cells'][2]['cell_type'] == 'markdown': + # backwards compatibility (v0.1 description was included in second cell, merge first two markdown cells) + logging.info('Merge first two markdown cells for description. ' + 'The file name is used as the operator name, not the first markdown cell.') + self.description = self.notebook['cells'][1]['source'][0] + '\n' + self.notebook['cells'][2]['source'][0] + else: + # Using second cell because first cell was added for setup code + self.description = self.notebook['cells'][1]['source'][0] + + self.inputs = self._get_input_vars() + self.outputs = self._get_output_vars() + + def _get_input_vars(self): + cp = ContentParser() + env_names = cp.parse(self.path)['inputs'] + return_value = dict() + notebook_code_lines = list(NotebookReader(self.path).read_next_code_line()) + for env_name, default in env_names.items(): + comment_line = str() + for line in notebook_code_lines: + if re.search("[\"']" + env_name + "[\"']", line): + if not comment_line.strip().startswith('#'): + # previous line was no description, reset comment_line. + comment_line = '' + if comment_line == '': + logging.debug(f'Interface: No description for variable {env_name} provided.') + if re.search(r'=\s*int\(\s*os', line): + type = 'Integer' + elif re.search(r'=\s*float\(\s*os', line): + type = 'Float' + elif re.search(r'=\s*bool\(\s*os', line): + type = 'Boolean' + else: + type = 'String' + return_value[env_name] = { + 'description': comment_line.replace('#', '').replace("\"", "\'").strip(), + 'type': type, + 'default': default + } + break + comment_line = line + return return_value + + def _get_output_vars(self): + cp = ContentParser() + output_names = cp.parse(self.path)['outputs'] + # TODO: Does not check for description code + return_value = {name: { + 'description': f'Output path for {name}', + 'type': 'String', + } for name in output_names} + return return_value + + def get_requirements(self): + requirements = [] + notebook_code_lines = list(NotebookReader(self.path).read_next_code_line()) + # Add dnf install + for line in notebook_code_lines: + if re.search(r'[\s#]*dnf\s*.[^#]*', line): + if '-y' not in line: + # Adding default repo + line += ' -y' + requirements.append(line.replace('#', '').strip()) + + # Add pip install + pattern = r"^[# !]*(pip[ ]*install)[ ]*(.[^#]*)" + for line in notebook_code_lines: + result = re.findall(pattern, line) + if len(result) == 1: + requirements.append((result[0][0] + ' ' + result[0][1].strip())) + return requirements + + def get_name(self): + return self.name + + def get_description(self): + return self.description + + def get_inputs(self): + return self.inputs + + def get_outputs(self): + return self.outputs diff --git a/build/lib/c3/operator_utils.py b/build/lib/c3/operator_utils.py new file mode 100644 index 00000000..5f524872 --- /dev/null +++ b/build/lib/c3/operator_utils.py @@ -0,0 +1,43 @@ +import contextlib +import logging +import os + +# converts string in form [cos|s3]://access_key_id:secret_access_key@endpoint/bucket/path to +# access_key_id, secret_access_key, endpoint, path - path includes bucket name +def explode_connection_string(cs): + if cs is None: + return None + if cs.startswith('cos') or cs.startswith('s3'): + buffer=cs.split('://')[1] + access_key_id=buffer.split('@')[0].split(':')[0] + secret_access_key=buffer.split('@')[0].split(':')[1] + endpoint=f"https://{buffer.split('@')[1].split('/')[0]}" + path='/'.join(buffer.split('@')[1].split('/')[1:]) + return (access_key_id, secret_access_key, endpoint, path) + else: + return (None, None, None, cs) + # TODO consider cs as secret and grab connection string from kubernetes + + +def run_and_log(cos_conn, log_folder, task_id, command_array): + log_root_name = time.time() + job_id = ('-').join(command_array).replace('/','-') # TODO get a unique job id + job_id = re.sub(r'[^a-zA-Z0-9]', '-', job_id) + task_id = re.sub(r'[^a-zA-Z0-9]', '-', task_id) + std_out_log_name = f'{job_id}-{task_id}-{log_root_name}-stdout.log' + std_err_log_name = f'{job_id}-{task_id}-{log_root_name}-stderr.log' + with open(std_out_log_name,'w') as so: + with open(std_err_log_name,'w') as se: + with contextlib.redirect_stdout(so): + with contextlib.redirect_stderr(se): + logging.info('-----INVOKING TASK-----------------------------------') + logging.info(f'Task ID: {task_id}') + logging.info(f'Command: {command_array}') + result = subprocess.run(command_array, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=os.environ.copy()) + output = result.stdout.decode('utf-8') + logging.info("Output:", output) + logging.info("Return code:", result.returncode) + cos_conn.put(std_out_log_name,os.path.join(log_folder,std_out_log_name)) + cos_conn.put(std_err_log_name,os.path.join(log_folder,std_err_log_name)) + os.remove(std_out_log_name) + os.remove(std_err_log_name) \ No newline at end of file diff --git a/build/lib/c3/parser.py b/build/lib/c3/parser.py new file mode 100644 index 00000000..1be4307d --- /dev/null +++ b/build/lib/c3/parser.py @@ -0,0 +1,211 @@ +# +# Copyright 2018-2021 Elyra Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os +import re + +from traitlets.config import LoggingConfigurable + +from typing import TypeVar, List, Dict + +# Setup forward reference for type hint on return from class factory method. See +# https://stackoverflow.com/questions/39205527/can-you-annotate-return-type-when-value-is-instance-of-cls/39205612#39205612 +F = TypeVar('F', bound='FileReader') + + +class FileReader(LoggingConfigurable): + """ + Base class for parsing a file for resources according to operation type. Subclasses set + their own parser member variable according to their implementation language. + """ + + def __init__(self, filepath: str): + self._filepath = filepath + + @property + def filepath(self): + return self._filepath + + @property + def language(self) -> str: + file_extension = os.path.splitext(self._filepath)[-1].lower() + if file_extension == '.py': + return 'python' + elif file_extension == '.r': + return 'r' + else: + return None + + def read_next_code_line(self) -> List[str]: + """ + Implements a generator for lines of code in the specified filepath. Subclasses + may override if explicit line-by-line parsing is not feasible, e.g. with Notebooks. + """ + with open(self._filepath) as f: + for line in f: + yield line.strip() + + +class NotebookReader(FileReader): + def __init__(self, filepath: str): + super().__init__(filepath) + import nbformat + + with open(self._filepath) as f: + self._notebook = nbformat.read(f, as_version=4) + self._language = None + + try: + self._language = self._notebook['metadata']['language_info']['name'].lower() + + except KeyError: + self.log.warning(f'No language metadata found in {self._filepath}') + pass + + @property + def language(self) -> str: + return self._language + + def read_next_code_line(self) -> List[str]: + for cell in self._notebook.cells: + if cell.source and cell.cell_type == "code": + for line in cell.source.split('\n'): + yield line + + +class ScriptParser(): + """ + Base class for parsing individual lines of code. Subclasses implement a search_expressions() + function that returns language-specific regexes to match against code lines. + """ + + _comment_char = "#" + + def _get_line_without_comments(self, line): + if self._comment_char in line: + index = line.find(self._comment_char) + line = line[:index] + return line.strip() + + def parse_environment_variables(self, line): + # Parse a line fed from file and match each regex in regex dictionary + line = self._get_line_without_comments(line) + if not line: + return [] + + matches = [] + for key, value in self.search_expressions().items(): + for pattern in value: + regex = re.compile(pattern) + for match in regex.finditer(line): + matches.append((key, match)) + return matches + + +class PythonScriptParser(ScriptParser): + def search_expressions(self) -> Dict[str, List]: + # First regex matches envvar assignments that use os.getenv("name", "value") with ow w/o default provided + # Second regex matches envvar assignments that use os.environ.get("name", "value") with or w/o default provided + # Both name and value are captured if possible + inputs = [r"os\.getenv\([\"']([a-zA-Z_]+[A-Za-z0-9_]*)[\"']*(?:\s*\,\s*[\"']?(.[^#]*)?[\"']?)?\).*", + r"os\.environ\.get\([\"']([a-zA-Z_]+[A-Za-z0-9_]*)[\"']*(?:\s*\,\s*[\"']?(.[^#]*)?[\"']?)?\).*"] + # regex matches setting envvars assignments that use + outputs = [r"\s*os\.environ\[[\"']([a-zA-Z_]+[A-Za-z0-9_]*)[\"']].*"] + + regex_dict = dict(inputs=inputs, outputs=outputs) + return regex_dict + + +class RScriptParser(ScriptParser): + def search_expressions(self) -> Dict[str, List]: + + + # Tests for matches of the form: var <- Sys.getenv("key", "optional default") + inputs = [r".*Sys\.getenv\([\"']*([a-zA-Z_]+[A-Za-z0-9_]*)[\"']*(?:\s*\,\s*[\"']?(.[^#]*)?[\"']?)?\).*"] + # Tests for matches of the form: var <- Sys.getenv("key", "optional default") + outputs = [r"\s*Sys\.setenv\([\"']*([a-zA-Z_]+[A-Za-z0-9_]*)[\"']*(?:\s*\,\s*[\"']?(.[^#]*)?[\"']?)?\).*"] + + regex_dict = dict(inputs=inputs, outputs=outputs) + return regex_dict + + +class ContentParser(LoggingConfigurable): + parsers = { + 'python': PythonScriptParser(), + 'r': RScriptParser() + } + + def parse(self, filepath: str) -> dict: + """Returns a model dictionary of all the regex matches for each key in the regex dictionary""" + + properties = {"inputs": {}, "outputs": []} + reader = self._get_reader(filepath) + parser = self._get_parser(reader.language) + + if not parser: + return properties + + for line in reader.read_next_code_line(): + matches = parser.parse_environment_variables(line) + for key, match in matches: + if key == "inputs": + default_value = match.group(2) + if default_value: + # The default value match can end with an additional ', ", or ) which is removed + default_value = re.sub(r"['\")]?$", '', default_value, count=1) + properties[key][match.group(1)] = default_value + else: + properties[key].append(match.group(1)) + + return properties + + def _validate_file(self, filepath: str): + """ + Validate file exists and is file (e.g. not a directory) + """ + if not os.path.exists(filepath): + raise FileNotFoundError(f'No such file or directory: {filepath}') + if not os.path.isfile(filepath): + raise IsADirectoryError(f'Is a directory: {filepath}') + + def _get_reader(self, filepath: str): + """ + Find the proper reader based on the file extension + """ + file_extension = os.path.splitext(filepath)[-1] + + self._validate_file(filepath) + + if file_extension == '.ipynb': + return NotebookReader(filepath) + elif file_extension.lower() in ['.py', '.r']: + return FileReader(filepath) + else: + raise ValueError(f'File type {file_extension} is not supported.') + + def _get_parser(self, language: str): + """ + Find the proper parser based on content language + """ + parser = None + if language: + parser = self.parsers.get(language) + + if not parser: + self.log.warning(f'Content parser for {language} is not available.') + pass + + return parser diff --git a/build/lib/c3/pythonscript.py b/build/lib/c3/pythonscript.py new file mode 100644 index 00000000..eeed2226 --- /dev/null +++ b/build/lib/c3/pythonscript.py @@ -0,0 +1,96 @@ + +import logging +import os +import re +from c3.parser import ContentParser + + +class Pythonscript: + def __init__(self, path): + + self.path = path + with open(path, 'r') as f: + self.script = f.read() + + self.name = os.path.basename(path)[:-3].replace('_', '-').lower() + if '"""' not in self.script: + logging.warning('Please provide a description of the operator in the first doc string.') + self.description = self.name + else: + self.description = self.script.split('"""')[1].strip() + self.inputs = self._get_input_vars() + self.outputs = self._get_output_vars() + + def _get_input_vars(self): + cp = ContentParser() + env_names = cp.parse(self.path)['inputs'] + return_value = dict() + for env_name, default in env_names.items(): + comment_line = str() + for line in self.script.split('\n'): + if re.search("[\"']" + env_name + "[\"']", line): + # Check the description for current variable + if not comment_line.strip().startswith('#'): + # previous line was no description, reset comment_line. + comment_line = '' + if comment_line == '': + logging.debug(f'Interface: No description for variable {env_name} provided.') + if re.search(r'=\s*int\(\s*os', line): + type = 'Integer' + default = default.strip('\"\'') + elif re.search(r'=\s*float\(\s*os', line): + type = 'Float' + default = default.strip('\"\'') + elif re.search(r'=\s*bool\(\s*os', line): + type = 'Boolean' + default = default.strip('\"\'') + else: + type = 'String' + return_value[env_name] = { + 'description': comment_line.replace('#', '').replace("\"", "\'").strip(), + 'type': type, + 'default': default + } + break + comment_line = line + return return_value + + def _get_output_vars(self): + cp = ContentParser() + output_names = cp.parse(self.path)['outputs'] + # TODO: Does not check for description code + return_value = {name: { + 'description': f'Output path for {name}', + 'type': 'String', + } for name in output_names} + return return_value + + def get_requirements(self): + requirements = [] + # Add dnf install + for line in self.script.split('\n'): + if re.search(r'[\s#]*dnf\s*.[^#]*', line): + if '-y' not in line: + # Adding default repo + line += ' -y' + requirements.append(line.replace('#', '').strip()) + + # Add pip install + pattern = r"^[# !]*(pip[ ]*install)[ ]*(.[^#]*)" + for line in self.script.split('\n'): + result = re.findall(pattern, line) + if len(result) == 1: + requirements.append((result[0][0] + ' ' + result[0][1].strip())) + return requirements + + def get_name(self): + return self.name + + def get_description(self): + return self.description + + def get_inputs(self): + return self.inputs + + def get_outputs(self): + return self.outputs diff --git a/build/lib/c3/rscript.py b/build/lib/c3/rscript.py new file mode 100644 index 00000000..9e6cc93e --- /dev/null +++ b/build/lib/c3/rscript.py @@ -0,0 +1,88 @@ + +import logging +import os +import re +from c3.parser import ContentParser + + +class Rscript: + def __init__(self, path): + + self.path = path + with open(path, 'r') as f: + self.script = f.read() + + self.name = os.path.basename(path)[:-2].replace('_', '-').lower() + # TODO: Currently does not support a description + self.description = self.name + self.inputs = self._get_input_vars() + self.outputs = self._get_output_vars() + + def _get_input_vars(self): + cp = ContentParser() + env_names = cp.parse(self.path)['inputs'] + return_value = dict() + for env_name, default in env_names.items(): + comment_line = str() + for line in self.script.split('\n'): + if re.search("[\"']" + env_name + "[\"']", line): + # Check the description for current variable + if not comment_line.strip().startswith('#'): + # previous line was no description, reset comment_line. + comment_line = '' + if comment_line == '': + logging.debug(f'Interface: No description for variable {env_name} provided.') + if re.search(r'=\s*as.numeric\(\s*os', line): + type = 'Float' # double in R + elif re.search(r'=\s*bool\(\s*os', line): + type = 'Boolean' # logical in R + else: + type = 'String' # character in R + + return_value[env_name] = { + 'description': comment_line.replace('#', '').replace("\"", "\'").strip(), + 'type': type, + 'default': default + } + break + comment_line = line + return return_value + + def _get_output_vars(self): + cp = ContentParser() + output_names = cp.parse(self.path)['outputs'] + # TODO: Does not check for description + return_value = {name: {'description': 'output path'} for name in output_names} + return return_value + + def get_requirements(self): + requirements = [] + # Add apt install commands + for line in self.script.split('\n'): + if re.search(r'[\s#]*apt\s*[A-Za-z0-9_-]*', line): + if '-y' not in line: + # Adding default repo + line += ' -y' + requirements.append(line.replace('#', '').strip()) + + # Add Rscript install.packages commands + for line in self.script.split('\n'): + if re.search(r'[\s#]*install\.packages\(.*\)', line): + if 'http://' not in line: + # Adding default repo + line = line.rstrip(') ') + ", repos='http://cran.us.r-project.org')" + command = f"Rscript -e \"{line.replace('#', '').strip()}\"" + requirements.append(command) + return requirements + + def get_name(self): + return self.name + + def get_description(self): + return self.description + + def get_inputs(self): + return self.inputs + + def get_outputs(self): + return self.outputs diff --git a/build/lib/c3/templates/R_dockerfile_template b/build/lib/c3/templates/R_dockerfile_template new file mode 100644 index 00000000..e60449e5 --- /dev/null +++ b/build/lib/c3/templates/R_dockerfile_template @@ -0,0 +1,11 @@ +FROM ${base_image} +USER root +RUN apt update +${requirements_docker} +ADD ${target_code} ${working_dir}${target_dir} +${additional_files_docker} +RUN chmod -R 777 ${working_dir} +RUN chmod -R 777 /usr/local/lib/R/ +USER docker +WORKDIR "${working_dir}" +CMD ["${command}", "${target_dir}${target_code}"] \ No newline at end of file diff --git a/build/lib/c3/templates/__init__.py b/build/lib/c3/templates/__init__.py new file mode 100644 index 00000000..94a3b13f --- /dev/null +++ b/build/lib/c3/templates/__init__.py @@ -0,0 +1,66 @@ + +import os +from string import Template +from pathlib import Path + +# template file names +PYTHON_COMPONENT_SETUP_CODE = 'component_setup_code.py' +R_COMPONENT_SETUP_CODE = 'component_setup_code.R' +PYTHON_COMPONENT_SETUP_CODE_WO_LOGGING = 'component_setup_code_wo_logging.py' +PYTHON_DOCKERFILE_FILE = 'python_dockerfile_template' +R_DOCKERFILE_FILE = 'R_dockerfile_template' +KFP_COMPONENT_FILE = 'kfp_component_template.yaml' +KUBERNETES_JOB_FILE = 'kubernetes_job_template.job.yaml' +CWL_COMPONENT_FILE = 'cwl_component_template.cwl' +GRID_WRAPPER_FILE = 'grid_wrapper_template.py' +COS_GRID_WRAPPER_FILE = 'cos_grid_wrapper_template.py' +LEGACY_COS_GRID_WRAPPER_FILE = 'legacy_cos_grid_wrapper_template.py' +S3KV_GRID_WRAPPER_FILE = 's3kv_grid_wrapper_template.py' +SIMPLE_GRID_WRAPPER_FILE = 'simple_grid_wrapper_template.py' +FOLDER_GRID_WRAPPER_FILE = 'folder_grid_wrapper_template.py' + +# load templates +template_path = Path(os.path.dirname(__file__)) + +with open(template_path / PYTHON_COMPONENT_SETUP_CODE, 'r') as f: + python_component_setup_code = f.read() + +with open(template_path / R_COMPONENT_SETUP_CODE, 'r') as f: + r_component_setup_code = f.read() + +with open(template_path / PYTHON_COMPONENT_SETUP_CODE_WO_LOGGING, 'r') as f: + component_setup_code_wo_logging = f.read() + +with open(template_path / PYTHON_DOCKERFILE_FILE, 'r') as f: + python_dockerfile_template = Template(f.read()) + +with open(template_path / R_DOCKERFILE_FILE, 'r') as f: + r_dockerfile_template = Template(f.read()) + +with open(template_path / KFP_COMPONENT_FILE, 'r') as f: + kfp_component_template = Template(f.read()) + +with open(template_path / KUBERNETES_JOB_FILE, 'r') as f: + kubernetes_job_template = Template(f.read()) + +with open(template_path / CWL_COMPONENT_FILE, 'r') as f: + cwl_component_template = Template(f.read()) + +with open(template_path / GRID_WRAPPER_FILE, 'r') as f: + grid_wrapper_template = Template(f.read()) + +with open(template_path / COS_GRID_WRAPPER_FILE, 'r') as f: + cos_grid_wrapper_template = Template(f.read()) + +with open(template_path / LEGACY_COS_GRID_WRAPPER_FILE, 'r') as f: + legacy_cos_grid_wrapper_template = Template(f.read()) + +with open(template_path / S3KV_GRID_WRAPPER_FILE, 'r') as f: + s3kv_grid_wrapper_template = Template(f.read()) + +with open(template_path / SIMPLE_GRID_WRAPPER_FILE, 'r') as f: + simple_grid_wrapper_template = Template(f.read()) + +with open(template_path / FOLDER_GRID_WRAPPER_FILE, 'r') as f: + folder_grid_wrapper_template = Template(f.read()) + \ No newline at end of file diff --git a/build/lib/c3/templates/component_setup_code.R b/build/lib/c3/templates/component_setup_code.R new file mode 100644 index 00000000..daa3f847 --- /dev/null +++ b/build/lib/c3/templates/component_setup_code.R @@ -0,0 +1,14 @@ + +args = commandArgs(trailingOnly=TRUE) + +for (parameter in args) { + key_value <- unlist(strsplit(parameter, split="=")) + if (length(key_value) == 2) { + print(parameter) + key <- key_value[1] + value <- key_value[2] + eval(parse(text=paste0('Sys.setenv(',key,'="',value,'")'))) + } else { + print(paste('Could not find key value pair for argument ', parameter)) + } +} diff --git a/build/lib/c3/templates/component_setup_code.py b/build/lib/c3/templates/component_setup_code.py new file mode 100644 index 00000000..348cae7b --- /dev/null +++ b/build/lib/c3/templates/component_setup_code.py @@ -0,0 +1,35 @@ +# default code for each operator +import os +import sys +import re +import logging + +# init logger +root = logging.getLogger() +root.setLevel('INFO') +handler = logging.StreamHandler(sys.stdout) +handler.setLevel('INFO') +formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') +handler.setFormatter(formatter) +root.addHandler(handler) +logging.basicConfig(level=logging.CRITICAL) + +# get parameters from args +parameters = list(filter( + lambda s: s.find('=') > -1 and bool(re.match(r'[A-Za-z0-9_]*=[.\/A-Za-z0-9]*', s)), + sys.argv + )) + +# set parameters to env variables +for parameter in parameters: + variable = parameter.split('=')[0] + value = parameter.split('=', 1)[-1] + logging.info(f'Parameter: {variable} = "{value}"') + os.environ[variable] = value + +# update log level +log_level = os.environ.get('log_level', 'INFO') +if log_level !='INFO': + logging.info(f'Updating log level to {log_level}') + root.setLevel(log_level) + handler.setLevel(log_level) diff --git a/build/lib/c3/templates/component_setup_code_wo_logging.py b/build/lib/c3/templates/component_setup_code_wo_logging.py new file mode 100644 index 00000000..e8b67a7b --- /dev/null +++ b/build/lib/c3/templates/component_setup_code_wo_logging.py @@ -0,0 +1,17 @@ +import os +import re +import sys +import logging + +# get parameters from args +parameters = list(filter( + lambda s: s.find('=') > -1 and bool(re.match(r'[A-Za-z0-9_]*=[.\/A-Za-z0-9]*', s)), + sys.argv + )) + +# set parameters to env variables +for parameter in parameters: + variable = parameter.split('=')[0] + value = parameter.split('=', 1)[-1] + logging.debug(f'Parameter: {variable} = "{value}"') + os.environ[variable] = value diff --git a/build/lib/c3/templates/cos_grid_wrapper_template.py b/build/lib/c3/templates/cos_grid_wrapper_template.py new file mode 100644 index 00000000..30fa86d9 --- /dev/null +++ b/build/lib/c3/templates/cos_grid_wrapper_template.py @@ -0,0 +1,217 @@ +""" +${component_name} got wrapped by cos_grid_wrapper, which wraps any CLAIMED component and implements the generic grid computing pattern for cos files https://romeokienzler.medium.com/the-generic-grid-computing-pattern-transforms-any-sequential-workflow-step-into-a-transient-grid-c7f3ca7459c8 + +CLAIMED component description: ${component_description} +""" + +# pip install s3fs pandas +# component dependencies +# ${component_dependencies} + +import os +import json +import random +import logging +import shutil +import time +import glob +import s3fs +from datetime import datetime +from pathlib import Path +import pandas as pd + + +# import component code +from ${component_name} import * + + +def explode_connection_string(cs): + if cs is None: + return None, None, None, None + elif cs.startswith('cos') or cs.startswith('s3'): + buffer=cs.split('://', 1)[1] + access_key_id=buffer.split('@')[0].split(':')[0] + secret_access_key=buffer.split('@')[0].split(':')[1] + endpoint = f"https://{buffer.split('@')[1].split('/')[0]}" + path=buffer.split('@')[1].split('/', 1)[1] + return (access_key_id, secret_access_key, endpoint, path) + else: + return (None, None, None, cs) + # TODO consider cs as secret and grab connection string from kubernetes + + +# File containing batches. Provided as a comma-separated list of strings or keys in a json dict. All batch file names must contain the batch name. +gw_batch_file = os.environ.get('gw_batch_file', None) +(gw_batch_file_access_key_id, gw_batch_file_secret_access_key, gw_batch_file_endpoint, gw_batch_file) = explode_connection_string(gw_batch_file) +# Optional column name for a csv batch file (default: 'filename') +gw_batch_file_col_name = os.environ.get('gw_batch_file_col_name', 'filename') +# cos gw_coordinator_connection +gw_coordinator_connection = os.environ.get('gw_coordinator_connection') +(gw_coordinator_access_key_id, gw_coordinator_secret_access_key, gw_coordinator_endpoint, gw_coordinator_path) = explode_connection_string(gw_coordinator_connection) +# timeout in seconds to remove lock file from struggling job (default 3 hours) +gw_lock_timeout = int(os.environ.get('gw_lock_timeout', 10800)) +# ignore error files and rerun batches with errors +gw_ignore_error_files = bool(os.environ.get('gw_ignore_error_files', False)) +# maximal wait time for staggering start +gw_max_time_wait_staggering = int(os.environ.get('gw_max_time_wait_staggering', 60)) + +# coordinator file suffix +suffix_lock = '.lock' +suffix_processed = '.processed' +suffix_error = '.err' + +# component interface +${component_interface} + +# Init s3 +s3coordinator = s3fs.S3FileSystem( + anon=False, + key=gw_coordinator_access_key_id, + secret=gw_coordinator_secret_access_key, + client_kwargs={'endpoint_url': gw_coordinator_endpoint}) +gw_coordinator_path = Path(gw_coordinator_path) + +if gw_batch_file_access_key_id is not None: + s3batch_file = s3fs.S3FileSystem( + anon=False, + key=gw_batch_file_access_key_id, + secret=gw_batch_file_secret_access_key, + client_kwargs={'endpoint_url': gw_batch_file_endpoint}) +else: + logging.debug('Loading batch file from source s3.') + s3batch_file = s3coordinator + + +def load_batches_from_file(batch_file): + if batch_file.endswith('.json'): + # Load batches from keys of a json file + logging.info(f'Loading batches from json file: {batch_file}') + with open(batch_file, 'r') as f: + batch_dict = json.load(f) + batches = batch_dict.keys() + + elif batch_file.endswith('.csv'): + # Load batches from keys of a csv file + logging.info(f'Loading batches from csv file: {batch_file}') + df = pd.read_csv(batch_file, header='infer') + assert gw_batch_file_col_name in df.columns, \ + f'gw_batch_file_col_name {gw_batch_file_col_name} not in columns of batch file {batch_file}' + batches = df[gw_batch_file_col_name].to_list() + + elif batch_file.endswith('.txt'): + # Load batches from comma-separated txt file + logging.info(f'Loading comma-separated batch strings from file: {batch_file}') + with open(batch_file, 'r') as f: + batch_string = f.read() + batches = [b.strip() for b in batch_string.split(',')] + else: + raise ValueError(f'C3 only supports batch files of type ' + f'json (batches = dict keys), ' + f'csv (batches = column values), or ' + f'txt (batches = comma-seperated list).') + + logging.info(f'Loaded {len(batches)} batches') + logging.debug(f'List of batches: {batches}') + assert len(batches) > 0, f"batch_file {batch_file} has no batches." + return batches + + +def perform_process(process, batch): + logging.debug(f'Check coordinator files for batch {batch}.') + # Init coordinator files + lock_file = str(gw_coordinator_path / (batch + suffix_lock)) + processed_file = str(gw_coordinator_path / (batch + suffix_processed)) + error_file = str(gw_coordinator_path / (batch + suffix_error)) + + if s3coordinator.exists(lock_file): + # Remove strugglers + last_modified = s3coordinator.info(lock_file)['LastModified'] + if (datetime.now(last_modified.tzinfo) - last_modified).total_seconds() > gw_lock_timeout: + logging.info(f'Lock file {lock_file} is expired.') + s3coordinator.rm(lock_file) + else: + logging.debug(f'Batch {batch} is locked.') + return + + if s3coordinator.exists(processed_file): + logging.debug(f'Batch {batch} is processed.') + return + + if s3coordinator.exists(error_file): + if gw_ignore_error_files: + logging.info(f'Ignoring previous error in batch {batch} and rerun.') + else: + logging.debug(f'Batch {batch} has error.') + return + + logging.debug(f'Locking batch {batch}.') + s3coordinator.touch(lock_file) + + # processing files with custom process + logging.info(f'Processing batch {batch}.') + try: + target_files = process(batch, ${component_inputs}) + except Exception as err: + logging.exception(err) + # Write error to file + with s3coordinator.open(error_file, 'w') as f: + f.write(f"{type(err).__name__} in batch {batch}: {err}") + s3coordinator.rm(lock_file) + logging.error(f'Continue processing.') + return + + logging.info(f'Finished Batch {batch}.') + s3coordinator.touch(processed_file) + # Remove lock file + if s3coordinator.exists(lock_file): + s3coordinator.rm(lock_file) + else: + logging.warning(f'Lock file {lock_file} was removed by another process. ' + f'Consider increasing gw_lock_timeout to avoid repeated processing (currently {gw_lock_timeout}s).') + + +def process_wrapper(sub_process): + delay = random.randint(0, gw_max_time_wait_staggering) + logging.info(f'Staggering start, waiting for {delay} seconds') + time.sleep(delay) + + # Init coordinator dir + s3coordinator.makedirs(gw_coordinator_path, exist_ok=True) + + # Download batch file + if s3batch_file.exists(gw_batch_file): + s3batch_file.get(gw_batch_file, gw_batch_file) + if not os.path.isfile(gw_batch_file): + # Download batch file from s3 coordinator + cos_gw_batch_file = str(gw_coordinator_path.split([0]) / gw_batch_file) + if s3batch_file.exists(cos_gw_batch_file): + s3batch_file.get(gw_batch_file, gw_batch_file) + else: + raise ValueError("Cannot identify batches. Provide valid gw_batch_file " + "(local path, path within coordinator bucket, or s3 connection to batch file).") + + # Get batches + batches = load_batches_from_file(gw_batch_file) + + # Iterate over all batches + for batch in batches: + perform_process(sub_process, batch) + + # Check and log status of batches + processed_status = sum(s3coordinator.exists(gw_coordinator_path / (batch + suffix_processed)) for batch in batches) + lock_status = sum(s3coordinator.exists(gw_coordinator_path / (batch + suffix_lock)) for batch in batches) + error_status = sum(s3coordinator.exists(gw_coordinator_path / (batch + suffix_error)) for batch in batches) + + logging.info(f'Finished current process. Status batches: ' + f'{processed_status} processed / {lock_status} locked / {error_status} errors / {len(batches)} total') + + if error_status: + logging.error(f'Found errors! Resolve errors and rerun operator with gw_ignore_error_files=True.') + # Print all error messages + for error_file in s3coordinator.glob(str(gw_coordinator_path / ('**/*' + suffix_error))): + with s3coordinator.open(error_file, 'r') as f: + logging.error(f.read()) + + +if __name__ == '__main__': + process_wrapper(${component_process}) diff --git a/build/lib/c3/templates/cwl_component_template.cwl b/build/lib/c3/templates/cwl_component_template.cwl new file mode 100644 index 00000000..f5106075 --- /dev/null +++ b/build/lib/c3/templates/cwl_component_template.cwl @@ -0,0 +1,15 @@ +cwlVersion: v1.2 +class: CommandLineTool + +baseCommand: "claimed" + +inputs: + component: + type: string + default: ${repository}/claimed-${name}:${version} + inputBinding: + position: 1 + prefix: --component +${inputs} + +outputs: ${outputs} diff --git a/build/lib/c3/templates/folder_grid_wrapper_template.py b/build/lib/c3/templates/folder_grid_wrapper_template.py new file mode 100644 index 00000000..900ace74 --- /dev/null +++ b/build/lib/c3/templates/folder_grid_wrapper_template.py @@ -0,0 +1,137 @@ +""" +${component_name} got wrapped by folder_grid_wrapper, which wraps any CLAIMED component and implements folder-level locking. +This folder grid wrapper scans immediate subdirectories of sgw_source_folder and for each folder the ${component_process} function is called once. +Locking is achieved by creating files in the target directory using the pattern .{STATUS} where STATUS in: +LOCKED +PROCESSED +FAILED + + +CLAIMED component description: ${component_description} +""" + +# pip install pandas + +# component dependencies +# ${component_dependencies} + +import os +import json +import random +import logging +from pathlib import Path +import pandas as pd + +# import component code +from ${component_name} import * + +# folder containing input data in single files or subfolders +sgw_source_folder = os.environ.get('sgw_source_folder') + +# folder to store the output markers and results +# Default: sgw_source_folder. If equal, entries containing LOCKED or PROCESSED or FAILED are ignored. +sgw_target_folder = os.environ.get('sgw_target_folder', sgw_source_folder) + +# component interface +${component_interface} + +def _marker_paths(entry_name: str, is_dir: bool): + """Return (LOCKED, PROCESSED, FAILED) marker paths for a file or a folder.""" + tgt = Path(sgw_target_folder) + if is_dir: + # folder markers are directories + return ( + tgt / f"{entry_name}.LOCKED", + tgt / f"{entry_name}.PROCESSED", + tgt / f"{entry_name}.FAILED", + ) + # file markers are files + base, ext = os.path.splitext(entry_name) + return ( + tgt / f"{base}.LOCKED{ext}", + tgt / f"{base}.PROCESSED{ext}", + tgt / f"{base}.FAILED{ext}", + ) + +def _claimed_any(locked, processed, failed) -> bool: + return locked.exists() or processed.exists() or failed.exists() + +def get_next_batch(): + """Pick a random unclaimed entry from source, supporting files and folders.""" + filtered = [] + with os.scandir(sgw_source_folder) as it: + for e in it: + name = e.name + + # If source and target are the same, skip marker entries + if sgw_source_folder == sgw_target_folder and ( + "LOCKED" in name or "PROCESSED" in name or "FAILED" in name + ): + continue + + locked, processed, failed = _marker_paths(name, e.is_dir()) + if not _claimed_any(locked, processed, failed): + filtered.append((name, e.is_dir())) + + if filtered: + return random.choice(filtered) # (name, is_dir) + return None + +def _try_acquire_lock(name: str, is_dir: bool): + """Create the LOCKED marker atomically and return its Path, or None if already claimed.""" + locked, _, _ = _marker_paths(name, is_dir) + try: + if is_dir: + # atomic directory creation is a good folder lock + locked.mkdir() + else: + # atomic file creation + fd = os.open(str(locked), os.O_CREAT | os.O_EXCL | os.O_WRONLY) + os.close(fd) + return locked + except FileExistsError: + return None + +def process_wrapper(sub_process): + sgw_target_folder_path = Path(sgw_target_folder) + sgw_target_folder_path.mkdir(exist_ok=True, parents=True) + + while True: + nxt = get_next_batch() + if nxt is None: + break + + entry_name, is_dir = nxt + src_path = str(Path(sgw_source_folder) / entry_name) + locked, processed, failed = _marker_paths(entry_name, is_dir) + logging.info(f"Processing: {src_path}") + + # Acquire the lock. If we lose the race, pick another entry. + lock_path = _try_acquire_lock(entry_name, is_dir) + if lock_path is None: + continue + + try: + # Call user component. For folders, src_path points to the folder. + # The second argument remains the marker path, same as before. + sub_process(src_path, str(lock_path)) + + # Success marker + lock_path.rename(processed) + + except Exception as e: + # Failure marker + lock_path.rename(failed) + if is_dir: + # Put the error message inside the FAILED directory + errfile = Path(failed) / "error.txt" + errfile.write_text(f"Exception occurred: {str(e)}\n", encoding="utf-8") + else: + # For files, FAILED is itself a file; overwrite with the error text + Path(failed).write_text(f"Exception occurred: {str(e)}\n", encoding="utf-8") + logging.error(f"Processing failed for {src_path}: {str(e)}") + + logging.info("Finished processing all batches.") + +if __name__ == '__main__': + process_wrapper(${component_process}) \ No newline at end of file diff --git a/build/lib/c3/templates/grid_wrapper_template.py b/build/lib/c3/templates/grid_wrapper_template.py new file mode 100644 index 00000000..9a418be7 --- /dev/null +++ b/build/lib/c3/templates/grid_wrapper_template.py @@ -0,0 +1,205 @@ +""" +${component_name} got wrapped by grid_wrapper, which wraps any CLAIMED component and implements the generic grid computing pattern https://romeokienzler.medium.com/the-generic-grid-computing-pattern-transforms-any-sequential-workflow-step-into-a-transient-grid-c7f3ca7459c8 + +CLAIMED component description: ${component_description} +""" + +# pip install pandas + +# component dependencies +# ${component_dependencies} + +import os +import json +import random +import logging +import time +import glob +from pathlib import Path +import pandas as pd + +# import component code +from ${component_name} import * + + +# File with batches. Provided as a comma-separated list of strings, keys in a json dict or single column CSV with 'filename' has header. +gw_batch_file = os.environ.get('gw_batch_file', None) +# Optional column name for a csv batch file (default: 'filename') +gw_batch_file_col_name = os.environ.get('gw_batch_file_col_name', 'filename') +# file path pattern like your/path/**/*.tif. Multiple patterns can be separated with commas. Is ignored if gw_batch_file is provided. +gw_file_path_pattern = os.environ.get('gw_file_path_pattern', None) +# pattern for grouping file paths into batches like ".split('.')[-1]". Is ignored if gw_batch_file is provided. +gw_group_by = os.environ.get('gw_group_by', None) +# path to grid wrapper coordinator directory +gw_coordinator_path = os.environ.get('gw_coordinator_path') +gw_coordinator_path = Path(gw_coordinator_path) + +# timeout in seconds to remove lock file from struggling job (default 3 hours) +gw_lock_timeout = int(os.environ.get('gw_lock_timeout', 10800)) +# ignore error files and rerun batches with errors +gw_ignore_error_files = bool(os.environ.get('gw_ignore_error_files', False)) +# maximal wait time for staggering start +gw_max_time_wait_staggering = int(os.environ.get('gw_max_time_wait_staggering', 60)) + +# coordinator file suffix +suffix_lock = '.lock' +suffix_processed = '.processed' +suffix_error = '.err' + +# component interface +${component_interface} + +def load_batches_from_file(batch_file): + if batch_file.endswith('.json'): + # Load batches from keys of a json file + logging.info(f'Loading batches from json file: {batch_file}') + with open(batch_file, 'r') as f: + batch_dict = json.load(f) + batches = batch_dict.keys() + + elif batch_file.endswith('.csv'): + # Load batches from keys of a csv file + logging.info(f'Loading batches from csv file: {batch_file}') + df = pd.read_csv(batch_file, header='infer') + assert gw_batch_file_col_name in df.columns, \ + f'gw_batch_file_col_name {gw_batch_file_col_name} not in columns of batch file {batch_file}' + batches = df[gw_batch_file_col_name].to_list() + + elif batch_file.endswith('.txt'): + # Load batches from comma-separated txt file + logging.info(f'Loading comma-separated batch strings from file: {batch_file}') + with open(batch_file, 'r') as f: + batch_string = f.read() + batches = [b.strip() for b in batch_string.split(',')] + else: + raise ValueError(f'C3 only supports batch files of type ' + f'json (batches = dict keys), ' + f'csv (batches = column values), or ' + f'txt (batches = comma-seperated list).') + + logging.info(f'Loaded {len(batches)} batches') + logging.debug(f'List of batches: {batches}') + assert len(batches) > 0, f"batch_file {batch_file} has no batches." + return batches + + +def identify_batches_from_pattern(file_path_patterns, group_by): + logging.info(f'Start identifying files and batches') + batches = set() + all_files = [] + + # Iterate over comma-separated paths + for file_path_pattern in file_path_patterns.split(','): + logging.info(f'Get file paths from pattern: {file_path_pattern}') + files = glob.glob(file_path_pattern.strip()) + assert len(files) > 0, f"Found no files with file_path_pattern {file_path_pattern}." + all_files.extend(files) + + # get batches by applying the group by function to all file paths + for path_string in all_files: + part = eval('str(path_string)' + group_by, {"group_by": group_by, "path_string": path_string}) + assert part != '', f'Could not extract batch with path_string {path_string} and group_by {group_by}' + batches.add(part) + + logging.info(f'Identified {len(batches)} batches') + logging.debug(f'List of batches: {batches}') + + return batches + + +def perform_process(process, batch): + logging.debug(f'Check coordinator files for batch {batch}.') + # init coordinator files + lock_file = gw_coordinator_path / (batch + suffix_lock) + error_file = gw_coordinator_path / (batch + suffix_error) + processed_file = gw_coordinator_path / (batch + suffix_processed) + + if lock_file.exists(): + # remove strugglers + if lock_file.stat().st_mtime < time.time() - gw_lock_timeout: + logging.debug(f'Lock file {lock_file} is expired.') + lock_file.unlink() + else: + logging.debug(f'Batch {batch} is locked.') + return + + if processed_file.exists(): + logging.debug(f'Batch {batch} is processed.') + return + + if error_file.exists(): + if gw_ignore_error_files: + logging.info(f'Ignoring previous error in batch {batch} and rerun.') + else: + logging.debug(f'Batch {batch} has error.') + return + + logging.debug(f'Locking batch {batch}.') + lock_file.parent.mkdir(parents=True, exist_ok=True) + lock_file.touch() + + # processing files with custom process + logging.info(f'Processing batch {batch}.') + try: + target_files = process(batch, ${component_inputs}) + except Exception as err: + logging.exception(err) + # Write error to file + with open(error_file, 'w') as f: + f.write(f"{type(err).__name__} in batch {batch}: {err}") + lock_file.unlink() + logging.error(f'Continue processing.') + return + + logging.info(f'Finished Batch {batch}.') + processed_file.touch() + + # Remove lock file + if lock_file.exists(): + lock_file.unlink() + else: + logging.warning(f'Lock file {lock_file} was removed by another process. ' + f'Consider increasing gw_lock_timeout to avoid repeated processing (currently {gw_lock_timeout}s).') + + + +def process_wrapper(sub_process): + delay = random.randint(0, gw_max_time_wait_staggering) + logging.info(f'Staggering start, waiting for {delay} seconds') + time.sleep(delay) + + # Init coordinator dir + gw_coordinator_path.mkdir(exist_ok=True, parents=True) + + # get batches + if gw_batch_file is not None and os.path.isfile(gw_batch_file): + batches = load_batches_from_file(gw_batch_file) + elif gw_file_path_pattern is not None and gw_group_by is not None: + logging.warning("gw_file_path_pattern and gw_group_by are legacy and might be removed in a future release.") + batches = identify_batches_from_pattern(gw_file_path_pattern, gw_group_by) + else: + raise ValueError("Cannot identify batches. " + "Provide valid gw_batch_file or gw_file_path_pattern and gw_group_by.") + + # Iterate over all batches + for batch in batches: + perform_process(sub_process, batch) + + # Check and log status of batches + processed_status = sum((gw_coordinator_path / (batch + suffix_processed)).exists() for batch in batches) + lock_status = sum((gw_coordinator_path / (batch + suffix_lock)).exists() for batch in batches) + error_status = sum((gw_coordinator_path / (batch + suffix_error)).exists() for batch in batches) + + logging.info(f'Finished current process. Status batches: ' + f'{processed_status} processed / {lock_status} locked / {error_status} errors / {len(batches)} total') + + if error_status: + logging.error(f'Found errors! Resolve errors and rerun operator with gw_ignore_error_files=True.') + # print all error messages + for error_file in gw_coordinator_path.glob('**/*' + suffix_error): + with open(error_file, 'r') as f: + logging.error(f.read()) + + +if __name__ == '__main__': + process_wrapper(${component_process}) diff --git a/build/lib/c3/templates/kfp_component_template.yaml b/build/lib/c3/templates/kfp_component_template.yaml new file mode 100644 index 00000000..d5031586 --- /dev/null +++ b/build/lib/c3/templates/kfp_component_template.yaml @@ -0,0 +1,18 @@ +name: ${name} +description: ${description} + +inputs: +${inputs} + +outputs: +${outputs} + +implementation: + container: + image: ${repository}/claimed-${name}:${version} + command: + - sh + - -ec + - | + ${command} ./${target_dir}${target_code} ${parameter_list} +${parameter_values} \ No newline at end of file diff --git a/build/lib/c3/templates/kubernetes_job_template.job.yaml b/build/lib/c3/templates/kubernetes_job_template.job.yaml new file mode 100644 index 00000000..413c417d --- /dev/null +++ b/build/lib/c3/templates/kubernetes_job_template.job.yaml @@ -0,0 +1,17 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: ${name} +spec: + template: + spec: + containers: + - name: ${name} + image: ${repository}/claimed-${name}:${version} + workingDir: ${working_dir} + command: ["${command}","${target_dir}${target_code}"] + env: +${env_entries} + restartPolicy: OnFailure + imagePullSecrets: + - name: image_pull_secret \ No newline at end of file diff --git a/build/lib/c3/templates/legacy_cos_grid_wrapper_template.py b/build/lib/c3/templates/legacy_cos_grid_wrapper_template.py new file mode 100644 index 00000000..f68a2094 --- /dev/null +++ b/build/lib/c3/templates/legacy_cos_grid_wrapper_template.py @@ -0,0 +1,352 @@ +""" +${component_name} got wrapped by cos_grid_wrapper, which wraps any CLAIMED component and implements the generic grid computing pattern for cos files https://romeokienzler.medium.com/the-generic-grid-computing-pattern-transforms-any-sequential-workflow-step-into-a-transient-grid-c7f3ca7459c8 + +CLAIMED component description: ${component_description} +""" + +# pip install s3fs pandas +# component dependencies +# ${component_dependencies} + +import os +import json +import random +import logging +import shutil +import time +import glob +import s3fs +from datetime import datetime +from pathlib import Path +import pandas as pd + + +# import component code +from ${component_name} import * + + +def explode_connection_string(cs): + if cs is None: + return None, None, None, None + elif cs.startswith('cos') or cs.startswith('s3'): + buffer=cs.split('://', 1)[1] + access_key_id=buffer.split('@')[0].split(':')[0] + secret_access_key=buffer.split('@')[0].split(':')[1] + endpoint = f"https://{buffer.split('@')[1].split('/')[0]}" + path=buffer.split('@')[1].split('/', 1)[1] + return (access_key_id, secret_access_key, endpoint, path) + else: + return (None, None, None, cs) + # TODO consider cs as secret and grab connection string from kubernetes + + +# File containing batches. Provided as a comma-separated list of strings or keys in a json dict. All batch file names must contain the batch name. +gw_batch_file = os.environ.get('gw_batch_file', None) +(gw_batch_file_access_key_id, gw_batch_file_secret_access_key, gw_batch_file_endpoint, gw_batch_file) = explode_connection_string(gw_batch_file) +# Optional column name for a csv batch file (default: 'filename') +gw_batch_file_col_name = os.environ.get('gw_batch_file_col_name', 'filename') +# file path pattern like your/path/**/*.tif. Multiple patterns can be separated with commas. It is ignored if gw_batch_file is provided. +gw_file_path_pattern = os.environ.get('gw_file_path_pattern', None) +# pattern for grouping file paths into batches like ".split('.')[-2]". It is ignored if gw_batch_file is provided. +gw_group_by = os.environ.get('gw_group_by', None) + +# comma-separated list of additional cos files to copy +gw_additional_source_files = os.environ.get('gw_additional_source_files', '') +# download source cos files to local input path +gw_local_input_path = os.environ.get('gw_local_input_path', 'input') +# upload local target files to target cos path +gw_local_target_path = os.environ.get('gw_local_target_path', 'target') + +# cos gw_source_connection +gw_source_connection = os.environ.get('gw_source_connection') +(gw_source_access_key_id, gw_source_secret_access_key, gw_source_endpoint, gw_source_path) = explode_connection_string(gw_source_connection) + +# cos gw_target_connection +gw_target_connection = os.environ.get('gw_target_connection') +(gw_target_access_key_id, gw_target_secret_access_key, gw_target_endpoint, gw_target_path) = explode_connection_string(gw_target_connection) + +# cos gw_coordinator_connection +gw_coordinator_connection = os.environ.get('gw_coordinator_connection') +(gw_coordinator_access_key_id, gw_coordinator_secret_access_key, gw_coordinator_endpoint, gw_coordinator_path) = explode_connection_string(gw_coordinator_connection) + +# lock file suffix +gw_lock_file_suffix = os.environ.get('gw_lock_file_suffix', '.lock') +# processed file suffix +gw_processed_file_suffix = os.environ.get('gw_lock_file_suffix', '.processed') +# error file suffix +gw_error_file_suffix = os.environ.get('gw_error_file_suffix', '.err') +# timeout in seconds to remove lock file from struggling job (default 3 hours) +gw_lock_timeout = int(os.environ.get('gw_lock_timeout', 10800)) +# ignore error files and rerun batches with errors +gw_ignore_error_files = bool(os.environ.get('gw_ignore_error_files', False)) +# maximal wait time for staggering start +gw_max_time_wait_staggering = int(os.environ.get('gw_max_time_wait_staggering', 60)) + + +# component interface +${component_interface} + +# init s3 +s3source = s3fs.S3FileSystem( + anon=False, + key=gw_source_access_key_id, + secret=gw_source_secret_access_key, + client_kwargs={'endpoint_url': gw_source_endpoint}) + +gw_source_path = Path(gw_source_path) + +if gw_target_connection is not None: + s3target = s3fs.S3FileSystem( + anon=False, + key=gw_target_access_key_id, + secret=gw_target_secret_access_key, + client_kwargs={'endpoint_url': gw_target_endpoint}) + gw_target_path = Path(gw_target_path) +else: + logging.debug('Using source path as target path.') + gw_target_path = gw_source_path + s3target = s3source + +if gw_coordinator_connection is not None: + s3coordinator = s3fs.S3FileSystem( + anon=False, + key=gw_coordinator_access_key_id, + secret=gw_coordinator_secret_access_key, + client_kwargs={'endpoint_url': gw_coordinator_endpoint}) + gw_coordinator_path = Path(gw_coordinator_path) +else: + logging.debug('Using source bucket as coordinator bucket.') + gw_coordinator_path = gw_source_path + s3coordinator = s3source + +if gw_batch_file_access_key_id is not None: + s3batch_file = s3fs.S3FileSystem( + anon=False, + key=gw_batch_file_access_key_id, + secret=gw_batch_file_secret_access_key, + client_kwargs={'endpoint_url': gw_batch_file_endpoint}) +else: + logging.debug('Loading batch file from source s3.') + s3batch_file = s3source + gw_batch_file = str(gw_source_path / gw_batch_file) + + +def load_batches_from_file(batch_file): + if batch_file.endswith('.json'): + # load batches from keys of a json file + logging.info(f'Loading batches from json file: {batch_file}') + with open(batch_file, 'r') as f: + batch_dict = json.load(f) + batches = batch_dict.keys() + + elif batch_file.endswith('.csv'): + # load batches from keys of a csv file + logging.info(f'Loading batches from csv file: {batch_file}') + df = pd.read_csv(batch_file, header='infer') + assert gw_batch_file_col_name in df.columns, \ + f'gw_batch_file_col_name {gw_batch_file_col_name} not in columns of batch file {batch_file}' + batches = df[gw_batch_file_col_name].to_list() + + elif batch_file.endswith('.txt'): + # Load batches from comma-separated txt file + logging.info(f'Loading comma-separated batch strings from file: {batch_file}') + with open(batch_file, 'r') as f: + batch_string = f.read() + batches = [b.strip() for b in batch_string.split(',')] + else: + raise ValueError(f'C3 only supports batch files of type ' + f'json (batches = dict keys), ' + f'csv (batches = column values), or ' + f'txt (batches = comma-seperated list).') + + logging.info(f'Loaded {len(batches)} batches') + logging.debug(f'List of batches: {batches}') + assert len(batches) > 0, f"batch_file {batch_file} has no batches." + return batches + + +def get_files_from_pattern(file_path_patterns): + logging.info(f'Start identifying files') + all_files = [] + + # Iterate over comma-separated paths + for file_path_pattern in file_path_patterns.split(','): + logging.info(f'Get file paths from pattern: {file_path_pattern}') + files = s3source.glob(str(gw_source_path / file_path_pattern.strip())) + if len(files) == 0: + logging.warning(f"Found no files with file_path_pattern {file_path_pattern}.") + all_files.extend(files) + logging.info(f'Found {len(all_files)} cos files') + return all_files + +def identify_batches_from_pattern(file_path_patterns, group_by): + logging.info(f'Start identifying files and batches') + batches = set() + all_files = get_files_from_pattern(file_path_patterns) + + # get batches by applying the group by function to all file paths + for path_string in all_files: + part = eval('str(path_string)' + group_by, {"group_by": group_by, "path_string": path_string}) + assert part != '', f'Could not extract batch with path_string {path_string} and group_by {group_by}' + batches.add(part) + + logging.info(f'Identified {len(batches)} batches') + logging.debug(f'List of batches: {batches}') + + return batches, all_files + + +def perform_process(process, batch, cos_files): + logging.debug(f'Check coordinator files for batch {batch}.') + # init coordinator files + coordinator_dir = gw_coordinator_path + lock_file = str(coordinator_dir / (batch + gw_lock_file_suffix)) + processed_file = str(coordinator_dir / (batch + gw_processed_file_suffix)) + error_file = str(coordinator_dir / (batch + gw_error_file_suffix)) + + if s3coordinator.exists(lock_file): + # remove strugglers + last_modified = s3coordinator.info(lock_file)['LastModified'] + if (datetime.now(last_modified.tzinfo) - last_modified).total_seconds() > gw_lock_timeout: + logging.info(f'Lock file {lock_file} is expired.') + s3coordinator.rm(lock_file) + else: + logging.debug(f'Batch {batch} is locked.') + return + + if s3coordinator.exists(processed_file): + logging.debug(f'Batch {batch} is processed.') + return + + if s3coordinator.exists(error_file): + if gw_ignore_error_files: + logging.info(f'Ignoring previous error in batch {batch} and rerun.') + else: + logging.debug(f'Batch {batch} has error.') + return + + logging.debug(f'Locking batch {batch}.') + s3coordinator.touch(lock_file) + logging.info(f'Processing batch {batch}.') + + # Create input and target directories + input_path = Path(gw_local_input_path) + target_path = Path(gw_local_target_path) + assert not input_path.exists(), (f'gw_local_input_path ({gw_local_input_path}) already exists. ' + f'Please provide a new input path.') + assert not target_path.exists(), (f'gw_local_target_path ({gw_local_target_path}) already exists. ' + f'Please provide a new target path.') + input_path.mkdir(parents=True) + target_path.mkdir(parents=True) + + # Download cos files to local input folder + batch_fileset = list(filter(lambda file: batch in file, cos_files)) + if gw_additional_source_files != '': + additional_source_files = [f.strip() for f in gw_additional_source_files.split(',')] + batch_fileset.extend(additional_source_files) + logging.info(f'Downloading {len(batch_fileset)} files from COS') + for cos_file in batch_fileset: + local_file = str(input_path / cos_file.split('/', 1)[-1]) + logging.debug(f'Downloading {cos_file} to {local_file}') + s3source.get(cos_file, local_file) + + # processing files with custom process + try: + target_files = process(batch, ${component_inputs}) + except Exception as err: + logging.exception(err) + # Write error to file + with s3coordinator.open(error_file, 'w') as f: + f.write(f"{type(err).__name__} in batch {batch}: {err}") + s3coordinator.rm(lock_file) + logging.error(f'Continue processing.') + return + + # optional verify target files + if target_files is not None: + if isinstance(target_files, str): + target_files = [target_files] + for target_file in target_files: + if not os.path.exists(target_file): + logging.error(f'Target file {target_file} does not exist for batch {batch}.') + if any([not str(t).startswith(gw_local_target_path) for t in target_files]): + logging.warning('Some target files are not in target path. Only files in target path are uploaded.') + else: + logging.info(f'Cannot verify batch {batch} (target files not provided). Using files in target_path.') + + # upload files in target path + local_target_files = list(target_path.glob('*')) + logging.info(f'Uploading {len(local_target_files)} target files to COS.') + for local_file in local_target_files: + cos_file = gw_target_path / local_file.relative_to(target_path) + logging.debug(f'Uploading {local_file} to {cos_file}') + s3target.put(str(local_file), str(cos_file)) + + logging.info(f'Remove local input and target files.') + shutil.rmtree(input_path) + shutil.rmtree(target_path) + + logging.info(f'Finished Batch {batch}.') + s3coordinator.touch(processed_file) + # Remove lock file + if s3coordinator.exists(lock_file): + s3coordinator.rm(lock_file) + else: + logging.warning(f'Lock file {lock_file} was removed by another process. ' + f'Consider increasing gw_lock_timeout (currently {gw_lock_timeout}s) to repeated processing.') + + +def process_wrapper(sub_process): + delay = random.randint(0, gw_max_time_wait_staggering) + logging.info(f'Staggering start, waiting for {delay} seconds') + time.sleep(delay) + + # Init coordinator dir + coordinator_dir = gw_coordinator_path + s3coordinator.makedirs(coordinator_dir, exist_ok=True) + + # get batches + cos_gw_batch_file = str(gw_source_path / gw_batch_file) + if (gw_batch_file is not None and (os.path.isfile(gw_batch_file) or s3source.exists(cos_gw_batch_file))): + if not os.path.isfile(gw_batch_file): + # Download batch file from s3 + if s3batch_file.exists(gw_batch_file): + s3batch_file.get(gw_batch_file, gw_batch_file) + else: + s3batch_file.get(str(gw_source_path / gw_batch_file), gw_batch_file) + batches = load_batches_from_file(gw_batch_file) + if gw_file_path_pattern: + cos_files = get_files_from_pattern(gw_file_path_pattern) + else: + logging.warning('gw_file_path_pattern is not provided. ' + 'Grid wrapper expects the wrapped operator to handle COS files instead of the automatic download and upload.') + cos_files = [] + elif gw_file_path_pattern is not None and gw_group_by is not None: + batches, cos_files = identify_batches_from_pattern(gw_file_path_pattern, gw_group_by) + else: + raise ValueError("Cannot identify batches. " + "Provide valid gw_batch_file (local path or path within source bucket) " + "or gw_file_path_pattern and gw_group_by.") + + # Iterate over all batches + for batch in batches: + perform_process(sub_process, batch, cos_files) + + # Check and log status of batches + processed_status = [s3coordinator.exists(coordinator_dir / (batch + gw_processed_file_suffix)) for batch in batches] + lock_status = [s3coordinator.exists(coordinator_dir / (batch + gw_lock_file_suffix)) for batch in batches] + error_status = [s3coordinator.exists(coordinator_dir / (batch + gw_error_file_suffix)) for batch in batches] + + logging.info(f'Finished current process. Status batches: ' + f'{sum(processed_status)} processed / {sum(lock_status)} locked / {sum(error_status)} errors / {len(processed_status)} total') + + if sum(error_status): + logging.error(f'Found errors! Resolve errors and rerun operator with gw_ignore_error_files=True.') + # print all error messages + for error_file in s3coordinator.glob(str(coordinator_dir / ('**/*' + gw_error_file_suffix))): + with s3coordinator.open(error_file, 'r') as f: + logging.error(f.read()) + + +if __name__ == '__main__': + process_wrapper(${component_process}) diff --git a/build/lib/c3/templates/python_dockerfile_template b/build/lib/c3/templates/python_dockerfile_template new file mode 100644 index 00000000..d4498650 --- /dev/null +++ b/build/lib/c3/templates/python_dockerfile_template @@ -0,0 +1,11 @@ +FROM ${base_image} +USER root +${additional_files_docker} +RUN pip install --upgrade pip +RUN pip install ipython nbformat +${requirements_docker} +ADD ${target_code} ${working_dir}${target_dir} +RUN chmod -R 777 ${working_dir} +USER default +WORKDIR "${working_dir}" +CMD ["${command}", "${target_dir}${target_code}"] diff --git a/build/lib/c3/templates/s3kv_grid_wrapper_template.py b/build/lib/c3/templates/s3kv_grid_wrapper_template.py new file mode 100644 index 00000000..799be82b --- /dev/null +++ b/build/lib/c3/templates/s3kv_grid_wrapper_template.py @@ -0,0 +1,643 @@ +""" +${component_name} got wrapped by grid_wrapper, which wraps any CLAIMED component and implements the generic grid computing pattern https://romeokienzler.medium.com/the-generic-grid-computing-pattern-transforms-any-sequential-workflow-step-into-a-transient-grid-c7f3ca7459c8 + +CLAIMED component description: ${component_description} +""" + +# pip install s3fs boto3 pandas +# component dependencies +# ${component_dependencies} + +import os +import json +import random +import logging +import time +import glob +from pathlib import Path +import pandas as pd +import s3fs +from hashlib import sha256 + + + +# import component code +from ${component_name} import * + +#------------------REMOVE once pip install for s3kv is fixed +import os +import time +from datetime import datetime +import shutil +import boto3 +import json + + +class S3KV: + def __init__(self, s3_endpoint_url:str, bucket_name: str, + aws_access_key_id: str = None, aws_secret_access_key: str = None , enable_local_cache=True): + """ + Initializes the S3KV object with the given S3 bucket, AWS credentials, and Elasticsearch host. + + :param s3_endpoint_url: The s3 endpoint. + :param bucket_name: The name of the S3 bucket to use for storing the key-value data. + :param aws_access_key_id: (Optional) AWS access key ID. + :param aws_secret_access_key: (Optional) AWS secret access key. + """ + self.bucket_name = bucket_name + self.enable_local_cache = enable_local_cache + self.s3_client = boto3.client( + 's3', + endpoint_url=s3_endpoint_url, + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key + ) + + if not os.path.exists('/tmp/s3kv_cache'): + os.makedirs('/tmp/s3kv_cache') + + def _get_object_key(self, key: str) -> str: + """ + Constructs the S3 object key for the given key. + + :param key: The key used to access the value in the S3 bucket. + :return: The S3 object key for the given key. + """ + return f"s3kv/{key}.json" + + def cache_all_keys(self): + """ + Saves all keys to the local /tmp directory as they are being added. + """ + keys = self.list_keys() + for key in keys: + value = self.get(key) + if value is not None: + with open(f'/tmp/s3kv_cache/{key}.json', 'w') as f: + json.dump(value, f) + + def get_from_cache(self, key: str) -> dict: + """ + Retrieves a key from the local cache if present, and clears old cache entries. + + :param key: The key to retrieve from the cache. + :return: The value associated with the given key if present in the cache, else None. + """ + self.clear_old_cache() + cache_path = f'/tmp/s3kv_cache/{key}.json' + if os.path.exists(cache_path): + with open(cache_path, 'r') as f: + return json.load(f) + else: + return None + + + def add(self, key: str, value: dict, metadata: dict = None): + """ + Adds a new key-value pair to the S3KV database, caches it locally, and sends metadata to Elasticsearch. + + :param key: The key to be added. + :param value: The value corresponding to the key. + :param metadata: (Optional) Metadata associated with the data (will be sent to Elasticsearch). + """ + s3_object_key = self._get_object_key(key) + serialized_value = json.dumps(value) + self.s3_client.put_object(Bucket=self.bucket_name, Key=s3_object_key, Body=serialized_value) + + with open(f'/tmp/s3kv_cache/{key}.json', 'w') as f: + json.dump(value, f) + + + + def delete(self, key: str): + """ + Deletes a key-value pair from the S3KV database. + + :param key: The key to be deleted. + """ + s3_object_key = self._get_object_key(key) + self.s3_client.delete_object(Bucket=self.bucket_name, Key=s3_object_key) + + cache_path = f'/tmp/s3kv_cache/{key}.json' + if os.path.exists(cache_path): + os.remove(cache_path) + + + def get(self, key: str, default: dict = None) -> dict: + """ + Retrieves the value associated with the given key from the S3KV database. + + :param key: The key whose value is to be retrieved. + :param default: (Optional) The default value to return if the key does not exist. + :return: The value associated with the given key, or the default value if the key does not exist. + """ + s3_object_key = self._get_object_key(key) + try: + response = self.s3_client.get_object(Bucket=self.bucket_name, Key=s3_object_key) + value = response['Body'].read() + return json.loads(value) + except self.s3_client.exceptions.NoSuchKey: + return default + + + def list_keys(self) -> list: + """ + Lists all the keys in the S3KV database. + + :return: A list of all keys in the database. + """ + response = self.s3_client.list_objects_v2(Bucket=self.bucket_name, Prefix="") + keys = [obj['Key'][5:-5] for obj in response.get('Contents', []) if obj['Key'].endswith('.json')] + return keys + + + def clear_cache(self): + """ + Clears the local cache by removing all cached JSON files. + """ + cache_directory = '/tmp/s3kv_cache' + if os.path.exists(cache_directory): + shutil.rmtree(cache_directory) + os.makedirs('/tmp/s3kv_cache') + + + def clear_old_cache(self, max_days: int = 7): + """ + Clears the cache for keys that have been in the cache for longer than a specific number of days. + + :param max_days: The maximum number of days a key can stay in the cache before being cleared. + """ + cache_directory = '/tmp/s3kv_cache' + current_time = time.time() + + if os.path.exists(cache_directory): + for filename in os.listdir(cache_directory): + file_path = os.path.join(cache_directory, filename) + if os.path.isfile(file_path): + file_age = current_time - os.path.getmtime(file_path) + if file_age > max_days * 86400: # Convert days to seconds + os.remove(file_path) + + + def clear_cache_for_key(self, key: str): + """ + Clears the local cache for a specific key in the S3KV database. + + :param key: The key for which to clear the local cache. + """ + cache_path = f'/tmp/s3kv_cache/{key}.json' + if os.path.exists(cache_path): + os.remove(cache_path) + + + def key_exists(self, key: str) -> bool: + """ + Checks if a key exists in the S3KV database. + + :param key: The key to check. + :return: True if the key exists, False otherwise. + """ + s3_object_key = self._get_object_key(key) + try: + self.s3_client.head_object(Bucket=self.bucket_name, Key=s3_object_key) + return True + except Exception as e: + # Return false even if response is unauthorized or similar + return False + + + def list_keys_with_prefix(self, prefix: str) -> list: + """ + Lists all the keys in the S3KV database that have a specific prefix. + + :param prefix: The prefix to filter the keys. + :return: A list of keys in the database that have the specified prefix. + """ + response = self.s3_client.list_objects_v2(Bucket=self.bucket_name, Prefix=prefix) + keys = [obj['Key'][5:-5] for obj in response.get('Contents', []) if obj['Key'].endswith('.json')] + return keys + + + def copy_key(self, source_key: str, destination_key: str): + """ + Copies the value of one key to another key in the S3KV database. + + :param source_key: The key whose value will be copied. + :param destination_key: The key to which the value will be copied. + """ + source_s3_object_key = self._get_object_key(source_key) + destination_s3_object_key = self._get_object_key(destination_key) + + response = self.s3_client.get_object(Bucket=self.bucket_name, Key=source_s3_object_key) + value = response['Body'].read() + + self.s3_client.put_object(Bucket=self.bucket_name, Key=destination_s3_object_key, Body=value) + + # Copy the key in the local cache if it exists + source_cache_path = f'/tmp/s3kv_cache/{source_key}.json' + destination_cache_path = f'/tmp/s3kv_cache/{destination_key}.json' + if os.path.exists(source_cache_path): + shutil.copy(source_cache_path, destination_cache_path) + + + def get_key_size(self, key: str) -> int: + """ + Gets the size (file size) of a key in the S3KV database. + + :param key: The key whose size will be retrieved. + :return: The size (file size) of the key in bytes, or 0 if the key does not exist. + """ + s3_object_key = self._get_object_key(key) + try: + response = self.s3_client.head_object(Bucket=self.bucket_name, Key=s3_object_key) + return response['ContentLength'] + except self.s3_client.exceptions.NoSuchKey: + return 0 + + + def get_key_last_updated_time(self, key: str) -> float: + """ + Gets the last updated time of a key in the S3KV database. + + :param key: The key whose last updated time will be retrieved. + :return: The last updated time of the key as a floating-point timestamp, or 0 if the key does not exist. + """ + s3_object_key = self._get_object_key(key) + try: + response = self.s3_client.head_object(Bucket=self.bucket_name, Key=s3_object_key) + last_modified = response['LastModified'] + st = time.mktime(last_modified.timetuple()) + + return datetime.fromtimestamp(st) + + except self.s3_client.exceptions.NoSuchKey: + return 0 + + + def set_bucket_policy(self): + """ + Sets a bucket policy to grant read and write access to specific keys used by the S3KV library. + """ + policy = { + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "S3KVReadWriteAccess", + "Effect": "Allow", + "Principal": { + "AWS": "*" + }, + "Action": [ + "s3:GetObject", + "s3:PutObject" + ], + "Resource": f"arn:aws:s3:::{self.bucket_name}/s3kv/*" + } + ] + } + + policy_json = json.dumps(policy) + self.s3_client.put_bucket_policy(Bucket=self.bucket_name, Policy=policy_json) + + + def tag_key(self, key: str, tags: dict): + """ + Tags a key in the S3KV database with the provided tags. + + :param key: The key to be tagged. + :param tags: A dictionary containing the tags to be added to the key. + For example, {'TagKey1': 'TagValue1', 'TagKey2': 'TagValue2'} + """ + s3_object_key = self._get_object_key(key) + + # Convert the tags dictionary to a format compatible with the `put_object_tagging` method + tagging = {'TagSet': [{'Key': k, 'Value': v} for k, v in tags.items()]} + + # Apply the tags to the object + self.s3_client.put_object_tagging(Bucket=self.bucket_name, Key=s3_object_key, Tagging=tagging) + + + def tag_keys_with_prefix(self, prefix: str, tags: dict): + """ + Tags all keys in the S3KV database with the provided prefix with the specified tags. + + :param prefix: The prefix of the keys to be tagged. + :param tags: A dictionary containing the tags to be added to the keys. + For example, {'TagKey1': 'TagValue1', 'TagKey2': 'TagValue2'} + """ + keys_to_tag = self.list_keys_with_prefix(prefix) + + for key in keys_to_tag: + self.tag_key(key, tags) + + + def merge_keys(self, source_keys: list, destination_key: str): + """ + Merges the values of source keys into the value of the destination key in the S3KV database. + + :param source_keys: A list of source keys whose values will be merged. + :param destination_key: The key whose value will be updated by merging the source values. + """ + destination_s3_object_key = self._get_object_key(destination_key) + + # Initialize an empty dictionary for the destination value + destination_value = {} + + # Retrieve and merge values from source keys + for source_key in source_keys: + source_value = self.get(source_key) + if source_value: + destination_value.update(source_value) + + # Update the destination value in the S3 bucket + serialized_value = json.dumps(destination_value) + self.s3_client.put_object(Bucket=self.bucket_name, Key=destination_s3_object_key, Body=serialized_value) + + # Update the value in the local cache if it exists + destination_cache_path = f'/tmp/s3kv_cache/{destination_key}.json' + with open(destination_cache_path, 'w') as f: + json.dump(destination_value, f) + + + + def find_keys_by_tag_value(self, tag_key: str, tag_value: str) -> list: + """ + Finds keys in the S3KV database based on the value of a specific tag. + + :param tag_key: The tag key to search for. + :param tag_value: The tag value to search for. + :return: A list of keys that have the specified tag key with the specified value. + """ + response = self.s3_client.list_objects_v2(Bucket=self.bucket_name, Prefix="s3kv/") + keys_with_tag = [] + + for obj in response.get('Contents', []): + s3_object_key = obj['Key'] + tags = self.get_tags(s3_object_key) + if tags and tag_key in tags and tags[tag_key] == tag_value: + keys_with_tag.append(s3_object_key[5:-5]) # Extract the key name + + return keys_with_tag + + def get_tags(self, s3_object_key: str) -> dict: + """ + Gets the tags of an object in the S3KV database. + + :param s3_object_key: The S3 object key whose tags will be retrieved. + :return: A dictionary containing the tags of the object. + """ + response = self.s3_client.get_object_tagging(Bucket=self.bucket_name, Key=s3_object_key) + tags = {} + for tag in response.get('TagSet', []): + tags[tag['Key']] = tag['Value'] + return tags + + + + def place_retention_lock(self, key: str, retention_days: int): + """ + Places a retention lock on a key in the S3KV database for the specified number of days. + + :param key: The key to place the retention lock on. + :param retention_days: The number of days to lock the key for. + """ + s3_object_key = self._get_object_key(key) + print(s3_object_key) + + retention_period = retention_days * 24 * 60 * 60 # Convert days to seconds + + self.s3_client.put_object_retention( + Bucket=self.bucket_name, + Key=s3_object_key, + Retention={ + 'Mode': 'GOVERNANCE', + 'RetainUntilDate': int(time.time()) + retention_period + } + ) + + + def remove_retention_lock(self, key: str): + """ + Removes the retention lock from a key in the S3KV database. + + :param key: The key to remove the retention lock from. + """ + s3_object_key = self._get_object_key(key) + + self.s3_client.put_object_retention( + Bucket=self.bucket_name, + Key=s3_object_key, + BypassGovernanceRetention=True, + Retention={ + + } + ) + + + def delete_by_tag(self, tag_key: str, tag_value: str): + """ + Deletes keys in the S3KV database based on a specific tag. + + :param tag_key: The tag key to match for deletion. + :param tag_value: The tag value to match for deletion. + """ + keys_to_delete = self.find_keys_by_tag_value(tag_key, tag_value) + + for key in keys_to_delete: + self.delete(key) + + + def apply_legal_hold(self, key: str): + """ + Applies a legal hold on a key in the S3KV database. + + :param key: The key on which to apply the legal hold. + """ + s3_object_key = self._get_object_key(key) + + self.s3_client.put_object_legal_hold( + Bucket=self.bucket_name, + Key=s3_object_key, + LegalHold={ + 'Status': 'ON' + } + ) + + + + + + def is_legal_hold_applied(self, key: str) -> bool: + """ + Checks if a key in the S3KV database is under legal hold. + + :param key: The key to check for legal hold. + :return: True if the key is under legal hold, False otherwise. + """ + s3_object_key = self._get_object_key(key) + + response = self.s3_client.get_object_legal_hold(Bucket=self.bucket_name, Key=s3_object_key) + + legal_hold_status = response.get('LegalHold', {}).get('Status') + return legal_hold_status == 'ON' + + + def release_legal_hold(self, key: str): + """ + Releases a key from legal hold in the S3KV database. + + :param key: The key to release from legal hold. + """ + s3_object_key = self._get_object_key(key) + + self.s3_client.put_object_legal_hold( + Bucket=self.bucket_name, + Key=s3_object_key, + LegalHold={ + 'Status': 'OFF' + } + ) + +#----------------------------------------------------------- + + +def explode_connection_string(cs): + if cs is None: + return None, None, None, None + if cs.startswith('cos') or cs.startswith('s3'): + buffer=cs.split('://')[1] + access_key_id=buffer.split('@')[0].split(':')[0] + secret_access_key=buffer.split('@')[0].split(':')[1] + endpoint=f"https://{buffer.split('@')[1].split('/')[0]}" + path=buffer.split('@')[1].split('/', 1)[1] + return (access_key_id, secret_access_key, endpoint, path) + else: + return (None, None, None, cs) + # TODO consider cs as secret and grab connection string from kubernetes + + + +# File with batches. Provided as a comma-separated list of strings, keys in a json dict or single column CSV with 'filename' has header. Either local path as [cos|s3]://user:pw@endpoint/path +gw_batch_file = os.environ.get('gw_batch_file', None) +(gw_batch_file_access_key_id, gw_batch_file_secret_access_key, gw_batch_file_endpoint, gw_batch_file) = explode_connection_string(gw_batch_file) +# Optional column name for a csv batch file (default: 'filename') +gw_batch_file_col_name = os.environ.get('gw_batch_file_col_name', 'filename') + +# cos gw_coordinator_connection +gw_coordinator_connection = os.environ.get('gw_coordinator_connection') +(gw_coordinator_access_key_id, gw_coordinator_secret_access_key, gw_coordinator_endpoint, gw_coordinator_path) = explode_connection_string(gw_coordinator_connection) + +# maximal wait time for staggering start +gw_max_time_wait_staggering = int(os.environ.get('gw_max_time_wait_staggering',60)) + +# component interface +#${component_interface} + +def load_batches_from_file(batch_file): + # Download batch file from s3 + s3_batch_file = s3fs.S3FileSystem( + anon=False, + key=gw_batch_file_access_key_id, + secret=gw_batch_file_secret_access_key, + client_kwargs={'endpoint_url': gw_batch_file_endpoint}) + s3_batch_file.get(batch_file, batch_file) + + if batch_file.endswith('.json'): + # load batches from keys of a json file + logging.info(f'Loading batches from json file: {batch_file}') + with open(batch_file, 'r') as f: + batch_dict = json.load(f) + batches = batch_dict.keys() + + elif batch_file.endswith('.csv'): + # load batches from keys of a csv file + logging.info(f'Loading batches from csv file: {batch_file}') + df = pd.read_csv(batch_file, header='infer') + assert gw_batch_file_col_name in df.columns, \ + f'gw_batch_file_col_name {gw_batch_file_col_name} not in columns of batch file {batch_file}' + batches = df[gw_batch_file_col_name].to_list() + + elif batch_file.endswith('.txt'): + # Load batches from comma-separated txt file + logging.info(f'Loading comma-separated batch strings from file: {batch_file}') + with open(batch_file, 'r') as f: + batch_string = f.read() + batches = [b.strip() for b in batch_string.split(',')] + else: + raise ValueError(f'C3 only supports batch files of type ' + f'json (batches = dict keys), ' + f'csv (batches = column values), or ' + f'txt (batches = comma-seperated list).') + + logging.info(f'Loaded {len(batches)} batches') + logging.debug(f'List of batches: {batches}') + assert len(batches) > 0, f"batch_file {batch_file} has no batches." + return batches + + +def perform_process(process, batch, coordinator): + logging.debug(f'Check coordinator files for batch {batch}.') + + batch_id = sha256(batch.encode('utf-8')).hexdigest() # ensure no special characters break cos + logging.info(f'Generating {batch_id} for {batch}') + + if coordinator.key_exists(batch_id): + if coordinator.get(batch_id) == 'locked': + logging.debug(f'Batch {batch_id} is locked') + return + elif coordinator.get(batch_id) == 'processed': + logging.debug(f'Batch {batch_id} is processed') + return + else: + logging.debug(f'Batch {batch_id} is failed') + return + + + logging.debug(f'Locking batch {batch_id}.') + coordinator.add(batch_id,'locked') + + # processing files with custom process + logging.info(f'Processing batch {batch_id}.') + try: + process(batch, ${component_inputs}) + except Exception as err: + logging.exception(err) + coordinator.add(batch_id,f"{type(err).__name__} in batch {batch_id}: {err}") + logging.error(f'Continue processing.') + return + + logging.info(f'Finished Batch {batch_id}.') + coordinator.add(batch_id,'processed') + + +def process_wrapper(sub_process): + delay = random.randint(0, gw_max_time_wait_staggering) + logging.info(f'Staggering start, waiting for {delay} seconds') + time.sleep(delay) + + # Init coordinator + coordinator = S3KV(gw_coordinator_endpoint, + gw_coordinator_path, + gw_coordinator_access_key_id, gw_coordinator_secret_access_key, + enable_local_cache=False) + + + # get batches + batches = load_batches_from_file(gw_batch_file) + + # Iterate over all batches + for batch in batches: + perform_process(sub_process, batch, coordinator) + + # Check and log status of batches + processed_status = sum(coordinator.get(batch_id) == 'processed' for batch_id in batches) + lock_status = sum(coordinator.get(batch_id) == 'locked' for batch_id in batches) + exists_status = sum(coordinator.key_exists(batch_id) for batch_id in batches) + error_status = exists_status - processed_status - lock_status + + logging.info(f'Finished current process. Status batches: ' + f'{processed_status} processed / {lock_status} locked / {error_status} errors / {len(batches)} total') + + +if __name__ == '__main__': + process_wrapper(${component_process}) diff --git a/build/lib/c3/templates/simple_grid_wrapper_template.py b/build/lib/c3/templates/simple_grid_wrapper_template.py new file mode 100644 index 00000000..66908801 --- /dev/null +++ b/build/lib/c3/templates/simple_grid_wrapper_template.py @@ -0,0 +1,105 @@ +""" +${component_name} got wrapped by grid_wrapper, which wraps any CLAIMED component and implements the generic grid computing pattern https://romeokienzler.medium.com/the-generic-grid-computing-pattern-transforms-any-sequential-workflow-step-into-a-transient-grid-c7f3ca7459c8 +This simple grid wrapper just scans a folder and for each file the grid_process function is called. Locking is achieved the following way: +Given source file1.ext is processed, simple_grid_wrapper creates files in the target_directory following the pattern file1.{STATUS}.ext where STATUS in: +LOCKED +PROCESSED +FAILED + + +CLAIMED component description: ${component_description} +""" + +# pip install pandas + +# component dependencies +# ${component_dependencies} + +import os +import json +import random +import logging +import time +import glob +from pathlib import Path +import pandas as pd + +# import component code +from ${component_name} import * + + +#folder containing input data in single files +sgw_source_folder = os.environ.get('sgw_source_folder') + +#folder to store the output data in single files. Default: sgw_source_folder, in case sgw_source_folder==sgw_target_folder, files containing .LOCKED., .PROCESSED., .FAILED. are ignored +sgw_target_folder = os.environ.get('sgw_target_folder', sgw_source_folder) + +# component interface +${component_interface} + +def get_next_batch(): + files = os.listdir(sgw_source_folder) + if sgw_source_folder == sgw_target_folder: + files = [ + f for f in files + if not any(keyword in f for keyword in ["LOCKED", "PROCESSED", "FAILED"]) + ] + + # Filter files and check if corresponding target file exists + filtered_files = [] + for file in files: + file_name, file_ext = os.path.splitext(file) + + # Create target file names with LOCKED, PROCESSED, FAILED extensions + target_file_locked = f"{file_name}.LOCKED{file_ext}" + target_file_processed = f"{file_name}.PROCESSED{file_ext}" + target_file_failed = f"{file_name}.FAILED{file_ext}" + + # Check if any of the target files exists + if not any( + os.path.exists(os.path.join(sgw_target_folder, target_file)) + for target_file in [target_file_locked, target_file_processed, target_file_failed] + ): + filtered_files.append(file) + + if filtered_files: + return random.choice(filtered_files) + else: + return None + + +def process_wrapper(sub_process): + sgw_target_folder_path = Path(sgw_target_folder) + sgw_target_folder_path.mkdir(exist_ok=True, parents=True) + + while True: + file_to_process = get_next_batch() + logging.info(f"Processing batch: {file_to_process}") + if file_to_process is None: + break + + file_name = Path(file_to_process).stem + file_ext = Path(file_to_process).suffix + locked_file = sgw_target_folder+f"/{file_name}.LOCKED{file_ext}" + locked_file_path = Path(locked_file) + + try: + locked_file_path.touch() + sub_process(sgw_source_folder +'/'+ file_to_process, locked_file) + processed_file = sgw_target_folder+f"/{file_name}.PROCESSED{file_ext}" + locked_file_path.rename(processed_file) + + except Exception as e: + failed_file = sgw_target_folder+f"/{file_name}.FAILED{file_ext}" + locked_file_path.rename(failed_file) + + with open(failed_file, 'w') as f: + f.write(f"Exception occurred: {str(e)}\n") + + logging.error(f"Processing failed for {file_to_process}: {str(e)}") + + logging.info("Finished processing all batches.") + + +if __name__ == '__main__': + process_wrapper(${component_process}) diff --git a/build/lib/c3/utils.py b/build/lib/c3/utils.py new file mode 100644 index 00000000..0bbe5442 --- /dev/null +++ b/build/lib/c3/utils.py @@ -0,0 +1,146 @@ +import os +import logging +import nbformat +import re +import subprocess +from nbconvert.exporters import PythonExporter + + +def convert_notebook(path): + notebook = nbformat.read(path, as_version=4) + + # backwards compatibility (v0.1 description was included in second cell, merge first two markdown cells) + if notebook['cells'][0]['cell_type'] == 'markdown' and notebook['cells'][1]['cell_type'] == 'markdown': + logging.info('Merge first two markdown cells. File name is used as operator name, not first markdown cell.') + notebook['cells'][1]['source'] = notebook['cells'][0]['source'] + '\n' + notebook['cells'][1]['source'] + notebook['cells'] = notebook['cells'][1:] + + for cell in notebook['cells']: + if cell['cell_type'] == 'markdown': + # convert markdown to doc string + cell['cell_type'] = 'code' + cell['source'] = '"""\n' + cell['source'] + '\n"""' + cell['outputs'] = [] + cell['execution_count'] = 0 + if cell['cell_type'] == 'code' and re.search('![ ]*pip', cell['source']): + # replace !pip with #pip + cell['source'] = re.sub('![ ]*pip[ ]*install', '# pip install', cell['source']) + + # convert tp python script + (code, _) = PythonExporter().from_notebook_node(notebook) + + # add import get_ipython + code = 'from IPython import get_ipython \n' + code + + py_path = path.split('/')[-1].replace('.ipynb', '.py').replace('-', '_') + + assert not os.path.exists(py_path), f"File {py_path} already exist. Cannot convert notebook." + with open(py_path, 'w') as py_file: + py_file.write(code) + + return py_path + + +def increase_image_version(last_version): + try: + # increase last version value by 1 + version = last_version.split('.') + version[-1] = str(int(version[-1]) + 1) + version = '.'.join(version) + except: + # fails if a string value was used for the last tag + version = last_version + '.1' + logging.debug(f'Failed to increase last value, adding .1') + pass + return version + + +def pull_docker_image_tags(image): + logging.warning("The current implementation can only query local docker images. " + "Please use an argument '-v ' to avoid duplicates.") + # TODO: Add script for reading image tags from docker hub + # list images + output = subprocess.run( + ['docker', 'image', 'ls', image], + stdout=subprocess.PIPE + ).stdout.decode('utf-8') + try: + # remove header + image_list = output.splitlines()[1:] + # get list of image tags + image_tags = [line.split()[1] for line in image_list] + except: + image_tags = [] + logging.error(f"Could not load image tags from 'docker image ls' output: {output}") + pass + + # filter latest and none + image_tags = [t for t in image_tags if t not in ['latest', '']] + return image_tags + + +def pull_icr_image_tags(image): + # list images from icr + output = subprocess.run( + ['ibmcloud', 'cr', 'images', '--restrict', image.split('icr.io/', 1)[1]], + stdout=subprocess.PIPE + ).stdout.decode('utf-8') + + try: + assert 'You have no images in the namespaces' not in output + # remove header and final status + image_list = output.splitlines()[3:-2] + # get list of image tags + image_tags = [line.split()[1] for line in image_list] + except: + image_tags = [] + logging.warning(f"Could not load image tags from 'ibmcloud cr images' output: {output}") + pass + + # filter latest and none + image_tags = [t for t in image_tags if t not in ['latest', '']] + return image_tags + + +def get_image_version(repository, name): + """ + Get current version of the image from the registry and increase the version by 1. + Defaults to 0.1 if no image is found in the registry. + """ + if repository is None: + logging.debug('Using 0.1 as local version.') + return '0.1' + + logging.debug(f'Get image version from registry.') + if 'docker.io' in repository: + logging.debug('Get image tags from docker.') + image_tags = pull_docker_image_tags(f'{repository}/claimed-{name}') + elif 'icr.io' in repository: + logging.debug('Get image tags from ibmcloud container registry.') + image_tags = pull_icr_image_tags(f'{repository}/claimed-{name}') + else: + logging.warning('Unrecognised container registry, using docker to query image tags.') + image_tags = pull_docker_image_tags(f'{repository}/claimed-{name}') + logging.debug(f'Image tags: {image_tags}') + + def check_only_numbers(test_str): + return set(test_str) <= set('.0123456789') + + if len(image_tags) == 0: + # default version + version = '0.1' + logging.info(f'Using default version {version}. No prior image tag found for {repository}/claimed-{name}.') + + elif not check_only_numbers(image_tags[0]): + # increase last version + version = increase_image_version(image_tags[0]) + logging.info(f'Using version {version} based on last version {image_tags[0]}.') + + else: + # find the highest numerical version + image_tags = list(filter(check_only_numbers, image_tags)) + image_tags.sort(key=lambda s: list(map(int, s.split('.')))) + version = increase_image_version(image_tags[-1]) + logging.info(f'Using version {version} based on highest previous version {image_tags[-1]}.') + + return version diff --git a/build/lib/claimed/__init__.py b/build/lib/claimed/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/claimed.py b/build/lib/claimed/claimed.py similarity index 100% rename from src/claimed.py rename to build/lib/claimed/claimed.py diff --git a/build/lib/mlx/__init__.py b/build/lib/mlx/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/build/lib/mlx/cos_backend.py b/build/lib/mlx/cos_backend.py new file mode 100644 index 00000000..03454120 --- /dev/null +++ b/build/lib/mlx/cos_backend.py @@ -0,0 +1,111 @@ +import json +import boto3 +import jsonschema +from jsonschema import validate +import os + +class COSKVStore: + def __init__(self, bucket_name, schema, cos_client=None): + """ + Initialize the COS Key-Value store. + :param bucket_name: Name of the COS bucket. + :param schema: JSON Schema to validate values. + :param cos_client: Optional COS client instance (for dependency injection). + """ + self.bucket_name = bucket_name + self.schema = schema + self.cos_client = cos_client or boto3.client('s3') + + def put(self, key, value): + """ + Store a value in COS after validating against the JSON schema. + :param key: The key under which the value is stored. + :param value: The value to store (must be JSON-serializable). + """ + try: + validate(instance=value, schema=self.schema) + except jsonschema.exceptions.ValidationError as e: + raise ValueError(f"Validation error: {e.message}") + self.cos_client.put_object( + Bucket=self.bucket_name, + Key=key, + Body=json.dumps(value) + ) + + def get(self, key): + """ + Retrieve a value from COS. + :param key: The key to retrieve. + :return: The stored value as a dictionary. + """ + try: + response = self.cos_client.get_object(Bucket=self.bucket_name, Key=key) + return json.loads(response['Body'].read().decode('utf-8')) + except self.cos_client.exceptions.NoSuchKey: + raise KeyError(f"Key '{key}' not found in bucket '{self.bucket_name}'") + + def delete(self, key): + """ + Delete a key-value pair from COS. + :param key: The key to delete. + """ + self.cos_client.delete_object(Bucket=self.bucket_name, Key=key) + + def list_keys(self): + """ + List all keys in the COS bucket. + :return: A list of keys. + """ + response = self.cos_client.list_objects_v2(Bucket=self.bucket_name) + return [obj['Key'] for obj in response.get('Contents', [])] + +def load_schemas(schema_folder): + """ + Loads all JSON schemas from the given folder. + :param schema_folder: Path to the folder containing JSON schema files. + :return: A dictionary of schema names and their corresponding JSON objects. + """ + schemas = {} + for filename in os.listdir(schema_folder): + if filename.endswith(".json"): + filepath = os.path.join(schema_folder, filename) + with open(filepath, 'r') as f: + schemas[filename[:-5]] = json.load(f) + return schemas + +# Example Usage +if __name__ == "__main__": + schema_folder = "../schemas" + schemas = load_schemas(schema_folder) + + if "example_schema" in schemas: + example_schema = schemas["example_schema"] + cos_store = COSKVStore("my-cos-bucket", example_schema) + + test_data = { + "id": "model_123", + "name": "MyModel", + "framework": "TensorFlow", + "version": "2.10", + "description": "A simple neural network model.", + "metrics": { + "accuracy": 0.95, + "loss": 0.1 + } + } + cos_store.put("model_123", test_data) + print(cos_store.get("model_123")) + + #Example data without the metric key, which is not required + test_data_no_metrics = { + "id": "model_456", + "name": "MyOtherModel", + "framework": "PyTorch", + "version": "1.12", + "description": "Another neural network model.", + } + cos_store.put("model_456", test_data_no_metrics) + print(cos_store.get("model_456")) + + else: + print("Schema 'example_schema' not found.") \ No newline at end of file diff --git a/build/lib/mlx/s3_kv_store.py b/build/lib/mlx/s3_kv_store.py new file mode 100644 index 00000000..40b327cd --- /dev/null +++ b/build/lib/mlx/s3_kv_store.py @@ -0,0 +1,271 @@ +import json +import posixpath +import re +import argparse +from typing import Optional, Dict, List, Any, Tuple +from urllib.parse import quote, unquote +import boto3 +from botocore.exceptions import ClientError + +INDEX_SEPARATOR = "__i__" +KV_SEPARATOR = "=" +FILENAME_SUFFIX = ".json" + + +def _encode_component(s: str) -> str: + return quote(s, safe="") + + +def _decode_component(s: str) -> str: + return unquote(s) + + +def _build_filename(key: str, indexes: Optional[Dict[str, str]] = None) -> str: + parts = [_encode_component(key)] + if indexes: + for k in sorted(indexes.keys()): + v = indexes[k] + parts.append(f"{_encode_component(k)}{KV_SEPARATOR}{_encode_component(str(v))}") + return INDEX_SEPARATOR.join(parts) + FILENAME_SUFFIX + + +def _parse_filename(filename: str) -> Tuple[str, Dict[str, str]]: + if not filename.endswith(FILENAME_SUFFIX): + raise ValueError("invalid filename (missing .json suffix)") + core = filename[:-len(FILENAME_SUFFIX)] + parts = core.split(INDEX_SEPARATOR) + if not parts: + raise ValueError("invalid filename") + key = _decode_component(parts[0]) + indexes: Dict[str, str] = {} + for p in parts[1:]: + if KV_SEPARATOR not in p: + continue + k_enc, v_enc = p.split(KV_SEPARATOR, 1) + k = _decode_component(k_enc) + v = _decode_component(v_enc) + indexes[k] = v + return key, indexes + + +class S3KVStore: + def __init__(self, bucket: str, store_name: str, s3_client: Optional[Any] = None, endpoint_url: Optional[str] = None, aws_access_key_id: Optional[str] = None, aws_secret_access_key: Optional[str] = None): + self.bucket = bucket + self.store_name = store_name.strip("/") + if s3_client is None: + self.s3 = boto3.client( + "s3", + endpoint_url=endpoint_url, + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + ) + else: + self.s3 = s3_client + + def _prefix(self) -> str: + return f"{self.store_name}/" if self.store_name else "" + + def _s3_key_for_filename(self, filename: str) -> str: + return posixpath.join(self._prefix(), filename) + + def list(self, prefix: Optional[str] = None, max_keys: int = 1000) -> List[Dict[str, Any]]: + s3_prefix = self._prefix() + continuation_token = None + results: List[Dict[str, Any]] = [] + + while True: + kwargs = {"Bucket": self.bucket, "Prefix": s3_prefix, "MaxKeys": max_keys} + if continuation_token: + kwargs["ContinuationToken"] = continuation_token + resp = self.s3.list_objects_v2(**kwargs) + contents = resp.get("Contents", []) + for obj in contents: + full_key = obj["Key"] + filename = posixpath.basename(full_key) + try: + logical_key, indexes = _parse_filename(filename) + except ValueError: + continue + if prefix and not logical_key.startswith(prefix): + continue + results.append({ + "s3_key": full_key, + "filename": filename, + "key": logical_key, + "indexes": indexes, + "size": obj.get("Size", 0), + "last_modified": obj.get("LastModified"), + }) + if not resp.get("IsTruncated"): + break + continuation_token = resp.get("NextContinuationToken") + + return results + + def _match_indexes(self, item_indexes: Dict[str, str], filt: Dict[str, Any]) -> bool: + for fk, fv in filt.items(): + if fk not in item_indexes: + return False + val = item_indexes[fk] + if isinstance(fv, (list, tuple, set)): + if val not in {str(x) for x in fv}: + return False + elif isinstance(fv, re.Pattern): + if not fv.search(val): + return False + else: + if val != str(fv): + return False + return True + + def get(self, key: str, index_filter: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: + matches = self._find_objects_for_key(key, index_filter=index_filter) + if not matches: + raise KeyError(f"key not found: {key} (filter={index_filter})") + if len(matches) > 1: + raise ValueError(f"multiple objects match key={key}; refine using index_filter: {matches}") + s3_key = matches[0]["s3_key"] + try: + resp = self.s3.get_object(Bucket=self.bucket, Key=s3_key) + body = resp["Body"].read() + return json.loads(body.decode("utf-8")) + except ClientError as e: + raise IOError(f"s3 get_object failed: {e}") + + def put(self, key: str, value: Dict[str, Any], indexes: Optional[Dict[str, Any]] = None, overwrite: bool = False) -> str: + if overwrite: + existing = self._find_objects_for_key(key) + for obj in existing: + self.s3.delete_object(Bucket=self.bucket, Key=obj["s3_key"]) + + filename = _build_filename(key, {k: str(v) for k, v in (indexes or {}).items()}) + s3_key = self._s3_key_for_filename(filename) + if not overwrite: + try: + self.s3.head_object(Bucket=self.bucket, Key=s3_key) + raise FileExistsError(f"object already exists: {s3_key}") + except ClientError as e: + if e.response["Error"]["Code"] not in ("404", "NotFound", "NoSuchKey"): + raise + + payload = json.dumps(value, ensure_ascii=False).encode("utf-8") + self.s3.put_object(Bucket=self.bucket, Key=s3_key, Body=payload, ContentType="application/json") + return s3_key + + def update(self, key: str, value: Dict[str, Any], index_filter: Optional[Dict[str, Any]] = None, new_indexes: Optional[Dict[str, Any]] = None) -> str: + matches = self._find_objects_for_key(key, index_filter=index_filter) + if not matches: + raise KeyError(f"no object matches key={key} index_filter={index_filter}") + if len(matches) > 1: + raise ValueError(f"multiple objects match key={key} index_filter={index_filter}: {matches}") + + old = matches[0] + target_indexes = new_indexes if new_indexes is not None else old["indexes"] + new_filename = _build_filename(key, {k: str(v) for k, v in (target_indexes or {}).items()}) + new_s3_key = self._s3_key_for_filename(new_filename) + payload = json.dumps(value, ensure_ascii=False).encode("utf-8") + self.s3.put_object(Bucket=self.bucket, Key=new_s3_key, Body=payload, ContentType="application/json") + if old["s3_key"] != new_s3_key: + self.s3.delete_object(Bucket=self.bucket, Key=old["s3_key"]) + return new_s3_key + + def delete(self, key: str, index_filter: Optional[Dict[str, Any]] = None) -> int: + matches = self._find_objects_for_key(key, index_filter=index_filter) + count = 0 + for obj in matches: + self.s3.delete_object(Bucket=self.bucket, Key=obj["s3_key"]) + count += 1 + return count + + def search(self, index_filter: Dict[str, Any]) -> List[Dict[str, Any]]: + all_items = self.list() + return [it for it in all_items if self._match_indexes(it["indexes"], index_filter)] + + def _find_objects_for_key(self, key: str, index_filter: Optional[Dict[str, Any]] = None) -> List[Dict[str, Any]]: + candidates = self.list(prefix=key) + if index_filter is None: + return candidates + return [c for c in candidates if self._match_indexes(c["indexes"], index_filter)] + + +# ---------------- CLI ---------------- +def main(): + parser = argparse.ArgumentParser(description="S3 KV Store CLI") + parser.add_argument("bucket") + parser.add_argument("store") + parser.add_argument("--endpoint") + + sub = parser.add_subparsers(dest="cmd", required=True) + + # put + sp = sub.add_parser("put") + sp.add_argument("key") + sp.add_argument("--indexes", type=json.loads, default="{}") + sp.add_argument("--value") + sp.add_argument("--value-file") + sp.add_argument("--overwrite", action="store_true") + + # get + sp = sub.add_parser("get") + sp.add_argument("key") + sp.add_argument("--filter", type=json.loads, default="{}") + + # update + sp = sub.add_parser("update") + sp.add_argument("key") + sp.add_argument("--filter", type=json.loads, default="{}") + sp.add_argument("--new-indexes", type=json.loads, default=None) + sp.add_argument("--value") + sp.add_argument("--value-file") + + # delete + sp = sub.add_parser("delete") + sp.add_argument("key") + sp.add_argument("--filter", type=json.loads, default="{}") + + # list + sp = sub.add_parser("list") + sp.add_argument("--prefix") + + # search + sp = sub.add_parser("search") + sp.add_argument("--filter", type=json.loads, required=True) + + args = parser.parse_args() + store = MLX(bucket=args.bucket, store_name=args.store, endpoint_url=args.endpoint) + + if args.cmd == "put": + if args.value_file: + value = json.load(open(args.value_file)) + else: + value = json.loads(args.value) + key = store.put(args.key, value, indexes=args.indexes, overwrite=args.overwrite) + print(key) + + elif args.cmd == "get": + value = store.get(args.key, index_filter=args.filter) + print(json.dumps(value, indent=2)) + + elif args.cmd == "update": + if args.value_file: + value = json.load(open(args.value_file)) + else: + value = json.loads(args.value) + key = store.update(args.key, value, index_filter=args.filter, new_indexes=args.new_indexes) + print(key) + + elif args.cmd == "delete": + count = store.delete(args.key, index_filter=args.filter) + print(f"Deleted {count} object(s)") + + elif args.cmd == "list": + items = store.list(prefix=args.prefix) + print(json.dumps(items, indent=2, default=str)) + + elif args.cmd == "search": + items = store.search(args.filter) + print(json.dumps(items, indent=2, default=str)) + + +if __name__ == "__main__": + main() diff --git a/src/scripts/claimed b/build/lib/scripts/claimed similarity index 100% rename from src/scripts/claimed rename to build/lib/scripts/claimed diff --git a/dist/claimed-0.2.2-py3-none-any.whl b/dist/claimed-0.2.2-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..b911fbfc805b51a340101a988b1ebf3cb903fec5 GIT binary patch literal 59844 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 literal 0 HcmV?d00001 diff --git a/dist/claimed-0.2.2.tar.gz b/dist/claimed-0.2.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..bdf8e335c4c80662f0615c0ec649fa28a7eee609 GIT binary patch literal 507570 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 z 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

ei#s)x7^rx6;wXo2FT2`iQ21@dA`9_8Bp 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 z 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�^u)U)Dypn(l8d-A1 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 z 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 AS^xk5 literal 0 HcmV?d00001 diff --git a/pyproject.toml b/pyproject.toml index d8440d0c..2f516708 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,10 +6,8 @@ build-backend = "setuptools.build_meta" version_file = "src/c3/_version.py" [project] -name = "claimed-c3" -dynamic = ["version"] -# test pypi version: -# version = "0.2.15" +name = "claimed" +version = "0.2.2" authors = [ { name="The CLAIMED authors", email="claimed-framework@proton.me"}, ] @@ -17,10 +15,10 @@ maintainers = [ { name="Romeo Kienzler", email="claimed-framework@proton.me"}, { name="Benedikt Blumenstiel"}, ] -description = "The CLAIMED component compiler (C3) generates container images, KFP components, Kubernetes jobs, CWL Tasks, CLI applications" +description = "The CLAIMED framework" readme = "README.md" requires-python = ">=3.7" -license = {file = "LICENSE.txt"} +license = {file = "LICENSE"} keywords = ["CLAIMED", "compiler", "KubeFlow", "Kubernetes"] classifiers = [ "Programming Language :: Python :: 3", @@ -32,6 +30,7 @@ dependencies = [ 'ipython >= 8.16.1', 'traitlets >= 5.11.2', 'pandas', + 'boto3', ] [project.urls] @@ -42,9 +41,12 @@ dependencies = [ c3_create_operator = "c3.create_operator:main" c3_create_containerless_operator = "c3.create_containerless_operator:main" c3_create_gridwrapper = "c3.create_gridwrapper:main" +claimed = "claimed.claimed:main" + [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] "c3.templates" = ["*"] +"scripts" = ["*"] diff --git a/src/claimed.egg-info/PKG-INFO b/src/claimed.egg-info/PKG-INFO new file mode 100644 index 00000000..9363b56a --- /dev/null +++ b/src/claimed.egg-info/PKG-INFO @@ -0,0 +1,289 @@ +Metadata-Version: 2.4 +Name: claimed +Version: 0.2.2 +Summary: The CLAIMED framework +Home-page: https://github.com/claimed-framework/component-library +Author: The CLAIMED authors +Author-email: The CLAIMED authors +Maintainer: Benedikt Blumenstiel +Maintainer-email: Romeo Kienzler +License: Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2025 The Linux Foundation AI + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +Project-URL: Homepage, https://github.com/claimed-framework/c3 +Project-URL: Bug Tracker, https://github.com/claimed-framework/c3/issues +Keywords: CLAIMED,compiler,KubeFlow,Kubernetes +Classifier: Programming Language :: Python :: 3 +Classifier: License :: OSI Approved :: Apache Software License +Classifier: Operating System :: OS Independent +Requires-Python: >=3.7 +Description-Content-Type: text/markdown +License-File: LICENSE +Requires-Dist: nbconvert>=7.9.2 +Requires-Dist: ipython>=8.16.1 +Requires-Dist: traitlets>=5.11.2 +Requires-Dist: pandas +Requires-Dist: boto3 +Dynamic: author +Dynamic: home-page +Dynamic: license-file + +[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/6718/badge)](https://bestpractices.coreinfrastructure.org/projects/6718) +[![GitHub](https://img.shields.io/badge/issue_tracking-github-blue.svg)](https://github.com/claimed-framework/component-library/issues) + + + +# C3 - the CLAIMED Component Compiler + +**TL;DR** +- takes arbitrary assets (Jupyter notebooks, python scripts, R scripts) as input +- automatically creates container images and pushes to container registries +- automatically installs all required dependencies into the container image +- creates KubeFlow Pipeline components (target workflow execution engines are pluggable) +- creates Kubernetes job configs for execution on Kubernetes/Openshift clusters +- can be triggered from CICD pipelines + + +To learn more on how this library works in practice, please have a look at the following [video](https://www.youtube.com/watch?v=FuV2oG55C5s) + +## Related work +[Ploomber](https://github.com/ploomber/ploomber) + +[Orchest](https://www.orchest.io/) + +## Getting started + +### Install + +```sh +pip install claimed +``` + +### Usage + +Just run the following command with your python script or notebook: +```sh +c3_create_operator ".py" --repository "/" +``` + +Your code needs to follow certain requirements which are explained in [Getting Started](https://github.com/claimed-framework/c3/blob/main/GettingStarted.md). + + +## Getting Help + +```sh +c3_create_operator --help +``` + +We welcome your questions, ideas, and feedback. Please create an [issue](https://github.com/claimed-framework/component-library/issues) or a [discussion thread](https://github.com/claimed-framework/component-library/discussions). +Please see [VULNERABILITIES.md](VULNERABILITIES.md) for reporting vulnerabilities. + +## Contributing to CLAIMED +Interested in helping make CLAIMED better? We encourage you to take a look at our +[Contributing](CONTRIBUTING.md) page. + +## Credits + +CLAIMED is supported by the EU’s Horizon Europe program under Grant Agreement number 101131841 and also received funding from the Swiss State Secretariat for Education, Research and Innovation (SERI) and the UK Research and Innovation (UKRI). + +## License +This software is released under Apache License v2.0. diff --git a/src/claimed.egg-info/SOURCES.txt b/src/claimed.egg-info/SOURCES.txt new file mode 100644 index 00000000..9552be5d --- /dev/null +++ b/src/claimed.egg-info/SOURCES.txt @@ -0,0 +1,314 @@ +.gitignore +CHANGELOG.md +CODEOWNERS +CODE_OF_CONDUCT.md +CONTRIBUTING.md +FAQ.md +GettingStarted.md +LICENSE +MAINTAINERS.md +OWNERS +README.md +SECURITY.md +SUPPORT.md +VULNERABILITIES.md +contribution_process.md +pyproject.toml +release_process.md +setup.py +test_requirements.txt +.github/build_operators.sh +.github/build_operators_commits.txt +.github/pull_request_template.md +.github/ISSUE_TEMPLATE/-report-a-vulnerability-.md +.github/ISSUE_TEMPLATE/bug_report.md +.github/ISSUE_TEMPLATE/feature_request.md +.github/ISSUE_TEMPLATE/issue-report.md +.github/workflows/build_operators.yaml +.github/workflows/build_push_container_image.yaml +.github/workflows/integration-test.yml +.github/workflows/publish-pypi.yml +.github/workflows/pylint.yml +.github/workflows/python-app.yml +.github/workflows/python-package-conda.yml +.github/workflows/python-publish.yml +artwork/LICENSE +artwork/README.md +artwork/black/claimed-black.png +artwork/black/claimed-black.svg +artwork/color/claimed-color.png +artwork/color/claimed-color.svg +artwork/white/claimed-white.png +artwork/white/claimed-white.svg +claimed/__init__.py +claimed/claimed_utils.py +claimed/generic-notebook-runner.ipynb +claimed/run_tests.py +claimed/voila-notebook-runner.ipynb +claimed/akfire/README.md +claimed/akfire/akfire_claimed_dag.py +claimed/akfire/build_components.sh +claimed/akfire/config.json +claimed/akfire/operators/create_training_zarr.cwl +claimed/akfire/operators/create_training_zarr.py +claimed/akfire/operators/logistic_prediction.cwl +claimed/akfire/operators/logistic_prediction.py +claimed/akfire/operators/optimize_xgb_hyperparameters_from_df.cwl +claimed/akfire/operators/optimize_xgb_hyperparameters_from_df.py +claimed/akfire/operators/train_logistic.cwl +claimed/akfire/operators/train_logistic.py +claimed/akfire/operators/training_xgboost.cwl +claimed/akfire/operators/training_xgboost.py +claimed/akfire/operators/xgboost_prediction.cwl +claimed/akfire/operators/xgboost_prediction.py +claimed/analyze/spark-ts-trends.ipynb +claimed/analyze/spark-ts-trends.yaml +claimed/anomaly/anomaly-score-unsupervised.ipynb +claimed/anomaly/anomaly-score-unsupervised/Dockerfile +claimed/anomaly/anomaly-score-unsupervised/build.sh +claimed/anomaly/anomaly-score-unsupervised/test-anomaly-score-unsupervised.ipynb +claimed/anomaly/anomaly-score-unsupervised/watsoniotp.broken.phase_aligned.pickle +claimed/anomaly/anomaly-score-unsupervised/watsoniotp.healthy.phase_aligned.pickle +claimed/anomaly/anomaly-score-unsupervised/dapr/publish_event.sh +claimed/anomaly/anomaly-score-unsupervised/dapr/pubsub.yaml +claimed/anomaly/anomaly-score-unsupervised/dapr/start_sidecar.sh +claimed/anomaly/anomaly-score-unsupervised/dapr/start_subscriber.sh +claimed/anomaly/anomaly-score-unsupervised/dapr/statestore.yaml +claimed/anomaly/anomaly-score-unsupervised/dapr/subscriber.py +claimed/anomaly/anomaly-score-unsupervised/dapr/subscription.yaml +claimed/checkpoint/pull_asset.ipynb +claimed/checkpoint/pull_asset.yaml +claimed/checkpoint/store_asset.ipynb +claimed/checkpoint/store_asset.yaml +claimed/deploy/README.md +claimed/deploy/condition-blessing.ipynb +claimed/deploy/condition-blessing.yaml +claimed/deploy/deploy-kfserving.ipynb +claimed/deploy/deploy_watson_machine_learning.ipynb +claimed/deploy/deploy_watson_machine_learning.yaml +claimed/deploy/deploy_wml_pmml.ipynb +claimed/deploy/deploy_wml_pmml.yaml +claimed/examples/alert_for_content_in_url.cwl +claimed/examples/alert_for_content_in_url.ipynb +claimed/examples/alert_for_content_in_url.job.yaml +claimed/examples/alert_for_content_in_url.yaml +claimed/examples/fibonacci.cwl +claimed/examples/fibonacci.job.yaml +claimed/examples/fibonacci.py +claimed/examples/fibonacci.yaml +claimed/examples/hello_world.ipynb +claimed/examples/hello_world.job.yaml +claimed/examples/hello_world.yaml +claimed/filter/README.md +claimed/filter/filter.cwl +claimed/filter/filter.ipynb +claimed/filter/filter.job.yaml +claimed/filter/filter.yaml +claimed/filter/filter_docker.cwl +claimed/filter/spark-sample.ipynb +claimed/geo/gdal.ipynb +claimed/input/README.md +claimed/input/input-Xview-download.cwl +claimed/input/input-Xview-download.ipynb +claimed/input/input-Xview-download.job.yaml +claimed/input/input-Xview-download.yaml +claimed/input/input-climate-copernicus.ipynb +claimed/input/input-climate-copernicus.yaml +claimed/input/input-codenet-LangClass.ipynb +claimed/input/input-codenet-LangClass.yaml +claimed/input/input-cos-zarr.ipynb +claimed/input/input-covid-chestxray.ipynb +claimed/input/input-covid-chestxray.yaml +claimed/input/input-from-mongodb.ipynb +claimed/input/input-hmp.ipynb +claimed/input/input-hmp.yaml +claimed/input/input-mqtt.ipynb +claimed/input/input-pardata.ipynb +claimed/input/input-pardata.yaml +claimed/input/input-pei.ipynb +claimed/input/input-postgresql.ipynb +claimed/input/input-postgresql.yaml +claimed/input/input-rki-covid19-deaths.ipynb +claimed/input/input-swissmedic.ipynb +claimed/input/input-url.ipynb +claimed/input/input-url.yaml +claimed/input/input-webcam.ipynb +claimed/input/ls-cos.ipynb +claimed/metric/README.md +claimed/metric/metric-aif360.ipynb +claimed/metric/metric-aif360.yaml +claimed/metric/metric-aix360-lime.ipynb +claimed/metric/metric-aix360-lime.yaml +claimed/metric/metric-confusion-matrix.ipynb +claimed/metric/metric-confusion-matrix.yaml +claimed/monitoring/README.md +claimed/monitoring/notification-email.ipynb +claimed/monitoring/notification-email.yaml +claimed/nlp/nlp-classify-text-simple.ipynb +claimed/nlp/nlp-classify-text-simple.yaml +claimed/output/output-elastic.ipynb +claimed/output/output-rdbms-sqlalchemy.ipynb +claimed/output/output-rdbms-sqlalchemy.yaml +claimed/output/upload-to-cos-http-adapter.ipynb +claimed/output/upload-to-cos.cwl +claimed/output/upload-to-cos.ipynb +claimed/output/upload-to-cos.job.yaml +claimed/output/upload-to-cos.yaml +claimed/predict/README.md +claimed/predict/image-endpoint-tester.ipynb +claimed/predict/image-endpoint.ipynb +claimed/predict/predict-images.ipynb +claimed/predict/predict-images.yaml +claimed/predict/tvn2.ipynb +claimed/predict/yolo.ipynb +claimed/segment-anything/generate-masks.ipynb +claimed/segment-anything/generate-masks.yaml +claimed/segment-anything/get-masks.ipynb +claimed/segment-anything/get-masks.yaml +claimed/sim/wrf.ipynb +claimed/sim/wrf.yaml +claimed/train/README.md +claimed/train/nvflare.ipynb +claimed/train/spark-train-lr.ipynb +claimed/train/spark-train-lr.yaml +claimed/train/train-mobilenet_v2.ipynb +claimed/train/train-mobilenet_v2.yaml +claimed/transform/README.md +claimed/transform/alchemy-sql-query.ipynb +claimed/transform/cloud-object-store-housekeeping.ipynb +claimed/transform/cpdconfig.yaml +claimed/transform/ibm-sql-query-cpd-manual.yaml +claimed/transform/ibm-sql-query-cpd-test.ipynb +claimed/transform/ibm-sql-query-cpd.ipynb +claimed/transform/ibm-sql-query-cpd.yaml +claimed/transform/ibm-sql-query-test.ipynb +claimed/transform/ibm-sql-query.config +claimed/transform/ibm-sql-query.dockerfile +claimed/transform/ibm-sql-query.ipynb +claimed/transform/ibm-sql-query.secrets.template +claimed/transform/ibm-sql-query.yaml +claimed/transform/image-tiling-with-metadata_adjustment.cwl +claimed/transform/image-tiling-with-metadata_adjustment.cwl:Zone.Identifier +claimed/transform/image-tiling-with-metadata_adjustment.ipynb +claimed/transform/image-tiling-with-metadata_adjustment.ipynb:Zone.Identifier +claimed/transform/image-tiling-with-metadata_adjustment.job.yaml +claimed/transform/image-tiling-with-metadata_adjustment.job.yaml:Zone.Identifier +claimed/transform/image-tiling-with-metadata_adjustment.yaml +claimed/transform/image-tiling-with-metadata_adjustment.yaml:Zone.Identifier +claimed/transform/spark-condense-parquet.ipynb +claimed/transform/spark-condense-parquet.yaml +claimed/transform/spark-csv-to-parquet.ipynb +claimed/transform/spark-csv-to-parquet.yaml +claimed/transform/spark-json-to-parquet.ipynb +claimed/transform/spark-json-to-parquet.yaml +claimed/transform/spark-parquet-to-csv.ipynb +claimed/transform/spark-sql-interactive.ipynb +claimed/transform/spark-sql.ipynb +claimed/transform/spark-sql.yaml +claimed/transform/transform-apply.ipynb +claimed/transform/transform-images.ipynb +claimed/transform/transform-images.yaml +claimed/transform/spark-sql-interactive/Dockerfile +claimed/transform/spark-sql-interactive/app.py +claimed/transform/spark-sql-interactive/build.sh +claimed/util/__init__.py +claimed/util/cgw-util-cos-sync.ipynb +claimed/util/cosutils.ipynb +claimed/util/cosutils.py +claimed/util/sparksql-interactive.ipynb +claimed/visualize/map-from-coordinates.ipynb +claimed/visualize/timeseries-runchart.ipynb +claimed/visualize/timeseries-runchart.yaml +claimed/visualize/visualize-with-quickchart-mongodb.ipynb +claimed/visualize/visualize-with-quickchart.ipynb +docs/mmd/c3.mmd +docs/mmd/c3_examplified.mmd +docs/mmd/gridwrapper.mmd +docs/mmd/sotab4claimed.mmd +examples/example_rscript.R +examples/gw_simple_grid_wrapper_example.cwl +examples/gw_simple_grid_wrapper_example.job.yaml +examples/gw_simple_grid_wrapper_example.py +examples/gw_simple_grid_wrapper_example.yaml +examples/operator_example.cwl +examples/operator_example.ipynb +examples/operator_example.job.yaml +examples/operator_example.py +examples/operator_example.yaml +examples/pipeline_example.py +examples/simple_grid_wrapper_example.py +examples/workflow_example.cwl +examples/folder_grid_wrapper_example/folder_grid_wrapper_example.py +examples/folder_grid_wrapper_example/gw_folder_grid_wrapper_example.cwl +examples/folder_grid_wrapper_example/gw_folder_grid_wrapper_example.job.yaml +examples/folder_grid_wrapper_example/gw_folder_grid_wrapper_example.yaml +examples/folder_grid_wrapper_example/folder_grid_wrapper_source/folder_1/1.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_source/folder_1/2.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_source/folder_1/3.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_source/folder_2/1.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_source/folder_2/2.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_source/folder_2/3.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_source/folder_3/1.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_source/folder_3/2.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_source/folder_3/3.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_target/folder_1.PROCESSED/1.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_target/folder_1.PROCESSED/2.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_target/folder_1.PROCESSED/3.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_target/folder_2.PROCESSED/1.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_target/folder_2.PROCESSED/2.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_target/folder_2.PROCESSED/3.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_target/folder_3.PROCESSED/1.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_target/folder_3.PROCESSED/2.txt +examples/folder_grid_wrapper_example/folder_grid_wrapper_target/folder_3.PROCESSED/3.txt +examples/simple_grid_wrapper_source/1.txt +examples/simple_grid_wrapper_source/2.txt +examples/simple_grid_wrapper_source/3.txt +examples/simple_grid_wrapper_source_and_target/1.txt +examples/simple_grid_wrapper_source_and_target/2.txt +examples/simple_grid_wrapper_source_and_target/3.txt +examples/simple_grid_wrapper_target/1.PROCESSED.txt +examples/simple_grid_wrapper_target/2.PROCESSED.txt +examples/simple_grid_wrapper_target/3.PROCESSED.txt +src/setup.py +src/c3/__init__.py +src/c3/create_containerless_operator.py +src/c3/create_gridwrapper.py +src/c3/create_operator.py +src/c3/notebook.py +src/c3/operator_utils.py +src/c3/parser.py +src/c3/pythonscript.py +src/c3/rscript.py +src/c3/utils.py +src/c3/templates/R_dockerfile_template +src/c3/templates/__init__.py +src/c3/templates/component_setup_code.R +src/c3/templates/component_setup_code.py +src/c3/templates/component_setup_code_wo_logging.py +src/c3/templates/cos_grid_wrapper_template.py +src/c3/templates/cwl_component_template.cwl +src/c3/templates/folder_grid_wrapper_template.py +src/c3/templates/grid_wrapper_template.py +src/c3/templates/kfp_component_template.yaml +src/c3/templates/kubernetes_job_template.job.yaml +src/c3/templates/legacy_cos_grid_wrapper_template.py +src/c3/templates/python_dockerfile_template +src/c3/templates/s3kv_grid_wrapper_template.py +src/c3/templates/simple_grid_wrapper_template.py +src/claimed/__init__.py +src/claimed/claimed.py +src/claimed.egg-info/PKG-INFO +src/claimed.egg-info/SOURCES.txt +src/claimed.egg-info/dependency_links.txt +src/claimed.egg-info/entry_points.txt +src/claimed.egg-info/not-zip-safe +src/claimed.egg-info/requires.txt +src/claimed.egg-info/top_level.txt +src/mlx/__init__.py +src/mlx/cos_backend.py +src/mlx/s3_kv_store.py +tests/example_notebook.ipynb +tests/example_rscript.R +tests/example_script.py +tests/test_compiler.py +tests/test_operator_utils.py \ No newline at end of file diff --git a/src/claimed.egg-info/dependency_links.txt b/src/claimed.egg-info/dependency_links.txt new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/claimed.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/src/claimed.egg-info/entry_points.txt b/src/claimed.egg-info/entry_points.txt new file mode 100644 index 00000000..7bad7810 --- /dev/null +++ b/src/claimed.egg-info/entry_points.txt @@ -0,0 +1,5 @@ +[console_scripts] +c3_create_containerless_operator = c3.create_containerless_operator:main +c3_create_gridwrapper = c3.create_gridwrapper:main +c3_create_operator = c3.create_operator:main +claimed = claimed.claimed:main diff --git a/src/claimed.egg-info/not-zip-safe b/src/claimed.egg-info/not-zip-safe new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/src/claimed.egg-info/not-zip-safe @@ -0,0 +1 @@ + diff --git a/src/claimed.egg-info/requires.txt b/src/claimed.egg-info/requires.txt new file mode 100644 index 00000000..d1fee80a --- /dev/null +++ b/src/claimed.egg-info/requires.txt @@ -0,0 +1,5 @@ +nbconvert>=7.9.2 +ipython>=8.16.1 +traitlets>=5.11.2 +pandas +boto3 diff --git a/src/claimed.egg-info/top_level.txt b/src/claimed.egg-info/top_level.txt new file mode 100644 index 00000000..92a82100 --- /dev/null +++ b/src/claimed.egg-info/top_level.txt @@ -0,0 +1,3 @@ +c3 +claimed +mlx diff --git a/src/claimed/__init__.py b/src/claimed/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/claimed/claimed.py b/src/claimed/claimed.py new file mode 100644 index 00000000..c19c11b1 --- /dev/null +++ b/src/claimed/claimed.py @@ -0,0 +1,12 @@ +import subprocess +import sys +import os + + +def main(): + dir_path = os.path.dirname(os.path.realpath(__file__)) + return subprocess.call(f'{dir_path}/scripts/claimed ' + ' '.join(sys.argv[1:]), shell=True) + + +if __name__ == '__main__': + main() diff --git a/src/claimed/scripts/claimed b/src/claimed/scripts/claimed new file mode 100755 index 00000000..1aefe327 --- /dev/null +++ b/src/claimed/scripts/claimed @@ -0,0 +1,79 @@ +#!/bin/bash +if [ -z "$1" ]; then + echo "Usage: $0 --component component-name/image-location [--component-parameters-name component-parameters-value ...]" + echo "Example: claimed --component blumenstiel/claimed-generate-random-numbers --num_random 5" + echo "or (deprecated)" + echo "Usage: $0 component-name/image-location [component-parameters-name=component-parameters-value ...]" + echo "Example: claimed blumenstiel/claimed-generate-random-numbers num_random=5" + exit 1 +fi + +# Create operator and gridwrapper with C3 +if [ $1 = "create" ]; then + if ! command -v c3_create_operator &> /dev/null; then + echo "CLAIMED C3 not found. Install with 'pip install claimed-c3'" + exit 1 + fi + if [ $2 = "operator" ]; then + c3_create_operator ${@:3} + elif [ $2 = "gridwrapper" ]; then + c3_create_gridwrapper ${@:3} + else + echo "C3 can only create 'operator' and 'gridwrapper'." + exit 1 + fi + exit 0 +fi + +# Nothing above matched, so we assume we want to run a component + +envs="" +if [[ $1 == "--component" ]]; then + image=$2 + shift 2 + for var in "$@"; do + if [[ $var == "--"* ]]; then + envs="${envs} --env ${var:2}=" + else + envs="${envs}${var}" + fi + done +else + echo "Assuming arguments contain = sign, you need to provide the --component to run, aborting" + exit 1 +fi + + + +if [[ "$image" != */* ]]; then + image=docker.io/claimed/$image +fi + +if [[ "$image" != *:* ]]; then + image=$image:latest +fi + +if [[ "$image" != *containerless* ]]; then + if [ -z ${CLAIMED_DATA_PATH+x} ]; then + echo "CLAIMED_DATA_PATH variable not set, not mounting /data to the CLAIMED component" + docker run $envs $image + else + echo "CLAIMED_DATA_PATH variable is set, mounting $CLAIMED_DATA_PATH to /opt/app-root/src/data" + docker run $envs -u 0 -v `echo $CLAIMED_DATA_PATH`:/opt/app-root/src/data:z $image + fi +else + echo "Entering containerless operation" + if [ -z ${CLAIMED_CONTAINERLESS_OPERATOR_PATH+x} ]; then + echo "CLAIMED_CONTAINERLESS_OPERATOR_PATH not set, aborting" + exit 1 + else + containerlesscomponentpath=`sed "s/containerless//g" <<< "$image"` + containerlesscomponentpath=`sed "s/:/./g" <<< "$containerlesscomponentpath"` + containerlesscomponent=$containerlesscomponentpath"/runnable.py" + command="python "$CLAIMED_CONTAINERLESS_OPERATOR_PATH"/"$containerlesscomponent" "$envs + echo "Executing: "$command + source $CLAIMED_CONTAINERLESS_OPERATOR_PATH'/'$containerlesscomponentpath"/claimedenv/bin/activate" + chmod 755 $CLAIMED_CONTAINERLESS_OPERATOR_PATH"/"$containerlesscomponent + $command + fi +fi diff --git a/src/schema/dataset.json b/src/mlx/schema/dataset.json similarity index 100% rename from src/schema/dataset.json rename to src/mlx/schema/dataset.json diff --git a/src/schema/job.json b/src/mlx/schema/job.json similarity index 100% rename from src/schema/job.json rename to src/mlx/schema/job.json diff --git a/src/schema/model.json b/src/mlx/schema/model.json similarity index 100% rename from src/schema/model.json rename to src/mlx/schema/model.json diff --git a/src/schema/notebook.json b/src/mlx/schema/notebook.json similarity index 100% rename from src/schema/notebook.json rename to src/mlx/schema/notebook.json diff --git a/src/schema/pipeline.json b/src/mlx/schema/pipeline.json similarity index 100% rename from src/schema/pipeline.json rename to src/mlx/schema/pipeline.json diff --git a/src/schema/pipeline_operator.json b/src/mlx/schema/pipeline_operator.json similarity index 100% rename from src/schema/pipeline_operator.json rename to src/mlx/schema/pipeline_operator.json