O Desktopcouch, como já dito, usa CouchDB como banco de dados, isto quer dizer, que suas informações são acessadas em formato 'json', ou como
para quem utiliza a implementação em Python do Desktopcouch 'Record' que funciona como um 'dict'.
Você pode acessar suas informações do Desktopcouch abrindo no navegador de arquivos:
-> $HOME/.local/share/desktop-couch/couchdb.html
Ou:
-> file:///home/{username}/.local/share/desktop-couch/couchdb.html
Como a ideia do Desktopcouch é sincronização entre várias aplicações, novamente a ideia de ontologia é utilizada. Primeiro se define um padrão e
provê uma URI para ela.
Existem alguns padrões predefinidos no site do
Desktopcouch.
Para este caso em específico, será criado um novo formato, que nada mais é do que o 'Event' do Zeitgeist em formato 'dict'.
zeitgeist_event = {
'record_type':'https://github.com/hugosenari/zeitgeist-extensions/wiki/ZeitgeistEvent', //pode utilizar outra uri
'id':'event_id', //apos ser registrado o evento ganha um id no zeitgeist
'actor':'uri application do evento',
'interpretation':'uri do que é o evento',
'manifestation':'uri de evento o evento aconteceu',
'timestamp':'quando ocorreu o evento em timestamp',
'subject': [
{
'interpretation': 'uri interpretation do subject',
'manifestation': 'uri manifestation do subject',
'origin':'local de origem: geralmente mesmo que uri/../',
'storage': 'local'||'net'||'deleted'||'<UUID of volume>',
'text': 'text do subject',
'uri': 'uri do subject',
}
],
'application_annotations':{
// podem ir informações especificas da aplicação que esta sincronizando ou usando
}
}
Para o Event da página anterior ser convertido neste record a cima temos o seguinte script:
record = {
'application_annotations':{
'zeitgeist': {
'profile': 'username'
}
'actor': event.get_actor()
'id': int(event.get_id())
'interpretation': event.get_interpretation()
'manifestation': event.get_manifestation()
'origin': event.get_origin()
'payload': event.get_payload()
'timestamp': int(event.get_timestamp())
'subjects': []
}
}
for subject in event.get_subjects():
sub = {}
if subject.get_interpretation(): sub['interpretation'] = subject.get_interpretation()
if subject.get_manifestation(): sub['manifestation'] = subject.get_manifestation()
if subject.get_mimetype(): sub['mimetype'] = subject.get_mimetype()
if subject.get_origin(): sub['origin'] = subject.get_origin()
if subject.get_storage(): sub['storage'] = subject.get_storage()
if subject.get_text(): sub['text'] = subject.get_text()
if subject.get_uri(): sub['uri'] = subject.get_uri()
record['subjects'].append(sub)
E finalmente, para armazenar esta informação no Desktopcouch, como a maioria das bases de dados, primeiro se conecta ao banco, em seguida envia
o dado.
O que pode ser feito da seguinte forma:
from desktopcouch.records.server import DesktopDatabase
from desktopcouch.records.record import Record as CouchRecord
#conecta no banco
#caso o banco não exista ele cria, quando passado o create=True, ele não recria se já existir
couchdb = DesktopDatabase('zeitgeist', create=True)
#converte o dict anterior para um Record
couchrecord = CouchRecord(
#o dict
record,
#a uri do formato a ser armazenado
'https://github.com/hugosenari/zeitgeist-extensions/wiki/ZeitgeistEvent'
)
#insere no banco
couchdb.put_record(couchrecord)
Você pode criar teu próprio formato, entretanto, fica este como base de algumas das informações contidas no Event. Base, pois um Event pode ter
outras informações.
Por exemplo, o 'payload', um campo reservado para dados binários. Um versão diferente deste código pode registar este 'payload' como sendo um
anexo do documento no CouchDB.
Existe um bom tutorial sobre outras sincronizações para o Desktopcounch:
http://arstechnica.com - Guides.
Muito do artigo do link acima, se inspira neste, mas eu prefiro incluir minhas informações no Zeitgeist para torná-las ainda mais úteis.