From 2d31847974ca7ecb88d8cf6509229f2f94c1d0c2 Mon Sep 17 00:00:00 2001 From: pacnpal <183241239+pacnpal@users.noreply.github.com> Date: Tue, 29 Oct 2024 01:09:14 -0400 Subject: [PATCH] yay --- .DS_Store | Bin 10244 -> 10244 bytes .gitignore | 2 +- accounts/__pycache__/__init__.cpython-311.pyc | Bin 177 -> 180 bytes accounts/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 168 bytes accounts/__pycache__/adapters.cpython-311.pyc | Bin 3914 -> 3917 bytes accounts/__pycache__/adapters.cpython-312.pyc | Bin 0 -> 3556 bytes accounts/__pycache__/admin.cpython-311.pyc | Bin 9431 -> 9434 bytes accounts/__pycache__/admin.cpython-312.pyc | Bin 0 -> 8683 bytes accounts/__pycache__/apps.cpython-311.pyc | Bin 740 -> 743 bytes accounts/__pycache__/apps.cpython-312.pyc | Bin 0 -> 633 bytes accounts/__pycache__/models.cpython-311.pyc | Bin 12111 -> 12114 bytes accounts/__pycache__/models.cpython-312.pyc | Bin 0 -> 11360 bytes accounts/__pycache__/signals.cpython-311.pyc | Bin 8825 -> 8828 bytes accounts/__pycache__/signals.cpython-312.pyc | Bin 0 -> 8378 bytes accounts/__pycache__/urls.cpython-311.pyc | Bin 2016 -> 2019 bytes accounts/__pycache__/urls.cpython-312.pyc | Bin 0 -> 1859 bytes accounts/__pycache__/views.cpython-311.pyc | Bin 11688 -> 11691 bytes accounts/__pycache__/views.cpython-312.pyc | Bin 0 -> 10705 bytes .../__pycache__/reset_db.cpython-311.pyc | Bin 0 -> 5053 bytes accounts/management/commands/reset_db.py | 85 + accounts/migrations/0001_initial.py | 382 ++- .../__pycache__/0001_initial.cpython-311.pyc | Bin 9365 -> 9359 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 9569 bytes .../0002_update_user_fields.cpython-311.pyc | Bin 1142 -> 0 bytes .../0003_add_password_reset.cpython-311.pyc | Bin 1825 -> 0 bytes ..._token_e8e509_idx_and_more.cpython-311.pyc | Bin 1693 -> 0 bytes .../0005_add_readonly_ids.cpython-311.pyc | Bin 5043 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 188 -> 191 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 179 bytes assets/css/src/input.css | 120 + .../__pycache__/__init__.cpython-311.pyc | Bin 178 -> 181 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 169 bytes companies/__pycache__/admin.cpython-311.pyc | Bin 1224 -> 1227 bytes companies/__pycache__/admin.cpython-312.pyc | Bin 0 -> 1078 bytes companies/__pycache__/apps.cpython-311.pyc | Bin 779 -> 782 bytes companies/__pycache__/apps.cpython-312.pyc | Bin 0 -> 672 bytes companies/__pycache__/models.cpython-311.pyc | Bin 5907 -> 5910 bytes companies/__pycache__/models.cpython-312.pyc | Bin 0 -> 5418 bytes companies/__pycache__/signals.cpython-311.pyc | Bin 3266 -> 3269 bytes companies/__pycache__/signals.cpython-312.pyc | Bin 0 -> 3107 bytes companies/__pycache__/urls.cpython-311.pyc | Bin 1000 -> 1003 bytes companies/__pycache__/urls.cpython-312.pyc | Bin 0 -> 919 bytes companies/__pycache__/views.cpython-311.pyc | Bin 6424 -> 6427 bytes companies/__pycache__/views.cpython-312.pyc | Bin 0 -> 5787 bytes companies/admin.py | 4 +- ...rides_and_more.py => 0002_stats_fields.py} | 10 +- .../migrations/0003_remove_total_parks.py | 13 + companies/migrations/0004_add_total_parks.py | 14 + .../__pycache__/0001_initial.cpython-311.pyc | Bin 5582 -> 5585 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 5694 bytes ...mpany_total_rides_and_more.cpython-311.pyc | Bin 1770 -> 1773 bytes .../0002_stats_fields.cpython-311.pyc | Bin 0 -> 1737 bytes .../0002_stats_fields.cpython-312.pyc | Bin 0 -> 1651 bytes .../0003_remove_total_parks.cpython-311.pyc | Bin 0 -> 717 bytes .../0003_remove_total_parks.cpython-312.pyc | Bin 0 -> 650 bytes .../0004_add_total_parks.cpython-311.pyc | Bin 0 -> 841 bytes .../0004_add_total_parks.cpython-312.pyc | Bin 0 -> 769 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 189 -> 192 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 180 bytes core/__pycache__/__init__.cpython-311.pyc | Bin 173 -> 176 bytes core/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 164 bytes core/__pycache__/admin.cpython-311.pyc | Bin 2217 -> 2220 bytes core/__pycache__/admin.cpython-312.pyc | Bin 0 -> 2022 bytes core/__pycache__/apps.cpython-311.pyc | Bin 540 -> 543 bytes core/__pycache__/apps.cpython-312.pyc | Bin 0 -> 466 bytes core/__pycache__/models.cpython-311.pyc | Bin 5442 -> 5445 bytes core/__pycache__/models.cpython-312.pyc | Bin 0 -> 5110 bytes core/__pycache__/views.cpython-311.pyc | Bin 2509 -> 2512 bytes core/__pycache__/views.cpython-312.pyc | Bin 0 -> 2284 bytes .../__pycache__/0001_initial.cpython-311.pyc | Bin 1827 -> 1830 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 1796 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 184 -> 187 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 175 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 182 -> 185 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 173 bytes .../__pycache__/admin.cpython-311.pyc | Bin 2344 -> 2347 bytes .../__pycache__/admin.cpython-312.pyc | Bin 0 -> 2070 bytes .../__pycache__/apps.cpython-311.pyc | Bin 566 -> 569 bytes .../__pycache__/apps.cpython-312.pyc | Bin 0 -> 492 bytes .../__pycache__/models.cpython-311.pyc | Bin 1757 -> 1760 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 1659 bytes .../__pycache__/services.cpython-311.pyc | Bin 4372 -> 4375 bytes .../__pycache__/services.cpython-312.pyc | Bin 0 -> 4000 bytes .../__pycache__/0001_initial.cpython-311.pyc | Bin 1879 -> 1882 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 1848 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 193 -> 196 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 184 bytes media/__pycache__/__init__.cpython-311.pyc | Bin 174 -> 177 bytes media/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 165 bytes media/__pycache__/admin.cpython-311.pyc | Bin 1303 -> 1306 bytes media/__pycache__/admin.cpython-312.pyc | Bin 0 -> 1213 bytes media/__pycache__/apps.cpython-311.pyc | Bin 573 -> 576 bytes media/__pycache__/apps.cpython-312.pyc | Bin 0 -> 499 bytes media/__pycache__/models.cpython-311.pyc | Bin 3520 -> 3523 bytes media/__pycache__/models.cpython-312.pyc | Bin 0 -> 3354 bytes .../__pycache__/0001_initial.cpython-311.pyc | Bin 2116 -> 2119 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 2111 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 185 -> 188 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 176 bytes parks/__pycache__/__init__.cpython-311.pyc | Bin 174 -> 177 bytes parks/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 165 bytes parks/__pycache__/admin.cpython-311.pyc | Bin 1327 -> 1330 bytes parks/__pycache__/admin.cpython-312.pyc | Bin 0 -> 1169 bytes parks/__pycache__/apps.cpython-311.pyc | Bin 725 -> 728 bytes parks/__pycache__/apps.cpython-312.pyc | Bin 0 -> 618 bytes parks/__pycache__/models.cpython-311.pyc | Bin 6448 -> 7052 bytes parks/__pycache__/models.cpython-312.pyc | Bin 0 -> 6633 bytes parks/__pycache__/signals.cpython-311.pyc | Bin 173 -> 176 bytes parks/__pycache__/signals.cpython-312.pyc | Bin 0 -> 164 bytes parks/__pycache__/urls.cpython-311.pyc | Bin 829 -> 832 bytes parks/__pycache__/urls.cpython-312.pyc | Bin 0 -> 747 bytes parks/__pycache__/views.cpython-311.pyc | Bin 5930 -> 6756 bytes parks/__pycache__/views.cpython-312.pyc | Bin 0 -> 6535 bytes parks/admin.py | 4 +- .../__pycache__/seed_data.cpython-311.pyc | Bin 0 -> 22120 bytes parks/management/commands/seed_data.py | 126 +- parks/migrations/0002_add_country_field.py | 25 + .../__pycache__/0001_initial.cpython-311.pyc | Bin 7383 -> 7386 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 7669 bytes .../0002_add_country_field.cpython-311.pyc | Bin 0 -> 1062 bytes .../0002_add_country_field.cpython-312.pyc | Bin 0 -> 988 bytes ...002_create_missing_columns.cpython-311.pyc | Bin 0 -> 1021 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 185 -> 188 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 176 bytes parks/models.py | 10 + parks/views.py | 45 +- requirements.txt | 3 + reviews/__pycache__/__init__.cpython-311.pyc | Bin 176 -> 179 bytes reviews/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 167 bytes reviews/__pycache__/admin.cpython-311.pyc | Bin 5279 -> 5282 bytes reviews/__pycache__/admin.cpython-312.pyc | Bin 0 -> 4859 bytes reviews/__pycache__/apps.cpython-311.pyc | Bin 735 -> 738 bytes reviews/__pycache__/apps.cpython-312.pyc | Bin 0 -> 628 bytes reviews/__pycache__/models.cpython-311.pyc | Bin 6305 -> 6308 bytes reviews/__pycache__/models.cpython-312.pyc | Bin 0 -> 5997 bytes reviews/__pycache__/signals.cpython-311.pyc | Bin 175 -> 178 bytes reviews/__pycache__/signals.cpython-312.pyc | Bin 0 -> 166 bytes reviews/__pycache__/urls.cpython-311.pyc | Bin 327 -> 330 bytes reviews/__pycache__/urls.cpython-312.pyc | Bin 0 -> 294 bytes reviews/__pycache__/views.cpython-311.pyc | Bin 234 -> 237 bytes reviews/__pycache__/views.cpython-312.pyc | Bin 0 -> 214 bytes .../__pycache__/0001_initial.cpython-311.pyc | Bin 5609 -> 5612 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 6069 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 187 -> 190 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 178 bytes rides/__pycache__/__init__.cpython-311.pyc | Bin 174 -> 177 bytes rides/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 165 bytes rides/__pycache__/admin.cpython-311.pyc | Bin 5925 -> 6099 bytes rides/__pycache__/admin.cpython-312.pyc | Bin 0 -> 5634 bytes rides/__pycache__/apps.cpython-311.pyc | Bin 725 -> 728 bytes rides/__pycache__/apps.cpython-312.pyc | Bin 0 -> 618 bytes rides/__pycache__/models.cpython-311.pyc | Bin 7090 -> 7093 bytes rides/__pycache__/models.cpython-312.pyc | Bin 0 -> 6721 bytes rides/__pycache__/signals.cpython-311.pyc | Bin 173 -> 176 bytes rides/__pycache__/signals.cpython-312.pyc | Bin 0 -> 164 bytes rides/__pycache__/urls.cpython-311.pyc | Bin 653 -> 656 bytes rides/__pycache__/urls.cpython-312.pyc | Bin 0 -> 596 bytes rides/__pycache__/views.cpython-311.pyc | Bin 4513 -> 7563 bytes rides/__pycache__/views.cpython-312.pyc | Bin 0 -> 5863 bytes rides/admin.py | 42 +- rides/migrations/0001_initial.py | 464 ++- .../0002_alter_ride_manufacturer.py | 25 + .../__pycache__/0001_initial.cpython-311.pyc | Bin 9980 -> 10021 bytes .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 10385 bytes .../0002_add_readonly_ids.cpython-311.pyc | Bin 2915 -> 0 bytes ...02_alter_ride_manufacturer.cpython-312.pyc | Bin 0 -> 1046 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 185 -> 188 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 176 bytes rides/models.py | 10 +- rides/views.py | 60 +- static/css/styles.css | 199 -- static/css/tailwind.css | 3046 +++++++++++++++++ staticfiles/css/styles.css | 199 -- staticfiles/css/tailwind.css | 1 + tailwind.config.js | 107 + templates/account/login.html | 195 +- templates/account/signup.html | 260 +- templates/base/base.html | 250 +- templates/parks/park_detail.html | 131 +- templates/parks/park_list.html | 117 +- templates/parks/partials/park_list.html | 48 + templates/rides/partials/ride_list.html | 60 + templates/rides/ride_list.html | 133 +- .../__pycache__/__init__.cpython-311.pyc | Bin 179 -> 182 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 170 bytes .../__pycache__/settings.cpython-311.pyc | Bin 5079 -> 5082 bytes .../__pycache__/settings.cpython-312.pyc | Bin 0 -> 5330 bytes thrillwiki/__pycache__/urls.cpython-311.pyc | Bin 2812 -> 2815 bytes thrillwiki/__pycache__/urls.cpython-312.pyc | Bin 0 -> 2650 bytes thrillwiki/__pycache__/views.cpython-311.pyc | Bin 4854 -> 4857 bytes thrillwiki/__pycache__/views.cpython-312.pyc | Bin 0 -> 4116 bytes thrillwiki/__pycache__/wsgi.cpython-311.pyc | Bin 707 -> 710 bytes thrillwiki/__pycache__/wsgi.cpython-312.pyc | Bin 0 -> 664 bytes thrillwiki/settings.py | 16 +- thrillwiki/urls.py | 7 +- 195 files changed, 5000 insertions(+), 1213 deletions(-) create mode 100644 accounts/__pycache__/__init__.cpython-312.pyc create mode 100644 accounts/__pycache__/adapters.cpython-312.pyc create mode 100644 accounts/__pycache__/admin.cpython-312.pyc create mode 100644 accounts/__pycache__/apps.cpython-312.pyc create mode 100644 accounts/__pycache__/models.cpython-312.pyc create mode 100644 accounts/__pycache__/signals.cpython-312.pyc create mode 100644 accounts/__pycache__/urls.cpython-312.pyc create mode 100644 accounts/__pycache__/views.cpython-312.pyc create mode 100644 accounts/management/commands/__pycache__/reset_db.cpython-311.pyc create mode 100644 accounts/management/commands/reset_db.py create mode 100644 accounts/migrations/__pycache__/0001_initial.cpython-312.pyc delete mode 100644 accounts/migrations/__pycache__/0002_update_user_fields.cpython-311.pyc delete mode 100644 accounts/migrations/__pycache__/0003_add_password_reset.cpython-311.pyc delete mode 100644 accounts/migrations/__pycache__/0004_remove_passwordreset_accounts_pas_token_e8e509_idx_and_more.cpython-311.pyc delete mode 100644 accounts/migrations/__pycache__/0005_add_readonly_ids.cpython-311.pyc create mode 100644 accounts/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 assets/css/src/input.css create mode 100644 companies/__pycache__/__init__.cpython-312.pyc create mode 100644 companies/__pycache__/admin.cpython-312.pyc create mode 100644 companies/__pycache__/apps.cpython-312.pyc create mode 100644 companies/__pycache__/models.cpython-312.pyc create mode 100644 companies/__pycache__/signals.cpython-312.pyc create mode 100644 companies/__pycache__/urls.cpython-312.pyc create mode 100644 companies/__pycache__/views.cpython-312.pyc rename companies/migrations/{0002_company_total_parks_company_total_rides_and_more.py => 0002_stats_fields.py} (97%) create mode 100644 companies/migrations/0003_remove_total_parks.py create mode 100644 companies/migrations/0004_add_total_parks.py create mode 100644 companies/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 companies/migrations/__pycache__/0002_stats_fields.cpython-311.pyc create mode 100644 companies/migrations/__pycache__/0002_stats_fields.cpython-312.pyc create mode 100644 companies/migrations/__pycache__/0003_remove_total_parks.cpython-311.pyc create mode 100644 companies/migrations/__pycache__/0003_remove_total_parks.cpython-312.pyc create mode 100644 companies/migrations/__pycache__/0004_add_total_parks.cpython-311.pyc create mode 100644 companies/migrations/__pycache__/0004_add_total_parks.cpython-312.pyc create mode 100644 companies/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 core/__pycache__/__init__.cpython-312.pyc create mode 100644 core/__pycache__/admin.cpython-312.pyc create mode 100644 core/__pycache__/apps.cpython-312.pyc create mode 100644 core/__pycache__/models.cpython-312.pyc create mode 100644 core/__pycache__/views.cpython-312.pyc create mode 100644 core/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 core/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 email_service/__pycache__/__init__.cpython-312.pyc create mode 100644 email_service/__pycache__/admin.cpython-312.pyc create mode 100644 email_service/__pycache__/apps.cpython-312.pyc create mode 100644 email_service/__pycache__/models.cpython-312.pyc create mode 100644 email_service/__pycache__/services.cpython-312.pyc create mode 100644 email_service/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 email_service/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 media/__pycache__/__init__.cpython-312.pyc create mode 100644 media/__pycache__/admin.cpython-312.pyc create mode 100644 media/__pycache__/apps.cpython-312.pyc create mode 100644 media/__pycache__/models.cpython-312.pyc create mode 100644 media/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 media/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 parks/__pycache__/__init__.cpython-312.pyc create mode 100644 parks/__pycache__/admin.cpython-312.pyc create mode 100644 parks/__pycache__/apps.cpython-312.pyc create mode 100644 parks/__pycache__/models.cpython-312.pyc create mode 100644 parks/__pycache__/signals.cpython-312.pyc create mode 100644 parks/__pycache__/urls.cpython-312.pyc create mode 100644 parks/__pycache__/views.cpython-312.pyc create mode 100644 parks/management/commands/__pycache__/seed_data.cpython-311.pyc create mode 100644 parks/migrations/0002_add_country_field.py create mode 100644 parks/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 parks/migrations/__pycache__/0002_add_country_field.cpython-311.pyc create mode 100644 parks/migrations/__pycache__/0002_add_country_field.cpython-312.pyc create mode 100644 parks/migrations/__pycache__/0002_create_missing_columns.cpython-311.pyc create mode 100644 parks/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 reviews/__pycache__/__init__.cpython-312.pyc create mode 100644 reviews/__pycache__/admin.cpython-312.pyc create mode 100644 reviews/__pycache__/apps.cpython-312.pyc create mode 100644 reviews/__pycache__/models.cpython-312.pyc create mode 100644 reviews/__pycache__/signals.cpython-312.pyc create mode 100644 reviews/__pycache__/urls.cpython-312.pyc create mode 100644 reviews/__pycache__/views.cpython-312.pyc create mode 100644 reviews/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 reviews/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 rides/__pycache__/__init__.cpython-312.pyc create mode 100644 rides/__pycache__/admin.cpython-312.pyc create mode 100644 rides/__pycache__/apps.cpython-312.pyc create mode 100644 rides/__pycache__/models.cpython-312.pyc create mode 100644 rides/__pycache__/signals.cpython-312.pyc create mode 100644 rides/__pycache__/urls.cpython-312.pyc create mode 100644 rides/__pycache__/views.cpython-312.pyc create mode 100644 rides/migrations/0002_alter_ride_manufacturer.py create mode 100644 rides/migrations/__pycache__/0001_initial.cpython-312.pyc delete mode 100644 rides/migrations/__pycache__/0002_add_readonly_ids.cpython-311.pyc create mode 100644 rides/migrations/__pycache__/0002_alter_ride_manufacturer.cpython-312.pyc create mode 100644 rides/migrations/__pycache__/__init__.cpython-312.pyc delete mode 100644 static/css/styles.css create mode 100644 static/css/tailwind.css delete mode 100644 staticfiles/css/styles.css create mode 100644 staticfiles/css/tailwind.css create mode 100644 tailwind.config.js create mode 100644 templates/parks/partials/park_list.html create mode 100644 templates/rides/partials/ride_list.html create mode 100644 thrillwiki/__pycache__/__init__.cpython-312.pyc create mode 100644 thrillwiki/__pycache__/settings.cpython-312.pyc create mode 100644 thrillwiki/__pycache__/urls.cpython-312.pyc create mode 100644 thrillwiki/__pycache__/views.cpython-312.pyc create mode 100644 thrillwiki/__pycache__/wsgi.cpython-312.pyc diff --git a/.DS_Store b/.DS_Store index da9332783e2ce7bd368f3255f580d643793d4d52..851711579418b047b39b7e8a35930abe4802501c 100644 GIT binary patch literal 10244 zcmeI2O=uHA6vy9glQy*$tfIAAbcI5DQLIqUYe_*ZqEb9~vL8v?(4+}z+TPkA=tc13 z>_PD=h)}_UMMSVyJqRLF4_Z9eqZjc%Guz!a`;mGQAv0n3rTgCO`|W?;&SsJlku|)S z8zgdwD1%MdeS5KsX~HkINVB~o=V2}Mr{c`u*i^YxiA0(MMggOMQNSo*6fg?>FACt9 zEn22SS+h3^7zK<1z5-%?aIgvMdbX~toI0?RO90pu4$Fr3`@|bq$Fr_y>&n7|W~r{Q zs;lKKF)Y;`#~m-u^=w^P)txMF@nLzHEpLTl$?Q14Bg4sZl{I^#fKec-fLOby=oHOR zfogpHZXZ0m&V8kFHal4?PvTgndVRaQcXs2P?$0&!S7w9n2JG%Sx>6hRF3|!_QJHd- z=h<-sk47UnL+-_@dqOdU&QmG}B*{^n$D6YYO+3i|C zs+eNp0;)!F8dvHuQc^3p7VyePnCS46u%Gj+4SjriLGftk;0h(hXdG%XZkO7Wr~;mO z)Js03kagx2Xkwx`Q{Nq5qu9tmrN)sOpZ!7Tl#+baa3!s5avx`Tz2>v{eYrMqel4#x zuJYzkGgBcosQ;?W>-l)zwwElg?+>m#&adSqSLE%)2$V1u1uD`FSszv0PX&;K?xij9 zaBL9G*=}d{@6>R^9s%v&_0afj7eJH-eI9pyfhM#&jV|@*Ue32V;PbKmeAMD2wEXHr zL|RsImF7YtXZ^S<^NTu{UM>F$%g-VLJyv5QwEQhs#Pzq~?0Gq2d0GxJ(A#V@f^$6D z@Hs-~;aVg|X*{;T!FW_L7MO`cEY@;C_i~P{^nsmvVf{Hne1x9=xyav&8m>X}ny6u| zB3d@Zh-rS#@UYKk2*m`Wk`$wHq~xc^4$eW-peaT)>FNChqJ&7!Hb33fKceQ~#OQ!> z_h^mx*tXEE9g2yWpaM>zUS#~<^~FbV&U^Zqg zyTxjpYL$}0T#(0;b&0ce3_W`fHs8m2et-S)^P;LP<_{E#^Ygr&*X|2_Ofw1?1&jhl zf#y=6MP05VzW*Od{{6qXL@`%u6lgL9tWwyrFWp#Ae715{eG{@?juEjfB-{ZCD_{{I63&h~r& delta 753 zcmdUr-z!657{{OYJ!hsdwmCaLcKn*PP)yvB3yV?|lTvcA&9*k#?AX@IjT`#|)ZSo#QwS@X#jWn9a<=MZBanTd;+!f5mtRK@w6BiAR4~0F$@)VwM%QQH?jHL@zl)T}Rgi`ZV`rE*q+@g5YdjGnl+#d^Iw^0)M#+Hzsn#%h zWj|MOS?c^zO?WQVkw?6i+;sN=8)X?yvdOU8B{HKTyUS`=Zl~;qLyBzCJp}UV zgj%3<79O(f<4cgO^i@qg33#N)hT`ohQIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJz+Ois=(%_}L^kB`sH%PfhH*DI*J g#bJ}1pHiBWYFESxG?x*Gi$RQ!%#4hTMa)1J0F@*xRR910 literal 0 HcmV?d00001 diff --git a/accounts/__pycache__/adapters.cpython-311.pyc b/accounts/__pycache__/adapters.cpython-311.pyc index 0ec59dd309f2f2409f5278688757ef39c87e3d59..697fea07905316ab72645771fbc98d30be4e9f89 100644 GIT binary patch delta 38 scmX>lcUF#TIWI340}%Z9zmZFeiPv2}v^ce>SidAOC%n+a delta 35 pcmX>rcS??HIWI340}!OW-^iuK#O0!&k)NBYUyzu**^!Bd7XYox34H(n diff --git a/accounts/__pycache__/adapters.cpython-312.pyc b/accounts/__pycache__/adapters.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e52b18ef54d33994085f5264164150bdcbe475f0 GIT binary patch literal 3556 zcma)8Pi))P8GjT>OSWXovE`_U8;!->Nm?5zMccqZv)YE^WC09$v*LQtg9NNi2lOJ<7-SGL&|$mmw$vUL?6Q5|BlX9zob|!} z^!WIF-+TQ1zCZ7)(a{kC$Zetx?Gr7m^UrvHxfErq5m+78 z#qMfscO)DA2dZQ_FJkMCV^lV6m`~l*Hx$=&7F5-8E6#$ZR2`kdi|OD+(NYb?Jo9>N zQ+H(7)~Q^!G~EP)aa>VdO7)5(+lHg7!9m#%7d#xNVDgygq{L~Y6wmuLTBrj+k!1PW+appi*0*$LOQ(`! zNs4J&JCbc|RwTD-=ejE1)WYK8%39&Bys*5yvMv|z+%ByBqJU}+& z3AS!-cwwr4;_9|z;{hb;KezL10FRw_6w{)4XNwx9xnpb_eN$Pxr&KmAxnjvwS5zmj z_$=6Y#pl7!Rd>A!!w2IYX48`Vl-lCOuT^+_M1TJ-&zVJ%L%B5}!hN*F*P)PA#&BPsty7 z;2~67>VmvzRcwd4s$)yQhoqMk!<1C3vSHA&;uuy%$^b0JeKyZZE;V}u)h^uEsj;zp zg;~vQ>$^Y73N#E`Ft`4=anymMXF;ayiNIIC zUtfg`;;=5(1<;NJDt$j1_XlBbsLoT!=Dlzwr15)U*gM*%5=`sibM}i3&>iYzFh{U5 z)bicfDe4u?51W2U{21y*NmlR#EK^=A2qYaz^J4vlicZ1CwRDhtdB(FZPqQ85p7j3| z3)!$Ahp&NOZ`6+)MboHm+w>Bwu?@Xp8@@oskoQEUla2HulU_vIA%9EyIvP#m3a>g3 zyfNRUqnE3u0>O%OV6fuw1NI{G-46`gsP@*tU>&TS1g|y)!2%y&zaD!u_M4wK)3fdLtycP0JH6aWFaJsXb7YmpdLcXHMP#|6lyzD5 zMr7FD%8=#5`|J~6^o8zmn^oui1t3fuP!R$w%aS3eB?+=&626@1hhM>%e-X$OFK@Id& z(e0-34D8dN#=Sy&rj>orO@p(oj5X{|kPhl>)5Vp=I}6K$`y0h9%<{cR^rANNXj+>_ z#YRv%QO1z3T{-_V2Q;J~g8j=4>BBFDgZNT2vh<1)_gk?0JqPH(uRk7%b@D5~4og|R zd;i(P^7I{xnZ|8rFt5(B7*OQuf{bjjQ5RSM>-#BlSoLSDWopQdI8yXjk+dbC=};P~ui4KcpoV(>?IB zA&QL|Dl^zIvFOd{@YkEU-;GV7IzX0 zi-~_vh+^V70pS-!R4Zghy{Lan&0#n3uU1L8G%K#Nl?y^K7hG2^VSFXWgSc) zZ?fmpp~lBK^hOa%FZI$Jb{ostTNZUx*Rfe+^#r_H`_-L&RT?b)Lyx16$PK?$d`K7I z5h1V~w6oSe*aQ(U6?#*Kdw I_+_sD2dSWRi2wiq literal 0 HcmV?d00001 diff --git a/accounts/__pycache__/admin.cpython-311.pyc b/accounts/__pycache__/admin.cpython-311.pyc index de6c0215e2dc0f86cdd1619d65b371f48bea5db8..1f5f85dcd8e24faf1a642fbcf8635cd623502438 100644 GIT binary patch delta 38 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 VpE33sZhfDGZ1(2K55Qv^^#>WHpg#Zr literal 0 HcmV?d00001 diff --git a/accounts/__pycache__/models.cpython-311.pyc b/accounts/__pycache__/models.cpython-311.pyc index 511086e23c3200983f4c43be1a20e59f6a14c9f3..a5b213a9887aa581cc49717668303c78cbcb6480 100644 GIT binary patch delta 38 scmX>fcPWl*IWI340}%Z9zmcn!nb%c6v^ce>SidAOC%n+a delta 35 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 t)97RmEsd;SidAOC%((!DFDfI3zGl< diff --git a/accounts/__pycache__/signals.cpython-312.pyc b/accounts/__pycache__/signals.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4fd878d08d22255e373872562e6d6899ca19e55 GIT binary patch literal 8378 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 VM4pu!8#Wa37}-JgqF;gn{{_PkR>J@Q literal 0 HcmV?d00001 diff --git a/accounts/__pycache__/urls.cpython-311.pyc b/accounts/__pycache__/urls.cpython-311.pyc index 63058ecf443bbfc6e8fb531fd055c3b91c554f9e..81f0f4de1ab26b163c085f81972944820e856376 100644 GIT binary patch delta 38 scmaFB|Cpa^IWI340}%Z9zme+*E3dPDXmM&$v3^NnPJYqm8>}2m0P(jBt^fc4 delta 35 pcmaFN|A3!sIWI340}uqg-^g`@mCHdtBR@A)zaTMr^KDiRCIGuO3Z4J} diff --git a/accounts/__pycache__/urls.cpython-312.pyc b/accounts/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..af5a136910e0a87dd64c68b9a7c58f740fdfd68e GIT binary patch literal 1859 zcmb7^yKmc86vj!3vh|2xqD0HG)I@>`TLoe!O%MczU?i3h!*Bb zDo(-m*FV==9fqR*bQhy*dMG~p7NV$MD3KCrnd;JYns#+a4t2wI26Py71aufQQ=bS? zh!!J=>5S?}Jh*q}E-Z#poOm^PLi-Cb`YLu3_O-`}11EX4=D#>6BVHoFxCV^Wn2f0a zV;UITn2ebKV-^^hF&T3KMiLm=F&S)tkpf0;Oh!7u;DGVbn2h-VBZI=78&?_PLLe^- zdBv-F|9b`&&l#u=qY=R}2OQ|&8;ZcfN*OHz1~ z9XY&bth9};3`J80>h@&8Kn+FcA}8VnU8uV>Ct<1f4c>7nAk5jGpzHgpCN`RFL1`i0 znF%;%I$-dksz6>UU^iUbJg?S}j^IJlXK9{co|pLvK8(Gb<+JAfj7nb;ckbO?<12=` zhm)qoWGI;eL)5?qdiUCm1Nk$>`*l{BuW};8fFaM*^rc$&O6bO z{JhLM39$p+QCIq!tZVM)@32D$o^5E-&Wg}C+8X>pQBK^I4R3aiJGfrYA4TjlcW__9 zOr1$V_Y#~qcrXUfOnxyOMb(>x=W&<48noE+=SKchx67WDzGR(cW-i%Pzf)epLLlO| z#|tI8Lz3lvX-~Q! z8-CXsiVAe0Y4B%<*zN2}@1+y1bXBo0qcv>_nC{uv@4@f8Fiq2^RPL0zb4syq66v3! z@1s;Cc91z-CF~Mrmk7&ambccPSu8(bpIhJV*i7>eCVH@NxJ6QBoGO#lZJfG2NZon8 zY%^5|S+T{VI?1o%{3^+>#qB}yvGu%TGkabz zd$dJz_i^q%$vwci2ZP+YwfT+B)V<*K<18sW#D#~Xu!#$sgTl7;v}H4GFIYU@BBc#n z+90JTxb$RD`qKKkXEQ%Q@F0H_Cz%S)R7j?VGqpkHk@a}jW?Jtj+`VQGUy$@ooW5z@ pePlBmZo%RqBHS|OmI-$YbGHWEr?0a%Q+u~KJrnvlp?wVf`xm`T=js3e literal 0 HcmV?d00001 diff --git a/accounts/__pycache__/views.cpython-311.pyc b/accounts/__pycache__/views.cpython-311.pyc index 24856166a5677cc4ada6c164c8f20dfa3a842cb1..c7545def34a8a0c8e8a35fdc9ef5433da5263e1a 100644 GIT binary patch delta 38 scmZ1xy*ip}IWI340}%Z9zmZFqh1W$tv^ce>SidAOC%cO!sV!+k)NBYUyzu**@Y!t69Bl73RD09 diff --git a/accounts/__pycache__/views.cpython-312.pyc b/accounts/__pycache__/views.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a659fdbc1db2691dc8a8117d5bc40ab346c871c0 GIT binary patch literal 10705 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 literal 0 HcmV?d00001 diff --git a/accounts/management/commands/__pycache__/reset_db.cpython-311.pyc b/accounts/management/commands/__pycache__/reset_db.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d478fae0009984575111c80326bae9747ebac4cf GIT binary patch literal 5053 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 EUs!B&f&c&j literal 0 HcmV?d00001 diff --git a/accounts/management/commands/reset_db.py b/accounts/management/commands/reset_db.py new file mode 100644 index 00000000..b5445a06 --- /dev/null +++ b/accounts/management/commands/reset_db.py @@ -0,0 +1,85 @@ +from django.core.management.base import BaseCommand +from django.db import connection +from django.contrib.auth.hashers import make_password +import uuid + +class Command(BaseCommand): + help = 'Reset database and create admin user' + + def handle(self, *args, **options): + self.stdout.write('Resetting database...') + + # Drop all tables + with connection.cursor() as cursor: + cursor.execute(""" + DO $$ DECLARE + r RECORD; + BEGIN + FOR r IN (SELECT tablename FROM pg_tables WHERE schemaname = current_schema()) LOOP + EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(r.tablename) || ' CASCADE'; + END LOOP; + END $$; + """) + + # Reset sequences + cursor.execute(""" + DO $$ DECLARE + r RECORD; + BEGIN + FOR r IN (SELECT sequencename FROM pg_sequences WHERE schemaname = current_schema()) LOOP + EXECUTE 'ALTER SEQUENCE ' || quote_ident(r.sequencename) || ' RESTART WITH 1'; + END LOOP; + END $$; + """) + + self.stdout.write('All tables dropped and sequences reset.') + + # Run migrations + from django.core.management import call_command + call_command('migrate') + + self.stdout.write('Migrations applied.') + + # Create superuser using raw SQL + try: + with connection.cursor() as cursor: + # Create user + user_id = str(uuid.uuid4())[:10] + cursor.execute(""" + INSERT INTO accounts_user ( + username, password, email, is_superuser, is_staff, + is_active, date_joined, user_id, first_name, + last_name, role, is_banned, ban_reason, + theme_preference + ) VALUES ( + 'admin', %s, 'admin@thrillwiki.com', true, true, + true, NOW(), %s, '', '', 'SUPERUSER', false, '', + 'light' + ) RETURNING id; + """, [make_password('admin'), user_id]) + + user_db_id = cursor.fetchone()[0] + + # Create profile + profile_id = str(uuid.uuid4())[:10] + cursor.execute(""" + INSERT INTO accounts_userprofile ( + profile_id, display_name, pronouns, bio, + twitter, instagram, youtube, discord, + coaster_credits, dark_ride_credits, + flat_ride_credits, water_ride_credits, + user_id, avatar + ) VALUES ( + %s, 'Admin', 'they/them', 'ThrillWiki Administrator', + '', '', '', '', + 0, 0, 0, 0, + %s, '' + ); + """, [profile_id, user_db_id]) + + self.stdout.write('Superuser created.') + except Exception as e: + self.stdout.write(self.style.ERROR(f'Error creating superuser: {str(e)}')) + raise + + self.stdout.write(self.style.SUCCESS('Database reset complete.')) diff --git a/accounts/migrations/0001_initial.py b/accounts/migrations/0001_initial.py index dd670f52..7a48d0eb 100644 --- a/accounts/migrations/0001_initial.py +++ b/accounts/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.1.2 on 2024-10-28 20:17 +# Generated by Django 5.1.2 on 2024-10-28 21:50 import django.contrib.auth.models import django.contrib.auth.validators @@ -13,121 +13,345 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ('contenttypes', '0002_remove_content_type_name'), + ("auth", "0012_alter_user_first_name_max_length"), + ("contenttypes", "0002_remove_content_type_name"), ] operations = [ migrations.CreateModel( - name='User', + name="User", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), - ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('user_id', models.CharField(editable=False, help_text='Unique identifier for this user that remains constant even if the username changes', max_length=10, unique=True)), - ('first_name', models.CharField(default='', max_length=150, verbose_name='first name')), - ('last_name', models.CharField(default='', max_length=150, verbose_name='last name')), - ('role', models.CharField(choices=[('USER', 'User'), ('MODERATOR', 'Moderator'), ('ADMIN', 'Admin'), ('SUPERUSER', 'Superuser')], default='USER', max_length=10)), - ('is_banned', models.BooleanField(default=False)), - ('ban_reason', models.TextField(blank=True)), - ('ban_date', models.DateTimeField(blank=True, null=True)), - ('pending_email', models.EmailField(blank=True, max_length=254, null=True)), - ('theme_preference', models.CharField(choices=[('light', 'Light'), ('dark', 'Dark')], default='light', max_length=5)), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("password", models.CharField(max_length=128, verbose_name="password")), + ( + "last_login", + models.DateTimeField( + blank=True, null=True, verbose_name="last login" + ), + ), + ( + "is_superuser", + models.BooleanField( + default=False, + help_text="Designates that this user has all permissions without explicitly assigning them.", + verbose_name="superuser status", + ), + ), + ( + "username", + models.CharField( + error_messages={ + "unique": "A user with that username already exists." + }, + help_text="Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.", + max_length=150, + unique=True, + validators=[ + django.contrib.auth.validators.UnicodeUsernameValidator() + ], + verbose_name="username", + ), + ), + ( + "email", + models.EmailField( + blank=True, max_length=254, verbose_name="email address" + ), + ), + ( + "is_staff", + models.BooleanField( + default=False, + help_text="Designates whether the user can log into this admin site.", + verbose_name="staff status", + ), + ), + ( + "is_active", + models.BooleanField( + default=True, + help_text="Designates whether this user should be treated as active. Unselect this instead of deleting accounts.", + verbose_name="active", + ), + ), + ( + "date_joined", + models.DateTimeField( + default=django.utils.timezone.now, verbose_name="date joined" + ), + ), + ( + "user_id", + models.CharField( + editable=False, + help_text="Unique identifier for this user that remains constant even if the username changes", + max_length=10, + unique=True, + ), + ), + ( + "first_name", + models.CharField( + default="", max_length=150, verbose_name="first name" + ), + ), + ( + "last_name", + models.CharField( + default="", max_length=150, verbose_name="last name" + ), + ), + ( + "role", + models.CharField( + choices=[ + ("USER", "User"), + ("MODERATOR", "Moderator"), + ("ADMIN", "Admin"), + ("SUPERUSER", "Superuser"), + ], + default="USER", + max_length=10, + ), + ), + ("is_banned", models.BooleanField(default=False)), + ("ban_reason", models.TextField(blank=True)), + ("ban_date", models.DateTimeField(blank=True, null=True)), + ( + "pending_email", + models.EmailField(blank=True, max_length=254, null=True), + ), + ( + "theme_preference", + models.CharField( + choices=[("light", "Light"), ("dark", "Dark")], + default="light", + max_length=5, + ), + ), + ( + "groups", + models.ManyToManyField( + blank=True, + help_text="The groups this user belongs to. A user will get all permissions granted to each of their groups.", + related_name="user_set", + related_query_name="user", + to="auth.group", + verbose_name="groups", + ), + ), + ( + "user_permissions", + models.ManyToManyField( + blank=True, + help_text="Specific permissions for this user.", + related_name="user_set", + related_query_name="user", + to="auth.permission", + verbose_name="user permissions", + ), + ), ], options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, + "verbose_name": "user", + "verbose_name_plural": "users", + "abstract": False, }, managers=[ - ('objects', django.contrib.auth.models.UserManager()), + ("objects", django.contrib.auth.models.UserManager()), ], ), migrations.CreateModel( - name='EmailVerification', + name="EmailVerification", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('token', models.CharField(max_length=64, unique=True)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('last_sent', models.DateTimeField(auto_now_add=True)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("token", models.CharField(max_length=64, unique=True)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("last_sent", models.DateTimeField(auto_now_add=True)), + ( + "user", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), ], options={ - 'verbose_name': 'Email Verification', - 'verbose_name_plural': 'Email Verifications', + "verbose_name": "Email Verification", + "verbose_name_plural": "Email Verifications", }, ), migrations.CreateModel( - name='PasswordReset', + name="PasswordReset", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('token', models.CharField(max_length=64)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('expires_at', models.DateTimeField()), - ('used', models.BooleanField(default=False)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("token", models.CharField(max_length=64)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("expires_at", models.DateTimeField()), + ("used", models.BooleanField(default=False)), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), ], options={ - 'verbose_name': 'Password Reset', - 'verbose_name_plural': 'Password Resets', + "verbose_name": "Password Reset", + "verbose_name_plural": "Password Resets", }, ), migrations.CreateModel( - name='TopList', + name="TopList", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=100)), - ('category', models.CharField(choices=[('RC', 'Roller Coaster'), ('DR', 'Dark Ride'), ('FR', 'Flat Ride'), ('WR', 'Water Ride'), ('PK', 'Park')], max_length=2)), - ('description', models.TextField(blank=True)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='top_lists', to=settings.AUTH_USER_MODEL)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("title", models.CharField(max_length=100)), + ( + "category", + models.CharField( + choices=[ + ("RC", "Roller Coaster"), + ("DR", "Dark Ride"), + ("FR", "Flat Ride"), + ("WR", "Water Ride"), + ("PK", "Park"), + ], + max_length=2, + ), + ), + ("description", models.TextField(blank=True)), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="top_lists", + to=settings.AUTH_USER_MODEL, + ), + ), ], options={ - 'ordering': ['-updated_at'], + "ordering": ["-updated_at"], }, ), migrations.CreateModel( - name='UserProfile', + name="UserProfile", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('profile_id', models.CharField(editable=False, help_text='Unique identifier for this profile that remains constant', max_length=10, unique=True)), - ('display_name', models.CharField(help_text='This is the name that will be displayed on the site', max_length=50, unique=True)), - ('avatar', models.ImageField(blank=True, upload_to='avatars/')), - ('pronouns', models.CharField(blank=True, max_length=50)), - ('bio', models.TextField(blank=True, max_length=500)), - ('twitter', models.URLField(blank=True)), - ('instagram', models.URLField(blank=True)), - ('youtube', models.URLField(blank=True)), - ('discord', models.CharField(blank=True, max_length=100)), - ('coaster_credits', models.IntegerField(default=0)), - ('dark_ride_credits', models.IntegerField(default=0)), - ('flat_ride_credits', models.IntegerField(default=0)), - ('water_ride_credits', models.IntegerField(default=0)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='profile', to=settings.AUTH_USER_MODEL)), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "profile_id", + models.CharField( + editable=False, + help_text="Unique identifier for this profile that remains constant", + max_length=10, + unique=True, + ), + ), + ( + "display_name", + models.CharField( + help_text="This is the name that will be displayed on the site", + max_length=50, + unique=True, + ), + ), + ("avatar", models.ImageField(blank=True, upload_to="avatars/")), + ("pronouns", models.CharField(blank=True, max_length=50)), + ("bio", models.TextField(blank=True, max_length=500)), + ("twitter", models.URLField(blank=True)), + ("instagram", models.URLField(blank=True)), + ("youtube", models.URLField(blank=True)), + ("discord", models.CharField(blank=True, max_length=100)), + ("coaster_credits", models.IntegerField(default=0)), + ("dark_ride_credits", models.IntegerField(default=0)), + ("flat_ride_credits", models.IntegerField(default=0)), + ("water_ride_credits", models.IntegerField(default=0)), + ( + "user", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="profile", + to=settings.AUTH_USER_MODEL, + ), + ), ], ), migrations.CreateModel( - name='TopListItem', + name="TopListItem", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('object_id', models.PositiveIntegerField()), - ('rank', models.PositiveIntegerField()), - ('notes', models.TextField(blank=True)), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), - ('top_list', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='accounts.toplist')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("object_id", models.PositiveIntegerField()), + ("rank", models.PositiveIntegerField()), + ("notes", models.TextField(blank=True)), + ( + "content_type", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="contenttypes.contenttype", + ), + ), + ( + "top_list", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="items", + to="accounts.toplist", + ), + ), ], options={ - 'ordering': ['rank'], - 'unique_together': {('top_list', 'rank')}, + "ordering": ["rank"], + "unique_together": {("top_list", "rank")}, }, ), ] diff --git a/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc b/accounts/migrations/__pycache__/0001_initial.cpython-311.pyc index f2a7857a7619a3d1a2bbc5b6c77657f6ac1f0a6f..8a8b462953145ed5e521c084739fa9609ef5e13e 100644 GIT binary patch delta 1970 zcmb7_&uCWJJJfmRg|AOsME81Yj=fN}uQDv5ga zwYMT!m3-)_LMpdXamfkg1ROWjNX*gy0TXE@uDs{i4xrr#eE7(#ee>q~zVqJfpBMhP zp!}0cB?F0VaWU8}C&fAY&}^XFIy1*N4!x`SW_`(WVxsWz19N zIr|0OSQPtWm;w+Wge*e}g{V${Kda$!d!2hTVla-OfB+%n!Om`Ko>Lc7x^2Vti&r6I zSp&(=V~IOOo_E@Y{nuq?RGCqGZ!G<9ENvOf%vgpv7vqXYg?a!J0|JDQ6-aCm)!@{F z#0~19*tN}klvq&EHOB(2ceyter4`EWMY# zTl3t4#BP*(CZ}VVa10I)t)2&~tNh3$*P(UCMQRY`00O{i(36C1MmpQ{mvQ@CZ%qXo z@QXFwB|pb6#;780#hV|EnQJTYdMuILCdi;e@ia~n`QMXle~u5k-#tp%=2H{x(fV^^ zm!FR^`xvuNF#9yu9i~r#M_3FXKnQsNYSAgks*u7oFP+2yMZh~nRCUw`2oPd+SDY0o zE*siKFzDIlT<*?}x}C%0->S}3LEQu?O!Cs~XX+*mR0jwUqPD9JM>YHwT8UKWYh$e< z)5cyt@U_~OR%2StPoHSh{-lW50QPDh3UMPFHQ#)kKfgz<-qG%1gk4iJ4wSnfkzu`c zw{-<)ND-H$Q7je^AjEZPx7u7pwT*~N_lt?f@xQb8_`|eyr`o>JjSQ2WCK=7wE3F@x zUU_+Zv*y2gZOPIe?dVPHVZtS80$h+Mv1&ko5D&kh>aU6(!WQp-YRu+Y`$rH2cV&17 zPKORhn&4+6bcI*pdia$*YJmKcBq_%ohRQ#zK_)Y zR8vze;7{_{c=o6Fm)f73s_%ELyj(TAQcvRf-gXx9p@OuM!pIP8Y`1ZZYSGnrNn3^Q_rGIFEXfDU)X2?}gp zij&b35)mdOB23VUYD$*s20c_rGCfobaF=zu8J2TAGGmI8frvhcm-$b{txJ10qr59wf(kn8auSpRivLoV& zx{Zpkc3p)W7O$%)9cCbAf{`p4NoFKLdBz0?NpNs~{V)!X;-Du=dV=W*P)tj8f~&pI z$XxBn);&v{XK_*DrCyU#bfcx|eMEd8k=|c_o00r}^F+>4z2NWOYh`}yqa#dr4Ezfv z{{r(bfU;<*EpWAWFUqd=!e_H^KMuDOu(p9TqtY0$wT=@%BJv{={{-^8pgC0dgf)kX zRPTuR72SLzjZ=CT<3!n-pi&}|m;{}urfj!2T&cB#g0IbL3tDcUeaX>KYYPM)3U&G4-QGKc z-m2S+~@{|CrIH{IF*V6Nz={q`Gt#D-WtzUzqjHvc4EBC)x5Q zxVB2JE#}$+<(2(GB`Q(`U$516%dU_~4nchl$v`+Eu-&IByzf^bsZIG7eW@&?gJg8< zM}Lj6-f`A@kM%}jG0qk<;L4UC`Qo8d{A;Yq;okp(BmP%sG<^;BVm69W6=(+Zy#_PbHz zYINrZ{kKsE262;uxQQz=#)dw}70HH{A-)5?-I8yY`F26U&v0P}X<-M8jR!8)A7TA- ztbYNXr%=+S7$#+UgjYR6TJd+%IwigBPd!iwTY)}k=|9_~b?=sLTuzH`YFmcHv29VT Yw1xBWbv080$Nci-f=||e#DCoX0zjFD)Bpeg diff --git a/accounts/migrations/__pycache__/0001_initial.cpython-312.pyc b/accounts/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89351e6f126d938d5823f28f47fd1985243bcfda GIT binary patch literal 9569 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 literal 0 HcmV?d00001 diff --git a/accounts/migrations/__pycache__/0002_update_user_fields.cpython-311.pyc b/accounts/migrations/__pycache__/0002_update_user_fields.cpython-311.pyc deleted file mode 100644 index 9bab5f61647c4264cdbb8b6715d379a0e411614d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1142 zcmb_aKTi}v6rcTb%kFY#V1uC%Fi4EoaDXkj#Aq}arIBh2C&SHfH^X+M-uvx*ER|dYWk<|K;YR`*-{q!e@9mJ5YQRM4Xt82cYBW5=HMFBKbCsuPv1*$b+v^3p{w?_EcSoM;!t-W%P>?@+yzSaVD-jeC3VBMX$k1LC7qXjUVtQ<)M{ZC zq=_uf&CShY9`KYCAmPaDzIM{&5u1(QX}lSq)wJmh#m0qAiFHfd!6-^kc<*^xHR z-55(3V?f9R1HFjxMn;4}Q5Izp3n&X}oF%b(64HGnQWif|__3)DoW~8)v!xqG?BZ#B zMyKFJ=dUY`u*E77sa4WO%!PQv*ZE&6rcDymLmY%SW~7!@`ovZKJhKW=xPY^Wl9XZ9 zC(heXW~0s60+3v&;*u{Qwl3#)d!}pXW7gJ-u8W+>_io#s=!{QvMkhMn^!EL>H~nes z;NI6Khu+eWx77BQxXuXo+u zbzY|&IB<**5;<@VLGdAn9yoI3xR&-{&8ZTna@s0A^~B8D>ojR+J>&oJ%|G+M=8t$> z1a!>(m#cS!0Q}1se}sm_*)k=50|+2a1ud@1wfHK}F`icg)gTY<02KHMpdjWN{vL1? z0N{kq!Kj81{{ZAe&lsEMiP%!=hHNRiW)h*LBdnS$wISB~iw~KzUpRI)22~D$Dv!82 zR}Jt02hUGJJYo`|5%vwBApJr}=!TD|PbYK^#s-ff9x~!fP!t8b;t@|#bdFGC9xCcf zC?A@&zO*quq9%L_ zCA+E1x2_B53X(jFi4iVR=g?$#>LT_MCP6Xj%a}TkuKphAW-jKDMn8$NG?QZ+DNuA?3mbq8wysDN#bA2rn#*f=o@Tei|`71SRwq~<$RFD zoZ<1->0Bp-9^sWo>JT8|$g9_TA28Cf{f}TUU z3ve%T3WDn~SA}JjM3**Y zV?f52Y4#o}Ej(ajw{%^_vNqtvif&+~u6;#QDxij})pf$7brSIcN}mA|URr#xw77hm zgzhp|h^V*m@P+sjoY9lP%O8rHdJ7lZa;<1>8j7lJD^2AU5)KSQO^5W>HLK`Hw0Qp7 z6lrRO?4?a7ZQ2Q|pS)^k3y1GI*~01i-;$lJ^s*HvTd@;& z`pIcKH+Q(@j?>3c zd;U9HTJ1@zjev_NS}1wAPc>9BIuB1>R1%;qc_R3)nK5ii*zxU0$%o4M-_r z|4a56ANwK93nV&7$1Ga+YH3hDnUQdI@a)g}6<~be?=|Ka<(Vo|>Sg5SpkO~Y<|)hG rVDm@1xB-si`rv*0O}{>vvHhPL%yNPYUSAGGCvp8bQ@nVC*1N&~SFr)d diff --git a/accounts/migrations/__pycache__/0004_remove_passwordreset_accounts_pas_token_e8e509_idx_and_more.cpython-311.pyc b/accounts/migrations/__pycache__/0004_remove_passwordreset_accounts_pas_token_e8e509_idx_and_more.cpython-311.pyc deleted file mode 100644 index 23717e9e6f9d9cb0de4f7cd9dcc3dee6d3e2e35e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1693 zcmb7EL2nyH6rSC+*WQg261R}hG>ui2P=i!E4M&TsZ|${R8+JMasdNE2nVUC_eSXn^~`m8>@xc-EZg3d*6F+_PyC(=jUC5 zW9#qr&i6$^{!&6dP}bw@Hokr)oN&V@J)>px%$8{olYBi$wX>d zyzmXF7f+PBZc4Z3bp%ViFo>ny3px04J7=o*!dN(q3>6Yc%iyGCa-(CkER#TCH%|&f zb8ApIGBF%J**IrWoM~a__UOY#PHDG1St$+5M;QAFKG_&J(_7Lpo_lcl+zTEme4Z~1 zUYlmU(#zruFH8T^OO;=E!OKPdI)7uZ{PJ8ncFW-_Sf)3n^JQKiELNGd+hIRQV!7OG zHn%9_oJK5;_d>y`fEW@vpUauJmNS$cO~U&SQ1}4eZ{DIF-`Dk5HKzgVfh=fTpQ7|* z5NJx-gd~gF&B;etjkE@)$%u%x!<`F?F1YGYgAwJ^{ov6sNfO$>YwGjY1$M>K)`aV~a0@E-KxZrzn- zs{Kb`V8_7f1Fs&69- zO6z>mWtlA9FoN+}{GFVkl05sN(G7dhh*-OkbOml;&%5vaYfAYp3pybULaaY)Cyl&# zjpygOfxYq`s#Ow`cG2xYbL*MiL0Q0Yn*we`kAym38q_4dgNN~Oa-}wLnyF=8v=6^X zUE-|&=pL7^43{^COU<-sIqoSz7%520Q|g;D)K?UHO|w^q)vJ#;j;mLH+kRTz{Ij}w zT-{7d1?3Q7q(H^X8EeC(wVW|rx%5l?$7Rgw!on#*7%50gwjv{p6r>AN IhE~V@2Ye5>@&Et; diff --git a/accounts/migrations/__pycache__/0005_add_readonly_ids.cpython-311.pyc b/accounts/migrations/__pycache__/0005_add_readonly_ids.cpython-311.pyc deleted file mode 100644 index 4ed12197a56a6aa37880f74b40cc778b1779feff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5043 zcmeHL&2!U66ko|7v6X}dO3M%mY-y$ww}pf$nIU|12#FlrF*dawN?oQJ;a%GbvScKg z1Wp`!=#d*U{R7hJkUype4jx^5q96Fee%&>`{cC~Nc`|W!_?P~Sg zI&Xm!R^5Fv0|#w1leA604#>M6ybl_%mTKF099bL0eFJ zy4R}4SiDR!iRajz5nZXJH7wQ9Ov84QEt7HGt_36UdZ6EUaa%x_oKyuysv;8_LNz85 z9$ybYfoq0$lIvrE0TyQomW1Efc4`asp6=;xr-xy^W=Ue>5tb(Ym8H}kf=PB@O9apG z>lNQqI%q{=9^3w4D-Pq}*DIlj2X>+mPwZ!>k*G>+3Q}^=OP3&fIYX(YDOG1_Pyj1@J#S{|~_XYT?+`?Fm98`bt?T(wUjzJMwaVsU#2G z!vPj8$;-vk%Egf$gKq#TT9I#6Mmsg8@J-EjY)PuA8PcYXLXS)@+7; zLC-HPE@m%V;$Kk*__@&MXXLoom>EgU_uT9yD3Fl>eKT$@yrbMi-r{;W%G^QENXUS* zq3b*C?_U3Loe%cD-eWn~FyF8E|I>;e8Q@?=9LaR>)V#}Ue=uv@0$w3iFz5HXKrhLW zxqo|aC_&~%7K9*ok(l2)U*BLq2xk43`8rttgGC^?hWFsznVI2zRZlWDZU#3yR7ZsxZ^gAHb2xKGS|+CBcO+5UhO@K8HNo`}2|{{e$4e#KXx)c~2tg zPkxb}rH*xv9Pb{S?jAbz`15CnPIZqR?;bhUJ$j=1(b4X-;f*IhJg`GR?4t0-q_ng{ zK?E|T;K)B$keXaQe)-OrS$uFAdRRjQ()d`sZ delta 33 ncmdnbxQCH@IWI340}vR$lAp+J%H^-0k)NBYUyztQ(YFWyjEf0H diff --git a/accounts/migrations/__pycache__/__init__.cpython-312.pyc b/accounts/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f96dc728bdb03ffdb2cab6835aea1452211a589d GIT binary patch literal 179 zcmX@j%ge<81pMp@=^*+sh(HIQS%4zb87dhx8U0o=6fpsLpFwJV1?h(trxq3Kmn7!o z7wMN|6lLb*lxJpVA~EArvJ&&s^W*dKIWI340}%Z9KatCf*F!(FIJKx)za%jyzi6UY1^~3T3o!ry delta 32 mcmdnWxQUT#IWI340}vR$n#g6w<*J{NpPQ;*keEEtHv<5J*9iRp diff --git a/companies/__pycache__/__init__.cpython-312.pyc b/companies/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8004fd30f397f4e74e48ded461dd369a1edcd02c GIT binary patch literal 169 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)I&1oLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJz+&d)7K%*#wI){l?R%*!l^kJl@x hyv1RYo1apelWJGQ3N)Azh>JmtkIamWj77{q768c7EVTdt literal 0 HcmV?d00001 diff --git a/companies/__pycache__/admin.cpython-311.pyc b/companies/__pycache__/admin.cpython-311.pyc index af8ff319a8b94871140719a848917131885b2cfe..248f63f0446cdc1d8a83bc10ca7da4f277106f55 100644 GIT binary patch delta 38 scmX@Xd76`JIWI340}%Z9zmdy@iPu#>v^ce>SidAOC%_&n36cN+ diff --git a/companies/__pycache__/admin.cpython-312.pyc b/companies/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09543affa1ed23919427694b324d39c83afb3c05 GIT binary patch literal 1078 zcmbtT&1)1f6i?=JyUyC$t+jrwTSRaLyI@bE6huT3TMy!8E@3)JcT+PTW@adRYoXxP zTdy9xEcHL}Qs|`wiUm)-Ro0Uylgw;wK~LuJ%P%j#_g?Z|^0m>Z135k~wR?vK0N>SO zJe-P*zDTkIFu;(32>K8zZZIP9pH$@l1#s$QOd{*n&k-}JW7BPSPYTm=0PQC*|RA604)}zOrNNeDbVI^6IBLG!e04DMXmk1C z`uwMdd)MyoSyv8bA8ftmx5o1SYSE>$&DMS5>L>6i1=9+e3T7m%@L5G$3Uu0d?8HYoYPfqO1qfJ^fN^L@*OVd8gNT(IkH`ZWnBF_?kY=-lb+NO zURFpaJbwsLdt5eoiQknT>Op6|gcB1&cnI2uVDTI19Kp%W%O6@>t&i?Locn25aB;7B jX9VOtGJ$dRL|INeU`$mqZy(+)WpnpVWvw4drVH>Jd2$R| literal 0 HcmV?d00001 diff --git a/companies/__pycache__/apps.cpython-311.pyc b/companies/__pycache__/apps.cpython-311.pyc index f0a3e1087e73ce108f6a9fb6080e7c6d17cedf39..0e4f2747f89f19e2b1ef0065ad8727b5662216a5 100644 GIT binary patch delta 38 scmeBX>to|u&dbZi00ck&Z{)ILe)-OrS$uHU*#JH0Y0Lq>Vj{pDw delta 35 pcmeBU>t^Fx&dbZi00hRbHgef9ayjZ}gSuFS{{@jcs-vkWWHNksm;J zzX9=6Xegr_N81RQt@+}Q$m1^MWzhI^Czj0+zb|n zcr)ly7l)cy+OZ$@TaT=;Gui4A-jNCdXRgp`Tff$^ggQ+!CUxK#PYbzJJsY7hY&!jO z7CqNO>8NBfS5f&wrBc34U#0&++O|uxoGQT<$=0%@%x;G+oAr3;Gov>` zo#$FK918dF0o2$kHAI2s8i8xlx2@R1?#_eH-efnNY|eH!jyKP0kNC4T2gB!qYli#F s;9Lq*TcVqYI&#y0*tYvfO{@bCqcP%#O9=T2v!7m%%-*NJz^W$e9|GX7W&i*H literal 0 HcmV?d00001 diff --git a/companies/__pycache__/models.cpython-311.pyc b/companies/__pycache__/models.cpython-311.pyc index d98f02be6e0e89c07642be91fd23d5ed448b15cc..bebbf074626bfa8aa19eb5f8d6de3af7decac687 100644 GIT binary patch delta 39 tcmbQNH%*UwIWI340}z~%Q`pGO$inNUA6lGRRIFc;n3G?$S&Zec5CFhg3g`d; delta 36 qcmbQHH(8H+IWI340}$AJmfy(D$in5UpOK%Ns$Y zwz`%4+izyR`R1FMZ@&4hf8W^HK;Zeqk?8oJ{Dk}k3)RO}5z2EQED@Q=R3&MepcG|6 z71EA`!;&4UGwn*aEZM2L)1HKf5`hd5*>#V|Zbm2fRgG@HA3AI~;j=V7py~Y*&4#=$ z*6;~-i&4{^)?}vYAT%#s?H_2jk_ zgg7gO@?R+-KZAKPlAtn42m)b_NpHQXEz5LOcnG@qBwUtOz%JFJOl8Na^PynZB|I;; z270cVp4ZX~)myS<&~n#CZLqW=U!oPTv<~g11=c*ZF`F#CBYWwsdTV3u`vNUrO)Cgm zA-SPe4nw)+Va0S}zh&cFdyM2?4b=J^_)1!>R@5{?)HKy*a!_u*M-qqTNQ%n)?s*e! ztX&S?Ben4l&yhPcab$$VLZ;^pEuEDz`A_}C%;Z$nE>JTdCXw#x3%V5u2EpPeLOje}$jR_6H5CZ~Q zJu*v4In~$^ij|-uW!%~AK$L01Aq(R);mkW?&aFVj@%VLSNTx4oO+#TixFe<6P|Rg| zMG-|&G#f+_PDxHhIUtH}=One#628s&n5HvZGppvfq?%qh9dM8`<13^LE|9JMo|`)3 zdXFKg8t*YCxT31l%9K(kit?nC8ONE6oJmQer{++PeL&;cyy-+=c^jC-sp+_W_sHgv zSkc?I*>Y&%{JfVRgF1d3AX!}okO|6|C(0PcOJtTz!h82K0xLQM+j1BhU~Qc`Q&T$j zjPfo((<6$y!9{VVxw>?f3N%{A!&@Mm&Efa+^ZBB;)$(MA6PO6m<#HC_SM+6W=!c9- zN+alKHL*aS>QfEzSt3@eh~cS<^Nv~a3rLi+R3Wp%hxC__X!C@hfc6y^%nC9ZM^~(Q znl3$;WgM!d+ib-+hYkG+lap83FnT=aI`PnEn~_BvG(9CWo)skK?d zu=q>F_mb_JtgVvO%Ys?DN~^0Q3n^iQbiQN_j}bmivCX~RyDClks?zqm-tr`#>RpfQ zsE#|?xT^_@4=Yta6=nr~a_{ilb3Vdk)90Cwg}S<=u=$2c?0K%d6+AN8OF!6!9wNFs6RsZ3y2_*2 zWeK1_p1M80e!3ZsEL~W?ely@LR5pdF`?~MtG_bW`5?c?hkfmz#S+$S?I!6X^-Gl$jG zP2VWHV_2=GUuJreD_JBqruXLXHM`m~&Bk=aV5YARw$-i+SUbsNYp2adY#3G2mBxl7 zq-O&fCBtmUWic2~=9n5xcNQ-vo#UCZcFJtIp@DhjHoKBB*f_IYH~oeNSAm$7_>^8P za0NWHGB?MY-O4Ve-^x5`W=v=@AHX3RE7>T?R8Up;xeLA+izdS_^i8?cn*s)w-Hx zV?B7LaP@Ix`~9~{ji(CzkDEG5P2VUCJav5&@-xhtRK^&npWN#iaB?uH_Xz!6X6&FGA=tCAji1~KOH@Wqx`QRdKMevF&yJ0n#PIP z*NK&UW?FW*U7>k+_3&;4^zgro+VLKA>@~I-i2Vt`A(V5mA5njiZuAu%l zTN?bzY-#Y{#g?v=LRX7{tH_oH=@x$z9Ne27arE8FFZ?P>$cXqL!Zn2J2tx=zK)8YM zLxf?35rk0$JU{#Sa?dR6o&;6FJx4&L=9{kKnk);4UbAOJd3~sZOL2BoFT#TWZ z-}Kr41H|PqoA4g3l#^P<;L2DW-|(qoTv^zul1E{?$?!c z7XG=Yd}_q)e-o^&HC@;7zdwsDTD!69{xQA1_TL^CxdQItC7~nTeCnW-J|XQ-$i*k5 n>j^pi+{9Py@81Z@);#|SERK0L literal 0 HcmV?d00001 diff --git a/companies/__pycache__/signals.cpython-311.pyc b/companies/__pycache__/signals.cpython-311.pyc index 89670d8669711cd97ef2fc240f6d2484099979f6..1e2aa6db9f7a515856260a52bccab14e142c329a 100644 GIT binary patch delta 38 scmX>kc~p{XIWI340}%Z9zme+-Gq1aTXmM&$v3^NnPJYqm7tFUf0PimiegFUf delta 35 pcmX>qc}S9LIWI340}vR$+Q@Z-G3Y5@^X1(cSzP*d!yM6 z!IU6`DmApKT29bY;ZOl02e_1fp;9kdOtolLgsO7kmME=S_0qoCACB!>2np1QJ$^g$ zX6Eh8`^+~#b#x>Ul)wIYcWQGCq2Jg;ScJe>yAQ^7q#~8mQJKqgWj@by?3vdiWg#zk zc0`Ys#k}a*f*vd5JO(?eih8`9$S2Cle3C;vA_CzEKgAPqDRz(dS5Wb1=w7f`KGooZ z8+_soJ{^HiV}GKdzq6W@Q!m(zGVjJ`4bv)^$~odDJyRt*v53sMn35vV&JhZ>a6+Lo z?DwRmk{6smGwac=FTcbYmR!}qDd+$p~c_@yx7@xCE>fa2&1o~i(JWT zZm#GLR((t<+~5Y65*$KnX+P5vcaKF0r4;vn8|!d87b2E-z@Fdht;fI8dV-Y-<9NOI zD|LqRtp6@W>M?9wZw;-Bk&D8T5GECes?lmx7B5Vko>di#WQzV-W=u=5G}F?GW@dhx zR5D6t7LGonnHfb@i8`Dq8>)6zW0pZPezK@JNR6m5Um^4^2WbQY3We~I*HlQeq-9u& zUSM5j_&_0-%;R#Lc0i0&gvyN>XG)}KnXY(N(=9^XXwjIfSd^VRWd}*wo4Mkg7qlFu zETvqmRUqt2k+|Z_yh5i;`WAD28!9sjRfd(nCr3`3gqkA|he1cIX{zb^yf&jXm<6?@ zRHlqV#VAk$`8?w9ibl*4Q=6(Nx|y4;x|{sf3&EBZ*p`{}9axBkX?_LOWwat9yy5dp zS1vu5wp`b*>5e4Zl6)UO?0nFKoo z5th~j5( z6sw{fyKp$bvD|Q@wqcT?^9oF+8mDpjlLus;_CpLVE&}sY2CdQ!@CdDp6}Q`mlp4BD zD5SSy0)jv&_6GS7ZURTz%_@mi?E3VWq?^GCfTTUFHO(qEFCBnt9YneX9^G^RQDcMw zNm=M;%b4Fo6_Dh_dLPAln^`*V>^^GmKI)Nj%#lvn(y5ws8feOFy`8$1ax$ZKX7ovV zz)9!qbnZ!a8n_tPv4$c8i9bb@+;DZcP2Iplkh?FZZ?ee9{Q==9T>f+>sAb85u0)oj-kZDmf0-=tu zfC2=zf#X*Anx8@yipj#2g&RHJ^?lptq=z4+hg(IX{GjaYI%MxUqGyWJde9QLB3tnO$m%H2^Um0`i znH+2r0U-4chvjATJ2~3@{Nxka|5fq0RP;xv02~r0{R!> CjbGgW literal 0 HcmV?d00001 diff --git a/companies/__pycache__/urls.cpython-311.pyc b/companies/__pycache__/urls.cpython-311.pyc index 53f62cbf02702add2e8dd151c70889f64477f41d..a4a100ce0235971a1dcc5912e757b8b029ba27cb 100644 GIT binary patch delta 38 scmaFC{+gX@IWI340}%Z9zmaPr6R(SYXmM&$v3^NnPJYqmqfE+-0PpS$od5s; delta 35 pcmaFO{(_xrIWI340}#xAyOC=n6PKfYMt*LpenDdL<`YcHi~ztO3fKSu diff --git a/companies/__pycache__/urls.cpython-312.pyc b/companies/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e8162d78ac1dea8286c6eff0f56b9e4e532b79ea GIT binary patch literal 919 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 L^j|snVTbZBUz5?< literal 0 HcmV?d00001 diff --git a/companies/admin.py b/companies/admin.py index a6169206..ac3be2e9 100644 --- a/companies/admin.py +++ b/companies/admin.py @@ -4,14 +4,14 @@ from .models import Company, Manufacturer @admin.register(Company) class CompanyAdmin(SimpleHistoryAdmin): - list_display = ('name', 'headquarters', 'website', 'created_at') + list_display = ('id', 'name', 'headquarters', 'website', 'created_at') search_fields = ('name', 'headquarters', 'description') prepopulated_fields = {'slug': ('name',)} readonly_fields = ('created_at', 'updated_at') @admin.register(Manufacturer) class ManufacturerAdmin(SimpleHistoryAdmin): - list_display = ('name', 'headquarters', 'website', 'created_at') + list_display = ('id', 'name', 'headquarters', 'website', 'created_at') search_fields = ('name', 'headquarters', 'description') prepopulated_fields = {'slug': ('name',)} readonly_fields = ('created_at', 'updated_at') diff --git a/companies/migrations/0002_company_total_parks_company_total_rides_and_more.py b/companies/migrations/0002_stats_fields.py similarity index 97% rename from companies/migrations/0002_company_total_parks_company_total_rides_and_more.py rename to companies/migrations/0002_stats_fields.py index b06b687e..86585c78 100644 --- a/companies/migrations/0002_company_total_parks_company_total_rides_and_more.py +++ b/companies/migrations/0002_stats_fields.py @@ -1,4 +1,4 @@ -# Generated by Django 5.1.2 on 2024-10-28 20:25 +# Generated manually from django.db import migrations, models @@ -31,22 +31,22 @@ class Migration(migrations.Migration): field=models.PositiveIntegerField(default=0), ), migrations.AddField( - model_name='historicalmanufacturer', + model_name='manufacturer', name='total_rides', field=models.PositiveIntegerField(default=0), ), migrations.AddField( - model_name='historicalmanufacturer', + model_name='manufacturer', name='total_roller_coasters', field=models.PositiveIntegerField(default=0), ), migrations.AddField( - model_name='manufacturer', + model_name='historicalmanufacturer', name='total_rides', field=models.PositiveIntegerField(default=0), ), migrations.AddField( - model_name='manufacturer', + model_name='historicalmanufacturer', name='total_roller_coasters', field=models.PositiveIntegerField(default=0), ), diff --git a/companies/migrations/0003_remove_total_parks.py b/companies/migrations/0003_remove_total_parks.py new file mode 100644 index 00000000..bbfb1ed2 --- /dev/null +++ b/companies/migrations/0003_remove_total_parks.py @@ -0,0 +1,13 @@ +from django.db import migrations + +class Migration(migrations.Migration): + dependencies = [ + ('companies', '0002_stats_fields'), + ] + + operations = [ + migrations.RemoveField( + model_name='company', + name='total_parks', + ), + ] diff --git a/companies/migrations/0004_add_total_parks.py b/companies/migrations/0004_add_total_parks.py new file mode 100644 index 00000000..57fce622 --- /dev/null +++ b/companies/migrations/0004_add_total_parks.py @@ -0,0 +1,14 @@ +from django.db import migrations, models + +class Migration(migrations.Migration): + dependencies = [ + ('companies', '0003_remove_total_parks'), + ] + + operations = [ + migrations.AddField( + model_name='company', + name='total_parks', + field=models.PositiveIntegerField(default=0), + ), + ] diff --git a/companies/migrations/__pycache__/0001_initial.cpython-311.pyc b/companies/migrations/__pycache__/0001_initial.cpython-311.pyc index 620946e125fbf8c65cb5da4878956c423e33f9bd..b84640c093e6aee0cabad327d9b8933b1f393b9c 100644 GIT binary patch delta 39 tcmX@7eNmfxIWI340}#|PDQx7v%F7$BA6lGRRIFc;n3G?$`4#UIb^zSZ43z)? delta 36 qcmcbpeNLNuIWI340}!Nrl;6mGm6t0-KO;XkRlguHdGlM|C+q;rYYY(p diff --git a/companies/migrations/__pycache__/0001_initial.cpython-312.pyc b/companies/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..15d9dae8a622067e195fa4546178ae23ae57f473 GIT binary patch literal 5694 zcmeHLUrZax8Q)#}XKf7FfFVu*+Z-2c?!XY>u0^@_$N_P#5Uv4ok$cj1@eF3kde=9* zPGZzcuhKpA@!m?MlX~jYRq;cfD*Dtsrs_l2ttDGiRgKiAyg5p$N_}Z(W^J&+Nw3mf z)mAam?#wse|KIoR%<$W;E-y!ZcZEpiR*>WVLMM%%vp#s5B7>iBfCIeBrFixhQXS+i zsE({N<>cvFhw93@Q|_#o5_wMGE_1-~2?w0ez1Q1Nc>KQCVUJUu0v~rhrjx629*YJv zO-0KXaRGa?N(RZMqH6|rWpw~mBYmuZ>h8^GJHy8l5PA20-##GdjqHC0Z;xMz*%(NbJ(jp0&p|#Gi|uVqNibz@Oc?u zBbFw1AOgPFc~3af=zFe49*D)RCeCigIn<=AJ|r4@nr!&G>i=?0Tv3M9ZZnEA{BLv8KNoz_kEiZ@PEcZA}FhHesR`|sH7%Pu*YIl9Mw*`4M@ z?Z502lFYVM`_*>I9GL$)x+LRB4He#qzll9-jq~6pcE6)%bFx;zf&x~saAhg(z&<%| z>QWj(*@OUh=8%$=Q9-&13)o{oq{ynW53%nSMBBOnB~8vk?4Zxb{~!q>hfi--z9Xqn z%b2^^VW{~`TtES`gk5<}`7lppccBbE%*)7xh@McL+p4VHw0SxKG}1`P(erAYN8~8Y zVfSsgZ73!Y+|lzIfItGoH=>oTI<&m1VsG7HNj8ZKb_|++Tap35-h7S<0DDbj@sTy` zNweq`NS)|w4oJ$Wc_gb?)Da*dYngZl>R}=5C{P6kcI(VT1N+uwEx#kD%{+n#MJP`o zsTih?l(ekY(;Ii7PO@VAD}rrFAyM2x^bFmILWDpuFh3@hvm6Ouc|t2YBXStQu2=V1Mw`U~zU35)yt`-v@5Uq-@|RUIYFU8Jb$ZRMuYG?Z-n zlBUzzPn(IOo=zO!dlS>s(=(*$So)`O1>`2$*@IkpIpdckiJx$fx_dvqTyt@r*pIyx zal9mse<4<4Z{AM*UXocbj1C>y`6pG*9D2Kjj`4>)7AM}?)E0+IqH4wIk$tJT1W6`B6rRf$ZOBGdQHa^#}re~TDDSU*_#+4@h{?~j#--n9JRIH};l zTsfMw{8y@hVJkd)aH|rYErn-^xv*`nnR>Wc4qvkT@6`Id{oS=QTx_;F{K`S{iL)cv z{p?)8~UXjXZGf;QB$5;7tSflfXw?0v}_6Pg2MyOM{b#a}P}GddgC=nFi&4|#+79|8Pu>|wARUbp=3wHCq&dV&^6q7+UXEhp$=w4OUR|v?AwA(fLEO z99^>f%hf>4nppVad}U&xG_mj?ZN0Zyp4hVd*IVoF_X|1eqr2tk4{ID3SQOae1*+>p zDSClax9fMF-*_s?8>QrpN>VN*ogLFIMV{Rr(f6eG7*xzh3>-s?~et*-VHa zIoE<@{3VkAJxDH8#~1$%BtPPB@V%}dy^F3lKICyP4%u756xg1!|IIno*pJW}VZ*`J zt*Fj~zDw6S>#}KG+p#xc&yhB^U$c$Y-Z!?WO=kFgDk@&I_xo?556F}rmkfF^sdex? m|J23t(LZuSf8rv4=3>uW-{*PPr{0QxtmGg2D@SKc(LVt=&NEy9 literal 0 HcmV?d00001 diff --git a/companies/migrations/__pycache__/0002_company_total_parks_company_total_rides_and_more.cpython-311.pyc b/companies/migrations/__pycache__/0002_company_total_parks_company_total_rides_and_more.cpython-311.pyc index ce62a5d120b4303337dfc9b8eaf84869ca82aa95..4eda3e649fa2f657221ab2fe8a80ebd85cc52fc6 100644 GIT binary patch delta 38 scmaFG`<9n$IWI340}%Z9zme+;GjD@_XmM&$v3^NnPJYp54wgqu0Q!y%G5`Po delta 35 pcmaFM`-+!qIWI340}zCM-pKWZnX6VmBR@A)zaTMrGdIg4CIG`S3n>5q diff --git a/companies/migrations/__pycache__/0002_stats_fields.cpython-311.pyc b/companies/migrations/__pycache__/0002_stats_fields.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f23431f68152b3de24a42dba9b9e948daa92c178 GIT binary patch literal 1737 zcmb_czi-n(6uz?^$97XhqXI(`NExbInb=&lQzzazbz4*hqHs=L-pjl9zVF_>=g;Hg9)k7Jm}%d$ z5&Ef(YSoUFgC$TtA%+-^QG!F97@>iYfgT}dyhqIBxMNm9+n{|tu|kts&yipIrQN=v zyd-K1nnzhGm7Qda$FfyL>fZ~;#=)$iAvp>$L!rTN8;7QWxYemh0W{P9*qwTnfLS}W zZ4B`69jqPuPdeu^)JM$VjLgAdqjGTnLk4feI*g6XVT=vUq3whYYe0LAEB9&DSI}f` zD@(dGjkr{eg@uJXBub+^qOqzE92;sZ&vF`*E*0xiK&K%et2*PWv=`^T30cq8D?}8-%>+(O47F7UNx>GM={JfI?52avm`DP!klEHYcBD5)S;9 zFQ++gb5XjKmv#B^=zT#4dOnU`1urBp3ZNF52=X-%#qqmnJvyTj)}d)TBWXqihl2$t zwGB>3Ie;qPB{HYEBxRxGe0M{@>jafTEAl%G<>tv#*vP$An8u{N`K0iWJN?1yJ5zgC zX7(no?KS7NZuOgU-{@|0@kev9-&`!}mh0^!5Qkcf7IAxMjNv104vhg3v%{S{7#ag2 z{sm(h`%QcEv3|sKb%`s!rQAU?%(K^J-<91qxaKLnt=xMRv?FI}(7gA>bujhoSiS^N jm>6TYdhG9_+4G;m4zOLI^J2^EU%aue9fyDMmbkwGF7}%f literal 0 HcmV?d00001 diff --git a/companies/migrations/__pycache__/0002_stats_fields.cpython-312.pyc b/companies/migrations/__pycache__/0002_stats_fields.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7935fd4454353f897713a1534573c44a6a1439f6 GIT binary patch literal 1651 zcmb_cL2DE-6i#MlXJ@8cX_u;pR_&n{M`))Cf(I#hQ7T%z=wT2-++?@eW@gr8R@s|E z4<0=9=5LVp;Q#Pc5L$Be%X{z3_g>!1r|Ibc==IK8?A&qz z_+pf5)lP-ubuGLH1Q5tU0%Mq1u?2wz?gL`&0Af?v)v>>?J-a-K?ST{4z8WR8RFJTa zz&XoOsoW$Zl*`s=Ugm?XoS5pfd1&h%H+_v#oKWQyd#%kV zCsmwaL}SlxF_~wAwJ@)68wpPPZQRQHf(muMyhUW3Q-N9;mN^wtT{w#yb>9qq<)PwI zgj9f#Cei0q%MFBH^f5O?j7DgWri7*~ouDu?s=T{|+%p7)W7N6FnbZltq#J2YJ5&@V z6=XenI=COev6-hI&!Q(%Gm3OAG7;rlf^q(eZL<*(kuFX<8A>xGs7@^URom$7BZzdB zZz7rFT%w{-aI{*Lx literal 0 HcmV?d00001 diff --git a/companies/migrations/__pycache__/0003_remove_total_parks.cpython-311.pyc b/companies/migrations/__pycache__/0003_remove_total_parks.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d42096083b38a75e3048183ff856e08543be0c64 GIT binary patch literal 717 zcmZuvJ8#rL5T5lb=M9m_L!>*dpfN>!f(9X!l1Ndw0z`Ao%DG(*U;N6h14?%V1tnen zK@duQ3`L65R!CHIjxJRyX6^G41he+%8PANr`9}V_wnhPMzuOyc6M&y4Xw6+X^JnOs z0S8VJNXd{8uwW0k^$EBw$i!+J&TW7Tyc-)@+<60m`^$s@(KL<6GAiRdQ=>&m{csk+ z{5d*jAYe#1U^5w$p>2V1ChZ_d$?Z$$90@O$q*&!~7l}OWziJr*OZ%fdEut(IO0W0( z{U=P7QK{IwSR`EOl_q`a=NMRREb1o8=MXAt^!9lR1JFI@en5K+j!AT;} zzsK0|NtBo(6LC?9jEii9jM6MYuf7&({z1GnjGE?!Sg8L7b0hioFnp_oR3Y-`GA!TA zI7vRnNAVq(@kx}8bC%^yifB}ZOHtvUZH6fCDdr6syCY|(IF)8~HJFLiF2ZzqesmsJ zwzcI=4=M`&!_V}p)17ViX6xO`wS9UG2sZ{Q+uiV{`{u~a_Jf1K)_ybI4nM3FH*6cG zqAuG)@3!-z+1RdpfFb^4pauw)O$eDm@B80Z literal 0 HcmV?d00001 diff --git a/companies/migrations/__pycache__/0003_remove_total_parks.cpython-312.pyc b/companies/migrations/__pycache__/0003_remove_total_parks.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3c298d021ac352a494ca6c88801651465970af83 GIT binary patch literal 650 zcmYjPzfasS6n@Sx5>q6gs7M{IH?X9Y$f?~B>If2Q87g(jVwtmh&5^{x4y|sZ5<^Ee z{su(UPr6rBm&M^v=Wc_nyD!@4aV#Us=Im)oH#OlJRnA6r~-3UVg_5@rmzQMU6$pANs$7nJxV9QSx4KsS=|vWKw^WS)PB+ zjBRqBe_2A2aeB5Op#;%UqTDI9y(_VY^x@9!94TE&J n+m7e8d}3VlsX#q7X6hn@en9`;!zj4Gx2sz>t6P7-I8E+9e;TH| literal 0 HcmV?d00001 diff --git a/companies/migrations/__pycache__/0004_add_total_parks.cpython-311.pyc b/companies/migrations/__pycache__/0004_add_total_parks.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00040ad902bbb16983c5aee839615ae5f1b875f1 GIT binary patch literal 841 zcmZuvzi-n(6uz?^|0VOa)T1SE*Lxscw0zm}=77OWg^!@y>}u5WTZMzjyE5z3+YJFU!j=g7IT*z55m;^h-JQ zXv~bs78r+!A%Gh@~u#V?ms59dg@*BTZ*w>_+L|s9P zC`)r`CK=;#-l=!0uQhWfAsB~1%zzrJg=DmEvJ(ueVRr*m(5nIb&m+1WP6+xSwUmcr(!pk)--2dE-kDI z4GQ^KT8!_|L0tGcw5Zx5DNVREDs1dTJZ9UzBW+Tx6CzzgAa4+Ju&)sEVL)S*t31a0 zJY_uX03D%}l=ef$9;q{gq1@FMSsoS99)FS+yvs!ul5W=LGikq~iR%A?1aERK@&KC1 zL{PjJQ5=7acB2K8upUjj8A&tfnRbd`u0-(nsshmDKB0^)3bNVX7baAxK+()!0u1N# zr`;-bZPgq;D_!K=`s|MEo8#vCcx7$uZ5-Sgc^lv8sn`DQwMSmNv<$~RLjdOrO5OC# z;Zrq5v#zo28`7E5-DK}7WhyiRN(xQXjSzOG9=s^ literal 0 HcmV?d00001 diff --git a/companies/migrations/__pycache__/0004_add_total_parks.cpython-312.pyc b/companies/migrations/__pycache__/0004_add_total_parks.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b969bc71e40ff5a07f7911debf71b97bbbcc1660 GIT binary patch literal 769 zcmY*WF>ljA6n1UZC^M$McInf zfw5bE18N8U2U8GIqFX>>VvCfrFmY!mB;4@)eRuCYfA4!=R#!bx=j-NH^a=s|)MS2Y zGces#;0!2Glt79?lp3Ldz<|ds8J`t}NXOLv{C& ztW$PC`bpuNYEV5K&Pd9nRmR#u%o4iqyVAksJ;u_*SmpH-rtlSv-}OnNb2X!^$1=*Y zj*=s^m(qDi=_B1kSemZC;CWocN9;*fu!xEBNqW4;W(I$Psmg;tICz;ekq2rBE`s8% zh?C@fd>Ai5OuHnDIL^45nRJTapA*4iVS)1G9wwA78?w_I2)+F>Xqox03McTxX-`aJ z-9COc@xZIWI340}%Z9KatCfH&{QkIJKx)za%jyzi6UYF#xz;3ta#J delta 32 mcmX@WxR;S@IWI340}vR$n#g6w6`-GypPQ;*keEEtw-^A28wn`@ diff --git a/companies/migrations/__pycache__/__init__.cpython-312.pyc b/companies/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2bd391c200866ad84fd91e7d11f66fe76d9cfe6d GIT binary patch literal 180 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd6|5gxoLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJz+&d)7K%*#wI*3ZpMFG?)Q%+D*< skB`sH%PfhH*DI*J#bJ}1pHiBWYFESxw1W|di$RQ!%#4hTMa)1J04SU>EC2ui literal 0 HcmV?d00001 diff --git a/core/__pycache__/__init__.cpython-311.pyc b/core/__pycache__/__init__.cpython-311.pyc index f3118674e49aeff8e6b49b9d7cf8c313c98895f2..f9eb6c31c29745120c9c9057c17a1c84111b27e6 100644 GIT binary patch delta 35 pcmZ3>xPg&tIWI340}%Z9KatCf*I7TbIJKx)za%jyzi6UYG61s<3mpIe delta 32 mcmdnMxR#M?IWI340}vR$n#g6w<)ELDpPQ;*keEEtHyHqeTL|d@ diff --git a/core/__pycache__/__init__.cpython-312.pyc b/core/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a61132163aac5f40de1b3acc010de0e0f33c42df GIT binary patch literal 164 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<*XlCoLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJz+&M!*UkB`sH%PfhH*DI*J#bJ}1 cpHiBWYFESxG?NjCi$RQ!%#4hTMa)1J0Ko<-ng9R* literal 0 HcmV?d00001 diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index e67ad06f997a9eb83f66c38b063ec0b71a16cd86..c070115621f1ad24c9a0718ae3593b62e51f9b89 100644 GIT binary patch delta 38 scmZ1}xJHm`IWI340}%Z9zmcn+nb$!-v^ce>SidAOC%n*f_QZ3onXKk)?3-jVp?BiTDe-6T6j+vDTEyHVE#e*x6;`&JHZxD9WGW)z;Fi}0 zCbtx{Icf9Hx@$y=^?* zAlL5|OT#MG8mgtsyx^SxeG>FZtXV0XYA9A3r#Fz5!5NaVLnNg?oCRGD7jS+?^R_*-bTo;&-}iyJ2kCMX4ugm>^OkOwG(?kcOmy}DM1B{-~)%W+TTiCB-7 zyDFDH!}VrgaoOXtUPq@9Pse-szwp)78AOjO=>Ph2)f?zKx{bclZlK$Wsji<}3XwA$ zLqclsz~D_{P~uBCjR>+iW`zA?tT_#`URiXECMER`rtjRFzHsN>V$Hc=CPguZJ=!Bm z4Z>|_g#~_x6T3rwDgh80<5Uzca!$P!`0x>>0TtOV9KRFsrY3Yo{JPMxSDkhvu-kzRX}P@S29(so;1|}qRKm7C^J;r7 z9F08etr4(fE|4DD*VCE#e!03^p4l$X?3T}Om(TB%-?_i^xH8c%z11&O9+xVcOS_}9 z+oQ8PrMW>$A1&@9y-<99kVVHPf5>i)%s)d)X8v(yY?JMdo7>~&PUXyR`7`?(XkRdS z*thR4qMv3ip4NVzR)C7+wXo5T^dXo%#XGD=# zWl(Mt>Q4>_Kl{euU$Zl$(+No?ftbp&SrBR4ZaXbv+ahb*tpIm?$>(kR79c(RlJ@~$ z8+&Zcce)}MN_EfYgo*+q4t1M$-6K9`Vgx!82W`I_D~cFq%x-#wO0zCpXA~0(Fob<7 zj@;o?^LT9 zb@Jhft$Dst0Kx(Gk+| zvY8XbXu86Af$^oXoMQT@G9D&*`LYE7jrfepl8a+Q!w&a+wjlpF(T$KC8p#_`q$z0t zpnzWXs@xmi|518JQx@sPs3I5W+ptmoyV(0cV5Agf4;g#ty**^^p~)x8NU!?c#5WV0 gxgF)?fqFuzZgzIZ=eEb^1_*?KhSXDkNp+a)Kb9L1RR910 literal 0 HcmV?d00001 diff --git a/core/__pycache__/apps.cpython-311.pyc b/core/__pycache__/apps.cpython-311.pyc index a335ca0ac36a296be9840a8215271a5e280df974..ff82bbd86523ec8b772300dd2bbd4e21390a226e 100644 GIT binary patch delta 37 rcmbQkGM|NOIWI340}%Z9zmbcNk=I^7v^ce>SidAOC%YaQ2Rr)h|odAMaYt@4x-eGZrxn69B1zuqt_%}5~SUPZZ2;98^k}w z#jzYXIk^c{5Es46Meq&peeb^a9q)Zl?REoHeEn>PcdEYX<}Yd$Snet?2MQE%7^46o zu;3J^H3Moh^k|#8z?wL2?M*i>k}JJ5?I-al3WtU^8CA`4LxDLk2oQz9qA0Mb6*v>y zb!4NT2xhd?EqY1fF!AWQH%=(ynRgV0y&_LeBF3q7hH7-+)?^*yn2Z_5vVpOhEV#xk zjIRsAE2cx)h!i}>MCtL!e4x1pSn9RD5B;-@iOkOlPlTUeh=}u>=qmaLvDpX52^NeD zb6+pulQhk|bRx84Wzv>pZIx!Q=)f|3jqKC diff --git a/core/__pycache__/models.cpython-312.pyc b/core/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b4b571a18e88b4789d1627712a1043cb6d8d630d GIT binary patch literal 5110 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 JA<#7z{U1n7XtDqR literal 0 HcmV?d00001 diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index af48e1d241f2fefce478e501abab8c6b4a8bdc78..2445614935ec218c00d338327a58e90b92765aa4 100644 GIT binary patch delta 38 scmX>rd_kCNIWI340}%Z9zmZFVh1Wqpv^ce>SidAOC%&2f+!SKd>k-T!W>r4?!;cR_J)}? zPK=RIi$sw60hOx238*Ty2rBU(RBDgC#H5m=6-Y?!rMHwsZN#O0vmYTOQN>7pelzdA zd2imwZ+~rTiy>Gm|MurU2_y77-vmqanWcAunMFF%v587Ji!tXzW~d}&1&l)I2-1Zs zNEh#iJd3P2Eh*tY`9{G`gc9ALM6-c!q2vOgjA)*sM|~@_Gz|Nz;EA9t)=@U3%Mfr}CD8C+hAOw5{*~vibT1y>$ z0dduF9@j(P;vd5Xste!YFL4I#;4keCG++D|x4z&5?hQn@;#ay?3!On3R7F$58C1oJ zcmi55e6E_Kd3Fle=p><~T$z+@CGN!X#8$2GA~dQK_WuPqbJ}^2s1<6euB9XLz0=Fp zgMMAwZl`ah=eNB*bLjJteG%-RMt0N~E8rwl`CI8>zkXseRX5pAHN*2lh1v_RSCMzux{wPygfYzMDrMw*S_> ze<8JfSrU4?7Lm}|wH!g+uiY5AvG-x_v=v;hsWg(ILs&=i`Obj&= zL(dS7jy+EHZle1rKDsD?^f~K=H+*&w9qd6ri(Q=dyz^mL_(j4%wbhXYC0H~8e4*M^inc8j=9PF z2$)%p2wY{|g450LF8Elj(KY~A6kNNyA@$xo`U!WxM>`d{T7bL;`8UdW58q#{0&&!Kz6oGPJr5t@}J0~e1Yt!2S`GiH2;^zH8VAx`)b4#;h zN26oMom1bRy?eGfxT`U^Yc8>SF0z|)9l(`{s`5rtRVSvZ06i6x^Kn%@U&)!iq(xPA zOH);M%H4WX9+lJP!-+;rQ&kmAw{hpZH4b>K!M{?J6J7|`17zh2`YR+zk>yC2H1=#~ zixm62OOi(1Xk5(`@b&KSux6MQENW{No4F|IwED+@aLk2F*We!VjCn6Qk@vkPd_Wc0 c@<`YgATYofKS6^}Q2#&Tn|S0I0^*we2ZjbZfB*mh literal 0 HcmV?d00001 diff --git a/core/migrations/__pycache__/0001_initial.cpython-311.pyc b/core/migrations/__pycache__/0001_initial.cpython-311.pyc index da987705f081fe905c51daaeacd9266f10a7335c..4e5a67b9090ee6341557fb47440bf4d604eb355c 100644 GIT binary patch delta 38 scmZ3?w~UW#IWI340}%Z9zmaPu3vZBqXmM&$v3^NnPJYqmwJc>!0Nrg2R{#J2 delta 35 pcmZ3+x0sJ>IWI340}!Nr+{iVPh09+*BR@A)zaTMr^9GhOCIG6L3S9sI diff --git a/core/migrations/__pycache__/0001_initial.cpython-312.pyc b/core/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07214e1463a2a62f0e0b14be1b33b90bc17b6c83 GIT binary patch literal 1796 zcmZ`)O>7%Q6y6_u{TtW$Pf2VyQ4VpW*dd`1AzTp>Tnb5%Xb9AYj@F*>X5IC!*LUFVJHpE^En>t+`N%Q*N#j1mXg3ckRSg!dRMl@6EUG&G+7$ z@o#;7K?cU(|0bj#Jq+`Qt#pUCBb;PG_=dp@W)&vK!pbRJna}ZMPtLtYpOwovWAIb6kMP?hdav2FRUG%IFWN4 zW^+8|BsS;a7~(B;Q9WN`9@~4qQnbg|5itutFBT4c2f)@IMGpHN^nk1P&Ny%wJb>u- z09?qy4Y_*njKi2Qcg4YtUBr>T(!@n;DRPM|eu?ecMH`MD_8)Mr zy~s&kJb(u!)`>rL3Hl25OB^0L9PWPezsQip;*oP4d^P$Ve>m2yIn-&Ob~X7L4Xk&o zy#cik7c|u*s%h3L#GtYH`S}H;ld`r=P-h3(TSyhlgof@YRp|rSFg3kKIT>ducWX82 zp<%IVYN((S(Il9LD!N=2^%}ZQYBXRFT^1F2kI?Wo(es+o@fFbWB~mbvjE@(9canuR z6nBwARLR_;eoev1fN00hVUq?szL97G&<&?*J4nR%jDd5`y|G?CsU8Km1~e5xa}$$L z&eZlIHk)f(4jq{od!f1WC^TNsbmE*~OFqlQQa)e2{w5rG7rY5YnJCzx9w#-g;5&y$ zqDYEw6&*ZJ2YczGic-}@1$gQh5~NDhC##t35+lj$cE{=CHgBI+ajxa<*X9y?1%gCYJe^ zKF@IEbTASKw)yCQ@YRR<8{MQO1$x!ZcnarJ?q5KvTT*=vU^H;H@3fQCL2lL;Z7+_i x>o(B;j@z6!^d(U3H`_?S)aF^1JrNjo@^@zDR2XB0C&6ZPx*nbWlL5tX@E;h9=Jfyo literal 0 HcmV?d00001 diff --git a/core/migrations/__pycache__/__init__.cpython-311.pyc b/core/migrations/__pycache__/__init__.cpython-311.pyc index 8e3b021b88ab6110db1429be9539398f723c539c..834cd77db3e8fa7e88fb9bcb01ebb7b06bbcca02 100644 GIT binary patch delta 35 pcmdnNxSNq{IWI340}%Z9KatCf*H1sRIJKx)za%jyzi6UY9sstr3rPR~ delta 32 mcmdnZxPy^vIWI340}vR$n#g6w<*lEQpPQ;*keEEtHxB@Xp9vKJ diff --git a/core/migrations/__pycache__/__init__.cpython-312.pyc b/core/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0c9c3c188c8534b3808cc9976c4e68688cd15e5d GIT binary patch literal 175 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJz+&M!*U&&^CPN-W9D&nwoCkI&4@ nEQycTE2zB1VUwGmQks)$SHuc5o)L(PL5z>gjEsy$%s>_Z32-kF literal 0 HcmV?d00001 diff --git a/email_service/__pycache__/__init__.cpython-311.pyc b/email_service/__pycache__/__init__.cpython-311.pyc index a45323cb69ee1b828a95f8f23a787aaed3cc465f..b73b36b6f3ee53943016613d8e468c8fd9f8aecb 100644 GIT binary patch delta 35 pcmdnSxRa4MpPQ;*keEEtHwOTP2MG-T diff --git a/email_service/__pycache__/__init__.cpython-312.pyc b/email_service/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..52aef96b8af490a0174f3947237152c83b49d7c2 GIT binary patch literal 173 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)a^3oLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJz+%}vbAi3e&c%S=wykB`sH%PfhH k*DI*J#bJ}1pHiBWYFESxG@KELi$RQ!%#4hTMa)1J0H47wQUCw| literal 0 HcmV?d00001 diff --git a/email_service/__pycache__/admin.cpython-311.pyc b/email_service/__pycache__/admin.cpython-311.pyc index 895e3ab1a365dadfecbdf307d2492aeade29f6d4..a82116371656a5cbc298a1dc8cee562da2f30864 100644 GIT binary patch delta 38 scmZ1>v|5O3IWI340}%Z9zmaP`Gq0z9XmM&$v3^NnPJYqm&CI2&0N>pVYybcN delta 35 pcmZ22v_gn$IWI340}vR$+Q>DZnafQ-BR@A)zaTMr^ET#ERsg5!3OE1& diff --git a/email_service/__pycache__/admin.cpython-312.pyc b/email_service/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3b6e3097180e53ef3047b801a057c8edfb323d49 GIT binary patch literal 2070 zcmZ`(O>7%Q6rR~#d+oIyyFWDjN!@iCD3&UxgV;#E+_}W$kZ9CMl{od5DwU|Xz?)gSOo40Si z_wz?CXCYWm{ykA&NFel=6oxA~V0Kr5xrGQKI6zJ8U@Unp(3-lVD_#$bX2MATZ;(Wg zY?_XVk%lO46o$^8?bN)BV@X3FAd=rL~{(HI|*VqNs=H*qWQR{5tF1ynpi(-z-QpuS(1}{O?S*yRKsNCddf*D zE)QIK6@85z>nbW2#OTY>ysKW45QdCeq-!i}x-G9sg{4?3!xt$=+dAv)L3|=ZD6cZVEwd%8YkrgR$ZNJaLgL1`=fe(Ev?Nn2drAk3`yaRgkXBWl*-=`{(lHr<^iA8F@j- zCZh!gAT9Ze{vOsP4X;%X-Bt*my=pY6fO6s5SALaFst%~MyX*+KT%J&g9A-$Bxhky6 z-bjmJ$t8KxL-+Fs*OvPElRtg1kw3keKi|)vzc;gyzqFpZv{Fb0)t4#qSl%L$viBR zxdIL7qZR!Q{tiRRj5uW?8TW)p4YO4?g(2IE$;gBm&Nm=+T7D#7b?;O^f93bjfUKvkuoK{{oDnHk%^24emg_b{(g|REh^z}m?FAAZDFr@{ zT;lU~;C00TB|Ts1BFCYrs|zs*T;!onN!Wrx6^|E~W@^mPh^s19D2Uvk8>%!2To;Cz z!b^_p=@=_n156S*n>hpWe*K zMAnE%4sOVOlSAKYms#NdN!< literal 0 HcmV?d00001 diff --git a/email_service/__pycache__/apps.cpython-311.pyc b/email_service/__pycache__/apps.cpython-311.pyc index 7a17674be8bde4bf490f1f3d2051db734652cc2b..ebed18dabdfea27954d58c8385f0b6fda35735d6 100644 GIT binary patch delta 38 scmdnSvXg~tIWI340}%Z9zmZFxk=H{%v^ce>SidAOC%P6y|}vhaFZx!C)|HH8-IZK zQ*11cfR&YcGPkz-y}+Jp{p&NGCi5gL?Ema5%@shaca&^wlvsh43M3oknrjPomY z&i+882SZVe1jYT#`!|V)lO%PMp-{IhgC#*~%P<0y&c>6qIB723>0Pw>MrvLx| delta 35 pcmaFBdzY7MIWI340}vR$+Q@aBiOXF-BR@A)zaTMr^F1ae767+63UdGe diff --git a/email_service/__pycache__/models.cpython-312.pyc b/email_service/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b5e582e8c19f8cf5d0fe0e5872b47993424666fa GIT binary patch literal 1659 zcmah}&2Jk;6rcU@_vboQ0>q?CN)9V3`;r6%QAOl5g`lQ~1P*)XXyYB*o36cPcAeA~ z2Oo0Cu}DZMLWpuARU*;#OCbJVL)Q<7@>+%5WW&BcvmpGf|aOIgaVP$yWtc;1G{)Aze5?x=6U)@Y%=X z_le-^YM>cVf-jh%aBi?_>BO`_6SoY96vzGui6dk9DaR5Mq;fh^c^(nrvIIJJ%AbHI zTWY}biu=~2JQ*2k=-=b$!l`%yFtDYD|2I;^^SI*sPf8MlO5d8?@%7WddGv($ZT3wc zJ$M>A?rJ?s^kqK3WJE9XUR0^k_6XgvY~lkvHEH3x2~0B|Bg#sp84#|>%AnJrrs1&}3<-blnPALtBZZ1a*BSrZkXASFJ<@ceUI*SLWpQbWd4?&en@#LkZgkzE z#3munc<0#ZNsH}`mm(MV@UI{rSbB*-_yw~vHz6F<|VR&uSmEz-{)s_M5#3fE!-%>2ZU80O1)$?O71N3mnHiN7?7-`X6GFTY5PC OQ}+App9oa1n128ni;-&p literal 0 HcmV?d00001 diff --git a/email_service/__pycache__/services.cpython-311.pyc b/email_service/__pycache__/services.cpython-311.pyc index ef592198c3a112e8023b04a103db79222af2cedb..8815580750ce3a78f6bd4886e764c72ac4479dd3 100644 GIT binary patch delta 38 scmbQDG+l{nIWI340}%Z9zmaPL7q5?gXmM&$v3^NnPJYqmBU}M&0N~6Fa{vGU delta 35 pcmbQPG)0MPIWI340}vR$+Q_wmi_23#BR@A)zaTMr^Kq^KHUOxg3O@h< diff --git a/email_service/__pycache__/services.cpython-312.pyc b/email_service/__pycache__/services.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7479f9357dbeddfa23931b6dfb9bcf1e9b243cac GIT binary patch literal 4000 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 X3FvqXT#teKUvz|`MqUEk8>;>T?1ar= literal 0 HcmV?d00001 diff --git a/email_service/migrations/__pycache__/0001_initial.cpython-311.pyc b/email_service/migrations/__pycache__/0001_initial.cpython-311.pyc index 797be11bb48f426c9176475832a4f50274611788..13f5c8cc7d703d6811180b4b93b9ad1ee08fa2b2 100644 GIT binary patch delta 38 scmcc4cZ-i}IWI340}%Z9zme+@3vaZ3XmM&$v3^NnPJYqmYb=dS0P!vjB>(^b delta 35 pcmcb`cb$)GIWI340}!Nr+{kr^g)2foBR@A)zaTMr^G%jUCIGyQ3o8Hs diff --git a/email_service/migrations/__pycache__/0001_initial.cpython-312.pyc b/email_service/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..02adc10aaff89b7262e86974e2ae327245fe8223 GIT binary patch literal 1848 zcma)7%WoS+7~hAV8z;3LCyrCUDuTdKv@rxDklI4x#1W6?LWorNFxq6s_NMFI?e03M zb3jGvfn#svz(0VJ1Dwc_BNCUjWXaZCsDMjuMhOz)K$)3!sG|hL9A>}Q{J!}f^X-r0 z;}S>KA1`wCUws_+3uP{re@L8F2=OHcIml~Vl_y_86PjXGZ2GD`o)frr4vJ4X=tJTz zL%RU*zDJ_>t@_)1!GB7bje>xsrdqcYM>TXC2bu;%n!V#0di#wbbM`Y&y(8wiDnPy} zLZQxAeFBI4yOGf&9t}lEb-~@}H98*h&<_L0!6OnaT{QuQn04IaM|T)LmX3&bx`^Ev zvrBmV=nf;7?8g5UZ-OA+I1;?G1Tp$Q5o645deo;!L;g5Ea>L30uuF{CO)>+F0uo2LeCc;6*RH?=33ld0yCq1e>1{%`qP6JCd z%V+{beV+bB)Huup^xQ#dvw`xI$~z6k$?vP0mRC#@DOO(9i45f{_M=AP>8xAwow0c+^rfdWvvCRaYHS0vv(JL^?$Jj*4uHP6|9$W;MG< zM}kFPDUPhD^<`4c3e6u5mm7-ZkrKPOM~|fm5``IGYU>Kc{|6AdTP*W4L#$o=_X@l(Z^`SaK0uL1E z1|av{aTZxo0Xep(?x4k&(`}J-@Ec$luxz%i0P(=KAR+8L88A<|=M(WK>w^FnmItDc z2t4_CAaUW`7g8^j?S!)Z*sITDQ*Ltp*-$~A&_KFS)3@E|oqjCi=8A`VyaNKA7 zvT)9ExfOvhv9i#Q-E=eZ;Z`prcQW$HE8WapH~JpKTcUVNo!rv*iEggqM%OP(Pd2-` z6*pS$$C7Sp{&2dNn(w6MzuEfk{QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJz+%}vbAi3e&c%S=wy&&^CPN-W9D v&nwoCkI&4@EQycTE2zB1VUwGmQks)$SHudmhY^U2L5z>gjEsy$%s>_Z5q2`k literal 0 HcmV?d00001 diff --git a/media/__pycache__/__init__.cpython-311.pyc b/media/__pycache__/__init__.cpython-311.pyc index 77164fe62f86183283c7033637ec253695cf7f12..c5b655264f61e33898eb1d74c69754471d6c2666 100644 GIT binary patch delta 35 pcmZ3-xRH@-IWI340}%Z9KatCf*F`_HIJKx)za%jyzi6UY3IMZX3n2gi delta 32 mcmdnUxQ>x)IWI340}vFvpU7p#<*1*LpPQ;*keEEtHw6HPhzTzM diff --git a/media/__pycache__/__init__.cpython-312.pyc b/media/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b302c4b2b05529042e8bdda887ddcaabdc033b7f GIT binary patch literal 165 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)R;2oLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJ#SO-;#6)Q^wP%*!l^kJl@xyv1RY do1apelWJGQ3N(}vh>JmtkIamWj77{q769=+D)ImT literal 0 HcmV?d00001 diff --git a/media/__pycache__/admin.cpython-311.pyc b/media/__pycache__/admin.cpython-311.pyc index 2c5998754948c7a9060846d88de79d86ad96691c..669ce76c6f03b93a1b99d2f1fe88530ea7b05ee8 100644 GIT binary patch delta 38 scmbQvHH(XDIWI340}%Z9zmcnyiPup-v^ce>SidAOC%LgK_N?Q*DkY3Pf{l3*0c zz~+X2UN^#!5m?-?r@V-1mtysyW50}a7xb;b-rQSXr)k?4Jif8==*fyNWS@~6D`~WQF(I^_$m{;)weIeBzOn33 zER*a0r8Q$&@mm{v-e&IWs@o*6m0JLAVk*1GSzswg5Voys&6Y4>egEH^t)B(qq9r4i z^Oj6FWo(Dur=LKCJ5kooQI;c3WGq`L!8B?WH)FNiFZkL!ebl(sFS=$Z7J(K6Fq&;V zzxM03w+qXo`OVS%!m#?XI;_8}k6rsj;}F>O#-Ru1PmT3vpsGJj`@b1fm4{Fkr34{W zLnzI0j~P6N(1TvY%9S}rg+!Q&E{pnVw$QdIlZ30fAQ6ufv`q=aLLJk!;5=jf(omG4 znj*=$c0feTX>pZ)1AIy6!WWG&m$eYC2I8z1&%nEd2ZLLq;~Rq?Mkme>ZjY8O4DS5x zRNPaC4RHR-AI{>R&bf&TbJ`Trm=L;ZE-$BB+}s=0ER8)$nOHT?Y|^=ku9Psr&Cfx3 zoV0a;x|-T;V=f-bBr9L9A7!e%^$9~8++=AUthlPhp$#EC0R9084#3HG@YrDSm*uC+ iFWlE~>7!MLS6(c>X`Xr2JTnGb8QZ}6<}YI|JpT_9%rn^l literal 0 HcmV?d00001 diff --git a/media/__pycache__/apps.cpython-311.pyc b/media/__pycache__/apps.cpython-311.pyc index f6b6590d05944c70d055824b1824343ec6c536cb..8226f8b1640ecdb8cb104292235d82871c6a710a 100644 GIT binary patch delta 37 rcmdnXa)5#v^ce>SidAOC%OV diff --git a/media/__pycache__/apps.cpython-312.pyc b/media/__pycache__/apps.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e06c3b81f2ab8f076d980603fd8cdda71fb01d02 GIT binary patch literal 499 zcmYjNJ4?hs5Z=v0&U>hwB0dnY5z-{Bg@~u3jb3MyX4$*li_y))O`@EY!uz46$`dEWEaFaj z#(l=F{R{seMa7mVj1Z@|n>zVg4vyo*j{97FGY9pqq$yzlM$20-#^R{fygeAruiPE; z*~w7b(nYO2TRCv0Dm-Qs%LnHq6P4}a!X2(W)qj%(2_HIy@D*%)8aiCPx4wW(x#|z@ CiG>>g literal 0 HcmV?d00001 diff --git a/media/__pycache__/models.cpython-311.pyc b/media/__pycache__/models.cpython-311.pyc index fb448c0dd4e722140f415a726aea05ef16a5e2b1..a2b07ce1b75d97e1e0ecc253ec782a0a918dae76 100644 GIT binary patch delta 38 scmX>geOQ`nIWI340}%Z9zmcn%iPuR#v^ce>SidAOC%seL$LPIWI340}wR6-^kU>#AUCak)NBYUyzu*c@~o7&-6`m!R+$FW5L{XN1C9R^LigrxZwbMFw94nD6SB@K;;3vT{D7 zOL<)~u$;0+a#&I25hs2Uvx_8Zf3xIRLZbIJj=&kzljb~hMYIz{oyTgi;c9HS7E4rP ziQ=_-xT6;CtA_iEW1k06$KkcuTDqM2ApL%ND|)hc6?oCu1MYWRtzE3Pi{(RG?Z@f85o*ru;s)DwS`RFIQs6K~>~P>Gs;GwdC5hb!Pp=^`1)0*$R7h7mh|L+Ih{3 zxZOWM4E!1*7NaDiprlV>l71h;Y_<_k-WG&#aKq=tMUu0n+MBB$rT7(gBk;(Lb()l* z?f=V#ZMiN_OLJ6$8(ia5!Iq*n{YHZ``G!>FJETGlsWw|m{DvZ!;wapB;M@F-aO10D z_TJ%d%RF*f$pawKrL-tQW6wbwo>~E(A`RXlr44}Va0#UurTreCJW@gnO!6pXR+I#8 z&;(j~$ps}RpF}&@L~BO2#FU&Dr?CjhBBy4sB3imA=NBCbK&p@%hL-;6S8%JTxQ~Q$ z@`41pl7WN@Olxxf&NziM1*hdX%>q)8=PVlE^OCG6Fz3BF)u-nr07`7Rc@}aKR#KJy zLu(Wc-5XenFXMZDaM7^I_#kjxP|7gL;9@Y&eHpgRkhl)0u+(x=HKkcY&B?|hOj3}A z7FHzLvNPWpf)nAQLCAVdF(>03;U$RzgCvo#B!TJXG)fDS^z%7cb60rXPyqGw8G|A? z2~6Y_yg)dW4%qw?GL8bclMPpRAQ$}{3pVp()j&rE7!_B zn@20+g>B*09ltLYUf~=ar$9dCejktsQ7EH_?k1soUfBS^WuQpxQ#{-iFPTAy*A^Jl z2h|ZE+kxrHCBJx5TnbO>5H+)ws^{Z=$7Zxz5YA&V0M}ScoAi>R^Ua(jnU*0*ORbJ0 z+-V#n%pX8kMD>oYT1S7iqrVazD37hPwc+#C;q#U6z4GDMU)hg@zX|^sy;Zq!t8($D zmA2az{2Zg_Jf25l%Og;M}YN zIYR>G+$=4PrhFI2S>p^{V`U=)8t%;7V@Q%xnrxcjZyI1wCX04J7#Co+kD;$tCt|N6@HnjlsMvEJQR>rPa=6ZIoK? z^UfkQE@{04R+>_Cjvf+jLJbK!CZw=K!p*0mL4%lZW3SyDd+pL?+X1BWhHk2sdKXW? z6EcI{)2U+(YEy$IpFvTfomt^sAGTXaNFw#=)y%Kr^+-=CU5oToBR%W=n^W77bHyw5w%*d+T3c_mt#|$O zrn233zWC#MbYQis79FTY2iD)*j-D=Ftw#qbXRsO_+&r@#J^MAzy0slWQ@l#wGJ~r> zti=YZv4QeWJ{%drX@+r#( z!v8_geI_sgiFq3214BCqItL`_=fwpQa^6}AW!mxT3+|l077cYe;l3K_OVUg@fN$HB ze5auERC8Pvbv4des%9n{PfLRWksCPI=|2P8*2ecKw^<4JSDb3{s&Nw*Xnva%5qJCy l!#qL9o}keu=-d-D_)ir2j1`!dKR?#X3^~Q&3k0OC>VI<&4$J@m literal 0 HcmV?d00001 diff --git a/media/migrations/__pycache__/0001_initial.cpython-311.pyc b/media/migrations/__pycache__/0001_initial.cpython-311.pyc index bff55197040c0808616547af1aa320f49b0af9ab..9d08367ff28f0df90ad2f4e9efdb0ac558d1a754 100644 GIT binary patch delta 38 scmX>ia9n_EIWI340}%Z9zmcnel{Z*Fv^ce>SidAOC%ua72J>IWI340}!Nr+{jhH$`zoWk)NBYUyzu*xt;X@69BOi3Z4J} diff --git a/media/migrations/__pycache__/0001_initial.cpython-312.pyc b/media/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..edcb46ebc87d292bf5748ec68610b40d9ffbe18c GIT binary patch literal 2111 zcma)7OKclO7~WmmYkT7aJMTJv5QwTeY2wtSg_asA4^mQ^QmJXA`q0(JGudpq-Zi`H zG^qp>sRxd|5hNryg5pCs5l-ZY#AR1lT5C8^iBoSzDH7sR{(U$xN`x3oJOBUBH{blP z8UNhf%~3G^dYKh#A&UClQQ8A^cO2e=>2nHEh?c1m?aoXo05c;8E1^=T!j@Q?VyNpB z3Ou1u5QjE;{JkC1ZopGY;cYq>dhRH~WDvZ)fKhh3c<#oE>*@sZN9^Bf6gG z!1ewIuCD{v@8U8i`F4F1L^0rEUOkDyiH)(7)>CtO_7vQ?lQuM1A3DyT7)8VAjL5j> zkDr1bK>Z?vlJ$}H9+5_=FPVC}-ILHqgWH*0mPD7@-M9?B87r%bffd8pu40{}r>Cb2 zyoM|4Cg%MW-dW-mp@K>1_PT1Qgptq!VHW3eK@t;chRT;UEEpJ(uBs+g1Z|stfVW9h z$C@O_(j!b_n^;>_^)?G&M4Y2Zv{sc>0r5Z?E(=xXf;@i-v4LBmRasCTz|9f1co{3A zu}&g_Z14u&G6*N>ynhm~gb`j7YBHF8H+aDSv*($jKI8?22v@5j$3<@~;(85hB&x1% z;IhF>=qM9zypM)E^D@<;fOAn*;o%Zv0~5wjA9YP0`vc0c7bH``ND}y}leMFCPG5NI z&9zH#;ucV`YZ8``PJ&K;L64{!g0v|j2}=sXTUgHpwAUdg+H3G3Vb#r&ek(UbBD`A^ zo+lj7!>dx0F~~8V|F9;=4jpJfA{kHw5<|F(flw(+Sl66qigeAnRaqUs&}w?#5M))$8|#`R%MYaoQisTU+`OVfa|>l7@5YlqewXvm_!oFTTT|6- zjRj`+69Ga00G_-j)U%%6$Jbjd6}{RDF#YV~n=OutWS{A}ZfD`En_t}A%N&fD(@W;E(MZ+IkQIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJ#SO-;#6)X&XKFG?)Q%+D*x)IWI340}vR$n#g6w<*1*LpPQ;*keEEtHw6HKrwHu; diff --git a/parks/__pycache__/__init__.cpython-312.pyc b/parks/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..91a2dbaf58de09448a1710d5f35ef5519fdceb4b GIT binary patch literal 165 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)R;2oLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJzcNG!@O){l?R%*!l^kJl@xyv1RY do1apelWJGQ3N(}vh>JmtkIamWj77{q76A8aD-!?! literal 0 HcmV?d00001 diff --git a/parks/__pycache__/admin.cpython-311.pyc b/parks/__pycache__/admin.cpython-311.pyc index c7f19b51f1998e1b37e993a1c6fb4d34a8590105..f0e57c7f3c20a7faf0b116f9d4e9e0e185a6cba7 100644 GIT binary patch delta 38 scmZ3_wTX*sIWI340}%Z9zmY46iPup-v^ce>SidAOC%IWI340}!Ns*vOT{#AT3M&8r diff --git a/parks/__pycache__/admin.cpython-312.pyc b/parks/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..34f175df78a271e9c541cdd196b3214df6d5bc9f GIT binary patch literal 1169 zcmbtTy-OTH6rb6z+dJ>n_!XjHPV)gvh*wxdAq1=v@?ioY%{Ig4W;|DCKQg#egjABoaH&#d-rSyv5UULA@4b2RzTexUTCIZAIa;Z=z8eUAgUj$Z z1=Ihcn0-VM#T-T0#~65n8dsVQB|63S-4gybYt2vu9zJC!(_k(sRhh zGoD_49wxE0lbx6e>1273w=-EyQWl4Ci_jovo*`-~jHoK`OaX%tBMRgQ zWm!{%srF!Hyxls$`uV_=Mo49)sq)SlB|$DL?G$_gzkc9Kmk`K+5LqE4N@$w{UnS&2 zJK)7jm8-508fGaEI&wtcHbS1OJZl*XM01mDgpAWnPNssTN!sQ*LLnSe!D$lnPN8*x z`YLJkYpwAvVg5H&Qi(tf7atly*cJS^!|H zFI!Nsht4LScVG4$7zi@MU%Hvc`y+HfWGx)c+U z7UU>kzdbBqE!5cbsKy}hIKT~n2?gt72H4vGbpR+q+!+E)`?9KKsA>+XdT?D;V7Ts8 zM-86wOu!E?1|{CNgF& bKyopPjPXLvJ;ApIYE$#v^ce>SidAOC%?__s$+`ajCZmqVSrWh`9&*RrR_org=8$=+3g0(`+L+2L&mU zkb07(zVy;S`b$Vd(sBJmVUBDkaXgYAMUj=Ud>_wBskDt><=OtcF5l!zOBYrYJGm97 z8XkVsShI-+o5wO5PS^q>Z)}Lf9tUk&Z1b!T+D4uWtkP4nhODKK-QB-?$vdlzO=_V_ zlhhwfuJz~qD8C1J*BdWNZj_kRNvoQOsAq z3_C=#gv+hx--E}O{o(0B6R>d9g;V4>@?C$mYZ|~%R;NL!ce<|kqU-IYd4vRQ-V(U+ U8Dl@->8~JUqqFEY;MHdR2dEU8r~m)} literal 0 HcmV?d00001 diff --git a/parks/__pycache__/models.cpython-311.pyc b/parks/__pycache__/models.cpython-311.pyc index d82cffde95102c14fbbb0dd7479300c9c883b8cd..8fc0d415f91dd83656ac7ca42ecd758e5ed85cbf 100644 GIT binary patch delta 2358 zcma)6U2IfE6rS1t+x_X!vOlHJUTA?Xu#|13YhWR^r7a>LvWT)G%VzK0mi4w<=Wcd3B`V2&dXt30f(6ss3=#CQg&ic>WzuEqMi5oqw1TC73P8Y^QF zs-b3sP5*=Ae!d*WQVg)A#&R67J{V(L1j$oftO@dgdw1teuqk*;E#?(GUuFD)jQDFJ zZTXi-&B&WcZ+#vLf_ZAr*CK*#;4FG;E?^rlwky6GYpbyOYpiWxmGiLR!^)yj65Aol zq#4R&Yt7<2m6kaYYo8}6s%)FH#X8ho%Jw<3DFBJ>R$76zXP(@kvCb$7wDBe5cY{x{ zh;sYSU(W|EUlIh2I}EgEIkAJpnIPdO}eV3bS!C^bpsZy@wlF4@p#U0Ho@LIP#zry zmyQCQC9C!B+fxObpN05?rhD!~V7zaJINIb0!?I@k_=i?E4f9W}yFD0^9Rj@fKo_0@C{)x1U9^sFqskUJZWGot!n$C{kv{L{&DngcFZ~Ro-QJO{qi&jw&@$P`R zC{0Y2okgkCxvJ{yBq1|!No5biTZEzr!-ri2(D9gCM*L4*VR4SPpB?!72Qp>Bq* zs+uA$y=c=i$wc;QW?USHbNgTK;LcbN!pjI)O+|ZBOX&KTnjOt3>>Qe7Xm-Zq!jV)p zEgrv5Ssz$Mb-yA~!fZ%Iu%cs}|LREkT&?q|6<6z5I|^a7;7UDl!6-F5yxiyfk#=}3 zW_gYL7qHNBSN+el(+d%c<^)p{I^0MzE`+}>)`rl5up6P1_cXp%I=g8C6ef;+CScx} z9^`fLFB(0~2eB(uE0iR%kONzaf8W?yk@Me;7eXH(5i`nq0X7I)BrVr~7vBeas|Y&H z=bCm=A>kt^VTKB4$8avzJ4kM}lrbS*XLULXcnqoi2q@xv)Nvg8Lu?Q&Lwtv)-G2hR zX91q;7cJ-bB~SAV!)_GeJV2ne_T;EYb_qe8=UwcHA3_{^R}c~ic#TEtKwosA@Ax1S z2~g3VLKs09N5~*dAmG8+`$LEpgclSR)6pRc3jZT)5@2KfTt_3qh2_KEYt$~T2FC#h z|He0Vn7sx4qWLuZ=Cx9>i5Z)(@tG|$mQf}(^%(mY==hJ)AM?xpv;C{2p-_3&Os6S@ a+Iun1_uh{DE_{D(WL)OI`Cl>NuKocwp5yia delta 1858 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 delta 32 mcmdnMxR#M?IWI340}vR$n#g6w<)ELDpPQ;*keEEtHyHqeTL|d@ diff --git a/parks/__pycache__/signals.cpython-312.pyc b/parks/__pycache__/signals.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d46b9eef166da7e6fabad9ac69c5bffd3472b3b9 GIT binary patch literal 164 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<*XlCoLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJzcNG!@O)-TRX&r8fH)+?yI#bJ}1 cpHiBWYFESxG?NjCi$RQ!%#4hTMa)1J0Ls=X(*OVf literal 0 HcmV?d00001 diff --git a/parks/__pycache__/urls.cpython-311.pyc b/parks/__pycache__/urls.cpython-311.pyc index 150c8dfa877028047ca1dbc7b8a667c041c9ae6f..5578de9eee88753aae709925e755add24158acf6 100644 GIT binary patch delta 38 scmdnXc7Tm*IWI340}%Z9zmZFYiPu3tv^ce>SidAOC%<{9 delta 35 pcmX@WwwH}-IWI340}vR$+Q_BC#AU0Wk)NBYUyzu**_w%!5dfZ52-N@p diff --git a/parks/__pycache__/urls.cpython-312.pyc b/parks/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..835963909bc44a3a063e27c513d9e71d77e9ee12 GIT binary patch literal 747 zcmaJ-O^ee&7@ld8Hf@^jT3I9@7CgB0(B`xVOIbWvyeuNZdI&-YPUxncv|%Q7**%Ef z`VaIcDC@zaKSA)ap$ox*g5YUAt?Wg-=sU^AEFPT0JJ0*^JoCKs*)$sn&d=YSQGgNp zCX?dSF2Tij0Iv~21XC1Z2V+DkM4^>XaTLIas8kI#M+2-m)e7=4srt&eRS1>$_*#hz zbbJX&?Y(}il z8GMUOwC90;zyY)#2gJYc$6i36KuKtk$0l4LQJ27_0gokj>V^JMbHM3*v@OGqEsSh{ zWYnYEc`GaB{k*_H-7N@Nk`o?w4PlV6HyzFTb4EFnU&VA8Gzh|wv%H_VWK~(wy(n^} z4bglA&UV3AX1L~YSB{C6EMM8g09{x)_SuxbLl>Zde%-V8xX-v9dvwO^c%KE79t4x% z3UqTLpe$wYCy#YiZs67@n%T&^oF2 ePVC{^7pXl=?BUXW@Ch1E&ui*h<(0uU;JrWe)WKB% literal 0 HcmV?d00001 diff --git a/parks/__pycache__/views.cpython-311.pyc b/parks/__pycache__/views.cpython-311.pyc index 959d8d645379c4db785affae994818b5c4903cb4..eae60237b874b88ff7a7e3ba499087987ca75f4a 100644 GIT binary patch delta 3023 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 literal 0 HcmV?d00001 diff --git a/parks/management/commands/seed_data.py b/parks/management/commands/seed_data.py index 9b3b0693..9c2c64da 100644 --- a/parks/management/commands/seed_data.py +++ b/parks/management/commands/seed_data.py @@ -1,12 +1,14 @@ import os import json import random +import uuid from datetime import datetime from django.core.management.base import BaseCommand -from django.contrib.auth import get_user_model +from django.contrib.auth.hashers import make_password from django.core.files import File from django.utils.text import slugify from django.contrib.contenttypes.models import ContentType +from django.db import connection from faker import Faker import requests from io import BytesIO @@ -42,70 +44,68 @@ class Command(BaseCommand): def create_users(self, count): self.stdout.write('Creating users...') users = [] + + # Get existing admin user + admin_user = User.objects.get(username='admin') + users.append(admin_user) + self.stdout.write('Added existing admin user') + + # Create regular users using raw SQL roles = ['USER'] * 20 + ['MODERATOR'] * 3 + ['ADMIN'] * 2 - - # Create or get superuser - try: - superuser = User.objects.get(username='admin') - self.stdout.write('Superuser already exists') - except User.DoesNotExist: - superuser = User.objects.create_superuser( - username='admin', - email='admin@thrillwiki.com', - password='admin', - role='SUPERUSER' - ) - UserProfile.objects.create( - user=superuser, - display_name='Admin', - pronouns='they/them', - bio='ThrillWiki Administrator' - ) - self.stdout.write('Created superuser') - - users.append(superuser) - - # Delete existing non-superuser users if any - User.objects.exclude(username='admin').delete() - self.stdout.write('Deleted existing users') - - for _ in range(count): - username = fake.user_name() - while User.objects.filter(username=username).exists(): + with connection.cursor() as cursor: + for _ in range(count): + # Create user username = fake.user_name() - - user = User.objects.create_user( - username=username, - email=fake.email(), - password='password123', - role=random.choice(roles) - ) - - # Create user profile - profile = UserProfile.objects.create( - user=user, - display_name=fake.name(), - pronouns=random.choice(['he/him', 'she/her', 'they/them', '']), - bio=fake.text(max_nb_chars=200), - twitter=fake.url() if random.choice([True, False]) else '', - instagram=fake.url() if random.choice([True, False]) else '', - youtube=fake.url() if random.choice([True, False]) else '', - discord=fake.user_name() if random.choice([True, False]) else '', - coaster_credits=random.randint(0, 500), - dark_ride_credits=random.randint(0, 200), - flat_ride_credits=random.randint(0, 300), - water_ride_credits=random.randint(0, 100) - ) - - # Add avatar - img_url = f'https://picsum.photos/200/200?random={fake.random_number(5)}' - filename, file = self.download_and_save_image(img_url, 'avatar') - if filename and file: - profile.avatar.save(filename, file, save=True) - - users.append(user) - self.stdout.write(f'Created user: {username}') - + while User.objects.filter(username=username).exists(): + username = fake.user_name() + + user_id = str(uuid.uuid4())[:10] + cursor.execute(""" + INSERT INTO accounts_user ( + username, password, email, is_superuser, is_staff, + is_active, date_joined, user_id, first_name, + last_name, role, is_banned, ban_reason, + theme_preference + ) VALUES ( + %s, %s, %s, false, false, + true, NOW(), %s, '', '', + %s, false, '', 'light' + ) RETURNING id; + """, [username, make_password('password123'), fake.email(), user_id, random.choice(roles)]) + + user_db_id = cursor.fetchone()[0] + + # Create profile + profile_id = str(uuid.uuid4())[:10] + display_name = f"{fake.first_name()}_{fake.last_name()}_{fake.random_number(digits=4)}" + cursor.execute(""" + INSERT INTO accounts_userprofile ( + profile_id, display_name, pronouns, bio, + twitter, instagram, youtube, discord, + coaster_credits, dark_ride_credits, + flat_ride_credits, water_ride_credits, + user_id, avatar + ) VALUES ( + %s, %s, %s, %s, + %s, %s, %s, %s, + %s, %s, %s, %s, + %s, '' + ); + """, [ + profile_id, display_name, random.choice(['he/him', 'she/her', 'they/them', '']), + fake.text(max_nb_chars=200), + fake.url() if random.choice([True, False]) else '', + fake.url() if random.choice([True, False]) else '', + fake.url() if random.choice([True, False]) else '', + fake.user_name() if random.choice([True, False]) else '', + random.randint(0, 500), random.randint(0, 200), + random.randint(0, 300), random.randint(0, 100), + user_db_id + ]) + + users.append(User.objects.get(id=user_db_id)) + self.stdout.write(f'Created user: {username}') + return users def create_companies(self): diff --git a/parks/migrations/0002_add_country_field.py b/parks/migrations/0002_add_country_field.py new file mode 100644 index 00000000..c3368472 --- /dev/null +++ b/parks/migrations/0002_add_country_field.py @@ -0,0 +1,25 @@ +# Generated manually + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('parks', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='park', + name='country', + field=models.CharField(max_length=2, default='US', help_text='Two-letter country code (ISO 3166-1 alpha-2)'), + preserve_default=False, + ), + migrations.AddField( + model_name='historicalpark', + name='country', + field=models.CharField(max_length=2, default='US', help_text='Two-letter country code (ISO 3166-1 alpha-2)'), + preserve_default=False, + ), + ] diff --git a/parks/migrations/__pycache__/0001_initial.cpython-311.pyc b/parks/migrations/__pycache__/0001_initial.cpython-311.pyc index 84939235f63f334350599aa911b220b09329869c..2dd8faf8f458cd1216d61d1f9559be5bb5fb606a 100644 GIT binary patch delta 38 scmca^dCQV(IWI340}%Z9zmcm)h&Nb2v^ce>SidAOC%h;Q#;t delta 35 pcmca*dEJt0IWI340}!Nr+{o1<#1){Qk)NBYUyzu*d9jc=7XZT&3g-X- diff --git a/parks/migrations/__pycache__/0001_initial.cpython-312.pyc b/parks/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3599b5afe0b23747061657d34a772924c145f8d4 GIT binary patch literal 7669 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 WDn^1XvTdt3cI!wQPX1y|^Zo?bt{DLU literal 0 HcmV?d00001 diff --git a/parks/migrations/__pycache__/0002_add_country_field.cpython-312.pyc b/parks/migrations/__pycache__/0002_add_country_field.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f9985088d396852a54e620347c04630fac9d6791 GIT binary patch literal 988 zcmbVKL2DE-6i#Mlr!&)SUDtwOTUnN(4%lv6p(iPbP^oA=)LsT8#7(+8+w9Dk$=a?b zg&sWi*0VRIJ&XTA1Pel!Ts`%+(2C&6WOj$vg9rxl^1bAHFYkTH=dm#lsPS&J()eNk z@LfCkC=9{rvI6^n00J3k!vMC8z<|I24*)TC0Wm3T*?G|UdSDK4V0JCPaH1XGkX}1% za4f<&N~PV731w;hJO+TQ9JO)!QJH-}K>!H|3<4W4FbzPhR?fH(MGT_P?AG{&%^@Tf zDG>W`Brk_JhwgzjIQ(lq@Bi{OjKJxR`bFtJ&bw4C7ZS|3QdyjzpI<;>6p9ctY3WTl zQja^4;N26YJ&?x6`m5Vdx8qqxg`m7LJX9;8m0PRpPbzm7mX>B0DwrirJiF-orqUDd zAV#BxXvz^nH*tpv={6}#kf1wa#kUki%Zwu2rqar6VKbzR$Wp>-O8HBQ^1$(Cn2MN( zb#;TPZ_Rh5gR)43q=%5o)L~TNB0?`ZnCWcVBQ&8Ap;0}gDcA2VoqL3==v%nfTDtd} zm}kE9;)D)=zz1-uAL7@u+J>qltqIIxUK33oGPWIVg%=BTo<)W)Y|!P zswsIF5her;WkXq$b4i!$&zTtw(vC8_pl<`W+Bb~}`}L!~2i&Q*-mx=zy@i}H;&8IqjL2<{xtD*b^BX+r#D?aa|^E5FaE*5`A`0(v9kT-o6rX9kWm`TX8xs$LK_kjuSoBOxOo%2%x%ib7lF85+%PiA&nd$m*)$&!Q6533AT z?Gzl%1K2_gF)UGvBb+*sgOP(CBIdkD%;mW44wAM3eL2%2mw8W7vvy$JO~-_(NE9tZ zo@wK!Ipb2tgG~D!K2?r(0Bj+SBFs?aFr47XbrAR3gQlP~vlhQSbee;h$7;-H-tN%0 z2Tj24uig6ZP5p6B@W1CIPE=Z3X*_E*WArsw zG~vXOkR{I!fOB+U>1ukWwjyZ;F^tC|rIK_cjkyNS=v%@>A_{H1tSe>H1)JrLWHjYq zv$FO|aLLTrs?bHQL`q-uIgplsW z?=$wmo~bO6W@Mq?Rb?_^-hnx)d;E-!z>iK=TF*6Cx>Zn_t5&h9gp_Z@nm7juYtt;r zNtP4EX zm;H^$Wr%`_4`Hu@DPDG zw&Hx^?SD!f9d7s=kL;r+2VE}0r3U?(XW2?cYei;%jtLu9#a;t+QlIbN%{?^*Du%6J lfGAyzG0cXWduZn3Tl(YJFVRJ@8TKySJhYDEzj&*j@bE diff --git a/parks/migrations/__pycache__/__init__.cpython-312.pyc b/parks/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc71322af9c7fe342a05ce12895f119151449cf6 GIT binary patch literal 176 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<*y%FoLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJzcNG!@O*3ZpMFG?)Q%+D*5q delta 32 mcmdnYxPg&tIWI340}vR$n#g6w<*c8PpPQ;*keEEtHw^%TKM3^z diff --git a/reviews/__pycache__/__init__.cpython-312.pyc b/reviews/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ac03f7ef56942b7215f3a06f59d7dec8ece6a82 GIT binary patch literal 167 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)$B6oLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJzcN-fJwEicxOkI&4@EQycTE2zB1 fVUwGmQks)$SHuc5mJx`HL5z>gjEsy$%s>_ZV{0q< literal 0 HcmV?d00001 diff --git a/reviews/__pycache__/admin.cpython-311.pyc b/reviews/__pycache__/admin.cpython-311.pyc index 84ebec93aa5cec3f26f037a0046a354bde024b6d..69bec2cab2b96fa815c70cc5f084e4ee2815e2b8 100644 GIT binary patch delta 38 scmbQQxk!_1IWI340}%Z9zme+{6R)#=XmM&$v3^NnPJYqmdrSuf0q746E&u=k delta 35 pcmZ3aIbV}&IWI340}vR$+Q@Z^iOWGhBR@A)zaTMr^FyYCf&i~v3i<#5 diff --git a/reviews/__pycache__/admin.cpython-312.pyc b/reviews/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3fe97122b2d4164d8640108253eb2b279b9b1148 GIT binary patch literal 4859 zcmb^#O>Z05aX(3lpG#Tal4Y8XWYKaZS#j*tbqp(Z?5K(8G?rVGZL?kTt>l%Lr1Ey@ zl!^_|sDZk@RK3(eKY$!#I4IInFZ}@pdXXR-A|4u4Ku^9YrVm9g?aW)Q_~EK`fj)q< z@6FE6o3A%BkAIHE!UBxH|MSrDk+>lI4Hy0hG$!@miGuJzAOaC>p&;f&5$BRE737=@ zbD1c%Qc!bhA&?6cg1KNJlnaT1BwQAVdQTt$Q(WoxnKqw~WN)4eO9D{zHQ)F%Q+)(G zzsk0ZtsC&`uJ-J)suuufA1_#sI{Q-MvIHayd<#flxpk_0Iq_4FtxK z!8i($!AMFjKvWV~mU2Nev@GVjNRWg`mnAMqBn-0%pG9F7c4f^qR32Tp!@#q~DCU;06GfAcJP2iK`4{hW%KW<6#qEUCXAc zyOwL4OeupsS%4a@Ra|D_JebTiiEg+oYB~C9`MPa6H%!8k_zC49ndGeG4rl&5f)y6SVP@Q z#f-w$VH$>?hk_7tO@~Dr7%<^q{@~o!-Kw=heiz_he9KRNRD_s>bQg*Fzq*JA(6l8+9 zucD_MD6KfAy~Jc#JIFhgqW$ooLjcx#Jsa_OnA!^ll-)(QOMcn7Dv)67>NeUfl)VJT3Q^N3*|$tW(K2i4v(BnfOgV1F zHs45tw@UO(>f<}#NT2)o&e>^vckU??GMU0j2$U$~7ZcK8uyGzRN!czOBb6TvssJs- z!%2A1*ATn`z(K`Rz84O`V(nn37uwF(QT*up0KgmCfd`RaM7Fi`rk4Kftqm=`rOj?@ zuWxFvZ)s=ltF?%>e&T0e|I2~Vns%}_IQnVwSA*+nP3x@(m7e&npv2-k6Ekh=-LRnb z-j8yhvY=NBoP4WuaE`zF1ORZSwBnZsSo@>Zb)rxKwX=&4MShYX@&n#Ef9Tl)?e$^V zbl}v$gH{~VZ8yp*z;$i7)hHc_U=|1*4FH%Vr2Rbc)5NEX_Y+S-$Gp%Sc+X2$DTsVH z;3i2?FQ@!p^twdP!_IUL!36;AvX23#-Jvg}u~Ya_yY$yk`bkgvp=*BLdqMteMxzPb z7r&-huvirGGGrLbS+$J{i||z=3S*9G(EJVEtDGzWDV>yxcEv{op(sMab9i}UL5mk~ zhjn@M;1r%CSkk!x{eey(Pf?3kbBa+*(MuH7rM(Dvq2!rm5SIwB`*i*Y;GVE^z^uMo z>poL`r`B_(x=`zztzM}mQXA>lHsYtMmvI_DT)n&-5W+*XXwOF9xm{Tr3GWJ0R|JuR z9C-?m!%bu#N9F)I&_wps`p(z-U-?Rv`v57!=e_Y{pgR97C8{TO(lgch$I78+N=WV9 z?G`3aZYaHvm7~uTQJvhGc(Z!tu`-5><2%PL!K)|AQBN^cCl9~9;h%vzmc9KufQp(4 zFwF~P-hp|gSB6T@2;X24O2^xd~T6CmOLYy#{Qm5j;~o(Zt; zY*@h4fER8on2;=Z?;z2uu%amd|5Y>kO(gAzzHcKA0UppjrCvp)4x>`1G5W^tUh$Md z!ZxM$?nSHcW`Do>o!ve?U5r3C$2&PW7a|&TV_hU^cIo^+28@N4?rslP>B;o^Ewz`3 zJyWS2rlO~T0gL#x3z`v#2gEhHuciet$_xj3nnu6X{03T|bo4r@%toF`#>BVEq#08wN#!`J3?Ydc_McYfs!i0LB=S3>M&arC z;`ATR{{Ac`@bf&T)($U#VOw)In$bxa4wNC!*ljBBwM%H5{Z%G#EB{>fn;Nd5lD)*R z!Pv7p{UNZ}uQGiA@750QqhQnT29P<}ST}2H?-v*UG>ZymJq3^Kt6-B&HWU5NX~{dh z@1Vd72+*`NivR`fJk{St90E*h&W{0Ls>pI0SX2}K;4ub7W;q{z%g)G1?w+_X0!>_wEgtIRECbno?FWUxf+^F%Eik<2*6nf|_ z`BlZ{nSmEsp1^s+jJLovLFrY@)x@w zz`sI1ePl}qg&#^=hBdv6;afQ&4G!!fGeaP{ffWfPWcz_L2K#& literal 0 HcmV?d00001 diff --git a/reviews/__pycache__/apps.cpython-311.pyc b/reviews/__pycache__/apps.cpython-311.pyc index 9fccf09bf0ce84d3381d1dc618b7254a8d316bb6..64107d70b8ece429814c4a1c943dea58f7a932d6 100644 GIT binary patch delta 38 scmcc5`iPZlIWI340}%Z9zmZFmk=IE-v^ce>SidAOC%h(S=$i;b|&Zfg;QB%;_{A=qp)j5l-Z>fG)+vuC(~kmCM; zbom>^KSdDBFlc3EC#-_l=zBLC)Pa5Tz4_kHZ{LqbTY%^1?{V<~?=R$Bp123yT?FSK zK{5?N3ETbg;N>0Mum4l`^s;gO9Og-%_>z(cxZS%(rp?aJ-uu| zeFFSwxNaK_E`Y5xykSd7f{7s#=e*h{rnW39p=}bl$SOTE8^~J<+S~hem_4=1*sK-0 zHd*`Jlv*E`FUx-*_w(_p=0=HWoAq@w(KI$~mM+F;xjeb{-&*PVag$n++NbboaJxeQ zlVrmUIIqN9aqhM_$E6pV@HXeK7DD&Tj#M+T&@C4z1)r_8h=?;otnwBNt#0Ta8)~pN zB#GTYvx18o_dZ6~FNV9P54woOV;@eDlO%M*UUOQ(P?oPjsekLb!M>mEzS%{B^tS}Q Vg^aP!aOZmzv+>#EAAr|7>km^7o>l+= literal 0 HcmV?d00001 diff --git a/reviews/__pycache__/models.cpython-311.pyc b/reviews/__pycache__/models.cpython-311.pyc index 02188e15f6578769901c1a2f7d7f9e4bc2d128b9..a660f72ca17163846c21e3d6e80f8b847dfe890d 100644 GIT binary patch delta 38 scmZ2zxWtfaIWI340}%Z9zmcnqmDfc-v^ce>SidAOC%>a diff --git a/reviews/__pycache__/models.cpython-312.pyc b/reviews/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..403383c54ffa1a251cc3ffb4f2da558f50dc1e17 GIT binary patch literal 5997 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 literal 0 HcmV?d00001 diff --git a/reviews/__pycache__/signals.cpython-311.pyc b/reviews/__pycache__/signals.cpython-311.pyc index 0d216ed9462b7723b3d21a70b283fd8f0d476667..1fdda68e4769f4a13232e75cc0748660afd858fe 100644 GIT binary patch delta 35 pcmZ3_xQUT#IWI340}%Z9KatCf*Hu5XIJKx)za%jyzi6UYDgd*%3nc&m delta 32 mcmdnQxSo+~IWI340}vR$n#g6w<)ojHpPQ;*keEEtHx&Sa^9b<( diff --git a/reviews/__pycache__/signals.cpython-312.pyc b/reviews/__pycache__/signals.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cf56a78bfa6388adb1be3bf0d16ca832b172c4a3 GIT binary patch literal 166 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<*FZAoLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJzcN-fJwEicwD&P>ls%qi9@sJz8t elbfGXnv-f*#0oT(5r~UHjE~HWjEqIhKo$Ts?kl+f literal 0 HcmV?d00001 diff --git a/reviews/__pycache__/urls.cpython-311.pyc b/reviews/__pycache__/urls.cpython-311.pyc index 321b1f7ed28f9a76f2e2960a3e4d94a97aae7a28..923c2c60faad133ca4a43504ac861d4e72764c06 100644 GIT binary patch delta 35 ocmX@kbc%^t<8 delta 32 mcmX@bbexH6IWI340}vR$n#i@B%U(YtKQ~psATfF3z8(OOfC?!9 diff --git a/reviews/__pycache__/urls.cpython-312.pyc b/reviews/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67df6d7dbde17b9b92b466e304dff429beee38ce GIT binary patch literal 294 zcmX@j%ge<81V8@Er$+(l#~=<2FhLogRe+4?3@HpLj5!Rsj8Tk?3@J=0%sEWC%u&oh zHcJ#sIztp|C95XeOOO^###<}}i6t2?86h0jvdq--;#=%RsbGemCfhCUl&r+O^nAV2 zqMYI)W}vcL3`MLUiX*Y0AU-cKH}w`bP!4EHNorAE@k)lzKuLyQPWqw6sYS*5C5but zMfxQfMVUD{<(b);NX&SM$?P6^Kd diff --git a/reviews/__pycache__/views.cpython-312.pyc b/reviews/__pycache__/views.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..820d030db690c4f9ace8fb1e577b5bd5df2f7fee GIT binary patch literal 214 zcmX@j%ge<81V8@Er`rSR#~=<2FhLog1%Qm{3@HpLj5!Rsj8Tk?43$ip%r8OGnvA#D zic<4ZQj7dFnQjTBWF_XM=j#<`SidAOC%;I) zB%>%ZC#O6!I}?c+4>2G literal 0 HcmV?d00001 diff --git a/reviews/migrations/__pycache__/0001_initial.cpython-311.pyc b/reviews/migrations/__pycache__/0001_initial.cpython-311.pyc index c4ef3bc1e85ab9c7ebbb933cd3127f5ab36e8bb8..58fb35da09b77fbfcda89a36851f23ec39d5b4bb 100644 GIT binary patch delta 38 scmaE<{YIN>IWI340}%Z9zmdzDk2h35v^ce>SidAOC%}e3a0=7 diff --git a/reviews/migrations/__pycache__/0001_initial.cpython-312.pyc b/reviews/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4740bd8775296e84f056a077533c77e729f84223 GIT binary patch literal 6069 zcmc&&PfQ!x8J`(!V;hIqgoI$g1`I$3J3V860Ld3FphNtH%c!r^nV}*EDdW53Dn(Dn2 zyj!PjT9TP}lammMcmMbb-T^%C%87S56vPGoIeAyEa@}Ebmlz&P@~)iRk6tg30OKK; z;C>9MUJ31|t~8gSo!U?1y+w~cKu%j3IaNhDNhaqjuEFjj#P0SoC#rKtOK^UIJG&oO z5`zH2bp9ZwhG4q)V|Y4utVCb!58#fM;7$-+Pg!|&CAgCWSH^zOTVH|;9;_FT4eN}p z2_n}>kiGjgL#F!nQ&(!s(E7{JF7BuCO}S8s=I}w9arOR4?U%}EZ!X_!xt8_9T!Cn` z9%R#xw5MD&P90#+>EbL}Vv^N-8{eL!1v+=8NCgWWE9K_F*$nf?G zZh|Y=ISz$Rc^{AX}yL@ncr*_5Wk#esVx8N+*fufZ2Sl%tW>0cD)Rzk#{E< z{zh)7*af+p#TDe=v2vr#nPGlpna+(CaY@&F%j#IixaFBH-caLkU-czqNkfvRt)`J` zHTCxP_OS{|$yvk}I4owd5|=`j>ki5a=%K|3{Fuc|j&wLIAD7W&HlZL+L%da$R)iF% ztg`pfs^w9UB5U9&N34jXq_%8T7R&> zL&}KaZa_)c9-k}?Z%@evLhq3!7QPP<*v)8ism#SyEAUo>LV~V#IEfnNH0VgA9VOCXu#`l$nlJ%gquAENgjL z7HT9TB3S!a_CbadaSmZuDM*3_ou}Z>I;&QF$feWVA^>@mMxa02YCQJqPU0U;#W8+DO-+&tRUq$mKc~8q&ZH^Ao#JH9!T7ycSxS$Wv(FJ6Gx9UTa#x5 zs^4B7!OOUiDr|i>Wm!a=WHY^EpiW3ipTSUK_(jW2x(;f>svI7Q4G)csTJG3roSm7S znzFp4*6oAtA)cQknR42XV?&~blv$FNcp)p6S56nkg!&umH8@56dp0r)eW*q>PL!31 zwyX%E_)xenlq^|07EqQ@K3qbJ6pAVG_CF9JFpbZ%g=F@mSCvYTO@2JEQ2z!g`G)$w zy5{Tg9T(-fvh6CYd3?PMzHfmA|Je>`>$>Xf_h{3+L+nc zZ8UaoHTLNK$abJf4@cIrW;kMmBU|C~y1$RmE@0XPBYa`AHXk0-{o{M78}WSjrtTl! z4utiV{^uvmmVTq9AE+%h^_1QgeLiQlMUA%T#z?+xNcZ0)*eJ$EjTWG8YWbEa-9Js} zeVE>7wDfJv{qF8>@0x?t#^AI$IA;vbnS%?);DVm`GT-u*?*I8a@Y>B0Jw9*7?-}uX zW}G+Tyctg!@st_Q8u2W|V~n|r!?M6E;V>>RSsX_EfQYp|BoTWA5v$YdJJ(K_^_@n2 z=Zm@T?tXjMjE)-7Q8PMYL}$$CoDrSVk)*3QQ5sEBgC8IzI8CI?Fgs00YpZu!sX)Wp zy|r6A70mJKH*Lo~-kt6}RTO$(6+!m8aQ3>4V3&SzEFT=#{S$lB_o9DuINvy-`zJ}V zqZl4Fg3%2wAH1Rahe+9VI|$Q{@6T{Me13u1(r*9P@!2!98v?z0VCOtukcJ$BcOePP7DFk=ZLmM~+Y5fjZ=#)xIW=TU~th6HmTyPja4VAt^j zTyOaqas5jO;^7jI27y_6j3fX`0_MuZp%Z|Oc|s3kE1u9XYz2Pc1jLD?S!U;$7fS5p zo=$1-LpoY1Pa~eU4Tig6yDq$46MEYItov8p&%b){L~kF~KV8Y!+<)V&0H~YtkjdR{ zxZ5EK+f5O@vDapeGGla&>ldFY%f->(;jvEGuMW6QDyZk}Wm$;>#;Pwc`NbZ5g%s7E z-M3xU?m216z5sZ3!Q`$$Uh?)^CW-YCr2>}fzGmMwt}7C3@oinj_syLOnxQIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJzcN-fJwEicy3%}g&!EXmBzE7p&X q&&55r~UHjE~HWjEqIhKo$VH{4j6; literal 0 HcmV?d00001 diff --git a/rides/__pycache__/__init__.cpython-311.pyc b/rides/__pycache__/__init__.cpython-311.pyc index fad5ed11da6065ed3931d99903e432465b2afb08..e75e6db9d5d43618e82325a6d2a70a78c2f7c9a9 100644 GIT binary patch delta 35 pcmZ3-xRH@-IWI340}%Z9KatCf*F`_HIJKx)za%jyzi6UY3IMZX3n2gi delta 32 mcmdnUxQ>x)IWI340}vR$n#g6w<*1*LpPQ;*keEEtHw6HKrwHu; diff --git a/rides/__pycache__/__init__.cpython-312.pyc b/rides/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2172b0aae5a708a81104e7c61a72741a0cf8e2ce GIT binary patch literal 165 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<)R;2oLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJzc%1lWu){l?R%*!l^kJl@xyv1RY do1apelWJGQ3N(}vh>JmtkIamWj77{q76A2=D+vGq literal 0 HcmV?d00001 diff --git a/rides/__pycache__/admin.cpython-311.pyc b/rides/__pycache__/admin.cpython-311.pyc index ce216f6cc3c4b79b8c679a27247c88bd44a101ba..e4c1fc623984c89b2cd38ae54da362b4c3becfa3 100644 GIT binary patch delta 1547 zcmaKsTWlLe6oz-a_IiC;+lk|(&c)f-Cb6a52vG~UNx4`wkl0b|NR?<}x$MR@II)>s z7bS5N18EhZAleKf5v^1tL})}os*2PK@z59E9k5huMInM09yhdo;fa~7oKmVX+WltE znSamBoISf=cK+POeZ_HR3b%YOpS*XAYo@v3t{F*$QkR@aXW;FV^m{r3t>{w1?YoA% zAh3zG+mrwVoj?nE!5}b#@fx$LlL3jMHG$3R&}CCCx@qKq34L!2t(n7$AqhosQDHJL zv6vJU8j6CVKbOvliXP7_DNHs8vuQEND5l6%XnHs{9)4A^j7~(Np|N-@G&yx_;Mqx~ zdL}#;nvRb~!qM3D%xG*p5?0J(p~=X^c=U8=OfgM|CL*K5vC!DEcL1f>Pg~!>yDLx! zZob^$D>v|EZ=hVym)$KYXLOrY3S)zN>_A@AS@0KHGi|Q*2+ZgD%Ax+<%a$irUbl;n z{`K+kpSD(MnR}uYjCp!jht>GjT9gvlC>1n?V?m%;Q&K#eJC{yL=W%YBC``zy#U!3E zCoUx8ngs>?;4-t)*ZJc7YA%3{0V$hUkdPI_d^(emAvt4E4`*=)=P(o+ucw%`1>=$oC8FTbeRJE1 z^LQlXFbY)JR<-%|eH;IijlUtFT1z)c=Jn>!n!j<~koM|t*6+J}OYYu{*B&@MWk+Ax zQI9}P16r`0amR3gJpg--I)%w)g@i2b(Qp?1V)27M1gt!ekk`81x<`lM43@zRL6!hw zNHhk|^N?f!_M_jdP3`aE;loA@yfxPGvHe5)&gzDJpY15I9mUE8+pu6ch*VphMHUyb zxEf(9y@ZCis0Usk!Jf0m0J_5k94kaY7SiGbNF3y|CA?>d@Bj8Vh<0tB_BAY%p59}g z?6JMXwihdx7Q2PSW(9E}Lka>}?cbpv?RGGTiuNdY8TlPsn0FjacFusS_ZW@n569qO zr%C~XhJ&{0Lb#;&tNM!PXzrlrY*F7-(svPm2XSdQ2)vGFs~)pDc#0h9BATi8vxbV1 zuYTzj2K!0+AMRjmQ+e7O{^PZ~-Y@uIWx7OkSOaPU7ephsO z54Gt>T6aiOy4n(OsXFbU5o|jOu5}Mq?gL*5_*7jRIH^+4qUh;9B<@E9B#yuCS^3ei F{{f-#hvEPL delta 1442 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 literal 0 HcmV?d00001 diff --git a/rides/__pycache__/apps.cpython-311.pyc b/rides/__pycache__/apps.cpython-311.pyc index 852fa6d3b3dc5435c69e22b1161d5e86ce57ddc3..ef34a3be1efa39cef9746591529a3c7a372c71d1 100644 GIT binary patch delta 38 scmcc0dV`f~IWI340}%Z9zmZFsk=H>#v^ce>SidAOC%{4i5uHPO$emKG+hc>q_sl{brX`!L!pb7yMmToOuJM|+3m!KeK z5@JWP*p*J~Np}UYPdZiiRVtNjC6+_^PGm_Q$~WOGmrC34WtxoUWqz6}Ei2zp>|`TO zH5~k?vATx_o5wO5KCuM^&e#x%J@%Wl(56Wyv<;lfvr13R7P6K?4iEplh+bP|Y*Y%J zo2YziQmsFx@6&sbx4rQ!=SGQ188xbrC<+@E3+zn^xmZ5DH%{36+NLtJ<8!#_9MlM4 z9Bfq`&NDGnoL4)XDJoy%T7BR@A)zaTMr@m6*b0If0#RsaA1 diff --git a/rides/__pycache__/models.cpython-312.pyc b/rides/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b64e7ade0c53ca290b99651be9564646b9939751 GIT binary patch literal 6721 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 Oi+mdS2LmM4^M3*8IWE`$ literal 0 HcmV?d00001 diff --git a/rides/__pycache__/signals.cpython-311.pyc b/rides/__pycache__/signals.cpython-311.pyc index 3d78b8f29ee5937d392016a4906b203ae268c4dd..fbb81d19b6ba0e96bc18fc973430e08927a45a3c 100644 GIT binary patch delta 35 pcmZ3>xPg&tIWI340}%Z9KatCf*I7TbIJKx)za%jyzi6UYG61s<3mpIe delta 32 mcmdnMxR#M?IWI340}vR$n#g6w<)ELDpPQ;*keEEtHyHqeTL|d@ diff --git a/rides/__pycache__/signals.cpython-312.pyc b/rides/__pycache__/signals.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9aa81e8595507edf4ffdd2295d2f65290040c185 GIT binary patch literal 164 zcmX@j%ge<81V8@Er-SInAOanHW&w&!XQ*V*Wb|9fP{ah}eFmxd<*XlCoLW?@Uy_)U zU!-4>QIwgJQ=XZfiNuUg$x6&i&yUZ`k1tA1OfJzc%1lWu)-TRX&r8fH)+?yI#bJ}1 cpHiBWYFESxG?NjCi$RQ!%#4hTMa)1J0Lcg{$p8QV literal 0 HcmV?d00001 diff --git a/rides/__pycache__/urls.cpython-311.pyc b/rides/__pycache__/urls.cpython-311.pyc index 7320742761d8845a892efef99f3e6843c919a635..901449a4bad5d7cf473c4f65fb6b674c57f88466 100644 GIT binary patch delta 37 rcmeBWoxsYqoR^o20SJEl-^jI;k=H>#v^ce>SidAOC%H;+ zhl@p_7!U-fZio>lQ0~`m>F+Qw0{}y zFQaBuos+48H_~?tP+Ad=>m!&N`zWNxLfSkeR7fCQEdmybSf6a;7Cl`o3D&KxM3^@N ztyWPwNKU2$=_Q8H7>8`D;7X4)aJ$wib~zJVe+$p*Vyhw@97Ta9%jq5U*oJy*Uxkoa zECQWI&gk)a!b&zgMNye!%G=@!yekIyTtj<;a)DyZIvmAy9x`?uHp2-Sq#1&CC*Twx z#zNjb2n$!RQ literal 0 HcmV?d00001 diff --git a/rides/__pycache__/views.cpython-311.pyc b/rides/__pycache__/views.cpython-311.pyc index 511f0dc9a46b0750e8be00e55580577d561f27ae..9d0a9ca296ed7dca415cb3bdc8c9c997a24b9b27 100644 GIT binary patch literal 7563 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 delta 1926 zcma)7OKcNI7~Wa0_u=&eXHC`#4t8GHOGrW$0s*JAL6lIH<^pO_)YdZI4H)b=on6x+ zIdTph+!j^91W|FQQWd2^q!Or7rCxjJrA4Y;ONmxOYEKnC1wjwx(*Cm!hNKnhNb~K^ z|D2is+kZbve$nm!%IEViFoyn!p8it0;t!*XSK?h|m(Jzfd47`53zGt3bVhgQ#Jn^q zIq!VVlb0uD#IVdbqYD=qT{L6^EpiNV8)jondL69ADddg8nRJG{?HVQrg*ft&Dd7_Ph#`-KKezj+xi3>lo0fr7rj@qL zTZ|^!ZnHRJVB(f~kx2TaZM$!AxQ)hdp$xM$(QC2m>VWPo7n0zJ*U(nbwX+cVK9Ul-g4 zjss}OdDuK9UD1T)7)WhzK0RHWN@uJhHZTYeQ6V>-&KsJDor)&NZ@$o*0ycp7re(Xv zUps*n8damFVgc*GYFqm7$8bDl2OYk`An@(d*@_ zTTDe54-iTnYBpg1rl8s=>i}aInI!%0cS1cipMHG)29J>*}!M z6^_i8>S}yN?W?JMOA}Q!Syz)4@2ad)uS4i*u4B||tgen#j{X`@R|2tGAhyt24J7J; z#Lr>^Q{HaiDLuUm^U+TL*U)w7S{7nRyV%w0&N3x*6Mc$iS*yuVhWzF3Y}Jv@F1t2z z8n}B`>|%khQ1mj|So9LBbEA-<#6tP`3FqcdXvpTKa%s!b9ALUS?f-& zdfOL5Yc8f|^dZCccpg*u-P7`M;-j6Hc3wYu_2g&M)vf*Yt^I3mM%r>YP!(fPzb$IT z?_8rM<2^L(FonGooNb2a+dc{-0Jc1nKAoLTTL!QY2booG!IVPsRK&SONVVvqTqSEi>i8u;=#hh^vABQFFPUby^BqKxQ`-nnn b5smEV7}ys@u;YKj<&lR}`uIOoPKtj3UJkTt diff --git a/rides/__pycache__/views.cpython-312.pyc b/rides/__pycache__/views.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ee394deef6b0cf73e35a6ecb8a9b15ffc3d16e0 GIT binary patch literal 5863 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', @@ -101,43 +102,44 @@ class RideAdmin(SimpleHistoryAdmin): get_status.short_description = 'Status' def get_avg_rating(self, obj): - avg = obj.reviews.filter(status='approved').aggregate(avg_rating=Avg('rating'))['avg_rating'] + avg = obj.reviews.filter(is_published=True).aggregate(avg_rating=Avg('rating'))['avg_rating'] if avg: + rating_str = '{:.1f}'.format(float(avg)) return format_html( - '★ {:.1f}', - 'gold', - avg + '★ {}', + rating_str ) return '-' get_avg_rating.short_description = 'Rating' def mark_as_operating(self, request, queryset): - queryset.update(status='operating') + queryset.update(status='OPERATING') mark_as_operating.short_description = "Mark selected rides as operating" def mark_as_closed(self, request, queryset): - queryset.update(status='closed') - mark_as_closed.short_description = "Mark selected rides as closed" + queryset.update(status='CLOSED_TEMP') + mark_as_closed.short_description = "Mark selected rides as temporarily closed" def mark_as_under_maintenance(self, request, queryset): - queryset.update(status='under_maintenance') + queryset.update(status='CLOSED_TEMP') mark_as_under_maintenance.short_description = "Mark selected rides as under maintenance" def mark_as_removed(self, request, queryset): - queryset.update(status='removed') - mark_as_removed.short_description = "Mark selected rides as removed" + queryset.update(status='DEMOLISHED') + mark_as_removed.short_description = "Mark selected rides as demolished" @admin.register(RollerCoasterStats) class RollerCoasterStatsAdmin(SimpleHistoryAdmin): list_display = ('ride', 'height_ft', 'length_ft', 'speed_mph', 'inversions', 'get_capacity') list_filter = ('launch_type', 'track_type', 'train_style') search_fields = ('ride__name', 'track_type') - readonly_fields = ('ride',) + readonly_fields = ('id', 'ride') history_list_display = ['height_ft', 'length_ft', 'speed_mph', 'inversions'] fieldsets = ( ('Basic Stats', { 'fields': ( + 'id', 'ride', ('height_ft', 'length_ft'), ('speed_mph', 'inversions'), @@ -163,7 +165,7 @@ class RollerCoasterStatsAdmin(SimpleHistoryAdmin): capacity = obj.trains_count * obj.cars_per_train * obj.seats_per_car return format_html( '{} seats total', - capacity + str(capacity) ) return '-' get_capacity.short_description = 'Total Capacity' diff --git a/rides/migrations/0001_initial.py b/rides/migrations/0001_initial.py index 0bdc1696..3e847248 100644 --- a/rides/migrations/0001_initial.py +++ b/rides/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.1.2 on 2024-10-28 20:17 +# Generated by Django 5.1.2 on 2024-10-28 21:53 import django.db.models.deletion import simple_history.models @@ -11,130 +11,400 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('companies', '0001_initial'), - ('parks', '0001_initial'), + ("companies", "0002_stats_fields"), + ("parks", "0001_initial"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( - name='HistoricalRide', + name="HistoricalRide", fields=[ - ('id', models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), - ('name', models.CharField(max_length=255)), - ('slug', models.SlugField(max_length=255)), - ('description', models.TextField(blank=True)), - ('category', models.CharField(choices=[('RC', 'Roller Coaster'), ('DR', 'Dark Ride'), ('FR', 'Flat Ride'), ('WR', 'Water Ride'), ('TR', 'Transport'), ('OT', 'Other')], default='OT', max_length=2)), - ('model_name', models.CharField(blank=True, max_length=255)), - ('status', models.CharField(choices=[('OPERATING', 'Operating'), ('CLOSED_TEMP', 'Temporarily Closed'), ('CLOSED_PERM', 'Permanently Closed'), ('UNDER_CONSTRUCTION', 'Under Construction'), ('DEMOLISHED', 'Demolished'), ('RELOCATED', 'Relocated')], default='OPERATING', max_length=20)), - ('opening_date', models.DateField(blank=True, null=True)), - ('closing_date', models.DateField(blank=True, null=True)), - ('status_since', models.DateField(blank=True, null=True)), - ('min_height_in', models.PositiveIntegerField(blank=True, null=True)), - ('max_height_in', models.PositiveIntegerField(blank=True, null=True)), - ('accessibility_options', models.TextField(blank=True)), - ('capacity_per_hour', models.PositiveIntegerField(blank=True, null=True)), - ('ride_duration_seconds', models.PositiveIntegerField(blank=True, null=True)), - ('average_rating', models.DecimalField(blank=True, decimal_places=2, max_digits=3, null=True)), - ('created_at', models.DateTimeField(blank=True, editable=False)), - ('updated_at', models.DateTimeField(blank=True, editable=False)), - ('history_id', models.AutoField(primary_key=True, serialize=False)), - ('history_date', models.DateTimeField(db_index=True)), - ('history_change_reason', models.CharField(max_length=100, null=True)), - ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), - ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), - ('manufacturer', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='companies.manufacturer')), - ('park', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='parks.park')), - ('park_area', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='parks.parkarea')), + ( + "id", + models.BigIntegerField( + auto_created=True, blank=True, db_index=True, verbose_name="ID" + ), + ), + ("name", models.CharField(max_length=255)), + ("slug", models.SlugField(max_length=255)), + ("description", models.TextField(blank=True)), + ( + "category", + models.CharField( + choices=[ + ("RC", "Roller Coaster"), + ("DR", "Dark Ride"), + ("FR", "Flat Ride"), + ("WR", "Water Ride"), + ("TR", "Transport"), + ("OT", "Other"), + ], + default="OT", + max_length=2, + ), + ), + ("model_name", models.CharField(blank=True, max_length=255)), + ( + "status", + models.CharField( + choices=[ + ("OPERATING", "Operating"), + ("CLOSED_TEMP", "Temporarily Closed"), + ("CLOSED_PERM", "Permanently Closed"), + ("UNDER_CONSTRUCTION", "Under Construction"), + ("DEMOLISHED", "Demolished"), + ("RELOCATED", "Relocated"), + ], + default="OPERATING", + max_length=20, + ), + ), + ("opening_date", models.DateField(blank=True, null=True)), + ("closing_date", models.DateField(blank=True, null=True)), + ("status_since", models.DateField(blank=True, null=True)), + ("min_height_in", models.PositiveIntegerField(blank=True, null=True)), + ("max_height_in", models.PositiveIntegerField(blank=True, null=True)), + ("accessibility_options", models.TextField(blank=True)), + ( + "capacity_per_hour", + models.PositiveIntegerField(blank=True, null=True), + ), + ( + "ride_duration_seconds", + models.PositiveIntegerField(blank=True, null=True), + ), + ( + "average_rating", + models.DecimalField( + blank=True, decimal_places=2, max_digits=3, null=True + ), + ), + ("created_at", models.DateTimeField(blank=True, editable=False)), + ("updated_at", models.DateTimeField(blank=True, editable=False)), + ("history_id", models.AutoField(primary_key=True, serialize=False)), + ("history_date", models.DateTimeField(db_index=True)), + ("history_change_reason", models.CharField(max_length=100, null=True)), + ( + "history_type", + models.CharField( + choices=[("+", "Created"), ("~", "Changed"), ("-", "Deleted")], + max_length=1, + ), + ), + ( + "history_user", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "manufacturer", + models.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="companies.manufacturer", + ), + ), + ( + "park", + models.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="parks.park", + ), + ), + ( + "park_area", + models.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="parks.parkarea", + ), + ), ], options={ - 'verbose_name': 'historical ride', - 'verbose_name_plural': 'historical rides', - 'ordering': ('-history_date', '-history_id'), - 'get_latest_by': ('history_date', 'history_id'), + "verbose_name": "historical ride", + "verbose_name_plural": "historical rides", + "ordering": ("-history_date", "-history_id"), + "get_latest_by": ("history_date", "history_id"), }, bases=(simple_history.models.HistoricalChanges, models.Model), ), migrations.CreateModel( - name='Ride', + name="Ride", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=255)), - ('slug', models.SlugField(max_length=255)), - ('description', models.TextField(blank=True)), - ('category', models.CharField(choices=[('RC', 'Roller Coaster'), ('DR', 'Dark Ride'), ('FR', 'Flat Ride'), ('WR', 'Water Ride'), ('TR', 'Transport'), ('OT', 'Other')], default='OT', max_length=2)), - ('model_name', models.CharField(blank=True, max_length=255)), - ('status', models.CharField(choices=[('OPERATING', 'Operating'), ('CLOSED_TEMP', 'Temporarily Closed'), ('CLOSED_PERM', 'Permanently Closed'), ('UNDER_CONSTRUCTION', 'Under Construction'), ('DEMOLISHED', 'Demolished'), ('RELOCATED', 'Relocated')], default='OPERATING', max_length=20)), - ('opening_date', models.DateField(blank=True, null=True)), - ('closing_date', models.DateField(blank=True, null=True)), - ('status_since', models.DateField(blank=True, null=True)), - ('min_height_in', models.PositiveIntegerField(blank=True, null=True)), - ('max_height_in', models.PositiveIntegerField(blank=True, null=True)), - ('accessibility_options', models.TextField(blank=True)), - ('capacity_per_hour', models.PositiveIntegerField(blank=True, null=True)), - ('ride_duration_seconds', models.PositiveIntegerField(blank=True, null=True)), - ('average_rating', models.DecimalField(blank=True, decimal_places=2, max_digits=3, null=True)), - ('created_at', models.DateTimeField(auto_now_add=True)), - ('updated_at', models.DateTimeField(auto_now=True)), - ('manufacturer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rides', to='companies.manufacturer')), - ('park', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rides', to='parks.park')), - ('park_area', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rides', to='parks.parkarea')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=255)), + ("slug", models.SlugField(max_length=255)), + ("description", models.TextField(blank=True)), + ( + "category", + models.CharField( + choices=[ + ("RC", "Roller Coaster"), + ("DR", "Dark Ride"), + ("FR", "Flat Ride"), + ("WR", "Water Ride"), + ("TR", "Transport"), + ("OT", "Other"), + ], + default="OT", + max_length=2, + ), + ), + ("model_name", models.CharField(blank=True, max_length=255)), + ( + "status", + models.CharField( + choices=[ + ("OPERATING", "Operating"), + ("CLOSED_TEMP", "Temporarily Closed"), + ("CLOSED_PERM", "Permanently Closed"), + ("UNDER_CONSTRUCTION", "Under Construction"), + ("DEMOLISHED", "Demolished"), + ("RELOCATED", "Relocated"), + ], + default="OPERATING", + max_length=20, + ), + ), + ("opening_date", models.DateField(blank=True, null=True)), + ("closing_date", models.DateField(blank=True, null=True)), + ("status_since", models.DateField(blank=True, null=True)), + ("min_height_in", models.PositiveIntegerField(blank=True, null=True)), + ("max_height_in", models.PositiveIntegerField(blank=True, null=True)), + ("accessibility_options", models.TextField(blank=True)), + ( + "capacity_per_hour", + models.PositiveIntegerField(blank=True, null=True), + ), + ( + "ride_duration_seconds", + models.PositiveIntegerField(blank=True, null=True), + ), + ( + "average_rating", + models.DecimalField( + blank=True, decimal_places=2, max_digits=3, null=True + ), + ), + ("created_at", models.DateTimeField(auto_now_add=True)), + ("updated_at", models.DateTimeField(auto_now=True)), + ( + "manufacturer", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="rides", + to="companies.manufacturer", + ), + ), + ( + "park", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="rides", + to="parks.park", + ), + ), + ( + "park_area", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="rides", + to="parks.parkarea", + ), + ), ], options={ - 'ordering': ['name'], - 'unique_together': {('park', 'slug')}, + "ordering": ["name"], + "unique_together": {("park", "slug")}, }, ), migrations.CreateModel( - name='HistoricalRollerCoasterStats', + name="HistoricalRollerCoasterStats", fields=[ - ('id', models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')), - ('height_ft', models.DecimalField(blank=True, decimal_places=2, max_digits=6, null=True)), - ('length_ft', models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True)), - ('speed_mph', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True)), - ('inversions', models.PositiveIntegerField(default=0)), - ('ride_time_seconds', models.PositiveIntegerField(blank=True, null=True)), - ('track_type', models.CharField(blank=True, max_length=255)), - ('launch_type', models.CharField(choices=[('CHAIN', 'Chain Lift'), ('CABLE', 'Cable Launch'), ('HYDRAULIC', 'Hydraulic Launch'), ('LSM', 'Linear Synchronous Motor'), ('LIM', 'Linear Induction Motor'), ('GRAVITY', 'Gravity'), ('OTHER', 'Other')], default='CHAIN', max_length=20)), - ('train_style', models.CharField(blank=True, max_length=255)), - ('trains_count', models.PositiveIntegerField(blank=True, null=True)), - ('cars_per_train', models.PositiveIntegerField(blank=True, null=True)), - ('seats_per_car', models.PositiveIntegerField(blank=True, null=True)), - ('history_id', models.AutoField(primary_key=True, serialize=False)), - ('history_date', models.DateTimeField(db_index=True)), - ('history_change_reason', models.CharField(max_length=100, null=True)), - ('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)), - ('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), - ('ride', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='rides.ride')), + ( + "id", + models.BigIntegerField( + auto_created=True, blank=True, db_index=True, verbose_name="ID" + ), + ), + ( + "height_ft", + models.DecimalField( + blank=True, decimal_places=2, max_digits=6, null=True + ), + ), + ( + "length_ft", + models.DecimalField( + blank=True, decimal_places=2, max_digits=7, null=True + ), + ), + ( + "speed_mph", + models.DecimalField( + blank=True, decimal_places=2, max_digits=5, null=True + ), + ), + ("inversions", models.PositiveIntegerField(default=0)), + ( + "ride_time_seconds", + models.PositiveIntegerField(blank=True, null=True), + ), + ("track_type", models.CharField(blank=True, max_length=255)), + ( + "launch_type", + models.CharField( + choices=[ + ("CHAIN", "Chain Lift"), + ("CABLE", "Cable Launch"), + ("HYDRAULIC", "Hydraulic Launch"), + ("LSM", "Linear Synchronous Motor"), + ("LIM", "Linear Induction Motor"), + ("GRAVITY", "Gravity"), + ("OTHER", "Other"), + ], + default="CHAIN", + max_length=20, + ), + ), + ("train_style", models.CharField(blank=True, max_length=255)), + ("trains_count", models.PositiveIntegerField(blank=True, null=True)), + ("cars_per_train", models.PositiveIntegerField(blank=True, null=True)), + ("seats_per_car", models.PositiveIntegerField(blank=True, null=True)), + ("history_id", models.AutoField(primary_key=True, serialize=False)), + ("history_date", models.DateTimeField(db_index=True)), + ("history_change_reason", models.CharField(max_length=100, null=True)), + ( + "history_type", + models.CharField( + choices=[("+", "Created"), ("~", "Changed"), ("-", "Deleted")], + max_length=1, + ), + ), + ( + "history_user", + models.ForeignKey( + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "ride", + models.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="rides.ride", + ), + ), ], options={ - 'verbose_name': 'historical Roller Coaster Statistics', - 'verbose_name_plural': 'historical Roller Coaster Statistics', - 'ordering': ('-history_date', '-history_id'), - 'get_latest_by': ('history_date', 'history_id'), + "verbose_name": "historical Roller Coaster Statistics", + "verbose_name_plural": "historical Roller Coaster Statistics", + "ordering": ("-history_date", "-history_id"), + "get_latest_by": ("history_date", "history_id"), }, bases=(simple_history.models.HistoricalChanges, models.Model), ), migrations.CreateModel( - name='RollerCoasterStats', + name="RollerCoasterStats", fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('height_ft', models.DecimalField(blank=True, decimal_places=2, max_digits=6, null=True)), - ('length_ft', models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True)), - ('speed_mph', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True)), - ('inversions', models.PositiveIntegerField(default=0)), - ('ride_time_seconds', models.PositiveIntegerField(blank=True, null=True)), - ('track_type', models.CharField(blank=True, max_length=255)), - ('launch_type', models.CharField(choices=[('CHAIN', 'Chain Lift'), ('CABLE', 'Cable Launch'), ('HYDRAULIC', 'Hydraulic Launch'), ('LSM', 'Linear Synchronous Motor'), ('LIM', 'Linear Induction Motor'), ('GRAVITY', 'Gravity'), ('OTHER', 'Other')], default='CHAIN', max_length=20)), - ('train_style', models.CharField(blank=True, max_length=255)), - ('trains_count', models.PositiveIntegerField(blank=True, null=True)), - ('cars_per_train', models.PositiveIntegerField(blank=True, null=True)), - ('seats_per_car', models.PositiveIntegerField(blank=True, null=True)), - ('ride', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='coaster_stats', to='rides.ride')), + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "height_ft", + models.DecimalField( + blank=True, decimal_places=2, max_digits=6, null=True + ), + ), + ( + "length_ft", + models.DecimalField( + blank=True, decimal_places=2, max_digits=7, null=True + ), + ), + ( + "speed_mph", + models.DecimalField( + blank=True, decimal_places=2, max_digits=5, null=True + ), + ), + ("inversions", models.PositiveIntegerField(default=0)), + ( + "ride_time_seconds", + models.PositiveIntegerField(blank=True, null=True), + ), + ("track_type", models.CharField(blank=True, max_length=255)), + ( + "launch_type", + models.CharField( + choices=[ + ("CHAIN", "Chain Lift"), + ("CABLE", "Cable Launch"), + ("HYDRAULIC", "Hydraulic Launch"), + ("LSM", "Linear Synchronous Motor"), + ("LIM", "Linear Induction Motor"), + ("GRAVITY", "Gravity"), + ("OTHER", "Other"), + ], + default="CHAIN", + max_length=20, + ), + ), + ("train_style", models.CharField(blank=True, max_length=255)), + ("trains_count", models.PositiveIntegerField(blank=True, null=True)), + ("cars_per_train", models.PositiveIntegerField(blank=True, null=True)), + ("seats_per_car", models.PositiveIntegerField(blank=True, null=True)), + ( + "ride", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name="coaster_stats", + to="rides.ride", + ), + ), ], options={ - 'verbose_name': 'Roller Coaster Statistics', - 'verbose_name_plural': 'Roller Coaster Statistics', + "verbose_name": "Roller Coaster Statistics", + "verbose_name_plural": "Roller Coaster Statistics", }, ), ] diff --git a/rides/migrations/0002_alter_ride_manufacturer.py b/rides/migrations/0002_alter_ride_manufacturer.py new file mode 100644 index 00000000..d06d7183 --- /dev/null +++ b/rides/migrations/0002_alter_ride_manufacturer.py @@ -0,0 +1,25 @@ +# Generated by Django 5.1.2 on 2024-10-29 02:02 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("companies", "0004_add_total_parks"), + ("rides", "0001_initial"), + ] + + operations = [ + migrations.AlterField( + model_name="ride", + name="manufacturer", + field=models.ForeignKey( + default=1, + on_delete=django.db.models.deletion.CASCADE, + to="companies.manufacturer", + ), + preserve_default=False, + ), + ] diff --git a/rides/migrations/__pycache__/0001_initial.cpython-311.pyc b/rides/migrations/__pycache__/0001_initial.cpython-311.pyc index 3719dd5ae684bce4359543dae36de80cff8940de..300a4e08d29c5b8ab45bce0accf3ed8f3afb0d84 100644 GIT binary patch delta 2719 zcmeH}O>7%Q6vubhS=(`9$KLEFaZJ4a*p1^PlAR_TXsfDi8W#|4nidj1B&?-&S_daV zYo}@@kUm|MzBg{`1DapZn~*?{lx$!@=vGD{|%eQ(yYN?MepH>GY9osce)>+4(}gm@6fP zy7-!5zFMkx!o9I<{2=)u5QP4}2JQeqkRr;M-T$(gH_G{3)+lFCK)#nQ@BtF)jyW-&IYuVCry?;s z4)*W7S}2v5%^TU3Qr_`?K9nc;ZgNl7{9V|73UL}Ckq2_}3402UhC!{PF)lU;=Cdg4*}k45hSJ;7 zjV&)AULZLj65R{%R4qzdeC(A(-fc7-3EdlTWlh&_A}1ew4=bR{97@tNkRU zhTwa(vMDF1oWgOWR|RnBb4@FT-S2c+|G%IN;Lbt)%NouJ{^>eyOfU2Zk^a8(_@ zb*-k3f1|A{Rdsqpovx{5Gqen2h&`MOjm%c<4?Y0Vfe!#+A(-fd5&1bKPGuca>U1DV zV?%e7wb+qb>{u;!hU!B!6t9KGS-Xf*fQ4Y98>DihG#sOYBijKgdl52rgmLC|p&Vc# znCJm{AE$(NGdIW|RVP}hBQ4aUJHy{jKGIY^<0$d6k1aUJ-GSuA8;&>lcFz`vv~051 z9bCKmuBYY>(?IWzD|Z$~Pf~4&#u8x9rq4zC-1F8SPd5Z z?`|8VV6_e>dIex1nAi?p>1p&zqeUmF4x$8ewV?=LA(-d_k;Ex~u}Gz9!jYy43&P9j zkCP5AtlfH&Y7^D?faWuMN`TkZjU()+ssPd>Y^8$M}!L1xR}8!Q6tebcOt+EBt%pz8>P=C%uE|{*SPW s-S0MB{pLOnfBII6`4i@+#2B1AGvnl)jBC!Do|<3VvTs@~y4aEb1kEQW>i_@% delta 2678 zcmd^BUrbw781KF9>cCNYp`|NbTS}qYE=ZXJ8In2vl(Fg9I%p{jQtoI=FZ2()?btBV zF7d^f#cVk*^-m%X8ue{Pvk>D0Plg8{PLq>Zd74kYXi^dq6QhaWceW@j+lhgaj&S>LrOIfx3nd+lb<9j@bwKJ z^k9115R1<%X*m^LPRaA}9E_B&M`Ox@lFzArE;X;l<$OFAmGdL0MJf#!1S9b_w(4;z z)lY(rffg5^0{MrMN-m#OSEE;RaaA3Glvf9&yNzes_=I(_%hCC4CYM)bC6niKsAD+# zJi-OyHs$LE@$!}XLnZQ&>A289zBjcQ4VXWLFn}PDIz<1UK#l6)jpgM)p4Ym z@usMTN!Dz6wgEE{geh{{92Z*2FXnB%6BA41yQaH(2`@um5X<{Q?S;-{HXZL=mgmXK z*6`u6LmJJEKR@>j4L43#^_m(F`ONBb-IL7J(s65rSvoe3Z{}%unks2($&@V_X30=v zmN*?YVr%w~R3sa_$2j2%AN@GM5uA9B0W!iflocm7uXu6lb5J(rtF(xz8PwSaW3laS?^))o{b55 zah%S{G?}9AblII|?ld)KaJ4_!-YixmCv|nLH!)Wi?OT5EzgD2GV%b$>t|BgIK;*1r z$U3&6+tPnq!$u=)RA!@#boC9O42ow(cz{818aJ->k_gWP2q{36nAs;`+6vLBS*m1N zQBj$)3cN*O209HEJ!Ctp#Q+ zP$SH?#{`=u8Z1t-;4}-$EV#&mIhbGwTn^#97{%b6^@<>z*lWU+d*3Ci!+IND01 zmA2#5-CaGPH5;lLgct2-2Y_9KYX4tu=zLVCD(-7le0g2y(Jt^ykY1Xh^9$6GEIX3S zk)%fDX%Otx*;iU&&c4kq>huQ6&H!@;s1e%Zllly{%vUn@#CaO{D*yb`jo0s_l(XdLLPL`-&$XTj}<{ zJ@-$cjuEu-lfAO9(*IGRQ$^VQ4s78a8~U$nSnnw74YJ-Tn!E;nSQF0RF>5}{J2wA) zfon7h^kSO<_PRym>aRRExaWkq&3M89b`h$lwW~sd{>EASsPE!S#4`Zi+HGrWQO+!6 zNxjEpzX_>rb52Pwr{d8EFHSG;cek8+o1F6an@c#74}TA?em&R^cdw@6C)E$h+n&kc ZAyLp*p*cJXZ`Cqm+YZ0E`xpvW{sYJPZg>Cy diff --git a/rides/migrations/__pycache__/0001_initial.cpython-312.pyc b/rides/migrations/__pycache__/0001_initial.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d143e72113bac63f7cbf198cb760ed88d79ae685 GIT binary patch literal 10385 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 literal 0 HcmV?d00001 diff --git a/rides/migrations/__pycache__/0002_add_readonly_ids.cpython-311.pyc b/rides/migrations/__pycache__/0002_add_readonly_ids.cpython-311.pyc deleted file mode 100644 index 8e9db798e5ed04d017fa6d0c42712b31190675da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2915 zcmeHJ%~RV(6kqvU;$tZN$N+_G8K%W;!O$i%g@(=$kQ29#o!VxS_)t~xuI(kVOeDEL zP8@pZF}M5&bUNWLX)ir+@aURTauNflocf+@(>S)Khn_mqmG!*4?`z+CKk4b$u`z|f z`0~}&+AEm7z(sFFyOZ-9FnLB8VUj@_Qdw$*${~q_$SuM`KNA+_(r&n?bPTiSm#cD^ zMT#UDeTnR3$W3C2N4tyj-(m8Ma8i~SDTkO;lgi-`;gQ|m zp};l6o!D-?t3z0XMOh5)_(|dzj@+~DU^%OR890GZ`JHzM8y;Y#6_{r#T z1oYtUjJN&N!exbxK?25I`A#o#NJG>TjN9($%F4>BCQRW7-Ebqg>Bf<2g1yALl+sUf zJEnNt;uLmGM^pv3Xtilkr!H)YqA=4PYVn3HOq*69v5sy!l>fv{DyqQc)YKcCR_eN0 z<90F%HP8<Wx|6wYBV z{XvWng}yPi^K@aMe@ETQZWh$OJyfu0LEXw1w!a?Wn0z0?rzQ1%X^<(H#t($;*z{&T zpH(+={USHjTbbN|#dN*^{xUgQRI}<<2~tVZh5Q{qeYWN&@!oBj|rwYIjFOs=mFPYD{q5$FNVvsLGnM;$l-Y%<%llf*!kZlcutnPRC(7X#(cZ&!Bp zA9A|UjWp0!5-L>6Lvgwl?yoF*>Wx4XnKaGivA#W!ly0koaOj!Af5^>_jn5FI<=T>8 zFi20J160|$yS-WJV5JM5qFTCyPA^Q_K@@;#gIddi1xJH6A<;v?jvO3nZkuM(!4?9K z3(;k&bf422cW9kk{B!C6GOu@$8L0ObCIdnFKPo!~@@Zf;{~ao?{})k-h{bp0AZCYi zaCc#$U;4>+eHk5i?E1LXwnOE<9D;fnD+ZbAdD2yR>WapNX78B1dmw6OWR@>X59{Iwe^w9Ml7Sy$OK9Nyhi zntQza+4CDY2LE2k54D(+cUH6D>Ln>x%T^0?de@_B=+w383A&E#EUDkaz=n$An`sR@-!Nm z@*HV%6hD8)cGId&t3r+XMGC@2N(yBw0+m9L_~=rxWI4IHYjEn=;p~9I1X2ga zZWR+VYX1QK2c}H1Zed{R7Aa+6;+@@;NbL>p-skV#`}z6j__&4OJbtoNk7R^?3uAb+ zb7fEg

c(Bp+2JxMg2%DpjSaR#gef=s6d}eKJ z?E!WP!EqS7K5n^eKY|pEc?80F2;akA;KiQnb5%HbzUc<-J+~IO8D*yuH2OGu0azLh zIttGby63k2n44jMfn6F?F2`ZTQGt3vHxAq;E8jQxo2j|wNA5&HlxJ+=utxCwKR}Ws&4%bP; z4eBA6$u2k2$H5-(+}7sK*5=b^+zMOtd^f(Mfgtp6t^5XF7L|djkd@=N%=7&Z-o7`Y z;tUiAA!ZaMLUf{qqa9JZ$Ued@dWJM0QKrPf;4u!)`ztH!tET%_+6n zyO#t?3UyN?8V|E?^@!a9Q!Gog2%@h@k~GkfwEPR*InxW0erWY3SGtoce-Iccz&|s` B4K)A& literal 0 HcmV?d00001 diff --git a/rides/migrations/__pycache__/__init__.cpython-311.pyc b/rides/migrations/__pycache__/__init__.cpython-311.pyc index 716207dd5a5ef34dacaf80338ca3b8a7926fb322..357333965991c19091e31c2539edb53f889d86b2 100644 GIT binary patch delta 36 qcmdnVxQCH@IWI340}z~ISD46c%ImKmTAW%`tY4CtlV3E^D<1%)oeD?* delta 33 ncmdnPxRa54IWI340}vR$lAp+J%H^Y)(n0iN5P=Rpvj9b=GgLBYGWxA#C}INgK7-W!^4AY7PAw|dFG*r>s7bTWt=I0gb$H!;p oWtPOp>lIYq;;_lhPbtkwwJTx;n$HNt#URE

-
-

{% trans "Sign In" %}

+
+
+
+

{% trans "Welcome Back" %}

- {% get_providers as socialaccount_providers %} - - {% if socialaccount_providers %} - + {% get_providers as socialaccount_providers %} -
-
-
+ {% if socialaccount_providers %} + -
- Or continue with + +
+ Or continue with email
-
- {% endif %} + {% endif %} -
- {% csrf_token %} - - {% if form.non_field_errors %} -
-
- {{ form.non_field_errors }} + + {% csrf_token %} + + {% if form.non_field_errors %} +
+
{{ form.non_field_errors }}
+
+ {% endif %} + +
+ + + {% if form.login.errors %} +

{{ form.login.errors }}

+ {% endif %} +
+ +
+ + + {% if form.password.errors %} +

{{ form.password.errors }}

+ {% endif %} +
+ +
+
+ + +
+ +
- {% endif %} -
- - - {% if form.login.errors %} -

{{ form.login.errors }}

+ {% if redirect_field_value %} + {% endif %} -
-
- - - {% if form.password.errors %} -

{{ form.password.errors }}

- {% endif %} -
- -
-
- - +
+
+ - +

- - {% if redirect_field_value %} - - {% endif %} - -
- -
- - -
-

- {% trans "Don't have an account?" %} - - {% trans "Sign up" %} - -

diff --git a/templates/account/signup.html b/templates/account/signup.html index 0be475d9..08052829 100644 --- a/templates/account/signup.html +++ b/templates/account/signup.html @@ -6,132 +6,133 @@ {% block title %}Register - ThrillWiki{% endblock %} {% block content %} -
-
-

{% trans "Sign Up" %}

+
+
+
+

{% trans "Create Account" %}

- {% get_providers as socialaccount_providers %} - - {% if socialaccount_providers %} - + {% get_providers as socialaccount_providers %} -
-
-
+ {% if socialaccount_providers %} + -
- Or continue with -
-
- {% endif %} - -
- {% csrf_token %} - - {% if form.non_field_errors %} -
-
- {{ form.non_field_errors }} -
+ +
+ Or continue with email
{% endif %} -
- - - {% if form.username.errors %} -

{{ form.username.errors }}

+ + {% csrf_token %} + + {% if form.non_field_errors %} +
+
{{ form.non_field_errors }}
+
{% endif %} + +
+ + + {% if form.username.errors %} +

{{ form.username.errors }}

+ {% endif %} +
+ +
+ + + {% if form.email.errors %} +

{{ form.email.errors }}

+ {% endif %} +
+ +
+ + + {% if form.password1.errors %} +

{{ form.password1.errors }}

+ {% endif %} +
+
    +
  • + + Must be at least 8 characters long +
  • +
  • + + Can't be too similar to your personal information +
  • +
  • + + Can't be a commonly used password +
  • +
  • + + Can't be entirely numeric +
  • +
+
- - - {% if form.email.errors %} -

{{ form.email.errors }}

- {% endif %} -
- -
- - - {% if form.password1.errors %} -

{{ form.password1.errors }}

- {% endif %} - {% if form.password1.help_text %} -

{{ form.password1.help_text }}

- {% endif %} -
- -
-
{% if redirect_field_value %} - + {% endif %} -
-
-
+

{% trans "Already have an account?" %} {% trans "Sign in" %} @@ -139,4 +140,69 @@

+ + {% endblock %} diff --git a/templates/base/base.html b/templates/base/base.html index 20a76ab2..28c262a8 100644 --- a/templates/base/base.html +++ b/templates/base/base.html @@ -1,141 +1,225 @@ {% load static %} - + {% block title %}ThrillWiki{% endblock %} - - + + + + - - + + - - + + {% block extra_head %}{% endblock %} + + + + + - + -
-