frogml-core 0.0.96__py3-none-any.whl → 0.0.97__py3-none-any.whl
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.
- frogml_core/__init__.py +1 -1
- frogml_core/clients/instance_template/client.py +6 -4
- frogml_core/clients/model_version_manager/client.py +4 -4
- frogml_core/clients/prompt_manager/model_descriptor_mapper.py +4 -4
- frogml_core/feature_store/_common/artifact_utils.py +3 -3
- frogml_core/feature_store/data_sources/batch/athena.py +3 -3
- frogml_core/feature_store/feature_sets/context.py +2 -6
- frogml_core/feature_store/feature_sets/streaming.py +3 -3
- frogml_core/feature_store/feature_sets/streaming_backfill.py +1 -1
- frogml_core/feature_store/online/client.py +6 -6
- frogml_core/feature_store/sinks/streaming/factory.py +1 -1
- frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py +3 -3
- frogml_core/inner/di_configuration/account.py +2 -2
- frogml_core/inner/tool/auth.py +2 -3
- frogml_core/llmops/provider/openai/provider.py +3 -3
- frogml_core/model/tools/adapters/output.py +1 -1
- frogml_core/tools/logger/logger.py +1 -1
- frogml_core/utils/proto_utils.py +1 -1
- frogml_core-0.0.97.dist-info/METADATA +411 -0
- {frogml_core-0.0.96.dist-info → frogml_core-0.0.97.dist-info}/RECORD +60 -22
- frogml_storage/__init__.py +1 -0
- frogml_storage/_environment.py +22 -0
- frogml_storage/artifactory/__init__.py +1 -0
- frogml_storage/artifactory/_artifactory_api.py +315 -0
- frogml_storage/authentication/login/__init__.py +1 -0
- frogml_storage/authentication/login/_login_cli.py +229 -0
- frogml_storage/authentication/login/_login_command.py +71 -0
- frogml_storage/authentication/models/__init__.py +3 -0
- frogml_storage/authentication/models/_auth.py +20 -0
- frogml_storage/authentication/models/_auth_config.py +70 -0
- frogml_storage/authentication/models/_login.py +22 -0
- frogml_storage/authentication/utils/__init__.py +17 -0
- frogml_storage/authentication/utils/_authentication_utils.py +281 -0
- frogml_storage/authentication/utils/_login_checks_utils.py +114 -0
- frogml_storage/base_storage.py +140 -0
- frogml_storage/constants.py +56 -0
- frogml_storage/exceptions/checksum_verification_error.py +3 -0
- frogml_storage/exceptions/validation_error.py +4 -0
- frogml_storage/frog_ml.py +668 -0
- frogml_storage/http/__init__.py +1 -0
- frogml_storage/http/http_client.py +83 -0
- frogml_storage/logging/__init__.py +1 -0
- frogml_storage/logging/_log_config.py +45 -0
- frogml_storage/logging/log_utils.py +21 -0
- frogml_storage/models/__init__.py +1 -0
- frogml_storage/models/_download_context.py +54 -0
- frogml_storage/models/dataset_manifest.py +13 -0
- frogml_storage/models/entity_manifest.py +93 -0
- frogml_storage/models/frogml_dataset_version.py +21 -0
- frogml_storage/models/frogml_entity_type_info.py +48 -0
- frogml_storage/models/frogml_entity_version.py +34 -0
- frogml_storage/models/frogml_model_version.py +21 -0
- frogml_storage/models/model_manifest.py +60 -0
- frogml_storage/models/serialization_metadata.py +15 -0
- frogml_storage/utils/__init__.py +12 -0
- frogml_storage/utils/_input_checks_utility.py +104 -0
- frogml_storage/utils/_storage_utils.py +15 -0
- frogml_storage/utils/_url_utils.py +27 -0
- frogml_core-0.0.96.dist-info/METADATA +0 -46
- {frogml_core-0.0.96.dist-info → frogml_core-0.0.97.dist-info}/WHEEL +0 -0
- {frogml_proto → frogml_storage/authentication}/__init__.py +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
frogml_core/__init__.py,sha256=
|
1
|
+
frogml_core/__init__.py,sha256=qVJvp0Th1tj8hSuSvHfQlESs2X9saUoSnods3O0RX1M,777
|
2
2
|
frogml_core/automations/__init__.py,sha256=j2gD15MN-xVWhI5rAFsDwhL0CIyICLNT0scXsKvNBkU,1547
|
3
3
|
frogml_core/automations/automation_executions.py,sha256=xpOb9Dq8gPPGNQDJTvBBZbNz4woZDRZY0HqnLSu7pwU,3230
|
4
4
|
frogml_core/automations/automations.py,sha256=GKEQyQMi8sxX5oZn62PaxPi0zD8IaJRjBkhczRJxHNs,13070
|
@@ -58,7 +58,7 @@ frogml_core/clients/file_versioning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
|
|
58
58
|
frogml_core/clients/file_versioning/client.py,sha256=GQ0drq_6f3lyKFSEg_tLh6wybGgyiiPF7TsiHCIPPZU,2533
|
59
59
|
frogml_core/clients/file_versioning/file_tag_filter.py,sha256=Ehgr605zPt2x163EQP5IRXKdnmd_8gNwCVBhxUlRcnI,886
|
60
60
|
frogml_core/clients/instance_template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
61
|
-
frogml_core/clients/instance_template/client.py,sha256=
|
61
|
+
frogml_core/clients/instance_template/client.py,sha256=VDGU7IQgrTo3swnAzvRjBFFeyMqCV1i17LodsROchXE,2597
|
62
62
|
frogml_core/clients/integration_management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
63
|
frogml_core/clients/integration_management/integration_manager_client.py,sha256=E6VcgbEI6IbP8TLsatWTTvWNXerdSP08er0KkdRmg90,1240
|
64
64
|
frogml_core/clients/integration_management/integration_utils.py,sha256=j5gomMtYi-CYr2flYF8-BKd5pU4tHxAAlB9R2R3iYoo,968
|
@@ -75,11 +75,11 @@ frogml_core/clients/logging_client/client.py,sha256=A7qQJWW54Ve7O0DuJX9gmSJlUQyR
|
|
75
75
|
frogml_core/clients/model_management/__init__.py,sha256=vjWVP8MjmK4_A70WOgJqa6x24AeLK-ABjGJtogGzw9w,43
|
76
76
|
frogml_core/clients/model_management/client.py,sha256=hOWbpO6KkcScT6sn3eNHSp7n2HfQIPug7lm-e-bkzEs,4915
|
77
77
|
frogml_core/clients/model_version_manager/__init__.py,sha256=4Pnfzj4Egps48__dProdbSKQl5pNip0hGJd75w67BfY,46
|
78
|
-
frogml_core/clients/model_version_manager/client.py,sha256=
|
78
|
+
frogml_core/clients/model_version_manager/client.py,sha256=XtUJWjIXNy1J2vXIHzX1tahtGYqXT__MmHiT1N3zAxk,9466
|
79
79
|
frogml_core/clients/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
80
80
|
frogml_core/clients/project/client.py,sha256=2L4LJS3xIGTAeWuL2HOgW0OyUNiQUHZ4mXfukRLjX2U,2527
|
81
81
|
frogml_core/clients/prompt_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
82
|
-
frogml_core/clients/prompt_manager/model_descriptor_mapper.py,sha256
|
82
|
+
frogml_core/clients/prompt_manager/model_descriptor_mapper.py,sha256=IaIR4mseRiql0mgBrjz0rmioglSGgAR6OTEJeFXlatg,7866
|
83
83
|
frogml_core/clients/prompt_manager/prompt_manager_client.py,sha256=pl5SZ0j81PBMBeJc7jOkDJtJ61TGMqeq3Splg6Tsr90,7958
|
84
84
|
frogml_core/clients/prompt_manager/prompt_proto_mapper.py,sha256=WqIrL1wq_8LkLiLnyVO6vVh7qDLHnZNaHZ7n3s94qgw,10073
|
85
85
|
frogml_core/clients/secret_service/__init__.py,sha256=TdQl1lgplXCKVHYSN4feRIAoonZ7XDz50zALjwVDcM4,40
|
@@ -111,7 +111,7 @@ frogml_core/exceptions/frogml_suggestion_exception.py,sha256=saqST0umnKRFCscoEBH
|
|
111
111
|
frogml_core/exceptions/quiet_error.py,sha256=ePdCGP6ta8afjzprMiGoJFY-gxf8albRwuY0t1WF2lY,559
|
112
112
|
frogml_core/feature_store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
113
113
|
frogml_core/feature_store/_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
114
|
-
frogml_core/feature_store/_common/artifact_utils.py,sha256=
|
114
|
+
frogml_core/feature_store/_common/artifact_utils.py,sha256=g_DDeeBQ2JyqAuDiAj5utI742Jfyzy0woDW5QOy4vkI,2007
|
115
115
|
frogml_core/feature_store/_common/feature_set_utils.py,sha256=s_GGSHqgMD88c1ij62ptgMo0ar9iEBi4yd6T1wuocwQ,9222
|
116
116
|
frogml_core/feature_store/_common/featureset_asterisk_handler.py,sha256=3kygt0HM6QxDSGIRWcWoDwhOr126wwtv0Xr8W7AUGnk,4721
|
117
117
|
frogml_core/feature_store/_common/functions.py,sha256=kSNYJ7dy48NN09HG9asm4ibQh0JaCGcZYsRDjRWlUHE,659
|
@@ -125,7 +125,7 @@ frogml_core/feature_store/data_sources/base.py,sha256=sCJ1CzbhRX-fgsw_Y3ucUu-tKC
|
|
125
125
|
frogml_core/feature_store/data_sources/batch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
126
126
|
frogml_core/feature_store/data_sources/batch/_batch.py,sha256=xnrC1SZ4OH4b7gYLRajEBFQ2U00cA3JxKT8bKNTNHLg,204
|
127
127
|
frogml_core/feature_store/data_sources/batch/_jdbc.py,sha256=lC-m3ZypER5vLtYo4h6ghYWeXvdfGSOdTadqS-sTb58,676
|
128
|
-
frogml_core/feature_store/data_sources/batch/athena.py,sha256=
|
128
|
+
frogml_core/feature_store/data_sources/batch/athena.py,sha256=fKKdKE1B59dbCiOQQ5amJECoyETwxswkBhDLQ-Pctsg,11292
|
129
129
|
frogml_core/feature_store/data_sources/batch/big_query.py,sha256=h9iscw9I-WyCj1BeyesASNoIiNwPty9acQ37KGD0Ulo,3112
|
130
130
|
frogml_core/feature_store/data_sources/batch/clickhouse.py,sha256=mUSE139-ACnInctQNZqETbnWgFyZidvffVJpwQu0T3Q,2149
|
131
131
|
frogml_core/feature_store/data_sources/batch/csv.py,sha256=saxFeP--CL4h5j2toyxSuOl4kN_WtEEg8pumaYOjCHg,2070
|
@@ -161,12 +161,12 @@ frogml_core/feature_store/feature_sets/_utils/_featureset_utils.py,sha256=mnznpQ
|
|
161
161
|
frogml_core/feature_store/feature_sets/backfill.py,sha256=oZqGb8PA1BQxVOxf9-MwzeZyjJqgwulbA-flmBmXAj4,1981
|
162
162
|
frogml_core/feature_store/feature_sets/base_feature_set.py,sha256=1niCItXApA6JZB7tviXJJVaw91sFwSBwiA1f2xOQnwM,5378
|
163
163
|
frogml_core/feature_store/feature_sets/batch.py,sha256=VADm8KVYhyxV7Ibt2luOlnrbrqd774_ICG0iKPs82cU,17422
|
164
|
-
frogml_core/feature_store/feature_sets/context.py,sha256=
|
164
|
+
frogml_core/feature_store/feature_sets/context.py,sha256=zV6r0O70cfM4pmxlfC6xxAtro-wBhenXWwYwF3KwfTY,263
|
165
165
|
frogml_core/feature_store/feature_sets/execution_spec.py,sha256=zKQd7U-PdYkZMqBpA9eIRhhWff-8xxKB_Qo4IDolwGI,2348
|
166
166
|
frogml_core/feature_store/feature_sets/metadata.py,sha256=Vv2pyBbwaJZRFhWKRhxdFyN3AsV-DvTQzLs9nyRMWK0,1888
|
167
167
|
frogml_core/feature_store/feature_sets/read_policies.py,sha256=BQu6B6IZuKJt8Ff5RYeADdqpHmSkec790RIYeSl6Ulo,6844
|
168
|
-
frogml_core/feature_store/feature_sets/streaming.py,sha256=
|
169
|
-
frogml_core/feature_store/feature_sets/streaming_backfill.py,sha256=
|
168
|
+
frogml_core/feature_store/feature_sets/streaming.py,sha256=78ItVSojMfLoTY3k0SH6UD40XS7dnVZFn9cKfYUcS3Y,25295
|
169
|
+
frogml_core/feature_store/feature_sets/streaming_backfill.py,sha256=u-tjq86AaXAusLUwPYtdCKhTuySQFAtRrUvbPrY3CtI,9834
|
170
170
|
frogml_core/feature_store/feature_sets/transformations/__init__.py,sha256=ozc50AI9RBY71nhNiJDu1-vSWJL2Bdgstyh7GGUW2ig,902
|
171
171
|
frogml_core/feature_store/feature_sets/transformations/aggregations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
172
172
|
frogml_core/feature_store/feature_sets/transformations/aggregations/aggregations.py,sha256=f81U0xiE-TBPqtqGabKb-3ApkIyE0tGU0yIxbF4j-D4,15308
|
@@ -181,14 +181,14 @@ frogml_core/feature_store/offline/_offline_serving_validations.py,sha256=yfkV8UV
|
|
181
181
|
frogml_core/feature_store/offline/client_v2.py,sha256=kTFyHAYIsKBe3wcuE1S_LyD9CLQ_yCorOLcHVR3Emms,14966
|
182
182
|
frogml_core/feature_store/offline/feature_set_features.py,sha256=MjrQrXNhzk7QBdCojdpLfy1fuGdP3GcpOgcc7n7H0G8,740
|
183
183
|
frogml_core/feature_store/online/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
184
|
-
frogml_core/feature_store/online/client.py,sha256=
|
184
|
+
frogml_core/feature_store/online/client.py,sha256=_NCVJngFgh8D3IVBW8u8estPqZ7mSwg5IxmuTndFY0A,13572
|
185
185
|
frogml_core/feature_store/online/endpoint_utils.py,sha256=lGssZR-r8kJpcSozVxQAk1_JpVXgRLqOVrK6fw8flPg,2242
|
186
186
|
frogml_core/feature_store/sinks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
187
187
|
frogml_core/feature_store/sinks/base.py,sha256=QdIutDlO_8IBRr-zKfHBRHJ1-DjDmFfR_Yuad193kg0,361
|
188
188
|
frogml_core/feature_store/sinks/kafka.py,sha256=zlawE62TSShX1D4RWHMowLdVaw5FFThl7kcDBkN2LH0,1923
|
189
189
|
frogml_core/feature_store/sinks/streaming/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
190
190
|
frogml_core/feature_store/sinks/streaming/attachment.py,sha256=oHHaxoMtSALI2udHk59joizs15di6OXX-BN_rruWF-c,1158
|
191
|
-
frogml_core/feature_store/sinks/streaming/factory.py,sha256=
|
191
|
+
frogml_core/feature_store/sinks/streaming/factory.py,sha256=nal7FWQEZWIKHsVZ4gIwPzCz3WClxL7tDBhkkuCtlsQ,2543
|
192
192
|
frogml_core/feature_store/validations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
193
193
|
frogml_core/feature_store/validations/validation_options.py,sha256=2EbOVC8pmnToP0GUwiPHuz3ew7Vrqr3IdRpUdiLqa0Y,2847
|
194
194
|
frogml_core/feature_store/validations/validation_response.py,sha256=N7lh7h187wBkeuEfVTooE_cGDt_Wo29mEZjmiHR6Pq0,3953
|
@@ -248,7 +248,7 @@ frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manage
|
|
248
248
|
frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
249
249
|
frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/folder_strategy.py,sha256=Uy3HJuiIaGjqVdFyMhyB33QLQxZEHR22K_wx9KrFSaY,5081
|
250
250
|
frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
251
|
-
frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py,sha256=
|
251
|
+
frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py,sha256=iqNqD79iKY9kgj3e5G2aZwjeLJnOIE4BC9i0Dl0aaII,5949
|
252
252
|
frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/strategy.py,sha256=MocvnsB_0NAy8ab6NOWRhmNbApGnO_zttyBXvtx8CPE,1447
|
253
253
|
frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
254
254
|
frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/zip_strategy.py,sha256=wCDk5wQlEtCLVDFdC3lXEebpLIMECovHHTvyLsorki8,2276
|
@@ -270,7 +270,7 @@ frogml_core/inner/build_logic/tools/text.py,sha256=tH-v19Mt8l90sMVxku5XRtrderT0q
|
|
270
270
|
frogml_core/inner/build_logic/trigger_build_context.py,sha256=SgyWaOKTlZUHqglo8r_pkn_a6PHP-L6gtYaapQ6F3Rs,207
|
271
271
|
frogml_core/inner/const.py,sha256=eP8Naruk3EnRWDdS9gwpozUYA9Nxznybw7Eiv4k5l38,126
|
272
272
|
frogml_core/inner/di_configuration/__init__.py,sha256=RJ30JlZguilrvlFTn66F7SWUGzV6T5yu_GOQCd7mwDY,1892
|
273
|
-
frogml_core/inner/di_configuration/account.py,sha256=
|
273
|
+
frogml_core/inner/di_configuration/account.py,sha256=AaUzYa0xHT8zGGcv1KTE58k9Gik4fYT7wQhJ62keQTA,2822
|
274
274
|
frogml_core/inner/di_configuration/config.yml,sha256=GUvaZMWIDIR_d7hFcPVG_kHdCwpERKH1AFDakG3vqI4,242
|
275
275
|
frogml_core/inner/di_configuration/containers.py,sha256=epzNvWcHcfO07EV6aQxEaGIehqgKBUK2CGzKgk1HeEA,1148
|
276
276
|
frogml_core/inner/instance_template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -281,7 +281,7 @@ frogml_core/inner/runtime_di/__init__.py,sha256=HXqtejgH3J9TXjnEBT6cNwnTDPq6v3sT
|
|
281
281
|
frogml_core/inner/runtime_di/containers.py,sha256=LbapepWFjBjkELEOTK7m7AJEfj4KENVDlpD7lv7zw6o,577
|
282
282
|
frogml_core/inner/singleton_meta.py,sha256=1cU99I0f9tjuMQLMJyLsK1oK3fZJMsO5-TbRHAMXqds,627
|
283
283
|
frogml_core/inner/tool/__init__.py,sha256=rmOSE-ejnzDG_H7kbikPQxEO4TFIkhBWjOXhTIrldiU,35
|
284
|
-
frogml_core/inner/tool/auth.py,sha256=
|
284
|
+
frogml_core/inner/tool/auth.py,sha256=7YIUVGwkAmNf1uWNtPOpnF4FPowrq0tZ3rOO0cn_EXQ,2652
|
285
285
|
frogml_core/inner/tool/grpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
286
286
|
frogml_core/inner/tool/grpc/grpc_auth.py,sha256=WPFWn7CfGp-pSqlnUTplHB6lfuJdzpS6jeidmpyondo,1421
|
287
287
|
frogml_core/inner/tool/grpc/grpc_tools.py,sha256=8sXDWBd_kVRuwmUSdpQNobylT6u8H_83Q8WlZJYOi0c,7247
|
@@ -345,7 +345,7 @@ frogml_core/llmops/provider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMp
|
|
345
345
|
frogml_core/llmops/provider/chat.py,sha256=n0WY2OhdX__w20DO7vvP53xVIqmr3cVF_G0yiCJsAzU,1626
|
346
346
|
frogml_core/llmops/provider/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
347
347
|
frogml_core/llmops/provider/openai/client.py,sha256=JwI9SMUu3bpMoixBAl10iX0J5xKdGFXV0SloPMI6gv8,4534
|
348
|
-
frogml_core/llmops/provider/openai/provider.py,sha256=
|
348
|
+
frogml_core/llmops/provider/openai/provider.py,sha256=2dQQSBxr6hqJFhT4U-KJmsZd-K_vLnOPFeyBMdRntxU,3131
|
349
349
|
frogml_core/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
350
350
|
frogml_core/model/_entity_extraction.py,sha256=gFeHgKgnz-MpB61w0OfJe30PUh5Cm390nZWSKy0JIls,4669
|
351
351
|
frogml_core/model/adapters/__init__.py,sha256=jMM_0Nf6_vCKccsRB0izs8odCXYlXt-u1sXGh4PcpX4,1739
|
@@ -393,7 +393,7 @@ frogml_core/model/tools/adapters/input_adapters/image_input.py,sha256=Kh8RHMxqHO
|
|
393
393
|
frogml_core/model/tools/adapters/input_adapters/json_input.py,sha256=kF3n6zFOjRtaU34PZuDoM9cIHKUe-N8Xx5v3GTW__OA,621
|
394
394
|
frogml_core/model/tools/adapters/input_adapters/string_input.py,sha256=K2SIJy92C-1eX1ReT8iqeFAU8UQWF2d88Zv79jsMrac,151
|
395
395
|
frogml_core/model/tools/adapters/input_adapters/tf_tensor_input.py,sha256=vP0DWrCzn2dh48cN16872QZzyTfWSRKPs5FAUxjZgHk,1415
|
396
|
-
frogml_core/model/tools/adapters/output.py,sha256=
|
396
|
+
frogml_core/model/tools/adapters/output.py,sha256=JtmNkpPvJRuTqDrfjWo67GdEC9C4j6oZxOW7wKlVmrE,2745
|
397
397
|
frogml_core/model/tools/adapters/output_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
398
398
|
frogml_core/model/tools/adapters/output_adapters/base_output.py,sha256=VXiwnA1499RQSfdFbEU769lRhuOqWTBPfXglKaymhRc,343
|
399
399
|
frogml_core/model/tools/adapters/output_adapters/dataframe_output.py,sha256=f1stPSAEJoceOO4rblmaid3cbN2PmzL-JV408hFQRLY,809
|
@@ -412,13 +412,13 @@ frogml_core/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
412
412
|
frogml_core/testing/fixtures.py,sha256=tjWIvdZ2nIfNPs6VtUeGx5coJepQVMUWemKGtqUYPzM,318
|
413
413
|
frogml_core/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
414
414
|
frogml_core/tools/logger/__init__.py,sha256=3FfLlYKajB15QA7d2AeDUTfv_UPGz7s2hucPRe_GXdA,115
|
415
|
-
frogml_core/tools/logger/logger.py,sha256=
|
415
|
+
frogml_core/tools/logger/logger.py,sha256=y4RaCRV8YVFtfUhj8KpSg1WukNoxFM61O6zpt8mv85A,9685
|
416
416
|
frogml_core/tools/logger/logging.yml,sha256=UWC2i3NVKT3j5S8_SapzqClDzXLIEAurzNIXa2tS4UA,1941
|
417
417
|
frogml_core/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
418
418
|
frogml_core/utils/datetime_utils.py,sha256=3zK7PUrerMlwB7U6WeuYwMAclVMfPqBNZihNRyIVMs4,581
|
419
419
|
frogml_core/utils/dict_utils.py,sha256=YsOSQeGpmrsm3CMnx2ZbqvzEcybk3m-0TCMXbBdBXaY,263
|
420
420
|
frogml_core/utils/model_utils.py,sha256=fLdYIScmVUfChGGxOacH2mID00ZUOPtS4ewUimEDGhg,132
|
421
|
-
frogml_core/utils/proto_utils.py,sha256=
|
421
|
+
frogml_core/utils/proto_utils.py,sha256=fTo259gqrknV3mSpTIN7wo7WpprJRjJmwwYcmkLYwHY,2390
|
422
422
|
frogml_core/vector_store/__init__.py,sha256=9gR2B5A1MXb2ks5VUzqrPASGpVTDuJs4uq7N7FNWOY4,120
|
423
423
|
frogml_core/vector_store/client.py,sha256=mmchLHjR5aOZOLIz1eibmsoXSMHvcHjCtaWB24QZoAY,6067
|
424
424
|
frogml_core/vector_store/collection.py,sha256=KKeEww8iogmHdfEeqgTHqIV9PizeiUl1coWwHJY8Glc,17150
|
@@ -428,7 +428,6 @@ frogml_core/vector_store/rest_helpers.py,sha256=RV7yxBqXs-lcGZmFmht5yRpcAAPFXRVF
|
|
428
428
|
frogml_core/vector_store/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
429
429
|
frogml_core/vector_store/utils/filter_utils.py,sha256=n80IlmS7lGelCNEpZ8o3rAHzrZpHc-3EykEd8tZoeAE,854
|
430
430
|
frogml_core/vector_store/utils/upsert_utils.py,sha256=vqnyAJOl46WqpZMUiOa4I8Zf2CDIXQxR7wM4Z8rgooc,7517
|
431
|
-
frogml_proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
432
431
|
frogml_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.py,sha256=dbxw7rgdWh38JDI7F1X6PFei4xvjAgsqKWihemdFyCs,2449
|
433
432
|
frogml_proto/jfml/hosting_gateway/v1/build_upload_url_pb2.pyi,sha256=HFrUIrEJFdKls7PhmadzZ-daVPV1i062w-71wPMMPa4,3116
|
434
433
|
frogml_proto/jfml/hosting_gateway/v1/build_upload_url_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
|
@@ -1115,6 +1114,45 @@ frogml_services_mock/mocks/workspace_manager_service_mock.py,sha256=WbOiWgOyr-xT
|
|
1115
1114
|
frogml_services_mock/services_mock.py,sha256=sgKgwhu2W0YOHtzil8x7f1znK_sZr_i27XSeiF4xqVE,21200
|
1116
1115
|
frogml_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1117
1116
|
frogml_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1117
|
+
frogml_storage/__init__.py,sha256=93lvSWnHyZhOl_RAxkMtdi_akHt37ijuw8MdOyJYdKM,23
|
1118
|
+
frogml_storage/_environment.py,sha256=zuzOJBtBwFaguwn_JkKjfhXStZoustgP30KzOP3mYv8,707
|
1119
|
+
frogml_storage/artifactory/__init__.py,sha256=C02rcm7kqsZBVA6c6Gztxamj96hn8Aj6BuzYWFRmWbQ,71
|
1120
|
+
frogml_storage/artifactory/_artifactory_api.py,sha256=Oz0HOpQPSNwWIVAy94UJUyPhLetc7sdZjoTfSXtrFug,11200
|
1121
|
+
frogml_storage/authentication/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
1122
|
+
frogml_storage/authentication/login/__init__.py,sha256=ch8UhQwh3o5ddyoJykQ0Bnog5-8qKHmeDpwqny8xMzM,46
|
1123
|
+
frogml_storage/authentication/login/_login_cli.py,sha256=FK8ZugljvpCZNz480y1XISqrLzBG6X4Mz4MHKHS3WJc,8137
|
1124
|
+
frogml_storage/authentication/login/_login_command.py,sha256=LRHNUR74Sv8j7ORLHyUmQfBaJ32hQ89iQ92njGr2I24,2749
|
1125
|
+
frogml_storage/authentication/models/__init__.py,sha256=e8MvB-Pz9WPWPRnrM_rsndUQzDpHWTZQrCVmK2AIeuI,113
|
1126
|
+
frogml_storage/authentication/models/_auth.py,sha256=MQeRDHBBwkqFvGpXf8oB8Q11eqBQJgoRNsb20RBOnrA,443
|
1127
|
+
frogml_storage/authentication/models/_auth_config.py,sha256=uDcPXaPRXKDEtAhHEuN-GQTeDg8AUL8FE4aiAByHU_I,2024
|
1128
|
+
frogml_storage/authentication/models/_login.py,sha256=jcFdiWRqjaVAGG9hiYpPHF0WUNT4DqMqVp1FPFGuwOM,723
|
1129
|
+
frogml_storage/authentication/utils/__init__.py,sha256=NBT-KjHJrqXYS3sZvWENjq1gmLiyKSN3fXWDl0-rh8k,430
|
1130
|
+
frogml_storage/authentication/utils/_authentication_utils.py,sha256=1N44Vbq3hUCpQdwbcjTm3IjUHACxN1j2v53aIGCF5Dw,9730
|
1131
|
+
frogml_storage/authentication/utils/_login_checks_utils.py,sha256=OQZSJHN9C0ujCaAjYuttBBxyoOrWo0KGLKOw5et__ds,2993
|
1132
|
+
frogml_storage/base_storage.py,sha256=gbkDRhXhLLJrr72A2vGcQqEHEjCDEk9-n7ye98F3_2k,5606
|
1133
|
+
frogml_storage/constants.py,sha256=Fx-Dyzkl9e28O2qCvIgyEf2aBuhftXAdbn2BIfXFaGw,1542
|
1134
|
+
frogml_storage/exceptions/checksum_verification_error.py,sha256=t1muLRYvqza7Q4jo1mYHck9ZoDwlGE7WxcheAFAnIQs,159
|
1135
|
+
frogml_storage/exceptions/validation_error.py,sha256=_twu_xcL-O7D26qkskuuR-_NcnPPTADIUO9HGY4g0x0,156
|
1136
|
+
frogml_storage/frog_ml.py,sha256=QROKxjNe8OUZo3vDkHsALm0gCBXOZEARBBY2hR4H610,24182
|
1137
|
+
frogml_storage/http/__init__.py,sha256=BOXGzjq1gJXlihldaZvMQNGJIdCy-UHWsk3u-bXEZnQ,36
|
1138
|
+
frogml_storage/http/http_client.py,sha256=jYwe4aHhMRsTjl5fZDlJxaTFuY3RnIcw7P1Wz8Ykz4g,2420
|
1139
|
+
frogml_storage/logging/__init__.py,sha256=JaBPWQQt3pjoLhUcZtgqPydGlKAWYpSvfPkt2z1Wi90,32
|
1140
|
+
frogml_storage/logging/_log_config.py,sha256=ytwyRLYr3SyRlo4UpTjLBtlNqVApP9URTVO5m5DN3uU,1162
|
1141
|
+
frogml_storage/logging/log_utils.py,sha256=MLuQvBrmysiWAeKKq1lHFt3o6DJPyafFWRJNTg9ECaY,711
|
1142
|
+
frogml_storage/models/__init__.py,sha256=ZoWMjtQ4Bn-ARJqKEUp-XDRbHgaSQJG_1M2S5z91jbQ,47
|
1143
|
+
frogml_storage/models/_download_context.py,sha256=8Jc5JmQG5mwObQp-CXF-D6dP3xUbZcyHUSdwM-p-8s0,1667
|
1144
|
+
frogml_storage/models/dataset_manifest.py,sha256=w5ARGQSkRSP7mofsbxOcc9bXORKXIMo5iF1yFGd8Nyw,303
|
1145
|
+
frogml_storage/models/entity_manifest.py,sha256=BXwJz1q3NIH6QFccnGDG51R3HnHO9-oCeO9qZqaxQg4,2787
|
1146
|
+
frogml_storage/models/frogml_dataset_version.py,sha256=Uwe50e8eD9XqwARCsa4-iJJqyMQsDqs9E-iuAInvJuA,637
|
1147
|
+
frogml_storage/models/frogml_entity_type_info.py,sha256=uBW7shYpShDTKQVraFNdyImG4vdtnIfkDcy4r1QL4sY,1405
|
1148
|
+
frogml_storage/models/frogml_entity_version.py,sha256=jiDGk3xcZ-OaaTacs6VLshpyUNKYs8qgBOPk1NUJFkY,928
|
1149
|
+
frogml_storage/models/frogml_model_version.py,sha256=2pVHW-BhowBcIScLZzWj5SH0abAirP3cDvXeq334lJI,631
|
1150
|
+
frogml_storage/models/model_manifest.py,sha256=NEyUTt0ZbLbv-47nb_yJJrA0xnTCk67SdEUcZ09tjr8,2200
|
1151
|
+
frogml_storage/models/serialization_metadata.py,sha256=KOJ9Yj0XGbYudpcUBMh67Hd7VohmoWsYOvhD-L2yzyY,347
|
1152
|
+
frogml_storage/utils/__init__.py,sha256=HQUWfuGUIPZY7kfS795TRW8BQ4WmNqrNjS7lUrbxCdk,299
|
1153
|
+
frogml_storage/utils/_input_checks_utility.py,sha256=CFiJOdTBS9piJMtR3lemEz27wZcQ6_-7XESu8iy-mrw,3221
|
1154
|
+
frogml_storage/utils/_storage_utils.py,sha256=HB2g7uY5A3b33yIcAUM1OjHb5jWsnpESsiDrEviQwrI,366
|
1155
|
+
frogml_storage/utils/_url_utils.py,sha256=NUEfz9Fp1iE8b676-A5wrMlSTsJVRKrUhcUItOFAJD8,821
|
1156
|
+
frogml_core-0.0.97.dist-info/METADATA,sha256=RUgAcVvSjFGkMrXZ0k4tJRYXa1aLyXlZJX14uE8J5XQ,14975
|
1157
|
+
frogml_core-0.0.97.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
1158
|
+
frogml_core-0.0.97.dist-info/RECORD,,
|
@@ -0,0 +1 @@
|
|
1
|
+
__version__ = "0.0.97"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import importlib.metadata
|
2
|
+
import platform
|
3
|
+
|
4
|
+
|
5
|
+
class Recorder:
|
6
|
+
@staticmethod
|
7
|
+
def get_environment_dependencies():
|
8
|
+
distributions = importlib.metadata.distributions()
|
9
|
+
return sorted(
|
10
|
+
[f"{dist.metadata['Name']}=={dist.version}" for dist in distributions]
|
11
|
+
)
|
12
|
+
|
13
|
+
@staticmethod
|
14
|
+
def get_environment_details():
|
15
|
+
return [
|
16
|
+
f"arch={platform.architecture()[0]}",
|
17
|
+
f"cpu={platform.processor()}",
|
18
|
+
f"platform={platform.platform()}",
|
19
|
+
f"python_version={platform.python_version()}",
|
20
|
+
f"python_implementation={platform.python_implementation()}",
|
21
|
+
f"python_compiler={platform.python_compiler()}",
|
22
|
+
]
|
@@ -0,0 +1 @@
|
|
1
|
+
from ._artifactory_api import ArtifactoryApi, StartTransactionResponse
|
@@ -0,0 +1,315 @@
|
|
1
|
+
import json
|
2
|
+
import os
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
from requests import Response
|
6
|
+
from tqdm.auto import tqdm
|
7
|
+
from tqdm.utils import CallbackIOWrapper
|
8
|
+
from urllib3 import Retry
|
9
|
+
|
10
|
+
from frogml_storage.constants import CHECKSUM_SHA2_HEADER
|
11
|
+
from frogml_storage.http.http_client import HTTPClient
|
12
|
+
from frogml_storage.logging import logger
|
13
|
+
from frogml_storage.models import DownloadContext
|
14
|
+
from frogml_storage.models.entity_manifest import Checksums, EntityManifest
|
15
|
+
from frogml_storage.models.frogml_entity_type_info import FrogMLEntityTypeInfo
|
16
|
+
from frogml_storage.utils import join_url
|
17
|
+
|
18
|
+
|
19
|
+
class StartTransactionResponse:
|
20
|
+
files_upload_path: str
|
21
|
+
lead_upload_path: str
|
22
|
+
dependencies_upload_path: str
|
23
|
+
code_upload_path: str
|
24
|
+
transaction_id: str
|
25
|
+
|
26
|
+
def __init__(
|
27
|
+
self,
|
28
|
+
files_upload_path,
|
29
|
+
lead_upload_path,
|
30
|
+
dependencies_upload_path,
|
31
|
+
code_upload_path,
|
32
|
+
transaction_id,
|
33
|
+
):
|
34
|
+
self.files_upload_path = files_upload_path
|
35
|
+
self.lead_upload_path = lead_upload_path
|
36
|
+
self.dependencies_upload_path = dependencies_upload_path
|
37
|
+
self.code_upload_path = code_upload_path
|
38
|
+
self.transaction_id = transaction_id
|
39
|
+
|
40
|
+
|
41
|
+
class ArtifactoryApi:
|
42
|
+
def __init__(self, uri, auth=None, http_client=None):
|
43
|
+
self.uri = uri
|
44
|
+
if http_client is not None:
|
45
|
+
self.http_client = http_client
|
46
|
+
else:
|
47
|
+
self.auth = auth
|
48
|
+
self.http_client = HTTPClient(auth=auth)
|
49
|
+
|
50
|
+
def start_transaction(
|
51
|
+
self,
|
52
|
+
entity_type_info: FrogMLEntityTypeInfo,
|
53
|
+
repository: str,
|
54
|
+
entity_name: str,
|
55
|
+
version: Optional[str],
|
56
|
+
) -> StartTransactionResponse:
|
57
|
+
"""
|
58
|
+
Initializes an upload. Returns transaction ID and upload path
|
59
|
+
"""
|
60
|
+
if version is None:
|
61
|
+
start_transaction_url = (
|
62
|
+
f"{self.uri}/api/machinelearning/{repository}/"
|
63
|
+
f"{entity_type_info.entity_type}/{entity_name}/start-transaction"
|
64
|
+
)
|
65
|
+
else:
|
66
|
+
start_transaction_url = (
|
67
|
+
f"{self.uri}/api/machinelearning/{repository}/{entity_type_info.entity_type}"
|
68
|
+
f"/{entity_name}/start-transaction/{version}"
|
69
|
+
)
|
70
|
+
try:
|
71
|
+
response = self.http_client.post(start_transaction_url)
|
72
|
+
response.raise_for_status()
|
73
|
+
files_upload_path = response.json()["filesUploadPath"]
|
74
|
+
lead_upload_path = response.json()["leadUploadPath"]
|
75
|
+
dependencies_upload_path = response.json()["dependenciesUploadPath"]
|
76
|
+
code_upload_path = response.json()["codeUploadPath"]
|
77
|
+
transaction_id = response.json()["transactionId"]
|
78
|
+
except Exception as exception:
|
79
|
+
err = (
|
80
|
+
f"Error occurred while trying to start an upload transaction for "
|
81
|
+
f"{entity_type_info.entity_type}: '{entity_name}'"
|
82
|
+
f" Error: '{exception}'"
|
83
|
+
)
|
84
|
+
logger.error(err, exc_info=False)
|
85
|
+
raise exception
|
86
|
+
return StartTransactionResponse(
|
87
|
+
files_upload_path=files_upload_path,
|
88
|
+
lead_upload_path=lead_upload_path,
|
89
|
+
dependencies_upload_path=dependencies_upload_path,
|
90
|
+
code_upload_path=code_upload_path,
|
91
|
+
transaction_id=transaction_id,
|
92
|
+
)
|
93
|
+
|
94
|
+
def end_transaction(
|
95
|
+
self,
|
96
|
+
entity_type: FrogMLEntityTypeInfo,
|
97
|
+
repository: str,
|
98
|
+
entity_name: str,
|
99
|
+
entity_manifest: EntityManifest,
|
100
|
+
transaction_id: str,
|
101
|
+
version: str,
|
102
|
+
properties: Optional[dict[str, str]],
|
103
|
+
) -> None:
|
104
|
+
"""
|
105
|
+
Upload model-manifest.json | dataset-manifest.json file, makes the model | dataset available in the repository
|
106
|
+
"""
|
107
|
+
filename = entity_type.metadata_file_name
|
108
|
+
|
109
|
+
url = join_url(
|
110
|
+
self.uri,
|
111
|
+
"api",
|
112
|
+
"machinelearning",
|
113
|
+
repository,
|
114
|
+
entity_type.entity_type,
|
115
|
+
"entity-manifest",
|
116
|
+
entity_name,
|
117
|
+
version,
|
118
|
+
transaction_id,
|
119
|
+
)
|
120
|
+
|
121
|
+
json_entity_manifest = entity_manifest.to_json()
|
122
|
+
self.upload_entity_manifest(
|
123
|
+
entity_type=entity_type,
|
124
|
+
filename=filename,
|
125
|
+
payload=json_entity_manifest,
|
126
|
+
url=url,
|
127
|
+
properties=properties,
|
128
|
+
)
|
129
|
+
|
130
|
+
def download_file(self, args: DownloadContext) -> None:
|
131
|
+
filename = os.path.basename(args.target_path)
|
132
|
+
try:
|
133
|
+
url = f"{self.uri}/{args.repo_key}/{args.source_url}"
|
134
|
+
with self.http_client.get(url=url, stream=True) as response:
|
135
|
+
response.raise_for_status()
|
136
|
+
total_size = int(response.headers.get("content-length", 0))
|
137
|
+
with open(args.target_path, "wb") as file:
|
138
|
+
with self.__initialize_progress_bar(total_size, filename) as pbar:
|
139
|
+
for chunk in response.iter_content(chunk_size=8192):
|
140
|
+
if chunk:
|
141
|
+
file.write(chunk)
|
142
|
+
pbar.update(len(chunk))
|
143
|
+
|
144
|
+
except Exception as exception:
|
145
|
+
self.__handle_download_exception(exception, args.target_path, filename)
|
146
|
+
|
147
|
+
def get_entity_manifest(
|
148
|
+
self,
|
149
|
+
entity_type_info: FrogMLEntityTypeInfo,
|
150
|
+
repository: str,
|
151
|
+
entity_name: str,
|
152
|
+
namespace: Optional[str],
|
153
|
+
version: Optional[str],
|
154
|
+
) -> dict:
|
155
|
+
url = join_url(
|
156
|
+
self.uri,
|
157
|
+
"api",
|
158
|
+
"machinelearning",
|
159
|
+
repository,
|
160
|
+
entity_type_info.entity_type,
|
161
|
+
"entity-manifest",
|
162
|
+
namespace,
|
163
|
+
entity_name,
|
164
|
+
version,
|
165
|
+
)
|
166
|
+
try:
|
167
|
+
with self.http_client.get(url=url) as r:
|
168
|
+
r.raise_for_status()
|
169
|
+
return r.json()
|
170
|
+
except Exception as exception:
|
171
|
+
err = f"Error occurred while trying to get {entity_type_info.entity_type} info file. Error: '{exception}'"
|
172
|
+
logger.error(err, exc_info=False)
|
173
|
+
raise exception
|
174
|
+
|
175
|
+
@staticmethod
|
176
|
+
def __handle_download_exception(
|
177
|
+
exception: Exception, target_path: str, filename: str
|
178
|
+
) -> None:
|
179
|
+
if os.path.exists(target_path):
|
180
|
+
os.remove(target_path)
|
181
|
+
err = f"Error occurred while trying to download file: '{filename}' Error: '{exception}'"
|
182
|
+
logger.error(err, exc_info=False)
|
183
|
+
raise exception
|
184
|
+
|
185
|
+
def get_artifact_checksum(self, download_context: DownloadContext) -> str:
|
186
|
+
url = f"{self.uri}/{download_context.repo_key}/{download_context.source_url}"
|
187
|
+
try:
|
188
|
+
with self.http_client.head(url=url, stream=True) as response:
|
189
|
+
response.raise_for_status()
|
190
|
+
return response.headers.get(CHECKSUM_SHA2_HEADER)
|
191
|
+
|
192
|
+
except Exception as exception:
|
193
|
+
logger.error(exception.__cause__, exc_info=False)
|
194
|
+
raise exception
|
195
|
+
|
196
|
+
def upload_entity_manifest(
|
197
|
+
self,
|
198
|
+
entity_type: FrogMLEntityTypeInfo,
|
199
|
+
filename: str,
|
200
|
+
payload: str,
|
201
|
+
url: str,
|
202
|
+
properties: Optional[dict[str, str]],
|
203
|
+
stream: bool = False,
|
204
|
+
) -> None:
|
205
|
+
body_part_name = f"{entity_type.body_part_stream}"
|
206
|
+
|
207
|
+
try:
|
208
|
+
files = {
|
209
|
+
f"{body_part_name}": (
|
210
|
+
f"{body_part_name}",
|
211
|
+
payload,
|
212
|
+
"application/octet-stream",
|
213
|
+
), # Include the InputStream
|
214
|
+
"additionalData": (
|
215
|
+
"additionalData",
|
216
|
+
json.dumps(properties),
|
217
|
+
"application/octet-stream",
|
218
|
+
), # Include the object
|
219
|
+
}
|
220
|
+
with self.http_client.put(url=url, files=files, stream=stream) as response:
|
221
|
+
response.raise_for_status()
|
222
|
+
except Exception as exception:
|
223
|
+
err = f"Error occurred while trying to upload file: '{filename}' Error: '{exception}'"
|
224
|
+
logger.error(err, exc_info=False)
|
225
|
+
raise exception
|
226
|
+
|
227
|
+
def upload_file(self, file_path: str, url: str) -> None:
|
228
|
+
wrapped_file = None
|
229
|
+
try:
|
230
|
+
file_size = os.stat(file_path).st_size
|
231
|
+
with (
|
232
|
+
self.__initialize_progress_bar(file_size, file_path) as pbar,
|
233
|
+
open(file_path, "rb") as file,
|
234
|
+
):
|
235
|
+
wrapped_file = CallbackIOWrapper(pbar.update, file, "read")
|
236
|
+
with self.http_client.put(url=url, payload=wrapped_file) as response:
|
237
|
+
response.raise_for_status()
|
238
|
+
except Exception as exception:
|
239
|
+
err = f"Error occurred while trying to upload file: '{file_path}' Error: '{exception}'"
|
240
|
+
logger.error(err, exc_info=False)
|
241
|
+
raise type(exception)(f"{err} File: {file_path}") from exception
|
242
|
+
finally:
|
243
|
+
if wrapped_file is not None:
|
244
|
+
wrapped_file.close()
|
245
|
+
|
246
|
+
def checksum_deployment(
|
247
|
+
self,
|
248
|
+
checksum: Checksums,
|
249
|
+
url: str,
|
250
|
+
full_path: str,
|
251
|
+
stream: bool = False,
|
252
|
+
) -> bool:
|
253
|
+
response = self.http_client.put(
|
254
|
+
url=url,
|
255
|
+
headers={"X-Checksum-Sha256": checksum.sha2, "X-Checksum-Deploy": "true"},
|
256
|
+
stream=stream,
|
257
|
+
)
|
258
|
+
if response.status_code != 200 and response.status_code != 201:
|
259
|
+
return False
|
260
|
+
else:
|
261
|
+
file_size = os.path.getsize(full_path)
|
262
|
+
pbar = self.__initialize_progress_bar(file_size, full_path)
|
263
|
+
pbar.update(file_size)
|
264
|
+
pbar.close()
|
265
|
+
return True
|
266
|
+
|
267
|
+
@staticmethod
|
268
|
+
def __initialize_progress_bar(total_size: int, filename: str) -> tqdm:
|
269
|
+
return tqdm(
|
270
|
+
total=total_size, unit="B", unit_scale=True, desc=filename, initial=0
|
271
|
+
)
|
272
|
+
|
273
|
+
def encrypt_password(self) -> Response:
|
274
|
+
"""
|
275
|
+
returns encrypted password as text
|
276
|
+
"""
|
277
|
+
return self.http_client.get(
|
278
|
+
url=join_url(self.uri, "/api/security/encryptedPassword")
|
279
|
+
)
|
280
|
+
|
281
|
+
def ping(self) -> Response:
|
282
|
+
"""
|
283
|
+
Sends a ping to Artifactory to validate login status
|
284
|
+
"""
|
285
|
+
url = join_url(self.uri, "api/system/ping")
|
286
|
+
return self.http_client.get(url=url)
|
287
|
+
|
288
|
+
def get_artifactory_version(self) -> Response:
|
289
|
+
return self.http_client.get(url=join_url(self.uri, "/api/system/version"))
|
290
|
+
|
291
|
+
def create_machinelearning_local_repo(self, repo_name: str) -> Response:
|
292
|
+
data = {
|
293
|
+
"rclass": "local",
|
294
|
+
"packageType": "machinelearning",
|
295
|
+
}
|
296
|
+
return self.http_client.put(
|
297
|
+
url=join_url(self.uri, "/api/repositories/" + repo_name), json=data
|
298
|
+
)
|
299
|
+
|
300
|
+
def delete_frogml_local_repo(self, repo_name: str) -> Response:
|
301
|
+
return self.http_client.delete(
|
302
|
+
url=join_url(self.uri, "/api/repositories/" + repo_name)
|
303
|
+
)
|
304
|
+
|
305
|
+
|
306
|
+
class RetryWithLog(Retry):
|
307
|
+
"""
|
308
|
+
Adding extra logs before making a retry request
|
309
|
+
"""
|
310
|
+
|
311
|
+
def __init__(self, *args, **kwargs):
|
312
|
+
history = kwargs.get("history")
|
313
|
+
if history is not None:
|
314
|
+
logger.debug(f"Error: ${history[-1].error}\nretrying...")
|
315
|
+
super().__init__(*args, **kwargs)
|
@@ -0,0 +1 @@
|
|
1
|
+
from ._login_cli import login as frogml_login
|