qontract-reconcile 0.10.2.dev57__py3-none-any.whl → 0.10.2.dev58__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qontract-reconcile
3
- Version: 0.10.2.dev57
3
+ Version: 0.10.2.dev58
4
4
  Summary: Collection of tools to reconcile services with their desired state as defined in the app-interface DB.
5
5
  Project-URL: homepage, https://github.com/app-sre/qontract-reconcile
6
6
  Project-URL: repository, https://github.com/app-sre/qontract-reconcile
@@ -15,7 +15,7 @@ reconcile/closedbox_endpoint_monitoring_base.py,sha256=MvGKBqH9PdHWdMjhLuptze-dk
15
15
  reconcile/cluster_deployment_mapper.py,sha256=5gumAaRCcFXsabUJ1dnuUy9WrP_FEEM5JnOnE8ch9sE,2326
16
16
  reconcile/dashdotdb_base.py,sha256=83ZWIf5JJk3P_D69y2TmXRcQr6ELJGlv10OM0h7fJVs,4767
17
17
  reconcile/dashdotdb_cso.py,sha256=QRK0YfIqO4rehs8btD3l_GXIO2ZIycTQEKEthBdB0xA,3639
18
- reconcile/dashdotdb_dora.py,sha256=ZOIIyxuwSrv33L7FZAHiKHPWDNnA1FybaUf37Lsk07A,17736
18
+ reconcile/dashdotdb_dora.py,sha256=olQnGp4JYpoh1lQEf9kHc2y3bMaAIUXEB6eFohWH8Io,17859
19
19
  reconcile/dashdotdb_dvo.py,sha256=lCkZ0iby6HrNQb-3kYb6xrt8wCjVUZYxKzz9SiStfHU,8946
20
20
  reconcile/dashdotdb_slo.py,sha256=PU1GzT6Uy07IIO3Y62cFfRfaBJYUPrMkMp71Up80_bg,8334
21
21
  reconcile/database_access_manager.py,sha256=Z3aAmw2LsmMIIor-bOGzziVZdVNC82Gmw8oHBUAFf-8,25577
@@ -30,7 +30,7 @@ reconcile/github_repo_permissions_validator.py,sha256=dcbXdUx6imjNchjp3pg9-z1i7l
30
30
  reconcile/github_users.py,sha256=nfTq78QRONIfDVj-5O3bD6psllJjzWFnog-EJ1WqFPU,3672
31
31
  reconcile/github_validator.py,sha256=cVTVxJIGR4a1Jz8wrdXEAb_CMpXUzvykVmUURX4cook,917
32
32
  reconcile/gitlab_fork_compliance.py,sha256=c7UfqSAsW04c1bWJmXXaQDwtUcG4Kb6nCJAyRU2uAuw,4449
33
- reconcile/gitlab_housekeeping.py,sha256=i4hNZViV2yfUTDNsYhVSLik211q8_c4nbTK8ilmpufc,25313
33
+ reconcile/gitlab_housekeeping.py,sha256=Gy1mhn33xGp9IyQFqs4VrBmhwJBD6x90XITDR_pU4MU,25416
34
34
  reconcile/gitlab_labeler.py,sha256=4xJHmVX155fclrHqkR926sL1GH6RTN5XfZ8PnqNXbRA,4534
35
35
  reconcile/gitlab_members.py,sha256=MUIgYDLeJx2-_vMypyq2Pa17cpKdXATYhtVACS2ghpQ,8297
36
36
  reconcile/gitlab_mr_sqs_consumer.py,sha256=O46mdziPgGOndbU-0_UJKJVUaiEoVzJPEgKm4_UvYoI,2571
@@ -115,11 +115,11 @@ reconcile/terraform_cloudflare_resources.py,sha256=pq8Ieo5NmB-dYQ9X2F0s6iEoINMzh
115
115
  reconcile/terraform_cloudflare_users.py,sha256=-dCJZqpZH1vD_Gri9QAZbqpKWiN-tsSWllIp0JuZ_-M,13938
116
116
  reconcile/terraform_repo.py,sha256=xHk0-7wgZchh_eqI-7oX4br9pYkKvYa6m7-8VPWqiZ4,15777
117
117
  reconcile/terraform_resources.py,sha256=iufjMJs_aSEvmh7Cg11beCxKmV8nrOLOpEtiTryPNx0,19470
118
- reconcile/terraform_tgw_attachments.py,sha256=09svJG9pAiwWp4aY0xRoQRV90T4ZNwHG3r8flI-ZS_s,18810
118
+ reconcile/terraform_tgw_attachments.py,sha256=-x7OV5fBmTh9t3N8f4t-AnvQozU1kQUxWKwVzk4GWWM,18838
119
119
  reconcile/terraform_users.py,sha256=rt62m9Yb0mkyhza07t_c6vlrFWF-OeJGJ9oGaCVK72M,10234
