diff --git a/Dockerfile b/Dockerfile
index 36d75b5..834393e 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
# syntax = docker/dockerfile:1.4
-FROM python:3.10 AS compile-stage
+FROM python:3.13.0a4-slim AS compile-stage
RUN --mount=type=cache,target=/var/cache/apt \
apt update && \
apt install -y --no-install-recommends \
@@ -19,3 +19,4 @@ RUN --mount=type=cache,target=/root/.cache \
FROM compile-stage AS tests-stage
+USER nobody
\ No newline at end of file
diff --git a/Taskfile.yaml b/Taskfile.yaml
index 290efab..08fdfec 100644
--- a/Taskfile.yaml
+++ b/Taskfile.yaml
@@ -68,7 +68,7 @@ tasks:
- docker compose run --rm web python pythonie/manage.py migrate
django:collect-static:
- desc: Make migrations
+ desc: Make static resources
cmds:
- docker compose run --rm web python pythonie/manage.py collectstatic
diff --git a/pythonie/core/templates/base.html b/pythonie/core/templates/base.html
index a989652..b2c1a8a 100644
--- a/pythonie/core/templates/base.html
+++ b/pythonie/core/templates/base.html
@@ -17,7 +17,8 @@
-
+
@@ -56,7 +57,10 @@
{% endcompress %}
{% block basejs %}
-
+
+
diff --git a/pythonie/meetups/test_meetups.py b/pythonie/meetups/test_meetups.py
index 9ee50d9..cbcda36 100644
--- a/pythonie/meetups/test_meetups.py
+++ b/pythonie/meetups/test_meetups.py
@@ -10,9 +10,9 @@
description = (
"
We will be having a meetup in June. More details to follow."
"
If you are interested in speaking, please submit your "
- 'details to\xa0'
- ''
- "http://bit.ly/pyie-cfp-2015.
Enquiries? Please "
+ 'details to\xa0'
+ ''
+ "https://bit.ly/pyie-cfp-2015.
Enquiries? Please "
"contact contact@python.ie.
"
)
@@ -60,7 +60,7 @@ def _first_result(self):
"description": description,
"name": "Python Ireland meetup",
"event_url": (
- "http://www.meetup.com/pythonireland/" "events/221078098/"
+ "https://www.meetup.com/pythonireland/" "events/221078098/"
),
"headcount": 0,
"time": 1433957400000,
@@ -123,7 +123,7 @@ def test_update_first_run(self, mock_get_content):
self.assertEqual(meetup.visibility, "public")
self.assertEqual(
meetup.event_url,
- ("http://www.meetup.com/" "pythonireland/events/221078098/"),
+ ("https://www.meetup.com/" "pythonireland/events/221078098/"),
)
@patch("meetups.utils.get_content")
diff --git a/pythonie/pythonie/settings/dev.py b/pythonie/pythonie/settings/dev.py
index acc5db5..ab13d7d 100644
--- a/pythonie/pythonie/settings/dev.py
+++ b/pythonie/pythonie/settings/dev.py
@@ -4,7 +4,7 @@
DEBUG = True
-SECRET_KEY = "1185a082-7e72-449e-bf43-12d2da59222b" # Just for dev
+SECRET_KEY = "1185a082-7e72-449e-bf43-12d2da59222b" # just for dev #nosec B105
MEETUP_KEY = "" # Put your own key here.
# See https://secure.meetup.com/meetup_api/key/
diff --git a/pythonie/pythonie/settings/tests.py b/pythonie/pythonie/settings/tests.py
index aa6c9cb..bc89219 100644
--- a/pythonie/pythonie/settings/tests.py
+++ b/pythonie/pythonie/settings/tests.py
@@ -4,7 +4,7 @@
DEBUG = True
-SECRET_KEY = "1185a082-7e72-449e-bf43-12d2da59222b" # Just for dev
+SECRET_KEY = "1185a082-7e72-449e-bf43-12d2da59222b" #nosec B105 # Just for dev
MEETUP_KEY = "" # Put your own key here.
# See https://secure.meetup.com/meetup_api/key/
diff --git a/pythonie/speakers/management/commands/import-sessionize.py b/pythonie/speakers/management/commands/import-sessionize.py
index fb1daf4..6e5c4bd 100644
--- a/pythonie/speakers/management/commands/import-sessionize.py
+++ b/pythonie/speakers/management/commands/import-sessionize.py
@@ -4,7 +4,6 @@
import numpy as np
import pandas as pd
from django.core.management.base import BaseCommand, CommandParser
-from django.utils.text import slugify
from wagtail.core.models import Page
from speakers.models import Speaker, Room, Session
diff --git a/pythonie/speakers/management/commands/update-sessionize-json-stream.py b/pythonie/speakers/management/commands/update-sessionize-json-stream.py
index 6ba3624..d21d7fc 100644
--- a/pythonie/speakers/management/commands/update-sessionize-json-stream.py
+++ b/pythonie/speakers/management/commands/update-sessionize-json-stream.py
@@ -51,7 +51,7 @@ class SessionizeModel(pydantic.BaseModel):
class Command(BaseCommand):
def handle(self, *args, **kwargs):
- response = requests.get("https://sessionize.com/api/v2/z66z4kb6/view/All")
+ response = requests.get("https://sessionize.com/api/v2/z66z4kb6/view/All", timeout=500)
sessionize: SessionizeModel = SessionizeModel.parse_obj(response.json())
rooms = {}
diff --git a/pythonie/speakers/templates/speakers/session.html b/pythonie/speakers/templates/speakers/session.html
index a643438..720d01c 100644
--- a/pythonie/speakers/templates/speakers/session.html
+++ b/pythonie/speakers/templates/speakers/session.html
@@ -27,7 +27,7 @@ {{ self.name }}
{{ speaker.name }}
- {{ speaker.biography|safe }}
+ {{ speaker.biography }}
|
{% endfor %}
diff --git a/requirements/dev.in b/requirements/dev.in
index f80f762..d7d64a5 100644
--- a/requirements/dev.in
+++ b/requirements/dev.in
@@ -1,10 +1,12 @@
# dev.in
-c main.txt
+bandit
black
coverage
+django-debug-toolbar
fakeredis
flake8
isort
model-mommy
-pipdeptree
-django-debug-toolbar
\ No newline at end of file
+pip-tools
+pipdeptree
\ No newline at end of file
diff --git a/requirements/dev.txt b/requirements/dev.txt
index f5a7548..ebdac43 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -1,62 +1,116 @@
-asgiref==3.6.0
+#
+# This file is autogenerated by pip-compile with Python 3.9
+# by the following command:
+#
+# pip-compile dev.in
+#
+asgiref==3.8.1
# via
- # -c requirements/main.txt
+ # -c main.txt
# django
-async-timeout==4.0.2
+async-timeout==4.0.3
# via
- # -c requirements/main.txt
+ # -c main.txt
# redis
-black==23.3.0
- # via -r requirements/dev.in
-click==8.1.3
- # via black
-coverage==7.2.2
- # via -r requirements/dev.in
-django==3.2.18
+bandit==1.7.8
+ # via -r dev.in
+black==24.3.0
+ # via -r dev.in
+build==1.1.1
+ # via pip-tools
+click==8.1.7
+ # via
+ # black
+ # pip-tools
+coverage==7.4.4
+ # via -r dev.in
+django==3.2.25
# via
- # -c requirements/main.txt
+ # -c main.txt
# django-debug-toolbar
# model-mommy
-django-debug-toolbar==3.8.1
- # via -r requirements/dev.in
-fakeredis==2.10.2
- # via -r requirements/dev.in
-flake8==6.0.0
- # via -r requirements/dev.in
-isort==5.12.0
- # via -r requirements/dev.in
+django-debug-toolbar==4.3.0
+ # via -r dev.in
+fakeredis==2.21.3
+ # via -r dev.in
+flake8==7.0.0
+ # via -r dev.in
+importlib-metadata==7.1.0
+ # via build
+isort==5.13.2
+ # via -r dev.in
+markdown-it-py==3.0.0
+ # via rich
mccabe==0.7.0
# via flake8
+mdurl==0.1.2
+ # via markdown-it-py
model-mommy==2.0.0
- # via -r requirements/dev.in
+ # via -r dev.in
mypy-extensions==1.0.0
# via black
-packaging==23.0
- # via black
-pathspec==0.11.1
+packaging==24.0
+ # via
+ # -c main.txt
+ # black
+ # build
+pathspec==0.12.1
# via black
-pipdeptree==2.7.0
- # via -r requirements/dev.in
-platformdirs==3.2.0
+pbr==6.0.0
+ # via stevedore
+pip-tools==7.4.1
+ # via -r dev.in
+pipdeptree==2.16.1
+ # via -r dev.in
+platformdirs==4.2.0
# via black
-pycodestyle==2.10.0
+pycodestyle==2.11.1
# via flake8
-pyflakes==3.0.1
+pyflakes==3.2.0
# via flake8
-pytz==2023.3
+pygments==2.17.2
+ # via rich
+pyproject-hooks==1.0.0
# via
- # -c requirements/main.txt
+ # build
+ # pip-tools
+pytz==2024.1
+ # via
+ # -c main.txt
# django
-redis==4.5.4
+pyyaml==6.0.1
+ # via bandit
+redis==5.0.3
# via
- # -c requirements/main.txt
+ # -c main.txt
# fakeredis
+rich==13.7.1
+ # via bandit
sortedcontainers==2.4.0
# via fakeredis
-sqlparse==0.4.3
+sqlparse==0.4.4
# via
- # -c requirements/main.txt
+ # -c main.txt
# django
# django-debug-toolbar
+stevedore==5.2.0
+ # via bandit
tomli==2.0.1
- # via black
+ # via
+ # black
+ # build
+ # pip-tools
+ # pyproject-hooks
+typing-extensions==4.10.0
+ # via
+ # -c main.txt
+ # asgiref
+ # black
+wheel==0.43.0
+ # via pip-tools
+zipp==3.18.1
+ # via importlib-metadata
+
+# The following packages are considered to be unsafe in a requirements file:
+# pip
+# setuptools
diff --git a/requirements/main.in b/requirements/main.in
index b27a7b8..827d9bc 100644
--- a/requirements/main.in
+++ b/requirements/main.in
@@ -13,7 +13,7 @@ django-libsass
django-modelcluster
django-storages
django-taggit
-gunicorn
+gunicorn>=22.0.0
pandas
pydantic
python-dateutil
@@ -21,7 +21,8 @@ pytz
redis
requests
wagtail
-wagtail-blog
+# important to pin that version until that dependency is removed
+wagtail-blog==2.3.5
wagtailfontawesome
wagtailnews
whitenoise
\ No newline at end of file
diff --git a/requirements/main.txt b/requirements/main.txt
index 6a42d2b..56eeed1 100644
--- a/requirements/main.txt
+++ b/requirements/main.txt
@@ -1,36 +1,44 @@
+#
+# This file is autogenerated by pip-compile with Python 3.9
+# by the following command:
+#
+# pip-compile main.in
+#
+annotated-types==0.6.0
+ # via pydantic
anyascii==0.3.2
# via wagtail
-asgiref==3.6.0
+asgiref==3.8.1
# via django
-async-timeout==4.0.2
+async-timeout==4.0.3
# via redis
-babel==2.12.1
+babel==2.14.0
# via delorean
beautifulsoup4==4.9.3
# via wagtail
-boto3==1.26.104
- # via -r requirements/main.in
-botocore==1.29.104
+boto3==1.34.69
+ # via -r main.in
+botocore==1.34.69
# via
# boto3
# s3transfer
-certifi==2022.12.7
+certifi==2024.2.2
# via requests
-charset-normalizer==3.1.0
+charset-normalizer==3.3.2
# via requests
colander==2.0
- # via -r requirements/main.in
+ # via -r main.in
defusedxml==0.7.1
- # via -r requirements/main.in
+ # via -r main.in
delorean==1.0.0
- # via -r requirements/main.in
-dj-database-url==1.3.0
- # via -r requirements/main.in
+ # via -r main.in
+dj-database-url==2.1.0
+ # via -r main.in
dj-static==0.0.6
- # via -r requirements/main.in
-django==3.2.18
+ # via -r main.in
+django==3.2.25
# via
- # -r requirements/main.in
+ # -r main.in
# dj-database-url
# django-appconf
# django-extensions
@@ -42,45 +50,45 @@ django==3.2.18
# wagtail
# wagtail-blog
# wagtailfontawesome
-django-appconf==1.0.5
+django-appconf==1.0.6
# via django-compressor
-django-compressor==4.3.1
+django-compressor==4.4
# via
- # -r requirements/main.in
+ # -r main.in
# django-libsass
-django-extensions==3.2.1
- # via -r requirements/main.in
+django-extensions==3.2.3
+ # via -r main.in
django-filter==21.1
# via wagtail
django-libsass==0.9
- # via -r requirements/main.in
+ # via -r main.in
django-modelcluster==5.3
# via
- # -r requirements/main.in
+ # -r main.in
# wagtail
-django-storages==1.13.2
- # via -r requirements/main.in
+django-storages==1.14.2
+ # via -r main.in
django-taggit==2.1.0
# via
- # -r requirements/main.in
+ # -r main.in
# wagtail
-django-treebeard==4.6.1
+django-treebeard==4.7.1
# via wagtail
-djangorestframework==3.14.0
+djangorestframework==3.15.1
# via wagtail
draftjs-exporter==2.1.7
# via wagtail
et-xmlfile==1.1.0
# via openpyxl
-gunicorn==20.1.0
- # via -r requirements/main.in
+gunicorn==22.0.0
+ # via -r main.in
html5lib==1.1
# via wagtail
-humanize==4.6.0
+humanize==4.9.0
# via delorean
-idna==3.4
+idna==3.6
# via requests
-iso8601==1.1.0
+iso8601==2.1.0
# via colander
jmespath==1.0.1
# via
@@ -88,105 +96,105 @@ jmespath==1.0.1
# botocore
l18n==2021.3
# via wagtail
-libsass==0.22.0
+libsass==0.23.0
# via django-libsass
-lxml==4.9.2
+lxml==5.1.0
# via wagtail-blog
-numpy==1.24.2
+numpy==1.26.4
# via pandas
openpyxl==3.1.2
# via tablib
-pandas==1.5.3
- # via -r requirements/main.in
+packaging==24.0
+ # via gunicorn
+pandas==2.2.1
+ # via -r main.in
pillow==9.5.0
# via wagtail
-pydantic==1.10.7
- # via -r requirements/main.in
-python-dateutil==2.8.2
+pydantic==2.6.4
+ # via -r main.in
+pydantic-core==2.16.3
+ # via pydantic
+python-dateutil==2.9.0.post0
# via
- # -r requirements/main.in
+ # -r main.in
# botocore
# delorean
# pandas
-pytz==2023.3
+pytz==2024.1
# via
- # -r requirements/main.in
+ # -r main.in
# delorean
# django
# django-modelcluster
- # djangorestframework
# l18n
# pandas
-pytz-deprecation-shim==0.1.0.post0
- # via tzlocal
rcssmin==1.1.1
# via django-compressor
-redis==4.5.4
- # via -r requirements/main.in
-requests==2.28.2
+redis==5.0.3
+ # via -r main.in
+requests==2.31.0
# via
- # -r requirements/main.in
+ # -r main.in
# wagtail
# wagtail-blog
rjsmin==1.2.1
# via django-compressor
-s3transfer==0.6.0
+s3transfer==0.10.1
# via boto3
six==1.16.0
# via
# html5lib
# l18n
# python-dateutil
-soupsieve==2.4
+soupsieve==2.5
# via beautifulsoup4
-sqlparse==0.4.3
+sqlparse==0.4.4
# via django
static3==0.7.0
# via dj-static
-tablib[xls,xlsx]==3.4.0
+tablib[xls,xlsx]==3.6.0
# via wagtail
-telepath==0.3
+telepath==0.3.1
# via wagtail
translationstring==1.4
# via colander
-typing-extensions==4.5.0
+typing-extensions==4.10.0
# via
+ # asgiref
# dj-database-url
# pydantic
-tzdata==2023.3
- # via pytz-deprecation-shim
-tzlocal==4.3
+ # pydantic-core
+tzdata==2024.1
+ # via pandas
+tzlocal==5.2
# via delorean
-urllib3==1.26.15
+urllib3==1.26.18
# via
# botocore
# requests
wagtail==2.16.3
# via
- # -r requirements/main.in
+ # -r main.in
# wagtail-blog
# wagtailfontawesome
# wagtailnews
wagtail-blog==2.3.5
- # via -r requirements/main.in
+ # via -r main.in
wagtailfontawesome==1.2.1
- # via -r requirements/main.in
+ # via -r main.in
wagtailnews==2.7.2
- # via -r requirements/main.in
+ # via -r main.in
webencodings==0.5.1
# via html5lib
-whitenoise==6.4.0
- # via -r requirements/main.in
+whitenoise==6.6.0
+ # via -r main.in
willow==1.4.1
# via
- # -r requirements/main.in
+ # -r main.in
# wagtail
xlrd==2.0.1
# via tablib
-xlsxwriter==3.0.9
+xlsxwriter==3.2.0
# via wagtail
xlwt==1.3.0
# via tablib
-
-# The following packages are considered to be unsafe in a requirements file:
-# setuptools
diff --git a/requirements/production.txt b/requirements/production.txt
index 35ec844..2a63464 100644
--- a/requirements/production.txt
+++ b/requirements/production.txt
@@ -1,2 +1,8 @@
-psycopg2-binary==2.9.6
- # via -r requirements/production.in
+#
+# This file is autogenerated by pip-compile with Python 3.9
+# by the following command:
+#
+# pip-compile production.in
+#
+psycopg2-binary==2.9.9
+ # via -r production.in