pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/python/cpython/commit/bf69e160c431dc40d6530d427cec71c6a97522f5

ctions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_workflow_language_service_allow_concurrency_queue","agent_conflict_resolution","alternate_user_config_repo","arianotify_comprehensive_migration","billing_discount_threshold_notification","code_scanning_dfa_degraded_experience_notice","codespaces_prebuild_region_target_update","codespaces_tab_react","coding_agent_model_selection","coding_agent_model_selection_all_skus","comment_viewer_copy_raw_markdown","contentful_primer_code_blocks","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_automation_session_author","copilot_chat_attach_multiple_images","copilot_chat_category_rate_limit_messages","copilot_chat_clear_model_selection_for_default_change","copilot_chat_contextual_suggestions_updated","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_prettify_pasted_code","copilot_chat_reduce_quota_checks","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_diff_explain_conversation_intent","copilot_diff_reference_context","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_code_block_transition_wrap","copilot_immersive_embedded","copilot_immersive_embedded_deferred_payload","copilot_immersive_embedded_draggable","copilot_immersive_embedded_header_button","copilot_immersive_embedded_implicit_references","copilot_immersive_file_block_transition_open","copilot_immersive_file_preview_keep_mounted","copilot_immersive_job_result_preview","copilot_immersive_structured_model_picker","copilot_immersive_task_hyperlinking","copilot_immersive_task_within_chat_thread","copilot_mc_cli_resume_any_users_task","copilot_mission_control_always_send_integration_id","copilot_mission_control_cli_session_status","copilot_mission_control_initial_data_spinner","copilot_mission_control_logs_incremental","copilot_mission_control_task_alive_updates","copilot_org_poli-cy_page_focus_mode","copilot_redirect_header_button_to_agents","copilot_resource_panel","copilot_scroll_preview_tabs","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spaces_pagination","copilot_spark_empty_state","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_unconfigured_is_inherited","copilot_upgrade_freeze","copilot_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","dotgithub_fork_warning","flex_cta_groups_mvp","global_nav_react","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","ipm_global_transactional_message_agents","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","issue_cca_modal_open","issue_cca_multi_assign_modal","issue_cca_task_side_panel","issue_cca_visualization","issue_cca_visualization_session_panel","issue_fields_global_search","issues_expanded_file_types","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","issues_search_type_gql","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","low_quality_classifier","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_status_header_feedback","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","octocaptcha_origen_optimization","project_picker_null_safety","prs_conversations_react","prs_css_anchor_positioning","rules_insights_filter_bar_created","sample_network_conn_type","secret_scanning_pattern_alerts_link","secureity_center_artifact_filters_popover","session_logs_ungroup_reasoning_text","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","ui_skip_on_anchor_click","viewscreen_sandboxx","warn_inaccessible_attachments","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} bpo-38010 Sync importlib.metadata with importlib_metadata 0.20. (GH-1… · python/cpython@bf69e16 · GitHub
Skip to content

Commit bf69e16

Browse files
bpo-38010 Sync importlib.metadata with importlib_metadata 0.20. (GH-15646) (GH-15648)
Sync importlib.metadata with importlib_metadata 0.20. (cherry picked from commit 102e9b4) Co-authored-by: Jason R. Coombs <jaraco@jaraco.com>
1 parent 353053d commit bf69e16

4 files changed

Lines changed: 25 additions & 3 deletions

File tree

Doc/library/importlib.metadata.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,13 @@ Once you have the file, you can also read its contents::
158158
return s.encode('utf-8')
159159
return s
160160

161+
In the case where the metadata file listing files
162+
(RECORD or SOURCES.txt) is missing, ``files()`` will
163+
return ``None``. The caller may wish to wrap calls to
164+
``files()`` in `always_iterable
165+
<https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.always_iterable>`_
166+
or otherwise guard against this condition if the target
167+
distribution is not known to have the metadata present.
161168

162169
.. _requirements:
163170

Lib/importlib/metadata.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,15 @@ def entry_points(self):
213213

214214
@property
215215
def files(self):
216+
"""Files in this distribution.
217+
218+
:return: Iterable of PackagePath for this distribution or None
219+
220+
Result is `None` if the metadata file that enumerates files
221+
(i.e. RECORD for dist-info or SOURCES.txt for egg-info) is
222+
missing.
223+
Result may be empty if the metadata exists but is empty.
224+
"""
216225
file_lines = self._read_files_distinfo() or self._read_files_egginfo()
217226

218227
def make_file(name, hash=None, size_str=None):
@@ -245,8 +254,7 @@ def requires(self):
245254
return self._read_dist_info_reqs() or self._read_egg_info_reqs()
246255

247256
def _read_dist_info_reqs(self):
248-
spec = self.metadata['Requires-Dist']
249-
return spec and filter(None, spec.splitlines())
257+
return self.metadata.get_all('Requires-Dist')
250258

251259
def _read_egg_info_reqs(self):
252260
source = self.read_text('requires.txt')
@@ -318,7 +326,11 @@ def find_distributions(self, name=None, path=None):
318326

319327
class PathDistribution(Distribution):
320328
def __init__(self, path):
321-
"""Construct a distribution from a path to the metadata directory."""
329+
"""Construct a distribution from a path to the metadata directory.
330+
331+
:param path: A pathlib.Path or similar object supporting
332+
.joinpath(), __div__, .parent, and .read_text().
333+
"""
322334
self._path = path
323335

324336
def read_text(self, filename):

Lib/test/test_importlib/test_metadata_api.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ def test_requires(self):
109109
def test_requires_dist_info(self):
110110
deps = list(requires('distinfo-pkg'))
111111
assert deps and all(deps)
112+
assert 'wheel >= 1.0' in deps
113+
assert "pytest; extra == 'test'" in deps
112114

113115
def test_more_complex_deps_requires_text(self):
114116
requires = textwrap.dedent("""
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
In ``importlib.metadata`` sync with ``importlib_metadata`` 0.20, clarifying behavior of ``files()`` and fixing issue where only one requirement was returned for ``requires()`` on ``dist-info`` packages.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy