https://github.com/python/cpython/commit/9da7923835a4c72e738551bbd78b8179a81286ad
commit: 9da7923835a4c72e738551bbd78b8179a81286ad
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-05-24T15:03:45+03:00
summary:

gh-150285: Fix too long docstrings in the pyexpat module (GH-150294)

files:
M Modules/clinic/pyexpat.c.h
M Modules/pyexpat.c

diff --git a/Modules/clinic/pyexpat.c.h b/Modules/clinic/pyexpat.c.h
index ff2e28269dc927..1a07726d303eca 100644
--- a/Modules/clinic/pyexpat.c.h
+++ b/Modules/clinic/pyexpat.c.h
@@ -218,8 +218,9 @@ PyDoc_STRVAR(pyexpat_xmlparser_GetInputContext__doc__,
 "\n"
 "Return the untranslated text of the input that caused the current event.\n"
 "\n"
-"If the event was generated by a large amount of text (such as a start tag\n"
-"for an element with many attributes), not all of the text may be available.");
+"If the event was generated by a large amount of text (such as\n"
+"a start tag for an element with many attributes), not all of the\n"
+"text may be available.");
 
 #define PYEXPAT_XMLPARSER_GETINPUTCONTEXT_METHODDEF    \
     {"GetInputContext", (PyCFunction)pyexpat_xmlparser_GetInputContext, 
METH_NOARGS, pyexpat_xmlparser_GetInputContext__doc__},
@@ -357,9 +358,10 @@ PyDoc_STRVAR(pyexpat_xmlparser_UseForeignDTD__doc__,
 "\n"
 "Allows the application to provide an artificial external subset if one is not 
specified as part of the document instance.\n"
 "\n"
-"This readily allows the use of a \'default\' document type controlled by 
the\n"
-"application, while still getting the advantage of providing document type\n"
-"information to the parser. \'flag\' defaults to True if not provided.");
+"This readily allows the use of a \'default\' document type controlled\n"
+"by the application, while still getting the advantage of providing\n"
+"document type information to the parser.  \'flag\' defaults to True if\n"
+"not provided.");
 
 #define PYEXPAT_XMLPARSER_USEFOREIGNDTD_METHODDEF    \
     {"UseForeignDTD", _PyCFunction_CAST(pyexpat_xmlparser_UseForeignDTD), 
METH_METHOD|METH_FASTCALL|METH_KEYWORDS, 
pyexpat_xmlparser_UseForeignDTD__doc__},
@@ -417,14 +419,15 @@ 
PyDoc_STRVAR(pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThresho
 "\n"
 "Sets the number of output bytes needed to activate protection against billion 
laughs attacks.\n"
 "\n"
-"The number of output bytes includes amplification from entity expansion\n"
-"and reading DTD files.\n"
+"The number of output bytes includes amplification from entity\n"
+"expansion and reading DTD files.\n"
 "\n"
-"Parser objects usually have a protection activation threshold of 8 MiB,\n"
-"but the actual default value depends on the underlying Expat library.\n"
+"Parser objects usually have a protection activation threshold of\n"
+"8 MiB, but the actual default value depends on the underlying Expat\n"
+"library.\n"
 "\n"
-"Activation thresholds below 4 MiB are known to break support for DITA 1.3\n"
-"payload and are hence not recommended.");
+"Activation thresholds below 4 MiB are known to break support for\n"
+"DITA 1.3 payload and are hence not recommended.");
 
 #define 
PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONACTIVATIONTHRESHOLD_METHODDEF 
   \
     {"SetBillionLaughsAttackProtectionActivationThreshold", 
_PyCFunction_CAST(pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold),
 METH_METHOD|METH_FASTCALL|METH_KEYWORDS, 
pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold__doc__},
@@ -479,18 +482,21 @@ 
PyDoc_STRVAR(pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplificat
 "\n"
 "Sets the maximum tolerated amplification factor for protection against 
billion laughs attacks.\n"
 "\n"
-"The amplification factor is calculated as \"(direct + indirect) / direct\"\n"
-"while parsing, where \"direct\" is the number of bytes read from the 
primary\n"
-"document in parsing and \"indirect\" is the number of bytes added by 
expanding\n"
-"entities and reading external DTD files, combined.\n"
+"The amplification factor is calculated as \"(direct + indirect) /\n"
+"direct\" while parsing, where \"direct\" is the number of bytes read\n"
+"from the primary document in parsing and \"indirect\" is the number of\n"
+"bytes added by expanding entities and reading external DTD files,\n"
+"combined.\n"
 "\n"
-"The \'max_factor\' value must be a non-NaN floating point value greater 
than\n"
-"or equal to 1.0. Amplification factors greater than 30,000 can be observed\n"
-"in the middle of parsing even with benign files in practice. In particular,\n"
-"the activation threshold should be carefully chosen to avoid false 
positives.\n"
+"The \'max_factor\' value must be a non-NaN floating point value\n"
+"greater than or equal to 1.0.  Amplification factors greater than\n"
+"30,000 can be observed in the middle of parsing even with benign\n"
+"files in practice.  In particular, the activation threshold should\n"
+"be carefully chosen to avoid false positives.\n"
 "\n"
 "Parser objects usually have a maximum amplification factor of 100,\n"
-"but the actual default value depends on the underlying Expat library.");
+"but the actual default value depends on the underlying Expat\n"
+"library.");
 
 #define 
PYEXPAT_XMLPARSER_SETBILLIONLAUGHSATTACKPROTECTIONMAXIMUMAMPLIFICATION_METHODDEF
    \
     {"SetBillionLaughsAttackProtectionMaximumAmplification", 
_PyCFunction_CAST(pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification),
 METH_METHOD|METH_FASTCALL|METH_KEYWORDS, 
pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification__doc__},
@@ -551,8 +557,9 @@ 
PyDoc_STRVAR(pyexpat_xmlparser_SetAllocTrackerActivationThreshold__doc__,
 "\n"
 "Sets the number of allocated bytes of dynamic memory needed to activate 
protection against disproportionate use of RAM.\n"
 "\n"
-"Parser objects usually have an allocation activation threshold of 64 MiB,\n"
-"but the actual default value depends on the underlying Expat library.");
+"Parser objects usually have an allocation activation threshold of\n"
+"64 MiB, but the actual default value depends on the underlying Expat\n"
+"library.");
 
 #define PYEXPAT_XMLPARSER_SETALLOCTRACKERACTIVATIONTHRESHOLD_METHODDEF    \
     {"SetAllocTrackerActivationThreshold", 
_PyCFunction_CAST(pyexpat_xmlparser_SetAllocTrackerActivationThreshold), 
METH_METHOD|METH_FASTCALL|METH_KEYWORDS, 
pyexpat_xmlparser_SetAllocTrackerActivationThreshold__doc__},
@@ -606,18 +613,20 @@ 
PyDoc_STRVAR(pyexpat_xmlparser_SetAllocTrackerMaximumAmplification__doc__,
 "\n"
 "Sets the maximum amplification factor between direct input and bytes of 
dynamic memory allocated.\n"
 "\n"
-"The amplification factor is calculated as \"allocated / direct\" while 
parsing,\n"
-"where \"direct\" is the number of bytes read from the primary document in 
parsing\n"
-"and \"allocated\" is the number of bytes of dynamic memory allocated in the 
parser\n"
-"hierarchy.\n"
+"The amplification factor is calculated as \"allocated / direct\" while\n"
+"parsing, where \"direct\" is the number of bytes read from the primary\n"
+"document in parsing and \"allocated\" is the number of bytes of\n"
+"dynamic memory allocated in the parser hierarchy.\n"
 "\n"
-"The \'max_factor\' value must be a non-NaN floating point value greater 
than\n"
-"or equal to 1.0. Amplification factors greater than 100.0 can be observed\n"
-"near the start of parsing even with benign files in practice. In 
particular,\n"
-"the activation threshold should be carefully chosen to avoid false 
positives.\n"
+"The \'max_factor\' value must be a non-NaN floating point value\n"
+"greater than or equal to 1.0.  Amplification factors greater than\n"
+"100.0 can be observed near the start of parsing even with benign\n"
+"files in practice.  In particular, the activation threshold should\n"
+"be carefully chosen to avoid false positives.\n"
 "\n"
 "Parser objects usually have a maximum amplification factor of 100,\n"
-"but the actual default value depends on the underlying Expat library.");
+"but the actual default value depends on the underlying Expat\n"
+"library.");
 
 #define PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF    \
     {"SetAllocTrackerMaximumAmplification", 
_PyCFunction_CAST(pyexpat_xmlparser_SetAllocTrackerMaximumAmplification), 
METH_METHOD|METH_FASTCALL|METH_KEYWORDS, 
pyexpat_xmlparser_SetAllocTrackerMaximumAmplification__doc__},
@@ -830,4 +839,4 @@ pyexpat_ErrorString(PyObject *module, PyObject *arg)
 #ifndef PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF
     #define PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF
 #endif /* 
