├── chat ├── __init__.py ├── migrations │ ├── __init__.py │ └── 0001_initial.py ├── asgi.py ├── urls.py ├── routing.py ├── tests │ ├── test_views.py │ └── test_consumers.py ├── models.py ├── views.py ├── consumers.py └── settings.py ├── static ├── humans.txt ├── chat.css ├── chat.js ├── reconnecting-websocket.min.js ├── normalize.css ├── skeleton.css └── jquery-1.12.1.min.js ├── runtime.txt ├── .gitignore ├── requirements.in ├── Procfile ├── .env ├── pytest.ini ├── .travis.yml ├── tox.ini ├── manage.py ├── requirements.txt ├── TODO ├── NOTES ├── app.json ├── templates ├── chat │ ├── about.html │ └── room.html └── base.html ├── LICENSE └── README.md /chat/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/humans.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /chat/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /runtime.txt: -------------------------------------------------------------------------------- 1 | python-2.7.11 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .cache/ 2 | .coverage 3 | .tox/ 4 | htmlcov/ 5 | staticfiles/ 6 | venv/ -------------------------------------------------------------------------------- /requirements.in: -------------------------------------------------------------------------------- 1 | Django 2 | channels 3 | dj-database-url 4 | psycopg2 5 | asgi_redis 6 | haikunator -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: daphne chat.asgi:channel_layer --port $PORT --bind 0.0.0.0 -v2 2 | worker: python manage.py runworker -v2 -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | DEBUG=True 2 | DATABASE_URL=postgres:///channels-example 3 | REDIS_URL=redis://localhost:6379 4 | WEB_CONCURRENCY=2 -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | DJANGO_SETTINGS_MODULE=chat.settings 3 | addopts=--cov=chat --cov-report=term --cov-report=html 4 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: python 3 | python: 4 | - "2.7" 5 | - "3.5" 6 | install: pip install tox-travis 7 | script: tox -------------------------------------------------------------------------------- /chat/asgi.py: -------------------------------------------------------------------------------- 1 | import os 2 | import channels.asgi 3 | 4 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chat.settings") 5 | channel_layer = channels.asgi.get_channel_layer() -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | envlist = py27, py35 3 | skipsdist = true 4 | 5 | [testenv] 6 | deps = 7 | -r{toxinidir}/requirements.txt 8 | pytest-django 9 | pytest-cov 10 | commands = py.test -------------------------------------------------------------------------------- /static/chat.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 4em; 3 | } 4 | 5 | p.deck { 6 | font-size: 2.5rem; 7 | font-weight: 200; 8 | } 9 | 10 | p.deck a { 11 | text-decoration: none; 12 | } 13 | 14 | .quiet { 15 | font-size: 90%; 16 | color: #999; 17 | } -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "chat.settings") 7 | from django.core.management import execute_from_command_line 8 | execute_from_command_line(sys.argv) 9 | -------------------------------------------------------------------------------- /chat/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import include, url 2 | from . import views 3 | 4 | urlpatterns = [ 5 | url(r'^$', views.about, name='about'), 6 | url(r'^new/$', views.new_room, name='new_room'), 7 | url(r'^(?P