capo-codeguruprofiler 0.6.0__tar.gz → 0.8.0__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 (188) hide show
  1. {capo_codeguruprofiler-0.6.0/src/capo_codeguruprofiler.egg-info → capo_codeguruprofiler-0.8.0}/PKG-INFO +2 -2
  2. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/pyproject.toml +2 -2
  3. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_auth/_sigv4.py +9 -9
  4. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/add_notification_channels.py +5 -1
  5. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/batch_get_frame_metric_data.py +5 -1
  6. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/configure_agent.py +5 -1
  7. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/create_profiling_group.py +5 -1
  8. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/delete_profiling_group.py +5 -1
  9. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/describe_profiling_group.py +5 -1
  10. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/get_findings_report_account_summary.py +5 -1
  11. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/get_notification_configuration.py +5 -1
  12. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/get_policy.py +5 -1
  13. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/get_profile.py +5 -1
  14. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/get_recommendations.py +5 -1
  15. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/list_findings_reports.py +5 -1
  16. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/list_profile_times.py +5 -1
  17. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/list_profiling_groups.py +5 -1
  18. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/list_tags_for_resource.py +5 -1
  19. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/post_agent_profile.py +5 -1
  20. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/put_permission.py +5 -1
  21. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/remove_notification_channel.py +5 -1
  22. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/remove_permission.py +5 -1
  23. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/submit_feedback.py +5 -1
  24. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/tag_resource.py +5 -1
  25. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/untag_resource.py +5 -1
  26. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_operations/code_guru_profiler/update_profiling_group.py +5 -1
  27. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_services/_pipeline.py +2 -0
  28. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_services/async_code_guru_profiler.py +12 -4
  29. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_services/code_guru_profiler.py +12 -4
  30. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0/src/capo_codeguruprofiler.egg-info}/PKG-INFO +2 -2
  31. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler.egg-info/requires.txt +1 -1
  32. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/tests/test_sigv4.py +21 -6
  33. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/LICENSE +0 -0
  34. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/README.md +0 -0
  35. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/setup.cfg +0 -0
  36. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/__init__.py +0 -0
  37. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_async.py +0 -0
  38. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_auth/_identity.py +0 -0
  39. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_auth/_providers.py +0 -0
  40. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_auth/_signers.py +0 -0
  41. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_auth/_zapros_handler.py +0 -0
  42. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_body.py +0 -0
  43. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_iter.py +0 -0
  44. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_pagination.py +0 -0
  45. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_protocol/__init__.py +0 -0
  46. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_protocol/errors.py +0 -0
  47. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_protocol/eventstream.py +0 -0
  48. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_protocol/serialize.py +0 -0
  49. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_protocol/xml.py +0 -0
  50. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_resources/code_guru_profiler/profiling_group.py +0 -0
  51. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_rule_engine/__init__.py +0 -0
  52. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_rule_engine/_aws_partition.py +0 -0
  53. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_rule_engine/_endpoint_rule_set.py +0 -0
  54. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_rule_engine/_endpoint_runtime.py +0 -0
  55. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/_services/_aws_config.py +0 -0
  56. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/errors/__init__.py +0 -0
  57. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/errors/_base.py +0 -0
  58. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/errors/conflict_exception.py +0 -0
  59. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/errors/internal_server_exception.py +0 -0
  60. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/errors/resource_not_found_exception.py +0 -0
  61. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/errors/service_quota_exceeded_exception.py +0 -0
  62. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/errors/throttling_exception.py +0 -0
  63. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/errors/validation_exception.py +0 -0
  64. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/py.typed +0 -0
  65. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/_prelude/blob.py +0 -0
  66. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/_prelude/timestamp.py +0 -0
  67. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/action_group.py +0 -0
  68. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/add_notification_channels_request.py +0 -0
  69. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/add_notification_channels_response.py +0 -0
  70. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/agent_configuration.py +0 -0
  71. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/agent_orchestration_config.py +0 -0
  72. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/agent_parameter_field.py +0 -0
  73. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/agent_parameters.py +0 -0
  74. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/agent_profile.py +0 -0
  75. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/aggregated_profile.py +0 -0
  76. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/aggregated_profile_time.py +0 -0
  77. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/aggregation_period.py +0 -0
  78. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/anomalies.py +0 -0
  79. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/anomaly.py +0 -0
  80. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/anomaly_instance.py +0 -0
  81. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/anomaly_instance_id.py +0 -0
  82. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/anomaly_instances.py +0 -0
  83. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/batch_get_frame_metric_data_request.py +0 -0
  84. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/batch_get_frame_metric_data_response.py +0 -0
  85. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/channel.py +0 -0
  86. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/channel_id.py +0 -0
  87. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/channel_uri.py +0 -0
  88. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/channels.py +0 -0
  89. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/client_token.py +0 -0
  90. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/compute_platform.py +0 -0
  91. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/configure_agent_request.py +0 -0
  92. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/configure_agent_response.py +0 -0
  93. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/create_profiling_group_request.py +0 -0
  94. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/create_profiling_group_response.py +0 -0
  95. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/delete_profiling_group_request.py +0 -0
  96. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/delete_profiling_group_response.py +0 -0
  97. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/describe_profiling_group_request.py +0 -0
  98. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/describe_profiling_group_response.py +0 -0
  99. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/event_publisher.py +0 -0
  100. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/event_publishers.py +0 -0
  101. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/feedback_type.py +0 -0
  102. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/findings_report_id.py +0 -0
  103. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/findings_report_summaries.py +0 -0
  104. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/findings_report_summary.py +0 -0
  105. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/fleet_instance_id.py +0 -0
  106. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/frame_metric.py +0 -0
  107. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/frame_metric_data.py +0 -0
  108. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/frame_metric_datum.py +0 -0
  109. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/frame_metric_value.py +0 -0
  110. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/frame_metric_values.py +0 -0
  111. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/frame_metrics.py +0 -0
  112. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_findings_report_account_summary_request.py +0 -0
  113. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_findings_report_account_summary_response.py +0 -0
  114. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_notification_configuration_request.py +0 -0
  115. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_notification_configuration_response.py +0 -0
  116. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_policy_request.py +0 -0
  117. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_policy_response.py +0 -0
  118. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_profile_request.py +0 -0
  119. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_profile_response.py +0 -0
  120. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_recommendations_request.py +0 -0
  121. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/get_recommendations_response.py +0 -0
  122. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/list_findings_reports_request.py +0 -0
  123. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/list_findings_reports_response.py +0 -0
  124. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/list_of_timestamps.py +0 -0
  125. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/list_profile_times_request.py +0 -0
  126. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/list_profile_times_response.py +0 -0
  127. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/list_profiling_groups_request.py +0 -0
  128. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/list_profiling_groups_response.py +0 -0
  129. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/list_tags_for_resource_request.py +0 -0
  130. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/list_tags_for_resource_response.py +0 -0
  131. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/locale.py +0 -0
  132. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/match.py +0 -0
  133. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/matches.py +0 -0
  134. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/max_depth.py +0 -0
  135. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/max_results.py +0 -0
  136. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/metadata.py +0 -0
  137. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/metadata_field.py +0 -0
  138. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/metric.py +0 -0
  139. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/metric_type.py +0 -0
  140. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/notification_configuration.py +0 -0
  141. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/order_by.py +0 -0
  142. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/pagination_token.py +0 -0
  143. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/pattern.py +0 -0
  144. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/percentage.py +0 -0
  145. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/period.py +0 -0
  146. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/post_agent_profile_request.py +0 -0
  147. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/post_agent_profile_response.py +0 -0
  148. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/principal.py +0 -0
  149. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/principals.py +0 -0
  150. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/profile_time.py +0 -0
  151. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/profile_times.py +0 -0
  152. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/profiling_group_arn.py +0 -0
  153. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/profiling_group_description.py +0 -0
  154. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/profiling_group_descriptions.py +0 -0
  155. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/profiling_group_name.py +0 -0
  156. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/profiling_group_names.py +0 -0
  157. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/profiling_status.py +0 -0
  158. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/put_permission_request.py +0 -0
  159. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/put_permission_response.py +0 -0
  160. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/recommendation.py +0 -0
  161. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/recommendations.py +0 -0
  162. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/remove_notification_channel_request.py +0 -0
  163. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/remove_notification_channel_response.py +0 -0
  164. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/remove_permission_request.py +0 -0
  165. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/remove_permission_response.py +0 -0
  166. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/revision_id.py +0 -0
  167. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/strings.py +0 -0
  168. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/submit_feedback_request.py +0 -0
  169. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/submit_feedback_response.py +0 -0
  170. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/tag_keys.py +0 -0
  171. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/tag_resource_request.py +0 -0
  172. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/tag_resource_response.py +0 -0
  173. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/tags_map.py +0 -0
  174. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/target_frame.py +0 -0
  175. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/target_frames.py +0 -0
  176. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/thread_states.py +0 -0
  177. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/timestamp.py +0 -0
  178. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/timestamp_structure.py +0 -0
  179. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/unprocessed_end_time_map.py +0 -0
  180. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/untag_resource_request.py +0 -0
  181. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/untag_resource_response.py +0 -0
  182. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/update_profiling_group_request.py +0 -0
  183. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/update_profiling_group_response.py +0 -0
  184. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler/types/user_feedback.py +0 -0
  185. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler.egg-info/SOURCES.txt +0 -0
  186. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler.egg-info/dependency_links.txt +0 -0
  187. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/src/capo_codeguruprofiler.egg-info/top_level.txt +0 -0
  188. {capo_codeguruprofiler-0.6.0 → capo_codeguruprofiler-0.8.0}/tests/test_body.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: capo-codeguruprofiler
