Skip to content

Commit 55efa5c

Browse files
committed
Add very basic replication support to client.Server.
1 parent d5f1f7e commit 55efa5c

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

couchdb/client.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,16 @@ def delete(self, name):
209209
"""
210210
del self[name]
211211

212+
def replicate(self, source, target):
213+
"""Replicate changes from the source database to the target database.
214+
215+
:param source: URL of the source database
216+
:param target: URL of the target database
217+
"""
218+
data = {'source': source, 'target': target}
219+
resp, data = self.resource.post('/_replicate', data)
220+
return data
221+
212222

213223
class Database(object):
214224
"""Representation of a database on a CouchDB server.

couchdb/tests/client.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ def tearDown(self):
2525
self.server.delete('python-tests')
2626
except client.ResourceNotFound:
2727
pass
28+
try:
29+
self.server.delete('python-tests-a')
30+
except client.ResourceNotFound:
31+
pass
2832

2933
def test_server_vars(self):
3034
version = self.server.version
@@ -49,6 +53,20 @@ def test_delete_db_missing(self):
4953
self.assertRaises(client.ResourceNotFound, self.server.delete,
5054
'python-tests')
5155

56+
def test_replicate(self):
57+
a = self.server.create('python-tests')
58+
id = a.create({'test': 'a'})
59+
b = self.server.create('python-tests-a')
60+
result = self.server.replicate('python-tests', 'python-tests-a')
61+
self.assertEquals(result['ok'], True)
62+
self.assertEquals(b[id]['test'], 'a')
63+
64+
doc = b[id]
65+
doc['test'] = 'b'
66+
b.update([doc])
67+
self.server.replicate(client.DEFAULT_BASE_URI + 'python-tests-a',
68+
'python-tests')
69+
self.assertEquals(b[id]['test'], 'b')
5270

5371
class DatabaseTestCase(unittest.TestCase):
5472

0 commit comments

Comments
 (0)