def test_return_text_completed(self): nicks = Completion() nicks.add('coin') nicks.add('pan') text = "foo bar @co" result = nicks.text_complete(text) self.assertEqual(result, 'in')
def test_valid_author_record_parses_as_completion_object(): id = str(uuid4()) valid_record = {'id': id, 'name': 'Some Dude', 'tags': []} author_tokens = ['some', 'dude'] got = parse_author_record(valid_record) want = Completion(id=id, name='Some Dude', tokens=author_tokens) assert got == want
def test_return_text_completed_failed(self): nicks = Completion() nicks.add('coin') nicks.add('pan') text = ['foo bar co', 'foo @co bar'] for t in text: result = nicks.text_complete(t) self.assertIsNone(result)
def init_timelines(): buffers = ('home', 'mentions', 'direct', 'search', 'user', 'favorite', 'thread', 'user_retweet', 'list') timelines = {} for buff in buffers: timelines[buff] = Timeline(buff) container.add('timelines', timelines) container.add('buffers', buffers) completion = Completion() container.add('completion', completion)
def __init__(self): # parse program arguments args = self.parse_args() addresses = self.read_addresses_dictionnary(args.dictionnary) if not addresses: AutoCompletion.quit_invalid_argument() Completion(addresses).do_completion() sys.exit(0)
def test_return_completion(self): nicks = Completion() nicks.add('coincoin') nicks.add('cooooooo') result = nicks.complete('coi') self.assertEqual('coincoin', result) result = nicks.complete('pan') self.assertIsNone(result) result = nicks.complete('co') self.assertIsNone(result)
def test_valid_course_record_parses_as_completion_object(): id = str(uuid4()) valid_record = { 'id': id, 'title': 'This is a Title', 'authors': ['Some Dude'], 'tags': [] } course_tokens = ['this', 'is', 'a', 'title', 'some', 'dude'] got = parse_course_record(valid_record) want = Completion(id=id, name='This is a Title', tokens=course_tokens) assert got == want
def test_return_completion(self): nicks = Completion() nicks.add('coincoin') nicks.add('cooooooo') result = nicks.complete('coi') self.assertEqual('ncoin', result) result = nicks.complete('pan') self.assertIsNone(result) result = nicks.complete('co') self.assertEqual(result, 'incoin')
from chore import Chore from completion import Completion from server import Scheduler dummy_chore_no_history = Chore("Test Empty", "weekly") dummy_chore = Chore("Test", "weekly") dummy_chore.history.append(Completion("Alice", "2019-11-25")) dummy_chore.history.append(Completion("Bob", "2019-12-30")) garbage = Chore("Take Out Garbage", "weekly") garbage.history = [ Completion("Alice", "2019-12-11"), Completion("Bob", "2019-12-18"), Completion("Alice", "2019-12-24"), Completion("Alice", "2020-01-01") # End Chore 0: index 3 ] litter = Chore("Litter Boxes", "daily") litter.history = [ Completion("Bob", "2019-12-22"), Completion("Bob", "2019-12-23"), Completion("Bob", "2019-12-24"), Completion("Bob", "2019-12-25"), Completion("Bob", "2019-12-26") # End Chore 1: index 8 ] dog_food = Chore("Buy Dog Food", "monthly") dog_food.history = [ Completion("Alice", "2019-11-01"), Completion("Bob", "2019-12-02"),
class Repl(asyncore.file_dispatcher): """read-eval-print loop object working asynchroneously """ def __init__(self, callback=None): self.callback = callback self.completion = Completion() self.old_settings = termios.tcgetattr(sys.stdin) tty.setcbreak(sys.stdin.fileno()) #tty.setraw(sys.stdin.fileno()) # bufferless stdout sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) self.buffer = [] asyncore.file_dispatcher.__init__(self, sys.stdin) #TODO: erase or append option self.logf = open('./trace.log', 'w') # ANSI sequences """ ANSI sequences An ANSI sequence starts with ´ (0x27) character and is followed by several keys i.e: up arrow is e-s "´[A" """ self.ansi_mode = False self.ansi_buffer = "" self.sequences = [ "[A", # up arrow "[B", # down arrow "[C", # right arrow "[D", # left arrow "[2~", # insert "[3~", # suppr "OH" , # home "OF" , # end "[5~" , # page up "[6~" , # page down "[1~", # home (keypad) "[4~", # end (keypad) "[E", # keypad middle key (5) "OP", # f1 "OQ", # f2 "OR", # f3 "OS", # f4 "[15~", # f5 "[17~", # f6 "[18~", # f7 "[19~", # f8 "[20~", # f9 "[21~", # f10 "[23~", # f11 ?? "[24~", # f12 ] # history self.histf = open('.history', 'a+') #NOTE: we only keep last 100 commands self.history = [line[:-1] for line in self.histf.readlines()] if len(self.history) > 100: self.histf.seek(0) self.history = self.history[-100:] self.curhist = None def set_callback(self, callback): self.callback = callback def cleanup(self): termios.tcsetattr(sys.stdin, termios.TCSADRAIN, self.old_settings) self.logf.close() self.histf.close() def handle_read(self): c = self.recv(1) #print self.ansi_buffer, c if self.ansi_mode: self.ansi_buffer += c if self.ansi_buffer in self.sequences: if self.ansi_buffer == '[A' and len(self.history) > 0: # up arrow: if self.curhist is None: self.curhist = len(self.history)-1 if len(self.buffer) > 0: self.history.append(''.join(self.buffer)) elif self.curhist > 0: self.history[self.curhist] = ''.join(self.buffer) self.curhist -= 1 if self.curhist >= 0: # erase line (5 == prompt width) sys.stdout.write('\r' + ' '*(5+len(''.join(self.buffer).expandtabs())) + '\r') self.buffer = list(self.history[self.curhist]) self.printit(NONE,'', NONE) elif self.ansi_buffer == '[B' and self.curhist is not None and\ self.curhist < len(self.history)-1: sys.stdout.write('\r' + ' '*(5+len(''.join(self.buffer).expandtabs())) + '\r') self.curhist += 1 self.buffer = list(self.history[self.curhist]) self.printit(NONE, '', NONE) self.ansi_mode = False return # start-of ANSI sequence if ord(c) == 27: self.ansi_mode = True; self.ansi_buffer = ""; return # carriage return elif c == '\n': # do the job cmd = ''.join(self.buffer).strip() delete = True if len(cmd) > 0: self.curhist = None self.add_history(cmd) delete = self.callback(cmd) # flush buffer if delete: del self.buffer[:]; self.printit(NONE,'',NONE) return # backspace elif c == '\b' or ord(c) == 127: if len(self.buffer) > 0: l = len(self.buffer[-1].expandtabs()) sys.stdout.write('\b'*l + ' '*l + '\b'*l) del self.buffer[-1] return #tabulation elif ord(c) == 9: status, cmd, values = self.completion.complete(''.join(self.buffer)) if status == 'invalid': self.printit(ERROR, 'Command not found') elif status == 'completion': print for val in values: print "\t", val self.buffer = list(cmd) self.printit(NONE,'',NONE) return sys.stdout.write(c) self.buffer.append(c) def printit(self, status=NONE, msg="nop", place=INBETWEEN, clean=False): if place == NONE: sys.stdout.write(Colors.BOLD + "$> " + Colors.END) sys.stdout.write(''.join(self.buffer)) return if status != NONE: msg = Colors.status[status] + msg + Colors.END if place & BEFORE == BEFORE or place == REPLACE: sys.stdout.write('\r'+' '*100+'\r') sys.stdout.write(msg) if place & BEFORE == BEFORE: sys.stdout.write('\n'+Colors.BOLD + "$> " + Colors.END) sys.stdout.write(''.join(self.buffer)) if place & AFTER == AFTER: sys.stdout.write('\n'+msg) if place & INBETWEEN == INBETWEEN: sys.stdout.write('\n' + Colors.BOLD + "$> " + Colors.END) sys.stdout.write(''.join(self.buffer)) def add_history(self, command): self.history.append(command) self.histf.write(command+'\n') def writable(self): """ NOTE: if writable() not set to False, file socket is NON-BLOCKING (using select()) """ return False
def test_add_existing(self, ): nicks = Completion() nicks.add('coin') nicks.add('coin') self.assertEqual(1, len(nicks))
def test_add(self): nicks = Completion() nicks.add('coin') self.assertEqual(1, len(nicks)) nicks.add('pan') self.assertEqual(2, len(nicks))
def __init__(self, callback=None): self.callback = callback self.completion = Completion() self.old_settings = termios.tcgetattr(sys.stdin) tty.setcbreak(sys.stdin.fileno()) #tty.setraw(sys.stdin.fileno()) # bufferless stdout sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0) self.buffer = [] asyncore.file_dispatcher.__init__(self, sys.stdin) #TODO: erase or append option self.logf = open('./trace.log', 'w') # ANSI sequences """ ANSI sequences An ANSI sequence starts with ´ (0x27) character and is followed by several keys i.e: up arrow is e-s "´[A" """ self.ansi_mode = False self.ansi_buffer = "" self.sequences = [ "[A", # up arrow "[B", # down arrow "[C", # right arrow "[D", # left arrow "[2~", # insert "[3~", # suppr "OH" , # home "OF" , # end "[5~" , # page up "[6~" , # page down "[1~", # home (keypad) "[4~", # end (keypad) "[E", # keypad middle key (5) "OP", # f1 "OQ", # f2 "OR", # f3 "OS", # f4 "[15~", # f5 "[17~", # f6 "[18~", # f7 "[19~", # f8 "[20~", # f9 "[21~", # f10 "[23~", # f11 ?? "[24~", # f12 ] # history self.histf = open('.history', 'a+') #NOTE: we only keep last 100 commands self.history = [line[:-1] for line in self.histf.readlines()] if len(self.history) > 100: self.histf.seek(0) self.history = self.history[-100:] self.curhist = None
def init_completion(): completion = Completion() for friend in container['api'].api.GetFriends(): completion.add(friend.screen_name) container['completion'] = completion
from autocomplete import (display_completions, find_completions) from completion import (Completion, Repository) repository = Repository( authors=[ Completion(id='4', name='Jared Gilbert', tokens=['jared', 'gilbert']) ], courses=[ Completion(id='1', name='Fundamentals of Angular 4', tokens=['fundamentals', 'of', 'angular', '4', 'ha', 'phan']), Completion( id='2', name='Angular Components and Stuff', tokens=['angular', 'components', 'and', 'stuff', 'ha', 'phan']), Completion(id='3', name='React for Lazy People', tokens=['react', 'for', 'lazy', 'people']) ]) def test_no_query_yields_empty_list(): got = find_completions(None, repository) want = [] assert got == want def test_no_matches_yields_empty_list(): got = find_completions('java', repository) want = []
def test_class(self): nicks = Completion() self.assertIsInstance(nicks, Completion)
def mark_completed(self, person): self.history.append(Completion(person, date.today().isoformat()))