aimodelshare 0.1.28__tar.gz → 0.1.29__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of aimodelshare might be problematic. Click here for more details.

Files changed (156) hide show
  1. {aimodelshare-0.1.28/aimodelshare.egg-info → aimodelshare-0.1.29}/PKG-INFO +1 -1
  2. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/data_sharing/download_data.py +104 -80
  3. {aimodelshare-0.1.28 → aimodelshare-0.1.29/aimodelshare.egg-info}/PKG-INFO +1 -1
  4. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/setup.py +3 -3
  5. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/LICENSE +0 -0
  6. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/MANIFEST.in +0 -0
  7. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/README.md +0 -0
  8. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/README.md +0 -0
  9. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/__init__.py +0 -0
  10. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/aimsonnx.py +0 -0
  11. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/api.py +0 -0
  12. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/aws.py +0 -0
  13. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/aws_client.py +0 -0
  14. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/base_image.py +0 -0
  15. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/bucketpolicy.py +0 -0
  16. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/color_mappings/color_mapping_keras.csv +0 -0
  17. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/color_mappings/color_mapping_pytorch.csv +0 -0
  18. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/containerisation.py +0 -0
  19. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/containerization.py +0 -0
  20. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/containerization_templates/Dockerfile.txt +0 -0
  21. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/containerization_templates/Dockerfile_PySpark.txt +0 -0
  22. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/containerization_templates/buildspec.txt +0 -0
  23. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/containerization_templates/lambda_function.txt +0 -0
  24. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/custom_approach/__init__.py +0 -0
  25. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/custom_approach/lambda_function.py +0 -0
  26. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/custom_eval_metrics.py +0 -0
  27. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/data_sharing/__init__.py +0 -0
  28. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/data_sharing/data_sharing_templates/Dockerfile.txt +0 -0
  29. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/data_sharing/data_sharing_templates/__init__.py +0 -0
  30. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/data_sharing/data_sharing_templates/buildspec.txt +0 -0
  31. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/data_sharing/data_sharing_templates/codebuild_policies.txt +0 -0
  32. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/data_sharing/data_sharing_templates/codebuild_trust_relationship.txt +0 -0
  33. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/data_sharing/share_data.py +0 -0
  34. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/data_sharing/utils.py +0 -0
  35. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/deploy_custom_lambda.py +0 -0
  36. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/Makefile +0 -0
  37. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/__init__.py +0 -0
  38. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/_version.py +0 -0
  39. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/breadcrumbs.html +0 -0
  40. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/layout.html +0 -0
  41. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/search.html +0 -0
  42. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/searchbox.html +0 -0
  43. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/css/custom.css +0 -0
  44. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/css/custom.css.map +0 -0
  45. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/css/theme.css +0 -0
  46. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/css/theme.css.map +0 -0
  47. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/css/theme.min.css +0 -0
  48. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/css/theme.min.css.map +0 -0
  49. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/font/fontello.eot +0 -0
  50. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/font/fontello.svg +0 -0
  51. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/font/fontello.ttf +0 -0
  52. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/font/fontello.woff +0 -0
  53. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/font/fontello.woff2 +0 -0
  54. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/static/js/theme.js +0 -0
  55. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/karma_sphinx_theme/theme.conf +0 -0
  56. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/make.bat +0 -0
  57. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/requirements.txt +0 -0
  58. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/about.rst +0 -0
  59. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/advanced_features.rst +0 -0
  60. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/competition.rst +0 -0
  61. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/conf.py +0 -0
  62. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/create_credentials.rst +0 -0
  63. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/example_notebooks.rst +0 -0
  64. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/functions.rst +0 -0
  65. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/gettingstarted.rst +0 -0
  66. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/images/creds1.png +0 -0
  67. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/images/creds2.png +0 -0
  68. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/images/creds3.png +0 -0
  69. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/images/creds4.png +0 -0
  70. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/images/creds5.png +0 -0
  71. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/images/creds_file_example.png +0 -0
  72. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/images/predict_tab.png +0 -0
  73. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/index.rst +0 -0
  74. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/documentation/source/modelplayground.rst +0 -0
  75. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/exceptions.py +0 -0
  76. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/generatemodelapi.py +0 -0
  77. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/iam/codebuild_policy.txt +0 -0
  78. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/iam/codebuild_trust_relationship.txt +0 -0
  79. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/iam/lambda_policy.txt +0 -0
  80. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/iam/lambda_trust_relationship.txt +0 -0
  81. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/__init__.py +0 -0
  82. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/api_json.txt +0 -0
  83. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/auth/policy.txt +0 -0
  84. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/auth/role.txt +0 -0
  85. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/eval/policy.txt +0 -0
  86. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/eval/role.txt +0 -0
  87. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/function/policy.txt +0 -0
  88. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/function/role.txt +0 -0
  89. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/integration_response.txt +0 -0
  90. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/lambda_policy_1.txt +0 -0
  91. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/lambda_policy_2.txt +0 -0
  92. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/lambda_role_1.txt +0 -0
  93. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/json_templates/lambda_role_2.txt +0 -0
  94. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/leaderboard.py +0 -0
  95. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/1.txt +0 -0
  96. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/1B.txt +0 -0
  97. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/2.txt +0 -0
  98. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/3.txt +0 -0
  99. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/4.txt +0 -0
  100. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/5.txt +0 -0
  101. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/6.txt +0 -0
  102. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/7.txt +0 -0
  103. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/8.txt +0 -0
  104. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/__init__.py +0 -0
  105. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/authorization.txt +0 -0
  106. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/eval_classification.txt +0 -0
  107. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/eval_lambda.txt +0 -0
  108. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/eval_regression.txt +0 -0
  109. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/lambda_function.txt +0 -0
  110. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/main/nst.txt +0 -0
  111. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/model.py +0 -0
  112. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/modeluser.py +0 -0
  113. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/placeholders/model.onnx +0 -0
  114. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/placeholders/preprocessor.zip +0 -0
  115. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/playground.py +0 -0
  116. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/postprocessormodules.py +0 -0
  117. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/preprocessormodules.py +0 -0
  118. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/1.txt +0 -0
  119. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/1B.txt +0 -0
  120. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/2.txt +0 -0
  121. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/3.txt +0 -0
  122. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/4.txt +0 -0
  123. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/5.txt +0 -0
  124. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/6.txt +0 -0
  125. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/7.txt +0 -0
  126. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/8.txt +0 -0
  127. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/__init__.py +0 -0
  128. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/authorization.txt +0 -0
  129. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/eval_classification.txt +0 -0
  130. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/eval_lambda.txt +0 -0
  131. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/eval_regression.txt +0 -0
  132. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/lambda_function.txt +0 -0
  133. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/pyspark/nst.txt +0 -0
  134. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/python/my_preprocessor.py +0 -0
  135. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/readme.md +0 -0
  136. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/reproducibility.py +0 -0
  137. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/Dockerfile.txt +0 -0
  138. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/Dockerfile_PySpark.txt +0 -0
  139. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/__init__.py +0 -0
  140. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/buildspec.txt +0 -0
  141. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/codebuild_policies.txt +0 -0
  142. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/codebuild_trust_relationship.txt +0 -0
  143. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/codepipeline_policies.txt +0 -0
  144. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/codepipeline_trust_relationship.txt +0 -0
  145. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/spark-class.txt +0 -0
  146. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/sam/template.txt +0 -0
  147. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/tools.py +0 -0
  148. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare/utils.py +0 -0
  149. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare.egg-info/SOURCES.txt +0 -0
  150. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare.egg-info/dependency_links.txt +0 -0
  151. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare.egg-info/requires.txt +0 -0
  152. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/aimodelshare.egg-info/top_level.txt +0 -0
  153. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/setup.cfg +0 -0
  154. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/tests/__init__.py +0 -0
  155. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/tests/test_aimsonnx.py +0 -0
  156. {aimodelshare-0.1.28 → aimodelshare-0.1.29}/tests/test_playground.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aimodelshare
