Hello community,

here is the log from the commit of package python3-pymongo for openSUSE:Factory 
checked in at 2015-08-05 06:49:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-pymongo (Old)
 and      /work/SRC/openSUSE:Factory/.python3-pymongo.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python3-pymongo"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python3-pymongo/python3-pymongo.changes  
2015-05-25 11:16:52.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python3-pymongo.new/python3-pymongo.changes     
2015-08-05 06:49:39.000000000 +0200
@@ -1,0 +2,10 @@
+Mon Jul 13 20:52:59 UTC 2015 - a...@gmx.de
+
+- update to version 3.0.3:
+  * Error in changelog guidance for Python 3 (find timeout parameter)
+  * Unable to specify ssl_match_hostname option using URI style
+    connection string
+  * Undocumented regression in Collection.find - projection tuple no
+    longer allowed
+
+-------------------------------------------------------------------

Old:
----
  pymongo-3.0.2.tar.gz

New:
----
  pymongo-3.0.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python3-pymongo.spec ++++++
--- /var/tmp/diff_new_pack.sW5WhG/_old  2015-08-05 06:49:40.000000000 +0200
+++ /var/tmp/diff_new_pack.sW5WhG/_new  2015-08-05 06:49:40.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           python3-pymongo
-Version:        3.0.2
+Version:        3.0.3
 Release:        0
 Url:            http://github.com/mongodb/mongo-python-driver
 Summary:        Python driver for MongoDB

++++++ pymongo-3.0.2.tar.gz -> pymongo-3.0.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/MANIFEST.in 
new/pymongo-3.0.3/MANIFEST.in
--- old/pymongo-3.0.2/MANIFEST.in       2015-05-12 00:51:23.000000000 +0200
+++ new/pymongo-3.0.3/MANIFEST.in       2015-07-01 02:07:31.000000000 +0200
@@ -6,6 +6,7 @@
 recursive-include doc *.conf
 recursive-include doc *.css
 recursive-include doc *.js
+recursive-include doc *.png
 recursive-include tools *.py
 include tools/README.rst
 recursive-include test *.pem
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/PKG-INFO new/pymongo-3.0.3/PKG-INFO
--- old/pymongo-3.0.2/PKG-INFO  2015-05-12 21:28:05.000000000 +0200
+++ new/pymongo-3.0.3/PKG-INFO  2015-07-01 02:43:33.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pymongo
-Version: 3.0.2
+Version: 3.0.3
 Summary: Python driver for MongoDB <http://www.mongodb.org>
 Home-page: http://github.com/mongodb/mongo-python-driver
 Author: Bernie Hackett
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/doc/changelog.rst 
new/pymongo-3.0.3/doc/changelog.rst
--- old/pymongo-3.0.2/doc/changelog.rst 2015-05-12 01:11:51.000000000 +0200
+++ new/pymongo-3.0.3/doc/changelog.rst 2015-07-01 02:07:31.000000000 +0200
@@ -1,6 +1,20 @@
 Changelog
 =========
 
+Changes in Version 3.0.3
+------------------------
+
+Version 3.0.3 fixes issues reported since the release of 3.0.2, including a
+feature breaking bug in the GSSAPI implementation.
+
+Issues Resolved
+...............
+
+See the `PyMongo 3.0.3 release notes in JIRA`_ for the list of resolved issues
+in this release.
+
+.. _PyMongo 3.0.3 release notes in JIRA: 
https://jira.mongodb.org/browse/PYTHON/fixforversion/15528
+
 Changes in Version 3.0.2
 ------------------------
 
@@ -379,7 +393,6 @@
 
 - spec -> filter
 - fields -> projection
-- timeout -> no_cursor_timeout
 - partial -> allow_partial_results
 
 The following find/find_one options have been added:
@@ -415,6 +428,13 @@
 
 - manipulate
 