3
- Version: 0.6.0
3
+ Version: 0.8.0
4
4
  Summary: Python SDK for AWS Codeguruprofiler.
5
5
  Classifier: Development Status :: 4 - Beta
6
6
  Classifier: Intended Audience :: Developers
@@ -17,7 +17,7 @@ Classifier: Typing :: Typed
17
17
  Requires-Python: >=3.10
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: zapros>=0.13.0
20
+ Requires-Dist: zapros>=0.21.0
21
21
  Provides-Extra: anyio
22
22
  Requires-Dist: anyio>=3.0; extra == "anyio"
23
23
  Provides-Extra: sso
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "capo-codeguruprofiler"
3
- version = "0.6.0"
3
+ version = "0.8.0"
4
4
  description = "Python SDK for AWS Codeguruprofiler."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -19,7 +19,7 @@ classifiers = [
19
19
  "Typing :: Typed",
20
20
  ]
21
21
  dependencies = [
22
- "zapros>=0.13.0",
22
+ "zapros>=0.21.0",
23
23
  ]
24
24
 
25
25
  [project.optional-dependencies]
@@ -17,7 +17,7 @@ import hmac
17
17
  import re
18
18
  from collections.abc import AsyncIterator, Iterator
19
19
  from typing import Any, Literal, TypedDict, cast
