qwak-core 0.4.266__py3-none-any.whl → 0.4.268__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 (55) hide show
  1. _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.py +23 -3
  2. _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi +25 -0
  3. _qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py +33 -0
  4. qwak/__init__.py +1 -1
  5. qwak/clients/instance_template/client.py +4 -6
  6. qwak/clients/prompt_manager/model_descriptor_mapper.py +19 -21
  7. qwak/feature_store/_common/artifact_utils.py +3 -3
  8. qwak/feature_store/data_sources/base.py +4 -4
  9. qwak/feature_store/data_sources/batch/athena.py +3 -3
  10. qwak/feature_store/feature_sets/streaming.py +3 -3
  11. qwak/feature_store/feature_sets/streaming_backfill.py +1 -1
  12. qwak/feature_store/online/client.py +6 -6
  13. qwak/feature_store/sinks/streaming/factory.py +1 -1
  14. qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py +3 -3
  15. qwak/llmops/provider/openai/provider.py +3 -3
  16. qwak/model/tools/adapters/output.py +1 -1
  17. qwak/model/utils/feature_utils.py +8 -12
  18. qwak/model_loggers/artifact_logger.py +7 -7
  19. qwak/tools/logger/logger.py +1 -1
  20. qwak_core-0.4.268.dist-info/METADATA +53 -0
  21. {qwak_core-0.4.266.dist-info → qwak_core-0.4.268.dist-info}/RECORD +22 -54
  22. frogml_storage/__init__.py +0 -0
  23. frogml_storage/_artifactory_api.py +0 -315
  24. frogml_storage/_environment.py +0 -22
  25. frogml_storage/_log_config.py +0 -45
  26. frogml_storage/_storage_utils.py +0 -15
  27. frogml_storage/_utils.py +0 -69
  28. frogml_storage/authentication/_authentication_utils.py +0 -259
  29. frogml_storage/authentication/models/_auth_config.py +0 -70
  30. frogml_storage/cli/_frogml_cli.py +0 -40
  31. frogml_storage/cli/_login_cli.py +0 -240
  32. frogml_storage/cli/commands/_login_command.py +0 -74
  33. frogml_storage/cli/models/_cli_login_arguments.py +0 -22
  34. frogml_storage/cli/utils/_cli_utils.py +0 -19
  35. frogml_storage/cli/utils/_login_checks_utility.py +0 -114
  36. frogml_storage/constants.py +0 -56
  37. frogml_storage/dataset_manifest.py +0 -13
  38. frogml_storage/entity_manifest.py +0 -93
  39. frogml_storage/exceptions/checksum_verification_error.py +0 -3
  40. frogml_storage/exceptions/validation_error.py +0 -4
  41. frogml_storage/frog_ml.py +0 -668
  42. frogml_storage/frogml_entity_type_info.py +0 -46
  43. frogml_storage/http/__init__.py +0 -0
  44. frogml_storage/http/http_client.py +0 -83
  45. frogml_storage/model_manifest.py +0 -60
  46. frogml_storage/models/_download_context.py +0 -54
  47. frogml_storage/models/frogml_dataset_version.py +0 -21
  48. frogml_storage/models/frogml_entity_version.py +0 -34
  49. frogml_storage/models/frogml_model_version.py +0 -21
  50. frogml_storage/serialization_metadata.py +0 -15
  51. frogml_storage/storage.py +0 -140
  52. frogml_storage/utils/_input_checks_utility.py +0 -104
  53. qwak_core-0.4.266.dist-info/METADATA +0 -419
  54. qwak_core-0.4.266.dist-info/entry_points.txt +0 -3
  55. {qwak_core-0.4.266.dist-info → qwak_core-0.4.268.dist-info}/WHEEL +0 -0
@@ -189,9 +189,9 @@ _qwak_proto/qwak/builds/build_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD
189
189
  _qwak_proto/qwak/builds/build_url_pb2.py,sha256=i2vgIICNKY-LdEPi_YNMrM3zmBtBudd30izMgb0IDsE,8564
190
190
  _qwak_proto/qwak/builds/build_url_pb2.pyi,sha256=qaYyuLRHN2hOqYXlN9mKJo9gpggUnPmTVZIu-zNA0dI,11372
191
191
  _qwak_proto/qwak/builds/build_url_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXHDCNMhZD2VXqocC9l_gk,159
