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.
Files changed (61) hide show
  1. frogml_core/__init__.py +1 -1
  2. frogml_core/clients/instance_template/client.py +6 -4
  3. frogml_core/clients/model_version_manager/client.py +4 -4
  4. frogml_core/clients/prompt_manager/model_descriptor_mapper.py +4 -4
  5. frogml_core/feature_store/_common/artifact_utils.py +3 -3
  6. frogml_core/feature_store/data_sources/batch/athena.py +3 -3
  7. frogml_core/feature_store/feature_sets/context.py +2 -6
  8. frogml_core/feature_store/feature_sets/streaming.py +3 -3
  9. frogml_core/feature_store/feature_sets/streaming_backfill.py +1 -1
  10. frogml_core/feature_store/online/client.py +6 -6
  11. frogml_core/feature_store/sinks/streaming/factory.py +1 -1
  12. frogml_core/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py +3 -3
  13. frogml_core/inner/di_configuration/account.py +2 -2
  14. frogml_core/inner/tool/auth.py +2 -3
  15. frogml_core/llmops/provider/openai/provider.py +3 -3
  16. frogml_core/model/tools/adapters/output.py +1 -1
  17. frogml_core/tools/logger/logger.py +1 -1
  18. frogml_core/utils/proto_utils.py +1 -1
  19. frogml_core-0.0.97.dist-info/METADATA +411 -0
  20. {frogml_core-0.0.96.dist-info → frogml_core-0.0.97.dist-info}/RECORD +60 -22
  21. frogml_storage/__init__.py +1 -0
  22. frogml_storage/_environment.py +22 -0
  23. frogml_storage/artifactory/__init__.py +1 -0
  24. frogml_storage/artifactory/_artifactory_api.py +315 -0
  25. frogml_storage/authentication/login/__init__.py +1 -0
  26. frogml_storage/authentication/login/_login_cli.py +229 -0
  27. frogml_storage/authentication/login/_login_command.py +71 -0
  28. frogml_storage/authentication/models/__init__.py +3 -0
  29. frogml_storage/authentication/models/_auth.py +20 -0
  30. frogml_storage/authentication/models/_auth_config.py +70 -0
  31. frogml_storage/authentication/models/_login.py +22 -0
  32. frogml_storage/authentication/utils/__init__.py +17 -0
  33. frogml_storage/authentication/utils/_authentication_utils.py +281 -0
  34. frogml_storage/authentication/utils/_login_checks_utils.py +114 -0
  35. frogml_storage/base_storage.py +140 -0
  36. frogml_storage/constants.py +56 -0
  37. frogml_storage/exceptions/checksum_verification_error.py +3 -0
  38. frogml_storage/exceptions/validation_error.py +4 -0
  39. frogml_storage/frog_ml.py +668 -0
  40. frogml_storage/http/__init__.py +1 -0
  41. frogml_storage/http/http_client.py +83 -0
  42. frogml_storage/logging/__init__.py +1 -0
  43. frogml_storage/logging/_log_config.py +45 -0
  44. frogml_storage/logging/log_utils.py +21 -0
  45. frogml_storage/models/__init__.py +1 -0
  46. frogml_storage/models/_download_context.py +54 -0
  47. frogml_storage/models/dataset_manifest.py +13 -0
  48. frogml_storage/models/entity_manifest.py +93 -0
  49. frogml_storage/models/frogml_dataset_version.py +21 -0
  50. frogml_storage/models/frogml_entity_type_info.py +48 -0
  51. frogml_storage/models/frogml_entity_version.py +34 -0
  52. frogml_storage/models/frogml_model_version.py +21 -0
  53. frogml_storage/models/model_manifest.py +60 -0
  54. frogml_storage/models/serialization_metadata.py +15 -0
  55. frogml_storage/utils/__init__.py +12 -0
  56. frogml_storage/utils/_input_checks_utility.py +104 -0
  57. frogml_storage/utils/_storage_utils.py +15 -0
  58. frogml_storage/utils/_url_utils.py +27 -0
  59. frogml_core-0.0.96.dist-info/METADATA +0 -46
  60. {frogml_core-0.0.96.dist-info → frogml_core-0.0.97.dist-info}/WHEEL +0 -0
  61. {frogml_proto → frogml_storage/authentication}/__init__.py +0 -0
@@ -1,4 +1,4 @@
1
- frogml_core/__init__.py,sha256=nQ0vxUcn4ES2hYTIOpjykEpySvZrqxGJ_hHWg98i5D8,777
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=uKTSebOUwb79t8SosxBbjIg6N9PlXXSYfedOVt5-jjc,2541
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=WeU9XXLu5K0ViS-2YeENq121qV4ESXmI6pzc_K8QkvM,9457
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=-j97vEEx0RUNBH245vIIMYw_xrFE-4AgV1hmg7g14U8,7856
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=STiDfiYOOX57zYSm2O8oUKIiRNP07w2NaxNcR0CuqWk,2005
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=2brkewwDRKEPiUW27oER1dwbjWOg9Xq3ik1tPSsHBxY,11290
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=RfHXPI6hD7AI7_hZWoLGEhYROeDDsfXTW0OToRB33-s,349
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=7IRumnjXgjwnmL7RU8RcW2E8-vLmmL4wDMP5snORt_s,25293
169
- frogml_core/feature_store/feature_sets/streaming_backfill.py,sha256=Nl4q41NvnW8eHtus2aBNdViYc8WqP5he_z9xQgX5i08,9833
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=JM7GLS8TeXW-jhEbecu2wp-tHoFHxPePqCw1XrsM6lw,13554
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=tpBkJmc1EC7OdhDO9bNiiVq2XtV7MVLfZJs1RiHt1Fk,2529
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=0ZbCGBJ6pxjIBi8t8fT-g2fK-es_vSHboZiPT_hgOkI,5947
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=sKxNqsSIodxV5XQuGeucQcrHYCx4IVIe3eiuPxeS4XE,2841
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=H0tQTc8JgEGLxv79IS_28jahi8cq8NNoP3lpxlQshPs,2714
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=cWM3KoxFNOKgMtkKAgSpcFO_D9MipXRBwwC-sQe3uZM,3129
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=xkYikB2iTcm9oZ8l9pJ3W-vLlORRYy7wPsigkdOB4VQ,2741
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=m38m6niR7QJgcd90t7_5N6ZTKnO-cP2cRmshcbLRa5k,9677
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=5kQAIxuzhk2_AB_enOD8kpLpIeruFjEGGSafnnt1fc8,2383
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
- frogml_core-0.0.96.dist-info/METADATA,sha256=zoNkkGUooSlfokhWhG-cQy_4qI1OamQywzNWRniXSPw,2028
1119
- frogml_core-0.0.96.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1120
- frogml_core-0.0.96.dist-info/RECORD,,
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