+The following renames need special handling.
+
+- timeout -> no_cursor_timeout -
+  The default for `timeout` was True. The default for `no_cursor_timeout` is
+  False. If you were previously passing False for `timeout` you must pass
+  **True** for `no_cursor_timeout` to keep the previous behavior.
+
 :mod:`~pymongo.errors` changes
 ..............................
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/doc/developer/index.rst 
new/pymongo-3.0.3/doc/developer/index.rst
--- old/pymongo-3.0.2/doc/developer/index.rst   1970-01-01 01:00:00.000000000 
+0100
+++ new/pymongo-3.0.3/doc/developer/index.rst   2015-07-01 02:07:31.000000000 
+0200
@@ -0,0 +1,9 @@
+Developer Guide
+===============
+
+Technical guide for contributors to PyMongo.
+
+.. toctree::
+   :maxdepth: 1
+
+   periodic_executor
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/doc/developer/periodic_executor.rst 
new/pymongo-3.0.3/doc/developer/periodic_executor.rst
--- old/pymongo-3.0.2/doc/developer/periodic_executor.rst       1970-01-01 
01:00:00.000000000 +0100
+++ new/pymongo-3.0.3/doc/developer/periodic_executor.rst       2015-07-01 
02:07:31.000000000 +0200
@@ -0,0 +1,69 @@
+Periodic Executors
+==================
+
+.. currentmodule:: pymongo
+
+PyMongo implements a :class:`~periodic_executor.PeriodicExecutor` for two
+purposes: as the background thread for :class:`~monitor.Monitor`, and to
+regularly check if there are `OP_KILL_CURSORS` messages that must be sent to 
the server.
+
+Monitoring
+----------
+
+For each server in the topology, :class:`~topology.Topology` launches a
+monitor thread. This thread must not prevent the topology from being freed,
+so it weakrefs the topology. Furthermore, it uses a weakref callback to close
+itself promptly when the topology is freed.
+
+Solid lines represent strong references, dashed lines weak ones:
+
+.. generated with graphviz from periodic-executor-refs.dot
+
+.. image:: ../static/periodic-executor-refs.png
+
+See `Stopping Executors`_ below for an explanation of ``_EXECUTORS``.
+
+Killing Cursors
+---------------
+
+An incompletely iterated :class:`~cursor.Cursor` on the client represents an
+open cursor object on the server. In code like this, we lose a reference to
+the cursor before finishing iteration::
+
+    for doc in collection.find():
+        raise Exception()
+
+We try to send an `OP_KILL_CURSORS` to the server to tell it to clean up the
+server-side cursor. But we must not take any locks directly from the cursor's
+destructor (see `PYTHON-799 <https://jira.mongodb.org/browse/PYTHON-799>`_),
+so we cannot safely use the PyMongo data structures required to send a message.
+The solution is to add the cursor's id to an array on the
+:class:`~mongo_client.MongoClient` without taking any locks.
+
+Each client has a :class:`~periodic_executor.PeriodicExecutor` devoted to
+checking the array for cursor ids. Any it sees are the result of cursors that
+were freed while the server-side cursor was still open. The executor can safely
+take the locks it needs in order to send the `OP_KILL_CURSORS` message.
+
+Stopping Executors
+------------------
+
+Just as :class:`~cursor.Cursor` must not take any locks from its destructor,
+neither can :class:`~mongo_client.MongoClient` and :class:`~topology.Topology`.
+Thus, although the client calls :meth:`close` on its kill-cursors thread, and
+the topology calls :meth:`close` on all its monitor threads, the :meth:`close`
+method cannot actually call :meth:`wake` on the executor, since :meth:`wake`
+takes a lock.
+
+Instead, executors wake very frequently to check if ``self.close`` is set,
+and if so they exit.
+
+A thread can log spurious errors if it wakes late in the Python interpreter's
+shutdown sequence, so we try to join threads before then. Each periodic
+executor (either a monitor or a kill-cursors thread) adds a weakref to itself
+to a set called ``_EXECUTORS``, in the ``periodic_executor`` module.
+
+An `exit handler`_ runs on shutdown and tells all executors to stop, then
+tries (with a short timeout) to join all executor threads.
+
+.. _exit handler: https://docs.python.org/2/library/atexit.html
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/doc/faq.rst 
new/pymongo-3.0.3/doc/faq.rst
--- old/pymongo-3.0.2/doc/faq.rst       2015-05-12 00:51:23.000000000 +0200
+++ new/pymongo-3.0.3/doc/faq.rst       2015-07-01 02:07:31.000000000 +0200
@@ -86,8 +86,8 @@
 `Motor <https://github.com/mongodb/motor>`_ project.
 
 For `Twisted <http://twistedmatrix.com/>`_, see `TxMongo
-<http://github.com/fiorix/mongo-async-python-driver>`_. Compared to PyMongo,
-TxMongo is less stable, lacks features, and is less actively maintained.
+<https://github.com/twisted/txmongo>`_. Its stated mission is to keep feature
+parity with PyMongo.
 
 Key order in subdocuments -- why does my query work in the shell but not 
PyMongo?
 
---------------------------------------------------------------------------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/doc/index.rst 
new/pymongo-3.0.3/doc/index.rst
--- old/pymongo-3.0.2/doc/index.rst     2015-05-12 00:51:23.000000000 +0200
+++ new/pymongo-3.0.3/doc/index.rst     2015-07-01 02:07:31.000000000 +0200
@@ -32,6 +32,9 @@
   A listing of Python tools and libraries that have been written for
   MongoDB.
 
+:doc:`developer/index`
+  Developer guide for contributors to PyMongo.
+
 Getting Help
 ------------
 If you're having trouble or have questions about PyMongo, the best place to 
ask is the `MongoDB user group <http://groups.google.com/group/mongodb-user>`_. 
Once you get an answer, it'd be great if you could work it back into this 
documentation and contribute!
@@ -88,4 +91,4 @@
    contributors
    changelog
    python3
-
+   developer/index
Files old/pymongo-3.0.2/doc/static/periodic-executor-refs.png and 
new/pymongo-3.0.3/doc/static/periodic-executor-refs.png differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/doc/tools.rst 
new/pymongo-3.0.3/doc/tools.rst
--- old/pymongo-3.0.2/doc/tools.rst     2015-05-08 01:13:35.000000000 +0200
+++ new/pymongo-3.0.3/doc/tools.rst     2015-07-01 02:07:31.000000000 +0200
@@ -135,6 +135,5 @@
 
 * `Motor <https://github.com/mongodb/motor>`_ is a full-featured, non-blocking
   MongoDB driver for Python Tornado applications.
-* `TxMongo <http://github.com/fiorix/mongo-async-python-driver>`_ is an
-  asynchronous Python driver for MongoDB, although it is not currently
-  recommended for production use.
+* `TxMongo <https://github.com/twisted/txmongo>`_ is an asynchronous Twisted
+  Python driver for MongoDB.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/gridfs/grid_file.py 
new/pymongo-3.0.3/gridfs/grid_file.py
--- old/pymongo-3.0.2/gridfs/grid_file.py       2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/gridfs/grid_file.py       2015-07-01 02:07:31.000000000 
+0200
@@ -434,6 +434,9 @@
 
             chunk_data = chunk["data"][self.__position % chunk_size:]
 
+            if not chunk_data:
+                raise CorruptGridFile("truncated chunk")
+
         self.__position += len(chunk_data)
         self.__buffer = EMPTY
         return chunk_data
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo/__init__.py 
new/pymongo-3.0.3/pymongo/__init__.py
--- old/pymongo-3.0.2/pymongo/__init__.py       2015-05-12 21:21:52.000000000 
+0200
+++ new/pymongo-3.0.3/pymongo/__init__.py       2015-07-01 02:26:33.000000000 
+0200
@@ -70,7 +70,7 @@
 ALL = 2
 """Profile all operations."""
 
-version_tuple = (3, 0, 2)
+version_tuple = (3, 0, 3)
 
 def get_version_string():
     if isinstance(version_tuple[-1], str):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo/auth.py 
new/pymongo-3.0.3/pymongo/auth.py
--- old/pymongo-3.0.2/pymongo/auth.py   2015-05-12 00:51:23.000000000 +0200
+++ new/pymongo-3.0.3/pymongo/auth.py   2015-07-01 02:07:31.000000000 +0200
@@ -241,8 +241,9 @@
         gsn = credentials.mechanism_properties.service_name
         # Starting here and continuing through the while loop below - establish
         # the security context. See RFC 4752, Section 3.1, first paragraph.
+        host = sock_info.address[0]
         result, ctx = kerberos.authGSSClientInit(
-            gsn + '@' + sock_info.host, gssflags=kerberos.GSS_C_MUTUAL_FLAG)
+            gsn + '@' + host, gssflags=kerberos.GSS_C_MUTUAL_FLAG)
 
         if result != kerberos.AUTH_GSS_COMPLETE:
             raise OperationFailure('Kerberos context failed to initialize.')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo/command_cursor.py 
new/pymongo-3.0.3/pymongo/command_cursor.py
--- old/pymongo-3.0.2/pymongo/command_cursor.py 2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/pymongo/command_cursor.py 2015-07-01 02:07:31.000000000 
+0200
@@ -117,10 +117,6 @@
         if self.__id == 0:
             self.__killed = True
 
-        assert doc["starting_from"] == self.__retrieved, (
-            "Result batch started from %s, expected %s" % (
-                doc['starting_from'], self.__retrieved))
-
         self.__retrieved += doc["number_returned"]
         self.__data = deque(doc["data"])
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo/common.py 
new/pymongo-3.0.3/pymongo/common.py
--- old/pymongo-3.0.2/pymongo/common.py 2015-05-12 00:51:23.000000000 +0200
+++ new/pymongo-3.0.3/pymongo/common.py 2015-07-01 02:07:31.000000000 +0200
@@ -140,15 +140,25 @@
 
 
 def validate_positive_integer(option, value):
-    """Validate that 'value' is a positive integer.
+    """Validate that 'value' is a positive integer, which does not include 0.
     """
     val = validate_integer(option, value)
-    if val < 0:
+    if val <= 0:
         raise ValueError("The value of %s must be "
                          "a positive integer" % (option,))
     return val
 
 
+def validate_non_negative_integer(option, value):
+    """Validate that 'value' is a positive integer or 0.
+    """
+    val = validate_integer(option, value)
+    if val < 0:
+        raise ValueError("The value of %s must be "
+                         "a non negative integer" % (option,))
+    return val
+
+
 def validate_readable(option, value):
     """Validates that 'value' is file-like and readable.
     """
@@ -169,6 +179,14 @@
     return validate_positive_integer(option, value)
 
 
+def validate_non_negative_integer_or_none(option, value):
+    """Validate that 'value' is a positive integer or 0 or None.
+    """
+    if value is None:
+        return value
+    return validate_non_negative_integer(option, value)
+
+
 def validate_string(option, value):
     """Validates that 'value' is an instance of `basestring` for Python 2
     or `str` for Python 3.
@@ -392,13 +410,13 @@
     'socketkeepalive': validate_boolean_or_string,
     'sockettimeoutms': validate_timeout_or_none,
     'waitqueuetimeoutms': validate_timeout_or_none,
-    'waitqueuemultiple': validate_positive_integer_or_none,
+    'waitqueuemultiple': validate_non_negative_integer_or_none,
     'ssl': validate_boolean_or_string,
     'ssl_keyfile': validate_readable,
     'ssl_certfile': validate_readable,
     'ssl_cert_reqs': validate_cert_reqs,
     'ssl_ca_certs': validate_readable,
-    'ssl_match_hostname': validate_boolean,
+    'ssl_match_hostname': validate_boolean_or_string,
     'read_preference': validate_read_preference,
     'readpreference': validate_read_preference_mode,
     'readpreferencetags': validate_read_preference_tags,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo/cursor.py 
new/pymongo-3.0.3/pymongo/cursor.py
--- old/pymongo-3.0.2/pymongo/cursor.py 2015-05-12 00:51:23.000000000 +0200
+++ new/pymongo-3.0.3/pymongo/cursor.py 2015-07-01 02:07:31.000000000 +0200
@@ -864,12 +864,6 @@
         if self.__id == 0:
             self.__killed = True
 