192
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.py,sha256=WbUAezkjMpCuiU2b0DoB1aVCrAACE8_2xzocTB_NsMo,21002
193
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi,sha256=y172Z4jjaifAbkRCFIdgTiaz1X1MTWDLZBsEjVEestk,16595
194
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py,sha256=0qbyQaAXPMxZ5RUCKj9eeQqD2GQ9HscEQ4x2URp9fRI,20764
192
+ _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.py,sha256=pKKRpu_v2gDeQNiAjpHSPOJIxKLcMg19pE45QsNcIGY,22676
193
+ _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi,sha256=PL62J_ZF0Zfq3t23c054XLB7XCUDz_Z2uJEdvtn9NNE,17570
194
+ _qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py,sha256=iXOej55OLfL3uUDhQ9LfJpXcsdDKfO-a61mJcipvQX0,22844
195
195
  _qwak_proto/qwak/builds/builds_pb2.py,sha256=1lFS_9EYNaKjH_KLQ6QF2-hkmx7X_SDzoMn1_h9pabo,38491
196
196
  _qwak_proto/qwak/builds/builds_pb2.pyi,sha256=E1LSfB25mU86T6sUY-TWI53gptxqwTdm6MyXeg1wsi8,53557
197
197
  _qwak_proto/qwak/builds/builds_pb2_grpc.py,sha256=eJjKXn0mS_4W3Fc2zhVcVDadisuxSvxYzLAQwd1DnCI,11572
@@ -591,38 +591,7 @@ _qwak_proto/qwak/workspace/workspace_pb2_grpc.py,sha256=1oboBPFxaTEXt9Aw7EAj8gXH
591
591
  _qwak_proto/qwak/workspace/workspace_service_pb2.py,sha256=AB3C9S_AbOD7Nx1Ni4j1rW6PNtYTV1zjiqFQk-goQ74,21429
592
592
  _qwak_proto/qwak/workspace/workspace_service_pb2.pyi,sha256=nKKCHwnovZhsy8TSVmdz-Vtl0nviOOoX56HD-41Xo08,13726
593
593
  _qwak_proto/qwak/workspace/workspace_service_pb2_grpc.py,sha256=yKGuexxTBza99Ihe0DSTniV2ZSd_AG47inHenqfi890,27193
