diff options
author | Olly Cope <olly@ollycope.com> | 2018-01-29 14:37:28 +0000 |
---|---|---|
committer | Olly Cope <olly@ollycope.com> | 2018-01-29 14:37:28 +0000 |
commit | 75c18820e86d156cd5ebdd0769e57aec3350f778 (patch) | |
tree | b90060553029e694658103c0ba4d2caf8a4de171 | |
parent | f4fe79a678a8ba828d33874eaaeb0632236c8601 (diff) | |
download | yoyo-75c18820e86d156cd5ebdd0769e57aec3350f778.tar.gz |
Factor DatabaseBackend.lock into smaller functions
-rw-r--r-- | yoyo/backends.py | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/yoyo/backends.py b/yoyo/backends.py index e80c013..ea062b0 100644 --- a/yoyo/backends.py +++ b/yoyo/backends.py @@ -244,6 +244,13 @@ class DatabaseBackend(object): """ pid = os.getpid() + self._insert_lock_row(pid, timeout) + try: + yield + finally: + self._delete_lock_row(pid) + + def _insert_lock_row(self, pid, timeout, poll_interval=0.5): started = time.time() while True: try: @@ -262,17 +269,18 @@ class DatabaseBackend(object): "(run yoyo break-lock to remove this lock)" .format(row[0])) else: - raise - time.sleep(0.1) + raise exceptions.LockTimeout( + "Database locked " + "(run yoyo break-lock to remove this lock)") + time.sleep(poll_interval) else: - break - try: - yield - finally: - with self.transaction(): - self.execute("DELETE FROM {} WHERE pid=?" - .format(self.lock_table), - (pid,)) + return + + def _delete_lock_row(self, pid): + with self.transaction(): + self.execute("DELETE FROM {} WHERE pid=?" + .format(self.lock_table), + (pid,)) def break_lock(self): with self.transaction(): |