def post(self): self.response.headers['Content-Type'] = 'text/html' action = self.request.get('button') user = users.get_current_user() user_key = ndb.Key('MyUser', user.user_id()) user_info = user_key.get() if action == 'Add': original_word = (self.request.get('Word')).lower() if not re.match("^[a-z]*$", original_word.lower()): message = "Please enter alphabets only" else: Word = lexi(self.request.get('Word')) anagram_key = ndb.Key('Anagram', user.email() + Word) anagram = anagram_key.get() # & anagram.User != user if anagram == None: new_anagram = Anagram(id=user.email() + Word, AnagramKey=Word) new_anagram.User = user.email() new_anagram.WordList.append(original_word) new_anagram.WordCount = 1 new_anagram.LetterCount = len(original_word) new_anagram.put() user_info.myAnagram = user_info.myAnagram + 1 user_info.myWordCount = user_info.myWordCount + 1 user_info.put() message = "Word added" else: flag = False for word in anagram.WordList: if word == original_word: flag = True break else: flag = False if flag: message = "Word already exists" else: # anagram.User=user.email() anagram.WordList.append(original_word) anagram.WordCount = anagram.WordCount + 1 anagram.put() message = "Word added" user_info.myWordCount = user_info.myWordCount + 1 user_info.put() template_values = {'message': message} template = JINJA_ENVIRONMENT.get_template('add.html') self.response.write(template.render(template_values))
def post(self): self.response.headers["Content-Type"] = "text/html" file = self.request.get("textfile") openFile = open(file) readLine = openFile.readline() while readLine: text_word = (readLine.strip('\n\r')).lower() sorted_key = Services().sorted_key(word=text_word) list_word = Anagram.query() list_word = list_word.filter( Anagram.anagram_key == sorted_key, Anagram.user_id == Services().get_current_user_id()) list_word = list_word.fetch() valid_permutation = Services().validpermutations(text=sorted_key) if len(valid_permutation) > 0: if len(list_word) > 0: anagram = list_word[0] if text_word not in anagram.inputed_words: inputed_words = anagram.inputed_words inputed_words.append(text_word) anagram.inputed_words = inputed_words anagram.inputed_words_count = anagram.inputed_words_count + 1 anagram.put() else: new_anagram = Anagram( anagram_key=sorted_key, anagram_words=Services().possiblepermutations( text=sorted_key), inputed_words=[text_word], inputed_words_count=1, word_length=len(text_word), user_id=Services().get_current_user_id()) new_anagram.put() readLine = openFile.readline() openFile.close() message = "Upload completed" template_values = {'message': message} template = JINJA_ENVIRONMENT.get_template("importdata.html") self.response.write(template.render(template_values))
def add_new_anagram(my_user, text, anagram_id, anagram_key): if is_english_word(text): anagram = Anagram(id=anagram_id) anagram.words.append(text) anagram.sorted_word = generate_id(text) anagram.length = len(text) anagram.user_id = my_user.key.id() anagram.put() # add key of the new anagram to the users KeyProperty my_user.anagrams.append(anagram_key) my_user.put()
def addanagram_new(my_user, text, words, anagram_id, anagram_key): if englishword(text): anagram = Anagram(id=anagram_id) anagram.words.append(text) anagram.sorted_word = generateid_for_users(text) anagram.length = len(text) anagram.words_count = len(anagram.words) anagram.sub_words = words anagram.user_id = my_user.key.id() anagram.put() my_user.anagrams.append(anagram_key) my_user.put()
def test_insert_request(self): anagram = Anagram() anagram.insertRequest("abc", "bca") anagram.insertRequest("abc", "bca") anagram.insertRequest("bca", "abc") anagram.insertRequest("tyyy", "yyyt") anagram.insertRequest("yyyt", "tyyy") # insert other 2 other requests anagram.insertRequest("kuk", "kku") anagram.insertRequest("rrr", "rrr") self.assertEqual(len(anagram.requests.values()), 4, "Should have 4 different requests")
def post(self): self.response.headers["Content-Type"] = "text/html" if self.request.get("addword") == "Add Word": user_word = self.request.get("word").lower() if Services().get_current_user() == None or user_word == None or user_word == "" : self.redirect("/addword") return current_user_id = Services().get_current_user_id() sorted_key = Services().sorted_key(word =user_word) list_word = Anagram.query() list_word = list_word.filter(Anagram.anagram_key == sorted_key,Anagram.user_id == current_user_id) list_word = list_word.fetch() valid_permutation = Services().validpermutations(text=sorted_key) if len(valid_permutation) == 0: self.redirect("/addword") return if len(list_word) > 0: anagram = list_word[0] if user_word in anagram.inputed_words: self.redirect("/addword") return inputed_words = anagram.inputed_words inputed_words.append(user_word) anagram.inputed_words = inputed_words anagram.inputed_words_count = anagram.inputed_words_count + 1 anagram.put() else: new_anagram = Anagram(anagram_key=sorted_key, anagram_words = Services().possiblepermutations(text=sorted_key), inputed_words = [user_word], inputed_words_count = 1, word_length = len(user_word), user_id = current_user_id) new_anagram.put() self.redirect("/")
def post(self): self.response.headers["Content-Type"] = "text/html" # checking whether the key is add word if self.request.get("newdevice") == "Add Word": inputed_word = self.request.get("word").lower() # checking whether the inputed word is null or not and redirecting to the add word paeg if Services().get_current_user( ) == None or inputed_word == None or inputed_word == "": self.redirect("/newdevice") return current_user_id = Services().get_current_user_id() sorted_key = Services().sorted_key(word=inputed_word) list_word = Anagram.query() list_word = list_word.filter(Anagram.anagram_key == sorted_key, Anagram.user_id == current_user_id) list_word = list_word.fetch() valid_permutation = Services().validpermutations(text=sorted_key) # checking whether the inputed word has valid permutations or not if len(valid_permutation) == 0: self.redirect("/newdevice") return # checking whether the there are any word in the list or redirecting to the add word page if len(list_word) > 0: anagram = list_word[0] if inputed_word in anagram.input_words: self.redirect("/newdevice") return inputed_words = anagram.input_words inputed_words.append(inputed_word) anagram.input_words = inputed_words anagram.input_words_count = anagram.input_words_count + 1 anagram.put() else: new_anagram = Anagram( anagram_key=sorted_key, anagram_words=Services().permutations(text=sorted_key), input_words=[inputed_word], input_words_count=1, word_length=len(inputed_word), user_id=current_user_id) new_anagram.put() self.redirect("/")
def add_new_anagram(my_user, text, anagram_id, anagram_key): if text: anagram = Anagram(id=anagram_id) anagram.words.append(text) anagram.sorted_word = generate_id(text) anagramList = list(text) anagram.sub_anagram = generateSubAnagrams(anagramList) anagram.length = len(text) anagram.user_id = my_user.key.id() anagram.put() my_user.anagrams.append(anagram_key) if anagram.sorted_word is not None: my_user.anagram_count += 1 my_user.anagram_count if anagram.words is not None: my_user.words_count += 1 my_user.words_count my_user.put()
def test_get_top_ten_requests(self): anagram = Anagram() anagram.insertRequest("abc", "bca") anagram.insertRequest("abc", "bca") anagram.insertRequest("bca", "abc") anagram.insertRequest("tyyy", "yyyt") anagram.insertRequest("yyyt", "tyyy") self.assertTrue(len(anagram.getTopTenRequests()), 2) anagram.insertRequest("a", "a") anagram.insertRequest("kkk", "kkk") anagram.insertRequest("iu", "ui") anagram.insertRequest("yyzz", "zzyy") anagram.insertRequest("rtc", "ctr") anagram.insertRequest("io", "oi") anagram.insertRequest("erpet", "peter") anagram.insertRequest("hi", "ih") self.assertTrue(len(anagram.getTopTenRequests()), 10) anagram.insertRequest("hi", "ih") anagram.insertRequest("hi", "ih") anagram.insertRequest("oy", "yo") self.assertTrue(len(anagram.getTopTenRequests()), 11)
def print_all_anagrams_in_word_list(phrase_str, word_list): """Prints all anagrams of a phrase that its words found in word list. Args: phrase_str (str) - phrase word_list (WordList) - WordList object already created Returns: none """ phrase = Anagram(phrase_str) next_anagram = list() print("anagrams found:") while phrase.find_next_anagram() == NextAnagram.NEXT_FOUND: next_anagram = phrase.get_next_anagram() all_anagram_words_found = True for word in next_anagram: if word_list.find_word(word) != FindWord.WORD_FOUND: all_anagram_words_found = False break if all_anagram_words_found: print(" ".join(next_anagram))
def test_eliminate_anagram_subsets(self): self.assertEqual( [], Anagram('good').match('dog goody'.split()) )
from flask import Flask, render_template, json, request from anagram import Anagram app = Flask(__name__) anagram = Anagram() @app.route('/') def index(): return render_template('index.html') @app.route('/check_anagram') def check_anagram(): firstWord = request.args.get("firstWord", "") secondWord = request.args.get("secondWord", "") if Anagram.checkIfAnagram(firstWord, secondWord): return json.dumps({ "result": True, "message": "Yes! They are anagrams" }) else: return json.dumps({ "result": False, "message": "No! They are NOT anagrams" }) @app.route('/refresh_topten')
def test_anagram(): a = Anagram('eng-text.txt') print 'The anagrams found in text:' a.findAnagrams().printNodesAndStorage()
def test_no_matches(self): self.assertEqual( [], Anagram('diaper').match('hello world zombies pants'.split()) #match takes a list )
def test_is_anagram(self): anagram = Anagram() self.assertTrue(anagram.is_Anagram("abc", "bca"))
def test_detect_simple_anagram(self): self.assertEqual( ['tan'], Anagram('ant').match('tan stand at'.split()) )
def test_anagram(self): anagram = Anagram() self.assertTrue(anagram.is_anagram("god", "dog"))
def main(): test = TestAnagram() anagram = Anagram() test.test_anagram(anagram.anagram) test.test_anagram(anagram.anagram2)
def test_does_not_confuse_different_duplicates(self): self.assertEqual( [], Anagram('galea').match(['eagle']) )
def test_detect_multiple_anagrams(self): self.assertEqual( ['stream', 'maters'], Anagram('master').match('stream pigeon maters'.split()) )
def test_detect_anagram(self): self.assertEqual( ['inlets'], Anagram('listen').match('enlists google inlets banana'.split()) )
def test_multiple_anagrams(self): self.assertEqual( 'gallery regally largely'.split(), Anagram('allergy').match('gallery ballerina regally clergy largely leading'.split()) )
def post(self): self.response.headers['Content-Type'] = 'text/html' action = self.request.get('button') user = users.get_current_user() myuser_key = ndb.Key('MyUser', user.user_id()) myuser = myuser_key.get() file = self.request.get('myFile') if action == 'UPLOAD': f = open(file) line = f.readline() # count = 1 while line: original_word = (line.strip('\n\r')).lower() lexi_word = lexi(original_word) anagram_key = ndb.Key('Anagram',user.email()+lexi_word) anagram = anagram_key.get() if anagram == None: new_anagram = Anagram(id=user.email()+lexi_word,AnagramKey=lexi_word) new_anagram.User=user.email() new_anagram.WordList.append(original_word) new_anagram.WordCount = 1 new_anagram.LetterCount = len(original_word) new_anagram.put() myuser.myAnagram = myuser.myAnagram + 1 myuser.myWordCount = myuser.myWordCount + 1 myuser.put() else: flag = False for word in anagram.WordList: if word == original_word: flag = True break else: flag = False if flag: message = "Word already exists" else: # anagram.User=user.email() anagram.WordList.append(original_word) anagram.WordCount = anagram.WordCount + 1 anagram.put() # message = "Word added" myuser.myWordCount = myuser.myWordCount + 1 myuser.put() # count = count + 1 line = f.readline() f.close() template_values={ 'message':"File Uploaded" } template = JINJA_ENVIRONMENT.get_template('upload.html') self.response.write(template.render(template_values))
def test_anagrams_are_case_insensitive(self): self.assertEqual( ['Carthorse'], Anagram('Orchestra').match('cashregister Carthorse radishes'.split()) )
def test_is_anagram_with_oneparameter(self): anagram = Anagram() self.assertFalse(anagram.is_Anagram("", "bcca"))
def test_same_word_isnt_anagram(self): self.assertEqual( [], Anagram('banana').match(['banana']) )
def test_isnot_anagram01(self): anagram = Anagram() self.assertFalse(anagram.is_Anagram("abc", "bcca"))
from anagram import Anagram from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import SocketServer import urlparse import urllib2 import json response = urllib2.urlopen( 'https://raw.githubusercontent.com/first20hours/google-10000-english/master/20k.txt' ) wordlist = response.read() global_anagram = Anagram(wordlist) class WebServer(BaseHTTPRequestHandler): def _set_headers(self): self.send_response(200) self.send_header('Content-type', 'text/json') self.end_headers() def do_GET(self): self._set_headers() if self.path.startswith('/?anagram='): components = self.path.split('=') if len(components) > 1: word = components[1] solution = global_anagram.solve(word) text = json.dumps(solution) self.wfile.write(text) del text del solution