20
- from urllib.parse import quote, unquote
20
+ from urllib.parse import quote
21
21
 
22
22
  import zapros
23
23
  from pywhatwgurl import URLSearchParams
@@ -134,11 +134,11 @@ def _remove_dot_segments(path: str) -> str:
134
134
  def _canonical_path(path: str, *, double_encode: bool, normalize: bool) -> str:
135
135
  """Build CanonicalURI.
136
136
 
137
- Per the SigV4 spec, every segment is URI-encoded; standard services
138
- normalize dot segments and URI-encode each segment **twice**. The
139
- rules-engine ``disableNormalizePath`` / ``disableDoubleEncoding`` flags
140
- turn those steps off — S3-family services set both, so the path is
141
- signed exactly as provided.
137
+ ``path`` is the path as sent on the wire, so it is already URI-encoded
138
+ once. Standard services normalize dot segments and URI-encode each
139
+ segment a second time. The rules-engine ``disableNormalizePath`` /
140
+ ``disableDoubleEncoding`` flags turn those steps off — S3-family
141
+ services set both, so the path is signed exactly as provided.
142
142
  """
143
143
  if not path:
144
144
  return "/"
@@ -148,9 +148,9 @@ def _canonical_path(path: str, *, double_encode: bool, normalize: bool) -> str:
148
148
  path = _remove_dot_segments(path)