594
- frogml_storage/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
595
- frogml_storage/_artifactory_api.py,sha256=Hn8y7l61fhu9KZJBUr31F5m5gPIOz1UbnvthV4N_6-0,11209
596
- frogml_storage/_environment.py,sha256=zuzOJBtBwFaguwn_JkKjfhXStZoustgP30KzOP3mYv8,707
597
- frogml_storage/_log_config.py,sha256=ytwyRLYr3SyRlo4UpTjLBtlNqVApP9URTVO5m5DN3uU,1162
598
- frogml_storage/_storage_utils.py,sha256=HB2g7uY5A3b33yIcAUM1OjHb5jWsnpESsiDrEviQwrI,366
599
- frogml_storage/_utils.py,sha256=JkjJMObF-foFEA693KyrdDoVDHAyI21SW4UPlYrVYvs,1956
600
- frogml_storage/authentication/_authentication_utils.py,sha256=RQUNd2c88cOpcRJ-khsmI_XotwvzQ473pde6oyVSUPc,9227
601
- frogml_storage/authentication/models/_auth_config.py,sha256=uDcPXaPRXKDEtAhHEuN-GQTeDg8AUL8FE4aiAByHU_I,2024
602
- frogml_storage/cli/_frogml_cli.py,sha256=KAv0TrwwHazXoCb_cIScnbSG7NwZLf1nCjxEel642fI,1045
603
- frogml_storage/cli/_login_cli.py,sha256=n9sXUd4McD_0nULQErV8vrDmFJQvQTGKRMFEf8U-j64,8564
604
- frogml_storage/cli/commands/_login_command.py,sha256=RyeChctCB_wSAoLa2MdvSVKJLYkBxK9oDLoD7PaxvCA,2899
605
- frogml_storage/cli/models/_cli_login_arguments.py,sha256=jcFdiWRqjaVAGG9hiYpPHF0WUNT4DqMqVp1FPFGuwOM,723
606
- frogml_storage/cli/utils/_cli_utils.py,sha256=hffNsDeA8WnjLTDS2lE_HZLSdYgi7xEElSjuWDFWJrk,581
607
- frogml_storage/cli/utils/_login_checks_utility.py,sha256=sRS4-5MZQa3_Vcv7pSylUNZ_AcU8YW64PSCByDqGBCM,3014
608
- frogml_storage/constants.py,sha256=Fx-Dyzkl9e28O2qCvIgyEf2aBuhftXAdbn2BIfXFaGw,1542
609
- frogml_storage/dataset_manifest.py,sha256=x-1hLFXcX09T_drpCeN19JKZeI4WLD0HF1rXc8jcoa8,296
610
- frogml_storage/entity_manifest.py,sha256=xal9plqq7QNhR0hEaISKi2zUfiNmB4ENbyuG_7W4gsU,2796
611
- frogml_storage/exceptions/checksum_verification_error.py,sha256=t1muLRYvqza7Q4jo1mYHck9ZoDwlGE7WxcheAFAnIQs,159
612
- frogml_storage/exceptions/validation_error.py,sha256=_twu_xcL-O7D26qkskuuR-_NcnPPTADIUO9HGY4g0x0,156
613
- frogml_storage/frog_ml.py,sha256=ltESsR1ux8SU-cHNgiUQZ2Ua-Rr4m1eVKrG2Zmzll4k,24238
614
- frogml_storage/frogml_entity_type_info.py,sha256=EnPP49U-PdMrTZpFUJzXib5WHPs8Vh4AwIEPC3x2iqM,1376
615
- frogml_storage/http/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
616
- frogml_storage/http/http_client.py,sha256=pHu8OKdUVW8-td4-BDjbPNzfBLyVmFHtnQiaFJFiOdA,2404
617
- frogml_storage/model_manifest.py,sha256=BVDw_41GVajpWj5WhCoqAk6lIiNMMnIMFKTFHkLuUbU,2186
618
- frogml_storage/models/_download_context.py,sha256=pc9KnepPQB9F-MaIe6JkRF0ineKj4B2ycdgr5e37zc4,1660
619
- frogml_storage/models/frogml_dataset_version.py,sha256=Uwe50e8eD9XqwARCsa4-iJJqyMQsDqs9E-iuAInvJuA,637
620
- frogml_storage/models/frogml_entity_version.py,sha256=-3lRFQSES76YbBAzKuOOlWGcT4T1v2RNQ-54bN8-GH0,921
621
- frogml_storage/models/frogml_model_version.py,sha256=2pVHW-BhowBcIScLZzWj5SH0abAirP3cDvXeq334lJI,631
622
- frogml_storage/serialization_metadata.py,sha256=KOJ9Yj0XGbYudpcUBMh67Hd7VohmoWsYOvhD-L2yzyY,347
623
- frogml_storage/storage.py,sha256=gfkaNzQBgR7-uMHc9-prdiFwyIGb-rO4dKQ49r-TQ3I,5595
624
- frogml_storage/utils/_input_checks_utility.py,sha256=bn3_xQcTnsASIHgmvoCyWCFu0akgWCiI8RdXn1AHqsE,3225
625
- qwak/__init__.py,sha256=kuADpQQnTq1K96a6bwwfFMNhoKzyLbPWFI4uD-Z8npQ,587
594
+ qwak/__init__.py,sha256=fWJaVhTlVaxcMMnvWKNHYIkX9CYhq--ryIXb81o4n-E,587
626
595
  qwak/automations/__init__.py,sha256=qFZRvCxUUn8gcxkJR0v19ulHW2oJ0x6-Rif7HiheDP4,1522
627
596
  qwak/automations/automation_executions.py,sha256=5MeH_epYYWb8NKXgAozwT_jPyyUDednBHG7izloi7RY,3228
628
597
  qwak/automations/automations.py,sha256=3yx8e2v0uSKDnXbqyknasyEoQ5vxGni6K40Hbi1_zkk,12599
@@ -682,7 +651,7 @@ qwak/clients/file_versioning/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
682
651
  qwak/clients/file_versioning/client.py,sha256=ywOy9olB4mekjQQrKUufAbaC-3sWzQnqd3ChcwrAJzc,2505
683
652
  qwak/clients/file_versioning/file_tag_filter.py,sha256=5pVJ0mGq9DEOqQkg7H-jjSbsmnWusO4-_0Jpz4DhDwo,885
684
653
  qwak/clients/instance_template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
685
- qwak/clients/instance_template/client.py,sha256=8EjXzMLTeGfywO1kDycVr4MxT3Z6gF7nX8B9i03JRYQ,2565
654
+ qwak/clients/instance_template/client.py,sha256=7c4mQG7tzp-OmNhBEBYxIqAYTNYtCRe76j5X1aP2Xk4,2509
686
655
  qwak/clients/integration_management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
687
656
  qwak/clients/integration_management/integration_manager_client.py,sha256=-pNY6iQU8du46wvRCiTKKCi23RcCNXr9La_0oG0mJo0,1225
688
657
  qwak/clients/integration_management/integration_utils.py,sha256=EVNsM5ItlGwpfqfZPayJCrTiZa0AaR241ui4QvzcLVg,953
@@ -699,7 +668,7 @@ qwak/clients/model_management/client.py,sha256=LHJlR12plQCjv0TtuozJ4Da91M7C-ay6G
699
668
  qwak/clients/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
700
669
  qwak/clients/project/client.py,sha256=Np4vDU4iPndGtWTF_bH2CqepCQHw49whvsq23uLMMJs,2484
701
670
  qwak/clients/prompt_manager/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
702
- qwak/clients/prompt_manager/model_descriptor_mapper.py,sha256=QDLPImRIPv9Jrdtg03oL7zgKvrWDXmzK0QXkUFAo1bs,7395
671
+ qwak/clients/prompt_manager/model_descriptor_mapper.py,sha256=rRQXjqLvq7SVxYSM5_IFo_6z70Kzf5WPOtxFzm-69m0,7313
703
672
  qwak/clients/prompt_manager/prompt_manager_client.py,sha256=Mg1uqJjwj57jFfNKx6tomzfOe6C8keTKpxvXFSPo0yA,6952
704
673
  qwak/clients/prompt_manager/prompt_proto_mapper.py,sha256=ybLsPz5nt4BsgBFk2RYk0tFwbNpHTsCOp93k8ALXmr4,9233
705
674
  qwak/clients/secret_service/__init__.py,sha256=TdQl1lgplXCKVHYSN4feRIAoonZ7XDz50zALjwVDcM4,40
@@ -731,7 +700,7 @@ qwak/exceptions/qwak_remote_build_failed.py,sha256=JgrYwCQGclCCcpSkYk2FKqhkEk45a
731
700
  qwak/exceptions/qwak_suggestion_exception.py,sha256=3sIK6s3OB3G0NLC_fGV1WkAo_tHNjH-A5vaehxmkoek,746
732
701
  qwak/feature_store/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
733
702
  qwak/feature_store/_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
734
- qwak/feature_store/_common/artifact_utils.py,sha256=0u90A3Fxdw5_QFWaK80VJoJh907ffy-GIuVMku7cyL0,1979
703
+ qwak/feature_store/_common/artifact_utils.py,sha256=iIdz6EfFuE_yub6g5KXlOOMt7TA7pEuuLwjlzVSRpO8,1977
735
704
  qwak/feature_store/_common/feature_set_utils.py,sha256=dhtPWnwv1nB3h3EA8FAYklx1qGkO_Dj1jecaBGNNpew,8634
736
705
  qwak/feature_store/_common/functions.py,sha256=kSNYJ7dy48NN09HG9asm4ibQh0JaCGcZYsRDjRWlUHE,659
737
706
  qwak/feature_store/_common/packaging.py,sha256=eyTyjIB_C6wGHcdU7xR5u7-N2Ld98s4LPU_iZtcbRO0,8122
@@ -740,11 +709,11 @@ qwak/feature_store/_common/source_code_spec_factory.py,sha256=zDif0nlWs43T87-k2V
740
709
  qwak/feature_store/_common/value.py,sha256=6aN3101DvEDUJalNL1LrzH32wi9SVhl0ZpsGHcFJZzg,323
741
710
  qwak/feature_store/data_sources/__init__.py,sha256=IKv3UDhcaCm6VagPGv1AvdYu_gxHUc69mbNOG96kEsU,2316
742
711
  qwak/feature_store/data_sources/attributes.py,sha256=6xbotlaWcrqmW5cjCET57hyCRDy8I2a2aoo5BGcIE4I,791
743
- qwak/feature_store/data_sources/base.py,sha256=KYP1VLr_Br_4se3-JxKWC2dj5CjMM5Mli7OOz_NZtCQ,4170
712
+ qwak/feature_store/data_sources/base.py,sha256=w9EJOp-RnbA6oxoAvKOF6LKUCEWOkN8gjG9uNQUYJ1M,4178
744
713
  qwak/feature_store/data_sources/batch/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
745
714
  qwak/feature_store/data_sources/batch/_batch.py,sha256=V-VLVgUVPN1Mfk-brNYl0nPczqRU-GYOB7Xy-3-O0zI,197
746
715
  qwak/feature_store/data_sources/batch/_jdbc.py,sha256=k045Rm5iMx2pXYvif4C4vdZt7tbVgAt-3ThH3cP2rTM,695
