dreamy-admin 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- dreamy_admin-0.1.0/PKG-INFO +51 -0
- dreamy_admin-0.1.0/README.md +10 -0
- dreamy_admin-0.1.0/pyproject.toml +42 -0
- dreamy_admin-0.1.0/setup.cfg +4 -0
- dreamy_admin-0.1.0/src/Dreamy_admin.egg-info/PKG-INFO +51 -0
- dreamy_admin-0.1.0/src/Dreamy_admin.egg-info/SOURCES.txt +129 -0
- dreamy_admin-0.1.0/src/Dreamy_admin.egg-info/dependency_links.txt +1 -0
- dreamy_admin-0.1.0/src/Dreamy_admin.egg-info/requires.txt +34 -0
- dreamy_admin-0.1.0/src/Dreamy_admin.egg-info/top_level.txt +9 -0
- dreamy_admin-0.1.0/src/accounts/__init__.py +0 -0
- dreamy_admin-0.1.0/src/accounts/admin.py +16 -0
- dreamy_admin-0.1.0/src/accounts/apps.py +6 -0
- dreamy_admin-0.1.0/src/accounts/forms.py +44 -0
- dreamy_admin-0.1.0/src/accounts/migrations/0001_initial.py +130 -0
- dreamy_admin-0.1.0/src/accounts/migrations/0002_deleteaccount.py +41 -0
- dreamy_admin-0.1.0/src/accounts/migrations/0003_alter_deleteaccount_reason.py +27 -0
- dreamy_admin-0.1.0/src/accounts/migrations/__init__.py +0 -0
- dreamy_admin-0.1.0/src/accounts/models.py +27 -0
- dreamy_admin-0.1.0/src/accounts/tests.py +3 -0
- dreamy_admin-0.1.0/src/accounts/urls.py +12 -0
- dreamy_admin-0.1.0/src/accounts/views.py +26 -0
- dreamy_admin-0.1.0/src/accounts/widgets/turnstile.py +48 -0
- dreamy_admin-0.1.0/src/ai_chat/__init__.py +0 -0
- dreamy_admin-0.1.0/src/ai_chat/admin.py +3 -0
- dreamy_admin-0.1.0/src/ai_chat/apps.py +6 -0
- dreamy_admin-0.1.0/src/ai_chat/forms.py +7 -0
- dreamy_admin-0.1.0/src/ai_chat/managers.py +21 -0
- dreamy_admin-0.1.0/src/ai_chat/migrations/__init__.py +0 -0
- dreamy_admin-0.1.0/src/ai_chat/models.py +9 -0
- dreamy_admin-0.1.0/src/ai_chat/templatetags/custom_tags.py +18 -0
- dreamy_admin-0.1.0/src/ai_chat/tests.py +3 -0
- dreamy_admin-0.1.0/src/ai_chat/urls.py +7 -0
- dreamy_admin-0.1.0/src/ai_chat/views.py +70 -0
- dreamy_admin-0.1.0/src/base/__init__.py +0 -0
- dreamy_admin-0.1.0/src/base/admin.py +13 -0
- dreamy_admin-0.1.0/src/base/apps.py +5 -0
- dreamy_admin-0.1.0/src/base/choices.py +224 -0
- dreamy_admin-0.1.0/src/base/management/commands/__init__ 2.py +0 -0
- dreamy_admin-0.1.0/src/base/management/commands/__init__.py +0 -0
- dreamy_admin-0.1.0/src/base/management/commands/_create_sessions 2.py +26 -0
- dreamy_admin-0.1.0/src/base/management/commands/_create_sessions.py +26 -0
- dreamy_admin-0.1.0/src/base/management/commands/add_context 2.py +21 -0
- dreamy_admin-0.1.0/src/base/management/commands/add_context.py +21 -0
- dreamy_admin-0.1.0/src/base/migrations/0001_initial.py +56 -0
- dreamy_admin-0.1.0/src/base/migrations/0002_page_created_page_modified.py +26 -0
- dreamy_admin-0.1.0/src/base/migrations/0003_alter_page_image.py +17 -0
- dreamy_admin-0.1.0/src/base/migrations/__init__.py +0 -0
- dreamy_admin-0.1.0/src/base/models.py +38 -0
- dreamy_admin-0.1.0/src/base/templatetags/clean_text.py +57 -0
- dreamy_admin-0.1.0/src/base/templatetags/hx_helpers.py +14 -0
- dreamy_admin-0.1.0/src/base/tests.py +3 -0
- dreamy_admin-0.1.0/src/base/urls.py +12 -0
- dreamy_admin-0.1.0/src/base/views.py +34 -0
- dreamy_admin-0.1.0/src/manage.py +23 -0
- dreamy_admin-0.1.0/src/my_numbers/__init__.py +0 -0
- dreamy_admin-0.1.0/src/my_numbers/admin.py +3 -0
- dreamy_admin-0.1.0/src/my_numbers/apps.py +5 -0
- dreamy_admin-0.1.0/src/my_numbers/forms.py +122 -0
- dreamy_admin-0.1.0/src/my_numbers/migrations/0001_initial.py +169 -0
- dreamy_admin-0.1.0/src/my_numbers/migrations/__init__.py +0 -0
- dreamy_admin-0.1.0/src/my_numbers/models.py +48 -0
- dreamy_admin-0.1.0/src/my_numbers/tests.py +3 -0
- dreamy_admin-0.1.0/src/my_numbers/views.py +3 -0
- dreamy_admin-0.1.0/src/ppm_app/__init__.py +0 -0
- dreamy_admin-0.1.0/src/ppm_app/asgi.py +16 -0
- dreamy_admin-0.1.0/src/ppm_app/responses/__init__.py +0 -0
- dreamy_admin-0.1.0/src/ppm_app/responses/hx_responses.py +88 -0
- dreamy_admin-0.1.0/src/ppm_app/settings/__init__.py +0 -0
- dreamy_admin-0.1.0/src/ppm_app/settings/base.py +259 -0
- dreamy_admin-0.1.0/src/ppm_app/settings/cli.py +18 -0
- dreamy_admin-0.1.0/src/ppm_app/settings/dev.py +22 -0
- dreamy_admin-0.1.0/src/ppm_app/settings/prod.py +48 -0
- dreamy_admin-0.1.0/src/ppm_app/tests/__init__.py +0 -0
- dreamy_admin-0.1.0/src/ppm_app/tests/playwright.py +83 -0
- dreamy_admin-0.1.0/src/ppm_app/urls.py +31 -0
- dreamy_admin-0.1.0/src/ppm_app/wsgi.py +16 -0
- dreamy_admin-0.1.0/src/room_calendar_app/__init__.py +0 -0
- dreamy_admin-0.1.0/src/room_calendar_app/admin.py +20 -0
- dreamy_admin-0.1.0/src/room_calendar_app/apps.py +11 -0
- dreamy_admin-0.1.0/src/room_calendar_app/calendar_utils.py +124 -0
- dreamy_admin-0.1.0/src/room_calendar_app/forms.py +64 -0
- dreamy_admin-0.1.0/src/room_calendar_app/migrations/0001_initial.py +232 -0
- dreamy_admin-0.1.0/src/room_calendar_app/migrations/0002_alter_tenantmodel_calendar.py +22 -0
- dreamy_admin-0.1.0/src/room_calendar_app/migrations/__init__.py +0 -0
- dreamy_admin-0.1.0/src/room_calendar_app/models.py +81 -0
- dreamy_admin-0.1.0/src/room_calendar_app/querysets.py +82 -0
- dreamy_admin-0.1.0/src/room_calendar_app/signals.py +23 -0
- dreamy_admin-0.1.0/src/room_calendar_app/tests.py +281 -0
- dreamy_admin-0.1.0/src/room_calendar_app/tests_post.py +218 -0
- dreamy_admin-0.1.0/src/room_calendar_app/urls.py +40 -0
- dreamy_admin-0.1.0/src/room_calendar_app/utils/calendar_utils.py +76 -0
- dreamy_admin-0.1.0/src/room_calendar_app/utils/setup.py +9 -0
- dreamy_admin-0.1.0/src/room_calendar_app/views.py +454 -0
- dreamy_admin-0.1.0/src/session_client/__init__.py +0 -0
- dreamy_admin-0.1.0/src/session_client/admin.py +20 -0
- dreamy_admin-0.1.0/src/session_client/apps.py +6 -0
- dreamy_admin-0.1.0/src/session_client/forms.py +197 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0001_initial.py +269 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0002_sessionmodel_tenant.py +24 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0003_remove_sessionmodel_calendar.py +16 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0004_alter_sessionmodel_tenant_clientextratimes.py +110 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0005_rename_clientextratimes_clienttimes.py +17 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0006_clienttimes_created_at_alter_clienttimes_client.py +31 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0007_remove_clientmodel_day_remove_clientmodel_time_and_more.py +33 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0008_clienttimes_fortnight.py +20 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0009_alter_clienttimes_tenant.py +24 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0010_alter_sessionmodel_date.py +20 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0011_alter_clientmodel_duration_alter_sessionmodel_date.py +36 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0012_alter_clientmodel_duration.py +27 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0013_alter_clientmodel_duration.py +27 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0014_alter_clientmodel_duration.py +29 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0015_alter_sessionmodel_date.py +23 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0016_alter_sessionmodel_date.py +23 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0017_alter_sessionmodel_date.py +23 -0
- dreamy_admin-0.1.0/src/session_client/migrations/0018_alter_sessionmodel_date.py +23 -0
- dreamy_admin-0.1.0/src/session_client/migrations/__init__.py +0 -0
- dreamy_admin-0.1.0/src/session_client/models.py +415 -0
- dreamy_admin-0.1.0/src/session_client/querysets.py +70 -0
- dreamy_admin-0.1.0/src/session_client/tests.py +310 -0
- dreamy_admin-0.1.0/src/session_client/tests_post.py +252 -0
- dreamy_admin-0.1.0/src/session_client/urls.py +84 -0
- dreamy_admin-0.1.0/src/session_client/utils.py +76 -0
- dreamy_admin-0.1.0/src/session_client/views_client.py +177 -0
- dreamy_admin-0.1.0/src/session_client/views_session.py +455 -0
- dreamy_admin-0.1.0/src/session_client/views_time.py +87 -0
- dreamy_admin-0.1.0/src/session_client/widgets.py +39 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dreamy-admin
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: App to help therapist handle their admin
|
|
5
|
+
Requires-Python: >=3.13
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: anyio==4.12.1
|
|
8
|
+
Requires-Dist: asgiref==3.11.1
|
|
9
|
+
Requires-Dist: asttokens==3.0.1
|
|
10
|
+
Requires-Dist: bleach>=6.3.0
|
|
11
|
+
Requires-Dist: certifi==2026.2.25
|
|
12
|
+
Requires-Dist: charset-normalizer==3.4.5
|
|
13
|
+
Requires-Dist: cython==3.2.4
|
|
14
|
+
Requires-Dist: django==6.0.3
|
|
15
|
+
Requires-Dist: django-allauth>=65.15.0
|
|
16
|
+
Requires-Dist: django-bootstrap5==26.2
|
|
17
|
+
Requires-Dist: django-browser-reload==1.21.0
|
|
18
|
+
Requires-Dist: django-htmx==1.27.0
|
|
19
|
+
Requires-Dist: docutils==0.22.4
|
|
20
|
+
Requires-Dist: greenlet==3.3.2
|
|
21
|
+
Requires-Dist: gunicorn==25.1.0
|
|
22
|
+
Requires-Dist: idna==3.11
|
|
23
|
+
Requires-Dist: ipython==9.11.0
|
|
24
|
+
Requires-Dist: markdown==3.10.2
|
|
25
|
+
Requires-Dist: numpy>=2.4
|
|
26
|
+
Requires-Dist: pendulum==3.2.0
|
|
27
|
+
Requires-Dist: pgvector>=0.4.2
|
|
28
|
+
Requires-Dist: pillow==12.1.1
|
|
29
|
+
Requires-Dist: playwright==1.58.0
|
|
30
|
+
Requires-Dist: polib>=1.2.0
|
|
31
|
+
Requires-Dist: psycopg2==2.9.11
|
|
32
|
+
Requires-Dist: python-decouple<4,>=3.8
|
|
33
|
+
Requires-Dist: requests>=2.32.5
|
|
34
|
+
Requires-Dist: resend>=2.24.0
|
|
35
|
+
Requires-Dist: sentry-sdk>=2.54.0
|
|
36
|
+
Requires-Dist: setuptools==82.0.1
|
|
37
|
+
Requires-Dist: sqlparse==0.5.5
|
|
38
|
+
Requires-Dist: typing-extensions==4.15.0
|
|
39
|
+
Requires-Dist: tzdata==2025.3
|
|
40
|
+
Requires-Dist: whitenoise==6.12.0
|
|
41
|
+
|
|
42
|
+
# Dreamy admin
|
|
43
|
+
|
|
44
|
+
Dreamy is an admin for therapists.
|
|
45
|
+
It is a sort of CRM, with a centre on sessions of clients that happen in rooms.
|
|
46
|
+
After working on a centre, I saw that the admin for therapists
|
|
47
|
+
was not as easy, and there was a need for that interconnection.
|
|
48
|
+
|
|
49
|
+
I solved the problem somehow with Notion, but there where some gaps,
|
|
50
|
+
as the need to coordinate with others.
|
|
51
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Dreamy admin
|
|
2
|
+
|
|
3
|
+
Dreamy is an admin for therapists.
|
|
4
|
+
It is a sort of CRM, with a centre on sessions of clients that happen in rooms.
|
|
5
|
+
After working on a centre, I saw that the admin for therapists
|
|
6
|
+
was not as easy, and there was a need for that interconnection.
|
|
7
|
+
|
|
8
|
+
I solved the problem somehow with Notion, but there where some gaps,
|
|
9
|
+
as the need to coordinate with others.
|
|
10
|
+
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "dreamy-admin"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "App to help therapist handle their admin"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.13"
|
|
7
|
+
dependencies = [
|
|
8
|
+
"anyio==4.12.1",
|
|
9
|
+
"asgiref==3.11.1",
|
|
10
|
+
"asttokens==3.0.1",
|
|
11
|
+
"bleach>=6.3.0",
|
|
12
|
+
"certifi==2026.2.25",
|
|
13
|
+
"charset-normalizer==3.4.5",
|
|
14
|
+
"cython==3.2.4",
|
|
15
|
+
"django==6.0.3",
|
|
16
|
+
"django-allauth>=65.15.0",
|
|
17
|
+
"django-bootstrap5==26.2",
|
|
18
|
+
"django-browser-reload==1.21.0",
|
|
19
|
+
"django-htmx==1.27.0",
|
|
20
|
+
"docutils==0.22.4",
|
|
21
|
+
"greenlet==3.3.2",
|
|
22
|
+
"gunicorn==25.1.0",
|
|
23
|
+
"idna==3.11",
|
|
24
|
+
"ipython==9.11.0",
|
|
25
|
+
"markdown==3.10.2",
|
|
26
|
+
"numpy>=2.4",
|
|
27
|
+
"pendulum==3.2.0",
|
|
28
|
+
"pgvector>=0.4.2",
|
|
29
|
+
"pillow==12.1.1",
|
|
30
|
+
"playwright==1.58.0",
|
|
31
|
+
"polib>=1.2.0",
|
|
32
|
+
"psycopg2==2.9.11",
|
|
33
|
+
"python-decouple>=3.8,<4",
|
|
34
|
+
"requests>=2.32.5",
|
|
35
|
+
"resend>=2.24.0",
|
|
36
|
+
"sentry-sdk>=2.54.0",
|
|
37
|
+
"setuptools==82.0.1",
|
|
38
|
+
"sqlparse==0.5.5",
|
|
39
|
+
"typing-extensions==4.15.0",
|
|
40
|
+
"tzdata==2025.3",
|
|
41
|
+
"whitenoise==6.12.0",
|
|
42
|
+
]
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dreamy-admin
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: App to help therapist handle their admin
|
|
5
|
+
Requires-Python: >=3.13
|
|
6
|
+
Description-Content-Type: text/markdown
|
|
7
|
+
Requires-Dist: anyio==4.12.1
|
|
8
|
+
Requires-Dist: asgiref==3.11.1
|
|
9
|
+
Requires-Dist: asttokens==3.0.1
|
|
10
|
+
Requires-Dist: bleach>=6.3.0
|
|
11
|
+
Requires-Dist: certifi==2026.2.25
|
|
12
|
+
Requires-Dist: charset-normalizer==3.4.5
|
|
13
|
+
Requires-Dist: cython==3.2.4
|
|
14
|
+
Requires-Dist: django==6.0.3
|
|
15
|
+
Requires-Dist: django-allauth>=65.15.0
|
|
16
|
+
Requires-Dist: django-bootstrap5==26.2
|
|
17
|
+
Requires-Dist: django-browser-reload==1.21.0
|
|
18
|
+
Requires-Dist: django-htmx==1.27.0
|
|
19
|
+
Requires-Dist: docutils==0.22.4
|
|
20
|
+
Requires-Dist: greenlet==3.3.2
|
|
21
|
+
Requires-Dist: gunicorn==25.1.0
|
|
22
|
+
Requires-Dist: idna==3.11
|
|
23
|
+
Requires-Dist: ipython==9.11.0
|
|
24
|
+
Requires-Dist: markdown==3.10.2
|
|
25
|
+
Requires-Dist: numpy>=2.4
|
|
26
|
+
Requires-Dist: pendulum==3.2.0
|
|
27
|
+
Requires-Dist: pgvector>=0.4.2
|
|
28
|
+
Requires-Dist: pillow==12.1.1
|
|
29
|
+
Requires-Dist: playwright==1.58.0
|
|
30
|
+
Requires-Dist: polib>=1.2.0
|
|
31
|
+
Requires-Dist: psycopg2==2.9.11
|
|
32
|
+
Requires-Dist: python-decouple<4,>=3.8
|
|
33
|
+
Requires-Dist: requests>=2.32.5
|
|
34
|
+
Requires-Dist: resend>=2.24.0
|
|
35
|
+
Requires-Dist: sentry-sdk>=2.54.0
|
|
36
|
+
Requires-Dist: setuptools==82.0.1
|
|
37
|
+
Requires-Dist: sqlparse==0.5.5
|
|
38
|
+
Requires-Dist: typing-extensions==4.15.0
|
|
39
|
+
Requires-Dist: tzdata==2025.3
|
|
40
|
+
Requires-Dist: whitenoise==6.12.0
|
|
41
|
+
|
|
42
|
+
# Dreamy admin
|
|
43
|
+
|
|
44
|
+
Dreamy is an admin for therapists.
|
|
45
|
+
It is a sort of CRM, with a centre on sessions of clients that happen in rooms.
|
|
46
|
+
After working on a centre, I saw that the admin for therapists
|
|
47
|
+
was not as easy, and there was a need for that interconnection.
|
|
48
|
+
|
|
49
|
+
I solved the problem somehow with Notion, but there where some gaps,
|
|
50
|
+
as the need to coordinate with others.
|
|
51
|
+
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
src/manage.py
|
|
4
|
+
src/Dreamy_admin.egg-info/PKG-INFO
|
|
5
|
+
src/Dreamy_admin.egg-info/SOURCES.txt
|
|
6
|
+
src/Dreamy_admin.egg-info/dependency_links.txt
|
|
7
|
+
src/Dreamy_admin.egg-info/requires.txt
|
|
8
|
+
src/Dreamy_admin.egg-info/top_level.txt
|
|
9
|
+
src/accounts/__init__.py
|
|
10
|
+
src/accounts/admin.py
|
|
11
|
+
src/accounts/apps.py
|
|
12
|
+
src/accounts/forms.py
|
|
13
|
+
src/accounts/models.py
|
|
14
|
+
src/accounts/tests.py
|
|
15
|
+
src/accounts/urls.py
|
|
16
|
+
src/accounts/views.py
|
|
17
|
+
src/accounts/migrations/0001_initial.py
|
|
18
|
+
src/accounts/migrations/0002_deleteaccount.py
|
|
19
|
+
src/accounts/migrations/0003_alter_deleteaccount_reason.py
|
|
20
|
+
src/accounts/migrations/__init__.py
|
|
21
|
+
src/accounts/widgets/turnstile.py
|
|
22
|
+
src/ai_chat/__init__.py
|
|
23
|
+
src/ai_chat/admin.py
|
|
24
|
+
src/ai_chat/apps.py
|
|
25
|
+
src/ai_chat/forms.py
|
|
26
|
+
src/ai_chat/managers.py
|
|
27
|
+
src/ai_chat/models.py
|
|
28
|
+
src/ai_chat/tests.py
|
|
29
|
+
src/ai_chat/urls.py
|
|
30
|
+
src/ai_chat/views.py
|
|
31
|
+
src/ai_chat/migrations/__init__.py
|
|
32
|
+
src/ai_chat/templatetags/custom_tags.py
|
|
33
|
+
src/base/__init__.py
|
|
34
|
+
src/base/admin.py
|
|
35
|
+
src/base/apps.py
|
|
36
|
+
src/base/choices.py
|
|
37
|
+
src/base/models.py
|
|
38
|
+
src/base/tests.py
|
|
39
|
+
src/base/urls.py
|
|
40
|
+
src/base/views.py
|
|
41
|
+
src/base/management/commands/__init__ 2.py
|
|
42
|
+
src/base/management/commands/__init__.py
|
|
43
|
+
src/base/management/commands/_create_sessions 2.py
|
|
44
|
+
src/base/management/commands/_create_sessions.py
|
|
45
|
+
src/base/management/commands/add_context 2.py
|
|
46
|
+
src/base/management/commands/add_context.py
|
|
47
|
+
src/base/migrations/0001_initial.py
|
|
48
|
+
src/base/migrations/0002_page_created_page_modified.py
|
|
49
|
+
src/base/migrations/0003_alter_page_image.py
|
|
50
|
+
src/base/migrations/__init__.py
|
|
51
|
+
src/base/templatetags/clean_text.py
|
|
52
|
+
src/base/templatetags/hx_helpers.py
|
|
53
|
+
src/dreamy_admin.egg-info/PKG-INFO
|
|
54
|
+
src/dreamy_admin.egg-info/SOURCES.txt
|
|
55
|
+
src/dreamy_admin.egg-info/dependency_links.txt
|
|
56
|
+
src/dreamy_admin.egg-info/requires.txt
|
|
57
|
+
src/dreamy_admin.egg-info/top_level.txt
|
|
58
|
+
src/my_numbers/__init__.py
|
|
59
|
+
src/my_numbers/admin.py
|
|
60
|
+
src/my_numbers/apps.py
|
|
61
|
+
src/my_numbers/forms.py
|
|
62
|
+
src/my_numbers/models.py
|
|
63
|
+
src/my_numbers/tests.py
|
|
64
|
+
src/my_numbers/views.py
|
|
65
|
+
src/my_numbers/migrations/0001_initial.py
|
|
66
|
+
src/my_numbers/migrations/__init__.py
|
|
67
|
+
src/ppm_app/__init__.py
|
|
68
|
+
src/ppm_app/asgi.py
|
|
69
|
+
src/ppm_app/urls.py
|
|
70
|
+
src/ppm_app/wsgi.py
|
|
71
|
+
src/ppm_app/responses/__init__.py
|
|
72
|
+
src/ppm_app/responses/hx_responses.py
|
|
73
|
+
src/ppm_app/settings/__init__.py
|
|
74
|
+
src/ppm_app/settings/base.py
|
|
75
|
+
src/ppm_app/settings/cli.py
|
|
76
|
+
src/ppm_app/settings/dev.py
|
|
77
|
+
src/ppm_app/settings/prod.py
|
|
78
|
+
src/ppm_app/tests/__init__.py
|
|
79
|
+
src/ppm_app/tests/playwright.py
|
|
80
|
+
src/room_calendar_app/__init__.py
|
|
81
|
+
src/room_calendar_app/admin.py
|
|
82
|
+
src/room_calendar_app/apps.py
|
|
83
|
+
src/room_calendar_app/calendar_utils.py
|
|
84
|
+
src/room_calendar_app/forms.py
|
|
85
|
+
src/room_calendar_app/models.py
|
|
86
|
+
src/room_calendar_app/querysets.py
|
|
87
|
+
src/room_calendar_app/signals.py
|
|
88
|
+
src/room_calendar_app/tests.py
|
|
89
|
+
src/room_calendar_app/tests_post.py
|
|
90
|
+
src/room_calendar_app/urls.py
|
|
91
|
+
src/room_calendar_app/views.py
|
|
92
|
+
src/room_calendar_app/migrations/0001_initial.py
|
|
93
|
+
src/room_calendar_app/migrations/0002_alter_tenantmodel_calendar.py
|
|
94
|
+
src/room_calendar_app/migrations/__init__.py
|
|
95
|
+
src/room_calendar_app/utils/calendar_utils.py
|
|
96
|
+
src/room_calendar_app/utils/setup.py
|
|
97
|
+
src/session_client/__init__.py
|
|
98
|
+
src/session_client/admin.py
|
|
99
|
+
src/session_client/apps.py
|
|
100
|
+
src/session_client/forms.py
|
|
101
|
+
src/session_client/models.py
|
|
102
|
+
src/session_client/querysets.py
|
|
103
|
+
src/session_client/tests.py
|
|
104
|
+
src/session_client/tests_post.py
|
|
105
|
+
src/session_client/urls.py
|
|
106
|
+
src/session_client/utils.py
|
|
107
|
+
src/session_client/views_client.py
|
|
108
|
+
src/session_client/views_session.py
|
|
109
|
+
src/session_client/views_time.py
|
|
110
|
+
src/session_client/widgets.py
|
|
111
|
+
src/session_client/migrations/0001_initial.py
|
|
112
|
+
src/session_client/migrations/0002_sessionmodel_tenant.py
|
|
113
|
+
src/session_client/migrations/0003_remove_sessionmodel_calendar.py
|
|
114
|
+
src/session_client/migrations/0004_alter_sessionmodel_tenant_clientextratimes.py
|
|
115
|
+
src/session_client/migrations/0005_rename_clientextratimes_clienttimes.py
|
|
116
|
+
src/session_client/migrations/0006_clienttimes_created_at_alter_clienttimes_client.py
|
|
117
|
+
src/session_client/migrations/0007_remove_clientmodel_day_remove_clientmodel_time_and_more.py
|
|
118
|
+
src/session_client/migrations/0008_clienttimes_fortnight.py
|
|
119
|
+
src/session_client/migrations/0009_alter_clienttimes_tenant.py
|
|
120
|
+
src/session_client/migrations/0010_alter_sessionmodel_date.py
|
|
121
|
+
src/session_client/migrations/0011_alter_clientmodel_duration_alter_sessionmodel_date.py
|
|
122
|
+
src/session_client/migrations/0012_alter_clientmodel_duration.py
|
|
123
|
+
src/session_client/migrations/0013_alter_clientmodel_duration.py
|
|
124
|
+
src/session_client/migrations/0014_alter_clientmodel_duration.py
|
|
125
|
+
src/session_client/migrations/0015_alter_sessionmodel_date.py
|
|
126
|
+
src/session_client/migrations/0016_alter_sessionmodel_date.py
|
|
127
|
+
src/session_client/migrations/0017_alter_sessionmodel_date.py
|
|
128
|
+
src/session_client/migrations/0018_alter_sessionmodel_date.py
|
|
129
|
+
src/session_client/migrations/__init__.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
anyio==4.12.1
|
|
2
|
+
asgiref==3.11.1
|
|
3
|
+
asttokens==3.0.1
|
|
4
|
+
bleach>=6.3.0
|
|
5
|
+
certifi==2026.2.25
|
|
6
|
+
charset-normalizer==3.4.5
|
|
7
|
+
cython==3.2.4
|
|
8
|
+
django==6.0.3
|
|
9
|
+
django-allauth>=65.15.0
|
|
10
|
+
django-bootstrap5==26.2
|
|
11
|
+
django-browser-reload==1.21.0
|
|
12
|
+
django-htmx==1.27.0
|
|
13
|
+
docutils==0.22.4
|
|
14
|
+
greenlet==3.3.2
|
|
15
|
+
gunicorn==25.1.0
|
|
16
|
+
idna==3.11
|
|
17
|
+
ipython==9.11.0
|
|
18
|
+
markdown==3.10.2
|
|
19
|
+
numpy>=2.4
|
|
20
|
+
pendulum==3.2.0
|
|
21
|
+
pgvector>=0.4.2
|
|
22
|
+
pillow==12.1.1
|
|
23
|
+
playwright==1.58.0
|
|
24
|
+
polib>=1.2.0
|
|
25
|
+
psycopg2==2.9.11
|
|
26
|
+
python-decouple<4,>=3.8
|
|
27
|
+
requests>=2.32.5
|
|
28
|
+
resend>=2.24.0
|
|
29
|
+
sentry-sdk>=2.54.0
|
|
30
|
+
setuptools==82.0.1
|
|
31
|
+
sqlparse==0.5.5
|
|
32
|
+
typing-extensions==4.15.0
|
|
33
|
+
tzdata==2025.3
|
|
34
|
+
whitenoise==6.12.0
|
|
File without changes
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from django.contrib import admin
|
|
2
|
+
from django.contrib.auth import get_user_model
|
|
3
|
+
from django.contrib.auth.admin import UserAdmin
|
|
4
|
+
|
|
5
|
+
# Register your models here.
|
|
6
|
+
|
|
7
|
+
CustomUser = get_user_model()
|
|
8
|
+
|
|
9
|
+
class CustomUserAdmin(UserAdmin):
|
|
10
|
+
list_display = [
|
|
11
|
+
'email',
|
|
12
|
+
'username',
|
|
13
|
+
'is_superuser',
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
admin.site.register(CustomUser,CustomUserAdmin)
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from django import forms
|
|
2
|
+
from pendulum.mixins import default
|
|
3
|
+
|
|
4
|
+
from .models import DeleteAccount
|
|
5
|
+
from .widgets.turnstile import TurnstileField
|
|
6
|
+
from decouple import config
|
|
7
|
+
from allauth.account.forms import SignupForm, LoginForm
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class DeleteAccountForm(forms.ModelForm):
|
|
11
|
+
"""a form before deleting account"""
|
|
12
|
+
|
|
13
|
+
class Meta:
|
|
14
|
+
model = DeleteAccount
|
|
15
|
+
fields = ('reason', 'confirm')
|
|
16
|
+
labels = {
|
|
17
|
+
'reason': 'Please select a reason:',
|
|
18
|
+
'confirm': 'Please confirm delete, all your data will be erased.'
|
|
19
|
+
}
|
|
20
|
+
widgets = {
|
|
21
|
+
'reason': forms.RadioSelect,
|
|
22
|
+
'confirm': forms.CheckboxInput,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
import sys
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class MyCustomSignupForm(SignupForm):
|
|
30
|
+
if 'test' in sys.argv: # I am sending a different form when in testing, to avoid conflicts
|
|
31
|
+
turnstile_field = forms.CharField(max_length=8, required=False)
|
|
32
|
+
else:
|
|
33
|
+
turnstile_field = TurnstileField(
|
|
34
|
+
secret_key=config('TURNSTILE_SECRET_KEY', default='1x0000000000000000000000000000000AA'),
|
|
35
|
+
site_key=config('TURNSTILE_SITE_KEY', default='1x00000000000000000000AA'))
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class MyCustomLoginForm(LoginForm):
|
|
39
|
+
if 'test' in sys.argv:
|
|
40
|
+
turnstile_field = forms.CharField(max_length=8, required=False)
|
|
41
|
+
else:
|
|
42
|
+
turnstile_field = TurnstileField(
|
|
43
|
+
secret_key=config('TURNSTILE_SECRET_KEY', default='1x0000000000000000000000000000000AA'),
|
|
44
|
+
site_key=config('TURNSTILE_SITE_KEY', default='1x00000000000000000000AA'))
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# Generated by Django 6.0 on 2026-02-03 12:05
|
|
2
|
+
|
|
3
|
+
import django.contrib.auth.models
|
|
4
|
+
import django.contrib.auth.validators
|
|
5
|
+
import django.utils.timezone
|
|
6
|
+
from django.db import migrations, models
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Migration(migrations.Migration):
|
|
10
|
+
initial = True
|
|
11
|
+
|
|
12
|
+
dependencies = [
|
|
13
|
+
("auth", "0012_alter_user_first_name_max_length"),
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
operations = [
|
|
17
|
+
migrations.CreateModel(
|
|
18
|
+
name="CustomUser",
|
|
19
|
+
fields=[
|
|
20
|
+
(
|
|
21
|
+
"id",
|
|
22
|
+
models.BigAutoField(
|
|
23
|
+
auto_created=True,
|
|
24
|
+
primary_key=True,
|
|
25
|
+
serialize=False,
|
|
26
|
+
verbose_name="ID",
|
|
27
|
+
),
|
|
28
|
+
),
|
|
29
|
+
("password", models.CharField(max_length=128, verbose_name="password")),
|
|
30
|
+
(
|
|
31
|
+
"last_login",
|
|
32
|
+
models.DateTimeField(
|
|
33
|
+
blank=True, null=True, verbose_name="last login"
|
|
34
|
+
),
|
|
35
|
+
),
|
|
36
|
+
(
|
|
37
|
+
"is_superuser",
|
|
38
|
+
models.BooleanField(
|
|
39
|
+
default=False,
|
|
40
|
+
help_text="Designates that this user has all permissions without explicitly assigning them.",
|
|
41
|
+
verbose_name="superuser status",
|
|
42
|
+
),
|
|
43
|
+
),
|
|
44
|
+
(
|
|
45
|
+
"username",
|
|
46
|
+
models.CharField(
|
|
47
|
+
error_messages={
|
|
48
|
+
"unique": "A user with that username already exists."
|
|
49
|
+
},
|
|
50
|
+
help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.",
|
|
51
|
+
max_length=150,
|
|
52
|
+
unique=True,
|
|
53
|
+
validators=[
|
|
54
|
+
django.contrib.auth.validators.UnicodeUsernameValidator()
|
|
55
|
+
],
|
|
56
|
+
verbose_name="username",
|
|
57
|
+
),
|
|
58
|
+
),
|
|
59
|
+
(
|
|
60
|
+
"first_name",
|
|
61
|
+
models.CharField(
|
|
62
|
+
blank=True, max_length=150, verbose_name="first name"
|
|
63
|
+
),
|
|
64
|
+
),
|
|
65
|
+
(
|
|
66
|
+
"last_name",
|
|
67
|
+
models.CharField(
|
|
68
|
+
blank=True, max_length=150, verbose_name="last name"
|
|
69
|
+
),
|
|
70
|
+
),
|
|
71
|
+
(
|
|
72
|
+
"email",
|
|
73
|
+
models.EmailField(
|
|
74
|
+
blank=True, max_length=254, verbose_name="email address"
|
|
75
|
+
),
|
|
76
|
+
),
|
|
77
|
+
(
|
|
78
|
+
"is_staff",
|
|
79
|
+
models.BooleanField(
|
|
80
|
+
default=False,
|
|
81
|
+
help_text="Designates whether the user can log into this admin site.",
|
|
82
|
+
verbose_name="staff status",
|
|
83
|
+
),
|
|
84
|
+
),
|
|
85
|
+
(
|
|
86
|
+
"is_active",
|
|
87
|
+
models.BooleanField(
|
|
88
|
+
default=True,
|
|
89
|
+
help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.",
|
|
90
|
+
verbose_name="active",
|
|
91
|
+
),
|
|
92
|
+
),
|
|
93
|
+
(
|
|
94
|
+
"date_joined",
|
|
95
|
+
models.DateTimeField(
|
|
96
|
+
default=django.utils.timezone.now, verbose_name="date joined"
|
|
97
|
+
),
|
|
98
|
+
),
|
|
99
|
+
(
|
|
100
|
+
"groups",
|
|
101
|
+
models.ManyToManyField(
|
|
102
|
+
blank=True,
|
|
103
|
+
help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.",
|
|
104
|
+
related_name="user_set",
|
|
105
|
+
related_query_name="user",
|
|
106
|
+
to="auth.group",
|
|
107
|
+
verbose_name="groups",
|
|
108
|
+
),
|
|
109
|
+
),
|
|
110
|
+
(
|
|
111
|
+
"user_permissions",
|
|
112
|
+
models.ManyToManyField(
|
|
113
|
+
blank=True,
|
|
114
|
+
help_text="Specific permissions for this user.",
|
|
115
|
+
related_name="user_set",
|
|
116
|
+
related_query_name="user",
|
|
117
|
+
to="auth.permission",
|
|
118
|
+
verbose_name="user permissions",
|
|
119
|
+
),
|
|
120
|
+
),
|
|
121
|
+
],
|
|
122
|
+
options={
|
|
123
|
+
"verbose_name": "user",
|
|
124
|
+
"verbose_name_plural": "users",
|
|
125
|
+
},
|
|
126
|
+
managers=[
|
|
127
|
+
("objects", django.contrib.auth.models.UserManager()),
|
|
128
|
+
],
|
|
129
|
+
),
|
|
130
|
+
]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Generated by Django 6.0.3 on 2026-03-16 00:12
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
dependencies = [
|
|
8
|
+
("accounts", "0001_initial"),
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
operations = [
|
|
12
|
+
migrations.CreateModel(
|
|
13
|
+
name="DeleteAccount",
|
|
14
|
+
fields=[
|
|
15
|
+
(
|
|
16
|
+
"id",
|
|
17
|
+
models.BigAutoField(
|
|
18
|
+
auto_created=True,
|
|
19
|
+
primary_key=True,
|
|
20
|
+
serialize=False,
|
|
21
|
+
verbose_name="ID",
|
|
22
|
+
),
|
|
23
|
+
),
|
|
24
|
+
(
|
|
25
|
+
"reason",
|
|
26
|
+
models.CharField(
|
|
27
|
+
choices=[
|
|
28
|
+
("no_inter", "No interested"),
|
|
29
|
+
("no_use", "Interested but not using it"),
|
|
30
|
+
("no_reason", "No reasons"),
|
|
31
|
+
("privacy", "Worried for my privacy"),
|
|
32
|
+
("no_fit", "Theory does not fit me"),
|
|
33
|
+
],
|
|
34
|
+
default="",
|
|
35
|
+
max_length=20,
|
|
36
|
+
),
|
|
37
|
+
),
|
|
38
|
+
("confirm", models.BooleanField()),
|
|
39
|
+
],
|
|
40
|
+
),
|
|
41
|
+
]
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Generated by Django 6.0.3 on 2026-03-18 00:09
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
dependencies = [
|
|
8
|
+
("accounts", "0002_deleteaccount"),
|
|
9
|
+
]
|
|
10
|
+
|
|
11
|
+
operations = [
|
|
12
|
+
migrations.AlterField(
|
|
13
|
+
model_name="deleteaccount",
|
|
14
|
+
name="reason",
|
|
15
|
+
field=models.CharField(
|
|
16
|
+
choices=[
|
|
17
|
+
("no_inter", "No interested"),
|
|
18
|
+
("no_use", "Interested but not using it"),
|
|
19
|
+
("no_reason", "No reasons"),
|
|
20
|
+
("privacy", "Worried for my privacy"),
|
|
21
|
+
("no_fit", "Style does not fit me"),
|
|
22
|
+
],
|
|
23
|
+
default="",
|
|
24
|
+
max_length=20,
|
|
25
|
+
),
|
|
26
|
+
),
|
|
27
|
+
]
|
|
File without changes
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from django.contrib.auth.models import AbstractUser
|
|
2
|
+
from django.db import models
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# Create your models here.
|
|
6
|
+
|
|
7
|
+
class CustomUser(AbstractUser):
|
|
8
|
+
pass
|
|
9
|
+
|
|
10
|
+
class Meta:
|
|
11
|
+
verbose_name = 'user'
|
|
12
|
+
verbose_name_plural = 'users'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
REASONS = [
|
|
16
|
+
("no_inter", "No interested"),
|
|
17
|
+
("no_use", "Interested but not using it"),
|
|
18
|
+
("no_reason", "No reasons"),
|
|
19
|
+
("privacy", "Worried for my privacy"),
|
|
20
|
+
("no_fit", "Style does not fit me"),
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class DeleteAccount(models.Model):
|
|
25
|
+
"""leave trace of deleted accounts"""
|
|
26
|
+
reason = models.CharField(max_length=20, choices=REASONS, default='')
|
|
27
|
+
confirm = models.BooleanField()
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""urls for the account app"""
|
|
2
|
+
from django.urls import path, include
|
|
3
|
+
from . import views
|
|
4
|
+
|
|
5
|
+
app_name = 'accounts'
|
|
6
|
+
|
|
7
|
+
urlpatterns = [
|
|
8
|
+
# include default authorisation urls
|
|
9
|
+
# path('', include('django.contrib.auth.urls')),
|
|
10
|
+
path("profile/", views.profile_view, name='account_profile'), # using allauth system, to integrate a account centre
|
|
11
|
+
path("delete_account/", views.delete_account_view, name='delete_account'),
|
|
12
|
+
]
|