• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

aio-libs / multidict / 35859820959
87%

Build:
DEFAULT BRANCH: master
Ran 23 Sep 2026 12:20PM UTC
Jobs 1
Files 42
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

23 Sep 2026 12:20PM UTC coverage: 87.432%. Remained the same
35859820959

push

github

web-flow
Move the bulk update paths into bulk_update.h (#1533)

<!-- Thank you for your contribution! -->

## What do these changes do?

`hashtable.h` was 2735 lines covering three separate things: the table
itself, the single-key operations, and the multi-item `extend()`,
`update()` and `merge()` engine behind the constructors and the bulk
methods. The last of those was a contiguous block nothing else in the
file called into, whose only consumer is `_multidict.c`.

It moves verbatim into `multidict/_multilib/bulk_update.h`, along with
the `UpdateOp` enum: `_md_update()`, `_md_merge()`, the
`_md_post_update_*` family, `md_post_update()`, `md_update_from_ht()`,
`md_extend_self()`, `md_update_from_dict()`, `md_update_from_kwnames()`,
`md_update_from_seq()` and the sequence-parsing helpers beside it. The
new header includes `hashtable.h`, so `views.h`, `iter.h` and
`capsule.h` keep reaching only the hash table. This continues the split
started by #1510, #1513 and #1522.

Two things worth flagging for the reviewer.

`_list_getitem_ref()` and `_list_item_gone()` stay behind. `views.h`
uses them too, and it includes `hashtable.h` but not the new header, so
moving them would have left `views.h` compiling only by accident of the
include order in `_multidict.c`. They now have no user left in
`hashtable.h` itself, which deserves a proper home shared with the
open-coded two-element unpacking in `views.h`; that is its own change,
not this one.

The order the compiler sees does change, since the block now expands
after the rest of `hashtable.h` rather than in the middle of it.
`tools/codegen_diff.py` reports no difference at all, so nothing fell in
or out of line.

## Are there changes in behavior for the user?

No. The move is verbatim, and the pure Python implementation has no
header structure to mirror.

## Is it a substantial burden for the maintainers to support this?

No, it shrinks `hashtable.h` by around 710 lines and keeps the bulk
paths separate from the table an... (continued)

765 of 1530 branches covered (50.0%)

Branch coverage included in aggregate %.

7221 of 7604 relevant lines covered (94.96%)

1.9 hits per line

Jobs
ID Job ID Ran Files Coverage
1 MyPy - 35859820959.1 23 Sep 2026 12:20PM UTC 84
87.43
GitHub Action Run
Source Files on build 35859820959
  • Tree
  • List 42
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #35859820959
  • fdceefa1 on github
  • Prev Build on master (#35855400641)
  • Next Build on master (#35901354185)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc