paasta-tools 1.21.2__tar.gz → 1.21.3__tar.gz

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 (357) hide show
  1. paasta_tools-1.21.3/PKG-INFO +73 -0
  2. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/README.md +1 -1
  3. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/__init__.py +1 -1
  4. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/utils.py +5 -1
  5. paasta_tools-1.21.3/paasta_tools.egg-info/PKG-INFO +73 -0
  6. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools.egg-info/SOURCES.txt +52 -1
  7. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools.egg-info/entry_points.txt +0 -1
  8. paasta_tools-1.21.3/tests/test_adhoc_tools.py +66 -0
  9. paasta_tools-1.21.3/tests/test_apply_external_resources.py +159 -0
  10. paasta_tools-1.21.3/tests/test_async_utils.py +201 -0
  11. paasta_tools-1.21.3/tests/test_bounce_lib.py +524 -0
  12. paasta_tools-1.21.3/tests/test_check_flink_services_health.py +287 -0
  13. paasta_tools-1.21.3/tests/test_check_kubernetes_services_replication.py +151 -0
  14. paasta_tools-1.21.3/tests/test_check_oom_events.py +194 -0
  15. paasta_tools-1.21.3/tests/test_check_service_replication_tools.py +112 -0
  16. paasta_tools-1.21.3/tests/test_check_spark_jobs.py +208 -0
  17. paasta_tools-1.21.3/tests/test_cleanup_kubernetes_jobs.py +626 -0
  18. paasta_tools-1.21.3/tests/test_config_utils.py +385 -0
  19. paasta_tools-1.21.3/tests/test_delete_kubernetes_deployments.py +59 -0
  20. paasta_tools-1.21.3/tests/test_deployment_utils.py +75 -0
  21. paasta_tools-1.21.3/tests/test_docker_wrapper.py +489 -0
  22. paasta_tools-1.21.3/tests/test_drain_lib.py +203 -0
  23. paasta_tools-1.21.3/tests/test_eks_tools.py +79 -0
  24. paasta_tools-1.21.3/tests/test_envoy_tools.py +441 -0
  25. paasta_tools-1.21.3/tests/test_firewall.py +657 -0
  26. paasta_tools-1.21.3/tests/test_firewall_logging.py +149 -0
  27. paasta_tools-1.21.3/tests/test_firewall_update.py +294 -0
  28. paasta_tools-1.21.3/tests/test_flink_tools.py +246 -0
  29. paasta_tools-1.21.3/tests/test_flinkeks_tools.py +43 -0
  30. paasta_tools-1.21.3/tests/test_generate_authenticating_services.py +115 -0
  31. paasta_tools-1.21.3/tests/test_generate_deployments_for_service.py +240 -0
  32. paasta_tools-1.21.3/tests/test_generate_services_file.py +102 -0
  33. paasta_tools-1.21.3/tests/test_generate_services_yaml.py +58 -0
  34. paasta_tools-1.21.3/tests/test_hacheck.py +61 -0
  35. paasta_tools-1.21.3/tests/test_iptables.py +357 -0
  36. paasta_tools-1.21.3/tests/test_kubernetes_tools.py +5253 -0
  37. paasta_tools-1.21.3/tests/test_list_kubernetes_service_instances.py +61 -0
  38. paasta_tools-1.21.3/tests/test_long_running_service_tools.py +473 -0
  39. paasta_tools-1.21.3/tests/test_mac_address.py +82 -0
  40. paasta_tools-1.21.3/tests/test_mesos_tools.py +945 -0
  41. paasta_tools-1.21.3/tests/test_monitoring_tools.py +1217 -0
  42. paasta_tools-1.21.3/tests/test_nrtsearchserviceseks_tools.py +50 -0
  43. paasta_tools-1.21.3/tests/test_oom_logger.py +527 -0
  44. paasta_tools-1.21.3/tests/test_paasta_execute_docker_command.py +220 -0
  45. paasta_tools-1.21.3/tests/test_paasta_service_config_loader.py +336 -0
  46. paasta_tools-1.21.3/tests/test_puppet_service_tools.py +42 -0
  47. paasta_tools-1.21.3/tests/test_remote_git.py +146 -0
  48. paasta_tools-1.21.3/tests/test_secret_tools.py +342 -0
  49. paasta_tools-1.21.3/tests/test_setup_istio_mesh.py +97 -0
  50. paasta_tools-1.21.3/tests/test_setup_kubernetes_cr.py +501 -0
  51. paasta_tools-1.21.3/tests/test_setup_kubernetes_job.py +928 -0
  52. paasta_tools-1.21.3/tests/test_setup_prometheus_adapter_config.py +367 -0
  53. paasta_tools-1.21.3/tests/test_slack.py +39 -0
  54. paasta_tools-1.21.3/tests/test_smartstack_tools.py +437 -0
  55. paasta_tools-1.21.3/tests/test_spark_tools.py +181 -0
  56. paasta_tools-1.21.3/tests/test_task_processing.py +21 -0
  57. paasta_tools-1.21.3/tests/test_tron_tools.py +2212 -0
  58. paasta_tools-1.21.3/tests/test_utils.py +2969 -0
  59. paasta-tools-1.21.2/PKG-INFO +0 -12
  60. paasta-tools-1.21.2/paasta_tools.egg-info/PKG-INFO +0 -12
  61. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/LICENSE +0 -0
  62. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/MANIFEST.in +0 -0
  63. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/k8s_itests/__init__.py +0 -0
  64. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/k8s_itests/test_autoscaling.py +0 -0
  65. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/k8s_itests/utils.py +0 -0
  66. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/adhoc_tools.py +0 -0
  67. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/__init__.py +0 -0
  68. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/api.py +0 -0
  69. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/api_docs/swagger.json +0 -0
  70. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/client.py +0 -0
  71. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/settings.py +0 -0
  72. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/tweens/__init__.py +0 -0
  73. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/tweens/auth.py +0 -0
  74. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/tweens/profiling.py +0 -0
  75. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/tweens/request_logger.py +0 -0
  76. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/__init__.py +0 -0
  77. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/autoscaler.py +0 -0
  78. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/exception.py +0 -0
  79. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/flink.py +0 -0
  80. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/instance.py +0 -0
  81. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  82. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/remote_run.py +0 -0
  83. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/resources.py +0 -0
  84. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/service.py +0 -0
  85. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/api/views/version.py +0 -0
  86. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/apply_external_resources.py +0 -0
  87. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/async_utils.py +0 -0
  88. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/autoscaling/__init__.py +0 -0
  89. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  90. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/autoscaling/forecasting.py +0 -0
  91. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  92. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  93. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/autoscaling/utils.py +0 -0
  94. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/bounce_lib.py +0 -0
  95. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/broadcast_log_to_services.py +0 -0
  96. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cassandracluster_tools.py +0 -0
  97. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  98. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  99. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/check_flink_services_health.py +0 -0
  100. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/check_kubernetes_api.py +0 -0
  101. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/check_kubernetes_services_replication.py +0 -0
  102. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/check_oom_events.py +0 -0
  103. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/check_services_replication_tools.py +0 -0
  104. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/check_spark_jobs.py +0 -0
  105. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  106. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  107. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  108. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  109. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/__init__.py +0 -0
  110. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/authentication.py +0 -0
  111. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cli.py +0 -0
  112. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/__init__.py +0 -0
  113. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/autoscale.py +0 -0
  114. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/check.py +0 -0
  115. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/cook_image.py +0 -0
  116. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
  117. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/get_image_version.py +0 -0
  118. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
  119. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/info.py +0 -0
  120. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/itest.py +0 -0
  121. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/list.py +0 -0
  122. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  123. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  124. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
  125. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/local_run.py +0 -0
  126. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/logs.py +0 -0
  127. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
  128. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/mesh_status.py +0 -0
  129. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  130. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
  131. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/remote_run.py +0 -0
  132. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/rollback.py +0 -0
  133. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/secret.py +0 -0
  134. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/security_check.py +0 -0
  135. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/spark_run.py +0 -0
  136. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  137. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/status.py +0 -0
  138. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/validate.py +0 -0
  139. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
  140. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/fsm/__init__.py +0 -0
  141. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  142. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/fsm/template/README.md +0 -0
  143. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  144. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  145. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  146. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  147. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  148. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/fsm_cmd.py +0 -0
  149. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  150. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
  151. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
  152. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  153. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  154. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  155. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/eks_schema.json +0 -0
  156. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
  157. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  158. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/service_schema.json +0 -0
  159. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
  160. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/cli/schemas/tron_schema.json +0 -0
  161. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/clusterman.py +0 -0
  162. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/config_utils.py +0 -0
  163. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/__init__.py +0 -0
  164. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
  165. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  166. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/check_orphans.py +0 -0
  167. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  168. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  169. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  170. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
  171. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/habitat_fixer.py +0 -0
  172. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/ide_helper.py +0 -0
  173. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  174. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  175. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  176. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  177. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/mock_patch_checker.py +0 -0
  178. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
  179. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/render_template.py +0 -0
  180. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  181. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/service_shard_remove.py +0 -0
  182. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/service_shard_update.py +0 -0
  183. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/shared_ip_check.py +0 -0
  184. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  185. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  186. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/deployment_utils.py +0 -0
  187. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/docker_wrapper.py +0 -0
  188. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/docker_wrapper_imports.py +0 -0
  189. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/drain_lib.py +0 -0
  190. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/dump_locally_running_services.py +0 -0
  191. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/eks_tools.py +0 -0
  192. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/envoy_tools.py +0 -0
  193. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/firewall.py +0 -0
  194. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/firewall_logging.py +0 -0
  195. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/firewall_update.py +0 -0
  196. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/flink_tools.py +0 -0
  197. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/flinkeks_tools.py +0 -0
  198. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/frameworks/__init__.py +0 -0
  199. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
  200. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/frameworks/constraints.py +0 -0
  201. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/frameworks/native_scheduler.py +0 -0
  202. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/frameworks/native_service_config.py +0 -0
  203. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/frameworks/task_store.py +0 -0
  204. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/generate_all_deployments +0 -0
  205. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/generate_authenticating_services.py +0 -0
  206. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/generate_deployments_for_service.py +0 -0
  207. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/generate_services_file.py +0 -0
  208. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/generate_services_yaml.py +0 -0
  209. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/hacheck.py +0 -0
  210. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/instance/__init__.py +0 -0
  211. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
  212. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/instance/kubernetes.py +0 -0
  213. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/iptables.py +0 -0
  214. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kafkacluster_tools.py +0 -0
  215. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/__init__.py +0 -0
  216. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/application/__init__.py +0 -0
  217. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/application/controller_wrappers.py +0 -0
  218. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/application/tools.py +0 -0
  219. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/bin/__init__.py +0 -0
  220. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  221. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +0 -0
  222. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  223. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  224. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes/remote_run.py +0 -0
  225. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/kubernetes_tools.py +0 -0
  226. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  227. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/list_tron_namespaces.py +0 -0
  228. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/long_running_service_tools.py +0 -0
  229. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mac_address.py +0 -0
  230. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/marathon_dashboard.py +0 -0
  231. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/__init__.py +0 -0
  232. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/cfg.py +0 -0
  233. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/cluster.py +0 -0
  234. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/exceptions.py +0 -0
  235. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/framework.py +0 -0
  236. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/log.py +0 -0
  237. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/master.py +0 -0
  238. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/mesos_file.py +0 -0
  239. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/parallel.py +0 -0
  240. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/slave.py +0 -0
  241. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/task.py +0 -0
  242. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/util.py +0 -0
  243. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos/zookeeper.py +0 -0
  244. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos_maintenance.py +0 -0
  245. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/mesos_tools.py +0 -0
  246. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/metrics/__init__.py +0 -0
  247. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/metrics/metastatus_lib.py +0 -0
  248. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/metrics/metrics_lib.py +0 -0
  249. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/monitoring/__init__.py +0 -0
  250. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  251. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/monitoring_tools.py +0 -0
  252. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/monkrelaycluster_tools.py +0 -0
  253. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/nrtsearchservice_tools.py +0 -0
  254. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  255. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/oom_logger.py +0 -0
  256. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  257. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paasta_execute_docker_command.py +0 -0
  258. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paasta_native_serviceinit.py +0 -0
  259. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paasta_service_config_loader.py +0 -0
  260. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/__init__.py +0 -0
  261. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/api/__init__.py +0 -0
  262. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
  263. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/api/default_api.py +0 -0
  264. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/api/remote_run_api.py +0 -0
  265. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/api/resources_api.py +0 -0
  266. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/api/service_api.py +0 -0
  267. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/api_client.py +0 -0
  268. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/apis/__init__.py +0 -0
  269. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/configuration.py +0 -0
  270. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/exceptions.py +0 -0
  271. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/__init__.py +0 -0
  272. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
  273. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
  274. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
  275. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
  276. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
  277. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
  278. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
  279. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
  280. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/flink_config.py +0 -0
  281. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/flink_job.py +0 -0
  282. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
  283. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
  284. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
  285. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
  286. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/inline_object.py +0 -0
  287. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
  288. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
  289. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
  290. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
  291. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_status.py +0 -0
  292. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
  293. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
  294. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
  295. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
  296. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
  297. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
  298. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
  299. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
  300. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
  301. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
  302. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
  303. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
  304. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
  305. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
  306. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
  307. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
  308. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
  309. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
  310. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/remote_run_outcome.py +0 -0
  311. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/remote_run_start.py +0 -0
  312. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/remote_run_stop.py +0 -0
  313. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/remote_run_token.py +0 -0
  314. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/resource.py +0 -0
  315. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/resource_item.py +0 -0
  316. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/resource_value.py +0 -0
  317. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
  318. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
  319. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
  320. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
  321. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/model_utils.py +0 -0
  322. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/models/__init__.py +0 -0
  323. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/paastaapi/rest.py +0 -0
  324. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/prune_completed_pods.py +0 -0
  325. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/puppet_service_tools.py +0 -0
  326. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/py.typed +0 -0
  327. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/remote_git.py +0 -0
  328. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
  329. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/run-paasta-api-playground.py +0 -0
  330. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/secret_providers/__init__.py +0 -0
  331. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/secret_providers/vault.py +0 -0
  332. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/secret_tools.py +0 -0
  333. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/setup_istio_mesh.py +0 -0
  334. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/setup_kubernetes_cr.py +0 -0
  335. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/setup_kubernetes_crd.py +0 -0
  336. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  337. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/setup_kubernetes_job.py +0 -0
  338. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
  339. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/setup_tron_namespace.py +0 -0
  340. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/slack.py +0 -0
  341. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/smartstack_tools.py +0 -0
  342. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/spark_tools.py +0 -0
  343. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  344. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/tron/__init__.py +0 -0
  345. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/tron/client.py +0 -0
  346. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/tron/tron_command_context.py +0 -0
  347. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/tron/tron_timeutils.py +0 -0
  348. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/tron_tools.py +0 -0
  349. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/utils.py +0 -0
  350. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools/yaml_tools.py +0 -0
  351. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools.egg-info/dependency_links.txt +0 -0
  352. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools.egg-info/requires.txt +0 -0
  353. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/paasta_tools.egg-info/top_level.txt +0 -0
  354. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/pyproject.toml +0 -0
  355. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/requirements-minimal.txt +0 -0
  356. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/setup.cfg +0 -0
  357. {paasta-tools-1.21.2 → paasta_tools-1.21.3}/setup.py +0 -0
