diff --git a/README.md b/README.md index 8ae2c82..e4c78c1 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Make usable intranet. 1. Install Python 3. Developed using version 3.5.2. 2. Install poetry 3. `git clone ` and `cd` into the directory -5. Run `poetry install` +5. Run `poetry install` (if you do not have postgres installed on your local machine, you might have to edit the `pyproject.toml` file to replace `psycopg` with `psycopg-binary` 6. Run `poetry shell` Follow the instructions on setting up a [postgres database](https://www.digitalocean.com/community/tutorials/how-to-use-postgresql-with-your-django-application-on-ubuntu-14-04) if you want to set up the database in the same way it is set up on Heroku. Set it up using the settings in `settings.py`. diff --git a/apply/admin.py b/apply/admin.py index 9defdd2..025733b 100644 --- a/apply/admin.py +++ b/apply/admin.py @@ -2,7 +2,7 @@ from typing import List from django.contrib import admin, messages -from django.db.models import Sum, QuerySet, Field +from django.db.models import Field, QuerySet, Sum from django.http import HttpRequest, HttpResponse from ordered_model.admin import OrderedTabularInline, OrderedInlineModelAdminMixin diff --git a/eshcIntranet/settings.py b/eshcIntranet/settings.py index 7c643b5..c6ccbf0 100644 --- a/eshcIntranet/settings.py +++ b/eshcIntranet/settings.py @@ -157,6 +157,7 @@ DATABASES = {} DATABASES['default'] = dj_database_url.config() +DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' PASSWORD_HASHERS = [ 'django.contrib.auth.hashers.PBKDF2PasswordHasher', diff --git a/eshcIntranet/urls.py b/eshcIntranet/urls.py index 386f613..e42ff5b 100644 --- a/eshcIntranet/urls.py +++ b/eshcIntranet/urls.py @@ -13,7 +13,7 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.conf.urls import url, include +from django.conf.urls import include from django.contrib import admin from allauth.account import urls from django.urls import path @@ -21,19 +21,19 @@ import home urlpatterns = [ - url(r'', include('home.urls')), - url(r'^admin/', admin.site.urls), + path('', include('home.urls')), + path('admin/', admin.site.urls), # url(r'^users/', include('users.urls', namespace='users')), - url(r'^leases/', include('leases.urls')), - url(r'^polls/', include('polls.urls')), - url(r'^hours/', include('hours.urls')), - url(r'^whiteboard/', include('whiteboard.urls')), + path('leases/', include('leases.urls')), + path('polls/', include('polls.urls')), + path('hours/', include('hours.urls')), + path('whiteboard/', include('whiteboard.urls')), path('apply/', include('apply.urls')), path('finance/', include('finance.urls')), # allauth - url(r'^accounts/', include('allauth.urls')), - url(r'^accounts/profile/', home.views.profile, name='profile'), + path('accounts/', include('allauth.urls')), + path('accounts/profile/', home.views.profile, name='profile'), path('notifications/', include('django_nyt.urls')), path('wiki/', include('wiki.urls')), diff --git a/home/urls.py b/home/urls.py index dea0ec7..5abfb0a 100644 --- a/home/urls.py +++ b/home/urls.py @@ -1,30 +1,29 @@ """Defines URL patterns for home""" - -from django.conf.urls import url from . import views +from django.urls import path app_name = 'home' urlpatterns = [ # Home page - url(r'^$', views.index, name='index'), - url(r'^mail/$', views.mail_test, name='mail_test'), + path('', views.index, name='index'), + path('mail/', views.mail_test, name='mail_test'), # User profile editing - url(r'^accounts/edit_profile/$', views.edit_profile, name='edit_profile'), - url(r'^accounts/signup/$', views.MySignupView.as_view()), + path('accounts/edit_profile/', views.edit_profile, name='edit_profile'), + path('accounts/signup/', views.MySignupView.as_view()), - url(r'^map/$', views.map, name='map'), - url(r'^gms/$', views.gms, name='gms'), - url(r'^archive/$', views.archive, name='archive'), - url(r'^gms/(?P[0-9]+)/$', views.agenda, name='agenda'), - url(r'^gms/(?P[0-9]+)/submit/$', views.submit, name='submit'), - url(r'^gms/(?P[0-9]+)/submit_update/$', views.submit_update, name='submit_update'), - url(r'^gms/(?P[0-9]+)/upload_minutes/$', views.upload_minutes, name='upload_minutes'), - url(r'^gms/(?P[0-9]+)/delete/$', views.delete, name='delete'), - url(r'^groups/$', views.groups, name='groups'), - url(r'^cash/$', views.cash, name='cash'), - url(r'^wsp/$', views.wsp, name='wsp'), - url(r'^wsp_subgroups/$', views.wsp_subgroups, name='wsp_subgroups'), - url(r'^laundry/$', views.laundry, name='laundry'), - url(r'^taskforces/$',views.taskforces,name='taskforces') + path('map/', views.map, name='map'), + path('gms/', views.gms, name='gms'), + path('archive/', views.archive, name='archive'), + path('gms//', views.agenda, name='agenda'), + path('gms//submit/', views.submit, name='submit'), + path('gms//submit_update/', views.submit_update, name='submit_update'), + path('gms//upload_minutes/', views.upload_minutes, name='upload_minutes'), + path('gms//delete/', views.delete, name='delete'), + path('groups/', views.groups, name='groups'), + path('cash/', views.cash, name='cash'), + path('wsp/', views.wsp, name='wsp'), + path('wsp_subgroups/', views.wsp_subgroups, name='wsp_subgroups'), + path('laundry/', views.laundry, name='laundry'), + path('taskforces/', views.taskforces,name='taskforces') ] diff --git a/hours/urls.py b/hours/urls.py index 56b9014..7a404a4 100644 --- a/hours/urls.py +++ b/hours/urls.py @@ -1,10 +1,9 @@ """Defines URL patterns for hours""" - -from django.conf.urls import url from . import views +from django.urls import path app_name = 'hours' urlpatterns = [ - url(r'^$', views.index, name='index'), + path('', views.index, name='index'), ] diff --git a/leases/urls.py b/leases/urls.py index 503ff20..b8fe120 100644 --- a/leases/urls.py +++ b/leases/urls.py @@ -1,12 +1,13 @@ """Defines URL patters for leases""" -from django.conf.urls import url, include +from django.conf.urls import include from . import views +from django.urls import path app_name = 'leases' urlpatterns = [ # Inventory page - url(r'^inventory/(?P[0-9]+)$', views.inventory, name='inventory'), + path('inventory/', views.inventory, name='inventory'), ] diff --git a/poetry.lock b/poetry.lock index 1d44931..986587f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -239,20 +239,23 @@ lxml = ["lxml"] [[package]] name = "bleach" -version = "4.1.0" +version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" files = [ - {file = "bleach-4.1.0-py2.py3-none-any.whl", hash = "sha256:4d2651ab93271d1129ac9cbc679f524565cc8a1b791909c4a51eac4446a15994"}, - {file = "bleach-4.1.0.tar.gz", hash = "sha256:0900d8b37eba61a802ee40ac0061f8c2b5dee29c1927dd1d233e075ebf5a71da"}, + {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, + {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, ] [package.dependencies] -packaging = "*" six = ">=1.9.0" +tinycss2 = {version = ">=1.1.0,<1.2", optional = true, markers = "extra == \"css\""} webencodings = "*" +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.2)"] + [[package]] name = "boto3" version = "1.28.53" @@ -580,19 +583,19 @@ static3 = "*" [[package]] name = "django" -version = "3.2.21" -description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." +version = "4.2.5" +description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "Django-3.2.21-py3-none-any.whl", hash = "sha256:d31b06c58aa2cd73998ca5966bc3001243d3c4e77ee2d0c479bced124765fd99"}, - {file = "Django-3.2.21.tar.gz", hash = "sha256:a5de4c484e7b7418e6d3e52a5b8794f0e6b9f9e4ce3c037018cf1c489fa87f3c"}, + {file = "Django-4.2.5-py3-none-any.whl", hash = "sha256:b6b2b5cae821077f137dc4dade696a1c2aa292f892eca28fa8d7bfdf2608ddd4"}, + {file = "Django-4.2.5.tar.gz", hash = "sha256:5e5c1c9548ffb7796b4a8a4782e9a2e5a3df3615259fc1bfd3ebc73b646146c1"}, ] [package.dependencies] -asgiref = ">=3.3.2,<4" -pytz = "*" -sqlparse = ">=0.2.2" +asgiref = ">=3.6.0,<4" +sqlparse = ">=0.3.1" +tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] argon2 = ["argon2-cffi (>=19.1.0)"] @@ -735,17 +738,17 @@ tests = ["coverage", "mock-django"] [[package]] name = "django-nyt" -version = "1.2.4" +version = "1.3" description = "A pluggable notification system written for the Django framework." optional = false python-versions = ">=3.5" files = [ - {file = "django-nyt-1.2.4.tar.gz", hash = "sha256:7e54b06edab779c35f8b636e0cb847c70f17bcdf7a11ad466228ce403e9f856e"}, - {file = "django_nyt-1.2.4-py3-none-any.whl", hash = "sha256:49b500047b041dbbac403fe72b8fc1f597f68db7522d0c04011bc76bad79b959"}, + {file = "django_nyt-1.3-py3-none-any.whl", hash = "sha256:aba75df76ec565f0d6a839f5765b41c06b3d4471f5bd5c95718397e11a33050b"}, + {file = "django_nyt-1.3.tar.gz", hash = "sha256:a92b019281b5b993be567fe25072a83c6c00bd53753e2613b374ac1efa08c383"}, ] [package.dependencies] -django = ">=2.2,<4.2" +django = ">=2.2,<4.3" [[package]] name = "django-ordered-model" @@ -1441,17 +1444,6 @@ files = [ [package.dependencies] et-xmlfile = "*" -[[package]] -name = "packaging" -version = "23.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, - {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, -] - [[package]] name = "path" version = "16.7.1" @@ -1588,6 +1580,26 @@ files = [ graphviz = ["graphviz (>=0.20.1)"] test = ["covdefaults (>=2.3)", "diff-cover (>=7.7)", "pip (>=23.2)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)", "virtualenv (>=20.24,<21)"] +[[package]] +name = "psycopg2" +version = "2.9.7" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +optional = false +python-versions = ">=3.6" +files = [ + {file = "psycopg2-2.9.7-cp310-cp310-win32.whl", hash = "sha256:1a6a2d609bce44f78af4556bea0c62a5e7f05c23e5ea9c599e07678995609084"}, + {file = "psycopg2-2.9.7-cp310-cp310-win_amd64.whl", hash = "sha256:b22ed9c66da2589a664e0f1ca2465c29b75aaab36fa209d4fb916025fb9119e5"}, + {file = "psycopg2-2.9.7-cp311-cp311-win32.whl", hash = "sha256:44d93a0109dfdf22fe399b419bcd7fa589d86895d3931b01fb321d74dadc68f1"}, + {file = "psycopg2-2.9.7-cp311-cp311-win_amd64.whl", hash = "sha256:91e81a8333a0037babfc9fe6d11e997a9d4dac0f38c43074886b0d9dead94fe9"}, + {file = "psycopg2-2.9.7-cp37-cp37m-win32.whl", hash = "sha256:d1210fcf99aae6f728812d1d2240afc1dc44b9e6cba526a06fb8134f969957c2"}, + {file = "psycopg2-2.9.7-cp37-cp37m-win_amd64.whl", hash = "sha256:e9b04cbef584310a1ac0f0d55bb623ca3244c87c51187645432e342de9ae81a8"}, + {file = "psycopg2-2.9.7-cp38-cp38-win32.whl", hash = "sha256:d5c5297e2fbc8068d4255f1e606bfc9291f06f91ec31b2a0d4c536210ac5c0a2"}, + {file = "psycopg2-2.9.7-cp38-cp38-win_amd64.whl", hash = "sha256:8275abf628c6dc7ec834ea63f6f3846bf33518907a2b9b693d41fd063767a866"}, + {file = "psycopg2-2.9.7-cp39-cp39-win32.whl", hash = "sha256:c7949770cafbd2f12cecc97dea410c514368908a103acf519f2a346134caa4d5"}, + {file = "psycopg2-2.9.7-cp39-cp39-win_amd64.whl", hash = "sha256:b6bd7d9d3a7a63faae6edf365f0ed0e9b0a1aaf1da3ca146e6b043fb3eb5d723"}, + {file = "psycopg2-2.9.7.tar.gz", hash = "sha256:f00cc35bd7119f1fed17b85bd1007855194dde2cbd8de01ab8ebb17487440ad8"}, +] + [[package]] name = "pyasn1" version = "0.5.0" @@ -2207,6 +2219,24 @@ xls = ["xlrd", "xlwt"] xlsx = ["openpyxl (>=2.6.0)"] yaml = ["pyyaml"] +[[package]] +name = "tinycss2" +version = "1.1.1" +description = "A tiny CSS parser" +optional = false +python-versions = ">=3.6" +files = [ + {file = "tinycss2-1.1.1-py3-none-any.whl", hash = "sha256:fe794ceaadfe3cf3e686b22155d0da5780dd0e273471a51846d0a02bc204fec8"}, + {file = "tinycss2-1.1.1.tar.gz", hash = "sha256:b2e44dd8883c360c35dd0d1b5aad0b610e5156c2cb3b33434634e539ead9d8bf"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["coverage[toml]", "pytest", "pytest-cov", "pytest-flake8", "pytest-isort"] + [[package]] name = "toml" version = "0.10.2" @@ -2229,6 +2259,17 @@ files = [ {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, ] +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + [[package]] name = "unicodecsv" version = "0.14.1" @@ -2344,30 +2385,27 @@ files = [ [[package]] name = "wiki" -version = "0.8.2" +version = "0.10" description = "A wiki system written for the Django framework." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "wiki-0.8.2-py3-none-any.whl", hash = "sha256:e2f319f60cebe25b48a9b1f32a8dc5f6434fcbc335daca02bd7f6eff4b4c227e"}, - {file = "wiki-0.8.2.tar.gz", hash = "sha256:2a9ffadec86374c0aca8200e0e6fab9708daa41368133c3299d812efccaea7e8"}, + {file = "wiki-0.10-py3-none-any.whl", hash = "sha256:68602143d208877c1e7012a60dee32da853847ccb517e5187a7dda08d020d3a6"}, + {file = "wiki-0.10.tar.gz", hash = "sha256:67020e57067be4a3d7fb3b2f587b56490741e44e7de01e320b3c7bc4853638f7"}, ] [package.dependencies] -bleach = ">=3.3.0,<4.2" -Django = ">=2.1,<4.1" -django-mptt = ">=0.13,<0.14" -django-nyt = ">=1.2.2,<1.3" +bleach = {version = ">=6,<7", extras = ["css"]} +django = ">=2.2,<4.3" +django-mptt = ">=0.13,<0.15" +django-nyt = ">=1.2.2" django-sekizai = ">=0.10" -Markdown = ">=3.3,<3.4" -Pillow = "*" +markdown = ">=3.3,<3.4" +pillow = "*" sorl-thumbnail = ">=12.8,<13" [package.extras] -devel = ["black (>=22.3.0,<22.4)", "codecov", "coverage", "ddt", "django-functest (>=1.2,<1.4)", "flake8 (>=3.7,<4.1)", "pre-commit", "pytest (>=6.2.5,<7.2)", "pytest-cov", "pytest-django", "pytest-pythonpath"] -test = ["codecov", "coverage", "ddt", "django-functest (>=1.2,<1.4)", "pytest (>=6.2.5,<7.2)", "pytest-cov", "pytest-django", "pytest-pythonpath"] -testlint = ["black (>=22.3.0,<22.4)", "flake8 (>=3.7,<4.1)", "pre-commit"] -transifex = ["transifex-client"] +docs = ["bleach (>=6,<7)", "django (>=3.1.13)", "sphinx (>=6,<8)", "sphinx-rtd-theme (==1.2.0)"] [[package]] name = "xlrd" @@ -2501,4 +2539,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "e9bf897aa956ced8bbea66478959cb0e7c8a6314246102ef836141a526ed4733" +content-hash = "972f35c14b82870b76186af291fe7c8c4d20380521eb149c1ec012241a7fa2bd" diff --git a/polls/forms.py b/polls/forms.py index 0fa396a..c65dfda 100644 --- a/polls/forms.py +++ b/polls/forms.py @@ -1,10 +1,10 @@ from django import forms from .models import Question from django.contrib.admin.widgets import AdminDateWidget -from django.utils.translation import ugettext_lazy as _ import datetime from django.utils import timezone +from django.utils.translation import gettext_lazy as _ class QuestionSubmitForm(forms.ModelForm): diff --git a/polls/urls.py b/polls/urls.py index 8b71533..55f6bcd 100644 --- a/polls/urls.py +++ b/polls/urls.py @@ -1,11 +1,11 @@ -from django.conf.urls import url from . import views +from django.urls import path app_name = 'polls' urlpatterns = [ - url(r'^$', views.index, name='index'), - url(r'^submit/$', views.submit, name='submit'), - url(r'^(?P[0-9]+)/delete/$', views.delete, name='delete'), - url(r'^(?P[0-9]+)/$', views.detail, name='detail'), + path('', views.index, name='index'), + path('submit/', views.submit, name='submit'), + path('/delete/', views.delete, name='delete'), + path('/', views.detail, name='detail'), ] diff --git a/pyproject.toml b/pyproject.toml index 3de8bda..79173ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = ["eshc"] [tool.poetry.dependencies] python = "^3.9" -Django = "^3.1.14" +Django = "^4.2.5" boto3 = "^1.23.4" Markdown = "^3.3.7" autopep8 = "^1.6.0" @@ -34,6 +34,7 @@ olefile = "^0.46" pathtools = "^0.1.2" pdfrw = "^0.4" pipdeptree = "^2.2.1" +psycopg2 = "^2.8.3" pyquery = "^1.4.3" python-http-client = "^3.3.7" python-quickbooks = "^0.9.1" @@ -44,7 +45,7 @@ unicodecsv = "^0.14.1" Unidecode = "^1.3.4" whitenoise = "^6.1.0" Whoosh = "^2.7.4" -wiki = "^0.8.2" +wiki = "^0.10" Genshi = "^0.7.7" appdirs = "^1.4.4" authclient = "^1.0" diff --git a/users/urls.py b/users/urls.py index ee6203e..8913c33 100644 --- a/users/urls.py +++ b/users/urls.py @@ -1,21 +1,22 @@ """Defines URL patters for users""" -from django.conf.urls import url, include +from django.conf.urls import include from django.contrib.auth.views import login from . import views +from django.urls import path app_name = 'users' urlpatterns = [ # Login page - url(r'^login/$', login, {'template_name': 'users/login.html'}, name='login'), + path('login/', login, {'template_name': 'users/login.html'}, name='login'), # Logout page - url(r'^logout/$', views.logout_view, name='logout'), + path('logout/', views.logout_view, name='logout'), # New user registration - url(r'^register/$', views.register, name='register'), + path('register/', views.register, name='register'), # User profile info - url(r'^profile/$', views.profile, name='profile'), + path('profile/', views.profile, name='profile'), # User profile editing - url(r'^edit_profile/$', views.edit_profile, name='edit_profile') + path('edit_profile/', views.edit_profile, name='edit_profile') ] diff --git a/whiteboard/urls.py b/whiteboard/urls.py index 06914f0..5f9d1b9 100644 --- a/whiteboard/urls.py +++ b/whiteboard/urls.py @@ -1,12 +1,11 @@ """Defines URL patterns for whiteboard""" -from django.conf.urls import url - from . import views +from django.urls import path app_name = 'whiteboard' urlpatterns = [ - url(r'^$', views.index, name='index'), - url(r'^new/$', views.add_note, name='add_note'), + path('', views.index, name='index'), + path('new/', views.add_note, name='add_note'), ]