3
- Version: 0.1.28
3
+ Version: 0.1.29
4
4
  Summary: Deploy locally saved machine learning models to a live rest API and web-dashboard. Share it with the world via modelshare.org
5
5
  Home-page: https://www.modelshare.org
6
6
  Author: Michael Parrott
@@ -76,87 +76,111 @@ def download_layer(layer, layer_count, tmp_img_dir, blobs_resp):
76
76
  return layer_id, layer_dir
77
77
 
78
78
  def pull_image(image_uri):
79
+ import os
80
+ import requests
81
+ import tempfile
82
+ import json
83
+ import shutil
84
+ import tarfile
85
+ from aimodelshare.data_sharing.utils import redo_with_write
86
+
87
+ image_uri_parts = image_uri.split('/')
88
+
89
+ registry = image_uri_parts[0]
90
+ image, tag = image_uri_parts[2].split(':')
91
+ repository = '/'.join([image_uri_parts[1], image])
92
+
93
+ auth_url = get_auth_url(registry)
94
+
95
+ # Request manifest with correct Accept header
96
+ auth_head = get_auth_head(auth_url, registry, repository)
97
+ manifest_url = f'https://{registry}/v2/{repository}/manifests/{tag}'
98
+ resp = requests.get(manifest_url, headers=auth_head, verify=False)
99
+
100
+ # --- PATCH: Handle manifest list (multi-platform images) ---
101
+ if resp.headers.get('Content-Type') == 'application/vnd.docker.distribution.manifest.list.v2+json':
102
+ manifest_list = resp.json()
103
+
104
+ # Find the first linux/amd64 image (or fallback to first available)
105
+ target_manifest = next(
106
+ (m for m in manifest_list['manifests']
107
+ if m['platform'].get('architecture') == 'amd64' and m['platform'].get('os') == 'linux'),
108
+ manifest_list['manifests'][0]
109
+ )
110
+ digest = target_manifest['digest']
111
+
112
+ # Get the actual image manifest now
113
+ resp = requests.get(
114
+ f'https://{registry}/v2/{repository}/manifests/{digest}',
115
+ headers=auth_head,
116
+ verify=False
117
+ )
118
+ # -----------------------------------------------------------
119
+
120
+ manifest = resp.json()
121
+
122
+ # Safely check and fail early if config key is still missing
123
+ if 'config' not in manifest:
124
+ raise ValueError("Manifest response missing 'config'. This image may not follow Docker V2 manifest schema.")
125
+
126
+ config = manifest['config']['digest']
127
+ config_resp = requests.get(f'https://{registry}/v2/{repository}/blobs/{config}', headers=auth_head, verify=False)
128
+
129
+ tmp_img_dir = os.path.join(tempfile.gettempdir(), f'tmp_{image}_{tag}')
130
+ os.mkdir(tmp_img_dir)
131
+
132
+ with open(f'{tmp_img_dir}/{config[7:]}.json', 'wb') as file:
133
+ file.write(config_resp.content)
134
+
135
+ content = [{
136
+ 'Config': config[7:] + '.json',
137
+ 'RepoTags': [image_uri],
138
+ 'Layers': []
139
+ }]
140
+
141
+ # Skip first 6 layers? Keep original logic for compatibility
142
+ layers = manifest['layers'][6:]
143
+ layer_count = 0
144
+
145
+ for layer in layers:
146
+ layer_count += 1
147
+ auth_head = get_auth_head(auth_url, registry, repository)
148
+ blobs_resp = requests.get(
149
+ f'https://{registry}/v2/{repository}/blobs/{layer["digest"]}',
150
+ headers=auth_head,
151
+ stream=True,
152
+ verify=False
153
+ )
154
+
155
+ layer_id, layer_dir = download_layer(layer, layer_count, tmp_img_dir, blobs_resp)
156
+ content[0]['Layers'].append(layer_id + '/layer.tar')
157
+
158
+ json_path = os.path.join(layer_dir, 'json')
159
+ with open(json_path, 'w') as file:
160
+ if layers[-1]['digest'] == layer['digest']:
161
+ json_obj = json.loads(config_resp.content)
162
+ json_obj.pop('history', None)
163
+ json_obj.pop('rootfs', None)
164
+ else:
165
+ json_obj = {}
166
+ json_obj['id'] = layer_id
167
+ file.write(json.dumps(json_obj))
168
+
169
+ with open(os.path.join(tmp_img_dir, 'manifest.json'), 'w') as f:
170
+ f.write(json.dumps(content))
171
+
172
+ repo_dict = {'/'.join(image_uri_parts[:-1]) + '/' + image: {tag: layer_id}}
173
+ with open(os.path.join(tmp_img_dir, 'repositories'), 'w') as f:
174
+ f.write(json.dumps(repo_dict))
175
+
176
+ # Create tar archive from temp image directory
177
+ docker_tar = os.path.join(tempfile.gettempdir(), f'{repository.replace("/", "_")}_{tag}.tar')
178
+ with tarfile.open(docker_tar, "w") as tar:
179
+ tar.add(tmp_img_dir, arcname=os.path.sep)
180
+
181
+ shutil.rmtree(tmp_img_dir, onerror=redo_with_write)
182
+ return docker_tar
79
183
 