@@ -0,0 +1,73 @@
1
+ Metadata-Version: 2.1
2
+ Name: paasta-tools
3
+ Version: 1.21.3
4
+ Summary: Tools for Yelps SOA infrastructure
5
+ Author: Compute Infrastructure @ Yelp
6
+ Author-email: compute-infra@yelp.com
7
+ Provides: paasta_tools
8
+ Requires-Python: >=3.8.0
9
+ License-File: LICENSE
10
+ Requires-Dist: a-sync>=0.5.0
11
+ Requires-Dist: aiohttp>=3.5.4
12
+ Requires-Dist: argcomplete>=0.8.1
13
+ Requires-Dist: boto
14
+ Requires-Dist: boto3
15
+ Requires-Dist: boto3-type-annotations
16
+ Requires-Dist: botocore
17
+ Requires-Dist: bravado>=10.2.0
18
+ Requires-Dist: certifi
19
+ Requires-Dist: choice>=0.1
20
+ Requires-Dist: containerd
21
+ Requires-Dist: cookiecutter>=1.4.0
22
+ Requires-Dist: croniter
23
+ Requires-Dist: docker
24
+ Requires-Dist: dulwich>=0.17.3
25
+ Requires-Dist: ephemeral-port-reserve>=1.0.1
26
+ Requires-Dist: graphviz
27
+ Requires-Dist: grpcio
28
+ Requires-Dist: gunicorn
29
+ Requires-Dist: humanfriendly
30
+ Requires-Dist: humanize>=0.5.1
31
+ Requires-Dist: inotify>=0.2.8
32
+ Requires-Dist: ipaddress>=1.0.22
33
+ Requires-Dist: isodate>=0.7.2
34
+ Requires-Dist: jsonschema[format]
35
+ Requires-Dist: kazoo>=2.0.0
36
+ Requires-Dist: kubernetes<26.0.0,>=18.20.0
37
+ Requires-Dist: ldap3
38
+ Requires-Dist: manhole
39
+ Requires-Dist: mypy-extensions>=0.3.0
40
+ Requires-Dist: nats-py
41
+ Requires-Dist: nulltype
42
+ Requires-Dist: objgraph
43
+ Requires-Dist: ply
44
+ Requires-Dist: progressbar2>=3.10.0
45
+ Requires-Dist: prometheus-client
46
+ Requires-Dist: pymesos>=0.2.0
47
+ Requires-Dist: pyramid>=1.8
48
+ Requires-Dist: pyramid-swagger>=2.3.0
49
+ Requires-Dist: pysensu-yelp>=0.3.4
50
+ Requires-Dist: PyStaticConfiguration
51
+ Requires-Dist: python-crontab>=2.1.1
52
+ Requires-Dist: python-dateutil>=2.4.0
53
+ Requires-Dist: python-iptables
54
+ Requires-Dist: pytimeparse>=1.1.0
55
+ Requires-Dist: pytz>=2014.10
56
+ Requires-Dist: requests<2.32.0,>=2.18.4
57
+ Requires-Dist: requests-cache>=0.4.10
58
+ Requires-Dist: retry
59
+ Requires-Dist: ruamel.yaml
60
+ Requires-Dist: sensu-plugin
61
+ Requires-Dist: service-configuration-lib>=3.2.0
62
+ Requires-Dist: signalfx
63
+ Requires-Dist: slackclient>=1.2.1
64
+ Requires-Dist: sticht>=1.1.0
65
+ Requires-Dist: syslogmp
66
+ Requires-Dist: task-processing
67
+ Requires-Dist: thriftpy2
68
+ Requires-Dist: transitions
69
+ Requires-Dist: typing-extensions
70
+ Requires-Dist: tzlocal
71
+ Requires-Dist: urllib3
72
+ Requires-Dist: utaw>=0.2.0
73
+ Requires-Dist: wsgicors
@@ -44,7 +44,7 @@ is a heavily customised version of SmartStack and Envoy, allows many systems at
44
44
  to communicate with PaaSTA services and each other.
45
45
 
46
46
  On the other hand, requiring lots of components, means lots of infrastructure to
47
- setup before PaaSTA can work effectively! Realistacally, running PaaSTA outside of Yelp
47
+ setup before PaaSTA can work effectively! Realistically, running PaaSTA outside of Yelp
48
48
  would not be sensible, because in addition to the integrations mentioned above we also
49
49
  have strong opinions encoded in other tooling that you would need to replicate. Nevertheless,
50
50
  we code PaaSTA in the open because we think it is useful to share our approach and hope that
@@ -17,4 +17,4 @@
17
17
  # setup phase, the dependencies may not exist on disk yet.
18
18
  #
19
19
  # Don't bump version manually. See `make release` docs in ./Makefile
20
- __version__ = "1.21.2"
20
+ __version__ = "1.21.3"
@@ -1097,7 +1097,9 @@ def get_paasta_oapi_client_with_auth(
1097
1097
  )
1098
1098
 
1099
1099
 
1100
- def run_interactive_cli(cmd: str, shell: str = "bash", term: str = "xterm-256color"):
1100
+ def run_interactive_cli(
1101
+ cmd: str, shell: str = "/bin/bash", term: str = "xterm-256color"
1102
+ ):
1101
1103
  """Runs interactive command in a pseudo terminal, handling terminal size management
1102
1104
 
1103
1105
  :param str cmd: shell command
@@ -1105,6 +1107,8 @@ def run_interactive_cli(cmd: str, shell: str = "bash", term: str = "xterm-256col
1105
1107
  :param str term: terminal type
1106
1108
  """
