@@ -14,6 +14,174 @@ Changelog
14
14
15
15
.. towncrier release notes start
16
16
17
+ 6.3.0
18
+ =====
19
+
20
+ *(2025-03-31) *
21
+
22
+
23
+ Bug fixes
24
+ ---------
25
+
26
+ - Set operations for ``KeysView `` and ``ItemsView `` of case-insensitive multidicts and their proxies are processed in case-insensitive manner.
27
+
28
+ *Related issues and pull requests on GitHub: *
29
+ :issue: `965 `.
30
+
31
+ - Rewrote :class: `multidict.CIMultiDict ` and it proxy to always return
32
+ :class: `multidict.istr ` keys. ``istr `` is derived from :class: `str `,
33
+ thus the change is backward compatible.
34
+
35
+ The performance boost is about 15% for some operations for C Extension,
36
+ pure Python implementation have got a visible (15% - 230%) speedup as well.
37
+
38
+ *Related issues and pull requests on GitHub: *
39
+ :issue: `1097 `.
40
+
41
+ - Fixed a crash when extending a multidict from multidict proxy if C Extensions were used.
42
+
43
+ *Related issues and pull requests on GitHub: *
44
+ :issue: `1100 `.
45
+
46
+
47
+ Features
48
+ --------
49
+
50
+ - Implemented a custom parser for ``METH_FASTCALL | METH_KEYWORDS `` protocol
51
+ -- by :user: `asvetlov `.
52
+
53
+ The patch re-enables fast call protocol in the :py:mod: `multidict ` C Extension.
54
+
55
+ Speedup is about 25%-30% for the library benchmarks for Python 3.12+.
56
+
57
+ *Related issues and pull requests on GitHub: *
58
+ :issue: `1070 `.
59
+
60
+ - The C-extension no longer pre-allocates a Python exception object in
61
+ lookup-related methods of :py:class: `~multidict.MultiDict ` when the
62
+ passed-in *key * is not found but *default * value is provided.
63
+
64
+ Namely, this affects :py:meth: `MultiDict.getone()
65
+ <multidict.MultiDict.getone> `, :py:meth: `MultiDict.getall()
66
+ <multidict.MultiDict.getall> `, :py:meth: `MultiDict.get()
67
+ <multidict.MultiDict.get> `, :py:meth: `MultiDict.pop()
68
+ <multidict.MultiDict.pop> `, :py:meth: `MultiDict.popone()
69
+ <multidict.MultiDict.popone> `, and :py:meth: `MultiDict.popall()
70
+ <multidict.MultiDict.popall> `.
71
+
72
+ Additionally, the :py:class: `~multidict.MultiDict ` comparison with
73
+ regular :py:class: `dict `\ ionaries is now about 60% faster
74
+ on Python 3.13+ in the fallback-to-default case.
75
+
76
+ *Related issues and pull requests on GitHub: *
77
+ :issue: `1078 `.
78
+
79
+ - Implemented ``__repr__() `` for C Extension classes in C.
80
+
81
+ The speedup is about 2.5 times.
82
+
83
+ *Related issues and pull requests on GitHub: *
84
+ :issue: `1081 `.
85
+
86
+ - Made C version of :class: `multidict.istr ` pickleable.
87
+
88
+ *Related issues and pull requests on GitHub: *
89
+ :issue: `1098 `.
90
+
91
+ - Optimized multidict creation and extending / updating if C Extensions are used.
92
+
93
+ The speedup is between 25% and 70% depending on the usage scenario.
94
+
95
+ *Related issues and pull requests on GitHub: *
96
+ :issue: `1101 `.
97
+
98
+ - :meth: `multidict.MultiDict.popitem ` is changed to remove
99
+ the latest entry instead of the first.
100
+
101
+ It gives O(1) amortized complexity.
102
+
103
+ The standard :meth: `dict.popitem ` removes the last entry also.
104
+
105
+ *Related issues and pull requests on GitHub: *
106
+ :issue: `1105 `.
107
+
108
+
109
+ Contributor-facing changes
110
+ --------------------------
111
+
112
+ - Started running benchmarks for the pure Python implementation in addition to the C implementation -- by :user: `bdraco `.
113
+
114
+ *Related issues and pull requests on GitHub: *
115
+ :issue: `1092 `.
116
+
117
+ - The the project-wide Codecov _ metric is no longer reported
118
+ via GitHub Checks API. The combined value is not very useful
119
+ because one of the sources (MyPy) cannot reach 100% with the
120
+ current state of the ecosystem. We may want to reconsider in
121
+ the future. Instead, we now have two separate
122
+ “runtime coverage” metrics for library code and tests.
123
+ They are to be kept at 100% at all times.
124
+ And the “type coverage” metric will remain advisory, at a
125
+ lower threshold.
126
+
127
+ The default patch metric check is renamed to “runtime”
128
+ to better reflect its semantics. This one will also require
129
+ 100% coverage.
130
+ Another “typing” patch coverage metric is now reported
131
+ alongside it. It's considered advisory, just like its
132
+ project counterpart.
133
+
134
+ When looking at Codecov _, one will likely want to look at
135
+ MyPy and pytest flags separately. It is usually best to
136
+ avoid looking at the PR pages that sometimes display
137
+ combined coverage incorrectly.
138
+
139
+ The change additionally disables the deprecated GitHub
140
+ Annotations integration in Codecov _.
141
+
142
+ Finally, the badge coloring range now starts at 100%.
143
+
144
+
145
+ .. image :: https://codecov.io/gh/aio-libs/multidict/branch/master/graph/badge.svg?flag=pytest
146
+ :target: https://codecov.io/gh/aio-libs/multidict?flags[]=pytest
147
+ :alt: Coverage metrics
148
+
149
+
150
+ -- by :user: `webknjaz `
151
+
152
+ *Related issues and pull requests on GitHub: *
153
+ :issue: `1093 `.
154
+
155
+
156
+ Miscellaneous internal changes
157
+ ------------------------------
158
+
159
+ - Synchronized :file: `pythoncapi_compat.h ` with the latest available version.
160
+
161
+ *Related issues and pull requests on GitHub: *
162
+ :issue: `1063 `.
163
+
164
+ - Moved registering ABCs for C Extension classes from C to Python.
165
+
166
+ *Related issues and pull requests on GitHub: *
167
+ :issue: `1083 `.
168
+
169
+ - Refactored the internal ``pair_list `` implementation.
170
+
171
+ *Related issues and pull requests on GitHub: *
172
+ :issue: `1084 `.
173
+
174
+ - Implemented views comparison and disjoints in C instead of Python helpers.
175
+
176
+ The performance boost is about 40%.
177
+
178
+ *Related issues and pull requests on GitHub: *
179
+ :issue: `1096 `.
180
+
181
+
182
+ ----
183
+
184
+
17
185
6.2.0
18
186
======
19
187
0 commit comments