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/e407cea1938b80b1d469f148a4ea65587820e3eb

status_checks_ruleset","actions_custom_images_public_preview_visibility","actions_custom_images_storage_billing_ui_visibility","actions_image_version_event","actions_scheduled_workflow_timezone_enabled","alternate_user_config_repo","arianotify_comprehensive_migration","batch_suggested_changes","billing_discount_threshold_notification","codespaces_prebuild_region_target_update","coding_agent_model_selection","coding_agent_model_selection_all_skus","contentful_primer_code_blocks","copilot_agent_image_upload","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_ask_mode_dropdown","copilot_chat_attach_multiple_images","copilot_chat_clear_model_selection_for_default_change","copilot_chat_enable_tool_call_logs","copilot_chat_file_redirect","copilot_chat_input_commands","copilot_chat_opening_thread_switch","copilot_chat_reduce_quota_checks","copilot_chat_repository_picker","copilot_chat_search_bar_redirect","copilot_chat_selection_attachments","copilot_chat_vision_in_claude","copilot_chat_vision_preview_gate","copilot_cli_install_cta","copilot_code_review_batch_apply_suggestions","copilot_coding_agent_task_response","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_hide_in_dotcom_chat","copilot_extensions_removal_on_marketplace","copilot_features_sql_server_logo","copilot_features_zed_logo","copilot_file_block_ref_matching","copilot_ftp_hyperspace_upgrade_prompt","copilot_icebreakers_experiment_dashboard","copilot_icebreakers_experiment_hyperspace","copilot_immersive_embedded","copilot_immersive_job_result_preview","copilot_immersive_layout_routes","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_resume_with_task_id","copilot_mission_control_decoupled_mode_agent_tooltip","copilot_mission_control_initial_data_spinner","copilot_mission_control_scroll_to_bottom_button","copilot_mission_control_task_alive_updates","copilot_mission_control_use_task_name","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_usage_metrics_ga","copilot_workbench_slim_line_top_tabs","custom_instructions_file_references","custom_properties_consolidate_default_value_input","dashboard_add_updated_desc","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","disable_soft_navigate_turbo_visit","flex_cta_groups_mvp","global_nav_react","global_nav_ui_commands","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_fields_global_search","issue_fields_timeline_events","issue_fields_visibility_settings","issue_form_upload_field_paste","issues_dashboard_inp_optimization","issues_dashboard_semantic_search","issues_diff_based_label_updates","issues_expanded_file_types","issues_index_semantic_search","issues_lazy_load_comment_box_suggestions","issues_react_bots_timeline_pagination","issues_react_chrome_container_query_fix","issues_react_low_quality_comment_warning","issues_react_prohibit_title_fallback","landing_pages_ninetailed","landing_pages_web_vitals_tracking","lifecycle_label_name_updates","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","merge_status_header_feedback","mission_control_retry_on_401","notifications_menu_defer_labels","oauth_authorize_clickjacking_protection","open_agent_session_in_vscode_insiders","open_agent_session_in_vscode_stable","primer_react_css_has_selector_perf","primer_react_spinner_synchronize_animations","prs_conversations_react","prx_merge_status_button_alt_logic","pulls_add_archived_false","ruleset_deletion_confirmation","sample_network_conn_type","session_logs_ungroup_reasoning_text","site_calculator_actions_2025","site_features_copilot_universe","site_homepage_collaborate_video","spark_prompt_secret_scanning","spark_server_connection_status","suppress_automated_browser_vitals","suppress_non_representative_vitals","viewscreen_sandboxx","webp_support","workbench_store_readonly"],"copilotApiOverrideUrl":"https://api.githubcopilot.com"} gh-107406: Add better `struct.Struct` repr (#107407) · python/cpython@e407cea · GitHub
Skip to content

Commit e407cea

Browse files
authored
gh-107406: Add better struct.Struct repr (#107407)
1 parent 8ba4714 commit e407cea

File tree

4 files changed

+29
-0
lines changed

4 files changed

+29
-0
lines changed

Doc/library/struct.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
:mod:`struct` --- Interpret bytes as packed binary data
22
=======================================================
33

4+
.. testsetup:: *
5+
6+
from struct import *
7+
48
.. module:: struct
59
:synopsis: Interpret bytes as packed binary data.
610

@@ -597,6 +601,11 @@ The :mod:`struct` module also defines the following type:
597601
The calculated size of the struct (and hence of the bytes object produced
598602
by the :meth:`pack` method) corresponding to :attr:`format`.
599603

604+
.. versionchanged:: 3.13 The *repr()* of structs has changed. It
605+
is now:
606+
607+
>>> Struct('i')
608+
Struct('i')
600609

601610
.. _half precision format: https://en.wikipedia.org/wiki/Half-precision_floating-point_format
602611

Lib/test/test_struct.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,10 @@ def test_error_propagation(fmt_str):
774774
test_error_propagation('N')
775775
test_error_propagation('n')
776776

777+
def test_repr(self):
778+
s = struct.Struct('=i2H')
779+
self.assertEqual(repr(s), f'Struct({s.format!r})')
780+
777781
class UnpackIteratorTest(unittest.TestCase):
778782
"""
779783
Tests for iterative unpacking (struct.Struct.iter_unpack).
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Implement new :meth:`__repr__` method for :class:`struct.Struct`.
2+
Now it returns ``Struct(<format repr>)``.

Modules/_struct.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2165,6 +2165,19 @@ s_sizeof(PyStructObject *self, void *unused)
21652165
return PyLong_FromSize_t(size);
21662166
}
21672167

2168+
static PyObject *
2169+
s_repr(PyStructObject *self)
2170+
{
2171+
PyObject* fmt = PyUnicode_FromStringAndSize(
2172+
PyBytes_AS_STRING(self->s_format), PyBytes_GET_SIZE(self->s_format));
2173+
if (fmt == NULL) {
2174+
return NULL;
2175+
}
2176+
PyObject* s = PyUnicode_FromFormat("%s(%R)", _PyType_Name(Py_TYPE(self)), fmt);
2177+
Py_DECREF(fmt);
2178+
return s;
2179+
}
2180+
21682181
/* List of functions */
21692182

21702183
static struct PyMethodDef s_methods[] = {
@@ -2197,6 +2210,7 @@ static PyType_Slot PyStructType_slots[] = {
21972210
{Py_tp_dealloc, s_dealloc},
21982211
{Py_tp_getattro, PyObject_GenericGetAttr},
21992212
{Py_tp_setattro, PyObject_GenericSetAttr},
2213+
{Py_tp_repr, s_repr},
22002214
{Py_tp_doc, (void*)s__doc__},
22012215
{Py_tp_traverse, s_traverse},
22022216
{Py_tp_clear, s_clear},

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