747
- qwak/feature_store/data_sources/batch/athena.py,sha256=Ogrr3Za7owdWu8cWsa81UnvZ4_R2UFA1YMe8UjkYroA,10902
716
+ qwak/feature_store/data_sources/batch/athena.py,sha256=sdP68PkWsAWE1U-5VpZnGFF9aNUTOqns4JQDeTDqI5k,10900
748
717
  qwak/feature_store/data_sources/batch/big_query.py,sha256=H3rEWGxXJjIQNFiyZ9c6JgcSyeWzSeZzh59y8ZjAn0U,3117
749
718
  qwak/feature_store/data_sources/batch/clickhouse.py,sha256=FELh-70EIyPeYap3Gj8maoalXdXbJ5kBvnfvaiw6Kk4,2158
750
719
  qwak/feature_store/data_sources/batch/csv.py,sha256=wdn8ARBYebTcNojaji8OYXnKlx_U1G7sFLChGffMxfg,2076
@@ -784,8 +753,8 @@ qwak/feature_store/feature_sets/context.py,sha256=zV6r0O70cfM4pmxlfC6xxAtro-wBhe
784
753
  qwak/feature_store/feature_sets/execution_spec.py,sha256=SXlhgNJeFDIKvrH35ZOyjBqGUesdoxjWkPgHmm518Y0,1877
785
754
  qwak/feature_store/feature_sets/metadata.py,sha256=ckr-zr0hZgsK-tRWucMomF7Tj8XIYcp_cnNGwtMV4mA,1814
786
755
  qwak/feature_store/feature_sets/read_policies.py,sha256=ZVMRiducxfb5YbU0NQQDPb78BH5fRttsE5y2TL7Jaj4,6820
787
- qwak/feature_store/feature_sets/streaming.py,sha256=G0Prg6hyjrzimL0u7tA71G-Bq3mnn57ZZCneMfudL0Y,25161
788
- qwak/feature_store/feature_sets/streaming_backfill.py,sha256=NInPNnc0WYx2FDsjaOt5woTO7EtzgrZCbMB_Ull0ux0,9585
756
+ qwak/feature_store/feature_sets/streaming.py,sha256=QScKkdCGF8TqVJscB-8YE4s9Uu--3VT2C7KwaRUMIpw,25159
757
+ qwak/feature_store/feature_sets/streaming_backfill.py,sha256=eb5grj467Z4xEujUpCMpmXda1_W82G7NaxR6cw_AHbQ,9584
789
758
  qwak/feature_store/feature_sets/transformations/__init__.py,sha256=TtzeMNhqxuYu8NIxqBCcGHJoA-B8389RTIHrDMvpMbw,857
790
759
  qwak/feature_store/feature_sets/transformations/aggregations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
791
760
  qwak/feature_store/feature_sets/transformations/aggregations/aggregations.py,sha256=MENQyuDEG5G4TQs7fd1L1FEfP4kWd0LaHbG61Kw4rbY,14117
@@ -800,14 +769,14 @@ qwak/feature_store/offline/_offline_serving_validations.py,sha256=a3Ga9-IPTS0TPf
800
769
  qwak/feature_store/offline/client_v2.py,sha256=MKIlVGohW7aMmCpBUKE9wP9X6gtU_pLVfOgnBn2Bp98,14393
801
770
  qwak/feature_store/offline/feature_set_features.py,sha256=Eh_rPz_m12cAQvrhIF-xtA-ZGVKy1HlgKJdjNvsmPoo,739
802
771
  qwak/feature_store/online/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
803
- qwak/feature_store/online/client.py,sha256=V317ol5IXslhmHmUlmucc-yBXaByj6HuA6LdzGWDSTk,12929
772
+ qwak/feature_store/online/client.py,sha256=fBD48NDpocX01qvFVYB5Qd4JRM1InCjdeQgoMM8nQ0Q,12911
804
773
  qwak/feature_store/online/endpoint_utils.py,sha256=Lx5Wvvg7teJGXP3SOUPPmYQeVjSve2b0hQlqhs13R5M,2210
805
774
  qwak/feature_store/sinks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
806
775
  qwak/feature_store/sinks/base.py,sha256=FvNz9aabvYHT-3vZdHdtEnlFQ0tyvsnspkPnWt2lTdU,360
807
776
  qwak/feature_store/sinks/kafka.py,sha256=P9gPxotQMyC3qr8xZyL_7g65amnzeqpvz6jutwRoHiY,1826
808
777
  qwak/feature_store/sinks/streaming/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
809
778
  qwak/feature_store/sinks/streaming/attachment.py,sha256=sONswzyTZlxB9OEDc1DzE_Et6AI7gBi_T--NSY3MeOw,1031