80
- image_uri_parts = image_uri.split('/')
81
-
82
- registry = image_uri_parts[0]
83
- image, tag = image_uri_parts[2].split(':')
84
- repository = '/'.join([image_uri_parts[1], image])
85
-
86
- auth_url = get_auth_url(registry)
87
-
88
- auth_head = get_auth_head(auth_url, registry, repository)
89
-
90
- resp = requests.get('https://{}/v2/{}/manifests/{}'.format(registry, repository, tag), headers=auth_head, verify=False)
91
-
92
- config = resp.json()['config']['digest']
93
- config_resp = requests.get('https://{}/v2/{}/blobs/{}'.format(registry, repository, config), headers=auth_head, verify=False)
94
-
95
- tmp_img_dir = tempfile.gettempdir() + '/' + 'tmp_{}_{}'.format(image, tag)
96
- os.mkdir(tmp_img_dir)
97
-
98
- file = open('{}/{}.json'.format(tmp_img_dir, config[7:]), 'wb')
99
- file.write(config_resp.content)
100
- file.close()
101
-
102
- content = [{
103
- 'Config': config[7:] + '.json',
104
- 'RepoTags': [],
105
- 'Layers': []
106
- }]
107
- content[0]['RepoTags'].append(image_uri)
108
-
109
- layer_count=0
110
- layers = resp.json()['layers'][6:]
111
-
112
- for layer in layers:
113
-
114
- layer_count += 1
115
-
116
- auth_head = get_auth_head(auth_url, registry, repository) # done to keep from expiring
117
- blobs_resp = requests.get('https://{}/v2/{}/blobs/{}'.format(registry, repository, layer['digest']), headers=auth_head, stream=True, verify=False)
118
-
119
- layer_id, layer_dir = download_layer(layer, layer_count, tmp_img_dir, blobs_resp)
120
- content[0]['Layers'].append(layer_id + '/layer.tar')
121
-
122
- # Creating json file
123
- file = open(layer_dir + '/json', 'w')
124
-
125
- # last layer = config manifest - history - rootfs
126
- if layers[-1]['digest'] == layer['digest']:
127
- json_obj = json.loads(config_resp.content)
128
- del json_obj['history']
129
- del json_obj['rootfs']
130
- else: # other layers json are empty
131
- json_obj = json.loads('{}')
132
-
133
- json_obj['id'] = layer_id
134
- file.write(json.dumps(json_obj))
135
- file.close()
136
-
137
- file = open(tmp_img_dir + '/manifest.json', 'w')
138
- file.write(json.dumps(content))
139
- file.close()
140
-
141
- content = {
142
- '/'.join(image_uri_parts[:-1]) + '/' + image : { tag : layer_id }
143
- }
144
-
145
- file = open(tmp_img_dir + '/repositories', 'w')
146
- file.write(json.dumps(content))
147
- file.close()
148
-
149
- # Create image tar and clean tmp folder
150
- docker_tar = tempfile.gettempdir() + '/' + '_'.join([repository.replace('/', '_'), tag]) + '.tar'
151
- sys.stdout.flush()
152
-
153
- tar = tarfile.open(docker_tar, "w")
154
- tar.add(tmp_img_dir, arcname=os.path.sep)
155
- tar.close()
156
-
157
- shutil.rmtree(tmp_img_dir, onerror=redo_with_write)
158
-
159
- return docker_tar
160
184
 
