Add HTML
This commit is contained in:
@ -2,6 +2,10 @@ import os
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import sentry_sdk
|
import sentry_sdk
|
||||||
|
from dotenv import find_dotenv, load_dotenv
|
||||||
|
|
||||||
|
# Load environment variables from a .env file
|
||||||
|
load_dotenv(dotenv_path=find_dotenv(), verbose=True)
|
||||||
|
|
||||||
# Run Django in debug mode
|
# Run Django in debug mode
|
||||||
DEBUG: bool = os.getenv(key="DEBUG", default="True").lower() == "true"
|
DEBUG: bool = os.getenv(key="DEBUG", default="True").lower() == "true"
|
||||||
@ -28,7 +32,11 @@ ADMINS: list[tuple[str, str]] = [
|
|||||||
SECRET_KEY: str = os.getenv("SECRET_KEY", default="")
|
SECRET_KEY: str = os.getenv("SECRET_KEY", default="")
|
||||||
|
|
||||||
# A list of strings representing the host/domain names that this Django site can serve.
|
# A list of strings representing the host/domain names that this Django site can serve.
|
||||||
ALLOWED_HOSTS: list[str] = [".localhost", "127.0.0.1"]
|
ALLOWED_HOSTS: list[str] = [
|
||||||
|
"ttvdrops.lovinator.space",
|
||||||
|
".localhost",
|
||||||
|
"127.0.0.1",
|
||||||
|
]
|
||||||
|
|
||||||
# The time zone that Django will use to display datetimes in templates and to interpret datetimes entered in forms
|
# The time zone that Django will use to display datetimes in templates and to interpret datetimes entered in forms
|
||||||
TIME_ZONE = "Europe/Stockholm"
|
TIME_ZONE = "Europe/Stockholm"
|
||||||
@ -122,7 +130,7 @@ WSGI_APPLICATION = "core.wsgi.application"
|
|||||||
DATABASES: dict[str, dict[str, str]] = {
|
DATABASES: dict[str, dict[str, str]] = {
|
||||||
"default": {
|
"default": {
|
||||||
"ENGINE": "django.db.backends.postgresql",
|
"ENGINE": "django.db.backends.postgresql",
|
||||||
"NAME": "postgres",
|
"NAME": "ttvdrops",
|
||||||
"USER": os.getenv(key="POSTGRES_USER", default=""),
|
"USER": os.getenv(key="POSTGRES_USER", default=""),
|
||||||
"PASSWORD": os.getenv(key="POSTGRES_PASSWORD", default=""),
|
"PASSWORD": os.getenv(key="POSTGRES_PASSWORD", default=""),
|
||||||
"HOST": os.getenv(key="POSTGRES_HOST", default=""),
|
"HOST": os.getenv(key="POSTGRES_HOST", default=""),
|
||||||
@ -157,9 +165,10 @@ STORAGES: dict[str, dict[str, str]] = {
|
|||||||
# TODO: Disallow specific commands. See https://redis.io/docs/management/security/#disallowing-specific-commands
|
# TODO: Disallow specific commands. See https://redis.io/docs/management/security/#disallowing-specific-commands
|
||||||
REDIS_PASSWORD: str = os.getenv(key="REDIS_PASSWORD", default="")
|
REDIS_PASSWORD: str = os.getenv(key="REDIS_PASSWORD", default="")
|
||||||
REDIS_HOST: str = os.getenv(key="REDIS_HOST", default="")
|
REDIS_HOST: str = os.getenv(key="REDIS_HOST", default="")
|
||||||
|
REDIS_PORT: str = os.getenv(key="REDIS_PORT", default="6380")
|
||||||
CACHES: dict[str, dict[str, str]] = {
|
CACHES: dict[str, dict[str, str]] = {
|
||||||
"default": {
|
"default": {
|
||||||
"BACKEND": "django.core.cache.backends.redis.RedisCache",
|
"BACKEND": "django.core.cache.backends.redis.RedisCache",
|
||||||
"LOCATION": f"redis://:{REDIS_PASSWORD}@{REDIS_HOST}:6379",
|
"LOCATION": f"redis://:{REDIS_PASSWORD}@{REDIS_HOST}:{REDIS_PORT}/0",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
19
core/urls.py
19
core/urls.py
@ -1,22 +1,7 @@
|
|||||||
"""
|
|
||||||
URL configuration for core project.
|
|
||||||
|
|
||||||
The `urlpatterns` list routes URLs to views. For more information please see:
|
|
||||||
https://docs.djangoproject.com/en/5.0/topics/http/urls/
|
|
||||||
Examples:
|
|
||||||
Function views
|
|
||||||
1. Add an import: from my_app import views
|
|
||||||
2. Add a URL to urlpatterns: path('', views.home, name='home')
|
|
||||||
Class-based views
|
|
||||||
1. Add an import: from other_app.views import Home
|
|
||||||
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
|
|
||||||
Including another URLconf
|
|
||||||
1. Import the include() function: from django.urls import include, path
|
|
||||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
|
||||||
"""
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.urls import path
|
from django.urls import include, path
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("admin/", admin.site.urls),
|
path("admin/", admin.site.urls),
|
||||||
|
path("", include("twitch_drop_notifier.urls")),
|
||||||
]
|
]
|
||||||
|
285
poetry.lock
generated
285
poetry.lock
generated
@ -128,6 +128,46 @@ files = [
|
|||||||
{file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},
|
{file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "click"
|
||||||
|
version = "8.1.7"
|
||||||
|
description = "Composable command line interface toolkit"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"},
|
||||||
|
{file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "colorama"
|
||||||
|
version = "0.4.6"
|
||||||
|
description = "Cross-platform colored terminal text."
|
||||||
|
optional = false
|
||||||
|
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
|
||||||
|
files = [
|
||||||
|
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
||||||
|
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cssbeautifier"
|
||||||
|
version = "1.14.11"
|
||||||
|
description = "CSS unobfuscator and beautifier."
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
files = [
|
||||||
|
{file = "cssbeautifier-1.14.11.tar.gz", hash = "sha256:40544c2b62bbcb64caa5e7f37a02df95654e5ce1bcacadac4ca1f3dc89c31513"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
editorconfig = ">=0.12.2"
|
||||||
|
jsbeautifier = "*"
|
||||||
|
six = ">=1.13.0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "distlib"
|
name = "distlib"
|
||||||
version = "0.3.8"
|
version = "0.3.8"
|
||||||
@ -170,6 +210,41 @@ files = [
|
|||||||
{file = "django_simple_history-3.4.0-py3-none-any.whl", hash = "sha256:992dcca3cddc0b67b470fc91f77292e2d2a6010d37c9eac3536e9d80e8754032"},
|
{file = "django_simple_history-3.4.0-py3-none-any.whl", hash = "sha256:992dcca3cddc0b67b470fc91f77292e2d2a6010d37c9eac3536e9d80e8754032"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "djlint"
|
||||||
|
version = "1.34.1"
|
||||||
|
description = "HTML Template Linter and Formatter"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8.0,<4.0.0"
|
||||||
|
files = [
|
||||||
|
{file = "djlint-1.34.1-py3-none-any.whl", hash = "sha256:96ff1c464fb6f061130ebc88663a2ea524d7ec51f4b56221a2b3f0320a3cfce8"},
|
||||||
|
{file = "djlint-1.34.1.tar.gz", hash = "sha256:db93fa008d19eaadb0454edf1704931d14469d48508daba2df9941111f408346"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
click = ">=8.0.1,<9.0.0"
|
||||||
|
colorama = ">=0.4.4,<0.5.0"
|
||||||
|
cssbeautifier = ">=1.14.4,<2.0.0"
|
||||||
|
html-tag-names = ">=0.1.2,<0.2.0"
|
||||||
|
html-void-elements = ">=0.1.0,<0.2.0"
|
||||||
|
jsbeautifier = ">=1.14.4,<2.0.0"
|
||||||
|
json5 = ">=0.9.11,<0.10.0"
|
||||||
|
pathspec = ">=0.12.0,<0.13.0"
|
||||||
|
PyYAML = ">=6.0,<7.0"
|
||||||
|
regex = ">=2023.0.0,<2024.0.0"
|
||||||
|
tqdm = ">=4.62.2,<5.0.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "editorconfig"
|
||||||
|
version = "0.12.3"
|
||||||
|
description = "EditorConfig File Locator and Interpreter for Python"
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
files = [
|
||||||
|
{file = "EditorConfig-0.12.3-py3-none-any.whl", hash = "sha256:6b0851425aa875b08b16789ee0eeadbd4ab59666e9ebe728e526314c4a2e52c1"},
|
||||||
|
{file = "EditorConfig-0.12.3.tar.gz", hash = "sha256:57f8ce78afcba15c8b18d46b5170848c88d56fd38f05c2ec60dbbfcb8996e89e"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "filelock"
|
name = "filelock"
|
||||||
version = "3.13.1"
|
version = "3.13.1"
|
||||||
@ -374,6 +449,28 @@ files = [
|
|||||||
{file = "hiredis-2.3.2.tar.gz", hash = "sha256:733e2456b68f3f126ddaf2cd500a33b25146c3676b97ea843665717bda0c5d43"},
|
{file = "hiredis-2.3.2.tar.gz", hash = "sha256:733e2456b68f3f126ddaf2cd500a33b25146c3676b97ea843665717bda0c5d43"},
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "html-tag-names"
|
||||||
|
version = "0.1.2"
|
||||||
|
description = "List of known HTML tag names"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7,<4.0"
|
||||||
|
files = [
|
||||||
|
{file = "html-tag-names-0.1.2.tar.gz", hash = "sha256:04924aca48770f36b5a41c27e4d917062507be05118acb0ba869c97389084297"},
|
||||||
|
{file = "html_tag_names-0.1.2-py3-none-any.whl", hash = "sha256:eeb69ef21078486b615241f0393a72b41352c5219ee648e7c61f5632d26f0420"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "html-void-elements"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "List of HTML void tag names."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7,<4.0"
|
||||||
|
files = [
|
||||||
|
{file = "html-void-elements-0.1.0.tar.gz", hash = "sha256:931b88f84cd606fee0b582c28fcd00e41d7149421fb673e1e1abd2f0c4f231f0"},
|
||||||
|
{file = "html_void_elements-0.1.0-py3-none-any.whl", hash = "sha256:784cf39db03cdeb017320d9301009f8f3480f9d7b254d0974272e80e0cb5e0d2"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "identify"
|
name = "identify"
|
||||||
version = "2.5.33"
|
version = "2.5.33"
|
||||||
@ -388,6 +485,34 @@ files = [
|
|||||||
[package.extras]
|
[package.extras]
|
||||||
license = ["ukkonen"]
|
license = ["ukkonen"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "jsbeautifier"
|
||||||
|
version = "1.14.11"
|
||||||
|
description = "JavaScript unobfuscator and beautifier."
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
files = [
|
||||||
|
{file = "jsbeautifier-1.14.11.tar.gz", hash = "sha256:6b632581ea60dd1c133cd25a48ad187b4b91f526623c4b0fb5443ef805250505"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
editorconfig = ">=0.12.2"
|
||||||
|
six = ">=1.13.0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "json5"
|
||||||
|
version = "0.9.14"
|
||||||
|
description = "A Python implementation of the JSON5 data format."
|
||||||
|
optional = false
|
||||||
|
python-versions = "*"
|
||||||
|
files = [
|
||||||
|
{file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"},
|
||||||
|
{file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
dev = ["hypothesis"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nodeenv"
|
name = "nodeenv"
|
||||||
version = "1.8.0"
|
version = "1.8.0"
|
||||||
@ -402,6 +527,17 @@ files = [
|
|||||||
[package.dependencies]
|
[package.dependencies]
|
||||||
setuptools = "*"
|
setuptools = "*"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "pathspec"
|
||||||
|
version = "0.12.1"
|
||||||
|
description = "Utility library for gitignore style pattern matching of file paths."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"},
|
||||||
|
{file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pillow"
|
name = "pillow"
|
||||||
version = "10.1.0"
|
version = "10.1.0"
|
||||||
@ -637,6 +773,20 @@ typing-extensions = "*"
|
|||||||
[package.extras]
|
[package.extras]
|
||||||
dev = ["black", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio", "pytest-trio", "toml", "tox", "trio", "trio", "trio-typing", "twine", "twisted", "validate-pyproject[all]"]
|
dev = ["black", "flake8", "flake8-black", "isort", "jupyter-console", "mkdocs", "mkdocs-include-markdown-plugin", "mkdocstrings[python]", "pytest", "pytest-asyncio", "pytest-trio", "toml", "tox", "trio", "trio", "trio-typing", "twine", "twisted", "validate-pyproject[all]"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "python-dotenv"
|
||||||
|
version = "1.0.0"
|
||||||
|
description = "Read key-value pairs from a .env file and set them as environment variables"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.8"
|
||||||
|
files = [
|
||||||
|
{file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"},
|
||||||
|
{file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
cli = ["click (>=5.0)"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyyaml"
|
name = "pyyaml"
|
||||||
version = "6.0.1"
|
version = "6.0.1"
|
||||||
@ -714,6 +864,108 @@ hiredis = {version = ">=1.0.0", optional = true, markers = "extra == \"hiredis\"
|
|||||||
hiredis = ["hiredis (>=1.0.0)"]
|
hiredis = ["hiredis (>=1.0.0)"]
|
||||||
ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"]
|
ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex"
|
||||||
|
version = "2023.12.25"
|
||||||
|
description = "Alternative regular expression module, to replace re."
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"},
|
||||||
|
{file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"},
|
||||||
|
{file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"},
|
||||||
|
{file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"},
|
||||||
|
{file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"},
|
||||||
|
{file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"},
|
||||||
|
{file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"},
|
||||||
|
{file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "selectolax"
|
name = "selectolax"
|
||||||
version = "0.3.17"
|
version = "0.3.17"
|
||||||
@ -844,6 +1096,17 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments
|
|||||||
testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
|
testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"]
|
||||||
testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
|
testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.1)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "six"
|
||||||
|
version = "1.16.0"
|
||||||
|
description = "Python 2 and 3 compatibility utilities"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
|
||||||
|
files = [
|
||||||
|
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
||||||
|
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sqlparse"
|
name = "sqlparse"
|
||||||
version = "0.4.4"
|
version = "0.4.4"
|
||||||
@ -860,6 +1123,26 @@ dev = ["build", "flake8"]
|
|||||||
doc = ["sphinx"]
|
doc = ["sphinx"]
|
||||||
test = ["pytest", "pytest-cov"]
|
test = ["pytest", "pytest-cov"]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "tqdm"
|
||||||
|
version = "4.66.1"
|
||||||
|
description = "Fast, Extensible Progress Meter"
|
||||||
|
optional = false
|
||||||
|
python-versions = ">=3.7"
|
||||||
|
files = [
|
||||||
|
{file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"},
|
||||||
|
{file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"},
|
||||||
|
]
|
||||||
|
|
||||||
|
[package.dependencies]
|
||||||
|
colorama = {version = "*", markers = "platform_system == \"Windows\""}
|
||||||
|
|
||||||
|
[package.extras]
|
||||||
|
dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"]
|
||||||
|
notebook = ["ipywidgets (>=6)"]
|
||||||
|
slack = ["slack-sdk"]
|
||||||
|
telegram = ["requests"]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "typing-extensions"
|
name = "typing-extensions"
|
||||||
version = "4.9.0"
|
version = "4.9.0"
|
||||||
@ -938,4 +1221,4 @@ brotli = ["Brotli"]
|
|||||||
[metadata]
|
[metadata]
|
||||||
lock-version = "2.0"
|
lock-version = "2.0"
|
||||||
python-versions = "^3.12"
|
python-versions = "^3.12"
|
||||||
content-hash = "be31b7d4cd426b08e7ff92a1c8bf15e81afe9558c3cb2bd2ddfeebbb176804d5"
|
content-hash = "27c7698969b74ebf707e6b992a13ddcb62dcb4a5da91bb35bc013a503b8786d0"
|
||||||
|
@ -16,10 +16,12 @@ playwright = "^1.40.0"
|
|||||||
selectolax = "^0.3.17"
|
selectolax = "^0.3.17"
|
||||||
django-simple-history = "^3.4.0"
|
django-simple-history = "^3.4.0"
|
||||||
pillow = "^10.1.0"
|
pillow = "^10.1.0"
|
||||||
|
python-dotenv = "^1.0.0"
|
||||||
|
|
||||||
|
|
||||||
[tool.poetry.group.dev.dependencies]
|
[tool.poetry.group.dev.dependencies]
|
||||||
pre-commit = "^3.6.0"
|
pre-commit = "^3.6.0"
|
||||||
|
djlint = "^1.34.1"
|
||||||
|
|
||||||
[build-system]
|
[build-system]
|
||||||
build-backend = "poetry.core.masonry.api"
|
build-backend = "poetry.core.masonry.api"
|
||||||
|
BIN
static/apple-touch-icon.png
Normal file
BIN
static/apple-touch-icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
12068
static/bootstrap.css
vendored
Normal file
12068
static/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
static/bootstrap.css.map
Normal file
1
static/bootstrap.css.map
Normal file
File diff suppressed because one or more lines are too long
4494
static/bootstrap.js
vendored
Normal file
4494
static/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
static/bootstrap.js.map
Normal file
1
static/bootstrap.js.map
Normal file
File diff suppressed because one or more lines are too long
6
static/bootstrap.min.css
vendored
Normal file
6
static/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
static/bootstrap.min.css.map
Normal file
1
static/bootstrap.min.css.map
Normal file
File diff suppressed because one or more lines are too long
7
static/bootstrap.min.js
vendored
Normal file
7
static/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
static/bootstrap.min.js.map
Normal file
1
static/bootstrap.min.js.map
Normal file
File diff suppressed because one or more lines are too long
BIN
static/favicon.ico
Normal file
BIN
static/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
static/icon-192.png
Normal file
BIN
static/icon-192.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
static/icon-512.png
Normal file
BIN
static/icon-512.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.5 KiB |
33
static/icon.svg
Normal file
33
static/icon.svg
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36">
|
||||||
|
<path fill="#99AAB5"
|
||||||
|
d="M30.016 33.887c-.804.654-1.278.708-1.357 1.156-.151.855.855.855 1.86.754 1.006-.101 1.106-.905.905-1.86-.201-.955-1.408-.05-1.408-.05zm-16.591 0c-.804.654-1.278.708-1.357 1.156-.151.855.855.855 1.86.754 1.006-.101 1.106-.905.905-1.86s-1.408-.05-1.408-.05z" />
|
||||||
|
<path fill="#66757F"
|
||||||
|
d="M25.039 33.133c-.804.654-1.278.708-1.357 1.156-.151.855.855.855 1.86.754 1.006-.101 1.106-.905.905-1.86-.202-.955-1.408-.05-1.408-.05zm-15.938 0c-.804.654-1.278.708-1.357 1.156-.151.855.855.855 1.86.754 1.006-.101 1.106-.905.905-1.86s-1.408-.05-1.408-.05z" />
|
||||||
|
<path fill="#66757F"
|
||||||
|
d="M19.446 23.182c1.879.01 2.338.358 2.734 1.367 1.269 3.234 1.958 2.001 2.264 4.419.311 2.453.272 4.449.708 4.676 1.004.523 2.59.817 1.11-4.995-.396-1.555-.783-4.266-.268-5.843.753-2.303.744-4.007.885-4.641-7.49.29-9.145 5.008-7.433 5.017z" />
|
||||||
|
<path fill="#CCD6DD"
|
||||||
|
d="M28.256 16.743c1.993-1.268 3.117-1.982 3.117-6.586 0-.529-.073-1.408-.603-1.408s-.352.526-.352 1.056c0 3.669-1.063 4.679-3.005 5.594-1.517-1.249-4.696-1.236-7.734-1.236-4.181 0-7.57 1.582-7.57 4.866s.89 4.571 5.071 4.571c1.45 0 2.856-.284 4.529-.647 1.837-.398 2.335.63 2.941 1.529 1.941 2.882 2.823 1.706 3.646 3.999.836 2.328 1.231 4.284 1.706 4.411 1.094.293 2.705.235 0-5.117-.724-1.432-1.69-3.995-1.529-5.646.235-2.411-.143-4.073-.143-4.723 0-.123-.062-.561-.074-.663z" />
|
||||||
|
<path fill="#66757F"
|
||||||
|
d="M9.702 32.226c-1.444-.38.837-6.535-1.191-8.533-1.355-1.334 1.369-7.759 2.854-7.596 1.483.163.692 4.949.484 6.839-.144 1.308-1.288 5.351-.726 7.671.323 1.336-.694 1.811-1.421 1.619z" />
|
||||||
|
<path fill="#66757F"
|
||||||
|
d="M12.318 31.59c-.147 1.785-1.27 2.066-2.616 1.955-1.346-.111-2.408-.571-2.261-2.356s1.357-3.143 2.704-3.033c1.347.111 2.32 1.649 2.173 3.434z" />
|
||||||
|
<path fill="#CCD6DD"
|
||||||
|
d="M13.772 32.472c-1.489-.111-.364-6.578-2.722-8.174-1.575-1.066-.064-7.879 1.425-7.988 1.488-.109 1.58 4.741 1.719 6.637.096 1.312-.294 5.496.681 7.675.561 1.254-.352 1.906-1.103 1.85z" />
|
||||||
|
<path fill="#99AAB5"
|
||||||
|
d="M20.914 18.184c0 4.6-1.198 7.245-5.767 7.791-5.644.675-10.032-2.963-9.608-7.544.528-5.707 3.78-7.425 7.29-7.431 4.601-.008 8.085 2.582 8.085 7.184z" />
|
||||||
|
<path fill="#99AAB5"
|
||||||
|
d="M22.575 18.402c0 4.6-2.859 7.027-7.428 7.573-5.644.675-10.032-2.963-9.608-7.544.528-5.707 3.772-7.665 7.282-7.671 2.598-.005 5.43 0 7.179 2.607 2.123.561 2.575 3.032 2.575 5.035zm-6.132 13.409c.18 1.782-.873 2.262-2.217 2.398-1.344.136-2.471-.124-2.652-1.905-.18-1.782.763-3.338 2.108-3.474 1.344-.136 2.581 1.199 2.761 2.981z" />
|
||||||
|
<path fill="#66757F"
|
||||||
|
d="M27.758 31.562c-.043 1.79-1.053 2.138-2.287 2.109-1.234-.029-2.226-.425-2.183-2.215.043-1.79 1.078-3.219 2.312-3.19 1.234.029 2.2 1.506 2.158 3.296z" />
|
||||||
|
<path fill="#99AAB5"
|
||||||
|
d="M32.689 31.553c.374 1.751-.528 2.324-1.735 2.582s-2.264.103-2.638-1.648.302-3.382 1.509-3.639c1.207-.258 2.49.953 2.864 2.705zm.512-20.467c.093 1.789-1.087 3.305-2.634 3.385-1.547.08-2.878-1.306-2.971-3.095-.093-1.789.245-4.364 1.792-4.444 1.547-.08 3.72 2.365 3.813 4.154z" />
|
||||||
|
<path fill="#CCD6DD"
|
||||||
|
d="M13.231 7.67c.328 1.726-1.846 3.731-4.913 4.172-6.15.884-7.16-2.459-7.291-3.511-.104-.834 2.703-1.177 6.395-3.149 4.572-2.442 5.481.762 5.809 2.488z" />
|
||||||
|
<path fill="#66757F"
|
||||||
|
d="M14.179 3.118c-.044-1.161-.352-3.039-3.677-3.039-1.397 0-3.713.424-3.814 1.832-1.81-.351-2.883 1.772-2.287 2.815.619 1.082 1.248 1.099 3.683.654.923-.169 2.007.577 1.801 1.493l-.078.333c-.28 1.191-1.561 2.861-1.561 4.308 0 1.396.967 2.42 2.719 2.36-.119 1.515 1.23 3.12 3.414 3.12 3.115 0 4.424-1.961 4.223-5.631-.081-1.481-.654-3.117-1.81-4.072-.049-2.313-.954-3.972-2.613-4.173z" />
|
||||||
|
<path fill="#292F33"
|
||||||
|
d="M2.521 8.864c.001.623.022 1.247-.589 1.363-.372.071-1.213-.281-1.423-1.138-.184-.756.286-1.202.898-1.319.611-.116 1.113.305 1.114 1.094z" />
|
||||||
|
<circle fill="#292F33" cx="7.715" cy="6.871" r="1" />
|
||||||
|
<path fill="#99AAB5"
|
||||||
|
d="M23.341 13.677c1.414.069 2.967 1.455 2.402 2.714s-1.616 1.537-2.564 1.408c-1.106-.151-2.492-.819-2.279-2.594.117-.976 1.111-1.593 2.441-1.528z" />
|
||||||
|
</svg>
|
After Width: | Height: | Size: 4.1 KiB |
21
static/manifest.webmanifest
Normal file
21
static/manifest.webmanifest
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "Twitch drops",
|
||||||
|
"short_name": "Twitch drops",
|
||||||
|
"description": "Twitch drops notifier, API and more",
|
||||||
|
"start_url": "/",
|
||||||
|
"display": "standalone",
|
||||||
|
"background_color": "#f69435",
|
||||||
|
"theme_color": "#f69435",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/icon-192.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "192x192"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/icon-512.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "512x512"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
5
static/style.css
Normal file
5
static/style.css
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
.container {
|
||||||
|
width: auto;
|
||||||
|
max-width: 1280px;
|
||||||
|
padding: 0 15px;
|
||||||
|
}
|
90
templates/base.html
Normal file
90
templates/base.html
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
{% load static %}
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" data-bs-theme="dark">
|
||||||
|
<head>
|
||||||
|
<!-- Head start -->
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="description"
|
||||||
|
content="{% block description %}Twitch drops{% endblock %}">
|
||||||
|
<meta name="keywords"
|
||||||
|
content="{% block keywords %}Twitch drops{% endblock %}">
|
||||||
|
<meta name="author" content="TheLovinator">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
{% block title %}<title>Panso</title>{% endblock %}
|
||||||
|
<link rel="icon" href="{% static 'favicon.ico' %}" sizes="32x32">
|
||||||
|
<link rel="icon" href="{% static 'icon.svg' %}" type="image/svg+xml">
|
||||||
|
<link rel="apple-touch-icon" href="{% static 'apple-touch-icon.png' %}">
|
||||||
|
<link rel="manifest" href="{% static 'manifest.webmanifest' %}">
|
||||||
|
<link rel="stylesheet" href="{% static 'bootstrap.min.css' %}">
|
||||||
|
<link rel="stylesheet" href="{% static 'style.css' %}">
|
||||||
|
<!-- Head end -->
|
||||||
|
</head>
|
||||||
|
<body class="d-flex flex-column vh-100">
|
||||||
|
<!-- Body start -->
|
||||||
|
<nav class="navbar navbar-expand-md border-bottom border-warning">
|
||||||
|
<div class="container-fluid">
|
||||||
|
<button class="navbar-toggler ms-auto"
|
||||||
|
type="button"
|
||||||
|
data-bs-toggle="collapse"
|
||||||
|
data-bs-target="#collapseNavbar">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="navbar-collapse collapse" id="collapseNavbar">
|
||||||
|
<ul class="navbar-nav">
|
||||||
|
<!-- Home -->
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="{% url 'twitch_drop_notifier:index' %}">Home</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<!-- Donate button, top right corner -->
|
||||||
|
<ul class="navbar-nav ms-auto">
|
||||||
|
<li class="nav-item d-none d-md-block">
|
||||||
|
<a class="nav-link" href="https://github.com/sponsors/TheLovinator1">Donate ❤️</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
<!-- Content -->
|
||||||
|
<div class="container-xl mt-3 mb-3">
|
||||||
|
{% block content %}<!-- default content -->{% endblock %}
|
||||||
|
</div>
|
||||||
|
<!-- Content end -->
|
||||||
|
<!-- Footer -->
|
||||||
|
<footer class="footer bg-body-tertiary mt-auto">
|
||||||
|
<div class="container">
|
||||||
|
<footer class="d-flex flex-wrap justify-content-between align-items-center">
|
||||||
|
<!-- License -->
|
||||||
|
<p class="col-md-4 mb-0 text-muted">
|
||||||
|
<a href="{% url 'twitch_drop_notifier:terms' %}" class="text-muted">CC BY-SA 4.0</a>
|
||||||
|
</p>
|
||||||
|
<!-- Links, right side of footer -->
|
||||||
|
<ul class="nav col-md-4 justify-content-end">
|
||||||
|
<!-- GitHub link -->
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="https://github.com/TheLovinator1/panso.se"
|
||||||
|
class="nav-link px-2 text-muted">GitHub</a>
|
||||||
|
</li>
|
||||||
|
<!-- Sitemap link -->
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="/sitemap.xml" class="nav-link px-2 text-muted">Sitemap</a>
|
||||||
|
</li>
|
||||||
|
<!-- Privacy link -->
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="{% url 'twitch_drop_notifier:privacy' %}"
|
||||||
|
class="nav-link px-2 text-muted">Privacy</a>
|
||||||
|
</li>
|
||||||
|
<!-- Contact link -->
|
||||||
|
<li class="nav-item">
|
||||||
|
<a href="{% url 'twitch_drop_notifier:contact' %}"
|
||||||
|
class="nav-link px-2 text-muted">Contact</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
<!-- Footer end -->
|
||||||
|
<script src="{% static 'bootstrap.min.js' %}"></script>
|
||||||
|
<!-- Body end -->
|
||||||
|
</body>
|
||||||
|
</html>
|
42
templates/contact.html
Normal file
42
templates/contact.html
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}<title>Contact - Panso</title>{% endblock %}
|
||||||
|
{% block description %}Panso contact page{% endblock %}
|
||||||
|
{% block keywords %}Panso, Panso.se, Contact{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<article>
|
||||||
|
<header>
|
||||||
|
<h1>Contact</h1>
|
||||||
|
</header>
|
||||||
|
<section>
|
||||||
|
<p>Feel free to contact me about anything. I will try to respond as soon as possible. Thank you!</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>GitHub Issues</h2>
|
||||||
|
<p>
|
||||||
|
You can create an issue on GitHub <a href="https://github.com/TheLovinator1/panso.se/issues">here</a>.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Discord</h2>
|
||||||
|
<p>
|
||||||
|
You can contact me directly on Discord:
|
||||||
|
<address>
|
||||||
|
<code>TheLovinator#9276</code>
|
||||||
|
</address>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Email</h2>
|
||||||
|
<p>
|
||||||
|
You can contact me via email at either of these addresses:
|
||||||
|
<address>
|
||||||
|
<a href="mailto:hello@panso.se">hello@panso.se</a>
|
||||||
|
<br>
|
||||||
|
<a href="mailto:tlovinator@gmail.com">tlovinator@gmail.com</a>
|
||||||
|
</address>
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
20
templates/index.html
Normal file
20
templates/index.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}<title>Twitch-drops</title>{% endblock %}
|
||||||
|
{% block description %}Twitch-drops{% endblock %}
|
||||||
|
{% block keywords %}Twitch-drops{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<h1>Index</h1>
|
||||||
|
<span class="text-body-secondary">This is the index page.</span>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
{% lorem %} {% lorem %} {% lorem %} {% lorem %}
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
{% lorem %} {% lorem %} {% lorem %} {% lorem %}
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
{% lorem %} {% lorem %} {% lorem %} {% lorem %}
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
{% lorem %} {% lorem %} {% lorem %} {% lorem %}
|
||||||
|
{% endblock %}
|
114
templates/privacy.html
Normal file
114
templates/privacy.html
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}<title>Privacy - Panso</title>{% endblock %}
|
||||||
|
{% block description %}Panso privacy policy{% endblock %}
|
||||||
|
{% block keywords %}Panso, Panso.se, Privacy{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<article>
|
||||||
|
<header>
|
||||||
|
<h1>Privacy Policy</h1>
|
||||||
|
</header>
|
||||||
|
<p>
|
||||||
|
Last Updated:
|
||||||
|
<time datetime="2020-12-20">
|
||||||
|
2023-12-20
|
||||||
|
</time>
|
||||||
|
</p>
|
||||||
|
<section>
|
||||||
|
<h2>What information do we collect?</h2>
|
||||||
|
<h3>Cloudflare</h3>
|
||||||
|
<p>
|
||||||
|
Our website is protected by Cloudflare for security and performance. Please refer to <a href="https://www.cloudflare.com/privacypolicy/">Cloudflare's Privacy Policy</a> for details on how
|
||||||
|
Cloudflare handles data. We (Panso) can not access any data that Cloudflare collects except for the
|
||||||
|
following metrics that are displayed in our Cloudflare dashboard:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>Unique Visitors</li>
|
||||||
|
<li>Total requests</li>
|
||||||
|
<li>Percentage of requests that were cached</li>
|
||||||
|
<li>Total bandwidth used</li>
|
||||||
|
<li>Total data served</li>
|
||||||
|
<li>Data cached</li>
|
||||||
|
<li>Top Traffic per country</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Sentry</h3>
|
||||||
|
<p>
|
||||||
|
We use Sentry to track errors on our website. Errors are stored for 30 days and then automatically
|
||||||
|
deleted. Information that is collected includes:
|
||||||
|
</p>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
The <a href="https://en.wikipedia.org/wiki/Stack_trace">stack trace</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Browser information (For example: <code>Firefox 122.0</code>)
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
User agent (For example: <code>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101
|
||||||
|
Firefox/122.0</code>)
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Operating system information (For example: <code>Windows >=10</code>)
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
URL (For example: <code>https://panso.se/about/</code>)
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
Headers (For example: <code>Accept-Language: en-US,en;q=0.5</code>)
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Purpose of Data Collection</h2>
|
||||||
|
<p>The data we collect is used for the following purposes:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Log Files: To identify and address website errors and improve performance.</li>
|
||||||
|
<li>Cloudflare: For security and content delivery.</li>
|
||||||
|
<li>Sentry: To identify and address website errors.</li>
|
||||||
|
</ul>
|
||||||
|
<p>None of the data we collect is used for marketing purposes or sold to third parties.</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Cookies and Tracking</h2>
|
||||||
|
<p>We do not use cookies or tracking technologies on our website.</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Data Sharing</h2>
|
||||||
|
<p>
|
||||||
|
We do not share your data with third parties. However, please review the privacy policies of Cloudflare
|
||||||
|
and Sentry for information on how they handle data.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>User Rights</h2>
|
||||||
|
<p>
|
||||||
|
You have the right to access, correct, or delete your information. For any privacy-related inquiries,
|
||||||
|
please <a href="{% url 'products:contact' %}">contact us</a>.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Retention Period</h2>
|
||||||
|
<p>
|
||||||
|
Log files may be retained for a limited time for debugging purposes. We do not retain personal
|
||||||
|
information unless required for legal or business reasons.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Changes to the Privacy Policy</h2>
|
||||||
|
<p>
|
||||||
|
This privacy policy may be updated. Check the "Last Updated" date at the top of this document to see
|
||||||
|
when it was last updated.
|
||||||
|
We will notify you of any material changes.
|
||||||
|
<br>
|
||||||
|
You can also check the git commit history for changes to this document <a href="https://github.com/TheLovinator1/panso.se/commits/master/templates/privacy.html">here</a>.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Contact Information</h2>
|
||||||
|
<p>
|
||||||
|
For privacy concerns or questions, please <a href="{% url 'products:contact' %}">contact us</a>.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
51
templates/terms.html
Normal file
51
templates/terms.html
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}<title>Terms - Panso</title>{% endblock %}
|
||||||
|
{% block description %}Panso terms of service{% endblock %}
|
||||||
|
{% block keywords %}Panso, Panso.se, License, Terms{% endblock %}
|
||||||
|
{% block content %}
|
||||||
|
<div class="container">
|
||||||
|
<article>
|
||||||
|
<header>
|
||||||
|
<h1>Terms of Service</h1>
|
||||||
|
</header>
|
||||||
|
<section>
|
||||||
|
<h2>License</h2>
|
||||||
|
<p>
|
||||||
|
The content on this website is licensed under the
|
||||||
|
<a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>You are free to:</h2>
|
||||||
|
<ul>
|
||||||
|
<li>Share — copy and redistribute the material in any medium or format</li>
|
||||||
|
<li>Adapt — remix, transform, and build upon the material for any purpose, even commercially.</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Under the following terms:</h2>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
Attribution — You must give appropriate credit, provide a link to the license, and indicate if
|
||||||
|
changes were made. You may do so in any reasonable manner, but not in any way that suggests the
|
||||||
|
licensor endorses you or your use.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
ShareAlike — If you remix, transform, or build upon the material, you must distribute your
|
||||||
|
contributions under the same license as the original.
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
No additional restrictions — You may not apply legal terms or technological measures that legally
|
||||||
|
restrict others from doing anything the license permits.
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<h2>Legal code:</h2>
|
||||||
|
<p>
|
||||||
|
The full legal code of the license can be found <a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode">here</a>.
|
||||||
|
</p>
|
||||||
|
</section>
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
28
twitch_drop_notifier/urls.py
Normal file
28
twitch_drop_notifier/urls.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from django.urls import URLPattern, path
|
||||||
|
from django.views.generic.base import RedirectView
|
||||||
|
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
app_name: str = "twitch_drop_notifier"
|
||||||
|
|
||||||
|
urlpatterns: list[URLPattern] = [
|
||||||
|
path(route="", view=views.index, name="index"),
|
||||||
|
path(route="privacy", view=views.privacy, name="privacy"),
|
||||||
|
path(route="terms", view=views.terms, name="terms"),
|
||||||
|
path(route="contact", view=views.contact, name="contact"),
|
||||||
|
path(route="robots.txt", view=views.robots_txt, name="robots-txt"),
|
||||||
|
path(
|
||||||
|
route="favicon.ico",
|
||||||
|
view=RedirectView.as_view(url="/static/favicon.ico", permanent=True),
|
||||||
|
),
|
||||||
|
path(
|
||||||
|
route="icon-512.png",
|
||||||
|
view=RedirectView.as_view(url="/static/icon-512.png", permanent=True),
|
||||||
|
),
|
||||||
|
path(
|
||||||
|
route="icon-192.png",
|
||||||
|
view=RedirectView.as_view(url="/static/icon-192.png", permanent=True),
|
||||||
|
),
|
||||||
|
]
|
@ -1 +1,75 @@
|
|||||||
# Create your views here.
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from django.http import HttpRequest, HttpResponse
|
||||||
|
from django.template import loader
|
||||||
|
from django.views.decorators.http import require_GET
|
||||||
|
|
||||||
|
|
||||||
|
def index(request: HttpRequest) -> HttpResponse:
|
||||||
|
"""/ index page.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The request.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
HttpResponse: The response.
|
||||||
|
"""
|
||||||
|
template = loader.get_template(template_name="index.html")
|
||||||
|
context = {}
|
||||||
|
return HttpResponse(content=template.render(context, request))
|
||||||
|
|
||||||
|
|
||||||
|
robots_txt_content = """User-agent: *
|
||||||
|
Allow: /
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@require_GET
|
||||||
|
def robots_txt(request: HttpRequest) -> HttpResponse: # noqa: ARG001
|
||||||
|
"""robots.txt page."""
|
||||||
|
return HttpResponse(robots_txt_content, content_type="text/plain")
|
||||||
|
|
||||||
|
|
||||||
|
@require_GET
|
||||||
|
def contact(request: HttpRequest) -> HttpResponse:
|
||||||
|
"""/contact page.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The request.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
HttpResponse: The response.
|
||||||
|
"""
|
||||||
|
template = loader.get_template(template_name="contact.html")
|
||||||
|
context = {}
|
||||||
|
return HttpResponse(content=template.render(context, request))
|
||||||
|
|
||||||
|
|
||||||
|
@require_GET
|
||||||
|
def privacy(request: HttpRequest) -> HttpResponse:
|
||||||
|
"""/privacy page.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The request.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
HttpResponse: The response.
|
||||||
|
"""
|
||||||
|
template = loader.get_template(template_name="privacy.html")
|
||||||
|
context = {}
|
||||||
|
return HttpResponse(content=template.render(context, request))
|
||||||
|
|
||||||
|
|
||||||
|
@require_GET
|
||||||
|
def terms(request: HttpRequest) -> HttpResponse:
|
||||||
|
"""/terms page.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request: The request.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
HttpResponse: The response.
|
||||||
|
"""
|
||||||
|
template = loader.get_template(template_name="terms.html")
|
||||||
|
context = {}
|
||||||
|
return HttpResponse(content=template.render(context, request))
|
||||||
|
Reference in New Issue
Block a user