120
- reconcile/terraform_vpc_peerings.py,sha256=pDJkUFnAhEz2cNKEUY4WAJYK-09YPrNSSpt8BnIW3hc,27651
120
+ reconcile/terraform_vpc_peerings.py,sha256=0N7uxG6Afe2oNrUyw-apjV-fX2P9TbI5A3xjXO_83eA,27658
121
121
  reconcile/vault_replication.py,sha256=YD70ROZXC1dYnUcS3q1WgnAoIDSdoZVdZsUGc5fanNU,17556
122
- reconcile/vpc_peerings_validator.py,sha256=-upvNg3ggKCxcJ4kqZcqJVsiltlhQ8MyyLZiWX8eYmE,7068
122
+ reconcile/vpc_peerings_validator.py,sha256=aESqrhm1tpkc2iqSL1UV5to_HjNgjRSffD0crb_q49g,7113
123
123
  reconcile/aus/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
124
  reconcile/aus/advanced_upgrade_service.py,sha256=NF3UQ02MdUpVPup50EqnTbTn3dRHGoXoSfFLZxOjr8Q,23744
125
125
  reconcile/aus/aus_label_source.py,sha256=2Rktyvs7ZvCwsRwmbGUhddycTBTq0jHq8wpBaiDHAMA,4165
@@ -149,7 +149,7 @@ reconcile/aws_account_manager/utils.py,sha256=iYPPOtbZ7FiKkz9v5f1YXRIHw5YFOtSavU
149
149
  reconcile/aws_ami_cleanup/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
150
  reconcile/aws_ami_cleanup/integration.py,sha256=KG7g9NpbKmoaveDD3oi9SinqUE29NaM-4lGo-6YuHlM,9302
151
151
  reconcile/aws_cloudwatch_log_retention/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
152
- reconcile/aws_cloudwatch_log_retention/integration.py,sha256=p3ERapK2aJXTQ76tyGDORUn0r-dNtggNflcfP0Hi7RQ,7773
152
+ reconcile/aws_cloudwatch_log_retention/integration.py,sha256=qVggTjGwP_6xTCXo2o3brSPtjwArNhZiGPy8YiBrCMM,7779
153
153
  reconcile/aws_saml_idp/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
154
  reconcile/aws_saml_idp/integration.py,sha256=Z2JtUx2YIbkn0KVrVa2CoAErPB8vTykOOkWD_ZPoB94,6511
155
155
  reconcile/aws_saml_roles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -564,32 +564,31 @@ reconcile/typed_queries/terraform_tgw_attachments/aws_accounts.py,sha256=2idUmpa
564
564
  reconcile/unleash_feature_toggles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
565
565
  reconcile/unleash_feature_toggles/integration.py,sha256=nx7BhtzCsTfPbOp60vI5MkNwuj8QrPay52msjADLbfI,10995
566
566
  reconcile/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
567
- reconcile/utils/aggregated_list.py,sha256=km0xadW0jO4G_CqZPsXmoBURQ8c90FaTu5x4X1K1cZs,3357
567
+ reconcile/utils/aggregated_list.py,sha256=_9UeaS1TWbJsGIESvXlzzK-omPI2lMMcCsoqc9LBclc,4022
568
568
  reconcile/utils/amtool.py,sha256=3dHViQ_esKPaMEpiOVVSnxTaySM8ELpGVVvppqqPvUY,2289
569
- reconcile/utils/aws_api.py,sha256=cyX3NYe035CyX2ZyVmjWl_jcFCAm-SA_T34NUt9brW0,67901
570
- reconcile/utils/aws_helper.py,sha256=IOfPpNB0Hh73oo8pWozeril7YH_EJRCdYhahFp-esns,2871
569
+ reconcile/utils/aws_api.py,sha256=n2HMUPOnztcDt7c8GvGpT0qrpwArXke0hSCHQ1dSk6w,79439
570
+ reconcile/utils/aws_helper.py,sha256=8PvDR17ntAGX3bBzlTIxDuENl2rkK-RECsNYKm2_DZw,2955
571
571
  reconcile/utils/batches.py,sha256=TtEm64a8lWhFuNbUVpFEmXVdU2Q0sTBrP_I0Cjbgh7g,320
572
- reconcile/utils/binary.py,sha256=V6fW70wGFMCaYaLjJ0A-C_U3p7THTcAmv4wN_KP__KU,2207
573
- reconcile/utils/config.py,sha256=kwaAaNBQ9z-fsDJu2-WZFgTnL6HKd3FPjiu0mbriHkg,1004
572
+ reconcile/utils/binary.py,sha256=lSIevhilMeoGMePPHD7A-pxe45LVpBT0LksecYbM-EA,2477
573
+ reconcile/utils/config.py,sha256=UhF9U6A0TLmoPTGwhOclUKcSEChu5_Gqwm8VTM1X0ow,1156
574
574
  reconcile/utils/constants.py,sha256=pOUd97bqZdsAu5RWJ8NUs9cwCY7K9y0eW9VVeJ4fZIU,138
575
- reconcile/utils/data_structures.py,sha256=VyKfnlNJTiRvZKNpfgIrjESQ2YgmEpWuPQXT14WA1vI,311
576
575
  reconcile/utils/deadmanssnitch_api.py,sha256=0uajXxRNUEyF8CPTYPFNV4G-_3KB_hDF9L8OtTy2zCk,2476
577
- reconcile/utils/defer.py,sha256=SniUsbgOEs9Pa8JkecLu0F94O63yQPByKXaElDYe0FI,377
576
+ reconcile/utils/defer.py,sha256=LYTqcvyifCg71_C2i7pbxdqd8-NrXrUhcvuLFy1bQN0,476
578
577
  reconcile/utils/differ.py,sha256=WFW8GoFPMEw9TD1irPpIan6aILF-kjeWWsKLuvqnv64,7554
579
578
  reconcile/utils/disabled_integrations.py,sha256=z1ZGUOKjZ99R-YZ68w1xnLQ_wUccI27NcmdzfK9TARs,1077
580
579
  reconcile/utils/dnsutils.py,sha256=Zit4U-DAt_6AD4NVvic3I7EO5DdjNEeu8Qn_x84i-44,258
581
580
  reconcile/utils/early_exit_cache.py,sha256=9zj4ksXCq2qK2oGO0zW9aZ5tkjC5sRCms0ismZOmBv4,8725
582
- reconcile/utils/elasticsearch_exceptions.py,sha256=zMuP0B8Y3U0u64ZrmAyzw2RWALPs9uS7IzKcF7Prx0U,501
583
- reconcile/utils/environ.py,sha256=psk07d2xyjbUzjOCDdNWgavaNolL_t2sq3sn2gFfY9k,507
584
- reconcile/utils/exceptions.py,sha256=DwfnWUpVOotpP79RWZ2pycmG6nKCL00RBIeZLYkQPW4,635
581
+ reconcile/utils/elasticsearch_exceptions.py,sha256=4lwms6yjDYJzhD_xXgb96Juax5DHp_LXEUaME6t59A4,578
582
+ reconcile/utils/environ.py,sha256=j43kXnqE9uVg__N-83HpcWUqv1Q8ge8ykTL3OnVs-yc,653
583
+ reconcile/utils/exceptions.py,sha256=2cKJD01d_uZM_j0CTcvDoo-WDisZJVYaeY2KUbfUHCc,686
585
584
  reconcile/utils/expiration.py,sha256=3JaXH4psksR7z262k7FmdyREjCLqm66OpVMEbcfdWRo,1213
586
585
  reconcile/utils/extended_early_exit.py,sha256=QSktrmfw37zSRMNk930tDbQsVeKxaPPPD43e79DGwZw,6754
587
586
  reconcile/utils/external_resource_spec.py,sha256=qeupz4t4trd2uPjlHjf_AFA9Y-EKrMnaXi72tAuCxig,7177
588
587
  reconcile/utils/external_resources.py,sha256=YzTb0xAcNdmKO326mGQy7BmST56CZcdru4lX7ai_7kw,7579
589
588
  reconcile/utils/filtering.py,sha256=S4PbMHuFr3ED0P2Q_ea5CAaB7FimI62B-F5YTaKrphA,402
590
- reconcile/utils/git.py,sha256=wzVIYAeKlMGW538U1mkJWUI6h_mFRUY4lawh2AR8hw4,2345
589
+ reconcile/utils/git.py,sha256=o4p9m8jlzCJDcutl2HErvGLhL6sZ1NB4Aw3zGcQIzso,2427
591
590
  reconcile/utils/github_api.py,sha256=y3fxty7FKvfhdzfHgGSaIstL6A_Y2loUcMiyIK5TMDg,2750
592
- reconcile/utils/gitlab_api.py,sha256=N1QdgF6Jdhg_nF03vtfouvqXP7MVfkPRnq7Q3z169kM,28662
591
+ reconcile/utils/gitlab_api.py,sha256=WMTNXtldW0L9qhC0rfd3ssGeHu9khmzU1RBG6lZHpQM,29723
593
592
  reconcile/utils/gpg.py,sha256=EKG7_fdMv8BMlV5yUdPiqoTx-KrzmVSEAl2sLkaKwWI,1123
