Estoy tratando de usar couchdb.py para crear y actualizar bases de datos. Me gustaría implementar cambios de notificación, preferiblemente en modo continuo. Ejecutando el código de prueba publicado a continuación, no veo cómo funciona el esquema de cambios dentro de Python.notificaciones de cambio de couchdb-python
class SomeDocument(Document):
#############################################################################
# def __init__ (self):
intField = IntegerField()#for now - this should to be an integer
textField = TextField()
couch = couchdb.Server('http://127.0.0.1:5984')
databasename = 'testnotifications'
if databasename in couch:
print 'Deleting then creating database ' + databasename + ' from server'
del couch[databasename]
db = couch.create(databasename)
else:
print 'Creating database ' + databasename + ' on server'
db = couch.create(databasename)
for iii in range(5):
doc = SomeDocument(intField=iii,textField='somestring'+str(iii))
doc.store(db)
print doc.id + '\t' + doc.rev
something = db.changes(feed='continuous',since=4,heartbeat=1000)
for iii in range(5,10):
doc = SomeDocument(intField=iii,textField='somestring'+str(iii))
doc.store(db)
time.sleep(1)
print something
print db.changes(since=iii-1)
El valor
db.changes(since=iii-1)
devuelve información que es de interés, pero en un formato en el que no he descubierto cómo extraer los números de secuencia o de revisión, o la información de documento:
{u'last_seq': 6, u'results': [{u'changes': [{u'rev': u'1-9c1e4df5ceacada059512a8180ead70e'}], u'id': u'7d0cb1ccbfd9675b4b6c1076f40049a8', u'seq': 5}, {u'changes': [{u'rev': u'1-bbe2953a5ef9835a0f8d548fa4c33b42'}], u'id': u'7d0cb1ccbfd9675b4b6c1076f400560d', u'seq': 6}]}
Mientras tanto, el código que estoy muy interesado en el uso:
db.changes(feed='continuous',since=4,heartbeat=1000)
Devuelve un objeto generador y no parece proporcionar notificaciones a medida que llegan, como el CouchDB guide sugiere ....
alguien ha utilizado los cambios en couchdb-pitón con éxito?
Además de estos problemas, cuando se utiliza con un servidor remoto (por ejemplo, Cloudant) se producen errores para la edición 'desde' oparg ...., esto parece ser porque cloudant no almacena las revisiones como enteros, sino como cadenas, ¡lo cual hace que el argumento since sea aún más confuso! – radpotato