def tags_remote(self): """Receive tags from server""" tags_ids = [] for tag in self.note_store.listTags(self.auth_token): self.app.log('Tag %s remote' % tag.name) try: tg = self.sq(models.Tag).filter( models.Tag.guid == tag.guid, ).one() tags_ids.append(tg.id) if tg.name != tag.name.decode('utf8'): tg.from_api(tag) except NoResultFound: tg = models.Tag(guid=tag.guid) tg.from_api(tag) self.session.add(tg) self.session.commit() tags_ids.append(tg.id) ids = filter(lambda id: id not in tags_ids, map( lambda tag: tag.id, self.sq(models.Tag).all(), )) if len(ids): self.sq(models.Tag).filter( and_( models.Tag.id.in_(ids), models.Tag.action != ACTION_CREATE, )).delete(synchronize_session='fetch') self.session.commit()
def test_tag_delete(self): """Test deleting tags""" tag = models.Tag( name='okok', action=models.ACTION_NONE, ) deleting_tag = models.Tag( name='deleted', action=models.ACTION_NONE, ) self.session.add(tag) self.session.add(deleting_tag) note = models.Note( title='123', content='456', tags=[tag, deleting_tag], ) self.session.add(note) self.session.commit() self.service.delete_tag(deleting_tag.id) self.assertItemsEqual(note.tags, [tag])
def test_service_find_notes(self): note = models.Note(title='q ab cd', content='123', action=ACTION_CREATE) tag = models.Tag(name='eee') notebook = models.Notebook(name='123') self.session.add_all([note, tag, notebook]) note.tags = [tag] note.notebook = notebook self.session.commit() self.assertEqual( self.serv.find_notes('ab cd', [notebook.id], [tag.id]), [(note.id, u'q ab cd', u'123', None, None, notebook.id, [u'eee'])], 'find notes via service', )
def test_local_sync(self): note = models.Note( title='test', content='test', action=ACTION_CREATE, ) self.session.add(note) self.sc.local_changes() self.assertEqual( 'test', self.sc.note_store.getNote( token, note.guid, True, False, False, False, ).title, 'sync simple note', ) notebook = models.Notebook( name=str(datetime.now()), default=False, action=ACTION_CREATE, ) self.session.add(notebook) note.notebook = notebook note.action = ACTION_CHANGE self.sc.local_changes() self.assertEqual( notebook.guid, self.sc.note_store.getNote( token, note.guid, True, False, False, False, ).notebookGuid, 'sync note with notebook', ) tag = models.Tag( name=str(datetime.now()), action=ACTION_CREATE, ) self.session.add(tag) note.action = ACTION_CHANGE note.tags = [tag] self.sc.local_changes() self.assertEqual( [tag.guid], self.sc.note_store.getNote( token, note.guid, True, False, False, False, ).tagGuids, 'sync note with tags', ) notebook.name = str(datetime.now()) notebook.action = ACTION_CHANGE self.sc.local_changes() self.assertEqual( notebook.name, self.sc.note_store.getNotebook( token, notebook.guid, ).name, 'sync notebook change', ) tag.name = str(datetime.now()) tag.action = ACTION_CHANGE self.sc.local_changes() self.assertEqual( tag.name, self.sc.note_store.getTag( token, tag.guid, ).name, 'sync tag change', ) note.action = ACTION_DELETE self.sc.local_changes() self.assertIsNotNone( self.sc.note_store.getNote( token, note.guid, True, False, False, False, ), 'remove note')
def test_service_list_tags(self): tag = models.Tag(name='123') self.session.add(tag) self.session.commit() self.assertEqual(self.serv.list_tags(), [(tag.id, u'123')], 'list tags')