@@ -245,87 +245,92 @@ class _BaseCodecOptions(NamedTuple):
245
245
246
246
247
247
class CodecOptions (_BaseCodecOptions ):
248
- """Encapsulates options used encoding and / or decoding BSON.
249
-
250
- The `document_class` option is used to define a custom type for use
251
- decoding BSON documents. Access to the underlying raw BSON bytes for
252
- a document is available using the :class:`~bson.raw_bson.RawBSONDocument`
253
- type::
254
-
255
- >>> from bson.raw_bson import RawBSONDocument
256
- >>> from bson.codec_options import CodecOptions
257
- >>> codec_options = CodecOptions(document_class=RawBSONDocument)
258
- >>> coll = db.get_collection('test', codec_options=codec_options)
259
- >>> doc = coll.find_one()
260
- >>> doc.raw
261
- '\\ x16\\ x00\\ x00\\ x00\\ x07_id\\ x00[0\\ x165\\ x91\\ x10\\ xea\\ x14\\ xe8\\ xc5\\ x8b\\ x93\\ x00'
262
-
263
- The document class can be any type that inherits from
264
- :class:`~collections.abc.MutableMapping`::
265
-
266
- >>> class AttributeDict(dict):
267
- ... # A dict that supports attribute access.
268
- ... def __getattr__(self, key):
269
- ... return self[key]
270
- ... def __setattr__(self, key, value):
271
- ... self[key] = value
272
- ...
273
- >>> codec_options = CodecOptions(document_class=AttributeDict)
274
- >>> coll = db.get_collection('test', codec_options=codec_options)
275
- >>> doc = coll.find_one()
276
- >>> doc._id
277
- ObjectId('5b3016359110ea14e8c58b93')
278
-
279
- See :doc:`/examples/datetimes` for examples using the `tz_aware` and
280
- `tzinfo` options.
281
-
282
- See :doc:`/examples/uuid` for examples using the `uuid_representation`
283
- option.
284
-
285
- :Parameters:
286
- - `document_class`: BSON documents returned in queries will be decoded
287
- to an instance of this class. Must be a subclass of
288
- :class:`~collections.abc.MutableMapping`. Defaults to :class:`dict`.
289
- - `tz_aware`: If ``True``, BSON datetimes will be decoded to timezone
290
- aware instances of :class:`~datetime.datetime`. Otherwise they will be
291
- naive. Defaults to ``False``.
292
- - `uuid_representation`: The BSON representation to use when encoding
293
- and decoding instances of :class:`~uuid.UUID`. Defaults to
294
- :data:`~bson.binary.UuidRepresentation.UNSPECIFIED`. New
295
- applications should consider setting this to
296
- :data:`~bson.binary.UuidRepresentation.STANDARD` for cross language
297
- compatibility. See :ref:`handling-uuid-data-example` for details.
298
- - `unicode_decode_error_handler`: The error handler to apply when
299
- a Unicode-related error occurs during BSON decoding that would
300
- otherwise raise :exc:`UnicodeDecodeError`. Valid options include
301
- 'strict', 'replace', 'backslashreplace', 'surrogateescape', and
302
- 'ignore'. Defaults to 'strict'.
303
- - `tzinfo`: A :class:`~datetime.tzinfo` subclass that specifies the
304
- timezone to/from which :class:`~datetime.datetime` objects should be
305
- encoded/decoded.
306
- - `type_registry`: Instance of :class:`TypeRegistry` used to customize
307
- encoding and decoding behavior.
308
- - `datetime_conversion`: Specifies how UTC datetimes should be decoded
309
- within BSON. Valid options include 'datetime_ms' to return as a
310
- DatetimeMS, 'datetime' to return as a datetime.datetime and
311
- raising a ValueError for out-of-range values, 'datetime_auto' to
312
- return DatetimeMS objects when the underlying datetime is
313
- out-of-range and 'datetime_clamp' to clamp to the minimum and
314
- maximum possible datetimes. Defaults to 'datetime'.
315
- .. versionchanged:: 4.0
316
- The default for `uuid_representation` was changed from
317
- :const:`~bson.binary.UuidRepresentation.PYTHON_LEGACY` to
318
- :const:`~bson.binary.UuidRepresentation.UNSPECIFIED`.
319
-
320
- .. versionadded:: 3.8
321
- `type_registry` attribute.
322
-
323
- .. warning:: Care must be taken when changing
324
- `unicode_decode_error_handler` from its default value ('strict').
325
- The 'replace' and 'ignore' modes should not be used when documents
326
- retrieved from the server will be modified in the client application
327
- and stored back to the server.
328
- """
248
+ """Encapsulates options used encoding and / or decoding BSON."""
249
+
250
+ def __init__ (self , * args , ** kwargs ):
251
+ """Encapsulates options used encoding and / or decoding BSON.
252
+
253
+ The `document_class` option is used to define a custom type for use
254
+ decoding BSON documents. Access to the underlying raw BSON bytes for
255
+ a document is available using the :class:`~bson.raw_bson.RawBSONDocument`
256
+ type::
257
+
258
+ >>> from bson.raw_bson import RawBSONDocument
259
+ >>> from bson.codec_options import CodecOptions
260
+ >>> codec_options = CodecOptions(document_class=RawBSONDocument)
261
+ >>> coll = db.get_collection('test', codec_options=codec_options)
262
+ >>> doc = coll.find_one()
263
+ >>> doc.raw
264
+ '\\ x16\\ x00\\ x00\\ x00\\ x07_id\\ x00[0\\ x165\\ x91\\ x10\\ xea\\ x14\\ xe8\\ xc5\\ x8b\\ x93\\ x00'
265
+
266
+ The document class can be any type that inherits from
267
+ :class:`~collections.abc.MutableMapping`::
268
+
269
+ >>> class AttributeDict(dict):
270
+ ... # A dict that supports attribute access.
271
+ ... def __getattr__(self, key):
272
+ ... return self[key]
273
+ ... def __setattr__(self, key, value):
274
+ ... self[key] = value
275
+ ...
276
+ >>> codec_options = CodecOptions(document_class=AttributeDict)
277
+ >>> coll = db.get_collection('test', codec_options=codec_options)
278
+ >>> doc = coll.find_one()
279
+ >>> doc._id
280
+ ObjectId('5b3016359110ea14e8c58b93')
281
+
282
+ See :doc:`/examples/datetimes` for examples using the `tz_aware` and
283
+ `tzinfo` options.
284
+
285
+ See :doc:`/examples/uuid` for examples using the `uuid_representation`
286
+ option.
287
+
288
+ :Parameters:
289
+ - `document_class`: BSON documents returned in queries will be decoded
290
+ to an instance of this class. Must be a subclass of
291
+ :class:`~collections.abc.MutableMapping`. Defaults to :class:`dict`.
292
+ - `tz_aware`: If ``True``, BSON datetimes will be decoded to timezone
293
+ aware instances of :class:`~datetime.datetime`. Otherwise they will be
294
+ naive. Defaults to ``False``.
295
+ - `uuid_representation`: The BSON representation to use when encoding
296
+ and decoding instances of :class:`~uuid.UUID`. Defaults to
297
+ :data:`~bson.binary.UuidRepresentation.UNSPECIFIED`. New
298
+ applications should consider setting this to
299
+ :data:`~bson.binary.UuidRepresentation.STANDARD` for cross language
300
+ compatibility. See :ref:`handling-uuid-data-example` for details.
301
+ - `unicode_decode_error_handler`: The error handler to apply when
302
+ a Unicode-related error occurs during BSON decoding that would
303
+ otherwise raise :exc:`UnicodeDecodeError`. Valid options include
304
+ 'strict', 'replace', 'backslashreplace', 'surrogateescape', and
305
+ 'ignore'. Defaults to 'strict'.
306
+ - `tzinfo`: A :class:`~datetime.tzinfo` subclass that specifies the
307
+ timezone to/from which :class:`~datetime.datetime` objects should be
308
+ encoded/decoded.
309
+ - `type_registry`: Instance of :class:`TypeRegistry` used to customize
310
+ encoding and decoding behavior.
311
+ - `datetime_conversion`: Specifies how UTC datetimes should be decoded
312
+ within BSON. Valid options include 'datetime_ms' to return as a
313
+ DatetimeMS, 'datetime' to return as a datetime.datetime and
314
+ raising a ValueError for out-of-range values, 'datetime_auto' to
315
+ return DatetimeMS objects when the underlying datetime is
316
+ out-of-range and 'datetime_clamp' to clamp to the minimum and
317
+ maximum possible datetimes. Defaults to 'datetime'.
318
+
319
+ .. versionchanged:: 4.0
320
+ The default for `uuid_representation` was changed from
321
+ :const:`~bson.binary.UuidRepresentation.PYTHON_LEGACY` to
322
+ :const:`~bson.binary.UuidRepresentation.UNSPECIFIED`.
323
+
324
+ .. versionadded:: 3.8
325
+ `type_registry` attribute.
326
+
327
+ .. warning:: Care must be taken when changing
328
+ `unicode_decode_error_handler` from its default value ('strict').
329
+ The 'replace' and 'ignore' modes should not be used when documents
330
+ retrieved from the server will be modified in the client application
331
+ and stored back to the server.
332
+ """
333
+ return super ().__init__ ()
329
334
330
335
def __new__ (
331
336
cls : Type ["CodecOptions" ],
0 commit comments