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.
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.py +23 -3
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi +25 -0
- _qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py +33 -0
- qwak/__init__.py +1 -1
- qwak/clients/instance_template/client.py +4 -6
- qwak/clients/prompt_manager/model_descriptor_mapper.py +19 -21
- qwak/feature_store/_common/artifact_utils.py +3 -3
- qwak/feature_store/data_sources/base.py +4 -4
- qwak/feature_store/data_sources/batch/athena.py +3 -3
- qwak/feature_store/feature_sets/streaming.py +3 -3
- qwak/feature_store/feature_sets/streaming_backfill.py +1 -1
- qwak/feature_store/online/client.py +6 -6
- qwak/feature_store/sinks/streaming/factory.py +1 -1
- qwak/inner/build_logic/phases/phase_010_fetch_model/fetch_strategy_manager/strategy/git/git_strategy.py +3 -3
- qwak/llmops/provider/openai/provider.py +3 -3
- qwak/model/tools/adapters/output.py +1 -1
- qwak/model/utils/feature_utils.py +8 -12
- qwak/model_loggers/artifact_logger.py +7 -7
- qwak/tools/logger/logger.py +1 -1
- qwak_core-0.4.268.dist-info/METADATA +53 -0
- {qwak_core-0.4.266.dist-info → qwak_core-0.4.268.dist-info}/RECORD +22 -54
- frogml_storage/__init__.py +0 -0
- frogml_storage/_artifactory_api.py +0 -315
- frogml_storage/_environment.py +0 -22
- frogml_storage/_log_config.py +0 -45
- frogml_storage/_storage_utils.py +0 -15
- frogml_storage/_utils.py +0 -69
- frogml_storage/authentication/_authentication_utils.py +0 -259
- frogml_storage/authentication/models/_auth_config.py +0 -70
- frogml_storage/cli/_frogml_cli.py +0 -40
- frogml_storage/cli/_login_cli.py +0 -240
- frogml_storage/cli/commands/_login_command.py +0 -74
- frogml_storage/cli/models/_cli_login_arguments.py +0 -22
- frogml_storage/cli/utils/_cli_utils.py +0 -19
- frogml_storage/cli/utils/_login_checks_utility.py +0 -114
- frogml_storage/constants.py +0 -56
- frogml_storage/dataset_manifest.py +0 -13
- frogml_storage/entity_manifest.py +0 -93
- frogml_storage/exceptions/checksum_verification_error.py +0 -3
- frogml_storage/exceptions/validation_error.py +0 -4
- frogml_storage/frog_ml.py +0 -668
- frogml_storage/frogml_entity_type_info.py +0 -46
- frogml_storage/http/__init__.py +0 -0
- frogml_storage/http/http_client.py +0 -83
- frogml_storage/model_manifest.py +0 -60
- frogml_storage/models/_download_context.py +0 -54
- frogml_storage/models/frogml_dataset_version.py +0 -21
- frogml_storage/models/frogml_entity_version.py +0 -34
- frogml_storage/models/frogml_model_version.py +0 -21
- frogml_storage/serialization_metadata.py +0 -15
- frogml_storage/storage.py +0 -140
- frogml_storage/utils/_input_checks_utility.py +0 -104
- qwak_core-0.4.266.dist-info/METADATA +0 -419
- qwak_core-0.4.266.dist-info/entry_points.txt +0 -3
- {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=
|
193
|
-
_qwak_proto/qwak/builds/builds_orchestrator_service_pb2.pyi,sha256=
|
194
|
-
_qwak_proto/qwak/builds/builds_orchestrator_service_pb2_grpc.py,sha256=
|
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
|
-
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
788
|
-
qwak/feature_store/feature_sets/streaming_backfill.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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.
|
1100
|
-
qwak_core-0.4.
|
1101
|
-
qwak_core-0.4.
|
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,,
|
frogml_storage/__init__.py
DELETED
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)
|
frogml_storage/_environment.py
DELETED
@@ -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
|
-
]
|
frogml_storage/_log_config.py
DELETED
@@ -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__)
|
frogml_storage/_storage_utils.py
DELETED
@@ -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
|
-
)
|