paasta-tools 1.31.4__py3-none-any.whl → 1.33.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. paasta_tools/__init__.py +1 -1
  2. paasta_tools/cli/cmds/local_run.py +64 -21
  3. paasta_tools/cli/cmds/mark_for_deployment.py +9 -1
  4. paasta_tools/kubernetes_tools.py +5 -19
  5. paasta_tools/utils.py +9 -0
  6. {paasta_tools-1.31.4.dist-info → paasta_tools-1.33.0.dist-info}/METADATA +1 -1
  7. {paasta_tools-1.31.4.dist-info → paasta_tools-1.33.0.dist-info}/RECORD +63 -63
  8. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/apply_external_resources.py +0 -0
  9. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/bounce_log_latency_parser.py +0 -0
  10. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/check_autoscaler_max_instances.py +0 -0
  11. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/check_cassandracluster_services_replication.py +0 -0
  12. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/check_flink_services_health.py +0 -0
  13. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/check_kubernetes_api.py +0 -0
  14. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/check_kubernetes_services_replication.py +0 -0
  15. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/check_manual_oapi_changes.sh +0 -0
  16. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/check_oom_events.py +0 -0
  17. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/check_orphans.py +0 -0
  18. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/check_spark_jobs.py +0 -0
  19. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/cleanup_kubernetes_cr.py +0 -0
  20. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/cleanup_kubernetes_crd.py +0 -0
  21. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/cleanup_kubernetes_jobs.py +0 -0
  22. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/create_dynamodb_table.py +0 -0
  23. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/create_paasta_playground.py +0 -0
  24. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/delete_kubernetes_deployments.py +0 -0
  25. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/emit_allocated_cpu_metrics.py +0 -0
  26. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/generate_all_deployments +0 -0
  27. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/generate_authenticating_services.py +0 -0
  28. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/generate_deployments_for_service.py +0 -0
  29. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/generate_services_file.py +0 -0
  30. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/generate_services_yaml.py +0 -0
  31. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/get_running_task_allocation.py +0 -0
  32. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/habitat_fixer.py +0 -0
  33. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/ide_helper.py +0 -0
  34. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/is_pod_healthy_in_proxy.py +0 -0
  35. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/is_pod_healthy_in_smartstack.py +0 -0
  36. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/kill_bad_containers.py +0 -0
  37. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/kubernetes_remove_evicted_pods.py +0 -0
  38. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/mass-deploy-tag.sh +0 -0
  39. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/mock_patch_checker.py +0 -0
  40. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/paasta_cleanup_remote_run_resources.py +0 -0
  41. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/paasta_cleanup_stale_nodes.py +0 -0
  42. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/paasta_deploy_tron_jobs +0 -0
  43. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/paasta_execute_docker_command.py +0 -0
  44. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/paasta_secrets_sync.py +0 -0
  45. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/paasta_tabcomplete.sh +0 -0
  46. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/paasta_update_soa_memcpu.py +0 -0
  47. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/render_template.py +0 -0
  48. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/rightsizer_soaconfigs_update.py +0 -0
  49. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/service_shard_remove.py +0 -0
  50. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/service_shard_update.py +0 -0
  51. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/setup_istio_mesh.py +0 -0
  52. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/setup_kubernetes_cr.py +0 -0
  53. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/setup_kubernetes_crd.py +0 -0
  54. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/setup_kubernetes_internal_crd.py +0 -0
  55. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/setup_kubernetes_job.py +0 -0
  56. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/setup_prometheus_adapter_config.py +0 -0
  57. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/shared_ip_check.py +0 -0
  58. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/synapse_srv_namespaces_fact.py +0 -0
  59. {paasta_tools-1.31.4.data → paasta_tools-1.33.0.data}/scripts/timeouts_metrics_prom.py +0 -0
  60. {paasta_tools-1.31.4.dist-info → paasta_tools-1.33.0.dist-info}/WHEEL +0 -0
  61. {paasta_tools-1.31.4.dist-info → paasta_tools-1.33.0.dist-info}/entry_points.txt +0 -0
  62. {paasta_tools-1.31.4.dist-info → paasta_tools-1.33.0.dist-info}/licenses/LICENSE +0 -0
  63. {paasta_tools-1.31.4.dist-info → paasta_tools-1.33.0.dist-info}/top_level.txt +0 -0
paasta_tools/__init__.py CHANGED
@@ -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.31.4"
20
+ __version__ = "1.33.0"
@@ -12,6 +12,7 @@
12
12
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
+ import base64
15
16
  import datetime
16
17
  import json
17
18
  import os
@@ -31,6 +32,7 @@ from urllib.parse import urlparse
31
32
  import boto3
32
33
  import requests
33
34
  from docker import errors
35
+ from docker.api.client import APIClient
34
36
  from mypy_extensions import TypedDict
35
37
 
36
38
  from paasta_tools.adhoc_tools import get_default_interactive_config
@@ -612,26 +614,70 @@ class LostContainerException(Exception):
612
614
  pass
613
615
 
614
616
 
