From 1b37c6e0771172569773b2d9608921b27feaaaa3 Mon Sep 17 00:00:00 2001 From: Guillaume Baril Date: Fri, 17 Jun 2022 13:31:43 -0400 Subject: [PATCH] Update pymongo to 4.1.1 --- requirements.txt | 2 +- src/mongolock.py | 14 ++++++++------ src/test_mongolock.py | 6 +++--- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/requirements.txt b/requirements.txt index 27715dd..39b08af 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,2 @@ -pymongo>=2.6 +pymongo>=4.1.1 pytest diff --git a/src/mongolock.py b/src/mongolock.py index fdb1b87..65d2203 100644 --- a/src/mongolock.py +++ b/src/mongolock.py @@ -65,7 +65,7 @@ def lock(self, key, owner, timeout=None, expire=None): """ expire = datetime.utcnow() + timedelta(seconds=expire) if expire else None try: - self.collection.insert({ + self.collection.insert_one({ '_id': key, 'locked': True, 'owner': owner, @@ -89,9 +89,9 @@ def release(self, key, owner): `owner` - name of application/component/whatever which held a lock Raises `MongoLockException` if no such a lock. """ - status = self.collection.find_and_modify( + status = self.collection.find_one_and_update( {'_id': key, 'owner': owner}, - {'locked': False, 'owner': None, 'created': None, 'expire': None} + {'$set': {'locked': False, 'owner': None, 'created': None, 'expire': None}} ) def get_lock_info(self, key): @@ -116,14 +116,14 @@ def touch(self, key, owner, expire=None): if not expire: raise MongoLockException(u'Can\'t touch lock without expire for {0}: {1}'.format(key, owner)) expire = datetime.utcnow() + timedelta(seconds=expire) - self.collection.update( + self.collection.update_one( {'_id': key, 'owner': owner}, {'$set': {'expire': expire}} ) def _try_get_lock(self, key, owner, expire): dtnow = datetime.utcnow() - result = self.collection.update( + result = self.collection.update_one( { '$or': [ {'_id': key, 'locked': False}, @@ -131,10 +131,12 @@ def _try_get_lock(self, key, owner, expire): ] }, { + '$set': { 'locked': True, 'owner': owner, 'created': dtnow, 'expire': expire + } } ) - return True if result['n'] == 1 else False + return True if result.modified_count == 1 else False diff --git a/src/test_mongolock.py b/src/test_mongolock.py index cb26c95..0a246c0 100644 --- a/src/test_mongolock.py +++ b/src/test_mongolock.py @@ -13,7 +13,7 @@ @pytest.fixture() def lock(): - connection[db_name][col_name].remove() + connection[db_name][col_name].drop() return MongoLock(client=connection, db=db_name, collection=col_name) @@ -97,7 +97,7 @@ def touch_expired_not_specified(lock): def test_create_lock_by_collection(): - connection[db_name][col_name].remove() + connection[db_name][col_name].drop() collection = connection[db_name][col_name] assert MongoLock(collection=collection).lock('key', 'owner') @@ -110,7 +110,7 @@ def test_create_lock_by_collection(): ]) def test_is_locked(lock, locked, expire, is_locked): if locked is not None: - connection[db_name][col_name].insert({ + connection[db_name][col_name].insert_one({ '_id': 'key', 'locked': locked, 'owner': 'owner',