594
593
  reconcile/utils/gql.py,sha256=C0thIm_k9MBldfqwHzyqtYZk9sIvMdm9IbbnXLGwjD8,14158
595
594
  reconcile/utils/grouping.py,sha256=vr9SFHZ7bqmHYrvYcEZt-Er3-yQYfAAdq5sHLZVmXPY,456
@@ -616,7 +615,7 @@ reconcile/utils/oc_map.py,sha256=ougQ-Wlsa8ymoE_lPQ7g2LlpsUOsHVeRCLYW_6fjeWU,897
616
615
  reconcile/utils/ocm_base_client.py,sha256=t5kxhklEqOpenXPkXiwQIk8d3D7hIUndBm5qGusS0bc,6681
617
616
  reconcile/utils/openshift_resource.py,sha256=DI-e04f4NqEUFJ_9HzjY-QMhFt7o2XVauM09mzMC5Vs,24716
618
617
  reconcile/utils/openssl.py,sha256=QVvhzhpChq_4Daf_5wE1qeZJr4thg3DDjJPn4bOPD4E,365
619
- reconcile/utils/output.py,sha256=dj3tE_sj3x8ssnAV6hCGmsRI9ttqUUFsIH1r7RujNA8,2038
618
+ reconcile/utils/output.py,sha256=xh2Not-Xm97KeRx_J5nc2PP5tDwpDLZBeCrWI0S-al4,2034
620
619
  reconcile/utils/pagerduty_api.py,sha256=_24i9S_4X7nlvHb-7clXRE0p1BG4ODjOzKxWO-F9WgI,7627
621
620
  reconcile/utils/parse_dhms_duration.py,sha256=TONpLnec5gHeF7k815YNJpQyDjXhkxZIcv9s8ffbTSY,1840
622
621
  reconcile/utils/password_validator.py,sha256=XwuWg-8CPlcuG7dl_oQ1G1h2gSVSnfMym_VkuprpWVg,2183
@@ -643,7 +642,7 @@ reconcile/utils/three_way_diff_strategy.py,sha256=oQcHXd9LVhirJfoaOBoHUYuZVGfyL2
643
642
  reconcile/utils/throughput.py,sha256=iP4UWAe2LVhDo69mPPmgo9nQ7RxHD6_GS8MZe-aSiuM,344
644
643
  reconcile/utils/vault.py,sha256=aSA8l9cJlPUHpChFGl27nSY-Mpq9FMjBo7Dcgb1BVfM,15036
645
644
  reconcile/utils/vaultsecretref.py,sha256=0KUSzuvTRxPyKY919TO3-B_eYg4_76fzKvMF8j5s1G0,911
646
- reconcile/utils/vcs.py,sha256=4_f08Rixb1NcLdWI0vh8e-B0Cb4ckx1bd0TkLqCmvR4,8674
645
+ reconcile/utils/vcs.py,sha256=fcNwWlhrknxg3QUs8BZ23wxTe3ISS7GFZxwFUZZG-wg,8718
647
646
  reconcile/utils/acs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
648
647
  reconcile/utils/acs/base.py,sha256=4UsDrCpAOuddL3PKNuIQYoJP1BtZQNNB8_KEX0lXneg,2532
649
648
  reconcile/utils/acs/notifiers.py,sha256=nHVw9C_2-K4nv5zq26jlOTSw1roY6TKlovi1sOfpxpI,4998
@@ -691,7 +690,7 @@ reconcile/utils/mr/__init__.py,sha256=hcfHDIIIsJT4C0BnzDnyeZEfZdamrqHzMLcBzIT1ib
691
690
  reconcile/utils/mr/app_interface_reporter.py,sha256=6Kpg93V9FvcOke9Jimkva359MQ-ZyBIkUpf8QIA6-to,1793
692
691
  reconcile/utils/mr/app_sre_tekton_access_report.py,sha256=i7JeTkyaq0HyVGbAFKCNbiLy3NVE05IXqJzwArsGre4,1513
693
692
  reconcile/utils/mr/aws_access.py,sha256=9MMpYD24j2lLr_hLeMSh_OsJ07waalrlNpz-JlOsKAM,2575
694
- reconcile/utils/mr/base.py,sha256=O8BWr6dibeQ22FDE9y56r6DK3UnC-5IhRXT7IWGrnxk,8069
693
+ reconcile/utils/mr/base.py,sha256=pHRmyxJzlBy9ldjYKOdHg9-9KbsK8bdRScntKZa5Tew,8130
695
694
  reconcile/utils/mr/clusters_updates.py,sha256=pcusPAwRUkvyk_-bixsRNTzSvpTLypJ1kflq5UEVgcM,2271
