Example #1
0
    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
Example #2
0
 def deserialize(puzzle_json) -> 'Puzzle':
     name = puzzle_json['name']
     vials = [Vial.deserialize(vial) for vial in puzzle_json['vials']]
     return Puzzle(name, vials)
Example #3
0
 def __hash__(self) -> int:
     return Vial.hash_vials(self.vials)
Example #4
0
 def serialize(puzzle: 'Puzzle') -> List[str]:
     vials = [Vial.serialize(vial) for vial in puzzle.vials]
     return {'name': puzzle.name, 'vials': vials}
Example #5
0

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()
Example #6
0
"""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()
Example #7
0
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:')
Example #8
0
 def setup(self):
     self.connection = redis.StrictRedis()
     self.vial = Vial()
 def setup(self):
     self.connection = redis.StrictRedis()
     self.vial = Vial()
Example #10
0
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
Example #11
0
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()
Example #12
0
        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")
Example #13
0
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()