def post(self, **kwargs): changes = json.loads(self.request.get("json")) version = _get_max_version(self.user_key) + 1 for el in changes: current_word = (UserDictionaryWord.query( self.user_key, UserDictionaryWord.word == el["word"]).get() or UserDictionaryWord(owner=self.device_key)) current_word.populate(version=version, **el) current_word.put() self.response.write(version)
def test_get(self): new_words = ["hat", "cat", "rat"] for word in new_words: UserDictionaryWord(word=word, version=57, owner=self.device).put() old_words = ["son", "run"] for word in old_words: UserDictionaryWord(word=word, version=56, owner=self.device).put() request = webapp2.Request.blank('/123/api/udict/since/56') request.method = "GET" response = request.get_response(main.app) diff = json.loads(response.body) self.assertEqual(diff["version"], 57) self.assertEqual(len(diff["words"]), 3) self.assertIn(diff["words"][0]["word"], new_words) self.assertEqual(response.status_int, 200)
def post(self): added = self.request.get_all("added[]") removed = self.request.get_all("removed[]") version = _get_max_version(self.user_key) + 1 for word in removed: w = UserDictionaryWord.query( self.user_key, UserDictionaryWord.word == word).get() w.status = "removed" w.version = version w.put() for word in added: UserDictionaryWord(word=word, status="ok", version=version, owner=self.user_key).put()
def merge_user_dictionary_data(user_key, device_key): device_words = UserDictionaryWord.query(device_key).fetch() version = max(_get_max_version(user_key), _get_max_version(device_key)) + 1 for word in device_words: user_word = UserDictionaryWord.query(user_key, UserDictionaryWord.word == word.word).get() if user_word: user_word.status = "ok" if word.status == "ok" or user_word.status == "ok" else "removed" user_word.created = min(user_word.created, word.created) user_word.used = max(user_word.used, word.used) user_word.version = version user_word.put() del word.key else: word.owner = user_key word.put() user_words = UserDictionaryWord.query(user_key).fetch() for word in user_words: word.version = version word.put()
def post(self, **kwargs): changes = json.loads(self.request.get("json")) version = _get_max_version(self.user_key) + 1 for el in changes: current_word = UserDictionaryWord.query( self.user_key, UserDictionaryWord.word == el["word"] ).get() or UserDictionaryWord(owner=self.device_key) current_word.populate(version=version, **el) current_word.put() self.response.write(version)
def post(self): added = self.request.get_all("added[]") removed = self.request.get_all("removed[]") version = _get_max_version(self.user_key) + 1 for word in removed: w = UserDictionaryWord.query(self.user_key, UserDictionaryWord.word == word).get() w.status = "removed" w.version = version w.put() for word in added: UserDictionaryWord(word=word, status="ok", version=version, owner=self.user_key).put()
def merge_user_dictionary_data(user_key, device_key): device_words = UserDictionaryWord.query(device_key).fetch() version = max(_get_max_version(user_key), _get_max_version(device_key)) + 1 for word in device_words: user_word = UserDictionaryWord.query( user_key, UserDictionaryWord.word == word.word).get() if user_word: user_word.status = "ok" if word.status == "ok" or user_word.status == "ok" else "removed" user_word.created = min(user_word.created, word.created) user_word.used = max(user_word.used, word.used) user_word.version = version user_word.put() del word.key else: word.owner = user_key word.put() user_words = UserDictionaryWord.query(user_key).fetch() for word in user_words: word.version = version word.put()
def get(self, version=0, **kwargs): version_on_device = int(version) version = _get_max_version(self.user_key) diff = UserDictionaryWord.query( self.user_key, UserDictionaryWord.version > version_on_device) self.response.write( json.dumps({ "version": version, "words": [el.to_dict(exclude=('owner', )) for el in diff] }))
def test_post(self): REQUEST_DATA = [ """[{"word": "hat", "status": "ok"}, {"word": "rat", "status": "deleted"}]""", """[{"word": "rat", "status": "deleted"}, {"word": "drop", "status": "deleted"}]""", ] VERSION_BY_WORD = {"hat": 1, "rat": 2, "drop": 2} version = 0 for el in REQUEST_DATA: request = webapp2.Request.blank("/123/api/udict") request.body = "json={}".format(el) request.method = "POST" response = request.get_response(main.app) version += 1 a = response.text self.assertEqual(int(a), version) words = UserDictionaryWord.query(self.user).fetch(4) self.assertEqual(len(words), 3) for el in words: self.assertEqual(VERSION_BY_WORD[el.word], el.version)
def test_post(self): REQUEST_DATA = [ '''[{"word": "hat", "status": "ok"}, {"word": "rat", "status": "deleted"}]''', '''[{"word": "rat", "status": "deleted"}, {"word": "drop", "status": "deleted"}]''' ] VERSION_BY_WORD = {"hat": 1, "rat": 2, "drop": 2} version = 0 for el in REQUEST_DATA: request = webapp2.Request.blank('/123/api/udict') request.body = "json={}".format(el) request.method = "POST" response = request.get_response(main.app) version += 1 a = response.text self.assertEqual(int(a), version) words = UserDictionaryWord.query(self.user).fetch(4) self.assertEqual(len(words), 3) for el in words: self.assertEqual(VERSION_BY_WORD[el.word], el.version)
def get(self): saved = self.request.get("saved", False) word_list = UserDictionaryWord.query(self.user_key, UserDictionaryWord.status == "ok").fetch() self.draw_page("editpersonaldictionary", words=word_list, saved=saved)
def _get_max_version(user): word = UserDictionaryWord.query(user).order(-UserDictionaryWord.version).get() return word.version if word else 0
def get(self, version=0, **kwargs): version_on_device = int(version) version = _get_max_version(self.user_key) diff = UserDictionaryWord.query(self.user_key, UserDictionaryWord.version > version_on_device) self.response.write(json.dumps({"version": version, "words": [el.to_dict(exclude=("owner",)) for el in diff]}))
def get(self): saved = self.request.get("saved", False) word_list = UserDictionaryWord.query( self.user_key, UserDictionaryWord.status == "ok").fetch() self.draw_page('editpersonaldictionary', words=word_list, saved=saved)
def _get_max_version(user): word = UserDictionaryWord.query(user).order( -UserDictionaryWord.version).get() return word.version if word else 0