696
695
  reconcile/utils/mr/glitchtip_access_reporter.py,sha256=cTkOtzdgeKPaqro0VS2hDuAClQiN4nZATh-mplQC-AI,1369
697
696
  reconcile/utils/mr/labels.py,sha256=9QRTRjZAtq45zELd9SwavaraczMjwjn5no3RK1YxFTg,825
@@ -699,7 +698,7 @@ reconcile/utils/mr/notificator.py,sha256=f8IcGQ1_iBsXJFnhPsWQ7UE3NfigaOrXcVieJPp
699
698
  reconcile/utils/mr/ocm_update_recommended_version.py,sha256=p_aVP0TGrlKk9WBwgQnYWqUDsED_Hg6G5Bqj0UvtRwA,1536
700
699
  reconcile/utils/mr/ocm_upgrade_scheduler_org_updates.py,sha256=5EncHGr4QRnZgHedRfCwMYZ9CaijYzHGj7-M6lhtQRo,3004
701
700
  reconcile/utils/mr/promote_qontract.py,sha256=wgvX2CBlcZaihKJSXJ0zcEK8NGaEP2_DUQDz0STzGes,7158
702
- reconcile/utils/mr/update_access_report_base.py,sha256=0vhF-eZTIjl7keBAOb2bO7LrlRAiticuUGh5EmI5MWc,4357
701
+ reconcile/utils/mr/update_access_report_base.py,sha256=4Grohtp44v1sSHZyIAYOwClxH8SLj_nnOrCcHPKp9p0,4361
703
702
  reconcile/utils/mr/user_maintenance.py,sha256=ZlR1Id_r2BUXsoerJW-0Ioh5bcbwlnQxBBhSs-ri9Dk,5099
704
703
  reconcile/utils/ocm/__init__.py,sha256=Y-bp8GomMpyCo0tFW6kJ78-ZG1UIupYRtBzbMWU0kwM,798
705
704
  reconcile/utils/ocm/addons.py,sha256=_LDdJ-gapM3s5exKlIUt-MlXZTAUoHezbYBU0QmvfWQ,7335
@@ -746,18 +745,18 @@ reconcile/utils/unleash/client.py,sha256=YrJnauxjcy1ml7W2AHg7dzIH_fVK_GugoRu7IFm
746
745
  reconcile/utils/unleash/server.py,sha256=907gDh9Ee8UxLqusnfpzE-7LUnttB38D4xhVJ0vMf_M,4439
747
746
  tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
748
747
  tools/app_interface_metrics_exporter.py,sha256=f1qwTmQfEcs98uBVRyBa0k7GQXdiSwd7w1hDVjhdGcQ,2303
749
- tools/app_interface_reporter.py,sha256=0_oq1-mL0UOh1x5G8CoKaEVJqK-XTKE7PX7IbRTovBc,17224
748
+ tools/app_interface_reporter.py,sha256=gR2EgHmgSIxzK5xxDW1SduFU6OkPaf2LlAQjhV3NYIg,17623
750
749
  tools/app_sre_tekton_access_reporter.py,sha256=o9prLUgQpwO3msRWc2as1xT1y9OB3znkpgvLr0Ys8_M,3146
751
750
  tools/app_sre_tekton_access_revalidation.py,sha256=66nHEaY-bIqxIhpcmwN8AvQZu6ZXenfkg4Fut0pVZRM,2726
752
751
  tools/glitchtip_access_reporter.py,sha256=o01A6b88t3Wie6tj_tJWWVo2J01LxQ_a9giGm4UzEaU,2901
753
752
  tools/glitchtip_access_revalidation.py,sha256=8kbBJk04mkq28kWoRDDkfCGIF3GRg3pJrFAh1sW0dbk,2821
754
- tools/qontract_cli.py,sha256=85CWZ6cxprlZ57408tqhCzpj_jvLhiJgbPlFwI-V1Jo,152244
753
+ tools/qontract_cli.py,sha256=DCgIaGxZlYG5TVWUifAQGfp81aop9SLu0ezVVg4x2NM,148792
755
754
  tools/sd_app_sre_alert_report.py,sha256=jQpJdXVID68bSNtJNOGDh0-ei1CfEUS4Itr4MAaBNFA,5062
756
755
  tools/template_validation.py,sha256=qpKYaTgk0GOPGa2Ct5_5sKdwIHtCAKIBGzsMPuJU5fw,3371
757
756
  tools/cli_commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
758
757
  tools/cli_commands/container_images_report.py,sha256=8fG9XU-eEhJ7hKCdQzBcdPpvIJR-8WGkHOgFEulpfYQ,5213