-        # starting from doesn't get set on getmore's for tailable cursors
-        if not self.__query_flags & _QUERY_OPTIONS["tailable_cursor"]:
-            assert doc["starting_from"] == self.__retrieved, (
-                "Result batch started from %s, expected %s" % (
-                    doc['starting_from'], self.__retrieved))
-
         self.__retrieved += doc["number_returned"]
         self.__data = deque(doc["data"])
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo/helpers.py 
new/pymongo-3.0.3/pymongo/helpers.py
--- old/pymongo-3.0.2/pymongo/helpers.py        2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/pymongo/helpers.py        2015-07-01 02:07:31.000000000 
+0200
@@ -270,7 +270,7 @@
 
 
 def _fields_list_to_dict(fields, option_name):
-    """Takes a list of field names and returns a matching dictionary.
+    """Takes a sequence of field names and returns a matching dictionary.
 
     ["a", "b"] becomes {"a": 1, "b": 1}
 
@@ -280,15 +280,13 @@
     """
     if isinstance(fields, collections.Mapping):
         return fields
-    elif isinstance(fields, list):
-        as_dict = {}
-        for field in fields:
-            if not isinstance(field, string_type):
-                raise TypeError("%s must be a list of key names, each an "
-                                "instance of %s" % (option_name,
-                                                    string_type.__name__))
-            as_dict[field] = 1
-        return as_dict
-    else:
-        raise TypeError("%s must be a mapping or "
-                        "list of key names" % (option_name,))
+
+    if isinstance(fields, collections.Sequence):
+        if not all(isinstance(field, string_type) for field in fields):
+            raise TypeError("%s must be a list of key names, each an "
+                            "instance of %s" % (option_name,
+                                                string_type.__name__))
+        return dict.fromkeys(fields, 1)
+
+    raise TypeError("%s must be a mapping or "
+                    "list of key names" % (option_name,))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo/mongo_client.py 
new/pymongo-3.0.3/pymongo/mongo_client.py
--- old/pymongo-3.0.2/pymongo/mongo_client.py   2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/pymongo/mongo_client.py   2015-07-01 02:07:31.000000000 
+0200
@@ -117,7 +117,7 @@
           - `maxPoolSize` (optional): The maximum number of connections
             that the pool will open simultaneously. If this is set, operations
             will block if there are `maxPoolSize` outstanding connections
-            from the pool. Defaults to 100.
+            from the pool. Defaults to 100. Cannot be 0.
           - `socketTimeoutMS`: (integer or None) Controls how long (in
             milliseconds) the driver will wait for a response after sending an
             ordinary (non-monitoring) database operation before concluding that
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo/network.py 
new/pymongo-3.0.3/pymongo/network.py
--- old/pymongo-3.0.2/pymongo/network.py        2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/pymongo/network.py        2015-07-01 02:07:31.000000000 
+0200
@@ -60,13 +60,19 @@
     header = _receive_data_on_socket(sock, 16)
     length = _UNPACK_INT(header[:4])[0]
 
+    actual_op = _UNPACK_INT(header[12:])[0]
+    assert operation == actual_op, ("wire protocol error: "
+                                    "unknown opcode %r" % (actual_op,))
     # No request_id for exhaust cursor "getMore".
     if request_id is not None:
         response_id = _UNPACK_INT(header[8:12])[0]
-        assert request_id == response_id, "ids don't match %r %r" % (
-            request_id, response_id)
+        assert request_id == response_id, (
+            "wire protocol error: got response id %r but expected %r"
+            % (response_id, request_id))
+
+    assert length > 16, ("wire protocol error: message length is shorter"
+                         " than standard message header: %r" % (length,))
 
-    assert operation == _UNPACK_INT(header[12:])[0]
     return _receive_data_on_socket(sock, length - 16)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo/periodic_executor.py 
new/pymongo-3.0.3/pymongo/periodic_executor.py
--- old/pymongo-3.0.2/pymongo/periodic_executor.py      2015-05-12 
00:51:23.000000000 +0200
+++ new/pymongo-3.0.3/pymongo/periodic_executor.py      2015-07-01 
02:07:31.000000000 +0200
@@ -70,7 +70,7 @@
         callback; see monitor.py.
 
         Since this can be called from a weakref callback during garbage
-        collection it must take no locks!
+        collection it must take no locks! That means it cannot call wake().
         """
         self._stopped = True
 
