codecs.py
codecs.py sits between Python callers and the C codec machinery in
Modules/_codecsmodule.c. It provides the search-function registry,
CodecInfo named tuple, incremental codec base classes, and stream wrappers.
Map
| Lines | Symbol | Role |
|---|---|---|
| 1–60 | imports, BOM_* constants | byte-order marks for UTF-x encodings |
| 61–120 | CodecInfo | collections.namedtuple with encode/decode/streamreader/streamwriter |
| 121–180 | register() lookup() | add/find a codec search function via C extension |
| 181–260 | open() | wraps a binary file with StreamReaderWriter |
| 261–360 | EncoderWrapper DecoderWrapper | adapt incremental codecs to the stateless interface |
| 361–500 | IncrementalEncoder IncrementalDecoder | base classes for stateful codecs |
| 501–620 | StreamWriter | buffered write side, write() / writelines() / reset() |
| 621–760 | StreamReader | buffered read side, read() / readline() / readlines() |
| 761–840 | StreamReaderWriter | combines both sides for open() |
| 841–920 | StreamRecoder | re-encodes on the fly between two codecs |
| 921–1000 | charmap_encode() charmap_decode() | single-byte charmap codec helpers |
| 1001–1100 | make_encoding_map() make_identity_dict() | charmap construction utilities |
Reading
register and lookup
register() and lookup() delegate entirely to the C extension. The search
function receives a lowercase encoding name and must return a CodecInfo or
None.
# CPython: Lib/codecs.py:128 register
def register(search_function):
_codecs.register(search_function)
# CPython: Lib/codecs.py:140 lookup
def lookup(encoding):
return _codecs.lookup(encoding)
The returned CodecInfo is a named tuple with four callables: encode,
decode, streamreader, and streamwriter.