161
185
  def extract_data_from_image(image_name, file_name, location):
162
186
  tar = tarfile.open(image_name, 'r')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aimodelshare
3
- Version: 0.1.28
3
+ Version: 0.1.29
4
4
  Summary: Deploy locally saved machine learning models to a live rest API and web-dashboard. Share it with the world via modelshare.org
5
5
  Home-page: https://www.modelshare.org
6
6
  Author: Michael Parrott
@@ -6,7 +6,7 @@ with open("README.md", "r") as fh:
6
6
 
7
7
  setuptools.setup(
8
8
  name='aimodelshare', #TODO:update
9
- version='0.1.28', #TODO:update
9
+ version='0.1.29', #TODO:update
10
10
  author="Michael Parrott",
11
11
  author_email="mikedparrott@modelshare.org",
12
12
  description="Deploy locally saved machine learning models to a live rest API and web-dashboard. Share it with the world via modelshare.org",
@@ -42,8 +42,8 @@ setuptools.setup(
42
42
  "protobuf==3.20.3",
43
43
  "dill==0.3.7",
44
44
  "scikeras==0.11.0"]
45
-
46
-
45
+
46
+
47
47
  ,
48
48
  classifiers=[
49
49
  "Programming Language :: Python :: 3",
File without changes
File without changes
File without changes
File without changes