@@ -132,10 +132,19 @@
 def _shutdown_executors():
     # Copy the set. Stopping threads has the side effect of removing executors.
     executors = list(_EXECUTORS)
+
+    # First signal all executors to close...
     for ref in executors:
         executor = ref()
         if executor:
             executor.close()
-            executor.join(10)
+
+    # ...then try to join them.
+    for ref in executors:
+        executor = ref()
+        if executor:
+            executor.join(1)
+
+    executor = None
 
 atexit.register(_shutdown_executors)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo.egg-info/PKG-INFO 
new/pymongo-3.0.3/pymongo.egg-info/PKG-INFO
--- old/pymongo-3.0.2/pymongo.egg-info/PKG-INFO 2015-05-12 21:28:05.000000000 
+0200
+++ new/pymongo-3.0.3/pymongo.egg-info/PKG-INFO 2015-07-01 02:43:33.000000000 
+0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: pymongo
-Version: 3.0.2
+Version: 3.0.3
 Summary: Python driver for MongoDB <http://www.mongodb.org>
 Home-page: http://github.com/mongodb/mongo-python-driver
 Author: Bernie Hackett
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/pymongo.egg-info/SOURCES.txt 
new/pymongo-3.0.3/pymongo.egg-info/SOURCES.txt
--- old/pymongo-3.0.2/pymongo.egg-info/SOURCES.txt      2015-05-12 
21:28:05.000000000 +0200
+++ new/pymongo-3.0.3/pymongo.egg-info/SOURCES.txt      2015-07-01 
02:43:33.000000000 +0200
@@ -77,6 +77,8 @@
 doc/api/pymongo/son_manipulator.rst
 doc/api/pymongo/uri_parser.rst
 doc/api/pymongo/write_concern.rst
+doc/developer/index.rst
+doc/developer/periodic_executor.rst
 doc/examples/aggregation.rst
 doc/examples/authentication.rst
 doc/examples/bulk.rst
@@ -91,6 +93,7 @@
 doc/examples/tls.rst
 doc/pydoctheme/theme.conf
 doc/pydoctheme/static/pydoctheme.css
+doc/static/periodic-executor-refs.png
 doc/static/sidebar.js
 gridfs/__init__.py
 gridfs/errors.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/setup.py new/pymongo-3.0.3/setup.py
--- old/pymongo-3.0.2/setup.py  2015-05-12 21:21:41.000000000 +0200
+++ new/pymongo-3.0.3/setup.py  2015-07-01 02:26:19.000000000 +0200
@@ -26,7 +26,7 @@
 from distutils.errors import DistutilsPlatformError, DistutilsExecError
 from distutils.core import Extension
 
-version = "3.0.2"
+version = "3.0.3"
 
 f = open("README.rst")
 try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/test/test_client.py 
new/pymongo-3.0.3/test/test_client.py
--- old/pymongo-3.0.2/test/test_client.py       2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/test/test_client.py       2015-07-01 02:07:31.000000000 
+0200
@@ -121,6 +121,10 @@
 
         self.assertRaises(ConfigurationError, MongoClient, [])
 
+    def test_max_pool_size_zero(self):
+        with self.assertRaises(ValueError):
+            MongoClient(maxPoolSize=0)
+
     def test_get_db(self):
         def make_db(base, name):
             return base[name]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/test/test_database.py 
new/pymongo-3.0.3/test/test_database.py
--- old/pymongo-3.0.2/test/test_database.py     2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/test/test_database.py     2015-07-01 02:07:31.000000000 
+0200
@@ -524,7 +524,7 @@
         # Admin read-only user should be able to query any db,
         # but not write.
         admin_db.authenticate('ro-admin', 'pass')
-        self.assertEqual(0, other_db.test.count())
+        self.assertEqual(None, other_db.test.find_one())
         self.assertRaises(OperationFailure,
                           other_db.test.insert_one, {})
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/test/test_gridfs.py 
new/pymongo-3.0.3/test/test_gridfs.py
--- old/pymongo-3.0.2/test/test_gridfs.py       2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/test/test_gridfs.py       2015-07-01 02:07:31.000000000 
+0200
@@ -24,12 +24,12 @@
 import time
 import gridfs
 