615
- def docker_pull_image(docker_url):
616
- """Pull an image via ``docker pull``. Uses the actual pull command instead of the python
617
- bindings due to the docker auth/registry transition. Once we are past Docker 1.6
618
- we can use better credential management, but for now this function assumes the
619
- user running the command has already been authorized for the registry"""
617
+ class DockerAuthConfig(TypedDict):
618
+ username: str
619
+ password: str
620
+
621
+
622
+ def get_readonly_docker_registry_auth_config(
623
+ docker_url: str,
624
+ ) -> DockerAuthConfig | None:
625
+ system_paasta_config = load_system_paasta_config()
626
+ config_path = system_paasta_config.get_readonly_docker_registry_auth_file()
627
+
628
+ with open(config_path) as f:
629
+ docker_config = json.load(f)
630
+ registry = docker_url.split("/")[0]
631
+
632
+ # find matching auth config - our usual ro config will have at least two entries
633
+ # at the time this comment was written
634
+ auths = docker_config
635
+ for auth_url, auth_data in auths.items():
636
+ if registry in auth_url:
637
+ # Decode the base64 auth string if present
638
+ if "auth" in auth_data:
639
+ auth_string = base64.b64decode(auth_data["auth"]).decode("utf-8")
640
+ username, password = auth_string.split(":", 1)
641
+ return {"username": username, "password": password}
642
+
643
+ # afaik, we should only hit this if folks are being naughty and passing a docker url from docker-dev
644
+ return None
645
+
646
+
647
+ def docker_pull_image(docker_client: APIClient, docker_url: str) -> None:
648
+ """Pull an image using the docker-py library with read-only registry credentials"""
620
649
  print(
621
- "Please wait while the image (%s) is pulled (times out after 30m)..."
622
- % docker_url,
650
+ f"Please wait while the image ({docker_url}) is pulled (times out after 30m)...",
623
651
  file=sys.stderr,
624
652
  )
625
- with Timeout(
626
- seconds=1800, error_message=f"Timed out pulling docker image from {docker_url}"
627
- ), open(os.devnull, mode="wb") as DEVNULL:
628
- ret, _ = _run("docker pull %s" % docker_url, stream=True, stdin=DEVNULL)
629
- if ret != 0:
630
- print(
631
- "\nPull failed. Are you authorized to run docker commands?",
632
- file=sys.stderr,
633
- )
634
- sys.exit(ret)
653
+
654
+ auth_config = get_readonly_docker_registry_auth_config(docker_url)
655
+ if not auth_config:
656
+ print(
657
+ PaastaColors.yellow(
658
+ "Warning: No read-only docker registry credentials found, attempting to pull without authentication."
659
+ ),
660
+ file=sys.stderr,
661
+ )
662
+
663
+ try:
664
+ with Timeout(
665
+ seconds=1800,
666
+ error_message=f"Timed out pulling docker image from {docker_url}",
667
+ ):
668
+ # this is slightly funky since pull() returns the output line-by-line, but as a dict
669
+ # ...that we then need to format back to the usual `docker pull` output
670
+ # :p
671
+ for line in docker_client.pull(
672
+ docker_url, auth_config=auth_config, stream=True, decode=True
673
+ ):
674
+ print(f"{line['id']}: {line['status']}", file=sys.stderr)
675
+ except Exception as e:
676
+ print(
677
+ f"\nPull failed. Error: {e}",
678
+ file=sys.stderr,
679
+ )
680
+ sys.exit(1)
635
681
 
636
682
 
637
683
  def get_container_id(docker_client, container_name):