759
758
  tools/cli_commands/erv2.py,sha256=VxUlNXllo947UwmtvS-42IeI9x_t_X3MHrrSI3K_GRo,23274
760
- tools/cli_commands/gpg_encrypt.py,sha256=JWwds_Qg7KhSJMIGUh8TfI5-Jf17iUtmaEi4kWJxfVE,4907
759
+ tools/cli_commands/gpg_encrypt.py,sha256=NhzwN49UN7P5_FJgTUN5A4BIwNbFokIE4lwDax2iP5k,4891
761
760
  tools/cli_commands/systems_and_tools.py,sha256=EMHOF1AtUDaoSk0bbjl6oUKYAz4rTZjIBaF-6E6GspM,16816
762
761
  tools/cli_commands/cost_report/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
763
762
  tools/cli_commands/cost_report/aws.py,sha256=JtwDfhaYLfa4Uz1LR6OfSBh_3nBlb90kQq6i3MV_ims,4563
@@ -778,7 +777,7 @@ tools/saas_promotion_state/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
778
777
  tools/saas_promotion_state/saas_promotion_state.py,sha256=UfwwRLS5Ya4_Nh1w5n1dvoYtchQvYE9yj1VANt2IKqI,3925
779
778
  tools/sre_checkpoints/__init__.py,sha256=CDaDaywJnmRCLyl_NCcvxi-Zc0hTi_3OdwKiFOyS39I,145
780
779
  tools/sre_checkpoints/util.py,sha256=zEDbGr18ZeHNQwW8pUsr2JRjuXIPz--WAGJxZo9sv_Y,894
781
- qontract_reconcile-0.10.2.dev57.dist-info/METADATA,sha256=2qGhxgrqphXjBqRFzFHynTsQErFrGX6JcXRGzKPRwc4,24665
782
- qontract_reconcile-0.10.2.dev57.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
783
- qontract_reconcile-0.10.2.dev57.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
784
- qontract_reconcile-0.10.2.dev57.dist-info/RECORD,,
780
+ qontract_reconcile-0.10.2.dev58.dist-info/METADATA,sha256=rQJYMzaII94AgfVybASnf6jWezt2vOg4-p1vRIuKKyc,24665
781
+ qontract_reconcile-0.10.2.dev58.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
782
+ qontract_reconcile-0.10.2.dev58.dist-info/entry_points.txt,sha256=5i9l54La3vQrDLAdwDKQWC0iG4sV9RRfOb1BpvzOWLc,698
783
+ qontract_reconcile-0.10.2.dev58.dist-info/RECORD,,
@@ -3,10 +3,7 @@ import re
3
3
  import typing
4
4
  from collections import defaultdict
5
5
  from collections.abc import Iterable
6
- from datetime import (
7
- datetime,
8
- timedelta,
9
- )
6
+ from datetime import UTC, datetime, timedelta
10
7
  from enum import Enum
11
8
  from typing import TYPE_CHECKING
12
9
 
@@ -18,9 +15,9 @@ from reconcile.queries import get_aws_accounts
18
15
  from reconcile.utils.aws_api import AWSApi
19
16
 
20
17
  if TYPE_CHECKING:
21
- from mypy_boto3_logs import CloudWatchLogsClient # type: ignore
18
+ from mypy_boto3_logs.type_defs import LogGroupTypeDef
22
19
  else:
23
- CloudWatchLogsClient = object
20
+ LogGroupTypeDef = object
24
21
 
25
22
  QONTRACT_INTEGRATION = "aws_cloudwatch_log_retention"
26
23
  MANAGED_BY_INTEGRATION_KEY = "managed_by_integration"
@@ -69,21 +66,17 @@ def create_awsapi_client(accounts: list, thread_pool_size: int) -> AWSApi:
69
66
  return AWSApi(thread_pool_size, accounts, settings=settings, init_users=False)
70
67
 
71
68
 
72
- def is_empty(
73
- log_group: dict,
74
- ) -> bool:
69
+ def is_empty(log_group: LogGroupTypeDef) -> bool:
75
70
  return log_group["storedBytes"] == 0
76
71
 
77
72
 
78
73
  def is_longer_than_retention(
79
- log_group: dict,
74
+ log_group: LogGroupTypeDef,
80
75
  desired_retention_days: int,
81
76
  ) -> bool:
82
- return (
83
- datetime.fromtimestamp(log_group["creationTime"] / 1000)
84
- + timedelta(days=desired_retention_days)
85
- < datetime.utcnow()
86
- )
77
+ return datetime.fromtimestamp(log_group["creationTime"] / 1000, tz=UTC) + timedelta(
78
+ days=desired_retention_days
79
+ ) < datetime.now(tz=UTC)
87
80
 