810
- qwak/feature_store/sinks/streaming/factory.py,sha256=8gGJs6dAzYZVhTIyvlmnQgm7KqYe5xa9eBGUyigMPSw,2361
779
+ qwak/feature_store/sinks/streaming/factory.py,sha256=VctrlU9oHNPniTb43eACXUwM2K2pDskd0LD4g_Cp8uY,2347
811
780
  qwak/feature_store/validations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
812
781
  qwak/feature_store/validations/validation_options.py,sha256=f4kqv8j-lyvWLGnaFlUQNmAleZ3hkTZZs0CJPcsk18I,2656
813
782
  qwak/feature_store/validations/validation_response.py,sha256=e052KUs2qzYvh5Kuo4XbnscRK_1jcT6HwqwdL-4qH20,3783
@@ -843,7 +812,7 @@ qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strat
843
812
  qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
844
813
  qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/folder/folder_strategy.py,sha256=Cry97YuBP16TZT6iL512Gmqp-U1J-UDxdARt-E1MD2M,5057
845
814
  qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
846
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py,sha256=xt2Ywwf0zirPkpLCu_RgtZp7AxFU-qEboqK6DZdNb5Y,5946
815
+ qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py,sha256=QDK3upq7DNeL6zmegFf3sHg3kw61AGcxzjDPlv4nusA,5944
847
816
  qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/strategy.py,sha256=iRl-au3V6KbKIY-doYSAaqiS5Bt2_w3ZIvUw9xwSK64,1424
848
817
  qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
849
818
  qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/zip/zip_strategy.py,sha256=z1PHzvhUWtEqcppE5Ju4BRbwvZ07kodNglkl6AwvbfI,2258
@@ -941,7 +910,7 @@ qwak/llmops/provider/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
941
910
  qwak/llmops/provider/chat.py,sha256=dec-IKGzkECb5tz63HNK0Fx9Tm4ukQ4kkYFEr6bA7co,1582
942
911
  qwak/llmops/provider/openai/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
943
912
  qwak/llmops/provider/openai/client.py,sha256=G20TB3LW4amdOu-_7526xBDnvpNop7c_QvhLz7hSLUs,4462
944
- qwak/llmops/provider/openai/provider.py,sha256=TFdbo9NWPPKkx8yNuAfDkVmYFvVW9IcAg_NBtCowW4Q,3044
913
+ qwak/llmops/provider/openai/provider.py,sha256=E0LnEfFFidrXMcOG-sI3teZvNyzApmhbi1ZB0MDnDcE,3042
945
914
  qwak/model/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
946
915
  qwak/model/_entity_extraction.py,sha256=-h66QcJS0bzrzHMqdvxybHj3lgPbQhoVHnt7YKAFjKg,4626
947
916
  qwak/model/adapters/__init__.py,sha256=jMM_0Nf6_vCKccsRB0izs8odCXYlXt-u1sXGh4PcpX4,1739
@@ -989,7 +958,7 @@ qwak/model/tools/adapters/input_adapters/image_input.py,sha256=NL869uiD5TjI3WzjQ
989
958
  qwak/model/tools/adapters/input_adapters/json_input.py,sha256=nP_1EgJvmv4rkXR6tLYrJwf4p-FAfFQOTxY-LEfAJaU,608
990
959
  qwak/model/tools/adapters/input_adapters/string_input.py,sha256=K2SIJy92C-1eX1ReT8iqeFAU8UQWF2d88Zv79jsMrac,151
991
960
  qwak/model/tools/adapters/input_adapters/tf_tensor_input.py,sha256=tNid73S0WOLjvD6tKrO2BsgUa-eJaMmCkRs4ucVQXDU,1363
992
- qwak/model/tools/adapters/output.py,sha256=tj2kj7TQiH0b7N1C3j-EPYWESoNiwSyqazV8gbkMIbY,2716
961
+ qwak/model/tools/adapters/output.py,sha256=GZa-8LD25vkDccupxNEvlmrept3hgL94BZ2pGABYmmQ,2712
993
962
  qwak/model/tools/adapters/output_adapters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
994
963
  qwak/model/tools/adapters/output_adapters/base_output.py,sha256=VXiwnA1499RQSfdFbEU769lRhuOqWTBPfXglKaymhRc,343
995
964
  qwak/model/tools/adapters/output_adapters/dataframe_output.py,sha256=tJwG798QCarqXSfD8Je-E3RNwvW9KskcgAYoLioPFns,798
@@ -999,9 +968,9 @@ qwak/model/tools/adapters/output_adapters/tf_tensor_output.py,sha256=Xg98LMoldKE
999
968
  qwak/model/tools/run_model_locally.py,sha256=xRYOOi-BLAs-QRTrSWxKPQLeTg5j3FSmImDq6e6lLro,2289
