From 6444260ce6a31280ccbe8c982df2999f00f9fb35 Mon Sep 17 00:00:00 2001 From: Nick Pellegrino Date: Thu, 12 Jul 2018 13:39:26 -0400 Subject: [PATCH 1/3] make sure that attempting to save a document after deletion raises ResoureConflict --- couchdbkit/client.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/couchdbkit/client.py b/couchdbkit/client.py index cb6b261..a9b0231 100644 --- a/couchdbkit/client.py +++ b/couchdbkit/client.py @@ -563,7 +563,17 @@ def save_doc(self, doc, encode_attachments=True, force_update=False, couch_doc = Document(self.cloudant_database, docid) couch_doc.update(doc1) try: - couch_doc.save() + # Copied from Document.save to ensure that a deleted doc cannot be saved. + headers = {} + headers.setdefault('Content-Type', 'application/json') + put_resp = couch_doc.r_session.put( + couch_doc.document_url, + data=couch_doc.json(), + headers=headers + ) + put_resp.raise_for_status() + data = put_resp.json() + super(Document, couch_doc).__setitem__('_rev', data['rev']) except HTTPError as e: if e.response.status_code != 409: raise From 3909a0b5fb76f0629b5b0a04320e3c5e3d6780b7 Mon Sep 17 00:00:00 2001 From: Nick Pellegrino Date: Thu, 12 Jul 2018 13:41:30 -0400 Subject: [PATCH 2/3] maintain behavior of raising ResourceConflict when attempting to delete previously deleted doc --- couchdbkit/client.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/couchdbkit/client.py b/couchdbkit/client.py index a9b0231..be10b9b 100644 --- a/couchdbkit/client.py +++ b/couchdbkit/client.py @@ -726,7 +726,10 @@ def delete_doc(self, doc, **params): couch_doc['_rev'] = doc1['_rev'] elif isinstance(doc1, six.string_types): # we get a docid couch_doc = Document(self.cloudant_database, doc1) - couch_doc['_rev'] = self.get_rev(doc1) + try: + couch_doc['_rev'] = self.get_rev(doc1) + except ResourceNotFound: + raise ResourceConflict # manual request because cloudant library doesn't return result res = self._request_session.delete( From c33146942895ca0c5a8145c1e31705913fa27766 Mon Sep 17 00:00:00 2001 From: Nick Pellegrino Date: Thu, 12 Jul 2018 13:41:44 -0400 Subject: [PATCH 3/3] bump version --- couchdbkit/version.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/couchdbkit/version.py b/couchdbkit/version.py index 56e9570..4175157 100644 --- a/couchdbkit/version.py +++ b/couchdbkit/version.py @@ -5,5 +5,5 @@ from __future__ import absolute_import from six.moves import map -version_info = (0, 9, 0, 3, 6) +version_info = (0, 9, 0, 3, 7) __version__ = ".".join(map(str, version_info))