88
81
 
89
82
  class TagStatus(Enum):
@@ -93,7 +86,7 @@ class TagStatus(Enum):
93
86
 
94
87
 
95
88
  def get_tag_status(
96
- log_group: dict,
89
+ log_group: LogGroupTypeDef,
97
90
  account_name: str,
98
91
  region: str,
99
92
  aws_api: AWSApi,
@@ -113,7 +106,7 @@ def get_tag_status(
113
106
 
114
107
  def _reconcile_log_group(
115
108
  dry_run: bool,
116
- aws_log_group: dict,
109
+ aws_log_group: LogGroupTypeDef,
117
110
  desired_cleanup_options: Iterable[AWSCloudwatchCleanupOption],
118
111
  account_name: str,
119
112
  region: str,
@@ -397,10 +397,11 @@ class DashdotdbDORA(DashdotdbBase):
397
397
  self, saastarget: SaasTarget, sha: str
398
398
  ) -> tuple[str | None, str | None]:
399
399
  try:
400
- saas_file_yaml = self.gl_app_interface_get_file(
401
- saastarget.path, ref=sha
402
- ).decode()
403
- saas_file = yaml.safe_load(saas_file_yaml)
400
+ saas_file_yaml = self.gl_app_interface_get_file(saastarget.path, ref=sha)
401
+ if not saas_file_yaml:
402
+ LOG.info(f"failed to fetch saas file {saastarget.path} at {sha}")
403
+ return (None, None)
404
+ saas_file = yaml.safe_load(saas_file_yaml.decode())
404
405
  except Exception as e:
405
406
  LOG.info(f"failed to decode saas file {saastarget.path} with error: {e}")
406
407
  return (None, None)
@@ -11,10 +11,11 @@ from datetime import (
11
11
  timedelta,
12
12
  )
13
13
  from operator import itemgetter
14
- from typing import Any
14
+ from typing import Any, cast
15
15
 
16
16
  import gitlab
17
17
  from gitlab.v4.objects import (
18
+ ProjectCommit,
18
19
  ProjectIssue,
19
20
  ProjectMergeRequest,
20
21
  )
@@ -335,12 +336,15 @@ def is_good_to_merge(labels):
335
336
 
336
337
  def is_rebased(mr, gl: GitLabApi) -> bool:
337
338
  target_branch = mr.target_branch
338
- head = gl.project.commits.list(
339
- ref_name=target_branch,
340
- per_page=1,
341
- page=1,
339
+ head = cast(
340
+ list[ProjectCommit],
341
+ gl.project.commits.list(
342
+ ref_name=target_branch,
343
+ per_page=1,
344
+ page=1,
345
+ ),
342
346
  )[0].id
343
- result = gl.project.repository_compare(mr.sha, head)
347
+ result = cast(dict, gl.project.repository_compare(mr.sha, head))
344
348
  return len(result["commits"]) == 0
345
349
 
346
350
 
@@ -195,9 +195,9 @@ def _build_desired_state_tgw_connection(
195
195
  cluster_region,
196
196
  cluster_cidr_block,
197
197
  tags=peer_connection.tags or {},
198
- route_tables=peer_connection.manage_routes,
199
- security_groups=peer_connection.manage_security_groups,
200
- route53_associations=peer_connection.manage_route53_associations,
198
+ route_tables=bool(peer_connection.manage_routes),
199
+ security_groups=bool(peer_connection.manage_security_groups),
200
+ route53_associations=bool(peer_connection.manage_route53_associations),
201
201
  )
202
202
  for tgw in account_tgws:
203
203
  connection_name = (
@@ -268,13 +268,13 @@ def _build_accepter(
268
268
  awsapi: AWSApi,
269
269
  private_hcp: bool = False,
270
270
  ) -> Accepter:
271
- allow_hcp_private_api_access = (
271
+ allow_hcp_private_api_access = bool(
272
272
  private_hcp and peer_connection.allow_private_hcp_api_access
273
273
  )
274
274
  (vpc_id, route_table_ids, subnets_id_az, api_security_group_id) = (
275
275
  awsapi.get_cluster_vpc_details(
276
276
  account.dict(by_alias=True),
277
- route_tables=peer_connection.manage_routes,
277
+ route_tables=bool(peer_connection.manage_routes),
278
278
  subnets=True,
279
279
  hcp_vpc_endpoint_sg=allow_hcp_private_api_access,
280
280
  )
@@ -198,7 +198,7 @@ def build_desired_state_single_cluster(
198
198
  f"{peer_connection_name}"
199
199
  )
200
200
 
201
- accepter_manage_routes = peer_info.get("manageRoutes")
201
+ accepter_manage_routes = peer_info.get("manageRoutes", False)
202
202
 
203
203
  infra_account_name, req_aws, acc_aws = aws_assume_roles_for_cluster_vpc_peering(
204
204
  peer_connection, cluster_info, peer_info, peer_cluster, ocm
@@ -1,17 +1,27 @@
1
1
  import json
2
2
  import logging
3
+ from collections.abc import Callable, KeysView
4
+ from typing import Any, TypedDict
5
+
6
+ Action = Callable[[Any, list[Any]], bool]
7
+ Cond = Callable[[Any], bool]
3
8
 
4
9
 
5
10
  class RunnerException(Exception):
6
11
  pass
7
12
 
8
13
 
14
+ class AggregatedItem(TypedDict):
15
+ params: Any
16
+ items: list[Any]
17
+
18
+
9
19
  class AggregatedList:
10
- def __init__(self):
11
- self._dict = {}
20
+ def __init__(self) -> None:
21
+ self._dict: dict[int, AggregatedItem] = {}
12
22
 
13
- def add(self, params, new_items):
14
- params_hash = self.hash_params(params)
23
+ def add(self, params: Any, new_items: Any | list[Any]) -> None:
24
+ params_hash: int = self.hash_params(params)
15
25
 
16
26
  if self._dict.get(params_hash) is None:
17
27
  self._dict[params_hash] = {"params": params, "items": []}
@@ -23,20 +33,20 @@ class AggregatedList:
23
33
  if item not in self._dict[params_hash]["items"]:
24
34
  self._dict[params_hash]["items"].append(item)
25
35
 
26
- def get(self, params):
36
+ def get(self, params: Any) -> AggregatedItem:
27
37
  return self._dict[self.hash_params(params)]
28
38
 
29
- def get_all_params_hash(self):
39
+ def get_all_params_hash(self) -> KeysView[int]:
30
40
  return self._dict.keys()
31
41
 
32
- def get_by_params_hash(self, params_hash):
42
+ def get_by_params_hash(self, params_hash: int) -> AggregatedItem:
33
43
  return self._dict[params_hash]
34
44
 
35
- def diff(self, right_state):
45
+ def diff(self, right_state: "AggregatedList") -> dict[str, list[AggregatedItem]]:
36
46
  left_params = self.get_all_params_hash()
37
47
  right_params = right_state.get_all_params_hash()
38
48
 
39
- diff = {
49
+ diff: dict[str, list[AggregatedItem]] = {
40
50
  "insert": [
41
51
  right_state.get_by_params_hash(p)
42
52
  for p in right_params
@@ -52,11 +62,11 @@ class AggregatedList:
52
62
  union = [p for p in left_params if p in right_params]
53
63
 
54
64
  for p in union:
55
- left = self.get_by_params_hash(p)
56
- right = right_state.get_by_params_hash(p)
65
+ left: AggregatedItem = self.get_by_params_hash(p)
66
+ right: AggregatedItem = right_state.get_by_params_hash(p)
57
67
 
58
- l_items = left["items"]
59
- r_items = right["items"]
68
+ l_items: list[Any] = left["items"]
69
+ r_items: list[Any] = right["items"]
60
70
 
61
71
  update_insert = [i for i in r_items if i not in l_items]
62
72
  update_delete = [i for i in l_items if i not in r_items]
@@ -75,28 +85,28 @@ class AggregatedList:
75
85
 
76
86
  return diff
77
87
 
78
- def dump(self):
88
+ def dump(self) -> list[AggregatedItem]:
79
89
  return list(self._dict.values())
80
90
 
81
- def toJSON(self):
91
+ def toJSON(self) -> str:
82
92
  return json.dumps(self.dump(), indent=4)
83
93
 
84
94
  @staticmethod
85
- def hash_params(params):
95
+ def hash_params(params: Any) -> int:
86
96
  return hash(json.dumps(params, sort_keys=True))
87
97
 
88
98
 
89
99
  class AggregatedDiffRunner:
90
- def __init__(self, diff):
100
+ def __init__(self, diff: dict[str, list[AggregatedItem]]) -> None:
91
101
  self.diff = diff
92
- self.actions = []
102
+ self.actions: list[tuple[str, Action, Cond | None]] = []
93
103
 
94
- def register(self, on, action, cond=None):
104
+ def register(self, on: str, action: Action, cond: Cond | None = None) -> None:
95
105
  if on not in self.diff:
96
106
  raise Exception(f"Unknown diff key for 'on': {on}")
97
107
  self.actions.append((on, action, cond))
98
108
 
99
- def run(self):
109
+ def run(self) -> bool:
100
110
  status = True
101
111
 
102
112
  for on, action, cond in self.actions: