agronholm / cbor2

Python CBOR (de)serializer with extensive tag support
MIT License
226 stars 59 forks source link

Re-expose `default_encoders` and allow changing them in `CBOREncoder` again #226

Open oxij opened 8 months ago

oxij commented 8 months ago

Things to check first

Feature description

Please, re-expose default_encoders and probably other similar attributes that were public before version 5.5.0 and allow overriding default_encoders in CBOREncoder. A new __init__ parameter for it would be nice.

Use case

Before 5.5.0 in pwebarc I did

encoders = cbor2.encoders.default_encoders.copy()
if abridged:
    encoders[bytes] = _t.cast(_t.Any, self.encode_cbor_abridged)
    encoders[str] = _t.cast(_t.Any, self.encode_cbor_abridged)
self.encoder = _cbor2.CBOREncoder(_io.BytesIO(), default = self.encode_cbor)
self.encoder._encoders = encoders

(I want to use self.encode_cbor_abridged for long strings and bytes when abbreviation is enabled, default_encoders for all the default things, and self.encode_cbor for my custom stuff)

after 5.5.0 default_encoders and such are no longer exposed as a public interface and CBOREncoder()._encoders is now read-only.