1107
1109
  cols, rows = shutil.get_terminal_size()
1110
+ if not os.path.isabs(shell):
1111
+ shell = shutil.which(shell)
1108
1112
  wrapped_cmd = (
1109
1113
  f"export SHELL={shell};"
1110
1114
  f"export TERM={term};"
@@ -0,0 +1,73 @@
1
+ Metadata-Version: 2.1
2
+ Name: paasta-tools
3
+ Version: 1.21.3
4
+ Summary: Tools for Yelps SOA infrastructure
5
+ Author: Compute Infrastructure @ Yelp
6
+ Author-email: compute-infra@yelp.com
7
+ Provides: paasta_tools
8
+ Requires-Python: >=3.8.0
9
+ License-File: LICENSE
10
+ Requires-Dist: a-sync>=0.5.0
11
+ Requires-Dist: aiohttp>=3.5.4
12
+ Requires-Dist: argcomplete>=0.8.1
13
+ Requires-Dist: boto
14
+ Requires-Dist: boto3
15
+ Requires-Dist: boto3-type-annotations
16
+ Requires-Dist: botocore
17
+ Requires-Dist: bravado>=10.2.0
18
+ Requires-Dist: certifi
19
+ Requires-Dist: choice>=0.1
20
+ Requires-Dist: containerd
21
+ Requires-Dist: cookiecutter>=1.4.0
22
+ Requires-Dist: croniter
23
+ Requires-Dist: docker
24
+ Requires-Dist: dulwich>=0.17.3
25
+ Requires-Dist: ephemeral-port-reserve>=1.0.1
26
+ Requires-Dist: graphviz
27
+ Requires-Dist: grpcio
28
+ Requires-Dist: gunicorn
29
+ Requires-Dist: humanfriendly
30
+ Requires-Dist: humanize>=0.5.1
31
+ Requires-Dist: inotify>=0.2.8
32
+ Requires-Dist: ipaddress>=1.0.22
33
+ Requires-Dist: isodate>=0.7.2
34
+ Requires-Dist: jsonschema[format]
35
+ Requires-Dist: kazoo>=2.0.0
36
+ Requires-Dist: kubernetes<26.0.0,>=18.20.0
37
+ Requires-Dist: ldap3
38
+ Requires-Dist: manhole
39
+ Requires-Dist: mypy-extensions>=0.3.0
40
+ Requires-Dist: nats-py
41
+ Requires-Dist: nulltype
42
+ Requires-Dist: objgraph
43
+ Requires-Dist: ply
44
+ Requires-Dist: progressbar2>=3.10.0
45
+ Requires-Dist: prometheus-client
46
+ Requires-Dist: pymesos>=0.2.0
47
+ Requires-Dist: pyramid>=1.8
48
+ Requires-Dist: pyramid-swagger>=2.3.0
49
+ Requires-Dist: pysensu-yelp>=0.3.4
50
+ Requires-Dist: PyStaticConfiguration
51
+ Requires-Dist: python-crontab>=2.1.1
52
+ Requires-Dist: python-dateutil>=2.4.0
53
+ Requires-Dist: python-iptables
54
+ Requires-Dist: pytimeparse>=1.1.0
55
+ Requires-Dist: pytz>=2014.10
56
+ Requires-Dist: requests<2.32.0,>=2.18.4
57
+ Requires-Dist: requests-cache>=0.4.10
58
+ Requires-Dist: retry
59
+ Requires-Dist: ruamel.yaml
60
+ Requires-Dist: sensu-plugin
61
+ Requires-Dist: service-configuration-lib>=3.2.0
62
+ Requires-Dist: signalfx
63
+ Requires-Dist: slackclient>=1.2.1
64
+ Requires-Dist: sticht>=1.1.0
65
+ Requires-Dist: syslogmp
66
+ Requires-Dist: task-processing
67
+ Requires-Dist: thriftpy2
68
+ Requires-Dist: transitions
69
+ Requires-Dist: typing-extensions
70
+ Requires-Dist: tzlocal
71
+ Requires-Dist: urllib3
72
+ Requires-Dist: utaw>=0.2.0
73
+ Requires-Dist: wsgicors
@@ -299,4 +299,55 @@ paasta_tools/secret_providers/vault.py
299
299
  paasta_tools/tron/__init__.py
300
300
  paasta_tools/tron/client.py
301
301
  paasta_tools/tron/tron_command_context.py
302
- paasta_tools/tron/tron_timeutils.py
302
+ paasta_tools/tron/tron_timeutils.py
303
+ tests/test_adhoc_tools.py
304
+ tests/test_apply_external_resources.py
305
+ tests/test_async_utils.py
306
+ tests/test_bounce_lib.py
307
+ tests/test_check_flink_services_health.py
308
+ tests/test_check_kubernetes_services_replication.py
309
+ tests/test_check_oom_events.py
310
+ tests/test_check_service_replication_tools.py
311
+ tests/test_check_spark_jobs.py
312
+ tests/test_cleanup_kubernetes_jobs.py
313
+ tests/test_config_utils.py
314
+ tests/test_delete_kubernetes_deployments.py
315
+ tests/test_deployment_utils.py
316
+ tests/test_docker_wrapper.py
317
+ tests/test_drain_lib.py
318
+ tests/test_eks_tools.py
319
+ tests/test_envoy_tools.py
320
+ tests/test_firewall.py
321
+ tests/test_firewall_logging.py
322
+ tests/test_firewall_update.py
323
+ tests/test_flink_tools.py
324
+ tests/test_flinkeks_tools.py
325
+ tests/test_generate_authenticating_services.py
326
+ tests/test_generate_deployments_for_service.py
327
+ tests/test_generate_services_file.py
328
+ tests/test_generate_services_yaml.py
329
+ tests/test_hacheck.py
330
+ tests/test_iptables.py
331
+ tests/test_kubernetes_tools.py
332
+ tests/test_list_kubernetes_service_instances.py
333
+ tests/test_long_running_service_tools.py
334
+ tests/test_mac_address.py
335
+ tests/test_mesos_tools.py
336
+ tests/test_monitoring_tools.py
337
+ tests/test_nrtsearchserviceseks_tools.py
338
+ tests/test_oom_logger.py
339
+ tests/test_paasta_execute_docker_command.py
340
+ tests/test_paasta_service_config_loader.py
341
+ tests/test_puppet_service_tools.py
342
+ tests/test_remote_git.py
343
+ tests/test_secret_tools.py
344
+ tests/test_setup_istio_mesh.py
345
+ tests/test_setup_kubernetes_cr.py
346
+ tests/test_setup_kubernetes_job.py
347
+ tests/test_setup_prometheus_adapter_config.py
348
+ tests/test_slack.py
349
+ tests/test_smartstack_tools.py
350
+ tests/test_spark_tools.py
351
+ tests/test_task_processing.py
352
+ tests/test_tron_tools.py
353
+ tests/test_utils.py
@@ -18,4 +18,3 @@ paasta_setup_tron_namespace = paasta_tools.setup_tron_namespace:main
18
18
 
19
19
  [paste.app_factory]
20
20
  paasta-api-config = paasta_tools.api.api:make_app
21
-
@@ -0,0 +1,66 @@
1
+ # Copyright 2015-2016 Yelp Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ import mock
15
+
16
+ from paasta_tools import adhoc_tools
17
+ from paasta_tools.utils import DeploymentsJsonV2
18
+ from paasta_tools.utils import NoConfigurationForServiceError
19
+
20
+
21
+ def test_get_default_interactive_config():
22
+ with mock.patch(
23
+ "paasta_tools.adhoc_tools.load_adhoc_job_config", autospec=True
24
+ ) as mock_load_adhoc_job_config:
25
+ mock_load_adhoc_job_config.return_value = adhoc_tools.AdhocJobConfig(
26
+ service="fake_service",
27
+ instance="interactive",
28
+ cluster="fake_cluster",
29
+ config_dict={},
30
+ branch_dict={"deploy_group": "fake_deploy_group"},
31
+ )
32
+ result = adhoc_tools.get_default_interactive_config(
33
+ "fake_service", "fake_cluster", "/fake/soa/dir", load_deployments=False
34
+ )
35
+ assert result.get_cpus() == 4
36
+ assert result.get_mem() == 10240
37
+ assert result.get_disk() == 1024
38
+
39
+
40
+ def test_get_default_interactive_config_reads_from_tty():
41
+ with mock.patch(
42
+ "paasta_tools.adhoc_tools.prompt_pick_one", autospec=True
43
+ ) as mock_prompt_pick_one, mock.patch(
44
+ "paasta_tools.adhoc_tools.load_adhoc_job_config", autospec=True
45
+ ) as mock_load_adhoc_job_config, mock.patch(
46
+ "paasta_tools.adhoc_tools.load_v2_deployments_json", autospec=True
47
+ ) as mock_load_deployments_json:
48
+ mock_prompt_pick_one.return_value = "fake_deploygroup"
49
+ mock_load_adhoc_job_config.side_effect = NoConfigurationForServiceError
50
+ mock_load_deployments_json.return_value = DeploymentsJsonV2(
51
+ service="fake-service",
52
+ config_dict={
53
+ "deployments": {
54
+ "fake_deploygroup": {
55
+ "docker_image": mock.sentinel.docker_image,
56
+ "git_sha": mock.sentinel.git_sha,
57
+ }
58
+ },
59
+ "controls": {},
60
+ },
61
+ )
62
+ result = adhoc_tools.get_default_interactive_config(
63
+ "fake_service", "fake_cluster", "/fake/soa/dir", load_deployments=True
64
+ )
65
+ assert result.get_deploy_group() == "fake_deploygroup"
66
+ assert result.get_docker_image() == mock.sentinel.docker_image
@@ -0,0 +1,159 @@
1
+ import os
2
+ from subprocess import CalledProcessError
3
+
4
+ import mock
5
+ import pytest
6
+
7
+ from paasta_tools.apply_external_resources import main
8
+
9
+
10
+ @pytest.fixture
11
+ def mock_run():
12
+ with mock.patch(
13
+ "paasta_tools.apply_external_resources.run", autospec=True
14
+ ) as mock_runner:
15
+ yield mock_runner
16
+
17
+
18
+ @pytest.fixture(autouse=True)
19
+ def setup_external_files(fs):
20
+ fs.create_file(
21
+ "/external_resources/00-common/10-foo/10-deployment.yaml",
22
+ contents="foo: bar",
23
+ )
24
+ fs.create_file(
25
+ "/external_resources/00-common/10-foo/20-service.yaml",
26
+ contents="fizz: buzz",
27
+ )
28
+ fs.create_file(
29
+ "/external_resources/20-common/10-foo/20-deployment.yaml",
30
+ contents="baz: biz",
31
+ )
32
+ fs.create_file(
33
+ "/external_resources/.applied/00-common/10-foo/10-deployment.yaml",
34
+ contents="foo: bar",
35
+ )
36
+ fs.create_file(
37
+ "/external_resources/.applied/00-common/10-foo/20-service.yaml",
38
+ contents="fizz: buzz",
39
+ )
40
+ fs.create_file(
41
+ "/external_resources/.applied/20-common/10-foo/20-deployment.yaml",
42
+ contents="baz: biz",
43
+ )
44
+
45
+
46
+ def test_no_changes(mock_run):
47
+ assert main("/external_resources") == 0
48
+ assert mock_run.call_count == 0
49
+
50
+
51
+ def test_resources_added_in_order(mock_run, fs):
52
+ fs.create_file(
53
+ "/external_resources/00-common/10-foo/30-hpa.yaml",
54
+ contents="blah: blah",
55
+ )
56
+ fs.create_file(
57
+ "/external_resources/00-common/10-foo/40-service.yaml",
58
+ contents="blah: blah",
59
+ )
60
+ fs.create_file(
61
+ "/external_resources/00-common/30-foo/10-deployment.yaml",
62
+ contents="blah: blah",
63
+ )
64
+ assert main("/external_resources") == 0
65
+ assert mock_run.call_args_list == [
66
+ mock.call(
67
+ [
68
+ "kubectl",
69
+ "apply",
70
+ "-f",
71
+ "/external_resources/00-common/10-foo/30-hpa.yaml",
72
+ ],
73
+ check=True,
74
+ ),
75
+ mock.call(
76
+ [
77
+ "kubectl",
78
+ "apply",
79
+ "-f",
80
+ "/external_resources/00-common/10-foo/40-service.yaml",
81
+ ],
82
+ check=True,
83
+ ),
84
+ mock.call(
85
+ [
86
+ "kubectl",
87
+ "apply",
88
+ "-f",
89
+ "/external_resources/00-common/30-foo/10-deployment.yaml",
90
+ ],
91
+ check=True,
92
+ ),
93
+ ]
94
+ assert os.path.exists("/external_resources/.applied/00-common/10-foo/30-hpa.yaml")
95
+ assert os.path.exists(
96
+ "/external_resources/.applied/00-common/10-foo/40-service.yaml"
97
+ )
98
+ assert os.path.exists(
99
+ "/external_resources/.applied/00-common/30-foo/10-deployment.yaml"
100
+ )
101
+
102
+
103
+ def test_resources_deleted_in_reverse_order(mock_run, fs):
104
+ fs.create_file(
105
+ "/external_resources/.applied/00-common/10-foo/30-hpa.yaml",
106
+ contents="blah: blah",
107
+ )
108
+ fs.create_file(
109
+ "/external_resources/.applied/00-common/10-foo/40-service.yaml",
110
+ contents="blah: blah",
111
+ )
112
+ assert main("/external_resources") == 0
113
+ assert mock_run.call_args_list == [
114
+ mock.call(
115
+ [
116
+ "kubectl",
117
+ "delete",
118
+ "--ignore-not-found=true",
119
+ "-f",
120
+ "/external_resources/.applied/00-common/10-foo/40-service.yaml",
121
+ ],
122
+ check=True,
123
+ ),
124
+ mock.call(
125
+ [
126
+ "kubectl",
127
+ "delete",
128
+ "--ignore-not-found=true",
129
+ "-f",
130
+ "/external_resources/.applied/00-common/10-foo/30-hpa.yaml",
131
+ ],
132
+ check=True,
133
+ ),
134
+ ]
135
+ assert not os.path.exists(
136
+ "/external_resources/.applied/00-common/10-foo/30-hpa.yaml"
137
+ )
138
+ assert not os.path.exists(
139
+ "/external_resources/.applied/00-common/10-foo/40-service.yaml"
140
+ )
141
+
142
+
143
+ def test_kubectl_fails(mock_run, fs):
144
+ mock_run.side_effect = [CalledProcessError(cmd="kubectl", returncode=1), None]
145
+ fs.create_file(
146
+ "/external_resources/00-common/10-foo/30-hpa.yaml",
147
+ contents="blah: blah",
148
+ )
149
+ fs.create_file(
150
+ "/external_resources/00-common/10-foo/40-service.yaml",
151
+ contents="blah: blah",
152
+ )
153
+ assert main("/external_resources") == 1
154
+ assert not os.path.exists(
155
+ "/external_resources/.applied/00-common/10-foo/30-hpa.yaml"
156
+ )
157
+ assert os.path.exists(
158
+ "/external_resources/.applied/00-common/10-foo/40-service.yaml"
159
+ )
@@ -0,0 +1,201 @@
1
+ import asyncio
2
+ import functools
3
+ import weakref
4
+ from collections import defaultdict
5
+
6
+ import mock
7
+ import pytest
8
+
9
+ from paasta_tools.async_utils import async_ttl_cache
10
+
11
+
12
+ @pytest.mark.asyncio
13
+ async def test_async_ttl_cache_hit():
14
+ return_values = iter(range(10))
15
+
16
+ @async_ttl_cache(ttl=None)
17
+ async def range_coroutine():
18
+ return next(return_values)
19
+
20
+ assert await range_coroutine() == await range_coroutine()
21
+
22
+
23
+ @pytest.mark.asyncio
24
+ async def test_async_ttl_cache_miss():
25
+ return_values = iter(range(10))
26
+
27
+ @async_ttl_cache(ttl=0)
28
+ async def range_coroutine():
29
+ return next(return_values)
30
+
31
+ assert await range_coroutine() != await range_coroutine()
32
+
33
+
34
+ @pytest.mark.asyncio
35
+ async def test_async_ttl_cache_doesnt_cache_failures():
36
+ flaky_error_raiser = mock.Mock(side_effect=[Exception, None])
37
+
38
+ @async_ttl_cache(ttl=None)
39
+ async def flaky_coroutine():
40
+ return flaky_error_raiser()
41
+
42
+ with pytest.raises(Exception):
43
+ await flaky_coroutine()
44
+
45
+ # if we were caching failures, this would fail
46
+ assert await flaky_coroutine() is None
47
+
48
+
49
+ class DataHolder:
50
+ def __init__(self, value):
51
+ self.value = value
52
+
53
+
54
+ @pytest.mark.asyncio
55
+ async def test_async_ttl_cache_returns_in_flight_future():
56
+ return_values = iter(range(10))
57
+ event = asyncio.Event()
58
+ condition = asyncio.Condition()
59
+ num_waiting_coroutines = DataHolder(value=0)
60
+
61
+ # Wait until we have enough coroutines waiting to return a result. This
62
+ # ensures that dependent coroutines have a chance to get a future out of
63
+ # the cache
64
+ @async_ttl_cache(ttl=0)
65
+ async def range_coroutine():
66
+ await event.wait()
67
+ return next(return_values)
68
+
69
+ # Wait until we have enough coroutines waiting on range_coroutine, then
70
+ # wake range_coroutine
71
+ async def event_setter():
72
+ async with condition:
73
+ while num_waiting_coroutines.value != 2:
74
+ await condition.wait()
75
+ event.set()
76
+
77
+ # Keep track of how many waiting range_coroutines we have to ensure both
78
+ # have had a chance to get the in-flight future out of the cache. This has
79
+ # to be separate from range_coroutine since we only end up with one
80
+ # invocation of that method due to caching. It also has to be separate
81
+ # from event_setter to ensure that the event is not set until both
82
+ # coroutines are waiting.
83
+ async def cache_waiter():
84
+ async with condition:
85
+ num_waiting_coroutines.value += 1
86
+ condition.notify_all()
87
+ return await range_coroutine()
88
+
89
+ event_setter_future = asyncio.ensure_future(event_setter())
90
+ future1 = asyncio.ensure_future(cache_waiter())
91
+ future2 = asyncio.ensure_future(cache_waiter())
92
+ await asyncio.wait([event_setter_future, future1, future2])
93
+
94
+ assert future1.result() == future2.result() == 0
95
+
96
+
97
+ @pytest.mark.asyncio
98
+ async def test_async_ttl_cache_dont_overwrite_new_cache_entry():
99
+ """Make sure that we don't overwrite a new cache entry that was placed
100
+ while we were waiting to handle the result of a previously cached future
101
+ """
102
+ range_continue_event = asyncio.Event()
103
+ update_cache_event = asyncio.Event()
104
+ return_values = iter(range(10))
105
+
106
+ # Wait until awaiter has had a chance to get the in-flight future out of
107
+ # the cache, then signal to the cache_updater to replace the cached future
108
+ # before returning. Because cache_updater is signalled first, it will
109
+ # replace the previously cached future before async_ttl_cache decides
110
+ # whether save the result of that future in the cache
111
+ async def range_coroutine():
112
+ await range_continue_event.wait()
113
+ update_cache_event.set()
114
+ return next(return_values)
115
+
116
+ range_coroutine_future = asyncio.ensure_future(range_coroutine())
117
+ cache_key = functools._make_key((), {}, typed=False)
118
+ cache = {cache_key: (range_coroutine_future, float("Inf"))}
119
+
120
+ cached_range_coroutine = async_ttl_cache(cache=cache, ttl=0)(range_coroutine)
121
+
122
+ new_range_coroutine_future = asyncio.ensure_future(range_coroutine())
123
+
124
+ async def awaiter():
125
+ range_continue_event.set()
126
+ await cached_range_coroutine()
127
+
128
+ async def cache_updater():
129
+ await update_cache_event.wait()
130
+ cache[cache_key] = (new_range_coroutine_future, float("Inf"))
131
+
132
+ await asyncio.gather(awaiter(), cache_updater())
133
+ assert cache[cache_key] == (new_range_coroutine_future, float("Inf"))
134
+
135
+
136
+ @pytest.mark.asyncio
137
+ async def test_async_ttl_cache_recover_if_cache_entry_removed():
138
+ """Ensure we handle the case where we encounter an exception in the cached
139
+ future but another coroutine awaiting the same future ran first and alraedy
140
+ deleted the cache entry"""
141
+ range_continue_event = asyncio.Event()
142
+ num_awaiters_awaiting = DataHolder(value=0)
143
+
144
+ class TestException(Exception):
145
+ pass
146
+
147
+ async def range_coroutine():
148
+ await range_continue_event.wait()
149
+ raise TestException
150
+
151
+ range_coroutine_future = asyncio.ensure_future(range_coroutine())
152
+ cache_key = functools._make_key((), {}, typed=False)
153
+ cache = {cache_key: (range_coroutine_future, float("Inf"))}
154
+
155
+ cached_range_coroutine = async_ttl_cache(cache=cache, ttl=0)(range_coroutine)
156
+
157
+ async def awaiter():
158
+ num_awaiters_awaiting.value += 1
159
+ if num_awaiters_awaiting.value == 2:
160
+ range_continue_event.set()
161
+
162
+ try:
163
+ await cached_range_coroutine()
164
+ except TestException:
165
+ pass
166
+
167
+ # should not raise a KeyError!
168
+ await asyncio.gather(awaiter(), awaiter())
169
+
170
+
171
+ @pytest.mark.asyncio
172
+ async def test_async_ttl_cache_for_class_members_doesnt_leak_mem():
173
+ """Ensure that we aren't leaking memory"""
174
+
175
+ x = 42
176
+ instance_caches = defaultdict(dict)
177
+
178
+ class TestClass:
179
+ @async_ttl_cache(ttl=None, cleanup_self=True, cache=instance_caches)
180
+ async def f(self):
181
+ return x
182
+
183
+ o1 = TestClass()
184
+ w1 = weakref.ref(o1)
185
+ assert w1() is not None
186
+ assert await o1.f() == x
187
+ assert len(instance_caches) == 1
188
+ assert list(instance_caches.keys())[0]() == o1
189
+ del o1
190
+ assert len(instance_caches) == 0
191
+ assert w1() is None
192
+
193
+ o2, o3, o4 = TestClass(), TestClass(), TestClass()
194
+ assert await o2.f() == x
195
+ assert await o3.f() == x
196
+ assert await o4.f() == x
197
+ assert len(instance_caches) == 3
198
+ del o2, o4
199
+ assert len(instance_caches) == 1
200
+ del o3
201
+ assert len(instance_caches) == 0