forked from AFPy/PonyConf
Compare commits
10 Commits
787bc67794
...
1a8888ea1b
Author | SHA1 | Date |
---|---|---|
François Leborne | 1a8888ea1b | |
François Leborne | 16abc04762 | |
François Leborne | ce34cb94d3 | |
François Leborne | 3adc923e40 | |
Julien Palard | 035a1a16c3 | |
Mindiell | 016a762e83 | |
Mindiell | 4b34081457 | |
Mindiell | 1085cd497c | |
Julien Palard | c88cc3e2a2 | |
Julien Palard | d7bb1d77f5 |
|
@ -0,0 +1,14 @@
|
|||
FROM python:3
|
||||
|
||||
VOLUME /tmp/app
|
||||
WORKDIR /tmp/app
|
||||
|
||||
COPY requirements.txt ./
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN ./manage.py migrate
|
||||
|
||||
EXPOSE 8000
|
||||
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
|
16
README.md
16
README.md
|
@ -2,7 +2,6 @@
|
|||
|
||||
Organise your conferences.
|
||||
|
||||
|
||||
## HowTo Test
|
||||
|
||||
(you should work on a virtualenv)
|
||||
|
@ -16,7 +15,6 @@ pip install -U -r requirements.txt
|
|||
./manage.py createsuperuser
|
||||
```
|
||||
|
||||
|
||||
## HowTo update translations
|
||||
|
||||
```bash
|
||||
|
@ -24,3 +22,17 @@ pip install -U -r requirements.txt
|
|||
poedit locale/fr/LC_MESSAGES/django.po
|
||||
./manage.py compilemessages
|
||||
```
|
||||
|
||||
## Docker
|
||||
|
||||
### Build
|
||||
|
||||
docker build -t ponyconf .
|
||||
|
||||
### Start
|
||||
|
||||
./test_site.bash
|
||||
|
||||
### Configure
|
||||
|
||||
docker exec -it ponyconf ./manage.py createsuperuser
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from django.contrib.auth.forms import AuthenticationForm
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.forms.models import modelform_factory
|
||||
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.contrib.auth.models import User
|
||||
from django.urls import reverse
|
||||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class Profile(models.Model):
|
||||
|
|
|
@ -4,8 +4,8 @@ from django.contrib.auth.signals import user_logged_in, user_logged_out
|
|||
#from django.contrib.sites.shortcuts import get_current_site
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
#from django.utils.translation import ugettext_noop
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
#from django.utils.translation import gettext_noop
|
||||
|
||||
from ponyconf.decorators import disable_for_loaddata
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.contrib.auth.decorators import login_required
|
||||
from django.contrib.auth.views import LoginView
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from django.shortcuts import redirect, render
|
||||
from django.contrib import messages
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from django.utils.translation import ugettext as _
|
||||
from django.utils.translation import gettext as _
|
||||
from django.utils.html import escape
|
||||
|
||||
from pprint import pformat
|
||||
|
|
|
@ -3,7 +3,7 @@ from django.forms.models import modelform_factory
|
|||
from django.contrib.auth.admin import UserAdmin
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.forms import UsernameField
|
||||
from django.utils.translation import ugettext_lazy as _, pgettext_lazy
|
||||
from django.utils.translation import gettext_lazy as _, pgettext_lazy
|
||||
from django.template.defaultfilters import slugify
|
||||
from django.utils.crypto import get_random_string
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
from django.contrib.auth.models import User
|
||||
from django.contrib.sites.models import Site
|
||||
from django.conf import settings
|
||||
from django.urls import reverse
|
||||
from django.core.validators import MaxValueValidator, MinValueValidator
|
||||
from django.core.exceptions import ValidationError
|
||||
|
@ -7,13 +8,14 @@ from django.db import models
|
|||
from django.db.models import Q, Count, Avg, Case, When
|
||||
from django.db.models.functions import Coalesce
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import ugettext, ugettext_lazy as _
|
||||
from django.utils.translation import gettext, gettext_lazy as _
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.html import escape, format_html
|
||||
|
||||
from autoslug import AutoSlugField
|
||||
from colorful.fields import RGBColorField
|
||||
from functools import partial
|
||||
import phonenumbers
|
||||
|
||||
import uuid
|
||||
from datetime import timedelta
|
||||
|
@ -98,9 +100,10 @@ class ParticipantManager(models.Manager):
|
|||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
qs = qs.annotate(
|
||||
accepted_talk_count=Count(Case(When(talk__accepted=True, then='talk__pk'), output_field=models.IntegerField()), distinct=True),
|
||||
accepted_talk_count=Count(Case(When(Q(talk__accepted=True) & (Q(talk__confirmed=True) | Q(talk__confirmed__isnull=True)), then='talk__pk'), output_field=models.IntegerField()), distinct=True),
|
||||
pending_talk_count=Count(Case(When(talk__accepted=None, then='talk__pk'), output_field=models.IntegerField()), distinct=True),
|
||||
refused_talk_count=Count(Case(When(talk__accepted=False, then='talk__pk'), output_field=models.IntegerField()), distinct=True),
|
||||
canceled_talk_count=Count(Case(When(talk__confirmed=False, then='talk__pk'), output_field=models.IntegerField()), distinct=True),
|
||||
)
|
||||
return qs
|
||||
|
||||
|
@ -152,7 +155,10 @@ class Participant(PonyConfModel):
|
|||
|
||||
@property
|
||||
def accepted_talk_set(self):
|
||||
return self.talk_set.filter(accepted=True)
|
||||
return self.talk_set.filter(accepted=True).exclude(confirmed=False)
|
||||
@property
|
||||
def canceled_talk_set(self):
|
||||
return self.talk_set.filter(confirmed=False)
|
||||
@property
|
||||
def pending_talk_set(self):
|
||||
return self.talk_set.filter(accepted=None)
|
||||
|
@ -275,7 +281,7 @@ class TalkCategory(models.Model): # type of talk (conf 30min, 1h, stand, …)
|
|||
verbose_name_plural = "categories"
|
||||
|
||||
def __str__(self):
|
||||
return ugettext(self.name)
|
||||
return gettext(self.name)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('category-list')
|
||||
|
@ -311,7 +317,7 @@ class TalkCategory(models.Model): # type of talk (conf 30min, 1h, stand, …)
|
|||
class TalkManager(models.Manager):
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
qs = qs.annotate(score=Coalesce(Avg('vote__vote'), 0))
|
||||
qs = qs.annotate(score=Coalesce(Avg('vote__vote'), 0.0))
|
||||
return qs
|
||||
|
||||
|
||||
|
@ -483,12 +489,22 @@ class Activity(models.Model):
|
|||
return self.name
|
||||
|
||||
|
||||
def validate_phone_number(phone_number: str):
|
||||
try:
|
||||
number = phonenumbers.parse(phone_number, region=settings.DEFAULT_PHONE_REGION)
|
||||
except phonenumbers.phonenumberutil.NumberParseException as err:
|
||||
raise ValidationError(str(err))
|
||||
else:
|
||||
if not phonenumbers.is_valid_number(number):
|
||||
raise ValidationError(_("Invalid phone number, try using the country code (like +33 for France)"))
|
||||
|
||||
|
||||
class Volunteer(PonyConfModel):
|
||||
site = models.ForeignKey(Site, on_delete=models.CASCADE)
|
||||
name = models.CharField(max_length=128, verbose_name=_('Your Name'))
|
||||
email = models.EmailField(verbose_name=_('Email'))
|
||||
token = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
|
||||
phone_number = models.CharField(max_length=64, blank=True, default='', verbose_name=_('Phone number'))
|
||||
phone_number = models.CharField(max_length=64, blank=True, default='', verbose_name=_('Phone number'), validators=[validate_phone_number])
|
||||
sms_prefered = models.BooleanField(default=False, verbose_name=_('SMS prefered'))
|
||||
language = models.CharField(max_length=10, blank=True)
|
||||
notes = models.TextField(default='', blank=True, verbose_name=_('Notes'),
|
||||
|
|
|
@ -2,7 +2,7 @@ from django.db.models.signals import pre_save, post_save
|
|||
from django.dispatch import receiver
|
||||
from django.contrib.sites.models import Site
|
||||
from django.conf import settings
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.contrib.auth.models import User
|
||||
from django.urls import reverse
|
||||
from django.contrib.auth import get_user_model
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
{% extends 'cfp/staff/base.html' %}
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}{{ participant.name }} - {{ conference.name }}{% endblock %}
|
||||
|
||||
{% block speakerstab %} class="active"{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
@ -56,6 +58,7 @@
|
|||
<i>{% trans "in" %}</i>
|
||||
{{ talk.track }}
|
||||
{% endif %}
|
||||
<span class="label label-{{ talk.get_status_color }}">{{ talk.get_status_str }}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
|
|
@ -81,6 +81,8 @@
|
|||
<span class="text-warning">{% blocktrans count pending=participant.pending_talk_count %}pending: {{ pending }}{% plural %}pending: {{ pending }}{% endblocktrans %}</span>
|
||||
—
|
||||
<span class="text-danger">{% blocktrans count refused=participant.refused_talk_count %}refused: {{ refused }}{% plural %}refused: {{ refused }}{% endblocktrans %}</span>
|
||||
—
|
||||
<span class="text-danger">{% blocktrans count canceled=participant.canceled_talk_count %}canceled: {{ canceled }}{% plural %}canceled: {{ canceled }}{% endblocktrans %}</span>
|
||||
</td>
|
||||
</tr>
|
||||
{% if forloop.last %}
|
||||
|
|
|
@ -2,7 +2,7 @@ from django.core.mail import send_mail
|
|||
from django.shortcuts import get_object_or_404, redirect, render
|
||||
from django.template.loader import render_to_string
|
||||
from django.urls import reverse, reverse_lazy
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.views.generic import DeleteView, FormView, TemplateView
|
||||
from django.contrib import messages
|
||||
from django.db.models import Q, Count, Sum
|
||||
|
|
|
@ -4,7 +4,7 @@ from django.core.mail import EmailMessage, get_connection
|
|||
from django.conf import settings
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
import hashlib
|
||||
|
|
|
@ -2,6 +2,8 @@ from ponyconf.settings import *
|
|||
|
||||
SECRET_KEY = 'CHANGE ME'
|
||||
|
||||
DEFAULT_PHONE_REGION = "FR"
|
||||
|
||||
DEBUG = False
|
||||
|
||||
LOGGING = {
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Django settings for ponyconf project.
|
||||
"""
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
import os
|
||||
|
||||
|
@ -15,7 +15,7 @@ SECRET_KEY = 'm2d03t^m)!nsborq5a1#e!#m)wjl&-%tu4ew@fxf1_b_t*@36r'
|
|||
# SECURITY WARNING: don't run with debug turned on in production!
|
||||
DEBUG = True
|
||||
|
||||
ALLOWED_HOSTS = []
|
||||
ALLOWED_HOSTS = ["0.0.0.0"]
|
||||
|
||||
|
||||
# Application definition
|
||||
|
@ -34,6 +34,7 @@ INSTALLED_APPS = [
|
|||
'bootstrap3',
|
||||
'django_select2',
|
||||
'crispy_forms',
|
||||
'crispy_bootstrap3',
|
||||
|
||||
# build-in apps
|
||||
'django.contrib.admin',
|
||||
|
@ -91,6 +92,8 @@ DATABASES = {
|
|||
}
|
||||
}
|
||||
|
||||
DEFAULT_AUTO_FIELD='django.db.models.AutoField'
|
||||
|
||||
|
||||
# Password validation
|
||||
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators
|
||||
|
@ -128,7 +131,7 @@ LANGUAGES = [
|
|||
]
|
||||
|
||||
LANGUAGE_CODE = 'en-us'
|
||||
|
||||
DEFAULT_PHONE_REGION = "US"
|
||||
LOCALE_PATHS = [
|
||||
os.path.join(BASE_DIR, 'locale'),
|
||||
]
|
||||
|
@ -171,4 +174,3 @@ SERVER_EMAIL = 'ponyconf@example.com'
|
|||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||
EMAIL_HOST = 'localhost'
|
||||
EMAIL_PORT = 25
|
||||
|
||||
|
|
|
@ -16,6 +16,6 @@ class PonyConfModel(models.Model):
|
|||
|
||||
def markdown_to_html(md):
|
||||
html = markdown(md)
|
||||
allowed_tags = bleach.ALLOWED_TAGS + ['p', 'pre', 'span' ] + ['h%d' % i for i in range(1, 7) ]
|
||||
allowed_tags = bleach.ALLOWED_TAGS | {'p', 'pre', 'span' } | {'h%d' % i for i in range(1, 7)}
|
||||
html = bleach.clean(html, tags=allowed_tags)
|
||||
return mark_safe(html)
|
||||
|
|
|
@ -1,47 +1,107 @@
|
|||
#
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
# This file is autogenerated by pip-compile with Python 3.9
|
||||
# by the following command:
|
||||
#
|
||||
# pip-compile requirements-dev.in
|
||||
#
|
||||
asgiref==3.2.10 # via django
|
||||
backcall==0.2.0 # via ipython
|
||||
bleach==3.1.5 # via -r requirements.in
|
||||
chardet==3.0.4 # via -r requirements.in
|
||||
decorator==4.4.2 # via ipython, traitlets
|
||||
django-appconf==1.0.4 # via django-select2
|
||||
django-autoslug==1.9.8 # via -r requirements.in
|
||||
django-bootstrap3==14.1.0 # via -r requirements.in
|
||||
django-colorful==1.3 # via -r requirements.in
|
||||
django-crispy-forms==1.9.2 # via -r requirements.in
|
||||
django-debug-toolbar==2.2 # via -r requirements-dev.in
|
||||
django-extensions==3.0.4 # via -r requirements-dev.in
|
||||
django-select2==7.4.2 # via -r requirements.in
|
||||
django==3.1 # via -r requirements.in, django-appconf, django-bootstrap3, django-colorful, django-debug-toolbar, django-select2
|
||||
icalendar==4.0.6 # via -r requirements.in
|
||||
importlib-metadata==1.7.0 # via django-bootstrap3, markdown
|
||||
ipython-genutils==0.2.0 # via traitlets
|
||||
ipython==7.16.1 # via -r requirements-dev.in
|
||||
jedi==0.17.2 # via ipython
|
||||
jinja2==2.11.2 # via -r requirements.in
|
||||
markdown==3.2.2 # via -r requirements.in
|
||||
markupsafe==1.1.1 # via jinja2
|
||||
packaging==20.4 # via bleach
|
||||
parso==0.7.1 # via jedi
|
||||
pexpect==4.8.0 # via ipython
|
||||
pickleshare==0.7.5 # via ipython
|
||||
prompt-toolkit==3.0.5 # via ipython
|
||||
ptyprocess==0.6.0 # via pexpect
|
||||
pygments==2.6.1 # via ipython
|
||||
pyparsing==2.4.7 # via packaging
|
||||
python-dateutil==2.8.1 # via icalendar
|
||||
pytz==2020.1 # via django, icalendar
|
||||
six==1.15.0 # via bleach, packaging, python-dateutil, traitlets
|
||||
sqlparse==0.3.1 # via django, django-debug-toolbar
|
||||
traitlets==4.3.3 # via ipython
|
||||
wcwidth==0.2.5 # via prompt-toolkit
|
||||
webencodings==0.5.1 # via bleach
|
||||
zipp==3.1.0 # via importlib-metadata
|
||||
|
||||
# The following packages are considered to be unsafe in a requirements file:
|
||||
# setuptools
|
||||
asgiref==3.6.0
|
||||
# via django
|
||||
asttokens==2.2.1
|
||||
# via stack-data
|
||||
backcall==0.2.0
|
||||
# via ipython
|
||||
bleach==6.0.0
|
||||
# via -r requirements.in
|
||||
chardet==5.1.0
|
||||
# via -r requirements.in
|
||||
crispy-bootstrap3==2022.1
|
||||
# via -r requirements.in
|
||||
decorator==5.1.1
|
||||
# via ipython
|
||||
django==4.1.7
|
||||
# via
|
||||
# -r requirements.in
|
||||
# crispy-bootstrap3
|
||||
# django-appconf
|
||||
# django-bootstrap3
|
||||
# django-colorful
|
||||
# django-crispy-forms
|
||||
# django-debug-toolbar
|
||||
# django-extensions
|
||||
# django-select2
|
||||
django-appconf==1.0.5
|
||||
# via django-select2
|
||||
django-autoslug==1.9.8
|
||||
# via -r requirements.in
|
||||
django-bootstrap3==22.2
|
||||
# via -r requirements.in
|
||||
django-colorful==1.3
|
||||
# via -r requirements.in
|
||||
django-crispy-forms==2.0
|
||||
# via
|
||||
# -r requirements.in
|
||||
# crispy-bootstrap3
|
||||
django-debug-toolbar==3.8.1
|
||||
# via -r requirements-dev.in
|
||||
django-extensions==3.2.1
|
||||
# via -r requirements-dev.in
|
||||
django-select2==8.1.1
|
||||
# via -r requirements.in
|
||||
executing==1.2.0
|
||||
# via stack-data
|
||||
icalendar==5.0.4
|
||||
# via -r requirements.in
|
||||
importlib-metadata==6.0.0
|
||||
# via markdown
|
||||
ipython==8.11.0
|
||||
# via -r requirements-dev.in
|
||||
jedi==0.18.2
|
||||
# via ipython
|
||||
jinja2==3.1.2
|
||||
# via -r requirements.in
|
||||
markdown==3.4.1
|
||||
# via -r requirements.in
|
||||
markupsafe==2.1.2
|
||||
# via jinja2
|
||||
matplotlib-inline==0.1.6
|
||||
# via ipython
|
||||
parso==0.8.3
|
||||
# via jedi
|
||||
pexpect==4.8.0
|
||||
# via ipython
|
||||
phonenumbers==8.13.7
|
||||
# via -r requirements.in
|
||||
pickleshare==0.7.5
|
||||
# via ipython
|
||||
prompt-toolkit==3.0.38
|
||||
# via ipython
|
||||
ptyprocess==0.7.0
|
||||
# via pexpect
|
||||
pure-eval==0.2.2
|
||||
# via stack-data
|
||||
pygments==2.14.0
|
||||
# via ipython
|
||||
python-dateutil==2.8.2
|
||||
# via icalendar
|
||||
pytz==2022.7.1
|
||||
# via icalendar
|
||||
six==1.16.0
|
||||
# via
|
||||
# bleach
|
||||
# python-dateutil
|
||||
sqlparse==0.4.3
|
||||
# via
|
||||
# django
|
||||
# django-debug-toolbar
|
||||
stack-data==0.6.2
|
||||
# via ipython
|
||||
traitlets==5.9.0
|
||||
# via
|
||||
# ipython
|
||||
# matplotlib-inline
|
||||
wcwidth==0.2.6
|
||||
# via prompt-toolkit
|
||||
webencodings==0.5.1
|
||||
# via bleach
|
||||
zipp==3.15.0
|
||||
# via importlib-metadata
|
||||
|
|
|
@ -2,6 +2,7 @@ django
|
|||
|
||||
django-bootstrap3
|
||||
django-crispy-forms
|
||||
crispy-bootstrap3
|
||||
django-select2
|
||||
django-colorful
|
||||
django-autoslug
|
||||
|
@ -11,3 +12,4 @@ bleach
|
|||
chardet
|
||||
icalendar
|
||||
jinja2
|
||||
phonenumbers
|
||||
|
|
|
@ -1,29 +1,63 @@
|
|||
#
|
||||
# This file is autogenerated by pip-compile
|
||||
# To update, run:
|
||||
# This file is autogenerated by pip-compile with Python 3.9
|
||||
# by the following command:
|
||||
#
|
||||
# pip-compile
|
||||
#
|
||||
asgiref==3.2.10 # via django
|
||||
bleach==3.1.5 # via -r requirements.in
|
||||
chardet==3.0.4 # via -r requirements.in
|
||||
django-appconf==1.0.4 # via django-select2
|
||||
django-autoslug==1.9.8 # via -r requirements.in
|
||||
django-bootstrap3==14.1.0 # via -r requirements.in
|
||||
django-colorful==1.3 # via -r requirements.in
|
||||
django-crispy-forms==1.9.2 # via -r requirements.in
|
||||
django-select2==7.4.2 # via -r requirements.in
|
||||
django==3.1 # via -r requirements.in, django-appconf, django-bootstrap3, django-colorful, django-select2
|
||||
icalendar==4.0.6 # via -r requirements.in
|
||||
importlib-metadata==1.7.0 # via django-bootstrap3, markdown
|
||||
jinja2==2.11.2 # via -r requirements.in
|
||||
markdown==3.2.2 # via -r requirements.in
|
||||
markupsafe==1.1.1 # via jinja2
|
||||
packaging==20.4 # via bleach
|
||||
pyparsing==2.4.7 # via packaging
|
||||
python-dateutil==2.8.1 # via icalendar
|
||||
pytz==2020.1 # via django, icalendar
|
||||
six==1.15.0 # via bleach, packaging, python-dateutil
|
||||
sqlparse==0.3.1 # via django
|
||||
webencodings==0.5.1 # via bleach
|
||||
zipp==3.1.0 # via importlib-metadata
|
||||
asgiref==3.6.0
|
||||
# via django
|
||||
bleach==6.0.0
|
||||
# via -r requirements.in
|
||||
chardet==5.1.0
|
||||
# via -r requirements.in
|
||||
crispy-bootstrap3==2022.1
|
||||
# via -r requirements.in
|
||||
django==4.1.7
|
||||
# via
|
||||
# -r requirements.in
|
||||
# crispy-bootstrap3
|
||||
# django-appconf
|
||||
# django-bootstrap3
|
||||
# django-colorful
|
||||
# django-crispy-forms
|
||||
# django-select2
|
||||
django-appconf==1.0.5
|
||||
# via django-select2
|
||||
django-autoslug==1.9.8
|
||||
# via -r requirements.in
|
||||
django-bootstrap3==22.2
|
||||
# via -r requirements.in
|
||||
django-colorful==1.3
|
||||
# via -r requirements.in
|
||||
django-crispy-forms==2.0
|
||||
# via
|
||||
# -r requirements.in
|
||||
# crispy-bootstrap3
|
||||
django-select2==8.1.1
|
||||
# via -r requirements.in
|
||||
icalendar==5.0.4
|
||||
# via -r requirements.in
|
||||
importlib-metadata==6.0.0
|
||||
# via markdown
|
||||
jinja2==3.1.2
|
||||
# via -r requirements.in
|
||||
markdown==3.4.1
|
||||
# via -r requirements.in
|
||||
markupsafe==2.1.2
|
||||
# via jinja2
|
||||
phonenumbers==8.13.7
|
||||
# via -r requirements.in
|
||||
python-dateutil==2.8.2
|
||||
# via icalendar
|
||||
pytz==2022.7.1
|
||||
# via icalendar
|
||||
six==1.16.0
|
||||
# via
|
||||
# bleach
|
||||
# python-dateutil
|
||||
sqlparse==0.4.3
|
||||
# via django
|
||||
webencodings==0.5.1
|
||||
# via bleach
|
||||
zipp==3.15.0
|
||||
# via importlib-metadata
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
docker run \
|
||||
--rm \
|
||||
-it \
|
||||
-v `pwd`:/tmp/app \
|
||||
-w /tmp/app \
|
||||
-p 8000:8000 \
|
||||
--name ponyconf \
|
||||
ponyconf
|
Loading…
Reference in New Issue