Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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()
Example #4
0
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()
Example #5
0
 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)
Example #6
0
 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()
Example #7
0
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()
Example #8
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]
         }))
Example #9
0
 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)
Example #10
0
 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)
Example #11
0
 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)
Example #12
0
def _get_max_version(user):
    word = UserDictionaryWord.query(user).order(-UserDictionaryWord.version).get()
    return word.version if word else 0
Example #13
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]}))
Example #14
0
 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)
Example #15
0
def _get_max_version(user):
    word = UserDictionaryWord.query(user).order(
        -UserDictionaryWord.version).get()
    return word.version if word else 0