+from bson.binary import Binary
 from bson.py3compat import u, StringIO, string_type
 from pymongo.mongo_client import MongoClient
 from pymongo.errors import ConfigurationError, ConnectionFailure
 from pymongo.read_preferences import ReadPreference
-from gridfs.errors import (FileExists,
-                           NoFile)
+from gridfs.errors import CorruptGridFile, FileExists, NoFile
 from test.test_replica_set_client import TestReplicaSetClientBase
 from test import (client_context,
                   unittest,
@@ -159,6 +159,19 @@
         self.assertEqual(255 * 1024, raw["chunkSize"])
         self.assertTrue(isinstance(raw["md5"], string_type))
 
+    def test_corrupt_chunk(self):
+        files_id = self.fs.put(b'foobar')
+        self.db.fs.chunks.update_one({'files_id': files_id},
+                                     {'$set': {'data': Binary(b'foo', 0)}})
+        try:
+            out = self.fs.get(files_id)
+            self.assertRaises(CorruptGridFile, out.read)
+
+            out = self.fs.get(files_id)
+            self.assertRaises(CorruptGridFile, out.readline)
+        finally:
+            self.fs.delete(files_id)
+
     def test_delete_ensures_index(self):
         # setUp has dropped collections.
         names = self.db.collection_names()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/test/test_pooling.py 
new/pymongo-3.0.3/test/test_pooling.py
--- old/pymongo-3.0.2/test/test_pooling.py      2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/test/test_pooling.py      2015-07-01 02:07:31.000000000 
+0200
@@ -428,6 +428,10 @@
         self.assertEqual(nthreads, self.n_passed)
         self.assertTrue(len(cx_pool.sockets) > 1)
 
+    def test_max_pool_size_zero(self):
+        with self.assertRaises(ValueError):
+            rs_or_single_client(maxPoolSize=0)
+
     def test_max_pool_size_with_connection_failure(self):
         # The pool acquires its semaphore before attempting to connect; ensure
         # it releases the semaphore on connection failure.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/test/test_ssl.py 
new/pymongo-3.0.3/test/test_ssl.py
--- old/pymongo-3.0.2/test/test_ssl.py  2015-05-12 00:51:23.000000000 +0200
+++ new/pymongo-3.0.3/test/test_ssl.py  2015-07-01 02:07:31.000000000 +0200
@@ -339,7 +339,7 @@
                            "hostname in the certificate")
 
         uri_fmt = ("mongodb://server/?ssl=true&ssl_certfile=%s&ssl_cert_reqs"
-                   "=%s&ssl_ca_certs=%s")
+                   "=%s&ssl_ca_certs=%s&ssl_match_hostname=true")
         client = MongoClient(uri_fmt % (CLIENT_PEM, 'CERT_REQUIRED', CA_PEM))
 
         db = client.pymongo_ssl_test
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pymongo-3.0.2/test/test_uri_parser.py 
new/pymongo-3.0.3/test/test_uri_parser.py
--- old/pymongo-3.0.2/test/test_uri_parser.py   2015-05-12 00:51:23.000000000 
+0200
+++ new/pymongo-3.0.3/test/test_uri_parser.py   2015-07-01 02:07:31.000000000 
+0200
@@ -102,6 +102,10 @@
         self.assertRaises(ValueError, split_options, 'connectTimeoutMS=0.0')
         self.assertRaises(ValueError, split_options, 
'connectTimeoutMS=1e100000')
         self.assertRaises(ValueError, split_options, 
'connectTimeoutMS=-1e100000')
+        self.assertRaises(ValueError, split_options, 'ssl=foo')
+        self.assertTrue(split_options('ssl=true'))
+        self.assertRaises(ValueError, split_options, 'ssl_match_hostname=foo')
+        self.assertTrue(split_options('ssl_match_hostname=true'))
 
         # On most platforms float('inf') and float('-inf') represent
         # +/- infinity, although on Python 2.4 and 2.5 on Windows those


Reply via email to