Skip to content

Commit

Permalink
Merge pull request #221 from IlyaSkriblovsky/travis-fix-2
Browse files Browse the repository at this point in the history
Fixing and cleaning Travis CI configuration
  • Loading branch information
psi29a committed Jan 1, 2018
2 parents c5ee3b4 + e30a4fa commit 3de3e6e
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 62 deletions.
101 changes: 48 additions & 53 deletions .travis.yml
@@ -1,78 +1,73 @@
language: python
python: 2.7
python:
- "2.7"
- "3.4"
- "3.5"
- "pypy"
- "pypy3"

# container infra, when fixed
#sudo: false
#
# addons:
# apt:
# sources:
# - mongodb-3.0-precise
# - pypy
#addons:
# apt:
# packages:
# - mongodb-org-server
# - pypy

env:
- TOX_ENV=py27-tw140
- TOX_ENV=py27-tw150
- TOX_ENV=py27-tw155
- TOX_ENV=py27-tw160
- TOX_ENV=py27-tw163
- TOX_ENV=py27-twlatest
- TOX_ENV=py27-twtrunk
- TOX_ENV=py33-tw160
- TOX_ENV=py33-tw163
- TOX_ENV=py33-twlatest
- TOX_ENV=py33-twtrunk
- TOX_ENV=py34-tw160
- TOX_ENV=py34-tw163
- TOX_ENV=py34-twlatest
- TOX_ENV=py34-twtrunk
- TOX_ENV=py35-tw160
- TOX_ENV=py35-tw163
- TOX_ENV=py35-twlatest
- TOX_ENV=py35-twtrunk
- TOX_ENV=pypy-tw140
- TOX_ENV=pypy-tw150
- TOX_ENV=pypy-tw155
- TOX_ENV=pypy-tw160
- TOX_ENV=pypy-tw163
- TOX_ENV=pypy-twlatest
- TOX_ENV=pypy-twtrunk
- TOX_ENV=pyflakes
- TOX_ENV=manifest
- TOX_ENV=tw166
- TOX_ENV=tw175
- TOX_ENV=tw179
- TOX_ENV=twlatest
- TOX_ENV=twtrunk


matrix:
fast_finish: true
allow_failures:
- env: TOX_ENV=pyflakes
- env: TOX_ENV=pypy-twtrunk
- python: pypy
env: TOX_ENV=twtrunk
- python: pypy3
env: TOX_ENV=twtrunk

include:
- python: 3.5
env: TOX_ENV=pyflakes
- python: 3.5
env: TOX_ENV=manifest
- python: 2.7
env: TOX_ENV=tw140
- python: 2.7
env: TOX_ENV=tw150
- python: 2.7
env: TOX_ENV=tw155
- python: pypy
env: TOX_ENV=tw140
- python: pypy
env: TOX_ENV=tw150
- python: pypy
env: TOX_ENV=tw155



before_install:
- "sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10"
- "echo 'deb http://repo.mongodb.org/apt/ubuntu '$(lsb_release -sc)'/mongodb-org/3.0 multiverse' | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list"
- "sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 68854915"
- "echo 'deb http://ppa.launchpad.net/pypy/ppa/ubuntu '$(lsb_release -sc)' main' | sudo tee /etc/apt/sources.list.d/pypy.list"
- "sudo apt-get update"
- "sudo apt-get install mongodb-org-server pypy"
- "mongod --version"
- "pypy --version"
- sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
- echo 'deb http://repo.mongodb.org/apt/ubuntu '$(lsb_release -sc)'/mongodb-org/3.0 multiverse' | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list
- sudo apt-get update
- sudo apt-get install mongodb-org-server
# PyCrypto detects libgmp-dev and build its fastmath native extension which is incompatible with pypy. So removing libgmp-dev for pypy builds.
- if [[ "$TRAVIS_PYTHON_VERSION" == pypy* ]]; then sudo apt-get remove -y --auto-remove libgmp-dev; fi
- mongod --version
- mkdir data; mongod --dbpath data --nounixsocket --fork --logpath mongod.log

install:
- pip install tox coveralls

before_script:
- "until nc -z localhost 27017; do echo Waiting for MongoDB; sleep 1; done"
- until nc -z localhost 27017; do echo Waiting for MongoDB; sleep 1; done

script:
- tox -e $TOX_ENV

after_success:
- coveralls
- coveralls