!defined(PYEXPAT_XMLPARSER_SETALLOCTRACKERMAXIMUMAMPLIFICATION_METHODDEF) */
-/*[clinic end generated code: output=81101a16a409daf6 input=a9049054013a1b77]*/
+/*[clinic end generated code: output=270a0bfe3300e8a1 input=a9049054013a1b77]*/
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index 64314e5dff93a1..d204b6f27d9908 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -830,6 +830,7 @@ get_parse_result(pyexpat_state *state, xmlparseobject 
*self, int rv)
 #define MAX_CHUNK_SIZE (1 << 20)
 
 /*[clinic input]
+@permit_long_summary
 pyexpat.xmlparser.SetReparseDeferralEnabled
 
     enabled: bool
@@ -841,7 +842,7 @@ Enable/Disable reparse deferral; enabled by default with 
Expat >=2.6.0.
 static PyObject *
 pyexpat_xmlparser_SetReparseDeferralEnabled_impl(xmlparseobject *self,
                                                  int enabled)
-/*[clinic end generated code: output=5ec539e3b63c8c49 input=021eb9e0bafc32c5]*/
+/*[clinic end generated code: output=5ec539e3b63c8c49 input=6d3743500dcee799]*/
 {
 #if XML_COMBINED_VERSION >= 20600
     XML_SetReparseDeferralEnabled(self->itself, enabled ? XML_TRUE : 
XML_FALSE);
@@ -1053,18 +1054,19 @@ pyexpat_xmlparser_GetBase_impl(xmlparseobject *self)
 }
 
 /*[clinic input]
-@permit_long_docstring_body
+@permit_long_summary
 pyexpat.xmlparser.GetInputContext
 
 Return the untranslated text of the input that caused the current event.
 
-If the event was generated by a large amount of text (such as a start tag
-for an element with many attributes), not all of the text may be available.
+If the event was generated by a large amount of text (such as
+a start tag for an element with many attributes), not all of the
+text may be available.
 [clinic start generated code]*/
 
 static PyObject *
 pyexpat_xmlparser_GetInputContext_impl(xmlparseobject *self)
