def possible_moves(self) -> List[Move]: possible_moves: List[Move] = [] unique_moves: Set[int] = set() for from_index, from_vial in enumerate(self.vials): if from_vial.is_complete() or from_vial.is_empty(): continue for to_index, to_vial in enumerate(self.vials): if to_vial.is_complete( ) or from_index == to_index or to_vial.is_full(): continue if to_vial.is_empty() or from_vial.peek() == to_vial.peek(): copy_from_vial = deepcopy(from_vial) copy_to_vial = deepcopy(to_vial) color: Color = copy_from_vial.pop() copy_to_vial.push(color) vials_hash: int = Vial.hash_vials( [copy_from_vial, copy_to_vial]) if not vials_hash in unique_moves: unique_moves.add(vials_hash) move = Move(from_index, to_index) possible_moves.append(move) return possible_moves
def deserialize(puzzle_json) -> 'Puzzle': name = puzzle_json['name'] vials = [Vial.deserialize(vial) for vial in puzzle_json['vials']] return Puzzle(name, vials)
def __hash__(self) -> int: return Vial.hash_vials(self.vials)
def serialize(puzzle: 'Puzzle') -> List[str]: vials = [Vial.serialize(vial) for vial in puzzle.vials] return {'name': puzzle.name, 'vials': vials}
def new_snippet(headers, body, data): return render_template('new_snippet.html', headers=headers, body=body, data=data), 200, {} def upload(headers, body, data): return render_template('upload.html', body=body, data=data), 200, {} routes = { '/': index, '/auth': auth, '/recovery': recovery, '/passwordRecovery': forgot_password, '/insert_new_password': insert_new_password, '/signup': signup, '/signup_db': signup_db, '/new_snippet': new_snippet, '/put_snippet': put_snippet, '/upload': upload, '/upload_file': upload_file, '/password_change_form': change_password_form, '/password_change': insert_new_passwd } app = Vial(routes, prefix='', static='/static').wsgi_app()
"""The main WSGI application.""" import logging from vial import Vial app = Vial() if __name__ == '__main__': logging.basicConfig(level=logging.INFO) from wsgiref.simple_server import make_server with make_server('', 8000, app) as httpd: logging.info("Serving on port 8000...") httpd.serve_forever()
class TestSession: def setup(self): self.connection = redis.StrictRedis() self.vial = Vial() def test_direct_new(self): session = Session() assert b'_created' in session._cache assert b'_accessed' in session._cache def test_new(self): session = self.vial.Session() assert b'_created' in session._cache assert b'_accessed' in session._cache def test_new_save(self): session = self.vial.Session() assert session.is_new session.save() assert not session.is_new assert session.id is not None assert self.connection.exists(session._key) def test_new_mapping(self): session = self.vial.Session() assert len(session) == 2 assert b'_created' in list(iter(session)) assert b'_accessed' in list(iter(session)) def test_fetch_mapping(self): session = self.vial.Session() session.save() session = self.vial.Session(session._key) assert len(session) == 2 assert b'_created' in list(iter(session)) assert b'_accessed' in list(iter(session)) def test_new_add_after(self): session = self.vial.Session() session.save() session['one'] = 1 session['two'] = 'two' session['three'] = 3.0 assert len(session) == 5 session.save() assert b'one' in self.connection.hkeys(session._key) assert b'two' in self.connection.hkeys(session._key) assert self.connection.hget(session._key, b'three') == b'3.0' assert self.connection.hget(session._key, b'two') == b'two' assert self.connection.hget(session._key, b'one') == b'1' def test_new_add_and_fetch(self): session = self.vial.Session() assert session.is_new session[b'two'] = b'two' session.save() session = self.vial.Session(session.id) assert not session.is_new assert session[b'two'] == 'two' def test_set_accessed_time(self): session = self.vial.Session() accessed = session['_accessed'] session.save() session = self.vial.Session(session.id) assert accessed != session['_accessed'] def test_expire_session(self): session = self.vial.Session() session.save() expires = self.connection.ttl(session._key) assert expires <= (60 * 60 * 24) def test_cache(self): session = self.vial.Session() session.save() self.connection.hset(session._key, b'color', b'blue') assert session['color'] == 'blue' self.connection.hset(session._key, b'color', b'red') assert session['color'] == 'blue' def test_expunge(self): session = self.vial.Session() session.save() self.connection.hset(session._key, b'color', b'blue') assert session['color'] == 'blue' self.connection.hset(session._key, b'color', b'red') session.expunge() assert session['color'] == 'red' def test_no_expire(self): session = self.vial.Session(expires=False) session.save() expires = self.connection.ttl(session._key) assert expires == -1 def test_remove_value(self): session = self.vial.Session() session.save() session['color'] = 'blue' session.save() assert self.connection.hget(session._key, b'color') == b'blue' session['color'] = None session.save() assert self.connection.hget(session._key, b'color') is None def test_del_value(self): session = self.vial.Session() session.save() session['color'] = 'blue' session.save() assert self.connection.hget(session._key, b'color') == b'blue' del session['color'] session.save() assert self.connection.hget(session._key, b'color') is None def test_namespaced_key(self): session = self.vial.Session(namespace='vial') session.save() assert session._key.startswith(b'vial:')
def setup(self): self.connection = redis.StrictRedis() self.vial = Vial()
class TestUserSession: def setup(self): self.connection = redis.StrictRedis() self.vial = Vial() def test_store_and_fetch_user(self): session = self.vial.UserSession() session.user = '******' session.save() session = self.vial.UserSession(id=session.id) assert session.get('_user_id') == '12345' def test_store_and_fetch_user_inline(self): session = self.vial.UserSession(user='******') session.save() session = self.vial.UserSession(id=session.id) assert session.get('_user_id') == '12345' def test_change_user(self): session = self.vial.UserSession(user='******') session.save() sessions = list(self.vial.get_for_user('12345')) assert session.id in sessions session.user = '******' sessions = list(self.vial.get_for_user('12345')) assert session.id in sessions session.save() sessions = list(self.vial.get_for_user('12345')) assert session.id not in sessions def test_expire_no_user_session(self): session = self.vial.UserSession() session.save() expires = self.connection.ttl(session._key) assert expires <= (60 * 60 * 24) def test_expire_user_session(self): session = self.vial.UserSession() session.user = '******' session.save() expires = self.connection.ttl(session._key) assert expires <= (60 * 60 * 24 * 7) def test_no_expire_session(self): session = self.vial.UserSession(expires=False) session.save() expires = self.connection.ttl(session._key) assert expires == -1 def test_no_expire_user_session(self): session = self.vial.UserSession(user_expires=False) session.user = '******' session.save() expires = self.connection.ttl(session._key) assert expires == -1 def test_get_all_by_user(self): session1 = self.vial.UserSession() session1.user = '******' session1.save() session2 = self.vial.UserSession() session2.user = '******' session2.save() sessions = list(self.vial.get_for_user('12345')) assert session1.id in sessions assert session2.id in sessions def test_delete_all_by_user(self): session1 = self.vial.UserSession() session1.user = '******' session1.save() session2 = self.vial.UserSession() session2.user = '******' session2.save() self.vial.delete_for_user('12345') assert self.vial.UserSession(id=session1.id).is_new assert self.vial.UserSession(id=session2.id).is_new
from vial import Vial app = Vial(name="awesome-app", host="192.168.99.100:9092") @app.event("hello") def hello(message): return "hello world" if __name__ == '__main__': app.run()
puzzle_name = input("What's the name of this puzzle? ").strip() num_vials = int(input("\nHow many vials do you want? ").strip()) print() vials: List[Vial] = [] vials = [] for vial_index in range(num_vials): num_colors_answer = input( "How many colors do you want? [4] ").strip() or "4" num_colors = int(num_colors_answer) vial = None if num_colors == 0: vial = Vial(vial_index, []) else: is_good = "n" while not is_good == "Y": print(f"Please choose your colors for vial {vial_index}") color_choices = choose_colors(num_colors) vial = Vial(vial_index, color_choices) vial.pretty_print() is_good = input( "\nDoes the vial look correct? [Y/n] ").strip() or "Y" vials.append(vial) print("\n")