File: mutli-server.py

package info (click to toggle)
python-trame 3.12.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 101,620 kB
  • sloc: python: 13,515; sh: 183; javascript: 93; makefile: 7
file content (69 lines) | stat: -rw-r--r-- 1,839 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
r"""
Multi-server setup

Installation requirements:
    pip install trame trame-vuetify
"""

import asyncio

from trame.app import get_server
from trame.ui.vuetify import SinglePageLayout
from trame.widgets import vuetify

server1 = get_server("server1", client_type="vue2")
state1 = server1.state
state1.trame__title = "Server1"

server2 = get_server("server2", client_type="vue2")
state2 = server2.state
state2.trame__title = "Server2"


def send_to_server1(message):
    with state1:
        state1.received = message


def send_to_server2(message):
    with state2:
        state2.received = message


with SinglePageLayout(server1) as layout:
    layout.title.set_text("Server1")

    with layout.content:
        with vuetify.VCard(classes="pa-4"):
            vuetify.VTextField(
                v_model=("message", "Hi from server 1"),
            )
            vuetify.VBtn(
                "Send message to server 2",
                click=(send_to_server2, "[message]"),
            )
            vuetify.VTextField(readonly=True, v_model=("received", "<message here>"))

with SinglePageLayout(server2) as layout:
    layout.title.set_text("Server2")

    with layout.content:
        with vuetify.VCard(classes="pa-4"):
            vuetify.VTextField(
                v_model=("message", "Hi from server 2"),
            )
            vuetify.VBtn(
                "Send message to server 1",
                click=(send_to_server1, "[message]"),
            )
            vuetify.VTextField(
                readonly=True,
                v_model=("received", "<message here>"),
            )


if __name__ == "__main__":
    task1 = server1.start(exec_mode="task", port=8080)
    task2 = server2.start(exec_mode="task", port=8081)
    loop = asyncio.get_event_loop()
    loop.run_until_complete(asyncio.gather(task1, task2))