149
149
  if not double_encode:
150
150
  return path
151
- decoded = unquote(path)
152
- first = quote(decoded, safe="/~")
153
- return quote(first, safe="/~")
151
+ # Never decode first: that would turn a "%2F" inside a segment (an ARN in
152
+ # a path label) into a separator and leave it out of the second encoding.
153
+ return quote(path, safe="/~")
154
154
 
155
155
 
156
156
  def _canonical_query(query: str) -> str:
@@ -141,7 +141,11 @@ def build_request(
141
141
  allow_nan=False,
142
142
  ).encode()
143
143
  headers["content-type"] = "application/json"
144
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
144
+ signer = (
145
+ None
146
+ if options.anonymous
147
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
148
+ )
145
149
  normalized_url = zapros.URL(url)
146
150
  for k, v in params:
147
151
  normalized_url.search_params.append(k, v)
@@ -158,7 +158,11 @@ def build_request(
158
158
  allow_nan=False,
159
159
  ).encode()
160
160
  headers["content-type"] = "application/json"
161
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
161
+ signer = (
162
+ None
163
+ if options.anonymous
164
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
165
+ )
162
166
  normalized_url = zapros.URL(url)
163
167
  for k, v in params:
164
168
  normalized_url.search_params.append(k, v)
@@ -133,7 +133,11 @@ def build_request(
133
133
  allow_nan=False,
134
134
  ).encode()
135
135
  headers["content-type"] = "application/json"
136
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
136
+ signer = (
137
+ None
138
+ if options.anonymous
139
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
140
+ )
137
141
  normalized_url = zapros.URL(url)
138
142
  for k, v in params:
139
143
  normalized_url.search_params.append(k, v)
@@ -136,7 +136,11 @@ def build_request(
136
136
  allow_nan=False,
137
137
  ).encode()
138
138
  headers["content-type"] = "application/json"
139
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
139
+ signer = (
140
+ None
141
+ if options.anonymous
142
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
143
+ )
140
144
  normalized_url = zapros.URL(url)
141
145
  for k, v in params:
142
146
  normalized_url.search_params.append(k, v)
