class _CouchdbCommon(object): def __init__(self, log=log): self.log = log self._zclient = ZeitgeistClient() self._zdclient = ZeitgeistDBusInterface() self._database = DesktopDatabase(DATABASE_NAME, create=True) self._user = os.environ.get('USERNAME') self._machine = os.uname() def _add_view(self, view): #create views if not exist if not self._database.view_exists(view.name, DATABASE_NAME): self.log(logging.DEBUG, """adding in %s view %s with: %s""", DATABASE_NAME, view.name, view.view) self._database.add_view(view.name, view.view, None, DATABASE_NAME) self._database.execute_view(view.name) else: self.log(logging.DEBUG, """view %s exist in %s""", view.name, DATABASE_NAME) def _execute_view(self, view): self._add_view(view) return self._database.execute_view(view.name, DATABASE_NAME) def last_transaction(self, when=None): ''' Getter or Setter for last_transaction event: dict, last sync item return dict ''' if when: self.save_config("last_transaction", when) else: when = self.config("last_transaction") if not when: self._database.execute_view(VIEW.TIMESTAMP.name) return when def save_config(self, attr, val): self.log(logging.DEBUG, "setting value %s for %s", attr, val) if self._database.record_exists(attr): record = self._database.get_record(attr) self._database.update_fields(attr, {'value': val}) else: record = CouchRecord({'value': val}, COUCH_CFG_TYPE, attr) self.put_record(record) def config(self, attr): self.log(logging.DEBUG, "getting info: %s", attr) if self._database.record_exists(attr): cfg = self._database.get_record(attr) self.log(logging.DEBUG, "value of info %s is %s", attr, cfg['value']) return cfg['value'] self.log(logging.DEBUG, "can't get config %s", attr) def dbToZg(self, obj): ''' Convert courchrecord in zeiteist event ''' return Event.new_for_values(**obj) def zgToDb(self, obj): ''' Convert zeitgeist event in couchrecord ''' result = { 'application_annotations':{ 'zeitgeist':{ 'user': self._user, 'machine': self._machine } } } if obj.get_actor(): result['actor'] = obj.get_actor() if obj.get_id(): result['id'] = int(obj.get_id()) if obj.get_interpretation(): result['interpretation'] = obj.get_interpretation() if obj.get_manifestation(): result['manifestation'] = obj.get_manifestation() if obj.get_origin(): result['origin'] = obj.get_origin() if obj.get_payload(): result['payload'] = obj.get_payload() if obj.get_timestamp(): result['timestamp'] = int(obj.get_timestamp()) result['subjects'] = [] for subject in obj.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() result['subjects'].append(sub) return CouchRecord(result, COUCH_OBJ_TYPE) def put_record(self, record): self._database.put_record(record) def put_records(self, records): self._database.put_records_batch(records)