From 3d7a7d487b4b9ddf1eac2643c47b422213cc0a70 Mon Sep 17 00:00:00 2001 From: Jimmy Berry Date: Mon, 8 May 2017 19:57:04 -0500 Subject: [PATCH] obslock: unlock other user lock if force. --- osclib/obslock.py | 12 ++++++++++-- tests/obslock_tests.py | 6 +++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/osclib/obslock.py b/osclib/obslock.py index 5f1ec7b9..f13e4d9b 100644 --- a/osclib/obslock.py +++ b/osclib/obslock.py @@ -132,14 +132,22 @@ class OBSLock(object): return user, reason, reason_sub, _ = self._parse(self._read()) + clear = False if user == self.user: if reason_sub: self.reason = reason_sub self.reason_sub = None self._write(self._signature()) elif not reason.startswith('hold') or force: - self._write('') - self.locked = False + # Only clear a command lock as hold can only be cleared by force. + clear = True + elif user is not None and force: + # Clear if a lock is present and force. + clear = True + + if clear: + self._write('') + self.locked = False def hold(self, message=None): self.reason = 'hold' diff --git a/tests/obslock_tests.py b/tests/obslock_tests.py index 5319565c..869543ae 100644 --- a/tests/obslock_tests.py +++ b/tests/obslock_tests.py @@ -125,7 +125,7 @@ class TestOBSLock(unittest.TestCase): def test_needed(self): lock1 = self.obs_lock() - lock2 = self.obs_lock() + lock2 = self.obs_lock('unlock') lock2.user = 'user2' lock2.needed = False @@ -138,3 +138,7 @@ class TestOBSLock(unittest.TestCase): self.assertFalse(lock2.locked) user, _, _, _ = lock2._parse(lock2._read()) self.assertEqual(user, lock1.user, 'lock1 remains') + + lock2.release(force=True) + user, _, _, _ = lock2._parse(lock2._read()) + self.assertEqual(user, None, 'unlocked')