@@ -121,7 +121,11 @@ def build_request(
121
121
  params: list[tuple[str, str]] = []
122
122
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
123
123
  body: bytes | None = b""
124
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
124
+ signer = (
125
+ None
126
+ if options.anonymous
127
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
128
+ )
125
129
  normalized_url = zapros.URL(url)
126
130
  for k, v in params:
127
131
  normalized_url.search_params.append(k, v)
@@ -125,7 +125,11 @@ def build_request(
125
125
  params: list[tuple[str, str]] = []
126
126
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
127
127
  body: bytes | None = b""
128
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
128
+ signer = (
129
+ None
130
+ if options.anonymous
131
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
132
+ )
129
133
  normalized_url = zapros.URL(url)
130
134
  for k, v in params:
131
135
  normalized_url.search_params.append(k, v)
@@ -120,7 +120,11 @@ def build_request(
120
120
  )
121
121
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
122
122
  body: bytes | None = b""
123
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
123
+ signer = (
124
+ None
125
+ if options.anonymous
126
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
127
+ )
124
128
  normalized_url = zapros.URL(url)
125
129
  for k, v in params:
126
130
  normalized_url.search_params.append(k, v)
@@ -124,7 +124,11 @@ def build_request(
124
124
  params: list[tuple[str, str]] = []
125
125
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
126
126
  body: bytes | None = b""
127
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
127
+ signer = (
128
+ None
129
+ if options.anonymous
130
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
131
+ )
128
132
  normalized_url = zapros.URL(url)
129
133
  for k, v in params:
130
134
  normalized_url.search_params.append(k, v)
@@ -119,7 +119,11 @@ def build_request(
119
119
  params: list[tuple[str, str]] = []
120
120
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
121
121
  body: bytes | None = b""
122
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
122
+ signer = (
123
+ None
124
+ if options.anonymous
125
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
126
+ )
123
127
  normalized_url = zapros.URL(url)
124
128
  for k, v in params:
125
129
  normalized_url.search_params.append(k, v)
@@ -154,7 +154,11 @@ def build_request(
154
154
  if "accept" in input_:
155
155
  headers["Accept"] = input_["accept"]
156
156
  body: bytes | None = b""
157
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
157
+ signer = (
158
+ None
159
+ if options.anonymous
160
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
161
+ )
158
162
  normalized_url = zapros.URL(url)
159
163
  for k, v in params:
160
164
  normalized_url.search_params.append(k, v)
@@ -152,7 +152,11 @@ def build_request(
152
152
  params.append(("locale", input_["locale"]))
153
153
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
154
154
  body: bytes | None = b""
155
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
155
+ signer = (
156
+ None
157
+ if options.anonymous
158
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
159
+ )
156
160
  normalized_url = zapros.URL(url)
157
161
  for k, v in params:
158
162
  normalized_url.search_params.append(k, v)
@@ -153,7 +153,11 @@ def build_request(
153
153
  )
154
154
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
155
155
  body: bytes | None = b""
156
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
156
+ signer = (
157
+ None
158
+ if options.anonymous
159
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
160
+ )
157
161
  normalized_url = zapros.URL(url)
158
162
  for k, v in params:
159
163
  normalized_url.search_params.append(k, v)
@@ -152,7 +152,11 @@ def build_request(
152
152
  params.append(("nextToken", input_["next_token"]))
153
153
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
154
154
  body: bytes | None = b""
155
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
155
+ signer = (
156
+ None
157
+ if options.anonymous
158
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
159
+ )
156
160
  normalized_url = zapros.URL(url)
157
161
  for k, v in params:
158
162
  normalized_url.search_params.append(k, v)
@@ -116,7 +116,11 @@ def build_request(
116
116
  )
117
117
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
118
118
  body: bytes | None = b""
119
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
119
+ signer = (
120
+ None
121
+ if options.anonymous
122
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
123
+ )
120
124
  normalized_url = zapros.URL(url)
121
125
  for k, v in params:
122
126
  normalized_url.search_params.append(k, v)
@@ -114,7 +114,11 @@ def build_request(
114
114
  params: list[tuple[str, str]] = []
115
115
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
116
116
  body: bytes | None = b""
117
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
117
+ signer = (
118
+ None
119
+ if options.anonymous
120
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
121
+ )
118
122
  normalized_url = zapros.URL(url)
119
123
  for k, v in params:
120
124
  normalized_url.search_params.append(k, v)
@@ -124,7 +124,11 @@ def build_request(
124
124
  headers["Content-Type"] = input_["content_type"]
125
125
  body: bytes | None = input_["agent_profile"]
126
126
  headers["content-type"] = "application/octet-stream"
127
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
127
+ signer = (
128
+ None
129
+ if options.anonymous
130
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
131
+ )
128
132
  normalized_url = zapros.URL(url)
129
133
  for k, v in params:
130
134
  normalized_url.search_params.append(k, v)
@@ -138,7 +138,11 @@ def build_request(
138
138
  allow_nan=False,
139
139
  ).encode()
140
140
  headers["content-type"] = "application/json"
141
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
141
+ signer = (
142
+ None
143
+ if options.anonymous
144
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
145
+ )
142
146
  normalized_url = zapros.URL(url)
143
147
  for k, v in params:
144
148
  normalized_url.search_params.append(k, v)
@@ -125,7 +125,11 @@ def build_request(
125
125
  params: list[tuple[str, str]] = []
126
126
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
127
127
  body: bytes | None = b""
128
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
128
+ signer = (
129
+ None
130
+ if options.anonymous
131
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
132
+ )
129
133
  normalized_url = zapros.URL(url)
130
134
  for k, v in params:
131
135
  normalized_url.search_params.append(k, v)
@@ -131,7 +131,11 @@ def build_request(
131
131
  params.append(("revisionId", input_["revision_id"]))
132
132
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
133
133
  body: bytes | None = b""
134
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
134
+ signer = (
135
+ None
136
+ if options.anonymous
137
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
138
+ )
135
139
  normalized_url = zapros.URL(url)
136
140
  for k, v in params:
137
141
  normalized_url.search_params.append(k, v)
@@ -126,7 +126,11 @@ def build_request(
126
126
  allow_nan=False,
127
127
  ).encode()
128
128
  headers["content-type"] = "application/json"
129
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
129
+ signer = (
130
+ None
131
+ if options.anonymous
132
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
133
+ )
130
134
  normalized_url = zapros.URL(url)
131
135
  for k, v in params:
132
136
  normalized_url.search_params.append(k, v)
@@ -114,7 +114,11 @@ def build_request(
114
114
  allow_nan=False,
115
115
  ).encode()
116
116
  headers["content-type"] = "application/json"
117
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
117
+ signer = (
118
+ None
119
+ if options.anonymous
120
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
121
+ )
118
122
  normalized_url = zapros.URL(url)
119
123
  for k, v in params:
120
124
  normalized_url.search_params.append(k, v)
@@ -112,7 +112,11 @@ def build_request(
112
112
  params.append(("tagKeys", item))
113
113
  headers: dict[str, str] = {k: ", ".join(v) for k, v in endpoint.headers.items()}
114
114
  body: bytes | None = b""
115
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
115
+ signer = (
116
+ None
117
+ if options.anonymous
118
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
119
+ )
116
120
  normalized_url = zapros.URL(url)
117
121
  for k, v in params:
118
122
  normalized_url.search_params.append(k, v)
@@ -137,7 +137,11 @@ def build_request(
137
137
  allow_nan=False,
138
138
  ).encode()
139
139
  headers["content-type"] = "application/json"
140
- signer = get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
140
+ signer = (
141
+ None
142
+ if options.anonymous
143
+ else get_signer(options, auth_schemes=endpoint.properties.get("authSchemes"))
144
+ )
141
145
  normalized_url = zapros.URL(url)
142
146
  for k, v in params:
143
147
  normalized_url.search_params.append(k, v)
@@ -40,6 +40,7 @@ class OperationOptions:
40
40
  endpoint: str | None = None
41
41
  retry_max_attempts: int | None = None
42
42
  credentials_provider: IdentityProvider[Credentials] | None = None
43
+ anonymous: bool | None = None
43
44
 
44
45
 
45
46
  @dataclass
@@ -51,6 +52,7 @@ class AsyncOperationOptions:
51
52
  endpoint: str | None = None
52
53
  retry_max_attempts: int | None = None
53
54
  credentials_provider: IdentityProvider[Credentials] | None = None
55
+ anonymous: bool | None = None
54
56
 
55
57
 
56
58
  @dataclass
@@ -116,6 +116,7 @@ class AsyncCodeGuruProfilerClientConfig(TypedDict, total=False, closed=True):
116
116
  use_fips: bool | None
117
117
  endpoint: str | None
118
118
  credentials_provider: IdentityProvider[Credentials] | None
119
+ anonymous: bool | None
119
120
 
120
121
 
121
122
  class AsyncCodeGuruProfilerClient:
@@ -131,6 +132,7 @@ class AsyncCodeGuruProfilerClient:
131
132
  endpoint: The value of the ``SDK::Endpoint`` endpoint parameter.
132
133
  credentials: AWS credentials for request signing.
133
134
  credentials_provider: Provider that resolves AWS credentials. Takes precedence over ``credentials``.
135
+ anonymous: Send requests unsigned, without resolving credentials, even for operations that require authentication.
134
136
  """
135
137
 
136
138
  def __init__(
@@ -144,10 +146,14 @@ class AsyncCodeGuruProfilerClient:
144
146
  endpoint: str | None = None,
145
147
  credentials: Credentials | None = None,
146
148
  credentials_provider: CredentialsProvider | None = None,
149
+ anonymous: bool | None = None,
147
150
  ):
148
- self._client = AsyncClient(http_handler).wrap_with_middleware(
149
- lambda next: AuthMiddleware(next)
150
- )
151
+ client = AsyncClient(http_handler)
152
+ # The handler the user gave us, or the default one for this environment.
153
+ # The SDK middlewares wrap it below, and the credential resolvers borrow
154
+ # it for their one-off calls.
155
+ raw_handler = client.handler
156
+ self._client = client.wrap_with_middleware(lambda next: AuthMiddleware(next))
151
157
  if credentials is not None and credentials_provider is not None:
152
158
  warnings.warn(
153
159
  "Both credentials and credentials_provider given; provider takes precedence"
@@ -159,7 +165,7 @@ class AsyncCodeGuruProfilerClient:
159
165
  resolved_credentials_provider = StaticAwsCredentialsProvider(credentials)
160
166
  if resolved_credentials_provider is None and credentials is None:
161
167
  resolved_credentials_provider = default_aws_credentials_chain(
162
- AsyncClient(http_handler)
168
+ AsyncClient(raw_handler)
163
169
  )
164
170
  self._config = AsyncCodeGuruProfilerClientConfig(
165
171
  {
@@ -170,6 +176,7 @@ class AsyncCodeGuruProfilerClient:
170
176
  "use_fips": use_fips,
171
177
  "endpoint": endpoint,
172
178
  "credentials_provider": resolved_credentials_provider,
179
+ "anonymous": anonymous,
173
180
  }
174
181
  )
175
182
 
@@ -201,6 +208,7 @@ class AsyncCodeGuruProfilerClient:
201
208
  credentials_provider=overrides.get(
202
209
  "credentials_provider", self._config.get("credentials_provider")
203
210
  ),
211
+ anonymous=overrides.get("anonymous", self._config.get("anonymous")),
204
212
  )
205
213
  return interceptors_, options_
206
214
 
@@ -116,6 +116,7 @@ class CodeGuruProfilerClientConfig(TypedDict, total=False, closed=True):
116
116
  use_fips: bool | None
117
117
  endpoint: str | None
118
118
  credentials_provider: IdentityProvider[Credentials] | None
119
+ anonymous: bool | None
119
120
 
120
121
 
121
122
  class CodeGuruProfilerClient:
@@ -131,6 +132,7 @@ class CodeGuruProfilerClient:
131
132
  endpoint: The value of the ``SDK::Endpoint`` endpoint parameter.
132
133
  credentials: AWS credentials for request signing.
133
134
  credentials_provider: Provider that resolves AWS credentials. Takes precedence over ``credentials``.
135
+ anonymous: Send requests unsigned, without resolving credentials, even for operations that require authentication.
134
136
  """
135
137
 
136
138
  def __init__(
@@ -144,10 +146,14 @@ class CodeGuruProfilerClient:
144
146
  endpoint: str | None = None,
145
147
  credentials: Credentials | None = None,
146
148
  credentials_provider: CredentialsProvider | None = None,
149
+ anonymous: bool | None = None,
147
150
  ):
148
- self._client = Client(http_handler).wrap_with_middleware(
149
- lambda next: AuthMiddleware(next)
150
- )
151
+ client = Client(http_handler)
152
+ # The handler the user gave us, or the default one for this environment.
153
+ # The SDK middlewares wrap it below, and the credential resolvers borrow
154
+ # it for their one-off calls.
155
+ raw_handler = client.handler
156
+ self._client = client.wrap_with_middleware(lambda next: AuthMiddleware(next))
151
157
  if credentials is not None and credentials_provider is not None:
152
158
  warnings.warn(
153
159
  "Both credentials and credentials_provider given; provider takes precedence"
@@ -159,7 +165,7 @@ class CodeGuruProfilerClient:
159
165
  resolved_credentials_provider = StaticAwsCredentialsProvider(credentials)
160
166
  if resolved_credentials_provider is None and credentials is None:
161
167
  resolved_credentials_provider = default_aws_credentials_chain(
162
- Client(http_handler)
168
+ Client(raw_handler)
163
169
  )
164
170
  self._config = CodeGuruProfilerClientConfig(
165
171
  {
@@ -170,6 +176,7 @@ class CodeGuruProfilerClient:
170
176
  "use_fips": use_fips,
171
177
  "endpoint": endpoint,
172
178
  "credentials_provider": resolved_credentials_provider,
179
+ "anonymous": anonymous,
173
180
  }
174
181
  )
175
182
 
@@ -201,6 +208,7 @@ class CodeGuruProfilerClient:
201
208
  credentials_provider=overrides.get(
202
209
  "credentials_provider", self._config.get("credentials_provider")
203
210
  ),
211
+ anonymous=overrides.get("anonymous", self._config.get("anonymous")),
204
212
  )
205
213
  return interceptors_, options_
206
214
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: capo-codeguruprofiler
3
- Version: 0.6.0
3
+ Version: 0.8.0
4
4
  Summary: Python SDK for AWS Codeguruprofiler.
5
5
  Classifier: Development Status :: 4 - Beta
6
6
  Classifier: Intended Audience :: Developers
@@ -17,7 +17,7 @@ Classifier: Typing :: Typed
17
17
  Requires-Python: >=3.10
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: zapros>=0.13.0
20
+ Requires-Dist: zapros>=0.21.0
21
21
  Provides-Extra: anyio
22
22
  Requires-Dist: anyio>=3.0; extra == "anyio"
23
23
  Provides-Extra: sso
@@ -1,4 +1,4 @@
1
- zapros>=0.13.0
1
+ zapros>=0.21.0
2
2
 
3
3
  [anyio]
4
4
  anyio>=3.0
@@ -91,13 +91,28 @@ class TestCanonicalPath:
91
91
  def test_s3_preserves_dot_segments(self):
92
92
  assert _s3_path("/a/../b/./c") == "/a/../b/./c"
93
93
 
94
- def test_non_s3_double_encodes(self):
95
- # "/foo bar" → first encode → "/foo%20bar" → second → "/foo%2520bar"
96
- assert _std_path("/foo bar") == "/foo%2520bar"
97
-
98
- def test_non_s3_already_encoded_double_encodes(self):
99
- # "/foo%20bar" gets unquoted to "/foo bar", then double-encoded.
94
+ def test_non_s3_encodes_wire_path_once_more(self):
95
+ # The path arrives URI-encoded once ("/foo bar" is sent as "/foo%20bar").
100
96
  assert _std_path("/foo%20bar") == "/foo%2520bar"
97
+ assert _std_path("/a%3Ab/caf%C3%A9~") == "/a%253Ab/caf%25C3%25A9~"
98
+
99
+ def test_non_s3_keeps_encoded_slash_inside_segment(self):
100
+ # An ARN in a path label: its "/" is sent as "%2F" and must stay part
101
+ # of the segment, not become a separator.
102
+ assert (
103
+ _std_path("/model/arn%3Aaws%3Abedrock%3A%3Afoundation-model%2Fx/converse")
104
+ == "/model/arn%253Aaws%253Abedrock%253A%253Afoundation-model%252Fx/converse"
105
+ )
106
+ assert _s3_path("/bucket/a%2Fb") == "/bucket/a%2Fb"
107
+
108
+ def test_non_s3_encodes_literal_reserved_characters_once(self):
109
+ # "@" and "$" appear literally in a few URI templates and are sent as is.
110
+ assert _std_path("/@connections/abc") == "/%40connections/abc"
111
+ assert _std_path("/things/t/jobs/$next") == "/things/t/jobs/%24next"
112
+
113
+ def test_non_s3_does_not_decode_the_wire_path(self):
114
+ assert _std_path("/a%2fb") == "/a%252fb"
115
+ assert _std_path("/a%25b") == "/a%2525b"
101
116
 
102
117
  def test_non_s3_removes_dot_segments(self):
103
118
  # Mirrors botocore's normalize_url_path: "." dropped, ".." pops,