1000
969
  qwak/model/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1001
970
  qwak/model/utils/extract_wrapped_function.py,sha256=uIle1zL8vbmeS3PGAuaNFLIUQAsvpuzk3LlH-Teba94,320
1002
- qwak/model/utils/feature_utils.py,sha256=bCeWZgsKSvGjbQOfLKubEJNec6Gp1Gbxug_fsO3wReo,2491
971
+ qwak/model/utils/feature_utils.py,sha256=jB4pfmhqN2_B4THR7YADlCWbymU3cm_8u2RzTegrv_w,2389
1003
972
  qwak/model_loggers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1004
- qwak/model_loggers/artifact_logger.py,sha256=kXYfnVu7zvInA3CQlPFdIQLWOUGpZ6wNTprY5WE6Mvo,3889
973
+ qwak/model_loggers/artifact_logger.py,sha256=Emv8eSpgxJ_5_uCiNLUloTNdXPCtWC0pJDcWMcc6A78,3909
1005
974
  qwak/model_loggers/data_logger.py,sha256=aTRnRwKmKUFZq9SRg4sY-b1yGDY2XB-pExlQ0WlcH0k,5629
1006
975
  qwak/model_loggers/model_logger.py,sha256=WxKLEpfzDaRn3kanrI0kj4zqqKQrwT2sin1IS1WNEA8,852
1007
976
  qwak/qwak_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1032,7 +1001,7 @@ qwak/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1032
1001
  qwak/testing/fixtures.py,sha256=tjWIvdZ2nIfNPs6VtUeGx5coJepQVMUWemKGtqUYPzM,318
1033
1002
  qwak/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1034
1003
  qwak/tools/logger/__init__.py,sha256=i70JxYs7RGOaUrcYAHkakLqyUt486qJyEY1cXFvkk9Y,107
1035
- qwak/tools/logger/logger.py,sha256=aGCsimvkfBF4eVPCqgwQc0LVuQZyenheNUmNiOSruK4,9606
1004
+ qwak/tools/logger/logger.py,sha256=VmseUKV8fWpJ7yYFHjE3nQu6_2dU-t1-PQrY6Mnt8nc,9598
1036
1005
  qwak/tools/logger/logging.yml,sha256=UWC2i3NVKT3j5S8_SapzqClDzXLIEAurzNIXa2tS4UA,1941
1037
1006
  qwak/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1038
1007
  qwak/utils/datetime_utils.py,sha256=3zK7PUrerMlwB7U6WeuYwMAclVMfPqBNZihNRyIVMs4,581
@@ -1096,7 +1065,6 @@ qwak_services_mock/mocks/workspace_manager_service_mock.py,sha256=O9ZSwln4T4kHVk
1096
1065
  qwak_services_mock/services_mock.py,sha256=zXtHcX8a_acz7ynxuCBxxVpHpde7aAGjIn6Uw52LY1s,19593
1097
1066
  qwak_services_mock/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1098
1067
  qwak_services_mock/utils/service_utils.py,sha256=ZlB0CnB1J6oBn6_m7fQO2U8tKoboHdUa6ljjkRMYNXU,265