after_script:
- killall monogd

notifications:
email: false
8 changes: 8 additions & 0 deletions docs/source/NEWS.rst
@@ -1,6 +1,14 @@
Changelog
=========

Release 17.2.0 (UNRELEASED)
---------------------------

Bugfixes
^^^^^^^^

- Fixed compatibility with PyMongo 3.6

Release 17.1.0 (2017-08-11)
---------------------------

Expand Down
9 changes: 5 additions & 4 deletions tox.ini
@@ -1,7 +1,7 @@
[tox]
envlist =
{py27,pypy}-{tw155,tw150,tw140},
{py27,py33,py34,py35,pypy}-{tw160,tw163,twtrunk,twlatest},
{tw155,tw150,tw140},
{tw166,tw175,tw179,twtrunk,twlatest},
pyflakes, manifest


Expand All @@ -14,8 +14,9 @@ deps =
pycrypto
twlatest: Twisted
twtrunk: https://github.com/twisted/twisted/archive/trunk.zip
tw163: Twisted==16.3.0
tw160: Twisted==16.0.0
tw179: Twisted==17.9.0
tw175: Twisted==17.5.0
tw166: Twisted==16.6.0
tw155: Twisted==15.5
tw150: Twisted==15.0
tw140: Twisted==14.0
Expand Down
41 changes: 36 additions & 5 deletions txmongo/collection.py
Expand Up @@ -12,8 +12,8 @@
from bson.son import SON
from bson.codec_options import CodecOptions
from pymongo.bulk import _Bulk, _COMMANDS, _merge_command
from pymongo.errors import InvalidName, BulkWriteError, InvalidOperation, OperationFailure
from pymongo.helpers import _check_write_command_response
from pymongo.errors import InvalidName, BulkWriteError, InvalidOperation, OperationFailure, DuplicateKeyError, \
WriteError, WTimeoutError, WriteConcernError
from pymongo.message import _OP_MAP, _INSERT
from pymongo.results import InsertOneResult, InsertManyResult, UpdateResult, \
DeleteResult, BulkWriteResult
Expand All @@ -30,6 +30,37 @@
from twisted.python.compat import unicode, comparable


def _raise_last_write_error(write_errors):
# If the last batch had multiple errors only report
# the last error to emulate continue_on_error.
error = write_errors[-1]
if error.get("code") == 11000:
raise DuplicateKeyError(error.get("errmsg"), 11000, error)
raise WriteError(error.get("errmsg"), error.get("code"), error)


def _raise_write_concern_error(error):
if "errInfo" in error and error["errInfo"].get('wtimeout'):
# Make sure we raise WTimeoutError
raise WTimeoutError(
error.get("errmsg"), error.get("code"), error)
raise WriteConcernError(
error.get("errmsg"), error.get("code"), error)


def _check_write_command_response(result):
"""Backward compatibility helper for write command error handling.
"""
# Prefer write errors over write concern errors
write_errors = result.get("writeErrors")
if write_errors:
_raise_last_write_error(write_errors)

error = result.get("writeConcernError")
if error:
_raise_write_concern_error(error)


@comparable
class Collection(object):
"""Creates new :class:`Collection` object
Expand Down Expand Up @@ -632,7 +663,7 @@ def insert_one(self, document, _deadline=None):
def on_ok(result):
response = result
if response:
_check_write_command_response([[0, response]])
_check_write_command_response(response)
return InsertOneResult(inserted_id, self.write_concern.acknowledged)
return self._insert_one(document, _deadline).addCallback(on_ok)

Expand Down Expand Up @@ -806,7 +837,7 @@ def _update(self, filter, update, upsert, multi, _deadline):
("writeConcern", self.write_concern.document)])

def on_ok(raw_response):
_check_write_command_response([[0, raw_response]])
_check_write_command_response(raw_response)

# Extract upserted_id from returned array
if raw_response.get("upserted"):
Expand Down Expand Up @@ -964,7 +995,7 @@ def _delete(self, filter, multi, _deadline):
("writeConcern", self.write_concern.document)])

def on_ok(raw_response):
_check_write_command_response([[0, raw_response]])
_check_write_command_response(raw_response)
return raw_response
return self._database.command(command, _deadline=_deadline).addCallback(on_ok)

Expand Down

0 comments on commit 3de3e6e

Please sign in to comment.