@@ -1226,7 +1272,7 @@ def configure_and_run_docker_container(
1226
1272
  return 1
1227
1273
 
1228
1274
  if pull_image:
1229
- docker_pull_image(docker_url)
1275
+ docker_pull_image(docker_client, docker_url)
1230
1276
 
1231
1277
  for volume in instance_config.get_volumes(
1232
1278
  system_paasta_config.get_volumes(),
@@ -1303,9 +1349,6 @@ def docker_config_available():
1303
1349
 
1304
1350
 
1305
1351
  def paasta_local_run(args):
1306
- if args.action == "pull" and os.geteuid() != 0 and not docker_config_available():
1307
- print("Re-executing paasta local-run --pull with sudo..")
1308
- os.execvp("sudo", ["sudo", "-H"] + sys.argv)
1309
1352
  if args.action == "build" and not makefile_responds_to("cook-image"):
1310
1353
  print(
1311
1354
  "A local Makefile with a 'cook-image' target is required for --build",
@@ -1264,7 +1264,15 @@ class MarkForDeploymentProcess(RollbackSlackDeploymentProcess):
1264
1264
  self.ping_authors()
1265
1265
 
1266
1266
  def send_manual_rollback_instructions(self) -> None:
1267
- if self.deployment_version != self.old_deployment_version:
1267
+ # NOTE: new deploy groups are not exactly a particularly frequent occurrence, but
1268
+ # we want to prevent sending messages that look like
1269
+ # `If you need to roll back manually, run: paasta rollback --service $S --deploy-group $G --commit None`
1270
+ # since that's not actually valid/actionable.
1271
+ # thus the seemingly out-of-nowhere old_git_sha check: new deploy groups won't have value set there.
1272
+ if (
1273
+ self.deployment_version != self.old_deployment_version
1274
+ and self.old_git_sha is not None
1275
+ ):
1268
1276
  extra_rollback_args = ""
1269
1277
  if self.old_deployment_version.image_version:
1270
1278
  extra_rollback_args = (
@@ -2424,6 +2424,10 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2424
2424
  "paasta.yelp.com/cluster": self.cluster,
2425
2425
  "yelp.com/owner": "compute_infra_platform_experience",
2426
2426
  "paasta.yelp.com/managed": "true",
2427
+ # NOTE: this is mostly here for autoscaling purposes: we use information from the deploy group
2428
+ # during Prometheus relabeling - but it's not a bad label to have around in general, thus its
2429
+ # inclusion here
2430
+ "paasta.yelp.com/deploy_group": self.get_deploy_group(),
2427
2431
  }
2428
2432
  if service_namespace_config.is_in_smartstack():
2429
2433
  labels["paasta.yelp.com/weight"] = str(self.get_weight())
@@ -2449,25 +2453,7 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2449
2453
 
2450
2454
  # not all services use autoscaling, so we label those that do in order to have
2451
2455
  # prometheus selectively discover/scrape them
2452
- metrics_providers_needing_deploy_group = [
2453
- METRICS_PROVIDER_UWSGI,
2454
- METRICS_PROVIDER_PISCINA,
2455
- METRICS_PROVIDER_GUNICORN,
2456
- METRICS_PROVIDER_WORKER_LOAD,
2457
- ]
2458
-
2459
- if any(
2460
- self.should_use_metrics_provider(provider)
2461
- for provider in metrics_providers_needing_deploy_group
2462
- ):
2463
- # Deploy group is needed for Prometheus relabeling properly
2464
- # This should probably eventually be made into a default label,
2465
- # but for now we're fine with it being behind these feature toggles.
2466
- # Ideally, we'd also have the docker image here for ease-of-use
2467
- # in Prometheus relabeling, but that information is over the
2468
- # character limit for k8s labels (63 chars)
2469
- labels["paasta.yelp.com/deploy_group"] = self.get_deploy_group()
2470
-
2456
+ # NOTE: these are not mutually exclusive as a service could use multiple autoscaling types
2471
2457
  if self.should_use_metrics_provider(METRICS_PROVIDER_PISCINA):
2472
2458
  labels["paasta.yelp.com/scrape_piscina_prometheus"] = "true"
2473
2459
 
paasta_tools/utils.py CHANGED
@@ -182,6 +182,7 @@ CAPS_DROP = [
182
182
  "SYS_CHROOT",
183
183
  "SETFCAP",
184
184
  ]
185
+ DEFAULT_READONLY_DOCKER_REGISTRY_AUTH_FILE = "/nail/etc/docker-registry-ro"
185
186
 
186
187
 
187
188
  class RollbackTypes(Enum):
@@ -2066,6 +2067,7 @@ class SystemPaastaConfigDict(TypedDict, total=False):
2066
2067
  enable_tron_tsc: bool
2067
2068
  default_spark_iam_user: str
2068
2069
  default_spark_driver_pool_override: str
2070
+ readonly_docker_registry_auth_file: str
2069
2071
 
2070
2072
 
2071
2073
  def load_system_paasta_config(
@@ -2840,6 +2842,13 @@ class SystemPaastaConfig:
2840
2842
  # NOTE: this should never happen unless we've gotten bad data
2841
2843
  return None
2842
2844
 
2845
+ def get_readonly_docker_registry_auth_file(self) -> str:
2846
+ """Get the location of the readonly docker registry auth file as an absolute path."""
2847
+ return self.config_dict.get(
2848
+ "readonly_docker_registry_auth_file",
2849
+ DEFAULT_READONLY_DOCKER_REGISTRY_AUTH_FILE,
2850
+ )
2851
+
2843
2852
 
2844
2853
  def _run(
2845
2854
  command: Union[str, List[str]],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paasta-tools
3
- Version: 1.31.4
3
+ Version: 1.33.0
4
4
  Summary: Tools for Yelps SOA infrastructure
5
5
  Author: Compute Infrastructure @ Yelp
6
6
  Author-email: compute-infra@yelp.com
@@ -1,7 +1,7 @@
1
1
  k8s_itests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  k8s_itests/test_autoscaling.py,sha256=gX30L1wG1sDBaM0wE2aYR4OqHPSLvQBZ6LV0mLTrXZA,536
3
3
  k8s_itests/utils.py,sha256=PNibpYR0-g8Jcts9CjpkNb3oVzmdk9tZQrrNRuATCCM,966
4
- paasta_tools/__init__.py,sha256=B-mg-lsk3v6Uf0Rl96CHAbFxKRMuWGQuHnkSuaKmBdY,865
4
+ paasta_tools/__init__.py,sha256=U6CR048yMzCKGyw_UBlRejwUsKjoMQYqBR5RmjETCmU,865
5
5
  paasta_tools/adhoc_tools.py,sha256=OfhyZwilB93kNX8r4Nq_KyZCvsZ4rNX-FBcQAi41KCM,4751
6
6
  paasta_tools/apply_external_resources.py,sha256=DHZJ8zkGQKTBR6Ku2lNxnrdHo8rD7PD0rZEN2yloOn8,3375
7
7
  paasta_tools/async_utils.py,sha256=LOpYxaN-8u7js6IlibPRGq9OtgWFig59LGeIFgW9PsA,3591
@@ -44,7 +44,7 @@ paasta_tools/generate_services_yaml.py,sha256=BM760XGEOmLeJcEm0ez5nBZ2NmFJWsNXbZ
44
44
  paasta_tools/hacheck.py,sha256=GtQd32G4JoB2bOWqzH9h9NPrkg8a50i-iXAblfYz2p4,2748
45
45
  paasta_tools/iptables.py,sha256=SQ7hutHarfCd13oAknKv_h9rUuln4rf11W6C2HHUy9g,7518
46
46
  paasta_tools/kafkacluster_tools.py,sha256=NMfowdpYhFpXW55MKx_eX6rrQj5Fn-5M_9ryZKd749A,4992
47
- paasta_tools/kubernetes_tools.py,sha256=RA8kyqaUdNoodPgiU8EB4qgOGXSgyLxsqnjs7uP9t8w,181753
47
+ paasta_tools/kubernetes_tools.py,sha256=x6KrmucTrNM08Zho1qwdCDA_qNiIqK5HJhF_d3_3aU0,181285
48
48
  paasta_tools/list_kubernetes_service_instances.py,sha256=UEPiTqNxUAqUgSyPzJlNcrI2W4HBwpngzDM1QD6AAVQ,3910
49
49
  paasta_tools/list_tron_namespaces.py,sha256=wfSkPY9_C-RkORmnon3DWL2lVZ4GNSSDG9VkFrDfY1E,1679
50
50
  paasta_tools/long_running_service_tools.py,sha256=RphI6rDE4BK2zN2bfM900abuj7kDn7YXUcMq4pQVyO4,26400
@@ -78,7 +78,7 @@ paasta_tools/smartstack_tools.py,sha256=J0mPialC9KFW9mW0fOUCj040VyowEjQgBI_s13fz
78
78
  paasta_tools/spark_tools.py,sha256=qZIa1g9JQrX3Nndd3vsblJ3nfXEhSMyizmOTQfFP2k8,9749
79
79
  paasta_tools/synapse_srv_namespaces_fact.py,sha256=XG_Fgr_3D-MaEYkhKyQSmKHbOyZp9zwpevyTX4BOLWE,1421
80
80
  paasta_tools/tron_tools.py,sha256=XJjuLp98zdaJeZt7Wg55t7G8lhTffL5HuA1G_mkiekA,55901
81
- paasta_tools/utils.py,sha256=bNSVB734OtND-h_BxE6T24Gu_Co97qG_LE98p7-S54g,148776
81
+ paasta_tools/utils.py,sha256=7U1WsFBQUWa9wiTwlxu85F9zWbzhjo1V7lyxD8dkUZQ,149205
82
82
  paasta_tools/yaml_tools.py,sha256=4gXbrFQWWihp9edKt4J14MWcdS8r8sYJAsMYmmL3byk,1263
83
83
  paasta_tools/api/__init__.py,sha256=H0VmJeHyCSXD9GbiEjjQwcB_sKOcoBiyK-IEJMmtCyQ,578
84
84
  paasta_tools/api/api.py,sha256=SwlBbwH9e8ihnBSSkLU65CHrnzyQeDHPfRg_ik5LWZU,9859
@@ -124,9 +124,9 @@ paasta_tools/cli/cmds/list.py,sha256=KTeSZIaRArJ28lXFLJcEYGH9p90nD6rPFHAE45I7x-w
124
124
  paasta_tools/cli/cmds/list_clusters.py,sha256=7L1kK9xS7o9iYpAikTUjsGFR1cpX8ME31BBp9dDnDFY,1550
125
125
  paasta_tools/cli/cmds/list_deploy_queue.py,sha256=IqtsblfL0LpZyp-cwaRHpo6tAfvo5IAgnCyI5MMcVoM,5577
126
126
  paasta_tools/cli/cmds/list_namespaces.py,sha256=KPszBdsOAqRaPECUF1HgCFm1BYQqfBPTG3dwAsvywm4,3138
127
- paasta_tools/cli/cmds/local_run.py,sha256=UIeQX4doGUfHR5-5HKseJWiKLNmFW6QM92k0ygZdwQw,51045
127
+ paasta_tools/cli/cmds/local_run.py,sha256=wEj5sdoZwC07RBmL4J52FLbqNVyjxXuw6mkHft21N9Y,52358
128
128
  paasta_tools/cli/cmds/logs.py,sha256=fx4hdmHssPNRpmqEuyLLxnBAbevrDG-r89VULr89bzE,58922
129
- paasta_tools/cli/cmds/mark_for_deployment.py,sha256=kgtB3Dst4tFfmS6PWWFozzfmEdM1g6bmGK3QnMLw0aE,76215
129
+ paasta_tools/cli/cmds/mark_for_deployment.py,sha256=4cFqxJXzdz3kDzJpQWPRhYGSfxSvh8l5UaWnsMo7TiI,76711
130
130
  paasta_tools/cli/cmds/mesh_status.py,sha256=KpNfSomS5Uh98szloSpFh3qn0-IYHq4M37BS92t5mdc,6124
131
131
  paasta_tools/cli/cmds/pause_service_autoscaler.py,sha256=3Ie0wTkpRkl-Uja33WzWkPmBa5EJcPxMNAcZ8_P1LSo,3494
132
132
  paasta_tools/cli/cmds/push_to_registry.py,sha256=F7hWPY7MFtqznUfmJoQ0QPc5zAF5BS30_FWdQOrIqME,9736
@@ -287,61 +287,61 @@ paasta_tools/tron/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
287
287
  paasta_tools/tron/client.py,sha256=ypWjM4bZCzQWLn-qe1driqAxvF0ux8dROuFUv63dryA,5562
288
288
  paasta_tools/tron/tron_command_context.py,sha256=c6mph_DAt7pjcE3Uo271haJ0DfxJzfvcRhR2o-UmOeY,5379
289
289
  paasta_tools/tron/tron_timeutils.py,sha256=vDn04K7A3Xbs3lM04EgLuViC8AavOc5qyo8J5MC5nLk,3054
290
- paasta_tools-1.31.4.data/scripts/apply_external_resources.py,sha256=BOIdCQ5Md9RI3enzqbIWQge3clkXhPybAmLE3hqfDwQ,3347
291
- paasta_tools-1.31.4.data/scripts/bounce_log_latency_parser.py,sha256=dC06a0a5LdtPJ8xo88QWe5DMH_vwVB1BNbkFH7kJ3j0,2225
292
- paasta_tools-1.31.4.data/scripts/check_autoscaler_max_instances.py,sha256=2z6ifSU26-ULOK-FXp75b45mCdjSJnuvU8TxvapB8Wk,9423
293
- paasta_tools-1.31.4.data/scripts/check_cassandracluster_services_replication.py,sha256=mKlCK9pRNzxnOt41wA6CtDQIHhcky438i044kA6pbEc,1127
294
- paasta_tools-1.31.4.data/scripts/check_flink_services_health.py,sha256=ElYa1hr6KUcXuu0B8Nf-dt2Vfyo5FrwF5gVV4QBX7Lg,7162
295
- paasta_tools-1.31.4.data/scripts/check_kubernetes_api.py,sha256=BhOqJkkKNJPfonfIPonW5dlIubd1ji-3ppjXHomNwzM,1522
296
- paasta_tools-1.31.4.data/scripts/check_kubernetes_services_replication.py,sha256=LCLlumReRdy9Cw_sPpqanjPcBlbcrJDiECaYYru5Cwk,5751
297
- paasta_tools-1.31.4.data/scripts/check_manual_oapi_changes.sh,sha256=1IdphwXP7xnMNS7huZ3FeEHy67-nY4n3ydHmbojQvJg,879
298
- paasta_tools-1.31.4.data/scripts/check_oom_events.py,sha256=tUr14T2LYEgqwpAq4vkZ_Z0VTPOfQg7yrSSkwGQ86Hg,7801
299
- paasta_tools-1.31.4.data/scripts/check_orphans.py,sha256=9PmzRUZ1HwCcmTm4J1xTznz7hZl8fKsu1wdXUDufXJs,9984
300
- paasta_tools-1.31.4.data/scripts/check_spark_jobs.py,sha256=W4HUIbX_ylxl4DlqcdmoRWDbKYgPEr04OM-DLvfnXE8,7316
301
- paasta_tools-1.31.4.data/scripts/cleanup_kubernetes_cr.py,sha256=m-w_wuTuVG9FlwQQkxXYgri5DTGac9Nc2pbK4k1FNDE,4659
302
- paasta_tools-1.31.4.data/scripts/cleanup_kubernetes_crd.py,sha256=p9eLk-0-pU-hcVg-GAM92h1ZdQqlvmYhBzUFCiMPYR8,4478
303
- paasta_tools-1.31.4.data/scripts/cleanup_kubernetes_jobs.py,sha256=7LHB4tsz1kt-zygssIfQbBY6c3LSqXYDUILvHkSfBog,12433
304
- paasta_tools-1.31.4.data/scripts/create_dynamodb_table.py,sha256=9wJftWGgNtvLnpXeUqpoMXBIIep1hNySf0YiQmzpl5c,1167
305
- paasta_tools-1.31.4.data/scripts/create_paasta_playground.py,sha256=jzoE5e1pxWeVXwCEkD9O0jefOhEnIlSa3QMP9PC2f0M,3239
306
- paasta_tools-1.31.4.data/scripts/delete_kubernetes_deployments.py,sha256=de4C-5yqEuCeJXp6zhbc0v-c0LOElr4qabLnOTRcX4o,3124
307
- paasta_tools-1.31.4.data/scripts/emit_allocated_cpu_metrics.py,sha256=Cjd3xoOJoYSP3ciSAlZ7fh6_z678KpYt43Xh-WVCY1M,1859
308
- paasta_tools-1.31.4.data/scripts/generate_all_deployments,sha256=Qr5B0zogTOr8Lcn_7dpORixpGIJcXZ_pWz_ZlWnmsik,248
309
- paasta_tools-1.31.4.data/scripts/generate_authenticating_services.py,sha256=r5AQyquVm8_rbAhBETUU2ZHZvolpqZZTakW3lKFiOqw,2982
310
- paasta_tools-1.31.4.data/scripts/generate_deployments_for_service.py,sha256=FAFzIAtKY7GsA13s-ssCMH7T-_p9B1pBtyyYFzsCZ6k,9822
311
- paasta_tools-1.31.4.data/scripts/generate_services_file.py,sha256=w3Wyyn9ZkjfrvkT0SnTbh5mrTZJnjhTC2JIqLBpb6-g,3583
312
- paasta_tools-1.31.4.data/scripts/generate_services_yaml.py,sha256=XyIUsHa1BPLqeklayaFewX69-6GT_luaSLS_TMDLkQ0,991
313
- paasta_tools-1.31.4.data/scripts/get_running_task_allocation.py,sha256=NGYO2td42XQOduUmvgz0CZw0ir36bY6fUe3VOR1Ln6E,10876
314
- paasta_tools-1.31.4.data/scripts/habitat_fixer.py,sha256=hCC7fEnxrBOmiCJj4rPwhGlae9JsYg_gltk10l-FwaE,2625
315
- paasta_tools-1.31.4.data/scripts/ide_helper.py,sha256=QUVWxIeh54IhTn3HEhBrmJKvtgw6RDv9smoJ-6pZA4c,12348
316
- paasta_tools-1.31.4.data/scripts/is_pod_healthy_in_proxy.py,sha256=MiY85MJDXcN9oS8d840WG1iYDIzzO9lmk_NC0i_CrQg,4321
317
- paasta_tools-1.31.4.data/scripts/is_pod_healthy_in_smartstack.py,sha256=z3uP9sgwLwg94BubFgBKare2t1L5qhcY48MWsJxjxPY,1697
318
- paasta_tools-1.31.4.data/scripts/kill_bad_containers.py,sha256=oNY5x0Zg0eu34cXhFy60I7WRlqg4PKD_6xWi0eoRTCA,3832
319
- paasta_tools-1.31.4.data/scripts/kubernetes_remove_evicted_pods.py,sha256=D9Ovdc9Xer_Qf3vM5CtPVcKvnMwLiC0H-WQmQGXrBKM,5274
320
- paasta_tools-1.31.4.data/scripts/mass-deploy-tag.sh,sha256=cfPgDDvAOhy3ijTUocklogzoIY8hfoE6T5QI-0aqcfM,1578
321
- paasta_tools-1.31.4.data/scripts/mock_patch_checker.py,sha256=Q6Je8QjmfLzdnv_6JR6ehh2kA5SUxmeZGeLI2WC3BSY,2559
322
- paasta_tools-1.31.4.data/scripts/paasta_cleanup_remote_run_resources.py,sha256=4oN9UwnR7q6aEEyFUhVrT41VSeQJ2YS3upFpbZQXNUI,4558
323
- paasta_tools-1.31.4.data/scripts/paasta_cleanup_stale_nodes.py,sha256=C-DmEVgtienoMgJnIeESvFqWcJOW2SOGoS1l8RXA8NE,6304
324
- paasta_tools-1.31.4.data/scripts/paasta_deploy_tron_jobs,sha256=fFN2aP5FNSm5WfDV3yvLpihXaKkAF65MRXFcN2iD7S4,106
325
- paasta_tools-1.31.4.data/scripts/paasta_execute_docker_command.py,sha256=6kh7h2bleQbNULc37MiRsfnk9MDHqVv30UQdg3rF3kQ,4086
326
- paasta_tools-1.31.4.data/scripts/paasta_secrets_sync.py,sha256=sMdyWMt9BU5CmWHIRwzhpFKve7zxFHkygt_SNTJutWM,28766
327
- paasta_tools-1.31.4.data/scripts/paasta_tabcomplete.sh,sha256=qbQKSriz_L4MogA12L_8i-tg0Lplpshbk_FUMjK6uG0,929
328
- paasta_tools-1.31.4.data/scripts/paasta_update_soa_memcpu.py,sha256=5fShpZYpb7EeoC70cWdICnNHjHAaNU5mTHaAc3mloIs,20813
329
- paasta_tools-1.31.4.data/scripts/render_template.py,sha256=KcKfeSP2a9f6fMDRhnjX7OJaHmFIBtCJcHhUI_B7p9Y,3975
330
- paasta_tools-1.31.4.data/scripts/rightsizer_soaconfigs_update.py,sha256=0UPVtDyX6wXXurv7l5fiKuzXH8VEszKx_V7UqDm6Ck0,10493
331
- paasta_tools-1.31.4.data/scripts/service_shard_remove.py,sha256=WCvCxu3GTYEa3cYnWybTOiuHN14axj0x5_-snVd-mqE,4927
332
- paasta_tools-1.31.4.data/scripts/service_shard_update.py,sha256=AajuRS4s-HXhEcIIYK2dsyBSdCjZbh4x6Po48ipl7M4,13346
333
- paasta_tools-1.31.4.data/scripts/setup_istio_mesh.py,sha256=LbLxeI_DnhNXkyCgG-GxutlNu9_vcIitorYr4I9x4CY,11575
334
- paasta_tools-1.31.4.data/scripts/setup_kubernetes_cr.py,sha256=xsZJ_X1YpQ0NExyY1cXFH8KW2_vAgctCwdrW0bu102s,14931
335
- paasta_tools-1.31.4.data/scripts/setup_kubernetes_crd.py,sha256=QCiFOcSmE0nMEheIb7IUnYMUn0heh1kHyMFBCm7XIRU,4020
336
- paasta_tools-1.31.4.data/scripts/setup_kubernetes_internal_crd.py,sha256=dDyAOKFow7yeHWGa197angYwGTDWNyR7vZ6Cx5JlS6k,4629
337
- paasta_tools-1.31.4.data/scripts/setup_kubernetes_job.py,sha256=H2VuRaCpBj-J2Qc3DmIMutGuDL8nlfabshEiCGNNqmY,19095
338
- paasta_tools-1.31.4.data/scripts/setup_prometheus_adapter_config.py,sha256=JzvztaJ__5MOAV6pD5Vj3mamARh6TZUCzYdlqhWDOOY,43962
339
- paasta_tools-1.31.4.data/scripts/shared_ip_check.py,sha256=dbMwCwDLy9hCIbVWV1rk0FKuBkZNuQtM59hGVKxV2B4,2464
340
- paasta_tools-1.31.4.data/scripts/synapse_srv_namespaces_fact.py,sha256=HFX0zIXkXIjtAw8zrA7mUiy6NOKR11eBzE39R3aZv_E,1408
341
- paasta_tools-1.31.4.data/scripts/timeouts_metrics_prom.py,sha256=icK1j72-e-hvbUGs3LtcaMn9KBMopD9cGv5UUVo-OSc,2607
342
- paasta_tools-1.31.4.dist-info/licenses/LICENSE,sha256=Tcxn8PpeSjHDwUTemLW_thUNxcOOm612dK_no2ebEpo,10837
343
- paasta_tools-1.31.4.dist-info/METADATA,sha256=4ZYzPY_TVJqZlhBiA2v7vdeZvCpN7GKA9DIF2ukBF8s,2259
344
- paasta_tools-1.31.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
345
- paasta_tools-1.31.4.dist-info/entry_points.txt,sha256=qokGSdKYA6AjtdMM_BjmCAOMghMsjOpcAdL9e4fY6D8,1179
346
- paasta_tools-1.31.4.dist-info/top_level.txt,sha256=6vZZAZ7bbaDxuXZjNYixDwzkrezpNgDQHpS0ikvFOk4,24
347
- paasta_tools-1.31.4.dist-info/RECORD,,
290
+ paasta_tools-1.33.0.data/scripts/apply_external_resources.py,sha256=BOIdCQ5Md9RI3enzqbIWQge3clkXhPybAmLE3hqfDwQ,3347
291
+ paasta_tools-1.33.0.data/scripts/bounce_log_latency_parser.py,sha256=dC06a0a5LdtPJ8xo88QWe5DMH_vwVB1BNbkFH7kJ3j0,2225
292
+ paasta_tools-1.33.0.data/scripts/check_autoscaler_max_instances.py,sha256=2z6ifSU26-ULOK-FXp75b45mCdjSJnuvU8TxvapB8Wk,9423
293
+ paasta_tools-1.33.0.data/scripts/check_cassandracluster_services_replication.py,sha256=mKlCK9pRNzxnOt41wA6CtDQIHhcky438i044kA6pbEc,1127
294
+ paasta_tools-1.33.0.data/scripts/check_flink_services_health.py,sha256=ElYa1hr6KUcXuu0B8Nf-dt2Vfyo5FrwF5gVV4QBX7Lg,7162
295
+ paasta_tools-1.33.0.data/scripts/check_kubernetes_api.py,sha256=BhOqJkkKNJPfonfIPonW5dlIubd1ji-3ppjXHomNwzM,1522
296
+ paasta_tools-1.33.0.data/scripts/check_kubernetes_services_replication.py,sha256=LCLlumReRdy9Cw_sPpqanjPcBlbcrJDiECaYYru5Cwk,5751
297
+ paasta_tools-1.33.0.data/scripts/check_manual_oapi_changes.sh,sha256=1IdphwXP7xnMNS7huZ3FeEHy67-nY4n3ydHmbojQvJg,879
298
+ paasta_tools-1.33.0.data/scripts/check_oom_events.py,sha256=tUr14T2LYEgqwpAq4vkZ_Z0VTPOfQg7yrSSkwGQ86Hg,7801
299
+ paasta_tools-1.33.0.data/scripts/check_orphans.py,sha256=9PmzRUZ1HwCcmTm4J1xTznz7hZl8fKsu1wdXUDufXJs,9984
300
+ paasta_tools-1.33.0.data/scripts/check_spark_jobs.py,sha256=W4HUIbX_ylxl4DlqcdmoRWDbKYgPEr04OM-DLvfnXE8,7316
301
+ paasta_tools-1.33.0.data/scripts/cleanup_kubernetes_cr.py,sha256=m-w_wuTuVG9FlwQQkxXYgri5DTGac9Nc2pbK4k1FNDE,4659
302
+ paasta_tools-1.33.0.data/scripts/cleanup_kubernetes_crd.py,sha256=p9eLk-0-pU-hcVg-GAM92h1ZdQqlvmYhBzUFCiMPYR8,4478
303
+ paasta_tools-1.33.0.data/scripts/cleanup_kubernetes_jobs.py,sha256=7LHB4tsz1kt-zygssIfQbBY6c3LSqXYDUILvHkSfBog,12433
304
+ paasta_tools-1.33.0.data/scripts/create_dynamodb_table.py,sha256=9wJftWGgNtvLnpXeUqpoMXBIIep1hNySf0YiQmzpl5c,1167
305
+ paasta_tools-1.33.0.data/scripts/create_paasta_playground.py,sha256=jzoE5e1pxWeVXwCEkD9O0jefOhEnIlSa3QMP9PC2f0M,3239
306
+ paasta_tools-1.33.0.data/scripts/delete_kubernetes_deployments.py,sha256=de4C-5yqEuCeJXp6zhbc0v-c0LOElr4qabLnOTRcX4o,3124
307
+ paasta_tools-1.33.0.data/scripts/emit_allocated_cpu_metrics.py,sha256=Cjd3xoOJoYSP3ciSAlZ7fh6_z678KpYt43Xh-WVCY1M,1859
308
+ paasta_tools-1.33.0.data/scripts/generate_all_deployments,sha256=Qr5B0zogTOr8Lcn_7dpORixpGIJcXZ_pWz_ZlWnmsik,248
309
+ paasta_tools-1.33.0.data/scripts/generate_authenticating_services.py,sha256=r5AQyquVm8_rbAhBETUU2ZHZvolpqZZTakW3lKFiOqw,2982
310
+ paasta_tools-1.33.0.data/scripts/generate_deployments_for_service.py,sha256=FAFzIAtKY7GsA13s-ssCMH7T-_p9B1pBtyyYFzsCZ6k,9822
311
+ paasta_tools-1.33.0.data/scripts/generate_services_file.py,sha256=w3Wyyn9ZkjfrvkT0SnTbh5mrTZJnjhTC2JIqLBpb6-g,3583
312
+ paasta_tools-1.33.0.data/scripts/generate_services_yaml.py,sha256=XyIUsHa1BPLqeklayaFewX69-6GT_luaSLS_TMDLkQ0,991
313
+ paasta_tools-1.33.0.data/scripts/get_running_task_allocation.py,sha256=NGYO2td42XQOduUmvgz0CZw0ir36bY6fUe3VOR1Ln6E,10876
314
+ paasta_tools-1.33.0.data/scripts/habitat_fixer.py,sha256=hCC7fEnxrBOmiCJj4rPwhGlae9JsYg_gltk10l-FwaE,2625
315
+ paasta_tools-1.33.0.data/scripts/ide_helper.py,sha256=QUVWxIeh54IhTn3HEhBrmJKvtgw6RDv9smoJ-6pZA4c,12348
316
+ paasta_tools-1.33.0.data/scripts/is_pod_healthy_in_proxy.py,sha256=MiY85MJDXcN9oS8d840WG1iYDIzzO9lmk_NC0i_CrQg,4321
317
+ paasta_tools-1.33.0.data/scripts/is_pod_healthy_in_smartstack.py,sha256=z3uP9sgwLwg94BubFgBKare2t1L5qhcY48MWsJxjxPY,1697
318
+ paasta_tools-1.33.0.data/scripts/kill_bad_containers.py,sha256=oNY5x0Zg0eu34cXhFy60I7WRlqg4PKD_6xWi0eoRTCA,3832
319
+ paasta_tools-1.33.0.data/scripts/kubernetes_remove_evicted_pods.py,sha256=D9Ovdc9Xer_Qf3vM5CtPVcKvnMwLiC0H-WQmQGXrBKM,5274
320
+ paasta_tools-1.33.0.data/scripts/mass-deploy-tag.sh,sha256=cfPgDDvAOhy3ijTUocklogzoIY8hfoE6T5QI-0aqcfM,1578
321
+ paasta_tools-1.33.0.data/scripts/mock_patch_checker.py,sha256=Q6Je8QjmfLzdnv_6JR6ehh2kA5SUxmeZGeLI2WC3BSY,2559
322
+ paasta_tools-1.33.0.data/scripts/paasta_cleanup_remote_run_resources.py,sha256=4oN9UwnR7q6aEEyFUhVrT41VSeQJ2YS3upFpbZQXNUI,4558
323
+ paasta_tools-1.33.0.data/scripts/paasta_cleanup_stale_nodes.py,sha256=C-DmEVgtienoMgJnIeESvFqWcJOW2SOGoS1l8RXA8NE,6304
324
+ paasta_tools-1.33.0.data/scripts/paasta_deploy_tron_jobs,sha256=fFN2aP5FNSm5WfDV3yvLpihXaKkAF65MRXFcN2iD7S4,106
325
+ paasta_tools-1.33.0.data/scripts/paasta_execute_docker_command.py,sha256=6kh7h2bleQbNULc37MiRsfnk9MDHqVv30UQdg3rF3kQ,4086
326
+ paasta_tools-1.33.0.data/scripts/paasta_secrets_sync.py,sha256=sMdyWMt9BU5CmWHIRwzhpFKve7zxFHkygt_SNTJutWM,28766
327
+ paasta_tools-1.33.0.data/scripts/paasta_tabcomplete.sh,sha256=qbQKSriz_L4MogA12L_8i-tg0Lplpshbk_FUMjK6uG0,929
328
+ paasta_tools-1.33.0.data/scripts/paasta_update_soa_memcpu.py,sha256=5fShpZYpb7EeoC70cWdICnNHjHAaNU5mTHaAc3mloIs,20813
329
+ paasta_tools-1.33.0.data/scripts/render_template.py,sha256=KcKfeSP2a9f6fMDRhnjX7OJaHmFIBtCJcHhUI_B7p9Y,3975
330
+ paasta_tools-1.33.0.data/scripts/rightsizer_soaconfigs_update.py,sha256=0UPVtDyX6wXXurv7l5fiKuzXH8VEszKx_V7UqDm6Ck0,10493
331
+ paasta_tools-1.33.0.data/scripts/service_shard_remove.py,sha256=WCvCxu3GTYEa3cYnWybTOiuHN14axj0x5_-snVd-mqE,4927
332
+ paasta_tools-1.33.0.data/scripts/service_shard_update.py,sha256=AajuRS4s-HXhEcIIYK2dsyBSdCjZbh4x6Po48ipl7M4,13346
333
+ paasta_tools-1.33.0.data/scripts/setup_istio_mesh.py,sha256=LbLxeI_DnhNXkyCgG-GxutlNu9_vcIitorYr4I9x4CY,11575
334
+ paasta_tools-1.33.0.data/scripts/setup_kubernetes_cr.py,sha256=xsZJ_X1YpQ0NExyY1cXFH8KW2_vAgctCwdrW0bu102s,14931
335
+ paasta_tools-1.33.0.data/scripts/setup_kubernetes_crd.py,sha256=QCiFOcSmE0nMEheIb7IUnYMUn0heh1kHyMFBCm7XIRU,4020
336
+ paasta_tools-1.33.0.data/scripts/setup_kubernetes_internal_crd.py,sha256=dDyAOKFow7yeHWGa197angYwGTDWNyR7vZ6Cx5JlS6k,4629
337
+ paasta_tools-1.33.0.data/scripts/setup_kubernetes_job.py,sha256=H2VuRaCpBj-J2Qc3DmIMutGuDL8nlfabshEiCGNNqmY,19095
338
+ paasta_tools-1.33.0.data/scripts/setup_prometheus_adapter_config.py,sha256=JzvztaJ__5MOAV6pD5Vj3mamARh6TZUCzYdlqhWDOOY,43962
339
+ paasta_tools-1.33.0.data/scripts/shared_ip_check.py,sha256=dbMwCwDLy9hCIbVWV1rk0FKuBkZNuQtM59hGVKxV2B4,2464
340
+ paasta_tools-1.33.0.data/scripts/synapse_srv_namespaces_fact.py,sha256=HFX0zIXkXIjtAw8zrA7mUiy6NOKR11eBzE39R3aZv_E,1408
341
+ paasta_tools-1.33.0.data/scripts/timeouts_metrics_prom.py,sha256=icK1j72-e-hvbUGs3LtcaMn9KBMopD9cGv5UUVo-OSc,2607
342
+ paasta_tools-1.33.0.dist-info/licenses/LICENSE,sha256=Tcxn8PpeSjHDwUTemLW_thUNxcOOm612dK_no2ebEpo,10837
343
+ paasta_tools-1.33.0.dist-info/METADATA,sha256=S1FjkfNEp2tfP1mB0RmJKPSI-MjxG0QbaX8Rbf6Uz9o,2259
344
+ paasta_tools-1.33.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
345
+ paasta_tools-1.33.0.dist-info/entry_points.txt,sha256=qokGSdKYA6AjtdMM_BjmCAOMghMsjOpcAdL9e4fY6D8,1179
346
+ paasta_tools-1.33.0.dist-info/top_level.txt,sha256=6vZZAZ7bbaDxuXZjNYixDwzkrezpNgDQHpS0ikvFOk4,24
347
+ paasta_tools-1.33.0.dist-info/RECORD,,