1099
- qwak_core-0.4.266.dist-info/METADATA,sha256=piqQlieEvf1rcFagwMYmaZw07LkhF36cZIIsdDGC10I,15517
1100
- qwak_core-0.4.266.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1101
- qwak_core-0.4.266.dist-info/entry_points.txt,sha256=VvrKJ6Zw6M14z5ynvrzWY05fmyxgWrMm3Ti0r8eeCv0,62
1102
- qwak_core-0.4.266.dist-info/RECORD,,
1068
+ qwak_core-0.4.268.dist-info/METADATA,sha256=Yk4S6kKpUj4cfRqMfxSytR1RxZDVeMwgxuuf0mYTwZA,2549
1069
+ qwak_core-0.4.268.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
1070
+ qwak_core-0.4.268.dist-info/RECORD,,
File without changes
@@ -1,315 +0,0 @@
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._log_config import logger
11
- from frogml_storage._utils import join_url
12
- from frogml_storage.constants import CHECKSUM_SHA2_HEADER
13
- from frogml_storage.entity_manifest import Checksums, EntityManifest
14
- from frogml_storage.frogml_entity_type_info import FrogMLEntityTypeInfo
15
- from frogml_storage.http.http_client import HTTPClient
16
- from frogml_storage.models._download_context import DownloadContext
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)
@@ -1,22 +0,0 @@
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
- ]
@@ -1,45 +0,0 @@
1
- import logging.config
2
- import os
3
- import sys
4
-
5
- log_level = (
6
- "DEBUG"
7
- if os.getenv("JFML_DEBUG", "false").casefold() == "true".casefold()
8
- else "INFO"
9
- )
10
- log_file = f'{os.path.expanduser("~")}/.frogml/frogml-log-history.log'
11
- os.makedirs(os.path.dirname(log_file), exist_ok=True)
12
-
13
- DEFAULT_LOGGING = {
14
- "version": 1,
15
- "formatters": {
16
- "standard": {
17
- "format": "%(asctime)s - %(levelname)s - %(name)s.%(module)s.%(funcName)s:%(lineno)d - %(message)s"
18
- },
19
- },
20
- "handlers": {
21
- "console": {
22
- "class": "logging.StreamHandler",
23
- "formatter": "standard",
24
- "stream": sys.stdout,
25
- },
26
- "file": {
27
- "class": "logging.FileHandler",
28
- "formatter": "standard",
29
- "filename": log_file,
30
- },
31
- },
32
- "loggers": {
33
- __name__: {
34
- "level": log_level,
35
- "handlers": ["console", "file"],
36
- "propagate": False,
37
- },
38
- },
39
- }
40
-
41
- if os.getenv("IS_LOGGER_SHADED") is not None:
42
- logger = logging.getLogger(__name__)
43
- else:
44
- logging.config.dictConfig(DEFAULT_LOGGING)
45
- logger = logging.getLogger(__name__)
@@ -1,15 +0,0 @@
1
- import hashlib
2
-
3
-
4
- def calculate_sha2(path: str) -> str:
5
- sha256 = hashlib.sha256()
6
- with open(path, "rb") as f:
7
- while chunk := f.read(8192):
8
- sha256.update(chunk)
9
- return sha256.hexdigest()
10
-
11
-
12
- def calc_content_sha2(content: str) -> str:
13
- sha256 = hashlib.sha256()
14
- sha256.update(content.encode("utf-8"))
15
- return sha256.hexdigest()
frogml_storage/_utils.py DELETED
@@ -1,69 +0,0 @@
1
- from typing import Optional
2
- from urllib.parse import urlparse
3
-
4
- from requests.auth import AuthBase
5
-
6
- from frogml_storage.frogml_entity_type_info import FrogMLEntityTypeInfo
7
-
8
-
9
- class BearerAuth(AuthBase):
10
- def __init__(self, token):
11
- self.token = token
12
-
13
- def __call__(self, r):
14
- r.headers["Authorization"] = f"Bearer {self.token}"
15
- return r
16
-
17
- def __eq__(self, other):
18
- if not isinstance(other, BearerAuth):
19
- return False
20
- return self.token == other.token
21
-
22
-
23
- class EmptyAuth(AuthBase):
24
- def __call__(self, r):
25
- return r
26
-
27
-
28
- def join_url(base_uri: str, *parts: Optional[str]) -> str:
29
- if base_uri.endswith("/"):
30
- base_uri = base_uri[:-1]
31
-
32
- cleaned_parts = [
33
- part.strip("/") for part in parts if part is not None and part.strip("/")
34
- ]
35
- return f"{base_uri}/{'/'.join(cleaned_parts)}"
36
-
37
-
38
- def assemble_artifact_url(uri: Optional[str]) -> str:
39
- if uri is None:
40
- raise Exception("Artifactory URI is required")
41
-
42
- parsed_url = urlparse(uri)
43
- if parsed_url.scheme not in ["http", "https"]:
44
- raise Exception(
45
- f"Not a valid Artifactory URI: {uri}. "
46
- f"Artifactory URI example: `https://frogger.jfrog.io/artifactory/ml-local`"
47
- )
48
-
49
- return f"{parsed_url.scheme}://{parsed_url.netloc}/artifactory"
50
-
51
-
52
- # The following method affect e2e tests.
53
- def build_download_success_log(
54
- entity_type_info: FrogMLEntityTypeInfo, entity_name: str, version: str
55
- ) -> str:
56
- return (
57
- f'{entity_type_info.entity_type.capitalize()}: "{entity_name}", version: "{version}"'
58
- f" has been downloaded successfully"
59
- )
60
-
61
-
62
- # The following method affect e2e tests.
63
- def build_upload_success_log(
64
- entity_type_info: FrogMLEntityTypeInfo, entity_name: str, version: str
65
- ) -> str:
66
- return (
67
- f'{entity_type_info.entity_type.capitalize()}: "{entity_name}", version: "{version}"'
68
- f" has been uploaded successfully"
69
- )