From a2c13090d8b0f0be76cf003121c9edafb1bb4309 Mon Sep 17 00:00:00 2001 From: "A. Jesse Jiryu Davis" Date: Mon, 2 Feb 2015 09:38:49 -0500 Subject: [PATCH] PYTHON-826 Move codec_options submodule from pymongo to bson. --- {pymongo => bson}/codec_options.py | 8 ++++++++ doc/api/{pymongo => bson}/codec_options.rst | 2 +- doc/api/bson/index.rst | 1 + doc/api/pymongo/index.rst | 1 - pymongo/client_options.py | 13 ++----------- pymongo/collection.py | 8 ++++---- pymongo/common.py | 6 +++--- pymongo/database.py | 10 +++++----- pymongo/helpers.py | 5 ++--- pymongo/mongo_client.py | 2 +- test/test_binary.py | 2 +- test/test_client.py | 2 +- test/test_collection.py | 2 +- test/test_common.py | 5 ++--- test/test_database.py | 5 ++--- 15 files changed, 34 insertions(+), 38 deletions(-) rename {pymongo => bson}/codec_options.py (90%) rename doc/api/{pymongo => bson}/codec_options.rst (83%) diff --git a/pymongo/codec_options.py b/bson/codec_options.py similarity index 90% rename from pymongo/codec_options.py rename to bson/codec_options.py index 75dda8fb7..e75ca07d0 100644 --- a/pymongo/codec_options.py +++ b/bson/codec_options.py @@ -75,3 +75,11 @@ class CodecOptions(object): def __ne__(self, other): return self != other + + +def _parse_codec_options(options): + """Parse BSON codec options.""" + as_class = options.get('document_class', dict) + tz_aware = options.get('tz_aware', False) + uuid_rep = options.get('uuidrepresentation', PYTHON_LEGACY) + return CodecOptions(as_class, tz_aware, uuid_rep) diff --git a/doc/api/pymongo/codec_options.rst b/doc/api/bson/codec_options.rst similarity index 83% rename from doc/api/pymongo/codec_options.rst rename to doc/api/bson/codec_options.rst index 94ede76b6..bea1358f5 100644 --- a/doc/api/pymongo/codec_options.rst +++ b/doc/api/bson/codec_options.rst @@ -1,6 +1,6 @@ :mod:`codec_options` -- Tools for specifying BSON codec options =============================================================== -.. automodule:: pymongo.codec_options +.. automodule:: bson.codec_options :synopsis: Tools for specifying BSON codec options. :members: diff --git a/doc/api/bson/index.rst b/doc/api/bson/index.rst index 8b8a90504..7f25d8257 100644 --- a/doc/api/bson/index.rst +++ b/doc/api/bson/index.rst @@ -13,6 +13,7 @@ Sub-modules: binary regex code + codec_options dbref errors json_util diff --git a/doc/api/pymongo/index.rst b/doc/api/pymongo/index.rst index 6ecbb90e4..572f6445f 100644 --- a/doc/api/pymongo/index.rst +++ b/doc/api/pymongo/index.rst @@ -33,7 +33,6 @@ Sub-modules: database collection - codec_options command_cursor cursor bulk diff --git a/pymongo/client_options.py b/pymongo/client_options.py index 737bab62f..d5de2b3d1 100644 --- a/pymongo/client_options.py +++ b/pymongo/client_options.py @@ -14,10 +14,9 @@ """Tools to parse mongo client options.""" -from bson.binary import PYTHON_LEGACY +from bson.codec_options import _parse_codec_options from bson.py3compat import iteritems from pymongo.auth import _build_credentials_tuple -from pymongo.codec_options import CodecOptions from pymongo.common import validate from pymongo.errors import ConfigurationError from pymongo.pool import PoolOptions @@ -36,14 +35,6 @@ def _parse_credentials(username, password, database, options): mechanism, source, username, password, options) -def _parse_codec_options(options): - """Parse BSON codec options.""" - as_class = options.get('document_class', dict) - tz_aware = options.get('tz_aware', False) - uuid_rep = options.get('uuidrepresentation', PYTHON_LEGACY) - return CodecOptions(as_class, tz_aware, uuid_rep) - - def _parse_read_preference(options): """Parse read preference options.""" if 'read_preference' in options: @@ -130,7 +121,7 @@ class ClientOptions(object): @property def codec_options(self): - """A :class:`~pymongo.codec_options.CodecOptions` instance.""" + """A :class:`~bson.codec_options.CodecOptions` instance.""" return self.__codec_options @property diff --git a/pymongo/collection.py b/pymongo/collection.py index d2da882f3..1e297816e 100644 --- a/pymongo/collection.py +++ b/pymongo/collection.py @@ -24,12 +24,12 @@ from bson.objectid import ObjectId from bson.py3compat import (_unicode, integer_types, string_type) +from bson.codec_options import CodecOptions from bson.son import SON from pymongo import (bulk, common, helpers, message) -from pymongo.codec_options import CodecOptions from pymongo.command_cursor import CommandCursor from pymongo.cursor import Cursor from pymongo.errors import ConfigurationError, InvalidName, OperationFailure @@ -78,7 +78,7 @@ class Collection(common.BaseObject): - `create` (optional): if ``True``, force collection creation even without options being set - `codec_options` (optional): An instance of - :class:`~pymongo.codec_options.CodecOptions`. If ``None`` (the + :class:`~bson.codec_options.CodecOptions`. If ``None`` (the default) database.codec_options is used. - `read_preference` (optional): The read preference to use. If ``None`` (the default) database.read_preference is used. @@ -147,7 +147,7 @@ class Collection(common.BaseObject): - `read_preference` (optional) - An subclass of :class:`~pymongo.read_preferences.ServerMode`. - `codec_options` (optional) - An instance of - :class:`~pymongo.codec_options.CodecOptions`. + :class:`~bson.codec_options.CodecOptions`. - `**kwargs` - any optional keyword arguments accepted by :func:`~pymongo.helpers._command`. @@ -229,7 +229,7 @@ class Collection(common.BaseObject): :Parameters: - `codec_options` (optional): An instance of - :class:`~pymongo.codec_options.CodecOptions`. If ``None`` (the + :class:`~bson.codec_options.CodecOptions`. If ``None`` (the default) the :attr:`codec_options` of this :class:`Collection` is used. - `read_preference` (optional): The read preference to use. If diff --git a/pymongo/common.py b/pymongo/common.py index 5351eee6e..d4816f215 100644 --- a/pymongo/common.py +++ b/pymongo/common.py @@ -17,8 +17,8 @@ import collections +from bson.codec_options import CodecOptions from pymongo.auth import MECHANISMS -from pymongo.codec_options import CodecOptions from pymongo.errors import ConfigurationError from pymongo.read_preferences import (read_pref_mode_from_name, ServerMode) @@ -381,7 +381,7 @@ class BaseObject(object): if not isinstance(codec_options, CodecOptions): raise TypeError("codec_options must be an instance of " - "pymongo.codec_options.CodecOptions") + "bson.codec_options.CodecOptions") self.__codec_options = codec_options # TODO: Better error reporting for read preference. @@ -396,7 +396,7 @@ class BaseObject(object): @property def codec_options(self): - """An instance of :class:`~pymongo.codec_options.CodecOptions`.""" + """An instance of :class:`~bson.codec_options.CodecOptions`.""" return self.__codec_options @property diff --git a/pymongo/database.py b/pymongo/database.py index 42c31a977..2c0b33b0f 100644 --- a/pymongo/database.py +++ b/pymongo/database.py @@ -17,11 +17,11 @@ import warnings from bson.code import Code +from bson.codec_options import CodecOptions from bson.dbref import DBRef from bson.py3compat import iteritems, string_type, _unicode from bson.son import SON from pymongo import auth, common, helpers -from pymongo.codec_options import CodecOptions from pymongo.collection import Collection from pymongo.command_cursor import CommandCursor from pymongo.errors import (CollectionInvalid, @@ -61,7 +61,7 @@ class Database(common.BaseObject): - `connection`: A client instance. - `name`: The database name. - `codec_options` (optional): An instance of - :class:`~pymongo.codec_options.CodecOptions`. If ``None`` (the + :class:`~bson.codec_options.CodecOptions`. If ``None`` (the default) connection.codec_options is used. - `read_preference` (optional): The read preference to use. If ``None`` (the default) connection.read_preference is used. @@ -229,7 +229,7 @@ class Database(common.BaseObject): :Parameters: - `name`: The name of the collection - a string. - `codec_options` (optional): An instance of - :class:`~pymongo.codec_options.CodecOptions`. If ``None`` (the + :class:`~bson.codec_options.CodecOptions`. If ``None`` (the default) the :attr:`codec_options` of this :class:`Database` is used. - `read_preference` (optional): The read preference to use. If @@ -268,7 +268,7 @@ class Database(common.BaseObject): :Parameters: - `name`: the name of the collection to create - `codec_options` (optional): An instance of - :class:`~pymongo.codec_options.CodecOptions`. If ``None`` (the + :class:`~bson.codec_options.CodecOptions`. If ``None`` (the default) the :attr:`codec_options` of this :class:`Database` is used. - `read_preference` (optional): The read preference to use. If @@ -389,7 +389,7 @@ class Database(common.BaseObject): - `allowable_errors`: if `check` is ``True``, error messages in this list will be ignored by error-checking - `read_preference`: The read preference for this operation. - - `codec_options`: A :class:`~pymongo.codec_options.CodecOptions` + - `codec_options`: A :class:`~bson.codec_options.CodecOptions` instance. - `**kwargs` (optional): additional keyword arguments will be added to the command document before it is sent diff --git a/pymongo/helpers.py b/pymongo/helpers.py index b62fb2850..0d5564647 100644 --- a/pymongo/helpers.py +++ b/pymongo/helpers.py @@ -19,10 +19,9 @@ import struct import bson import pymongo - +from bson.codec_options import CodecOptions from bson.py3compat import itervalues, string_type, iteritems from bson.son import SON -from pymongo.codec_options import CodecOptions from pymongo.errors import (CursorNotFound, DuplicateKeyError, OperationFailure, @@ -90,7 +89,7 @@ def _unpack_response(response, cursor_id=None, codec_options=CodecOptions()): used for raising an informative exception when we get cursor id not valid at server response - `codec_options` (optional): an instance of - :class:`~pymongo.codec_options.CodecOptions` + :class:`~bson.codec_options.CodecOptions` """ response_flag = struct.unpack("