Skip to content

Commit de94dcf

Browse files
author
Mark Gibbs
committed
Moving towards a useful demo
1 parent 70d3a95 commit de94dcf

File tree

4 files changed

+62
-20
lines changed

4 files changed

+62
-20
lines changed

demo/demo/consumers.py

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,59 @@
22

33
import json
44

5+
ALL_CONSUMERS = []
6+
57
class MessageConsumer(WebsocketConsumer):
8+
def __init__(self, *args, **kwargs):
9+
super(MessageConsumer, self).__init__(*args, **kwargs)
10+
global ALL_CONSUMERS
11+
ALL_CONSUMERS.append(self)
612

713
def connect(self):
814
self.accept()
915

1016
def disconnect(self, close_code):
11-
pass
17+
ac = []
18+
global ALL_CONSUMERS
19+
for c in ALL_CONSUMERS:
20+
if c != self:
21+
ac.append(c)
22+
ALL_CONSUMERS = ac
1223

1324
def send_to_widgets(self, channel_name, label, value):
14-
self.send(json.dumps({'channel_name':channel_name,
25+
message = json.dumps({'channel_name':channel_name,
1526
'label':label,
16-
'value':value}))
27+
'value':value})
28+
global ALL_CONSUMERS
29+
30+
for c in ALL_CONSUMERS:
31+
c.send(message)
32+
1733
def receive(self, text_data):
18-
print("Got incoming")
1934
message = json.loads(text_data)
20-
print(text_data)
21-
self.send(json.dumps({'message':"Thanks for [%s]"%text_data}))
22-
self.send(json.dumps({'original_message':message}))
2335

24-
# TODO if type is connection_triplet then store and/or update the info
25-
# TODO else do something appropriate with the message
36+
message_type = message.get('type','unknown_type')
37+
38+
if message_type == 'connection_triplet':
39+
40+
channel_name = message.get('channel_name',"UNNAMED_CHANNEL")
41+
uid = message.get('uid',"0000-0000")
42+
label = message.get('label','DEFAULT$LABEL')
43+
44+
# For now, send the uid as value. This essentially 'resets' the value
45+
# each time the periodic connection announcement is made
46+
self.send_to_widgets(channel_name=channel_name,
47+
label=label,
48+
value=uid)
49+
else:
50+
# Not a periodic control message, so do something useful
51+
# For now, this is just pushing to all other consumers indiscrimnately
2652

27-
channel_name = message.get('channel_name',"UNNAMED_CHANNEL")
28-
uid = message.get('uid',"0000-0000")
29-
label = message.get('label','DEFAULT$LABEL')
53+
channel_name = message.get('channel_name',"UNNAMED_CHANNEL")
54+
uid = message.get('uid',"0000-0000")
55+
value = message.get('value',{'source_uid':uid})
56+
label = message.get('label','DEFAULT$LABEL')
3057

31-
self.send_to_widgets(channel_name=channel_name,
32-
label=label,
33-
value=uid)
58+
self.send_to_widgets(channel_name=channel_name,
59+
label=label,
60+
value=value)

demo/demo/plotly_apps.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def callback_c(*args,**kwargs):
6464
uid="need_to_generate_this"),
6565
dpd.Pipe(id="also_dynamic",
6666
value="Alternator 456",
67-
label="rotational energy",
67+
label="momentum",
6868
channel_name="test_widget_channel",
6969
uid="and_this_one"),
7070
dpd.DPDirectComponent(id="direct"),
@@ -78,6 +78,8 @@ def callback_c(*args,**kwargs):
7878
dash.dependencies.Output('output-three','children'),
7979
[dash.dependencies.Input('dynamic','value'),
8080
dash.dependencies.Input('dynamic','label'),
81+
dash.dependencies.Input('also_dynamic','value'),
82+
dash.dependencies.Input('dropdown-one','value'),
8183
])
8284
def callback_a3(*args, **kwargs):
8385
da = kwargs['dash_app']

demo/demo/templates/index.html

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
<!DOCTYPE HTML>
22
<html>
3-
{%load plotly_dash%}
4-
<title>Simple stuff</title>
3+
<head>
4+
{%load plotly_dash%}
5+
<title>Simple stuff</title>
6+
</head>
57
<body>
8+
<div>
9+
<p>Navigational links :
10+
<a href="{%url "home"%}">Main Page</a>
11+
<a href="{%url "second"%}">Second Page</a>
12+
</p>
13+
</div>
614
<div>
715
Content here
816
{%plotly_app slug="simpleexample-1" ratio=0.2 %}
@@ -16,9 +24,13 @@
1624
{%plotly_app name="Ex2"%}
1725
</div>
1826
<div>
19-
Content here
27+
WS Content here
2028
{%plotly_app name="Connected"%}
2129
</div>
30+
<div>
31+
WS Content here
32+
{%plotly_app slug="connected-9"%}
33+
</div>
2234
</body>
2335
{%plotly_message_pipe%}
2436
</html>

demo/demo/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
import demo.plotly_apps
2323

2424
urlpatterns = [
25-
path('', TemplateView.as_view(template_name='index.html')),
25+
path('', TemplateView.as_view(template_name='index.html'), name="home"),
26+
path('second_page', TemplateView.as_view(template_name='second_page.html'), name="second"),
2627
path('admin/', admin.site.urls),
2728
path('django_plotly_dash/', include('django_plotly_dash.urls')),
2829
]

0 commit comments

Comments
 (0)