-/*[clinic end generated code: output=a88026d683fc22cc input=925cea010fdfa682]*/
+/*[clinic end generated code: output=a88026d683fc22cc input=a672f48f09bb73d2]*/
 {
     if (self->in_callback) {
         int offset, size;
@@ -1191,7 +1193,6 @@ 
pyexpat_xmlparser_SetParamEntityParsing_impl(xmlparseobject *self, int flag)
 #if XML_COMBINED_VERSION >= 19505
 /*[clinic input]
 @permit_long_summary
-@permit_long_docstring_body
 pyexpat.xmlparser.UseForeignDTD
 
     cls: defining_class
@@ -1200,15 +1201,16 @@ pyexpat.xmlparser.UseForeignDTD
 
 Allows the application to provide an artificial external subset if one is not 
specified as part of the document instance.
 
-This readily allows the use of a 'default' document type controlled by the
-application, while still getting the advantage of providing document type
-information to the parser. 'flag' defaults to True if not provided.
+This readily allows the use of a 'default' document type controlled
+by the application, while still getting the advantage of providing
+document type information to the parser.  'flag' defaults to True if
+not provided.
 [clinic start generated code]*/
 
 static PyObject *
 pyexpat_xmlparser_UseForeignDTD_impl(xmlparseobject *self, PyTypeObject *cls,
                                      int flag)
-/*[clinic end generated code: output=d7d98252bd25a20f input=c2264845d8c0029c]*/
+/*[clinic end generated code: output=d7d98252bd25a20f input=2920baa5bf24714d]*/
 {
     pyexpat_state *state = PyType_GetModuleState(cls);
     enum XML_Error rc;
@@ -1268,7 +1270,6 @@ set_maximum_amplification(xmlparseobject *self,
 #if XML_COMBINED_VERSION >= 20400
 /*[clinic input]
 @permit_long_summary
-@permit_long_docstring_body
 pyexpat.xmlparser.SetBillionLaughsAttackProtectionActivationThreshold
 
     cls: defining_class
@@ -1277,21 +1278,22 @@ 
pyexpat.xmlparser.SetBillionLaughsAttackProtectionActivationThreshold
 
 Sets the number of output bytes needed to activate protection against billion 
laughs attacks.
 
-The number of output bytes includes amplification from entity expansion
-and reading DTD files.
+The number of output bytes includes amplification from entity
+expansion and reading DTD files.
 
-Parser objects usually have a protection activation threshold of 8 MiB,
-but the actual default value depends on the underlying Expat library.
+Parser objects usually have a protection activation threshold of
+8 MiB, but the actual default value depends on the underlying Expat
+library.
 
-Activation thresholds below 4 MiB are known to break support for DITA 1.3
-payload and are hence not recommended.
+Activation thresholds below 4 MiB are known to break support for
+DITA 1.3 payload and are hence not recommended.
 [clinic start generated code]*/
 
 static PyObject *
 
pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold_impl(xmlparseobject
 *self,
                                                                            
PyTypeObject *cls,
                                                                            
unsigned long long threshold)
-/*[clinic end generated code: output=0c082342f1c78114 input=fa2f91f26b62a42a]*/
+/*[clinic end generated code: output=0c082342f1c78114 input=8d84b0e3a873cdba]*/
 {
     return set_activation_threshold(
         self, cls, threshold,
@@ -1303,7 +1305,6 @@ 
pyexpat_xmlparser_SetBillionLaughsAttackProtectionActivationThreshold_impl(xmlpa
 #if XML_COMBINED_VERSION >= 20400
 /*[clinic input]
 @permit_long_summary
-@permit_long_docstring_body
 pyexpat.xmlparser.SetBillionLaughsAttackProtectionMaximumAmplification
 
     cls: defining_class
@@ -1312,25 +1313,28 @@ 
pyexpat.xmlparser.SetBillionLaughsAttackProtectionMaximumAmplification
 
 Sets the maximum tolerated amplification factor for protection against billion 
laughs attacks.
 
-The amplification factor is calculated as "(direct + indirect) / direct"
-while parsing, where "direct" is the number of bytes read from the primary
-document in parsing and "indirect" is the number of bytes added by expanding
-entities and reading external DTD files, combined.
+The amplification factor is calculated as "(direct + indirect) /
+direct" while parsing, where "direct" is the number of bytes read
+from the primary document in parsing and "indirect" is the number of
+bytes added by expanding entities and reading external DTD files,
+combined.
 
-The 'max_factor' value must be a non-NaN floating point value greater than
-or equal to 1.0. Amplification factors greater than 30,000 can be observed
-in the middle of parsing even with benign files in practice. In particular,
-the activation threshold should be carefully chosen to avoid false positives.
+The 'max_factor' value must be a non-NaN floating point value
+greater than or equal to 1.0.  Amplification factors greater than
+30,000 can be observed in the middle of parsing even with benign
+files in practice.  In particular, the activation threshold should
+be carefully chosen to avoid false positives.
 
 Parser objects usually have a maximum amplification factor of 100,
-but the actual default value depends on the underlying Expat library.
+but the actual default value depends on the underlying Expat
+library.
 [clinic start generated code]*/
 
 static PyObject *
 
pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification_impl(xmlparseobject
 *self,
                                                                             
PyTypeObject *cls,
                                                                             
float max_factor)
-/*[clinic end generated code: output=c590439eadf463fa input=cc1e97c1fd2bd950]*/
+/*[clinic end generated code: output=c590439eadf463fa input=d0f11971c5b9e98b]*/
 {
     return set_maximum_amplification(
         self, cls, max_factor,
@@ -1342,7 +1346,6 @@ 
pyexpat_xmlparser_SetBillionLaughsAttackProtectionMaximumAmplification_impl(xmlp
 #if XML_COMBINED_VERSION >= 20702
 /*[clinic input]
 @permit_long_summary
-@permit_long_docstring_body
 pyexpat.xmlparser.SetAllocTrackerActivationThreshold
 
     cls: defining_class
@@ -1351,15 +1354,16 @@ pyexpat.xmlparser.SetAllocTrackerActivationThreshold
 
 Sets the number of allocated bytes of dynamic memory needed to activate 
protection against disproportionate use of RAM.
 
-Parser objects usually have an allocation activation threshold of 64 MiB,
-but the actual default value depends on the underlying Expat library.
+Parser objects usually have an allocation activation threshold of
+64 MiB, but the actual default value depends on the underlying Expat
+library.
 [clinic start generated code]*/
 
 static PyObject *
 pyexpat_xmlparser_SetAllocTrackerActivationThreshold_impl(xmlparseobject *self,
                                                           PyTypeObject *cls,
                                                           unsigned long long 
threshold)
-/*[clinic end generated code: output=bed7e93207ba08c5 input=b7a7a3e3d054286a]*/
+/*[clinic end generated code: output=bed7e93207ba08c5 input=4728360b545de87a]*/
 {
     return set_activation_threshold(
         self, cls, threshold,
@@ -1371,7 +1375,6 @@ 
pyexpat_xmlparser_SetAllocTrackerActivationThreshold_impl(xmlparseobject *self,
 #if XML_COMBINED_VERSION >= 20702
 /*[clinic input]
 @permit_long_summary
-@permit_long_docstring_body
 pyexpat.xmlparser.SetAllocTrackerMaximumAmplification
 
     cls: defining_class
@@ -1380,25 +1383,27 @@ pyexpat.xmlparser.SetAllocTrackerMaximumAmplification
 
 Sets the maximum amplification factor between direct input and bytes of 
dynamic memory allocated.
 
-The amplification factor is calculated as "allocated / direct" while parsing,
-where "direct" is the number of bytes read from the primary document in parsing
-and "allocated" is the number of bytes of dynamic memory allocated in the 
parser
-hierarchy.
+The amplification factor is calculated as "allocated / direct" while
+parsing, where "direct" is the number of bytes read from the primary
+document in parsing and "allocated" is the number of bytes of
+dynamic memory allocated in the parser hierarchy.
 
-The 'max_factor' value must be a non-NaN floating point value greater than
-or equal to 1.0. Amplification factors greater than 100.0 can be observed
-near the start of parsing even with benign files in practice. In particular,
-the activation threshold should be carefully chosen to avoid false positives.
+The 'max_factor' value must be a non-NaN floating point value
+greater than or equal to 1.0.  Amplification factors greater than
+100.0 can be observed near the start of parsing even with benign
+files in practice.  In particular, the activation threshold should
+be carefully chosen to avoid false positives.
 
 Parser objects usually have a maximum amplification factor of 100,
-but the actual default value depends on the underlying Expat library.
+but the actual default value depends on the underlying Expat
+library.
 [clinic start generated code]*/
 
 static PyObject *
 pyexpat_xmlparser_SetAllocTrackerMaximumAmplification_impl(xmlparseobject 
*self,
                                                            PyTypeObject *cls,
                                                            float max_factor)
-/*[clinic end generated code: output=6e44bd48c9b112a0 input=c6af7ccb76ae5c6b]*/
+/*[clinic end generated code: output=6e44bd48c9b112a0 input=dd23ea3ef2069b69]*/
 {
     return set_maximum_amplification(
         self, cls, max_factor,

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to