From be855c6c904451c49432cc1203adcc1ff7658fc6 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sat, 5 Oct 2019 18:14:41 +0200 Subject: [PATCH 01/23] django2.2: migrate url to re_path --- accounting/urls.py | 70 ++++++++++++------------ api/urls.py | 10 ++-- club/urls.py | 56 ++++++++++--------- com/urls.py | 66 ++++++++++++----------- core/urls.py | 124 +++++++++++++++++++++++-------------------- counter/urls.py | 66 +++++++++++------------ eboutic/urls.py | 10 ++-- election/urls.py | 34 ++++++------ forum/urls.py | 42 ++++++++------- launderette/urls.py | 28 +++++----- matmat/urls.py | 10 ++-- pedagogy/urls.py | 20 +++---- requirements.txt | 2 +- rootplace/urls.py | 6 +-- sas/urls.py | 28 +++++----- sith/urls.py | 77 ++++++++++++++++----------- stock/urls.py | 38 ++++++------- subscription/urls.py | 6 +-- trombi/urls.py | 36 +++++++------ 19 files changed, 387 insertions(+), 342 deletions(-) diff --git a/accounting/urls.py b/accounting/urls.py index 63882d45..70eeb158 100644 --- a/accounting/urls.py +++ b/accounting/urls.py @@ -22,131 +22,133 @@ # # -from django.conf.urls import url +from django.urls import re_path from accounting.views import * urlpatterns = [ # Accounting types - url( + re_path( r"^simple_type$", SimplifiedAccountingTypeListView.as_view(), name="simple_type_list", ), - url( + re_path( r"^simple_type/create$", SimplifiedAccountingTypeCreateView.as_view(), name="simple_type_new", ), - url( + re_path( r"^simple_type/(?P[0-9]+)/edit$", SimplifiedAccountingTypeEditView.as_view(), name="simple_type_edit", ), # Accounting types - url(r"^type$", AccountingTypeListView.as_view(), name="type_list"), - url(r"^type/create$", AccountingTypeCreateView.as_view(), name="type_new"), - url( + re_path(r"^type$", AccountingTypeListView.as_view(), name="type_list"), + re_path(r"^type/create$", AccountingTypeCreateView.as_view(), name="type_new"), + re_path( r"^type/(?P[0-9]+)/edit$", AccountingTypeEditView.as_view(), name="type_edit", ), # Bank accounts - url(r"^$", BankAccountListView.as_view(), name="bank_list"), - url(r"^bank/create$", BankAccountCreateView.as_view(), name="bank_new"), - url( + re_path(r"^$", BankAccountListView.as_view(), name="bank_list"), + re_path(r"^bank/create$", BankAccountCreateView.as_view(), name="bank_new"), + re_path( r"^bank/(?P[0-9]+)$", BankAccountDetailView.as_view(), name="bank_details", ), - url( + re_path( r"^bank/(?P[0-9]+)/edit$", BankAccountEditView.as_view(), name="bank_edit", ), - url( + re_path( r"^bank/(?P[0-9]+)/delete$", BankAccountDeleteView.as_view(), name="bank_delete", ), # Club accounts - url(r"^club/create$", ClubAccountCreateView.as_view(), name="club_new"), - url( + re_path(r"^club/create$", ClubAccountCreateView.as_view(), name="club_new"), + re_path( r"^club/(?P[0-9]+)$", ClubAccountDetailView.as_view(), name="club_details", ), - url( + re_path( r"^club/(?P[0-9]+)/edit$", ClubAccountEditView.as_view(), name="club_edit", ), - url( + re_path( r"^club/(?P[0-9]+)/delete$", ClubAccountDeleteView.as_view(), name="club_delete", ), # Journals - url(r"^journal/create$", JournalCreateView.as_view(), name="journal_new"), - url( + re_path(r"^journal/create$", JournalCreateView.as_view(), name="journal_new"), + re_path( r"^journal/(?P[0-9]+)$", JournalDetailView.as_view(), name="journal_details", ), - url( + re_path( r"^journal/(?P[0-9]+)/edit$", JournalEditView.as_view(), name="journal_edit", ), - url( + re_path( r"^journal/(?P[0-9]+)/delete$", JournalDeleteView.as_view(), name="journal_delete", ), - url( + re_path( r"^journal/(?P[0-9]+)/statement/nature$", JournalNatureStatementView.as_view(), name="journal_nature_statement", ), - url( + re_path( r"^journal/(?P[0-9]+)/statement/person$", JournalPersonStatementView.as_view(), name="journal_person_statement", ), - url( + re_path( r"^journal/(?P[0-9]+)/statement/accounting$", JournalAccountingStatementView.as_view(), name="journal_accounting_statement", ), # Operations - url( + re_path( r"^operation/create/(?P[0-9]+)$", OperationCreateView.as_view(), name="op_new", ), - url(r"^operation/(?P[0-9]+)$", OperationEditView.as_view(), name="op_edit"), - url( + re_path( + r"^operation/(?P[0-9]+)$", OperationEditView.as_view(), name="op_edit" + ), + re_path( r"^operation/(?P[0-9]+)/pdf$", OperationPDFView.as_view(), name="op_pdf" ), # Companies - url(r"^company/list$", CompanyListView.as_view(), name="co_list"), - url(r"^company/create$", CompanyCreateView.as_view(), name="co_new"), - url(r"^company/(?P[0-9]+)$", CompanyEditView.as_view(), name="co_edit"), + re_path(r"^company/list$", CompanyListView.as_view(), name="co_list"), + re_path(r"^company/create$", CompanyCreateView.as_view(), name="co_new"), + re_path(r"^company/(?P[0-9]+)$", CompanyEditView.as_view(), name="co_edit"), # Labels - url(r"^label/new$", LabelCreateView.as_view(), name="label_new"), - url( + re_path(r"^label/new$", LabelCreateView.as_view(), name="label_new"), + re_path( r"^label/(?P[0-9]+)$", LabelListView.as_view(), name="label_list", ), - url( + re_path( r"^label/(?P[0-9]+)/edit$", LabelEditView.as_view(), name="label_edit" ), - url( + re_path( r"^label/(?P[0-9]+)/delete$", LabelDeleteView.as_view(), name="label_delete", ), # User account - url(r"^refound/account$", RefoundAccountView.as_view(), name="refound_account"), + re_path(r"^refound/account$", RefoundAccountView.as_view(), name="refound_account"), ] diff --git a/api/urls.py b/api/urls.py index 60a4922c..7a21c608 100644 --- a/api/urls.py +++ b/api/urls.py @@ -22,7 +22,7 @@ # # -from django.conf.urls import url, include +from django.urls import re_path, include from api.views import * from rest_framework import routers @@ -49,8 +49,8 @@ router.register( urlpatterns = [ # API - url(r"^", include(router.urls)), - url(r"^login/", include("rest_framework.urls", namespace="rest_framework")), - url(r"^markdown$", RenderMarkdown, name="api_markdown"), - url(r"^mailings$", FetchMailingLists, name="mailings_fetch"), + re_path(r"^", include(router.urls)), + re_path(r"^login/", include("rest_framework.re_paths", namespace="rest_framework")), + re_path(r"^markdown$", RenderMarkdown, name="api_markdown"), + re_path(r"^mailings$", FetchMailingLists, name="mailings_fetch"), ] diff --git a/club/urls.py b/club/urls.py index c5a01e02..ca7bdf96 100644 --- a/club/urls.py +++ b/club/urls.py @@ -23,80 +23,88 @@ # # -from django.conf.urls import url +from django.urls import re_path from club.views import * urlpatterns = [ - url(r"^$", ClubListView.as_view(), name="club_list"), - url(r"^new$", ClubCreateView.as_view(), name="club_new"), - url(r"^stats$", ClubStatView.as_view(), name="club_stats"), - url(r"^(?P[0-9]+)/$", ClubView.as_view(), name="club_view"), - url( + re_path(r"^$", ClubListView.as_view(), name="club_list"), + re_path(r"^new$", ClubCreateView.as_view(), name="club_new"), + re_path(r"^stats$", ClubStatView.as_view(), name="club_stats"), + re_path(r"^(?P[0-9]+)/$", ClubView.as_view(), name="club_view"), + re_path( r"^(?P[0-9]+)/rev/(?P[0-9]+)/$", ClubRevView.as_view(), name="club_view_rev", ), - url(r"^(?P[0-9]+)/hist$", ClubPageHistView.as_view(), name="club_hist"), - url(r"^(?P[0-9]+)/edit$", ClubEditView.as_view(), name="club_edit"), - url( + re_path( + r"^(?P[0-9]+)/hist$", ClubPageHistView.as_view(), name="club_hist" + ), + re_path(r"^(?P[0-9]+)/edit$", ClubEditView.as_view(), name="club_edit"), + re_path( r"^(?P[0-9]+)/edit/page$", ClubPageEditView.as_view(), name="club_edit_page", ), - url( + re_path( r"^(?P[0-9]+)/members$", ClubMembersView.as_view(), name="club_members" ), - url( + re_path( r"^(?P[0-9]+)/elderlies$", ClubOldMembersView.as_view(), name="club_old_members", ), - url( + re_path( r"^(?P[0-9]+)/sellings$", ClubSellingView.as_view(), name="club_sellings", ), - url( + re_path( r"^(?P[0-9]+)/sellings/csv$", ClubSellingCSVView.as_view(), name="sellings_csv", ), - url(r"^(?P[0-9]+)/prop$", ClubEditPropView.as_view(), name="club_prop"), - url(r"^(?P[0-9]+)/tools$", ClubToolsView.as_view(), name="tools"), - url(r"^(?P[0-9]+)/mailing$", ClubMailingView.as_view(), name="mailing"), - url( + re_path( + r"^(?P[0-9]+)/prop$", ClubEditPropView.as_view(), name="club_prop" + ), + re_path(r"^(?P[0-9]+)/tools$", ClubToolsView.as_view(), name="tools"), + re_path( + r"^(?P[0-9]+)/mailing$", ClubMailingView.as_view(), name="mailing" + ), + re_path( r"^(?P[0-9]+)/mailing/generate$", MailingAutoGenerationView.as_view(), name="mailing_generate", ), - url( + re_path( r"^(?P[0-9]+)/mailing/delete$", MailingDeleteView.as_view(), name="mailing_delete", ), - url( + re_path( r"^(?P[0-9]+)/mailing/delete/subscription$", MailingSubscriptionDeleteView.as_view(), name="mailing_subscription_delete", ), - url( + re_path( r"^membership/(?P[0-9]+)/set_old$", MembershipSetOldView.as_view(), name="membership_set_old", ), - url(r"^(?P[0-9]+)/poster$", PosterListView.as_view(), name="poster_list"), - url( + re_path( + r"^(?P[0-9]+)/poster$", PosterListView.as_view(), name="poster_list" + ), + re_path( r"^(?P[0-9]+)/poster/create$", PosterCreateView.as_view(), name="poster_create", ), - url( + re_path( r"^(?P[0-9]+)/poster/(?P[0-9]+)/edit$", PosterEditView.as_view(), name="poster_edit", ), - url( + re_path( r"^(?P[0-9]+)/poster/(?P[0-9]+)/delete$", PosterDeleteView.as_view(), name="poster_delete", diff --git a/com/urls.py b/com/urls.py index 1caff5fc..6128d1d4 100644 --- a/com/urls.py +++ b/com/urls.py @@ -22,97 +22,103 @@ # # -from django.conf.urls import url +from django.urls import re_path from com.views import * from club.views import MailingDeleteView urlpatterns = [ - url(r"^sith/edit/alert$", AlertMsgEditView.as_view(), name="alert_edit"), - url(r"^sith/edit/info$", InfoMsgEditView.as_view(), name="info_edit"), - url( + re_path(r"^sith/edit/alert$", AlertMsgEditView.as_view(), name="alert_edit"), + re_path(r"^sith/edit/info$", InfoMsgEditView.as_view(), name="info_edit"), + re_path( r"^sith/edit/weekmail_destinations$", WeekmailDestinationEditView.as_view(), name="weekmail_destinations", ), - url(r"^weekmail$", WeekmailEditView.as_view(), name="weekmail"), - url(r"^weekmail/preview$", WeekmailPreviewView.as_view(), name="weekmail_preview"), - url( + re_path(r"^weekmail$", WeekmailEditView.as_view(), name="weekmail"), + re_path( + r"^weekmail/preview$", WeekmailPreviewView.as_view(), name="weekmail_preview" + ), + re_path( r"^weekmail/new_article$", WeekmailArticleCreateView.as_view(), name="weekmail_article", ), - url( + re_path( r"^weekmail/article/(?P[0-9]+)/delete$", WeekmailArticleDeleteView.as_view(), name="weekmail_article_delete", ), - url( + re_path( r"^weekmail/article/(?P[0-9]+)/edit$", WeekmailArticleEditView.as_view(), name="weekmail_article_edit", ), - url(r"^news$", NewsListView.as_view(), name="news_list"), - url(r"^news/admin$", NewsAdminListView.as_view(), name="news_admin_list"), - url(r"^news/create$", NewsCreateView.as_view(), name="news_new"), - url( + re_path(r"^news$", NewsListView.as_view(), name="news_list"), + re_path(r"^news/admin$", NewsAdminListView.as_view(), name="news_admin_list"), + re_path(r"^news/create$", NewsCreateView.as_view(), name="news_new"), + re_path( r"^news/(?P[0-9]+)/delete$", NewsDeleteView.as_view(), name="news_delete", ), - url( + re_path( r"^news/(?P[0-9]+)/moderate$", NewsModerateView.as_view(), name="news_moderate", ), - url(r"^news/(?P[0-9]+)/edit$", NewsEditView.as_view(), name="news_edit"), - url(r"^news/(?P[0-9]+)$", NewsDetailView.as_view(), name="news_detail"), - url(r"^mailings$", MailingListAdminView.as_view(), name="mailing_admin"), - url( + re_path( + r"^news/(?P[0-9]+)/edit$", NewsEditView.as_view(), name="news_edit" + ), + re_path( + r"^news/(?P[0-9]+)$", NewsDetailView.as_view(), name="news_detail" + ), + re_path(r"^mailings$", MailingListAdminView.as_view(), name="mailing_admin"), + re_path( r"^mailings/(?P[0-9]+)/moderate$", MailingModerateView.as_view(), name="mailing_moderate", ), - url( + re_path( r"^mailings/(?P[0-9]+)/delete$", MailingDeleteView.as_view(redirect_page="com:mailing_admin"), name="mailing_delete", ), - url(r"^poster$", PosterListView.as_view(), name="poster_list"), - url(r"^poster/create$", PosterCreateView.as_view(), name="poster_create"), - url( + re_path(r"^poster$", PosterListView.as_view(), name="poster_list"), + re_path(r"^poster/create$", PosterCreateView.as_view(), name="poster_create"), + re_path( r"^poster/(?P[0-9]+)/edit$", PosterEditView.as_view(), name="poster_edit", ), - url( + re_path( r"^poster/(?P[0-9]+)/delete$", PosterDeleteView.as_view(), name="poster_delete", ), - url( + re_path( r"^poster/moderate$", PosterModerateListView.as_view(), name="poster_moderate_list", ), - url( + re_path( r"^poster/(?P[0-9]+)/moderate$", PosterModerateView.as_view(), name="poster_moderate", ), - url(r"^screen$", ScreenListView.as_view(), name="screen_list"), - url(r"^screen/create$", ScreenCreateView.as_view(), name="screen_create"), - url( + re_path(r"^screen$", ScreenListView.as_view(), name="screen_list"), + re_path(r"^screen/create$", ScreenCreateView.as_view(), name="screen_create"), + re_path( r"^screen/(?P[0-9]+)/slideshow$", ScreenSlideshowView.as_view(), name="screen_slideshow", ), - url( + re_path( r"^screen/(?P[0-9]+)/edit$", ScreenEditView.as_view(), name="screen_edit", ), - url( + re_path( r"^screen/(?P[0-9]+)/delete$", ScreenDeleteView.as_view(), name="screen_delete", diff --git a/core/urls.py b/core/urls.py index 6798a6bb..d937e4de 100644 --- a/core/urls.py +++ b/core/urls.py @@ -23,189 +23,195 @@ # # -from django.conf.urls import url +from django.urls import re_path from core.views import * urlpatterns = [ - url(r"^$", index, name="index"), - url(r"^to_markdown$", ToMarkdownView.as_view(), name="to_markdown"), - url(r"^notifications$", NotificationList.as_view(), name="notification_list"), - url(r"^notification/(?P[0-9]+)$", notification, name="notification"), + re_path(r"^$", index, name="index"), + re_path(r"^to_markdown$", ToMarkdownView.as_view(), name="to_markdown"), + re_path(r"^notifications$", NotificationList.as_view(), name="notification_list"), + re_path(r"^notification/(?P[0-9]+)$", notification, name="notification"), # Search - url(r"^search/$", search_view, name="search"), - url(r"^search_json/$", search_json, name="search_json"), - url(r"^search_user/$", search_user_json, name="search_user"), + re_path(r"^search/$", search_view, name="search"), + re_path(r"^search_json/$", search_json, name="search_json"), + re_path(r"^search_user/$", search_user_json, name="search_user"), # Login and co - url(r"^login/$", login, name="login"), - url(r"^logout/$", logout, name="logout"), - url(r"^password_change/$", password_change, name="password_change"), - url( + re_path(r"^login/$", login, name="login"), + re_path(r"^logout/$", logout, name="logout"), + re_path(r"^password_change/$", password_change, name="password_change"), + re_path( r"^password_change/(?P[0-9]+)$", password_root_change, name="password_root_change", ), - url(r"^password_change/done$", password_change_done, name="password_change_done"), - url(r"^password_reset/$", password_reset, name="password_reset"), - url(r"^password_reset/done$", password_reset_done, name="password_reset_done"), - url( + re_path( + r"^password_change/done$", password_change_done, name="password_change_done" + ), + re_path(r"^password_reset/$", password_reset, name="password_reset"), + re_path(r"^password_reset/done$", password_reset_done, name="password_reset_done"), + re_path( r"^reset/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$", password_reset_confirm, name="password_reset_confirm", ), - url(r"^reset/done/$", password_reset_complete, name="password_reset_complete"), - url(r"^register$", register, name="register"), + re_path(r"^reset/done/$", password_reset_complete, name="password_reset_complete"), + re_path(r"^register$", register, name="register"), # Group handling - url(r"^group/$", GroupListView.as_view(), name="group_list"), - url(r"^group/new$", GroupCreateView.as_view(), name="group_new"), - url(r"^group/(?P[0-9]+)/$", GroupEditView.as_view(), name="group_edit"), - url( + re_path(r"^group/$", GroupListView.as_view(), name="group_list"), + re_path(r"^group/new$", GroupCreateView.as_view(), name="group_new"), + re_path( + r"^group/(?P[0-9]+)/$", GroupEditView.as_view(), name="group_edit" + ), + re_path( r"^group/(?P[0-9]+)/delete$", GroupDeleteView.as_view(), name="group_delete", ), - url( + re_path( r"^group/(?P[0-9]+)/detail$", GroupTemplateView.as_view(), name="group_detail", ), # User views - url(r"^user/$", UserListView.as_view(), name="user_list"), - url( + re_path(r"^user/$", UserListView.as_view(), name="user_list"), + re_path( r"^user/(?P[0-9]+)/mini$", UserMiniView.as_view(), name="user_profile_mini", ), - url(r"^user/(?P[0-9]+)/$", UserView.as_view(), name="user_profile"), - url( + re_path(r"^user/(?P[0-9]+)/$", UserView.as_view(), name="user_profile"), + re_path( r"^user/(?P[0-9]+)/pictures$", UserPicturesView.as_view(), name="user_pictures", ), - url( + re_path( r"^user/(?P[0-9]+)/godfathers$", UserGodfathersView.as_view(), name="user_godfathers", ), - url( + re_path( r"^user/(?P[0-9]+)/godfathers/tree$", UserGodfathersTreeView.as_view(), name="user_godfathers_tree", ), - url( + re_path( r"^user/(?P[0-9]+)/godfathers/tree/pict$", UserGodfathersTreePictureView.as_view(), name="user_godfathers_tree_pict", ), - url( + re_path( r"^user/(?P[0-9]+)/godfathers/(?P[0-9]+)/(?P(True)|(False))/delete$", DeleteUserGodfathers, name="user_godfathers_delete", ), - url( + re_path( r"^user/(?P[0-9]+)/edit$", UserUpdateProfileView.as_view(), name="user_edit", ), - url( + re_path( r"^user/(?P[0-9]+)/profile_upload$", UserUploadProfilePictView.as_view(), name="user_profile_upload", ), - url(r"^user/(?P[0-9]+)/clubs$", UserClubView.as_view(), name="user_clubs"), - url( + re_path( + r"^user/(?P[0-9]+)/clubs$", UserClubView.as_view(), name="user_clubs" + ), + re_path( r"^user/(?P[0-9]+)/prefs$", UserPreferencesView.as_view(), name="user_prefs", ), - url( + re_path( r"^user/(?P[0-9]+)/groups$", UserUpdateGroupView.as_view(), name="user_groups", ), - url(r"^user/tools/$", UserToolsView.as_view(), name="user_tools"), - url( + re_path(r"^user/tools/$", UserToolsView.as_view(), name="user_tools"), + re_path( r"^user/(?P[0-9]+)/account$", UserAccountView.as_view(), name="user_account", ), - url( + re_path( r"^user/(?P[0-9]+)/account/(?P[0-9]+)/(?P[0-9]+)$", UserAccountDetailView.as_view(), name="user_account_detail", ), - url( + re_path( r"^user/(?P[0-9]+)/stats$", UserStatsView.as_view(), name="user_stats" ), - url( + re_path( r"^user/(?P[0-9]+)/gift/create$", GiftCreateView.as_view(), name="user_gift_create", ), - url( + re_path( r"^user/(?P[0-9]+)/gift/delete/(?P[0-9]+)/$", GiftDeleteView.as_view(), name="user_gift_delete", ), # File views - # url(r'^file/add/(?Ppopup)?$', FileCreateView.as_view(), name='file_new'), - url(r"^file/(?Ppopup)?$", FileListView.as_view(), name="file_list"), - url( + # re_path(r'^file/add/(?Ppopup)?$', FileCreateView.as_view(), name='file_new'), + re_path(r"^file/(?Ppopup)?$", FileListView.as_view(), name="file_list"), + re_path( r"^file/(?P[0-9]+)/(?Ppopup)?$", FileView.as_view(), name="file_detail", ), - url( + re_path( r"^file/(?P[0-9]+)/edit/(?Ppopup)?$", FileEditView.as_view(), name="file_edit", ), - url( + re_path( r"^file/(?P[0-9]+)/prop/(?Ppopup)?$", FileEditPropView.as_view(), name="file_prop", ), - url( + re_path( r"^file/(?P[0-9]+)/delete/(?Ppopup)?$", FileDeleteView.as_view(), name="file_delete", ), - url(r"^file/moderation$", FileModerationView.as_view(), name="file_moderation"), - url( + re_path(r"^file/moderation$", FileModerationView.as_view(), name="file_moderation"), + re_path( r"^file/(?P[0-9]+)/moderate$", FileModerateView.as_view(), name="file_moderate", ), - url(r"^file/(?P[0-9]+)/download$", send_file, name="download"), + re_path(r"^file/(?P[0-9]+)/download$", send_file, name="download"), # Page views - url(r"^page/$", PageListView.as_view(), name="page_list"), - url(r"^page/create$", PageCreateView.as_view(), name="page_new"), - url( + re_path(r"^page/$", PageListView.as_view(), name="page_list"), + re_path(r"^page/create$", PageCreateView.as_view(), name="page_new"), + re_path( r"^page/(?P[0-9]*)/delete$", PageDeleteView.as_view(), name="page_delete", ), - url( + re_path( r"^page/(?P([/a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9])+)/edit$", PageEditView.as_view(), name="page_edit", ), - url( + re_path( r"^page/(?P([/a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9])+)/prop$", PagePropView.as_view(), name="page_prop", ), - url( + re_path( r"^page/(?P([/a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9])+)/hist$", PageHistView.as_view(), name="page_hist", ), - url( + re_path( r"^page/(?P([/a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9])+)/rev/(?P[0-9]+)/", PageRevView.as_view(), name="page_rev", ), - url( + re_path( r"^page/(?P([/a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9])+)/$", PageView.as_view(), name="page", diff --git a/counter/urls.py b/counter/urls.py index fe3d90fa..42451bd4 100644 --- a/counter/urls.py +++ b/counter/urls.py @@ -22,119 +22,119 @@ # # -from django.conf.urls import url +from django.urls import re_path from counter.views import * urlpatterns = [ - url(r"^(?P[0-9]+)$", CounterMain.as_view(), name="details"), - url( + re_path(r"^(?P[0-9]+)$", CounterMain.as_view(), name="details"), + re_path( r"^(?P[0-9]+)/click/(?P[0-9]+)$", CounterClick.as_view(), name="click", ), - url( + re_path( r"^(?P[0-9]+)/last_ops$", CounterLastOperationsView.as_view(), name="last_ops", ), - url( + re_path( r"^(?P[0-9]+)/cash_summary$", CounterCashSummaryView.as_view(), name="cash_summary", ), - url( + re_path( r"^(?P[0-9]+)/activity$", CounterActivityView.as_view(), name="activity", ), - url(r"^(?P[0-9]+)/stats$", CounterStatView.as_view(), name="stats"), - url(r"^(?P[0-9]+)/login$", CounterLogin.as_view(), name="login"), - url(r"^(?P[0-9]+)/logout$", CounterLogout.as_view(), name="logout"), - url( + re_path(r"^(?P[0-9]+)/stats$", CounterStatView.as_view(), name="stats"), + re_path(r"^(?P[0-9]+)/login$", CounterLogin.as_view(), name="login"), + re_path(r"^(?P[0-9]+)/logout$", CounterLogout.as_view(), name="logout"), + re_path( r"^eticket/(?P[0-9]+)/pdf$", EticketPDFView.as_view(), name="eticket_pdf", ), - url( + re_path( r"^customer/(?P[0-9]+)/card/add$", StudentCardFormView.as_view(), name="add_student_card", ), - url( + re_path( r"^customer/(?P[0-9]+)/card/delete/(?P[0-9]+)/$", StudentCardDeleteView.as_view(), name="delete_student_card", ), - url(r"^admin/(?P[0-9]+)$", CounterEditView.as_view(), name="admin"), - url( + re_path(r"^admin/(?P[0-9]+)$", CounterEditView.as_view(), name="admin"), + re_path( r"^admin/(?P[0-9]+)/prop$", CounterEditPropView.as_view(), name="prop_admin", ), - url(r"^admin$", CounterListView.as_view(), name="admin_list"), - url(r"^admin/new$", CounterCreateView.as_view(), name="new"), - url( + re_path(r"^admin$", CounterListView.as_view(), name="admin_list"), + re_path(r"^admin/new$", CounterCreateView.as_view(), name="new"), + re_path( r"^admin/delete/(?P[0-9]+)$", CounterDeleteView.as_view(), name="delete", ), - url(r"^admin/invoices_call$", InvoiceCallView.as_view(), name="invoices_call"), - url( + re_path(r"^admin/invoices_call$", InvoiceCallView.as_view(), name="invoices_call"), + re_path( r"^admin/cash_summary/list$", CashSummaryListView.as_view(), name="cash_summary_list", ), - url( + re_path( r"^admin/cash_summary/(?P[0-9]+)$", CashSummaryEditView.as_view(), name="cash_summary_edit", ), - url(r"^admin/product/list$", ProductListView.as_view(), name="product_list"), - url( + re_path(r"^admin/product/list$", ProductListView.as_view(), name="product_list"), + re_path( r"^admin/product/list_archived$", ProductArchivedListView.as_view(), name="product_list_archived", ), - url(r"^admin/product/create$", ProductCreateView.as_view(), name="new_product"), - url( + re_path(r"^admin/product/create$", ProductCreateView.as_view(), name="new_product"), + re_path( r"^admin/product/(?P[0-9]+)$", ProductEditView.as_view(), name="product_edit", ), - url( + re_path( r"^admin/producttype/list$", ProductTypeListView.as_view(), name="producttype_list", ), - url( + re_path( r"^admin/producttype/create$", ProductTypeCreateView.as_view(), name="new_producttype", ), - url( + re_path( r"^admin/producttype/(?P[0-9]+)$", ProductTypeEditView.as_view(), name="producttype_edit", ), - url(r"^admin/eticket/list$", EticketListView.as_view(), name="eticket_list"), - url(r"^admin/eticket/new$", EticketCreateView.as_view(), name="new_eticket"), - url( + re_path(r"^admin/eticket/list$", EticketListView.as_view(), name="eticket_list"), + re_path(r"^admin/eticket/new$", EticketCreateView.as_view(), name="new_eticket"), + re_path( r"^admin/eticket/(?P[0-9]+)$", EticketEditView.as_view(), name="edit_eticket", ), - url( + re_path( r"^admin/selling/(?P[0-9]+)/delete$", SellingDeleteView.as_view(), name="selling_delete", ), - url( + re_path( r"^admin/refilling/(?P[0-9]+)/delete$", RefillingDeleteView.as_view(), name="refilling_delete", ), - url( + re_path( r"^admin/(?P[0-9]+)/refillings$", CounterRefillingListView.as_view(), name="refilling_list", diff --git a/eboutic/urls.py b/eboutic/urls.py index 4ee79f53..a072efb4 100644 --- a/eboutic/urls.py +++ b/eboutic/urls.py @@ -22,16 +22,16 @@ # # -from django.conf.urls import url +from django.urls import re_path from eboutic.views import * urlpatterns = [ # Subscription views - url(r"^$", EbouticMain.as_view(), name="main"), - url(r"^command$", EbouticCommand.as_view(), name="command"), - url(r"^pay$", EbouticPayWithSith.as_view(), name="pay_with_sith"), - url( + re_path(r"^$", EbouticMain.as_view(), name="main"), + re_path(r"^command$", EbouticCommand.as_view(), name="command"), + re_path(r"^pay$", EbouticPayWithSith.as_view(), name="pay_with_sith"), + re_path( r"^et_autoanswer$", EtransactionAutoAnswer.as_view(), name="etransation_autoanswer", diff --git a/election/urls.py b/election/urls.py index c7bde487..4d6b4e1e 100644 --- a/election/urls.py +++ b/election/urls.py @@ -1,55 +1,57 @@ -from django.conf.urls import url +from django.urls import re_path from election.views import * urlpatterns = [ - url(r"^$", ElectionsListView.as_view(), name="list"), - url(r"^archived$", ElectionListArchivedView.as_view(), name="list_archived"), - url(r"^add$", ElectionCreateView.as_view(), name="create"), - url(r"^(?P[0-9]+)/edit$", ElectionUpdateView.as_view(), name="update"), - url( + re_path(r"^$", ElectionsListView.as_view(), name="list"), + re_path(r"^archived$", ElectionListArchivedView.as_view(), name="list_archived"), + re_path(r"^add$", ElectionCreateView.as_view(), name="create"), + re_path( + r"^(?P[0-9]+)/edit$", ElectionUpdateView.as_view(), name="update" + ), + re_path( r"^(?P[0-9]+)/delete$", ElectionDeleteView.as_view(), name="delete" ), - url( + re_path( r"^(?P[0-9]+)/list/add$", ElectionListCreateView.as_view(), name="create_list", ), - url( + re_path( r"^(?P[0-9]+)/list/delete$", ElectionListDeleteView.as_view(), name="delete_list", ), - url( + re_path( r"^(?P[0-9]+)/role/create$", RoleCreateView.as_view(), name="create_role", ), - url( + re_path( r"^(?P[0-9]+)/role/edit$", RoleUpdateView.as_view(), name="update_role" ), - url( + re_path( r"^(?P[0-9]+)/role/delete$", RoleDeleteView.as_view(), name="delete_role", ), - url( + re_path( r"^(?P[0-9]+)/candidate/add$", CandidatureCreateView.as_view(), name="candidate", ), - url( + re_path( r"^(?P[0-9]+)/candidate/edit$", CandidatureUpdateView.as_view(), name="update_candidate", ), - url( + re_path( r"^(?P[0-9]+)/candidate/delete$", CandidatureDeleteView.as_view(), name="delete_candidate", ), - url(r"^(?P[0-9]+)/vote$", VoteFormView.as_view(), name="vote"), - url( + re_path(r"^(?P[0-9]+)/vote$", VoteFormView.as_view(), name="vote"), + re_path( r"^(?P[0-9]+)/detail$", ElectionDetailView.as_view(), name="detail" ), ] diff --git a/forum/urls.py b/forum/urls.py index 9a504034..de19d7cc 100644 --- a/forum/urls.py +++ b/forum/urls.py @@ -22,64 +22,68 @@ # # -from django.conf.urls import url +from django.urls import re_path from forum.views import * urlpatterns = [ - url(r"^$", ForumMainView.as_view(), name="main"), - url(r"^search/$", ForumSearchView.as_view(), name="search"), - url(r"^new_forum$", ForumCreateView.as_view(), name="new_forum"), - url(r"^mark_all_as_read$", ForumMarkAllAsRead.as_view(), name="mark_all_as_read"), - url(r"^last_unread$", ForumLastUnread.as_view(), name="last_unread"), - url(r"^favorite_topics$", ForumFavoriteTopics.as_view(), name="favorite_topics"), - url(r"^(?P[0-9]+)$", ForumDetailView.as_view(), name="view_forum"), - url(r"^(?P[0-9]+)/edit$", ForumEditView.as_view(), name="edit_forum"), - url( + re_path(r"^$", ForumMainView.as_view(), name="main"), + re_path(r"^search/$", ForumSearchView.as_view(), name="search"), + re_path(r"^new_forum$", ForumCreateView.as_view(), name="new_forum"), + re_path( + r"^mark_all_as_read$", ForumMarkAllAsRead.as_view(), name="mark_all_as_read" + ), + re_path(r"^last_unread$", ForumLastUnread.as_view(), name="last_unread"), + re_path( + r"^favorite_topics$", ForumFavoriteTopics.as_view(), name="favorite_topics" + ), + re_path(r"^(?P[0-9]+)$", ForumDetailView.as_view(), name="view_forum"), + re_path(r"^(?P[0-9]+)/edit$", ForumEditView.as_view(), name="edit_forum"), + re_path( r"^(?P[0-9]+)/delete$", ForumDeleteView.as_view(), name="delete_forum" ), - url( + re_path( r"^(?P[0-9]+)/new_topic$", ForumTopicCreateView.as_view(), name="new_topic", ), - url( + re_path( r"^topic/(?P[0-9]+)$", ForumTopicDetailView.as_view(), name="view_topic", ), - url( + re_path( r"^topic/(?P[0-9]+)/edit$", ForumTopicEditView.as_view(), name="edit_topic", ), - url( + re_path( r"^topic/(?P[0-9]+)/new_message$", ForumMessageCreateView.as_view(), name="new_message", ), - url( + re_path( r"^topic/(?P[0-9]+)/toggle_subscribe$", ForumTopicSubscribeView.as_view(), name="toggle_subscribe_topic", ), - url( + re_path( r"^message/(?P[0-9]+)$", ForumMessageView.as_view(), name="view_message", ), - url( + re_path( r"^message/(?P[0-9]+)/edit$", ForumMessageEditView.as_view(), name="edit_message", ), - url( + re_path( r"^message/(?P[0-9]+)/delete$", ForumMessageDeleteView.as_view(), name="delete_message", ), - url( + re_path( r"^message/(?P[0-9]+)/undelete$", ForumMessageUndeleteView.as_view(), name="undelete_message", diff --git a/launderette/urls.py b/launderette/urls.py index 35baabb1..b259c2d9 100644 --- a/launderette/urls.py +++ b/launderette/urls.py @@ -22,53 +22,53 @@ # # -from django.conf.urls import url +from django.urls import re_path from launderette.views import * urlpatterns = [ # views - url(r"^$", LaunderetteMainView.as_view(), name="launderette_main"), - url( + re_path(r"^$", LaunderetteMainView.as_view(), name="launderette_main"), + re_path( r"^slot/(?P[0-9]+)/delete$", SlotDeleteView.as_view(), name="delete_slot", ), - url(r"^book$", LaunderetteBookMainView.as_view(), name="book_main"), - url( + re_path(r"^book$", LaunderetteBookMainView.as_view(), name="book_main"), + re_path( r"^book/(?P[0-9]+)$", LaunderetteBookView.as_view(), name="book_slot", ), - url( + re_path( r"^(?P[0-9]+)/click$", LaunderetteMainClickView.as_view(), name="main_click", ), - url( + re_path( r"^(?P[0-9]+)/click/(?P[0-9]+)$", LaunderetteClickView.as_view(), name="click", ), - url(r"^admin$", LaunderetteListView.as_view(), name="launderette_list"), - url( + re_path(r"^admin$", LaunderetteListView.as_view(), name="launderette_list"), + re_path( r"^admin/(?P[0-9]+)$", LaunderetteAdminView.as_view(), name="launderette_admin", ), - url( + re_path( r"^admin/(?P[0-9]+)/edit$", LaunderetteEditView.as_view(), name="launderette_edit", ), - url(r"^admin/new$", LaunderetteCreateView.as_view(), name="launderette_new"), - url(r"^admin/machine/new$", MachineCreateView.as_view(), name="machine_new"), - url( + re_path(r"^admin/new$", LaunderetteCreateView.as_view(), name="launderette_new"), + re_path(r"^admin/machine/new$", MachineCreateView.as_view(), name="machine_new"), + re_path( r"^admin/machine/(?P[0-9]+)/edit$", MachineEditView.as_view(), name="machine_edit", ), - url( + re_path( r"^admin/machine/(?P[0-9]+)/delete$", MachineDeleteView.as_view(), name="machine_delete", diff --git a/matmat/urls.py b/matmat/urls.py index 1959553d..80960c59 100644 --- a/matmat/urls.py +++ b/matmat/urls.py @@ -22,13 +22,13 @@ # # -from django.conf.urls import url +from django.urls import re_path from matmat.views import * urlpatterns = [ - url(r"^$", SearchNormalFormView.as_view(), name="search"), - url(r"^reverse$", SearchReverseFormView.as_view(), name="search_reverse"), - url(r"^quick$", SearchQuickFormView.as_view(), name="search_quick"), - url(r"^clear$", SearchClearFormView.as_view(), name="search_clear"), + re_path(r"^$", SearchNormalFormView.as_view(), name="search"), + re_path(r"^reverse$", SearchReverseFormView.as_view(), name="search_reverse"), + re_path(r"^quick$", SearchQuickFormView.as_view(), name="search_quick"), + re_path(r"^clear$", SearchClearFormView.as_view(), name="search_clear"), ] diff --git a/pedagogy/urls.py b/pedagogy/urls.py index 5527bf3b..478d7ad1 100644 --- a/pedagogy/urls.py +++ b/pedagogy/urls.py @@ -22,33 +22,33 @@ # # -from django.conf.urls import url +from django.urls import re_path from pedagogy.views import * urlpatterns = [ # Urls displaying the actual application for visitors - url(r"^$", UVListView.as_view(), name="guide"), - url(r"^uv/(?P[0-9]+)$", UVDetailFormView.as_view(), name="uv_detail"), - url( + re_path(r"^$", UVListView.as_view(), name="guide"), + re_path(r"^uv/(?P[0-9]+)$", UVDetailFormView.as_view(), name="uv_detail"), + re_path( r"^comment/(?P[0-9]+)/edit$", UVCommentUpdateView.as_view(), name="comment_update", ), - url( + re_path( r"^comment/(?P[0-9]+)/delete$", UVCommentDeleteView.as_view(), name="comment_delete", ), - url( + re_path( r"^comment/(?P[0-9]+)/report$", UVCommentReportCreateView.as_view(), name="comment_report", ), # Moderation - url(r"^moderation$", UVModerationFormView.as_view(), name="moderation"), + re_path(r"^moderation$", UVModerationFormView.as_view(), name="moderation"), # Administration : Create Update Delete Edit - url(r"^uv/create$", UVCreateView.as_view(), name="uv_create"), - url(r"^uv/(?P[0-9]+)/delete$", UVDeleteView.as_view(), name="uv_delete"), - url(r"^uv/(?P[0-9]+)/edit$", UVUpdateView.as_view(), name="uv_update"), + re_path(r"^uv/create$", UVCreateView.as_view(), name="uv_create"), + re_path(r"^uv/(?P[0-9]+)/delete$", UVDeleteView.as_view(), name="uv_delete"), + re_path(r"^uv/(?P[0-9]+)/edit$", UVUpdateView.as_view(), name="uv_update"), ] diff --git a/requirements.txt b/requirements.txt index 3d9c3042..bf650400 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # Django 1.11 LTS is required -Django >=1.11, <2.0 +Django >=2.2, <3.0 Pillow mistune django-jinja diff --git a/rootplace/urls.py b/rootplace/urls.py index 6d4ef30c..f2cc97f2 100644 --- a/rootplace/urls.py +++ b/rootplace/urls.py @@ -22,13 +22,13 @@ # # -from django.conf.urls import url +from django.urls import re_path from rootplace.views import * urlpatterns = [ - url(r"^merge$", MergeUsersView.as_view(), name="merge"), - url( + re_path(r"^merge$", MergeUsersView.as_view(), name="merge"), + re_path( r"^forum/messages/delete$", DeleteAllForumUserMessagesView.as_view(), name="delete_forum_messages", diff --git a/sas/urls.py b/sas/urls.py index 7b53c0ec..fada615f 100644 --- a/sas/urls.py +++ b/sas/urls.py @@ -22,40 +22,40 @@ # # -from django.conf.urls import url +from django.urls import re_path from sas.views import * urlpatterns = [ - url(r"^$", SASMainView.as_view(), name="main"), - url(r"^moderation$", ModerationView.as_view(), name="moderation"), - url(r"^album/(?P[0-9]+)$", AlbumView.as_view(), name="album"), - url( + re_path(r"^$", SASMainView.as_view(), name="main"), + re_path(r"^moderation$", ModerationView.as_view(), name="moderation"), + re_path(r"^album/(?P[0-9]+)$", AlbumView.as_view(), name="album"), + re_path( r"^album/(?P[0-9]+)/upload$", AlbumUploadView.as_view(), name="album_upload", ), - url( + re_path( r"^album/(?P[0-9]+)/edit$", AlbumEditView.as_view(), name="album_edit" ), - url(r"^album/(?P[0-9]+)/preview$", send_album, name="album_preview"), - url(r"^picture/(?P[0-9]+)$", PictureView.as_view(), name="picture"), - url( + re_path(r"^album/(?P[0-9]+)/preview$", send_album, name="album_preview"), + re_path(r"^picture/(?P[0-9]+)$", PictureView.as_view(), name="picture"), + re_path( r"^picture/(?P[0-9]+)/edit$", PictureEditView.as_view(), name="picture_edit", ), - url(r"^picture/(?P[0-9]+)/download$", send_pict, name="download"), - url( + re_path(r"^picture/(?P[0-9]+)/download$", send_pict, name="download"), + re_path( r"^picture/(?P[0-9]+)/download/compressed$", send_compressed, name="download_compressed", ), - url( + re_path( r"^picture/(?P[0-9]+)/download/thumb$", send_thumb, name="download_thumb", ), - # url(r'^album/new$', AlbumCreateView.as_view(), name='album_new'), - # url(r'^(?P[0-9]+)/$', ClubView.as_view(), name='club_view'), + # re_path(r'^album/new$', AlbumCreateView.as_view(), name='album_new'), + # re_path(r'^(?P[0-9]+)/$', ClubView.as_view(), name='club_view'), ] diff --git a/sith/urls.py b/sith/urls.py index 23f82469..c37a93f0 100644 --- a/sith/urls.py +++ b/sith/urls.py @@ -37,9 +37,9 @@ Including another URLconf 1. Add an import: from blog import urls as blog_urls 2. Add a URL to urlpatterns: url(r'^blog/', include(blog_urls)) """ -from django.conf.urls import include, url +from django.urls import include, re_path from django.contrib import admin -from django.conf.urls.static import static +from django.urls.static import static from django.conf import settings from django.views.i18n import javascript_catalog from ajax_select import urls as ajax_select_urls @@ -51,48 +51,61 @@ handler404 = "core.views.not_found" handler500 = "core.views.internal_servor_error" urlpatterns = [ - url(r"^", include("core.urls", namespace="core", app_name="core")), - url( + re_path(r"^", include("core.re_paths", namespace="core", app_name="core")), + re_path( r"^rootplace/", - include("rootplace.urls", namespace="rootplace", app_name="rootplace"), + include("rootplace.re_paths", namespace="rootplace", app_name="rootplace"), ), - url( + re_path( r"^subscription/", - include("subscription.urls", namespace="subscription", app_name="subscription"), + include( + "subscription.re_paths", namespace="subscription", app_name="subscription" + ), ), - url(r"^com/", include("com.urls", namespace="com", app_name="com")), - url(r"^club/", include("club.urls", namespace="club", app_name="club")), - url(r"^counter/", include("counter.urls", namespace="counter", app_name="counter")), - url(r"^stock/", include("stock.urls", namespace="stock", app_name="stock")), - url( + re_path(r"^com/", include("com.re_paths", namespace="com", app_name="com")), + re_path(r"^club/", include("club.re_paths", namespace="club", app_name="club")), + re_path( + r"^counter/", + include("counter.re_paths", namespace="counter", app_name="counter"), + ), + re_path(r"^stock/", include("stock.re_paths", namespace="stock", app_name="stock")), + re_path( r"^accounting/", - include("accounting.urls", namespace="accounting", app_name="accounting"), + include("accounting.re_paths", namespace="accounting", app_name="accounting"), ), - url(r"^eboutic/", include("eboutic.urls", namespace="eboutic", app_name="eboutic")), - url( + re_path( + r"^eboutic/", + include("eboutic.re_paths", namespace="eboutic", app_name="eboutic"), + ), + re_path( r"^launderette/", - include("launderette.urls", namespace="launderette", app_name="launderette"), + include( + "launderette.re_paths", namespace="launderette", app_name="launderette" + ), ), - url(r"^sas/", include("sas.urls", namespace="sas", app_name="sas")), - url(r"^api/v1/", include("api.urls", namespace="api", app_name="api")), - url( + re_path(r"^sas/", include("sas.re_paths", namespace="sas", app_name="sas")), + re_path(r"^api/v1/", include("api.re_paths", namespace="api", app_name="api")), + re_path( r"^election/", - include("election.urls", namespace="election", app_name="election"), + include("election.re_paths", namespace="election", app_name="election"), ), - url(r"^forum/", include("forum.urls", namespace="forum", app_name="forum")), - url(r"^trombi/", include("trombi.urls", namespace="trombi", app_name="trombi")), - url( - r"^matmatronch/", include("matmat.urls", namespace="matmat", app_name="matmat") + re_path(r"^forum/", include("forum.re_paths", namespace="forum", app_name="forum")), + re_path( + r"^trombi/", include("trombi.re_paths", namespace="trombi", app_name="trombi") ), - url( + re_path( + r"^matmatronch/", + include("matmat.re_paths", namespace="matmat", app_name="matmat"), + ), + re_path( r"^pedagogy/", - include("pedagogy.urls", namespace="pedagogy", app_name="pedagogy"), + include("pedagogy.re_paths", namespace="pedagogy", app_name="pedagogy"), ), - url(r"^admin/", include(admin.site.urls)), - url(r"^ajax_select/", include(ajax_select_urls)), - url(r"^i18n/", include("django.conf.urls.i18n")), - url(r"^jsi18n/$", javascript_catalog, js_info_dict, name="javascript-catalog"), - url(r"^captcha/", include("captcha.urls")), + re_path(r"^admin/", include(admin.site.re_paths)), + re_path(r"^ajax_select/", include(ajax_select_re_paths)), + re_path(r"^i18n/", include("django.urls.i18n")), + re_path(r"^jsi18n/$", javascript_catalog, js_info_dict, name="javascript-catalog"), + re_path(r"^captcha/", include("captcha.re_paths")), ] if settings.DEBUG: @@ -100,4 +113,4 @@ if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) import debug_toolbar - urlpatterns += [url(r"^__debug__/", include(debug_toolbar.urls))] + urlpatterns += [re_path(r"^__debug__/", include(debug_toolbar.urls))] diff --git a/stock/urls.py b/stock/urls.py index ac85d147..59bc466b 100644 --- a/stock/urls.py +++ b/stock/urls.py @@ -23,64 +23,66 @@ # # -from django.conf.urls import include, url +from django.urls import include, re_path from stock.views import * urlpatterns = [ - # Stock urls - url(r"^new/counter/(?P[0-9]+)$", StockCreateView.as_view(), name="new"), - url(r"^edit/(?P[0-9]+)$", StockEditView.as_view(), name="edit"), - url(r"^list$", StockListView.as_view(), name="list"), - # StockItem urls - url(r"^(?P[0-9]+)$", StockItemList.as_view(), name="items_list"), - url( + # Stock re_paths + re_path( + r"^new/counter/(?P[0-9]+)$", StockCreateView.as_view(), name="new" + ), + re_path(r"^edit/(?P[0-9]+)$", StockEditView.as_view(), name="edit"), + re_path(r"^list$", StockListView.as_view(), name="list"), + # StockItem re_paths + re_path(r"^(?P[0-9]+)$", StockItemList.as_view(), name="items_list"), + re_path( r"^(?P[0-9]+)/stock_item/new_item$", StockItemCreateView.as_view(), name="new_item", ), - url( + re_path( r"^stock_item/(?P[0-9]+)/edit$", StockItemEditView.as_view(), name="edit_item", ), - url( + re_path( r"^(?P[0-9]+)/stock_item/take_items$", StockTakeItemsBaseFormView.as_view(), name="take_items", ), - # ShoppingList urls - url( + # ShoppingList re_paths + re_path( r"^(?P[0-9]+)/shopping_list/list$", StockShoppingListView.as_view(), name="shoppinglist_list", ), - url( + re_path( r"^(?P[0-9]+)/shopping_list/create$", StockItemQuantityBaseFormView.as_view(), name="shoppinglist_create", ), - url( + re_path( r"^(?P[0-9]+)/shopping_list/(?P[0-9]+)/items$", StockShoppingListItemListView.as_view(), name="shoppinglist_items", ), - url( + re_path( r"^(?P[0-9]+)/shopping_list/(?P[0-9]+)/delete$", StockShoppingListDeleteView.as_view(), name="shoppinglist_delete", ), - url( + re_path( r"^(?P[0-9]+)/shopping_list/(?P[0-9]+)/set_done$", StockShopppingListSetDone.as_view(), name="shoppinglist_set_done", ), - url( + re_path( r"^(?P[0-9]+)/shopping_list/(?P[0-9]+)/set_todo$", StockShopppingListSetTodo.as_view(), name="shoppinglist_set_todo", ), - url( + re_path( r"^(?P[0-9]+)/shopping_list/(?P[0-9]+)/update_stock$", StockUpdateAfterShopppingBaseFormView.as_view(), name="update_after_shopping", diff --git a/subscription/urls.py b/subscription/urls.py index e271c0e1..d398197a 100644 --- a/subscription/urls.py +++ b/subscription/urls.py @@ -22,12 +22,12 @@ # # -from django.conf.urls import url +from django.urls import re_path from subscription.views import * urlpatterns = [ # Subscription views - url(r"^$", NewSubscription.as_view(), name="subscription"), - url(r"stats", SubscriptionsStatsView.as_view(), name="stats"), + re_path(r"^$", NewSubscription.as_view(), name="subscription"), + re_path(r"stats", SubscriptionsStatsView.as_view(), name="stats"), ] diff --git a/trombi/urls.py b/trombi/urls.py index a20b2722..76575ef9 100644 --- a/trombi/urls.py +++ b/trombi/urls.py @@ -22,59 +22,61 @@ # # -from django.conf.urls import url +from django.urls import re_path from trombi.views import * urlpatterns = [ - url(r"^(?P[0-9]+)/new$", TrombiCreateView.as_view(), name="create"), - url(r"^(?P[0-9]+)/export$", TrombiExportView.as_view(), name="export"), - url(r"^(?P[0-9]+)/edit$", TrombiEditView.as_view(), name="edit"), - url( + re_path(r"^(?P[0-9]+)/new$", TrombiCreateView.as_view(), name="create"), + re_path( + r"^(?P[0-9]+)/export$", TrombiExportView.as_view(), name="export" + ), + re_path(r"^(?P[0-9]+)/edit$", TrombiEditView.as_view(), name="edit"), + re_path( r"^(?P[0-9]+)/moderate_comments$", TrombiModerateCommentsView.as_view(), name="moderate_comments", ), - url( + re_path( r"^(?P[0-9]+)/moderate$", TrombiModerateCommentView.as_view(), name="moderate_comment", ), - url( + re_path( r"^user/(?P[0-9]+)/delete$", TrombiDeleteUserView.as_view(), name="delete_user", ), - url(r"^(?P[0-9]+)$", TrombiDetailView.as_view(), name="detail"), - url( + re_path(r"^(?P[0-9]+)$", TrombiDetailView.as_view(), name="detail"), + re_path( r"^(?P[0-9]+)/new_comment$", TrombiCommentCreateView.as_view(), name="new_comment", ), - url( + re_path( r"^(?P[0-9]+)/profile$", UserTrombiProfileView.as_view(), name="user_profile", ), - url( + re_path( r"^comment/(?P[0-9]+)/edit$", TrombiCommentEditView.as_view(), name="edit_comment", ), - url(r"^tools$", UserTrombiToolsView.as_view(), name="user_tools"), - url(r"^profile$", UserTrombiEditProfileView.as_view(), name="profile"), - url(r"^pictures$", UserTrombiEditPicturesView.as_view(), name="pictures"), - url( + re_path(r"^tools$", UserTrombiToolsView.as_view(), name="user_tools"), + re_path(r"^profile$", UserTrombiEditProfileView.as_view(), name="profile"), + re_path(r"^pictures$", UserTrombiEditPicturesView.as_view(), name="pictures"), + re_path( r"^reset_memberships$", UserTrombiResetClubMembershipsView.as_view(), name="reset_memberships", ), - url( + re_path( r"^membership/(?P[0-9]+)/edit$", UserTrombiEditMembershipView.as_view(), name="edit_membership", ), - url( + re_path( r"^membership/(?P[0-9]+)/delete$", UserTrombiDeleteMembershipView.as_view(), name="delete_membership", From 2616e8b24cf60e885ad4178c302ec0dddf9315c1 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 13:28:56 +0200 Subject: [PATCH 02/23] django2.2: relpace django.core.urlresolvers by django.urls --- accounting/models.py | 2 +- accounting/tests.py | 2 +- accounting/views.py | 2 +- club/models.py | 2 +- club/tests.py | 2 +- club/views.py | 2 +- com/tests.py | 2 +- com/views.py | 2 +- core/markdown.py | 2 +- core/models.py | 2 +- core/tests.py | 2 +- core/views/files.py | 2 +- core/views/forms.py | 2 +- core/views/group.py | 2 +- core/views/page.py | 2 +- core/views/user.py | 4 ++-- counter/models.py | 2 +- counter/tests.py | 2 +- counter/views.py | 2 +- eboutic/tests.py | 2 +- eboutic/views.py | 2 +- election/tests.py | 2 +- election/views.py | 2 +- forum/models.py | 2 +- forum/views.py | 2 +- launderette/models.py | 2 +- launderette/views.py | 2 +- matmat/views.py | 2 +- pedagogy/models.py | 2 +- pedagogy/tests.py | 2 +- rootplace/views.py | 2 +- sas/models.py | 2 +- sas/views.py | 2 +- stock/models.py | 2 +- stock/views.py | 2 +- subscription/models.py | 2 +- subscription/views.py | 2 +- trombi/models.py | 2 +- trombi/views.py | 2 +- 39 files changed, 40 insertions(+), 40 deletions(-) diff --git a/accounting/models.py b/accounting/models.py index efcbdf2c..a04af851 100644 --- a/accounting/models.py +++ b/accounting/models.py @@ -22,7 +22,7 @@ # # -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.exceptions import ValidationError from django.core import validators from django.db import models diff --git a/accounting/tests.py b/accounting/tests.py index df4fd8d7..96b19010 100644 --- a/accounting/tests.py +++ b/accounting/tests.py @@ -23,7 +23,7 @@ # from django.test import TestCase -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.management import call_command from datetime import date diff --git a/accounting/views.py b/accounting/views.py index 35c2c4ea..693884cf 100644 --- a/accounting/views.py +++ b/accounting/views.py @@ -24,7 +24,7 @@ from django.views.generic import ListView, DetailView from django.views.generic.edit import UpdateView, CreateView, DeleteView, FormView -from django.core.urlresolvers import reverse_lazy, reverse +from django.urls import reverse_lazy, reverse from django.utils.translation import ugettext_lazy as _ from django.forms.models import modelform_factory from django.core.exceptions import PermissionDenied, ValidationError diff --git a/club/models.py b/club/models.py index 5f0b58dd..94b0b477 100644 --- a/club/models.py +++ b/club/models.py @@ -29,7 +29,7 @@ from django.conf import settings from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.db import transaction -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from django.core.validators import RegexValidator, validate_email from django.utils.functional import cached_property diff --git a/club/tests.py b/club/tests.py index 6bce1166..2536390e 100644 --- a/club/tests.py +++ b/club/tests.py @@ -26,7 +26,7 @@ from django.conf import settings from django.test import TestCase from django.utils import timezone, html from django.utils.translation import ugettext as _ -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.management import call_command from django.core.exceptions import ValidationError, NON_FIELD_ERRORS diff --git a/club/views.py b/club/views.py index a654ed65..da9824e2 100644 --- a/club/views.py +++ b/club/views.py @@ -31,7 +31,7 @@ from django.views.generic.edit import DeleteView from django.views.generic.detail import SingleObjectMixin from django.views.generic.edit import UpdateView, CreateView from django.http import HttpResponseRedirect, HttpResponse, Http404 -from django.core.urlresolvers import reverse, reverse_lazy +from django.urls import reverse, reverse_lazy from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext as _t diff --git a/com/tests.py b/com/tests.py index 2e8f148a..6ceb1f17 100644 --- a/com/tests.py +++ b/com/tests.py @@ -24,7 +24,7 @@ from django.test import TestCase from django.conf import settings -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.management import call_command from django.utils import html from django.utils.translation import ugettext as _ diff --git a/com/views.py b/com/views.py index 21bbf8c7..dd972522 100644 --- a/com/views.py +++ b/com/views.py @@ -29,7 +29,7 @@ from django.views.generic import ListView, DetailView, View from django.views.generic.edit import UpdateView, CreateView, DeleteView from django.views.generic.detail import SingleObjectMixin from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse, reverse_lazy +from django.urls import reverse, reverse_lazy from django.core.exceptions import ValidationError from django.utils import timezone from django.conf import settings diff --git a/core/markdown.py b/core/markdown.py index c5d69a6c..8ce70265 100644 --- a/core/markdown.py +++ b/core/markdown.py @@ -25,7 +25,7 @@ import os import re from mistune import Renderer, InlineGrammar, InlineLexer, Markdown, escape, escape_link -from django.core.urlresolvers import reverse +from django.urls import reverse class SithRenderer(Renderer): diff --git a/core/models.py b/core/models.py index d27a2f79..4a9e5dbc 100644 --- a/core/models.py +++ b/core/models.py @@ -38,7 +38,7 @@ from django.utils.translation import ugettext_lazy as _ from django.utils import timezone from django.core import validators from django.core.exceptions import ValidationError, PermissionDenied -from django.core.urlresolvers import reverse +from django.urls import reverse from django.conf import settings from django.db import transaction from django.contrib.staticfiles.storage import staticfiles_storage diff --git a/core/tests.py b/core/tests.py index 71898662..cb0c986b 100644 --- a/core/tests.py +++ b/core/tests.py @@ -25,7 +25,7 @@ import os from django.test import Client, TestCase -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.management import call_command from core.models import User, Group, Page diff --git a/core/views/files.py b/core/views/files.py index 683a6f1e..4117dc2d 100644 --- a/core/views/files.py +++ b/core/views/files.py @@ -32,7 +32,7 @@ from django.conf import settings from django.utils.translation import ugettext_lazy as _ from django.http import HttpResponse from wsgiref.util import FileWrapper -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.exceptions import PermissionDenied from django import forms diff --git a/core/views/forms.py b/core/views/forms.py index 2d5bbf6d..0c557749 100644 --- a/core/views/forms.py +++ b/core/views/forms.py @@ -27,7 +27,7 @@ from django import forms from django.conf import settings from django.db import transaction from django.templatetags.static import static -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.exceptions import ValidationError from django.forms import ( CheckboxSelectMultiple, diff --git a/core/views/group.py b/core/views/group.py index 059c5dc5..ca51a9d7 100644 --- a/core/views/group.py +++ b/core/views/group.py @@ -29,7 +29,7 @@ from django.views.generic.edit import UpdateView, CreateView, DeleteView from django.views.generic import ListView from django.views.generic.edit import FormView -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext_lazy as _ from django import forms diff --git a/core/views/page.py b/core/views/page.py index 92b9b381..8a5e10ac 100644 --- a/core/views/page.py +++ b/core/views/page.py @@ -23,7 +23,7 @@ # # This file contains all the views that concern the page model -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.views.generic import ListView, DetailView from django.views.generic.edit import UpdateView, CreateView, DeleteView from django.forms.models import modelform_factory diff --git a/core/views/user.py b/core/views/user.py index aa3ea805..bd3b00ab 100644 --- a/core/views/user.py +++ b/core/views/user.py @@ -27,7 +27,7 @@ from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth import views from django.utils.translation import ugettext as _ -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.exceptions import PermissionDenied, ValidationError from django.http import Http404, HttpResponse from django.views.generic.edit import UpdateView @@ -40,7 +40,7 @@ from django.views.generic import ( ) from django.forms.models import modelform_factory from django.forms import CheckboxSelectMultiple -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.template.response import TemplateResponse from django.conf import settings from django.views.generic.dates import YearMixin, MonthMixin diff --git a/counter/models.py b/counter/models.py index 703f2404..ead3e778 100644 --- a/counter/models.py +++ b/counter/models.py @@ -26,7 +26,7 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from django.utils import timezone from django.conf import settings -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.validators import MinLengthValidator from django.forms import ValidationError from django.utils.functional import cached_property diff --git a/counter/tests.py b/counter/tests.py index 1e956916..a2fd6303 100644 --- a/counter/tests.py +++ b/counter/tests.py @@ -25,7 +25,7 @@ import re from django.test import TestCase -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.management import call_command from core.models import User diff --git a/counter/views.py b/counter/views.py index 42cff108..7f72434e 100644 --- a/counter/views.py +++ b/counter/views.py @@ -37,7 +37,7 @@ from django.views.generic.edit import ( ) from django.forms.models import modelform_factory from django.forms import CheckboxSelectMultiple -from django.core.urlresolvers import reverse_lazy, reverse +from django.urls import reverse_lazy, reverse from django.http import HttpResponseRedirect, HttpResponse from django.utils import timezone from django import forms diff --git a/eboutic/tests.py b/eboutic/tests.py index b0ee0214..0587fde9 100644 --- a/eboutic/tests.py +++ b/eboutic/tests.py @@ -29,7 +29,7 @@ import urllib from OpenSSL import crypto from django.test import TestCase -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.management import call_command from django.conf import settings diff --git a/eboutic/views.py b/eboutic/views.py index afd68320..927f01a3 100644 --- a/eboutic/views.py +++ b/eboutic/views.py @@ -28,7 +28,7 @@ import hmac import base64 from OpenSSL import crypto -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.views.generic import TemplateView, View from django.http import HttpResponse, HttpResponseRedirect from django.core.exceptions import SuspiciousOperation diff --git a/election/tests.py b/election/tests.py index 1675d224..31934187 100644 --- a/election/tests.py +++ b/election/tests.py @@ -1,5 +1,5 @@ from django.test import TestCase -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.management import call_command from django.conf import settings diff --git a/election/views.py b/election/views.py index 92553bb2..c142e6d0 100644 --- a/election/views.py +++ b/election/views.py @@ -2,7 +2,7 @@ from django.shortcuts import get_object_or_404 from django.views.generic import ListView, DetailView from django.views.generic.edit import UpdateView, CreateView from django.views.generic.edit import DeleteView, FormView -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import PermissionDenied from django.db import transaction diff --git a/forum/models.py b/forum/models.py index 4ef955ba..698303f8 100644 --- a/forum/models.py +++ b/forum/models.py @@ -26,7 +26,7 @@ from django.db import models from django.conf import settings from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import ValidationError -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils import timezone from django.utils.functional import cached_property diff --git a/forum/views.py b/forum/views.py index 49cee753..11ab52ad 100644 --- a/forum/views.py +++ b/forum/views.py @@ -28,7 +28,7 @@ from django.views.generic import ListView, DetailView, RedirectView from django.views.generic.edit import UpdateView, CreateView, DeleteView from django.views.generic.detail import SingleObjectMixin from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.utils import timezone, html from django.conf import settings from django import forms diff --git a/launderette/models.py b/launderette/models.py index 0c92c8d7..acc2bb20 100644 --- a/launderette/models.py +++ b/launderette/models.py @@ -25,7 +25,7 @@ from django.db import models, DataError from django.utils.translation import ugettext_lazy as _ from django.conf import settings -from django.core.urlresolvers import reverse +from django.urls import reverse from counter.models import Counter from core.models import User diff --git a/launderette/views.py b/launderette/views.py index 0b920ac1..dcf0ffda 100644 --- a/launderette/views.py +++ b/launderette/views.py @@ -30,7 +30,7 @@ from django.views.generic import ListView, DetailView, TemplateView from django.views.generic.edit import UpdateView, CreateView, DeleteView, BaseFormView from django.utils.translation import ugettext as _ from django.utils import dateparse, timezone -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.conf import settings from django.db import transaction, DataError from django import forms diff --git a/matmat/views.py b/matmat/views.py index e1a541d0..2a76e764 100644 --- a/matmat/views.py +++ b/matmat/views.py @@ -29,7 +29,7 @@ from django.views.generic.edit import FormView from django.utils.translation import ugettext_lazy as _ from django.views.generic.detail import SingleObjectMixin from django.http.response import HttpResponseRedirect -from django.core.urlresolvers import reverse +from django.urls import reverse from django import forms from core.models import User diff --git a/pedagogy/models.py b/pedagogy/models.py index b588cb20..0b3cfda2 100644 --- a/pedagogy/models.py +++ b/pedagogy/models.py @@ -28,7 +28,7 @@ from django.utils import timezone from django.core import validators from django.conf import settings from django.utils.functional import cached_property -from django.core.urlresolvers import reverse +from django.urls import reverse from rest_framework import serializers diff --git a/pedagogy/tests.py b/pedagogy/tests.py index 121e511a..be40d704 100644 --- a/pedagogy/tests.py +++ b/pedagogy/tests.py @@ -24,7 +24,7 @@ from django.conf import settings from django.test import TestCase -from django.core.urlresolvers import reverse +from django.urls import reverse from django.utils.translation import ugettext_lazy as _ from django.core.management import call_command diff --git a/rootplace/views.py b/rootplace/views.py index 70dce63e..41a9690a 100644 --- a/rootplace/views.py +++ b/rootplace/views.py @@ -25,7 +25,7 @@ from django.utils.translation import ugettext as _ from django.views.generic.edit import FormView -from django.core.urlresolvers import reverse +from django.urls import reverse from django import forms from django.core.exceptions import PermissionDenied diff --git a/sas/models.py b/sas/models.py index 2a691f38..40063328 100644 --- a/sas/models.py +++ b/sas/models.py @@ -23,7 +23,7 @@ # from django.db import models -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core.cache import cache from django.conf import settings from django.utils.translation import ugettext_lazy as _ diff --git a/sas/views.py b/sas/views.py index 6cbdc319..d2f7b889 100644 --- a/sas/views.py +++ b/sas/views.py @@ -24,7 +24,7 @@ from django.shortcuts import redirect from django.http import HttpResponse, Http404 -from django.core.urlresolvers import reverse_lazy, reverse +from django.urls import reverse_lazy, reverse from core.views.forms import SelectDate from django.views.generic import DetailView, TemplateView from django.views.generic.edit import UpdateView, FormMixin, FormView diff --git a/stock/models.py b/stock/models.py index 381278b2..3df2414e 100644 --- a/stock/models.py +++ b/stock/models.py @@ -25,7 +25,7 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse +from django.urls import reverse from django.conf import settings diff --git a/stock/views.py b/stock/views.py index 6a911164..d0ebee04 100644 --- a/stock/views.py +++ b/stock/views.py @@ -41,7 +41,7 @@ from django.utils.translation import ugettext_lazy as _ from django import forms from django.http import HttpResponseRedirect, HttpResponse from django.forms.models import modelform_factory -from django.core.urlresolvers import reverse_lazy, reverse +from django.urls import reverse_lazy, reverse from django.db import transaction, DataError from core.views import ( diff --git a/subscription/models.py b/subscription/models.py index 21bc91b3..11e80eeb 100644 --- a/subscription/models.py +++ b/subscription/models.py @@ -28,7 +28,7 @@ from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from django.conf import settings from django.core.exceptions import ValidationError -from django.core.urlresolvers import reverse +from django.urls import reverse from django.contrib.auth.forms import PasswordResetForm from dateutil.relativedelta import relativedelta diff --git a/subscription/views.py b/subscription/views.py index 0d91c6be..1949c2a5 100644 --- a/subscription/views.py +++ b/subscription/views.py @@ -25,7 +25,7 @@ from django.views.generic.edit import CreateView, FormView from django.utils.translation import ugettext_lazy as _ from django.core.exceptions import PermissionDenied, ValidationError -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django import forms from django.conf import settings diff --git a/trombi/models.py b/trombi/models.py index f60400de..c4e33a69 100644 --- a/trombi/models.py +++ b/trombi/models.py @@ -24,7 +24,7 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse +from django.urls import reverse from django.conf import settings from django.core.exceptions import ValidationError diff --git a/trombi/views.py b/trombi/views.py index 06dd43e7..2f21a68d 100644 --- a/trombi/views.py +++ b/trombi/views.py @@ -24,7 +24,7 @@ from django.http import Http404, HttpResponseRedirect from django.shortcuts import get_object_or_404, redirect -from django.core.urlresolvers import reverse_lazy, reverse +from django.urls import reverse_lazy, reverse from django.views.generic import DetailView, RedirectView, TemplateView, View from django.views.generic.edit import UpdateView, CreateView, DeleteView from django.utils.translation import ugettext_lazy as _ From 4dadb1dbc0e23e8b3a435aef172fea8ab4174951 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sat, 5 Oct 2019 19:05:56 +0200 Subject: [PATCH 03/23] django2.2: add default mandatory on_delete on all ForeignKey --- accounting/models.py | 40 ++++++++++++++++++++++++++++------ club/models.py | 32 ++++++++++++++++++++++----- com/models.py | 47 ++++++++++++++++++++++++++++++++-------- core/models.py | 31 ++++++++++++++++++++------ counter/models.py | 49 +++++++++++++++++++++++++++++++++--------- eboutic/models.py | 21 ++++++++++++++---- election/models.py | 32 +++++++++++++++++++++------ forum/models.py | 31 ++++++++++++++++++++------ launderette/models.py | 33 ++++++++++++++++++++++------ pedagogy/models.py | 19 ++++++++++++---- sas/models.py | 8 ++++++- stock/models.py | 10 ++++++--- subscription/models.py | 4 +++- trombi/models.py | 15 ++++++++++--- 14 files changed, 300 insertions(+), 72 deletions(-) diff --git a/accounting/models.py b/accounting/models.py index a04af851..73437f7c 100644 --- a/accounting/models.py +++ b/accounting/models.py @@ -110,7 +110,12 @@ class BankAccount(models.Model): name = models.CharField(_("name"), max_length=30) iban = models.CharField(_("iban"), max_length=255, blank=True) number = models.CharField(_("account number"), max_length=255, blank=True) - club = models.ForeignKey(Club, related_name="bank_accounts", verbose_name=_("club")) + club = models.ForeignKey( + Club, + related_name="bank_accounts", + verbose_name=_("club"), + on_delete=models.CASCADE, + ) class Meta: verbose_name = _("Bank account") @@ -136,9 +141,17 @@ class BankAccount(models.Model): class ClubAccount(models.Model): name = models.CharField(_("name"), max_length=30) - club = models.ForeignKey(Club, related_name="club_account", verbose_name=_("club")) + club = models.ForeignKey( + Club, + related_name="club_account", + verbose_name=_("club"), + on_delete=models.CASCADE, + ) bank_account = models.ForeignKey( - BankAccount, related_name="club_accounts", verbose_name=_("bank account") + BankAccount, + related_name="club_accounts", + verbose_name=_("bank account"), + on_delete=models.CASCADE, ) class Meta: @@ -203,7 +216,11 @@ class GeneralJournal(models.Model): name = models.CharField(_("name"), max_length=40) closed = models.BooleanField(_("is closed"), default=False) club_account = models.ForeignKey( - ClubAccount, related_name="journals", null=False, verbose_name=_("club account") + ClubAccount, + related_name="journals", + null=False, + verbose_name=_("club account"), + on_delete=models.CASCADE, ) amount = CurrencyField(_("amount"), default=0) effective_amount = CurrencyField(_("effective_amount"), default=0) @@ -263,7 +280,11 @@ class Operation(models.Model): number = models.IntegerField(_("number")) journal = models.ForeignKey( - GeneralJournal, related_name="operations", null=False, verbose_name=_("journal") + GeneralJournal, + related_name="operations", + null=False, + verbose_name=_("journal"), + on_delete=models.CASCADE, ) amount = CurrencyField(_("amount")) date = models.DateField(_("date")) @@ -282,6 +303,7 @@ class Operation(models.Model): verbose_name=_("invoice"), null=True, blank=True, + on_delete=models.CASCADE, ) done = models.BooleanField(_("is done"), default=False) simpleaccounting_type = models.ForeignKey( @@ -290,6 +312,7 @@ class Operation(models.Model): verbose_name=_("simple type"), null=True, blank=True, + on_delete=models.CASCADE, ) accounting_type = models.ForeignKey( "AccountingType", @@ -297,6 +320,7 @@ class Operation(models.Model): verbose_name=_("accounting type"), null=True, blank=True, + on_delete=models.CASCADE, ) label = models.ForeignKey( "Label", @@ -487,6 +511,7 @@ class SimplifiedAccountingType(models.Model): AccountingType, related_name="simplified_types", verbose_name=_("simplified accounting types"), + on_delete=models.CASCADE, ) class Meta: @@ -518,7 +543,10 @@ class Label(models.Model): name = models.CharField(_("label"), max_length=64) club_account = models.ForeignKey( - ClubAccount, related_name="labels", verbose_name=_("club account") + ClubAccount, + related_name="labels", + verbose_name=_("club account"), + on_delete=models.CASCADE, ) class Meta: diff --git a/club/models.py b/club/models.py index 94b0b477..e23c99bb 100644 --- a/club/models.py +++ b/club/models.py @@ -46,7 +46,9 @@ class Club(models.Model): id = models.AutoField(primary_key=True, db_index=True) name = models.CharField(_("name"), max_length=64) - parent = models.ForeignKey("Club", related_name="children", null=True, blank=True) + parent = models.ForeignKey( + "Club", related_name="children", null=True, blank=True, on_delete=models.CASCADE + ) unix_name = models.CharField( _("unix name"), max_length=30, @@ -75,7 +77,10 @@ class Club(models.Model): return settings.SITH_GROUP_ROOT_ID owner_group = models.ForeignKey( - Group, related_name="owned_club", default=get_default_owner_group + Group, + related_name="owned_club", + default=get_default_owner_group, + on_delete=models.CASCADE, ) edit_groups = models.ManyToManyField( Group, related_name="editable_club", blank=True @@ -261,9 +266,15 @@ class Membership(models.Model): related_name="memberships", null=False, blank=False, + on_delete=models.CASCADE, ) club = models.ForeignKey( - Club, verbose_name=_("club"), related_name="members", null=False, blank=False + Club, + verbose_name=_("club"), + related_name="members", + null=False, + blank=False, + on_delete=models.CASCADE, ) start_date = models.DateField(_("start date"), default=timezone.now) end_date = models.DateField(_("end date"), null=True, blank=True) @@ -317,7 +328,12 @@ class Mailing(models.Model): """ club = models.ForeignKey( - Club, verbose_name=_("Club"), related_name="mailings", null=False, blank=False + Club, + verbose_name=_("Club"), + related_name="mailings", + null=False, + blank=False, + on_delete=models.CASCADE, ) email = models.CharField( _("Email address"), @@ -334,7 +350,11 @@ class Mailing(models.Model): ) is_moderated = models.BooleanField(_("is moderated"), default=False) moderator = models.ForeignKey( - User, related_name="moderated_mailings", verbose_name=_("moderator"), null=True + User, + related_name="moderated_mailings", + verbose_name=_("moderator"), + null=True, + on_delete=models.CASCADE, ) def clean(self): @@ -409,6 +429,7 @@ class MailingSubscription(models.Model): related_name="subscriptions", null=False, blank=False, + on_delete=models.CASCADE, ) user = models.ForeignKey( User, @@ -416,6 +437,7 @@ class MailingSubscription(models.Model): related_name="mailing_subscriptions", null=True, blank=True, + on_delete=models.CASCADE, ) email = models.EmailField(_("Email address"), blank=False, null=False) diff --git a/com/models.py b/com/models.py index a0a490c3..b2effd47 100644 --- a/com/models.py +++ b/com/models.py @@ -28,7 +28,7 @@ from django.db import models, transaction from django.db.models import Q from django.utils.translation import ugettext_lazy as _ from django.utils import timezone -from django.core.urlresolvers import reverse +from django.urls import reverse from django.conf import settings from django.contrib.staticfiles.templatetags.staticfiles import static from django.core.mail import EmailMultiAlternatives @@ -71,13 +71,22 @@ class News(models.Model): type = models.CharField( _("type"), max_length=16, choices=NEWS_TYPES, default="EVENT" ) - club = models.ForeignKey(Club, related_name="news", verbose_name=_("club")) + club = models.ForeignKey( + Club, related_name="news", verbose_name=_("club"), on_delete=models.CASCADE + ) author = models.ForeignKey( - User, related_name="owned_news", verbose_name=_("author") + User, + related_name="owned_news", + verbose_name=_("author"), + on_delete=models.CASCADE, ) is_moderated = models.BooleanField(_("is moderated"), default=False) moderator = models.ForeignKey( - User, related_name="moderated_news", verbose_name=_("moderator"), null=True + User, + related_name="moderated_news", + verbose_name=_("moderator"), + null=True, + on_delete=models.CASCADE, ) def is_owned_by(self, user): @@ -138,7 +147,12 @@ class NewsDate(models.Model): we don't have to make copies """ - news = models.ForeignKey(News, related_name="dates", verbose_name=_("news_date")) + news = models.ForeignKey( + News, + related_name="dates", + verbose_name=_("news_date"), + on_delete=models.CASCADE, + ) start_date = models.DateTimeField(_("start_date"), null=True, blank=True) end_date = models.DateTimeField(_("end_date"), null=True, blank=True) @@ -230,15 +244,25 @@ class Weekmail(models.Model): class WeekmailArticle(models.Model): weekmail = models.ForeignKey( - Weekmail, related_name="articles", verbose_name=_("weekmail"), null=True + Weekmail, + related_name="articles", + verbose_name=_("weekmail"), + null=True, + on_delete=models.CASCADE, ) title = models.CharField(_("title"), max_length=64) content = models.TextField(_("content")) author = models.ForeignKey( - User, related_name="owned_weekmail_articles", verbose_name=_("author") + User, + related_name="owned_weekmail_articles", + verbose_name=_("author"), + on_delete=models.CASCADE, ) club = models.ForeignKey( - Club, related_name="weekmail_articles", verbose_name=_("club") + Club, + related_name="weekmail_articles", + verbose_name=_("club"), + on_delete=models.CASCADE, ) rank = models.IntegerField(_("rank"), default=-1) @@ -271,7 +295,11 @@ class Poster(models.Model): ) file = models.ImageField(_("file"), null=False, upload_to="com/posters") club = models.ForeignKey( - Club, related_name="posters", verbose_name=_("club"), null=False + Club, + related_name="posters", + verbose_name=_("club"), + null=False, + on_delete=models.CASCADE, ) screens = models.ManyToManyField(Screen, related_name="posters") date_begin = models.DateTimeField(blank=False, null=False, default=timezone.now) @@ -286,6 +314,7 @@ class Poster(models.Model): verbose_name=_("moderator"), null=True, blank=True, + on_delete=models.CASCADE, ) def save(self, *args, **kwargs): diff --git a/core/models.py b/core/models.py index 4a9e5dbc..3ab59ecc 100644 --- a/core/models.py +++ b/core/models.py @@ -743,7 +743,9 @@ class AnonymousUser(AuthAnonymousUser): class Preferences(models.Model): - user = models.OneToOneField(User, related_name="_preferences") + user = models.OneToOneField( + User, related_name="_preferences", on_delete=models.CASCADE + ) receive_weekmail = models.BooleanField( _("do you want to receive the weekmail"), default=False ) @@ -777,7 +779,12 @@ def get_thumbnail_directory(instance, filename): class SithFile(models.Model): name = models.CharField(_("file name"), max_length=256, blank=False) parent = models.ForeignKey( - "self", related_name="children", verbose_name=_("parent"), null=True, blank=True + "self", + related_name="children", + verbose_name=_("parent"), + null=True, + blank=True, + on_delete=models.CASCADE, ) file = models.FileField( upload_to=get_directory, @@ -800,7 +807,12 @@ class SithFile(models.Model): null=True, blank=True, ) - owner = models.ForeignKey(User, related_name="owned_files", verbose_name=_("owner")) + owner = models.ForeignKey( + User, + related_name="owned_files", + verbose_name=_("owner"), + on_delete=models.CASCADE, + ) edit_groups = models.ManyToManyField( Group, related_name="editable_files", verbose_name=_("edit group"), blank=True ) @@ -818,6 +830,7 @@ class SithFile(models.Model): verbose_name=_("owner"), null=True, blank=True, + on_delete=models.CASCADE, ) asked_for_removal = models.BooleanField(_("asked for removal"), default=False) is_in_sas = models.BooleanField( @@ -1133,6 +1146,7 @@ class Page(models.Model): related_name="owned_page", verbose_name=_("owner group"), default=get_default_owner_group, + on_delete=models.CASCADE, ) edit_groups = models.ManyToManyField( Group, related_name="editable_page", verbose_name=_("edit group"), blank=True @@ -1147,6 +1161,7 @@ class Page(models.Model): blank=True, null=True, default=None, + on_delete=models.CASCADE, ) lock_timeout = models.DateTimeField( _("lock_timeout"), null=True, blank=True, default=None @@ -1347,8 +1362,8 @@ class PageRev(models.Model): title = models.CharField(_("page title"), max_length=255, blank=True) content = models.TextField(_("page content"), blank=True) date = models.DateTimeField(_("date"), auto_now=True) - author = models.ForeignKey(User, related_name="page_rev") - page = models.ForeignKey(Page, related_name="revisions") + author = models.ForeignKey(User, related_name="page_rev", on_delete=models.CASCADE) + page = models.ForeignKey(Page, related_name="revisions", on_delete=models.CASCADE) class Meta: ordering = ["date"] @@ -1386,7 +1401,9 @@ class PageRev(models.Model): class Notification(models.Model): - user = models.ForeignKey(User, related_name="notifications") + user = models.ForeignKey( + User, related_name="notifications", on_delete=models.CASCADE + ) url = models.CharField(_("url"), max_length=255) param = models.CharField(_("param"), max_length=128, default="") type = models.CharField( @@ -1422,7 +1439,7 @@ class Notification(models.Model): class Gift(models.Model): label = models.CharField(_("label"), max_length=255) date = models.DateTimeField(_("date"), default=timezone.now) - user = models.ForeignKey(User, related_name="gifts") + user = models.ForeignKey(User, related_name="gifts", on_delete=models.CASCADE) def __str__(self): return "%s - %s" % (self.translated_label, self.date.strftime("%d %b %Y")) diff --git a/counter/models.py b/counter/models.py index ead3e778..5b7f8bf4 100644 --- a/counter/models.py +++ b/counter/models.py @@ -163,7 +163,9 @@ class Product(models.Model): icon = models.ImageField( upload_to="products", null=True, blank=True, verbose_name=_("icon") ) - club = models.ForeignKey(Club, related_name="products", verbose_name=_("club")) + club = models.ForeignKey( + Club, related_name="products", verbose_name=_("club"), on_delete=models.CASCADE + ) limit_age = models.IntegerField(_("limit age"), default=0) tray = models.BooleanField(_("tray price"), default=False) parent_product = models.ForeignKey( @@ -209,7 +211,9 @@ class Product(models.Model): class Counter(models.Model): name = models.CharField(_("name"), max_length=30) - club = models.ForeignKey(Club, related_name="counters", verbose_name=_("club")) + club = models.ForeignKey( + Club, related_name="counters", verbose_name=_("club"), on_delete=models.CASCADE + ) products = models.ManyToManyField( Product, related_name="counters", verbose_name=_("products"), blank=True ) @@ -344,12 +348,19 @@ class Refilling(models.Model): Handle the refilling """ - counter = models.ForeignKey(Counter, related_name="refillings", blank=False) + counter = models.ForeignKey( + Counter, related_name="refillings", blank=False, on_delete=models.CASCADE + ) amount = CurrencyField(_("amount")) operator = models.ForeignKey( - User, related_name="refillings_as_operator", blank=False + User, + related_name="refillings_as_operator", + blank=False, + on_delete=models.CASCADE, + ) + customer = models.ForeignKey( + Customer, related_name="refillings", blank=False, on_delete=models.CASCADE ) - customer = models.ForeignKey(Customer, related_name="refillings", blank=False) date = models.DateTimeField(_("date")) payment_method = models.CharField( _("payment method"), @@ -584,9 +595,17 @@ class Permanency(models.Model): This class aims at storing a traceability of who was barman where and when """ - user = models.ForeignKey(User, related_name="permanencies", verbose_name=_("user")) + user = models.ForeignKey( + User, + related_name="permanencies", + verbose_name=_("user"), + on_delete=models.CASCADE, + ) counter = models.ForeignKey( - Counter, related_name="permanencies", verbose_name=_("counter") + Counter, + related_name="permanencies", + verbose_name=_("counter"), + on_delete=models.CASCADE, ) start = models.DateTimeField(_("start date")) end = models.DateTimeField(_("end date"), null=True, db_index=True) @@ -607,10 +626,16 @@ class Permanency(models.Model): class CashRegisterSummary(models.Model): user = models.ForeignKey( - User, related_name="cash_summaries", verbose_name=_("user") + User, + related_name="cash_summaries", + verbose_name=_("user"), + on_delete=models.CASCADE, ) counter = models.ForeignKey( - Counter, related_name="cash_summaries", verbose_name=_("counter") + Counter, + related_name="cash_summaries", + verbose_name=_("counter"), + on_delete=models.CASCADE, ) date = models.DateTimeField(_("date")) comment = models.TextField(_("comment"), null=True, blank=True) @@ -683,7 +708,10 @@ class CashRegisterSummary(models.Model): class CashRegisterSummaryItem(models.Model): cash_summary = models.ForeignKey( - CashRegisterSummary, related_name="items", verbose_name=_("cash summary") + CashRegisterSummary, + related_name="items", + verbose_name=_("cash summary"), + on_delete=models.CASCADE, ) value = CurrencyField(_("value")) quantity = models.IntegerField(_("quantity"), default=0) @@ -772,4 +800,5 @@ class StudentCard(models.Model): verbose_name=_("student cards"), null=False, blank=False, + on_delete=models.CASCADE, ) diff --git a/eboutic/models.py b/eboutic/models.py index 0a157afa..ab7485de 100644 --- a/eboutic/models.py +++ b/eboutic/models.py @@ -37,7 +37,11 @@ class Basket(models.Model): """ user = models.ForeignKey( - User, related_name="baskets", verbose_name=_("user"), blank=False + User, + related_name="baskets", + verbose_name=_("user"), + blank=False, + on_delete=models.CASCADE, ) date = models.DateTimeField(_("date"), auto_now=True) @@ -80,7 +84,11 @@ class Invoice(models.Model): """ user = models.ForeignKey( - User, related_name="invoices", verbose_name=_("user"), blank=False + User, + related_name="invoices", + verbose_name=_("user"), + blank=False, + on_delete=models.CASCADE, ) date = models.DateTimeField(_("date"), auto_now=True) validated = models.BooleanField(_("validated"), default=False) @@ -158,10 +166,15 @@ class AbstractBaseItem(models.Model): class BasketItem(AbstractBaseItem): - basket = models.ForeignKey(Basket, related_name="items", verbose_name=_("basket")) + basket = models.ForeignKey( + Basket, related_name="items", verbose_name=_("basket"), on_delete=models.CASCADE + ) class InvoiceItem(AbstractBaseItem): invoice = models.ForeignKey( - Invoice, related_name="items", verbose_name=_("invoice") + Invoice, + related_name="items", + verbose_name=_("invoice"), + on_delete=models.CASCADE, ) diff --git a/election/models.py b/election/models.py index 5211aad6..3289c11c 100644 --- a/election/models.py +++ b/election/models.py @@ -111,7 +111,10 @@ class Role(OrderedModel): """ election = models.ForeignKey( - Election, related_name="roles", verbose_name=_("election") + Election, + related_name="roles", + verbose_name=_("election"), + on_delete=models.CASCADE, ) title = models.CharField(_("title"), max_length=255) description = models.TextField(_("description"), null=True, blank=True) @@ -155,7 +158,10 @@ class ElectionList(models.Model): title = models.CharField(_("title"), max_length=255) election = models.ForeignKey( - Election, related_name="election_lists", verbose_name=_("election") + Election, + related_name="election_lists", + verbose_name=_("election"), + on_delete=models.CASCADE, ) def can_be_edited_by(self, user): @@ -175,13 +181,25 @@ class Candidature(models.Model): This class is a component of responsability """ - role = models.ForeignKey(Role, related_name="candidatures", verbose_name=_("role")) + role = models.ForeignKey( + Role, + related_name="candidatures", + verbose_name=_("role"), + on_delete=models.CASCADE, + ) user = models.ForeignKey( - User, verbose_name=_("user"), related_name="candidates", blank=True + User, + verbose_name=_("user"), + related_name="candidates", + blank=True, + on_delete=models.CASCADE, ) program = models.TextField(_("description"), null=True, blank=True) election_list = models.ForeignKey( - ElectionList, related_name="candidatures", verbose_name=_("election list") + ElectionList, + related_name="candidatures", + verbose_name=_("election list"), + on_delete=models.CASCADE, ) def delete(self): @@ -201,7 +219,9 @@ class Vote(models.Model): This class allows to vote for candidates """ - role = models.ForeignKey(Role, related_name="votes", verbose_name=_("role")) + role = models.ForeignKey( + Role, related_name="votes", verbose_name=_("role"), on_delete=models.CASCADE + ) candidature = models.ManyToManyField( Candidature, related_name="votes", verbose_name=_("candidature") ) diff --git a/forum/models.py b/forum/models.py index 698303f8..6967a4c2 100644 --- a/forum/models.py +++ b/forum/models.py @@ -58,12 +58,19 @@ class Forum(models.Model): name = models.CharField(_("name"), max_length=64) description = models.CharField(_("description"), max_length=512, default="") is_category = models.BooleanField(_("is a category"), default=False) - parent = models.ForeignKey("Forum", related_name="children", null=True, blank=True) + parent = models.ForeignKey( + "Forum", + related_name="children", + null=True, + blank=True, + on_delete=models.CASCADE, + ) owner_club = models.ForeignKey( Club, related_name="owned_forums", verbose_name=_("owner club"), default=settings.SITH_MAIN_CLUB_ID, + on_delete=models.CASCADE, ) edit_groups = models.ManyToManyField( Group, @@ -226,8 +233,10 @@ class Forum(models.Model): class ForumTopic(models.Model): - forum = models.ForeignKey(Forum, related_name="topics") - author = models.ForeignKey(User, related_name="forum_topics") + forum = models.ForeignKey(Forum, related_name="topics", on_delete=models.CASCADE) + author = models.ForeignKey( + User, related_name="forum_topics", on_delete=models.CASCADE + ) description = models.CharField(_("description"), max_length=256, default="") subscribed_users = models.ManyToManyField( User, related_name="favorite_topics", verbose_name=_("subscribed users") @@ -291,8 +300,12 @@ class ForumMessage(models.Model): "A ForumMessage object represents a message in the forum" -- Cpt. Obvious """ - topic = models.ForeignKey(ForumTopic, related_name="messages") - author = models.ForeignKey(User, related_name="forum_messages") + topic = models.ForeignKey( + ForumTopic, related_name="messages", on_delete=models.CASCADE + ) + author = models.ForeignKey( + User, related_name="forum_messages", on_delete=models.CASCADE + ) title = models.CharField(_("title"), default="", max_length=64, blank=True) message = models.TextField(_("message"), default="") date = models.DateTimeField(_("date"), default=timezone.now) @@ -386,8 +399,12 @@ MESSAGE_META_ACTIONS = [ class ForumMessageMeta(models.Model): - user = models.ForeignKey(User, related_name="forum_message_metas") - message = models.ForeignKey(ForumMessage, related_name="metas") + user = models.ForeignKey( + User, related_name="forum_message_metas", on_delete=models.CASCADE + ) + message = models.ForeignKey( + ForumMessage, related_name="metas", on_delete=models.CASCADE + ) date = models.DateTimeField(_("date"), default=timezone.now) action = models.CharField(_("action"), choices=MESSAGE_META_ACTIONS, max_length=16) diff --git a/launderette/models.py b/launderette/models.py index acc2bb20..8c78bd4c 100644 --- a/launderette/models.py +++ b/launderette/models.py @@ -89,7 +89,10 @@ class Launderette(models.Model): class Machine(models.Model): name = models.CharField(_("name"), max_length=30) launderette = models.ForeignKey( - Launderette, related_name="machines", verbose_name=_("launderette") + Launderette, + related_name="machines", + verbose_name=_("launderette"), + on_delete=models.CASCADE, ) type = models.CharField( _("type"), max_length=10, choices=settings.SITH_LAUNDERETTE_MACHINE_TYPES @@ -124,14 +127,22 @@ class Machine(models.Model): class Token(models.Model): name = models.CharField(_("name"), max_length=5) launderette = models.ForeignKey( - Launderette, related_name="tokens", verbose_name=_("launderette") + Launderette, + related_name="tokens", + verbose_name=_("launderette"), + on_delete=models.CASCADE, ) type = models.CharField( _("type"), max_length=10, choices=settings.SITH_LAUNDERETTE_MACHINE_TYPES ) borrow_date = models.DateTimeField(_("borrow date"), null=True, blank=True) user = models.ForeignKey( - User, related_name="tokens", verbose_name=_("user"), null=True, blank=True + User, + related_name="tokens", + verbose_name=_("user"), + null=True, + blank=True, + on_delete=models.CASCADE, ) class Meta: @@ -182,12 +193,22 @@ class Slot(models.Model): _("type"), max_length=10, choices=settings.SITH_LAUNDERETTE_MACHINE_TYPES ) machine = models.ForeignKey( - Machine, related_name="slots", verbose_name=_("machine") + Machine, + related_name="slots", + verbose_name=_("machine"), + on_delete=models.CASCADE, ) token = models.ForeignKey( - Token, related_name="slots", verbose_name=_("token"), blank=True, null=True + Token, + related_name="slots", + verbose_name=_("token"), + blank=True, + null=True, + on_delete=models.CASCADE, + ) + user = models.ForeignKey( + User, related_name="slots", verbose_name=_("user"), on_delete=models.CASCADE ) - user = models.ForeignKey(User, related_name="slots", verbose_name=_("user")) class Meta: verbose_name = _("Slot") diff --git a/pedagogy/models.py b/pedagogy/models.py index 0b3cfda2..f3a8139f 100644 --- a/pedagogy/models.py +++ b/pedagogy/models.py @@ -61,6 +61,7 @@ class UV(models.Model): verbose_name=_("author"), null=False, blank=False, + on_delete=models.CASCADE, ) credit_type = models.CharField( _("credit type"), @@ -210,8 +211,11 @@ class UVComment(models.Model): verbose_name=_("author"), null=False, blank=False, + on_delete=models.CASCADE, + ) + uv = models.ForeignKey( + UV, related_name="comments", verbose_name=_("uv"), on_delete=models.CASCADE ) - uv = models.ForeignKey(UV, related_name="comments", verbose_name=_("uv")) comment = models.TextField(_("comment"), blank=True) grade_global = models.IntegerField( _("global grade"), @@ -283,8 +287,12 @@ class UVResult(models.Model): a semester (P/A)20xx """ - uv = models.ForeignKey(UV, related_name="results", verbose_name=_("uv")) - user = models.ForeignKey(User, related_name="uv_results", verbose_name=("user")) + uv = models.ForeignKey( + UV, related_name="results", verbose_name=_("uv"), on_delete=models.CASCADE + ) + user = models.ForeignKey( + User, related_name="uv_results", verbose_name=("user"), on_delete=models.CASCADE + ) grade = models.CharField( _("grade"), max_length=10, @@ -310,7 +318,10 @@ class UVCommentReport(models.Model): on_delete=models.CASCADE, ) reporter = models.ForeignKey( - User, related_name="reported_uv_comment", verbose_name=_("reporter") + User, + related_name="reported_uv_comment", + verbose_name=_("reporter"), + on_delete=models.CASCADE, ) reason = models.TextField(_("reason")) diff --git a/sas/models.py b/sas/models.py index 40063328..076b4a70 100644 --- a/sas/models.py +++ b/sas/models.py @@ -240,7 +240,12 @@ class PeoplePictureRelation(models.Model): """ user = models.ForeignKey( - User, verbose_name=_("user"), related_name="pictures", null=False, blank=False + User, + verbose_name=_("user"), + related_name="pictures", + null=False, + blank=False, + on_delete=models.CASCADE, ) picture = models.ForeignKey( Picture, @@ -248,6 +253,7 @@ class PeoplePictureRelation(models.Model): related_name="people", null=False, blank=False, + on_delete=models.CASCADE, ) class Meta: diff --git a/stock/models.py b/stock/models.py index 3df2414e..39c2f499 100644 --- a/stock/models.py +++ b/stock/models.py @@ -79,7 +79,9 @@ class StockItem(models.Model): blank=True, on_delete=models.SET_NULL, ) - stock_owner = models.ForeignKey(Stock, related_name="items") + stock_owner = models.ForeignKey( + Stock, related_name="items", on_delete=models.CASCADE + ) def __str__(self): return "%s" % (self.name) @@ -100,7 +102,9 @@ class ShoppingList(models.Model): name = models.CharField(_("name"), max_length=64) todo = models.BooleanField(_("todo")) comment = models.TextField(_("comment"), null=True, blank=True) - stock_owner = models.ForeignKey(Stock, null=True, related_name="shopping_lists") + stock_owner = models.ForeignKey( + Stock, null=True, related_name="shopping_lists", on_delete=models.CASCADE + ) def __str__(self): return "%s (%s)" % (self.name, self.date) @@ -122,7 +126,7 @@ class ShoppingListItem(models.Model): related_name="shopping_items_to_buy", ) stockitem_owner = models.ForeignKey( - StockItem, related_name="shopping_item", null=True + StockItem, related_name="shopping_item", null=True, on_delete=models.CASCADE ) name = models.CharField(_("name"), max_length=64) type = models.ForeignKey( diff --git a/subscription/models.py b/subscription/models.py index 11e80eeb..f3a9c3d8 100644 --- a/subscription/models.py +++ b/subscription/models.py @@ -50,7 +50,9 @@ def validate_payment(value): class Subscription(models.Model): - member = models.ForeignKey(User, related_name="subscriptions") + member = models.ForeignKey( + User, related_name="subscriptions", on_delete=models.CASCADE + ) subscription_type = models.CharField( _("subscription type"), max_length=255, diff --git a/trombi/models.py b/trombi/models.py index c4e33a69..f0b32828 100644 --- a/trombi/models.py +++ b/trombi/models.py @@ -180,10 +180,16 @@ class TrombiComment(models.Model): """ author = models.ForeignKey( - TrombiUser, verbose_name=_("author"), related_name="given_comments" + TrombiUser, + verbose_name=_("author"), + related_name="given_comments", + on_delete=models.CASCADE, ) target = models.ForeignKey( - TrombiUser, verbose_name=_("target"), related_name="received_comments" + TrombiUser, + verbose_name=_("target"), + related_name="received_comments", + on_delete=models.CASCADE, ) content = models.TextField(_("content"), default="") is_moderated = models.BooleanField(_("is the comment moderated"), default=False) @@ -200,7 +206,10 @@ class TrombiClubMembership(models.Model): """ user = models.ForeignKey( - TrombiUser, verbose_name=_("user"), related_name="memberships" + TrombiUser, + verbose_name=_("user"), + related_name="memberships", + on_delete=models.CASCADE, ) club = models.CharField(_("club"), max_length=32, default="") role = models.CharField(_("role"), max_length=64, default="") From 6cc234e8d3ef9b4aba5527751a3a6d8289b23807 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sat, 5 Oct 2019 19:09:15 +0200 Subject: [PATCH 04/23] django2.2: add default mandatory on_delete on OneToOneField --- accounting/models.py | 1 + club/models.py | 4 +++- counter/models.py | 7 +++++-- forum/models.py | 4 +++- launderette/models.py | 5 ++++- stock/models.py | 5 ++++- trombi/models.py | 7 +++++-- 7 files changed, 25 insertions(+), 8 deletions(-) diff --git a/accounting/models.py b/accounting/models.py index 73437f7c..54fcb437 100644 --- a/accounting/models.py +++ b/accounting/models.py @@ -352,6 +352,7 @@ class Operation(models.Model): null=True, blank=True, default=None, + on_delete=models.CASCADE, ) class Meta: diff --git a/club/models.py b/club/models.py index e23c99bb..f625d2e4 100644 --- a/club/models.py +++ b/club/models.py @@ -96,7 +96,9 @@ class Club(models.Model): blank=True, on_delete=models.SET_NULL, ) - page = models.OneToOneField(Page, related_name="club", blank=True, null=True) + page = models.OneToOneField( + Page, related_name="club", blank=True, null=True, on_delete=models.CASCADE + ) class Meta: ordering = ["name", "unix_name"] diff --git a/counter/models.py b/counter/models.py index 5b7f8bf4..584bb99a 100644 --- a/counter/models.py +++ b/counter/models.py @@ -51,7 +51,7 @@ class Customer(models.Model): is used by other accounting classes as reference to the customer, rather than using User """ - user = models.OneToOneField(User, primary_key=True) + user = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE) account_id = models.CharField(_("account id"), max_length=10, unique=True) amount = CurrencyField(_("amount")) recorded_products = models.IntegerField(_("recorded product"), default=0) @@ -727,7 +727,10 @@ class Eticket(models.Model): """ product = models.OneToOneField( - Product, related_name="eticket", verbose_name=_("product") + Product, + related_name="eticket", + verbose_name=_("product"), + on_delete=models.CASCADE, ) banner = models.ImageField( upload_to="etickets", null=True, blank=True, verbose_name=_("banner") diff --git a/forum/models.py b/forum/models.py index 6967a4c2..41785640 100644 --- a/forum/models.py +++ b/forum/models.py @@ -421,7 +421,9 @@ class ForumUserInfo(models.Model): user, such as the favourite topics, the signature, and so on... """ - user = models.OneToOneField(User, related_name="_forum_infos") + user = models.OneToOneField( + User, related_name="_forum_infos", on_delete=models.CASCADE + ) last_read_date = models.DateTimeField( _("last read date"), default=datetime( diff --git a/launderette/models.py b/launderette/models.py index 8c78bd4c..14cd4f77 100644 --- a/launderette/models.py +++ b/launderette/models.py @@ -37,7 +37,10 @@ from club.models import Club class Launderette(models.Model): name = models.CharField(_("name"), max_length=30) counter = models.OneToOneField( - Counter, verbose_name=_("counter"), related_name="launderette" + Counter, + verbose_name=_("counter"), + related_name="launderette", + on_delete=models.CASCADE, ) class Meta: diff --git a/stock/models.py b/stock/models.py index 39c2f499..f23ba277 100644 --- a/stock/models.py +++ b/stock/models.py @@ -39,7 +39,10 @@ class Stock(models.Model): name = models.CharField(_("name"), max_length=64) counter = models.OneToOneField( - Counter, verbose_name=_("counter"), related_name="stock" + Counter, + verbose_name=_("counter"), + related_name="stock", + on_delete=models.CASCADE, ) def __str__(self): diff --git a/trombi/models.py b/trombi/models.py index f0b32828..5b0b0e2b 100644 --- a/trombi/models.py +++ b/trombi/models.py @@ -80,7 +80,7 @@ class Trombi(models.Model): show_profiles = models.BooleanField( _("show users profiles to each other"), default=True ) - club = models.OneToOneField(Club, related_name="trombi") + club = models.OneToOneField(Club, related_name="trombi", on_delete=models.CASCADE) objects = TrombiManager() availables = AvailableTrombiManager() @@ -117,7 +117,10 @@ class TrombiUser(models.Model): """ user = models.OneToOneField( - User, verbose_name=_("trombi user"), related_name="trombi_user" + User, + verbose_name=_("trombi user"), + related_name="trombi_user", + on_delete=models.CASCADE, ) trombi = models.ForeignKey( Trombi, From 12b6f0d4885c8af6e279d657d886ede364bea68a Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sat, 5 Oct 2019 23:24:31 +0200 Subject: [PATCH 05/23] django2.2: adapt DateTimeField in forms with the new API --- club/forms.py | 4 ++-- com/views.py | 13 ++++++++----- counter/views.py | 4 ++-- election/views.py | 11 +++++++---- subscription/views.py | 4 ++-- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/club/forms.py b/club/forms.py index dca2b05c..791cd1fc 100644 --- a/club/forms.py +++ b/club/forms.py @@ -159,13 +159,13 @@ class MailingForm(forms.Form): class SellingsFormBase(forms.Form): begin_date = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("Begin date"), required=False, widget=SelectDateTime, ) end_date = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("End date"), required=False, widget=SelectDateTime, diff --git a/com/views.py b/com/views.py index dd972522..be6314ce 100644 --- a/com/views.py +++ b/com/views.py @@ -74,14 +74,14 @@ class PosterForm(forms.ModelForm): widgets = {"screens": forms.CheckboxSelectMultiple} date_begin = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("Start date"), widget=SelectDateTime, required=True, initial=timezone.now().strftime("%Y-%m-%d %H:%M:%S"), ) date_end = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("End date"), widget=SelectDateTime, required=False, @@ -200,19 +200,22 @@ class NewsForm(forms.ModelForm): } start_date = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("Start date"), widget=SelectDateTime, required=False, ) end_date = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("End date"), widget=SelectDateTime, required=False, ) until = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], label=_("Until"), widget=SelectDateTime, required=False + input_formats=["%Y-%m-%d %H:%M:%S"], + label=_("Until"), + widget=SelectDateTime, + required=False, ) automoderation = forms.BooleanField(label=_("Automoderation"), required=False) diff --git a/counter/views.py b/counter/views.py index 7f72434e..48ebd74b 100644 --- a/counter/views.py +++ b/counter/views.py @@ -1554,13 +1554,13 @@ class CashSummaryEditView(CounterAdminTabsMixin, CounterAdminMixin, UpdateView): class CashSummaryFormBase(forms.Form): begin_date = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("Begin date"), required=False, widget=SelectDateTime, ) end_date = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("End date"), required=False, widget=SelectDateTime, diff --git a/election/views.py b/election/views.py index c142e6d0..22971b62 100644 --- a/election/views.py +++ b/election/views.py @@ -181,22 +181,25 @@ class ElectionForm(forms.ModelForm): ) start_date = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("Start date"), widget=SelectDateTime, required=True, ) end_date = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], label=_("End date"), widget=SelectDateTime, required=True + input_formats=["%Y-%m-%d %H:%M:%S"], + label=_("End date"), + widget=SelectDateTime, + required=True, ) start_candidature = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("Start candidature"), widget=SelectDateTime, required=True, ) end_candidature = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("End candidature"), widget=SelectDateTime, required=True, diff --git a/subscription/views.py b/subscription/views.py index 1949c2a5..45e04a55 100644 --- a/subscription/views.py +++ b/subscription/views.py @@ -42,13 +42,13 @@ class SelectionDateForm(forms.Form): def __init__(self, *args, **kwargs): super(SelectionDateForm, self).__init__(*args, **kwargs) self.fields["start_date"] = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("Start date"), widget=SelectDateTime, required=True, ) self.fields["end_date"] = forms.DateTimeField( - ["%Y-%m-%d %H:%M:%S"], + input_formats=["%Y-%m-%d %H:%M:%S"], label=_("End date"), widget=SelectDateTime, required=True, From df531198c9d68d528edca7a82c0d6150e854a5e2 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 00:06:02 +0200 Subject: [PATCH 06/23] django2.2: fix urls and adapt them to new format --- api/urls.py | 2 +- pedagogy/views.py | 2 +- sith/urls.py | 66 +++++++++++++++++------------------------------ 3 files changed, 26 insertions(+), 44 deletions(-) diff --git a/api/urls.py b/api/urls.py index 7a21c608..8d0ae3f5 100644 --- a/api/urls.py +++ b/api/urls.py @@ -50,7 +50,7 @@ router.register( urlpatterns = [ # API re_path(r"^", include(router.urls)), - re_path(r"^login/", include("rest_framework.re_paths", namespace="rest_framework")), + re_path(r"^login/", include("rest_framework.urls", namespace="rest_framework")), re_path(r"^markdown$", RenderMarkdown, name="api_markdown"), re_path(r"^mailings$", FetchMailingLists, name="mailings_fetch"), ] diff --git a/pedagogy/views.py b/pedagogy/views.py index 485cf07c..fae5b8f0 100644 --- a/pedagogy/views.py +++ b/pedagogy/views.py @@ -33,7 +33,7 @@ from django.views.generic import ( from django.utils import html from django.http import HttpResponse from django.core.exceptions import PermissionDenied, ObjectDoesNotExist -from django.core.urlresolvers import reverse_lazy, reverse +from django.urls import reverse_lazy, reverse from django.shortcuts import get_object_or_404 from django.conf import settings diff --git a/sith/urls.py b/sith/urls.py index c37a93f0..370470a3 100644 --- a/sith/urls.py +++ b/sith/urls.py @@ -39,9 +39,9 @@ Including another URLconf """ from django.urls import include, re_path from django.contrib import admin -from django.urls.static import static from django.conf import settings -from django.views.i18n import javascript_catalog +from django.conf.urls.static import static +from django.views.i18n import JavaScriptCatalog from ajax_select import urls as ajax_select_urls js_info_dict = {"packages": ("sith",)} @@ -51,61 +51,43 @@ handler404 = "core.views.not_found" handler500 = "core.views.internal_servor_error" urlpatterns = [ - re_path(r"^", include("core.re_paths", namespace="core", app_name="core")), + re_path(r"^", include(("core.urls", "core"), namespace="core")), re_path( - r"^rootplace/", - include("rootplace.re_paths", namespace="rootplace", app_name="rootplace"), + r"^rootplace/", include(("rootplace.urls", "rootplace"), namespace="rootplace") ), re_path( r"^subscription/", - include( - "subscription.re_paths", namespace="subscription", app_name="subscription" - ), + include(("subscription.urls", "subscription"), namespace="subscription"), ), - re_path(r"^com/", include("com.re_paths", namespace="com", app_name="com")), - re_path(r"^club/", include("club.re_paths", namespace="club", app_name="club")), - re_path( - r"^counter/", - include("counter.re_paths", namespace="counter", app_name="counter"), - ), - re_path(r"^stock/", include("stock.re_paths", namespace="stock", app_name="stock")), + re_path(r"^com/", include(("com.urls", "com"), namespace="com")), + re_path(r"^club/", include(("club.urls", "club"), namespace="club")), + re_path(r"^counter/", include(("counter.urls", "counter"), namespace="counter")), + re_path(r"^stock/", include(("stock.urls", "stock"), namespace="stock")), re_path( r"^accounting/", - include("accounting.re_paths", namespace="accounting", app_name="accounting"), - ), - re_path( - r"^eboutic/", - include("eboutic.re_paths", namespace="eboutic", app_name="eboutic"), + include(("accounting.urls", "accounting"), namespace="accounting"), ), + re_path(r"^eboutic/", include(("eboutic.urls", "eboutic"), namespace="eboutic")), re_path( r"^launderette/", - include( - "launderette.re_paths", namespace="launderette", app_name="launderette" - ), + include(("launderette.urls", "launderette"), namespace="launderette"), ), - re_path(r"^sas/", include("sas.re_paths", namespace="sas", app_name="sas")), - re_path(r"^api/v1/", include("api.re_paths", namespace="api", app_name="api")), + re_path(r"^sas/", include(("sas.urls", "sas"), namespace="sas")), + re_path(r"^api/v1/", include(("api.urls", "api"), namespace="api")), re_path( - r"^election/", - include("election.re_paths", namespace="election", app_name="election"), + r"^election/", include(("election.urls", "election"), namespace="election") ), - re_path(r"^forum/", include("forum.re_paths", namespace="forum", app_name="forum")), + re_path(r"^forum/", include(("forum.urls", "forum"), namespace="forum")), + re_path(r"^trombi/", include(("trombi.urls", "trombi"), namespace="trombi")), + re_path(r"^matmatronch/", include(("matmat.urls", "matmat"), namespace="matmat")), re_path( - r"^trombi/", include("trombi.re_paths", namespace="trombi", app_name="trombi") + r"^pedagogy/", include(("pedagogy.urls", "pedagogy"), namespace="pedagogy") ), - re_path( - r"^matmatronch/", - include("matmat.re_paths", namespace="matmat", app_name="matmat"), - ), - re_path( - r"^pedagogy/", - include("pedagogy.re_paths", namespace="pedagogy", app_name="pedagogy"), - ), - re_path(r"^admin/", include(admin.site.re_paths)), - re_path(r"^ajax_select/", include(ajax_select_re_paths)), - re_path(r"^i18n/", include("django.urls.i18n")), - re_path(r"^jsi18n/$", javascript_catalog, js_info_dict, name="javascript-catalog"), - re_path(r"^captcha/", include("captcha.re_paths")), + re_path(r"^admin/", admin.site.urls), + re_path(r"^ajax_select/", include(ajax_select_urls)), + re_path(r"^i18n/", include("django.conf.urls.i18n")), + re_path(r"^jsi18n/$", JavaScriptCatalog.as_view(), name="javascript-catalog"), + re_path(r"^captcha/", include("captcha.urls")), ] if settings.DEBUG: From b8c7fb6f7439a32d362ea03141ac4bcf9a3df0d8 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sat, 5 Oct 2019 23:50:07 +0200 Subject: [PATCH 07/23] django2.2: adapt ChoiceField to the new API --- matmat/views.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/matmat/views.py b/matmat/views.py index 2a76e764..112c1d54 100644 --- a/matmat/views.py +++ b/matmat/views.py @@ -70,7 +70,11 @@ class SearchForm(forms.ModelForm): } sex = forms.ChoiceField( - [("MAN", _("Man")), ("WOMAN", _("Woman")), ("INDIFFERENT", _("Indifferent"))], + choices=[ + ("MAN", _("Man")), + ("WOMAN", _("Woman")), + ("INDIFFERENT", _("Indifferent")), + ], widget=forms.RadioSelect, initial="INDIFFERENT", label=_("Sex"), From 00bd60ef4fa8dd2d6403378d09530e008cdbe7b8 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 00:09:58 +0200 Subject: [PATCH 08/23] django2.2: add exception parameter in forbidden and not_found views --- core/views/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/views/__init__.py b/core/views/__init__.py index f3783d31..a9e0a017 100644 --- a/core/views/__init__.py +++ b/core/views/__init__.py @@ -48,7 +48,7 @@ from core.models import Group from core.views.forms import LoginForm -def forbidden(request): +def forbidden(request, exception): try: return HttpResponseForbidden( render( @@ -71,7 +71,7 @@ def forbidden(request): ) -def not_found(request): +def not_found(request, exception): return HttpResponseNotFound(render(request, "core/404.jinja")) From c20d5855e4ed947764804284b0d410845f2e8fac Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 00:11:32 +0200 Subject: [PATCH 09/23] django2.2: remove view_page permission as it clash with built-in permission Need a bit of discussion as I'm not an expert in django built-in permissions An issue on github says it's related to https://docs.djangoproject.com/en/2.1/releases/2.1/#considerations-for-the-new-model-view-permission --- core/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/core/models.py b/core/models.py index 3ab59ecc..63a4eb54 100644 --- a/core/models.py +++ b/core/models.py @@ -1171,7 +1171,6 @@ class Page(models.Model): unique_together = ("name", "parent") permissions = ( ("change_prop_page", "Can change the page's properties (groups, ...)"), - ("view_page", "Can view the page"), ) @staticmethod From 3cb306bc91103b519359360899c461d7a6db86f8 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 00:32:54 +0200 Subject: [PATCH 10/23] django2.2: add on_delete on migrations for ForeignKey --- accounting/migrations/0001_initial.py | 3 ++ .../migrations/0002_auto_20160824_2152.py | 16 +++++++- .../migrations/0004_auto_20161005_1505.py | 1 + club/migrations/0001_initial.py | 6 ++- club/migrations/0002_auto_20160824_2152.py | 13 +++++- club/migrations/0004_auto_20160915_1057.py | 2 + club/migrations/0009_auto_20170822_2232.py | 9 +++- club/migrations/0011_auto_20180426_2013.py | 2 + com/migrations/0002_news_newsdate.py | 13 +++++- com/migrations/0003_auto_20170115_2300.py | 4 ++ com/migrations/0004_auto_20171221_1614.py | 7 +++- core/migrations/0001_initial.py | 17 +++++++- core/migrations/0005_auto_20161105_1035.py | 2 + core/migrations/0012_notification.py | 5 ++- core/migrations/0015_sithfile_moderator.py | 2 + core/migrations/0016_auto_20161212_1922.py | 2 + core/migrations/0027_gift.py | 5 ++- core/migrations/0029_auto_20180426_2013.py | 2 + counter/migrations/0001_initial.py | 36 +++++++++++++--- counter/migrations/0002_auto_20160826_1342.py | 6 +++ counter/migrations/0005_auto_20160826_2330.py | 6 ++- eboutic/migrations/0001_initial.py | 9 +++- election/migrations/0001_initial.py | 15 ++++++- forum/migrations/0001_initial.py | 41 +++++++++++++++---- launderette/migrations/0001_initial.py | 11 ++++- sas/migrations/0002_auto_20161119_1241.py | 7 +++- stock/migrations/0001_initial.py | 16 ++++++-- subscription/migrations/0001_initial.py | 7 +++- trombi/migrations/0001_initial.py | 2 + .../migrations/0004_trombiclubmembership.py | 2 + 30 files changed, 233 insertions(+), 36 deletions(-) diff --git a/accounting/migrations/0001_initial.py b/accounting/migrations/0001_initial.py index 9bd829a6..0196d3f2 100644 --- a/accounting/migrations/0001_initial.py +++ b/accounting/migrations/0001_initial.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals from django.db import migrations, models import django.core.validators import accounting.models +import django.db.models.deletion class Migration(migrations.Migration): @@ -243,6 +244,7 @@ class Migration(migrations.Migration): verbose_name="accounting type", to="accounting.AccountingType", blank=True, + on_delete=django.db.models.deletion.CASCADE, ), ), ], @@ -267,6 +269,7 @@ class Migration(migrations.Migration): verbose_name="simplified accounting types", to="accounting.AccountingType", related_name="simplified_types", + on_delete=django.db.models.deletion.CASCADE, ), ), ], diff --git a/accounting/migrations/0002_auto_20160824_2152.py b/accounting/migrations/0002_auto_20160824_2152.py index e0322f08..9c7458e4 100644 --- a/accounting/migrations/0002_auto_20160824_2152.py +++ b/accounting/migrations/0002_auto_20160824_2152.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -22,6 +23,7 @@ class Migration(migrations.Migration): verbose_name="invoice", to="core.SithFile", blank=True, + on_delete=django.db.models.deletion.CASCADE, ), ), migrations.AddField( @@ -31,6 +33,7 @@ class Migration(migrations.Migration): verbose_name="journal", to="accounting.GeneralJournal", related_name="operations", + on_delete=django.db.models.deletion.CASCADE, ), ), migrations.AddField( @@ -54,6 +57,7 @@ class Migration(migrations.Migration): verbose_name="simple type", to="accounting.SimplifiedAccountingType", blank=True, + on_delete=django.db.models.deletion.CASCADE, ), ), migrations.AddField( @@ -63,6 +67,7 @@ class Migration(migrations.Migration): verbose_name="club account", to="accounting.ClubAccount", related_name="journals", + on_delete=django.db.models.deletion.CASCADE, ), ), migrations.AddField( @@ -72,20 +77,27 @@ class Migration(migrations.Migration): verbose_name="bank account", to="accounting.BankAccount", related_name="club_accounts", + on_delete=django.db.models.deletion.CASCADE, ), ), migrations.AddField( model_name="clubaccount", name="club", field=models.ForeignKey( - verbose_name="club", to="club.Club", related_name="club_account" + verbose_name="club", + to="club.Club", + related_name="club_account", + on_delete=django.db.models.deletion.CASCADE, ), ), migrations.AddField( model_name="bankaccount", name="club", field=models.ForeignKey( - verbose_name="club", to="club.Club", related_name="bank_accounts" + verbose_name="club", + to="club.Club", + related_name="bank_accounts", + on_delete=django.db.models.deletion.CASCADE, ), ), migrations.AlterUniqueTogether( diff --git a/accounting/migrations/0004_auto_20161005_1505.py b/accounting/migrations/0004_auto_20161005_1505.py index c363cddb..8fe3a472 100644 --- a/accounting/migrations/0004_auto_20161005_1505.py +++ b/accounting/migrations/0004_auto_20161005_1505.py @@ -29,6 +29,7 @@ class Migration(migrations.Migration): related_name="labels", verbose_name="club account", to="accounting.ClubAccount", + on_delete=django.db.models.deletion.CASCADE, ), ), ], diff --git a/club/migrations/0001_initial.py b/club/migrations/0001_initial.py index 0bc1ec7e..17d3f309 100644 --- a/club/migrations/0001_initial.py +++ b/club/migrations/0001_initial.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models import django.core.validators +import django.db.models.deletion class Migration(migrations.Migration): @@ -90,7 +91,10 @@ class Migration(migrations.Migration): ( "club", models.ForeignKey( - verbose_name="club", to="club.Club", related_name="members" + verbose_name="club", + to="club.Club", + related_name="members", + on_delete=django.db.models.deletion.CASCADE, ), ), ], diff --git a/club/migrations/0002_auto_20160824_2152.py b/club/migrations/0002_auto_20160824_2152.py index b6de6b01..3d678866 100644 --- a/club/migrations/0002_auto_20160824_2152.py +++ b/club/migrations/0002_auto_20160824_2152.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -18,6 +19,7 @@ class Migration(migrations.Migration): model_name="membership", name="user", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="user", to=settings.AUTH_USER_MODEL, related_name="membership", @@ -45,14 +47,21 @@ class Migration(migrations.Migration): model_name="club", name="owner_group", field=models.ForeignKey( - default=1, to="core.Group", related_name="owned_club" + on_delete=django.db.models.deletion.CASCADE, + default=1, + to="core.Group", + related_name="owned_club", ), ), migrations.AddField( model_name="club", name="parent", field=models.ForeignKey( - null=True, to="club.Club", related_name="children", blank=True + on_delete=django.db.models.deletion.CASCADE, + null=True, + to="club.Club", + related_name="children", + blank=True, ), ), migrations.AddField( diff --git a/club/migrations/0004_auto_20160915_1057.py b/club/migrations/0004_auto_20160915_1057.py index 6cdde0a6..15fc00de 100644 --- a/club/migrations/0004_auto_20160915_1057.py +++ b/club/migrations/0004_auto_20160915_1057.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -14,6 +15,7 @@ class Migration(migrations.Migration): model_name="membership", name="user", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="user", related_name="memberships", to=settings.AUTH_USER_MODEL, diff --git a/club/migrations/0009_auto_20170822_2232.py b/club/migrations/0009_auto_20170822_2232.py index a7d84c3a..18fcd3c6 100644 --- a/club/migrations/0009_auto_20170822_2232.py +++ b/club/migrations/0009_auto_20170822_2232.py @@ -5,6 +5,7 @@ from django.db import migrations, models from django.conf import settings import re import django.core.validators +import django.db.models.deletion class Migration(migrations.Migration): @@ -51,12 +52,16 @@ class Migration(migrations.Migration): ( "club", models.ForeignKey( - verbose_name="Club", related_name="mailings", to="club.Club" + on_delete=django.db.models.deletion.CASCADE, + verbose_name="Club", + related_name="mailings", + to="club.Club", ), ), ( "moderator", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, null=True, verbose_name="moderator", related_name="moderated_mailings", @@ -84,6 +89,7 @@ class Migration(migrations.Migration): ( "mailing", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="Mailing", related_name="subscriptions", to="club.Mailing", @@ -92,6 +98,7 @@ class Migration(migrations.Migration): ( "user", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, null=True, verbose_name="User", related_name="mailing_subscriptions", diff --git a/club/migrations/0011_auto_20180426_2013.py b/club/migrations/0011_auto_20180426_2013.py index 8d63136e..74ca6fd0 100644 --- a/club/migrations/0011_auto_20180426_2013.py +++ b/club/migrations/0011_auto_20180426_2013.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models import club.models +import django.db.models.deletion class Migration(migrations.Migration): @@ -14,6 +15,7 @@ class Migration(migrations.Migration): model_name="club", name="owner_group", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, default=club.models.Club.get_default_owner_group, related_name="owned_club", to="core.Group", diff --git a/com/migrations/0002_news_newsdate.py b/com/migrations/0002_news_newsdate.py index 27241539..026d949c 100644 --- a/com/migrations/0002_news_newsdate.py +++ b/com/migrations/0002_news_newsdate.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -50,6 +51,7 @@ class Migration(migrations.Migration): ( "author", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="owned_news", to=settings.AUTH_USER_MODEL, verbose_name="author", @@ -58,12 +60,16 @@ class Migration(migrations.Migration): ( "club", models.ForeignKey( - related_name="news", to="club.Club", verbose_name="club" + on_delete=django.db.models.deletion.CASCADE, + related_name="news", + to="club.Club", + verbose_name="club", ), ), ( "moderator", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="moderated_news", null=True, to=settings.AUTH_USER_MODEL, @@ -99,7 +105,10 @@ class Migration(migrations.Migration): ( "news", models.ForeignKey( - related_name="dates", to="com.News", verbose_name="news_date" + on_delete=django.db.models.deletion.CASCADE, + related_name="dates", + to="com.News", + verbose_name="news_date", ), ), ], diff --git a/com/migrations/0003_auto_20170115_2300.py b/com/migrations/0003_auto_20170115_2300.py index d8fd9771..6ca595e5 100644 --- a/com/migrations/0003_auto_20170115_2300.py +++ b/com/migrations/0003_auto_20170115_2300.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -56,6 +57,7 @@ class Migration(migrations.Migration): ( "author", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name="author", related_name="owned_weekmail_articles", @@ -64,6 +66,7 @@ class Migration(migrations.Migration): ( "club", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="club.Club", verbose_name="club", related_name="weekmail_articles", @@ -72,6 +75,7 @@ class Migration(migrations.Migration): ( "weekmail", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="com.Weekmail", verbose_name="weekmail", related_name="articles", diff --git a/com/migrations/0004_auto_20171221_1614.py b/com/migrations/0004_auto_20171221_1614.py index 1ebd9b86..853f810a 100644 --- a/com/migrations/0004_auto_20171221_1614.py +++ b/com/migrations/0004_auto_20171221_1614.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals from django.db import migrations, models import django.utils.timezone from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -48,12 +49,16 @@ class Migration(migrations.Migration): ( "club", models.ForeignKey( - verbose_name="club", related_name="posters", to="club.Club" + on_delete=django.db.models.deletion.CASCADE, + verbose_name="club", + related_name="posters", + to="club.Club", ), ), ( "moderator", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="moderator", blank=True, null=True, diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py index 190ace89..903b9b77 100644 --- a/core/migrations/0001_initial.py +++ b/core/migrations/0001_initial.py @@ -8,6 +8,7 @@ import django.core.validators import core.models import phonenumber_field.modelfields from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -329,6 +330,7 @@ class Migration(migrations.Migration): ( "owner_group", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, default=1, related_name="owned_page", verbose_name="owner group", @@ -390,10 +392,19 @@ class Migration(migrations.Migration): ( "author", models.ForeignKey( - to=settings.AUTH_USER_MODEL, related_name="page_rev" + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + related_name="page_rev", + ), + ), + ( + "page", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="core.Page", + related_name="revisions", ), ), - ("page", models.ForeignKey(to="core.Page", related_name="revisions")), ], options={"ordering": ["date"]}, ), @@ -469,6 +480,7 @@ class Migration(migrations.Migration): ( "owner", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="owner", to=settings.AUTH_USER_MODEL, related_name="owned_files", @@ -477,6 +489,7 @@ class Migration(migrations.Migration): ( "parent", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, null=True, related_name="children", verbose_name="parent", diff --git a/core/migrations/0005_auto_20161105_1035.py b/core/migrations/0005_auto_20161105_1035.py index 803b373a..5225f184 100644 --- a/core/migrations/0005_auto_20161105_1035.py +++ b/core/migrations/0005_auto_20161105_1035.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -21,6 +22,7 @@ class Migration(migrations.Migration): model_name="page", name="lock_user", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="lock user", default=None, blank=True, diff --git a/core/migrations/0012_notification.py b/core/migrations/0012_notification.py index f48e4063..a7a68209 100644 --- a/core/migrations/0012_notification.py +++ b/core/migrations/0012_notification.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings import django.utils.timezone +import django.db.models.deletion class Migration(migrations.Migration): @@ -48,7 +49,9 @@ class Migration(migrations.Migration): ( "user", models.ForeignKey( - related_name="notifications", to=settings.AUTH_USER_MODEL + on_delete=django.db.models.deletion.CASCADE, + related_name="notifications", + to=settings.AUTH_USER_MODEL, ), ), ], diff --git a/core/migrations/0015_sithfile_moderator.py b/core/migrations/0015_sithfile_moderator.py index 00e2f1f9..13e6a3f2 100644 --- a/core/migrations/0015_sithfile_moderator.py +++ b/core/migrations/0015_sithfile_moderator.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -14,6 +15,7 @@ class Migration(migrations.Migration): model_name="sithfile", name="moderator", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="moderated_files", verbose_name="owner", default=0, diff --git a/core/migrations/0016_auto_20161212_1922.py b/core/migrations/0016_auto_20161212_1922.py index e98f06d6..f23b0dd5 100644 --- a/core/migrations/0016_auto_20161212_1922.py +++ b/core/migrations/0016_auto_20161212_1922.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -14,6 +15,7 @@ class Migration(migrations.Migration): model_name="sithfile", name="moderator", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="moderated_files", blank=True, null=True, diff --git a/core/migrations/0027_gift.py b/core/migrations/0027_gift.py index bfac2175..ab342e26 100644 --- a/core/migrations/0027_gift.py +++ b/core/migrations/0027_gift.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings import django.utils.timezone +import django.db.models.deletion class Migration(migrations.Migration): @@ -33,7 +34,9 @@ class Migration(migrations.Migration): ( "user", models.ForeignKey( - related_name="gifts", to=settings.AUTH_USER_MODEL + on_delete=django.db.models.deletion.CASCADE, + related_name="gifts", + to=settings.AUTH_USER_MODEL, ), ), ], diff --git a/core/migrations/0029_auto_20180426_2013.py b/core/migrations/0029_auto_20180426_2013.py index 4f80245d..ac0a06be 100644 --- a/core/migrations/0029_auto_20180426_2013.py +++ b/core/migrations/0029_auto_20180426_2013.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models import core.models +import django.db.models.deletion class Migration(migrations.Migration): @@ -14,6 +15,7 @@ class Migration(migrations.Migration): model_name="page", name="owner_group", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="owner group", default=core.models.Page.get_default_owner_group, related_name="owned_page", diff --git a/counter/migrations/0001_initial.py b/counter/migrations/0001_initial.py index 06f01d59..dcbcf574 100644 --- a/counter/migrations/0001_initial.py +++ b/counter/migrations/0001_initial.py @@ -5,6 +5,7 @@ from django.db import migrations, models import accounting.models import django.db.models.deletion from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -42,7 +43,14 @@ class Migration(migrations.Migration): verbose_name="counter type", ), ), - ("club", models.ForeignKey(to="club.Club", related_name="counters")), + ( + "club", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="club.Club", + related_name="counters", + ), + ), ( "edit_groups", models.ManyToManyField( @@ -97,13 +105,17 @@ class Migration(migrations.Migration): ( "counter", models.ForeignKey( - to="counter.Counter", related_name="permanencies" + on_delete=django.db.models.deletion.CASCADE, + to="counter.Counter", + related_name="permanencies", ), ), ( "user", models.ForeignKey( - to=settings.AUTH_USER_MODEL, related_name="permanencies" + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + related_name="permanencies", ), ), ], @@ -169,7 +181,10 @@ class Migration(migrations.Migration): ( "club", models.ForeignKey( - verbose_name="club", to="club.Club", related_name="products" + on_delete=django.db.models.deletion.CASCADE, + verbose_name="club", + to="club.Club", + related_name="products", ), ), ( @@ -268,15 +283,24 @@ class Migration(migrations.Migration): ), ( "counter", - models.ForeignKey(to="counter.Counter", related_name="refillings"), + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="counter.Counter", + related_name="refillings", + ), ), ( "customer", - models.ForeignKey(to="counter.Customer", related_name="refillings"), + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="counter.Customer", + related_name="refillings", + ), ), ( "operator", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, related_name="refillings_as_operator", ), diff --git a/counter/migrations/0002_auto_20160826_1342.py b/counter/migrations/0002_auto_20160826_1342.py index 721f5c8e..9b97700e 100644 --- a/counter/migrations/0002_auto_20160826_1342.py +++ b/counter/migrations/0002_auto_20160826_1342.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings import accounting.models +import django.db.models.deletion class Migration(migrations.Migration): @@ -35,6 +36,7 @@ class Migration(migrations.Migration): ( "counter", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="counter.Counter", related_name="cash_summaries", verbose_name="counter", @@ -43,6 +45,7 @@ class Migration(migrations.Migration): ( "user", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, related_name="cash_summaries", verbose_name="user", @@ -74,6 +77,7 @@ class Migration(migrations.Migration): ( "cash_summary", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="counter.CashRegisterSummary", related_name="items", verbose_name="cash summary", @@ -86,6 +90,7 @@ class Migration(migrations.Migration): model_name="permanency", name="counter", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="counter.Counter", related_name="permanencies", verbose_name="counter", @@ -95,6 +100,7 @@ class Migration(migrations.Migration): model_name="permanency", name="user", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, related_name="permanencies", verbose_name="user", diff --git a/counter/migrations/0005_auto_20160826_2330.py b/counter/migrations/0005_auto_20160826_2330.py index 4fa5ebea..37f3510e 100644 --- a/counter/migrations/0005_auto_20160826_2330.py +++ b/counter/migrations/0005_auto_20160826_2330.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -13,7 +14,10 @@ class Migration(migrations.Migration): model_name="counter", name="club", field=models.ForeignKey( - verbose_name="club", to="club.Club", related_name="counters" + on_delete=django.db.models.deletion.CASCADE, + verbose_name="club", + to="club.Club", + related_name="counters", ), ), migrations.AlterField( diff --git a/eboutic/migrations/0001_initial.py b/eboutic/migrations/0001_initial.py index 2eadf88c..8dd12da2 100644 --- a/eboutic/migrations/0001_initial.py +++ b/eboutic/migrations/0001_initial.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals from django.db import migrations, models import accounting.models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -27,6 +28,7 @@ class Migration(migrations.Migration): ( "user", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="user", to=settings.AUTH_USER_MODEL, related_name="baskets", @@ -62,7 +64,10 @@ class Migration(migrations.Migration): ( "basket", models.ForeignKey( - verbose_name="basket", to="eboutic.Basket", related_name="items" + on_delete=django.db.models.deletion.CASCADE, + verbose_name="basket", + to="eboutic.Basket", + related_name="items", ), ), ], @@ -88,6 +93,7 @@ class Migration(migrations.Migration): ( "user", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="user", to=settings.AUTH_USER_MODEL, related_name="invoices", @@ -123,6 +129,7 @@ class Migration(migrations.Migration): ( "invoice", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="invoice", to="eboutic.Invoice", related_name="items", diff --git a/election/migrations/0001_initial.py b/election/migrations/0001_initial.py index 00e15cfa..943928cc 100644 --- a/election/migrations/0001_initial.py +++ b/election/migrations/0001_initial.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -120,6 +121,7 @@ class Migration(migrations.Migration): ( "election", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="election", to="election.Election", related_name="election_lists", @@ -151,6 +153,7 @@ class Migration(migrations.Migration): ( "election", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="election", to="election.Election", related_name="roles", @@ -181,7 +184,10 @@ class Migration(migrations.Migration): ( "role", models.ForeignKey( - verbose_name="role", to="election.Role", related_name="votes" + on_delete=django.db.models.deletion.CASCADE, + verbose_name="role", + to="election.Role", + related_name="votes", ), ), ], @@ -190,6 +196,7 @@ class Migration(migrations.Migration): model_name="candidature", name="election_list", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="election list", to="election.ElectionList", related_name="candidatures", @@ -199,13 +206,17 @@ class Migration(migrations.Migration): model_name="candidature", name="role", field=models.ForeignKey( - verbose_name="role", to="election.Role", related_name="candidatures" + on_delete=django.db.models.deletion.CASCADE, + verbose_name="role", + to="election.Role", + related_name="candidatures", ), ), migrations.AddField( model_name="candidature", name="user", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="user", to=settings.AUTH_USER_MODEL, related_name="candidates", diff --git a/forum/migrations/0001_initial.py b/forum/migrations/0001_initial.py index 63aa4dd8..065f5c46 100644 --- a/forum/migrations/0001_initial.py +++ b/forum/migrations/0001_initial.py @@ -6,6 +6,7 @@ from django.utils.timezone import utc from django.conf import settings import django.utils.timezone import datetime +import django.db.models.deletion class Migration(migrations.Migration): @@ -52,6 +53,7 @@ class Migration(migrations.Migration): ( "owner_club", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="club.Club", verbose_name="owner club", related_name="owned_forums", @@ -61,7 +63,11 @@ class Migration(migrations.Migration): ( "parent", models.ForeignKey( - to="forum.Forum", null=True, related_name="children", blank=True + on_delete=django.db.models.deletion.CASCADE, + to="forum.Forum", + null=True, + related_name="children", + blank=True, ), ), ( @@ -103,7 +109,9 @@ class Migration(migrations.Migration): ( "author", models.ForeignKey( - related_name="forum_messages", to=settings.AUTH_USER_MODEL + on_delete=django.db.models.deletion.CASCADE, + related_name="forum_messages", + to=settings.AUTH_USER_MODEL, ), ), ( @@ -149,12 +157,18 @@ class Migration(migrations.Migration): ), ( "message", - models.ForeignKey(related_name="metas", to="forum.ForumMessage"), + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="metas", + to="forum.ForumMessage", + ), ), ( "user", models.ForeignKey( - related_name="forum_message_metas", to=settings.AUTH_USER_MODEL + on_delete=django.db.models.deletion.CASCADE, + related_name="forum_message_metas", + to=settings.AUTH_USER_MODEL, ), ), ], @@ -180,10 +194,19 @@ class Migration(migrations.Migration): ( "author", models.ForeignKey( - related_name="forum_topics", to=settings.AUTH_USER_MODEL + on_delete=django.db.models.deletion.CASCADE, + related_name="forum_topics", + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "forum", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="topics", + to="forum.Forum", ), ), - ("forum", models.ForeignKey(related_name="topics", to="forum.Forum")), ], options={"ordering": ["-id"]}, ), @@ -217,6 +240,10 @@ class Migration(migrations.Migration): migrations.AddField( model_name="forummessage", name="topic", - field=models.ForeignKey(related_name="messages", to="forum.ForumTopic"), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="messages", + to="forum.ForumTopic", + ), ), ] diff --git a/launderette/migrations/0001_initial.py b/launderette/migrations/0001_initial.py index c437d29d..f57526a9 100644 --- a/launderette/migrations/0001_initial.py +++ b/launderette/migrations/0001_initial.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -61,6 +62,7 @@ class Migration(migrations.Migration): ( "launderette", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="launderette", to="launderette.Launderette", related_name="machines", @@ -93,6 +95,7 @@ class Migration(migrations.Migration): ( "machine", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="machine", to="launderette.Machine", related_name="slots", @@ -131,6 +134,7 @@ class Migration(migrations.Migration): ( "launderette", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="launderette", to="launderette.Launderette", related_name="tokens", @@ -139,6 +143,7 @@ class Migration(migrations.Migration): ( "user", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, null=True, related_name="tokens", verbose_name="user", @@ -153,6 +158,7 @@ class Migration(migrations.Migration): model_name="slot", name="token", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, null=True, related_name="slots", verbose_name="token", @@ -164,7 +170,10 @@ class Migration(migrations.Migration): model_name="slot", name="user", field=models.ForeignKey( - verbose_name="user", to="core.User", related_name="slots" + on_delete=django.db.models.deletion.CASCADE, + verbose_name="user", + to="core.User", + related_name="slots", ), ), migrations.AlterUniqueTogether( diff --git a/sas/migrations/0002_auto_20161119_1241.py b/sas/migrations/0002_auto_20161119_1241.py index ed759ebc..f1b684d7 100644 --- a/sas/migrations/0002_auto_20161119_1241.py +++ b/sas/migrations/0002_auto_20161119_1241.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -28,12 +29,16 @@ class Migration(migrations.Migration): ( "picture", models.ForeignKey( - related_name="people", to="sas.Picture", verbose_name="picture" + on_delete=django.db.models.deletion.CASCADE, + related_name="people", + to="sas.Picture", + verbose_name="picture", ), ), ( "user", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name="pictures", to=settings.AUTH_USER_MODEL, verbose_name="user", diff --git a/stock/migrations/0001_initial.py b/stock/migrations/0001_initial.py index 686d7e65..d98872c6 100644 --- a/stock/migrations/0001_initial.py +++ b/stock/migrations/0001_initial.py @@ -132,7 +132,11 @@ class Migration(migrations.Migration): ), ( "stock_owner", - models.ForeignKey(related_name="items", to="stock.Stock"), + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="items", + to="stock.Stock", + ), ), ( "type", @@ -151,7 +155,10 @@ class Migration(migrations.Migration): model_name="shoppinglistitem", name="stockitem_owner", field=models.ForeignKey( - null=True, related_name="shopping_item", to="stock.StockItem" + on_delete=django.db.models.deletion.CASCADE, + null=True, + related_name="shopping_item", + to="stock.StockItem", ), ), migrations.AddField( @@ -170,7 +177,10 @@ class Migration(migrations.Migration): model_name="shoppinglist", name="stock_owner", field=models.ForeignKey( - null=True, related_name="shopping_lists", to="stock.Stock" + on_delete=django.db.models.deletion.CASCADE, + null=True, + related_name="shopping_lists", + to="stock.Stock", ), ), ] diff --git a/subscription/migrations/0001_initial.py b/subscription/migrations/0001_initial.py index 2be00065..39c37994 100644 --- a/subscription/migrations/0001_initial.py +++ b/subscription/migrations/0001_initial.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models import django.contrib.auth.models +import django.db.models.deletion class Migration(migrations.Migration): @@ -79,6 +80,10 @@ class Migration(migrations.Migration): migrations.AddField( model_name="subscription", name="member", - field=models.ForeignKey(to="core.User", related_name="subscriptions"), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="core.User", + related_name="subscriptions", + ), ), ] diff --git a/trombi/migrations/0001_initial.py b/trombi/migrations/0001_initial.py index 4f850f3d..bb8c393b 100644 --- a/trombi/migrations/0001_initial.py +++ b/trombi/migrations/0001_initial.py @@ -126,6 +126,7 @@ class Migration(migrations.Migration): model_name="trombicomment", name="author", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="trombi.TrombiUser", verbose_name="author", related_name="given_comments", @@ -135,6 +136,7 @@ class Migration(migrations.Migration): model_name="trombicomment", name="target", field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="trombi.TrombiUser", verbose_name="target", related_name="received_comments", diff --git a/trombi/migrations/0004_trombiclubmembership.py b/trombi/migrations/0004_trombiclubmembership.py index 2f6d3023..55813312 100644 --- a/trombi/migrations/0004_trombiclubmembership.py +++ b/trombi/migrations/0004_trombiclubmembership.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -40,6 +41,7 @@ class Migration(migrations.Migration): ( "user", models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, verbose_name="user", related_name="memberships", to="trombi.TrombiUser", From f7548ab8d157cb1e9932f7ab07cc60454dd453e4 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 00:38:25 +0200 Subject: [PATCH 11/23] django2.2: add on_delete on migrations for OneToOneField --- accounting/migrations/0002_auto_20160824_2152.py | 1 + club/migrations/0002_auto_20160824_2152.py | 1 + club/migrations/0010_auto_20170912_2028.py | 7 ++++++- core/migrations/0001_initial.py | 6 +++++- core/migrations/0023_auto_20170902_1226.py | 5 ++++- counter/migrations/0001_initial.py | 5 ++++- counter/migrations/0009_eticket.py | 2 ++ forum/migrations/0001_initial.py | 4 +++- launderette/migrations/0001_initial.py | 1 + stock/migrations/0001_initial.py | 1 + trombi/migrations/0001_initial.py | 10 +++++++++- 11 files changed, 37 insertions(+), 6 deletions(-) diff --git a/accounting/migrations/0002_auto_20160824_2152.py b/accounting/migrations/0002_auto_20160824_2152.py index 9c7458e4..d3b1c9a2 100644 --- a/accounting/migrations/0002_auto_20160824_2152.py +++ b/accounting/migrations/0002_auto_20160824_2152.py @@ -40,6 +40,7 @@ class Migration(migrations.Migration): model_name="operation", name="linked_operation", field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, blank=True, to="accounting.Operation", null=True, diff --git a/club/migrations/0002_auto_20160824_2152.py b/club/migrations/0002_auto_20160824_2152.py index 3d678866..444a96a6 100644 --- a/club/migrations/0002_auto_20160824_2152.py +++ b/club/migrations/0002_auto_20160824_2152.py @@ -36,6 +36,7 @@ class Migration(migrations.Migration): model_name="club", name="home", field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, blank=True, null=True, related_name="home_of_club", diff --git a/club/migrations/0010_auto_20170912_2028.py b/club/migrations/0010_auto_20170912_2028.py index ff6f76ec..84aaf09a 100644 --- a/club/migrations/0010_auto_20170912_2028.py +++ b/club/migrations/0010_auto_20170912_2028.py @@ -5,6 +5,7 @@ from django.db import migrations, models from club.models import Club from core.operations import PsqlRunOnly +import django.db.models.deletion def generate_club_pages(apps, schema_editor): @@ -31,7 +32,11 @@ class Migration(migrations.Migration): model_name="club", name="page", field=models.OneToOneField( - related_name="club", blank=True, null=True, to="core.Page" + on_delete=django.db.models.deletion.CASCADE, + related_name="club", + blank=True, + null=True, + to="core.Page", ), ), migrations.AddField( diff --git a/core/migrations/0001_initial.py b/core/migrations/0001_initial.py index 903b9b77..51b8bc2e 100644 --- a/core/migrations/0001_initial.py +++ b/core/migrations/0001_initial.py @@ -277,6 +277,7 @@ class Migration(migrations.Migration): ( "group_ptr", models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, primary_key=True, parent_link=True, serialize=False, @@ -431,7 +432,9 @@ class Migration(migrations.Migration): ( "user", models.OneToOneField( - to=settings.AUTH_USER_MODEL, related_name="preferences" + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + related_name="preferences", ), ), ], @@ -525,6 +528,7 @@ class Migration(migrations.Migration): model_name="user", name="home", field=models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, blank=True, null=True, related_name="home_of", diff --git a/core/migrations/0023_auto_20170902_1226.py b/core/migrations/0023_auto_20170902_1226.py index f932cba9..67798aa5 100644 --- a/core/migrations/0023_auto_20170902_1226.py +++ b/core/migrations/0023_auto_20170902_1226.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals from django.db import migrations, models from django.conf import settings +import django.db.models.deletion class Migration(migrations.Migration): @@ -35,7 +36,9 @@ class Migration(migrations.Migration): model_name="preferences", name="user", field=models.OneToOneField( - related_name="_preferences", to=settings.AUTH_USER_MODEL + on_delete=django.db.models.deletion.CASCADE, + related_name="_preferences", + to=settings.AUTH_USER_MODEL, ), ), ] diff --git a/counter/migrations/0001_initial.py b/counter/migrations/0001_initial.py index dcbcf574..de31a6e2 100644 --- a/counter/migrations/0001_initial.py +++ b/counter/migrations/0001_initial.py @@ -66,7 +66,10 @@ class Migration(migrations.Migration): ( "user", models.OneToOneField( - primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL + on_delete=django.db.models.deletion.CASCADE, + primary_key=True, + serialize=False, + to=settings.AUTH_USER_MODEL, ), ), ( diff --git a/counter/migrations/0009_eticket.py b/counter/migrations/0009_eticket.py index 6df0ea73..23b9204c 100644 --- a/counter/migrations/0009_eticket.py +++ b/counter/migrations/0009_eticket.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -32,6 +33,7 @@ class Migration(migrations.Migration): ( "product", models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, verbose_name="product", related_name="eticket", to="counter.Product", diff --git a/forum/migrations/0001_initial.py b/forum/migrations/0001_initial.py index 065f5c46..866c25e8 100644 --- a/forum/migrations/0001_initial.py +++ b/forum/migrations/0001_initial.py @@ -232,7 +232,9 @@ class Migration(migrations.Migration): ( "user", models.OneToOneField( - to=settings.AUTH_USER_MODEL, related_name="_forum_infos" + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + related_name="_forum_infos", ), ), ], diff --git a/launderette/migrations/0001_initial.py b/launderette/migrations/0001_initial.py index f57526a9..c6746b2c 100644 --- a/launderette/migrations/0001_initial.py +++ b/launderette/migrations/0001_initial.py @@ -26,6 +26,7 @@ class Migration(migrations.Migration): ( "counter", models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, related_name="launderette", verbose_name="counter", to="counter.Counter", diff --git a/stock/migrations/0001_initial.py b/stock/migrations/0001_initial.py index d98872c6..6faa40c4 100644 --- a/stock/migrations/0001_initial.py +++ b/stock/migrations/0001_initial.py @@ -86,6 +86,7 @@ class Migration(migrations.Migration): ( "counter", models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, verbose_name="counter", related_name="stock", to="counter.Counter", diff --git a/trombi/migrations/0001_initial.py b/trombi/migrations/0001_initial.py index bb8c393b..bb33b748 100644 --- a/trombi/migrations/0001_initial.py +++ b/trombi/migrations/0001_initial.py @@ -51,7 +51,14 @@ class Migration(migrations.Migration): verbose_name="maximum characters", ), ), - ("club", models.OneToOneField(to="club.Club", related_name="trombi")), + ( + "club", + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + to="club.Club", + related_name="trombi", + ), + ), ], ), migrations.CreateModel( @@ -115,6 +122,7 @@ class Migration(migrations.Migration): ( "user", models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, verbose_name="trombi user", to=settings.AUTH_USER_MODEL, related_name="trombi_user", From 296cc4144caf103538d6791e095a33ed4442c1d2 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 00:41:00 +0200 Subject: [PATCH 12/23] django2.2: remove SessionAuthenticationMiddleware See https://docs.djangoproject.com/en/2.2/releases/2.0/ for more details --- sith/settings.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sith/settings.py b/sith/settings.py index 4b40dcac..75c864d3 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -101,7 +101,6 @@ MIDDLEWARE = ( "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", - "django.contrib.auth.middleware.SessionAuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.locale.LocaleMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", From 90921fd4cd1cebbc3f00e4090768b59f4a774c94 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 03:27:18 +0200 Subject: [PATCH 13/23] django2.2: some migrations to make django happy --- core/migrations/0033_auto_20191006_0049.py | 27 +++++++++++++++++++ .../migrations/0004_auto_20191006_0049.py | 18 +++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 core/migrations/0033_auto_20191006_0049.py create mode 100644 election/migrations/0004_auto_20191006_0049.py diff --git a/core/migrations/0033_auto_20191006_0049.py b/core/migrations/0033_auto_20191006_0049.py new file mode 100644 index 00000000..3f2628c8 --- /dev/null +++ b/core/migrations/0033_auto_20191006_0049.py @@ -0,0 +1,27 @@ +# Generated by Django 2.2.6 on 2019-10-05 22:49 + +import django.contrib.auth.models +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [("core", "0032_auto_20190909_0043")] + + operations = [ + migrations.AlterModelOptions( + name="page", + options={ + "permissions": ( + ( + "change_prop_page", + "Can change the page's properties (groups, ...)", + ), + ) + }, + ), + migrations.AlterModelManagers( + name="group", + managers=[("objects", django.contrib.auth.models.GroupManager())], + ), + ] diff --git a/election/migrations/0004_auto_20191006_0049.py b/election/migrations/0004_auto_20191006_0049.py new file mode 100644 index 00000000..01f5c1f9 --- /dev/null +++ b/election/migrations/0004_auto_20191006_0049.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.6 on 2019-10-05 22:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [("election", "0003_auto_20171202_1819")] + + operations = [ + migrations.AlterField( + model_name="role", + name="order", + field=models.PositiveIntegerField( + db_index=True, editable=False, verbose_name="order" + ), + ) + ] From 97c316b62e88f9d5a9b03487a3b82c93984ab7bb Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 01:34:21 +0200 Subject: [PATCH 14/23] django2.2: replace removed is_anonymous() and is_authenticated to their now used counterparts --- core/middleware.py | 2 +- core/templates/core/base.jinja | 2 +- core/templates/core/login.jinja | 2 +- core/views/__init__.py | 2 +- core/views/files.py | 2 +- core/views/user.py | 2 +- counter/views.py | 8 ++++---- eboutic/views.py | 10 +++++----- election/views.py | 4 ++-- launderette/views.py | 2 +- sas/views.py | 8 ++++---- 11 files changed, 22 insertions(+), 22 deletions(-) diff --git a/core/middleware.py b/core/middleware.py index 37c01ff9..54d7dd2e 100644 --- a/core/middleware.py +++ b/core/middleware.py @@ -37,7 +37,7 @@ AnonymousUser = getattr(importlib.import_module(module), klass) def get_cached_user(request): if not hasattr(request, "_cached_user"): user = get_user(request) - if user.is_anonymous(): + if user.is_anonymous: user = AnonymousUser(request) request._cached_user = user diff --git a/core/templates/core/base.jinja b/core/templates/core/base.jinja index 43d2a058..0f07b50e 100644 --- a/core/templates/core/base.jinja +++ b/core/templates/core/base.jinja @@ -39,7 +39,7 @@
- {% if not user.is_authenticated() %} + {% if not user.is_authenticated %} diff --git a/core/templates/core/login.jinja b/core/templates/core/login.jinja index 35efa68c..a81528b6 100644 --- a/core/templates/core/login.jinja +++ b/core/templates/core/login.jinja @@ -11,7 +11,7 @@ {% endif %} {% if next %} - {% if user.is_authenticated() %} + {% if user.is_authenticated %}

{% trans %}Your account doesn't have access to this page. To proceed, please login with an account that has access.{% endtrans %}

{% else %} diff --git a/core/views/__init__.py b/core/views/__init__.py index a9e0a017..bdf76455 100644 --- a/core/views/__init__.py +++ b/core/views/__init__.py @@ -150,7 +150,7 @@ class CanCreateMixin(View): def dispatch(self, request, *arg, **kwargs): res = super(CanCreateMixin, self).dispatch(request, *arg, **kwargs) - if not request.user.is_authenticated(): + if not request.user.is_authenticated: raise PermissionDenied return res diff --git a/core/views/files.py b/core/views/files.py index 4117dc2d..1ed98946 100644 --- a/core/views/files.py +++ b/core/views/files.py @@ -289,7 +289,7 @@ class FileView(CanViewMixin, DetailView, FormMixin): self.form = self.get_form() # The form handle only the file upload files = request.FILES.getlist("file_field") if ( - request.user.is_authenticated() + request.user.is_authenticated and request.user.can_edit(self.object) and self.form.is_valid() ): diff --git a/core/views/user.py b/core/views/user.py index bd3b00ab..1b4ebdf4 100644 --- a/core/views/user.py +++ b/core/views/user.py @@ -689,7 +689,7 @@ class UserUpdateProfileView(UserTabsMixin, CanEditMixin, UpdateView): files = request.FILES.items() self.form.process(files) if ( - request.user.is_authenticated() + request.user.is_authenticated and request.user.can_edit(self.object) and self.form.is_valid() ): diff --git a/counter/views.py b/counter/views.py index 48ebd74b..ce6693e0 100644 --- a/counter/views.py +++ b/counter/views.py @@ -323,7 +323,7 @@ class CounterMain( ) if self.object.type == "BAR": kwargs["barmen"] = self.object.get_barmen_list() - elif self.request.user.is_authenticated(): + elif self.request.user.is_authenticated: kwargs["barmen"] = [self.request.user] if "last_basket" in self.request.session.keys(): kwargs["last_basket"] = self.request.session.pop("last_basket") @@ -372,7 +372,7 @@ class CounterClick(CounterTabsMixin, CanViewMixin, DetailView): ): raise PermissionDenied else: - if not request.user.is_authenticated(): + if not request.user.is_authenticated: raise PermissionDenied return super(CounterClick, self).dispatch(request, *args, **kwargs) @@ -387,7 +387,7 @@ class CounterClick(CounterTabsMixin, CanViewMixin, DetailView): request.session["no_age"] = False self.refill_form = None ret = super(CounterClick, self).get(request, *args, **kwargs) - if (self.object.type != "BAR" and not request.user.is_authenticated()) or ( + if (self.object.type != "BAR" and not request.user.is_authenticated) or ( self.object.type == "BAR" and len(self.object.get_barmen_list()) < 1 ): # Check that at least one barman is logged in ret = self.cancel(request) # Otherwise, go to main view @@ -397,7 +397,7 @@ class CounterClick(CounterTabsMixin, CanViewMixin, DetailView): """ Handle the many possibilities of the post request """ self.object = self.get_object() self.refill_form = None - if (self.object.type != "BAR" and not request.user.is_authenticated()) or ( + if (self.object.type != "BAR" and not request.user.is_authenticated) or ( self.object.type == "BAR" and len(self.object.get_barmen_list()) < 1 ): # Check that at least one barman is logged in return self.cancel(request) diff --git a/eboutic/views.py b/eboutic/views.py index 927f01a3..21a8fead 100644 --- a/eboutic/views.py +++ b/eboutic/views.py @@ -56,7 +56,7 @@ class EbouticMain(TemplateView): request.session.modified = True def get(self, request, *args, **kwargs): - if not request.user.is_authenticated(): + if not request.user.is_authenticated: return HttpResponseRedirect( reverse_lazy("core:login", args=self.args, kwargs=kwargs) + "?next=" @@ -67,7 +67,7 @@ class EbouticMain(TemplateView): return super(EbouticMain, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): - if not request.user.is_authenticated(): + if not request.user.is_authenticated: return HttpResponseRedirect( reverse_lazy("core:login", args=self.args, kwargs=kwargs) + "?next=" @@ -118,7 +118,7 @@ class EbouticCommand(TemplateView): template_name = "eboutic/eboutic_makecommand.jinja" def get(self, request, *args, **kwargs): - if not request.user.is_authenticated(): + if not request.user.is_authenticated: return HttpResponseRedirect( reverse_lazy("core:login", args=self.args, kwargs=kwargs) + "?next=" @@ -129,7 +129,7 @@ class EbouticCommand(TemplateView): ) def post(self, request, *args, **kwargs): - if not request.user.is_authenticated(): + if not request.user.is_authenticated: return HttpResponseRedirect( reverse_lazy("core:login", args=self.args, kwargs=kwargs) + "?next=" @@ -192,7 +192,7 @@ class EbouticPayWithSith(TemplateView): with transaction.atomic(): if ( "basket_id" not in request.session.keys() - or not request.user.is_authenticated() + or not request.user.is_authenticated ): return HttpResponseRedirect( reverse_lazy("eboutic:main", args=self.args, kwargs=kwargs) diff --git a/election/views.py b/election/views.py index 22971b62..a730c011 100644 --- a/election/views.py +++ b/election/views.py @@ -553,7 +553,7 @@ class CandidatureUpdateView(CanEditMixin, UpdateView): self.form = self.get_form() self.remove_fields() if ( - request.user.is_authenticated() + request.user.is_authenticated and request.user.can_edit(self.object) and self.form.is_valid() ): @@ -597,7 +597,7 @@ class RoleUpdateView(CanEditMixin, UpdateView): self.form = self.get_form() self.remove_fields() if ( - request.user.is_authenticated() + request.user.is_authenticated and request.user.can_edit(self.object) and self.form.is_valid() ): diff --git a/launderette/views.py b/launderette/views.py index dcf0ffda..5c7e85a8 100644 --- a/launderette/views.py +++ b/launderette/views.py @@ -84,7 +84,7 @@ class LaunderetteBookView(CanViewMixin, DetailView): self.object = self.get_object() if "slot_type" in request.POST.keys(): self.slot_type = request.POST["slot_type"] - if "slot" in request.POST.keys() and request.user.is_authenticated(): + if "slot" in request.POST.keys() and request.user.is_authenticated: self.subscriber = request.user if self.subscriber.is_subscribed: self.date = dateparse.parse_datetime(request.POST["slot"]).replace( diff --git a/sas/views.py b/sas/views.py index d2f7b889..91d0518d 100644 --- a/sas/views.py +++ b/sas/views.py @@ -117,7 +117,7 @@ class SASMainView(FormView): parent = SithFile.objects.filter(id=settings.SITH_SAS_ROOT_DIR_ID).first() files = request.FILES.getlist("images") root = User.objects.filter(username="root").first() - if request.user.is_authenticated() and request.user.is_in_group( + if request.user.is_authenticated and request.user.is_in_group( settings.SITH_GROUP_SAS_ADMIN_ID ): if self.form.is_valid(): @@ -176,7 +176,7 @@ class PictureView(CanViewMixin, DetailView, FormMixin): def post(self, request, *args, **kwargs): self.object = self.get_object() self.form = self.get_form() - if request.user.is_authenticated() and request.user.was_subscribed: + if request.user.is_authenticated and request.user.was_subscribed: if self.form.is_valid(): for uid in self.form.cleaned_data["users"]: u = User.objects.filter(id=uid).first() @@ -233,7 +233,7 @@ class AlbumUploadView(CanViewMixin, DetailView, FormMixin): self.form = self.get_form() parent = SithFile.objects.filter(id=self.object.id).first() files = request.FILES.getlist("images") - if request.user.is_authenticated() and request.user.is_subscribed: + if request.user.is_authenticated and request.user.is_subscribed: if self.form.is_valid(): self.form.process( parent=parent, @@ -279,7 +279,7 @@ class AlbumView(CanViewMixin, DetailView, FormMixin): FileView.handle_clipboard(request, self.object) parent = SithFile.objects.filter(id=self.object.id).first() files = request.FILES.getlist("images") - if request.user.is_authenticated() and request.user.is_subscribed: + if request.user.is_authenticated and request.user.is_subscribed: if self.form.is_valid(): self.form.process( parent=parent, From 99c8d95443739fa9bda488719b353a2b462f7552 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 02:15:18 +0200 Subject: [PATCH 15/23] django2.2: remove direct assignments to many-to-many fields --- club/models.py | 4 +-- com/tests.py | 2 +- core/management/commands/populate.py | 54 +++++++++++++++------------- core/models.py | 4 +-- forum/models.py | 4 +-- 5 files changed, 37 insertions(+), 31 deletions(-) diff --git a/club/models.py b/club/models.py index f625d2e4..c4cc75c6 100644 --- a/club/models.py +++ b/club/models.py @@ -190,8 +190,8 @@ class Club(models.Model): name=settings.SITH_MAIN_MEMBERS_GROUP ).first() self.make_home() - self.home.edit_groups = [board] - self.home.view_groups = [member, subscribers] + self.home.edit_groups.set([board]) + self.home.view_groups.set([member, subscribers]) self.home.save() self.make_page() diff --git a/com/tests.py b/com/tests.py index 6ceb1f17..398b22fe 100644 --- a/com/tests.py +++ b/com/tests.py @@ -62,7 +62,7 @@ class ComTest(TestCase): self.com_group = RealGroup.objects.filter( id=settings.SITH_GROUP_COM_ADMIN_ID ).first() - self.skia.groups = [self.com_group] + self.skia.groups.set([self.com_group]) self.skia.save() self.client.login(username=self.skia.username, password="plop") diff --git a/core/management/commands/populate.py b/core/management/commands/populate.py index fcd13908..06c5d3f3 100644 --- a/core/management/commands/populate.py +++ b/core/management/commands/populate.py @@ -142,18 +142,18 @@ class Command(BaseCommand): g.save() c = Counter(id=b[0], name=b[1], club=bar_club, type="BAR") c.save() - c.edit_groups = [g] - c.save() + g.editable_counters.add(c) + g.save() self.reset_index("counter") Counter(name="Eboutic", club=main_club, type="EBOUTIC").save() Counter(name="AE", club=main_club, type="OFFICE").save() - home_root.view_groups = [ - Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first() - ] - club_root.view_groups = [ - Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first() - ] + home_root.view_groups.set( + [Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first()] + ) + club_root.view_groups.set( + [Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first()] + ) home_root.save() club_root.save() @@ -163,7 +163,7 @@ class Command(BaseCommand): p = Page(name="Index") p.set_lock(root) p.save() - p.view_groups = [settings.SITH_GROUP_PUBLIC_ID] + p.view_groups.set([settings.SITH_GROUP_PUBLIC_ID]) p.set_lock(root) p.save() PageRev( @@ -178,7 +178,7 @@ Welcome to the wiki page! p = Page(name="services") p.set_lock(root) p.save() - p.view_groups = [settings.SITH_GROUP_PUBLIC_ID] + p.view_groups.set([settings.SITH_GROUP_PUBLIC_ID]) p.set_lock(root) PageRev( page=p, @@ -297,9 +297,13 @@ Welcome to the wiki page! counter.view_groups = [ Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id ] - counter.groups = [ - Group.objects.filter(id=settings.SITH_GROUP_COUNTER_ADMIN_ID).first().id - ] + counter.groups.set( + [ + Group.objects.filter(id=settings.SITH_GROUP_COUNTER_ADMIN_ID) + .first() + .id + ] + ) counter.save() # Adding user Comptable comptable = User( @@ -316,11 +320,13 @@ Welcome to the wiki page! comptable.view_groups = [ Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id ] - comptable.groups = [ - Group.objects.filter(id=settings.SITH_GROUP_ACCOUNTING_ADMIN_ID) - .first() - .id - ] + comptable.groups.set( + [ + Group.objects.filter(id=settings.SITH_GROUP_ACCOUNTING_ADMIN_ID) + .first() + .id + ] + ) comptable.save() # Adding user Guy u = User( @@ -359,11 +365,11 @@ Welcome to the wiki page! PageRev( page=p, title="Aide sur la syntaxe", author=skia, content=rm.read() ).save() - p.view_groups = [settings.SITH_GROUP_PUBLIC_ID] + p.view_groups.set([settings.SITH_GROUP_PUBLIC_ID]) p.save(force_lock=True) p = Page(name="Services") p.save(force_lock=True) - p.view_groups = [settings.SITH_GROUP_PUBLIC_ID] + p.view_groups.set([settings.SITH_GROUP_PUBLIC_ID]) p.save(force_lock=True) PageRev( page=p, @@ -842,9 +848,9 @@ Welcome to the wiki page! ) comunity.set_password("plop") comunity.save() - comunity.groups = [ - Group.objects.filter(name="Communication admin").first().id - ] + comunity.groups.set( + [Group.objects.filter(name="Communication admin").first().id] + ) comunity.save() Membership( user=comunity, @@ -862,7 +868,7 @@ Welcome to the wiki page! ) tutu.set_password("plop") tutu.save() - tutu.groups = [settings.SITH_GROUP_PEDAGOGY_ADMIN_ID] + tutu.groups.set([settings.SITH_GROUP_PEDAGOGY_ADMIN_ID]) tutu.save() # Adding subscription for sli diff --git a/core/models.py b/core/models.py index 63a4eb54..17bc5003 100644 --- a/core/models.py +++ b/core/models.py @@ -948,8 +948,8 @@ class SithFile(models.Model): def copy_rights(self): """Copy, if possible, the rights of the parent folder""" if self.parent is not None: - self.edit_groups = self.parent.edit_groups.all() - self.view_groups = self.parent.view_groups.all() + self.edit_groups.set(self.parent.edit_groups.all()) + self.view_groups.set(self.parent.view_groups.all()) self.save() def move_to(self, parent): diff --git a/forum/models.py b/forum/models.py index 41785640..d8fefd35 100644 --- a/forum/models.py +++ b/forum/models.py @@ -152,8 +152,8 @@ class Forum(models.Model): """Copy, if possible, the rights of the parent folder""" if self.parent is not None: self.owner_club = self.parent.owner_club - self.edit_groups = self.parent.edit_groups.all() - self.view_groups = self.parent.view_groups.all() + self.edit_groups.set(self.parent.edit_groups.all()) + self.view_groups.set(self.parent.view_groups.all()) self.save() _club_memberships = {} # This cache is particularly efficient: From 308cf30a5ab7759c6c86204947e3c5c7821d779d Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 02:24:03 +0200 Subject: [PATCH 16/23] django2.2: replace deprecated login view --- core/urls.py | 2 +- core/views/user.py | 12 +++++------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/core/urls.py b/core/urls.py index d937e4de..2f200266 100644 --- a/core/urls.py +++ b/core/urls.py @@ -37,7 +37,7 @@ urlpatterns = [ re_path(r"^search_json/$", search_json, name="search_json"), re_path(r"^search_user/$", search_user_json, name="search_user"), # Login and co - re_path(r"^login/$", login, name="login"), + re_path(r"^login/$", SithLoginView.as_view(), name="login"), re_path(r"^logout/$", logout, name="logout"), re_path(r"^password_change/$", password_change, name="password_change"), re_path( diff --git a/core/views/user.py b/core/views/user.py index 1b4ebdf4..1dd0f17e 100644 --- a/core/views/user.py +++ b/core/views/user.py @@ -69,15 +69,13 @@ from counter.views import StudentCardForm from trombi.views import UserTrombiForm -def login(request): +class SithLoginView(views.LoginView): + """ + The login View """ - The login view - Needs to be improve with correct handling of form exceptions - """ - return views.login( - request, template_name="core/login.jinja", authentication_form=LoginForm - ) + template_name = "core/login.jinja" + authentication_form = LoginForm def logout(request): From a177fa823236dfbc29ee09bb6622c898af548a29 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 02:44:48 +0200 Subject: [PATCH 17/23] django2.2: replace deprecated base_name with basename in urls --- api/urls.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/api/urls.py b/api/urls.py index 8d0ae3f5..9f8884bd 100644 --- a/api/urls.py +++ b/api/urls.py @@ -29,22 +29,22 @@ from rest_framework import routers # Router config router = routers.DefaultRouter() -router.register(r"counter", CounterViewSet, base_name="api_counter") -router.register(r"user", UserViewSet, base_name="api_user") -router.register(r"club", ClubViewSet, base_name="api_club") -router.register(r"group", GroupViewSet, base_name="api_group") +router.register(r"counter", CounterViewSet, basename="api_counter") +router.register(r"user", UserViewSet, basename="api_user") +router.register(r"club", ClubViewSet, basename="api_club") +router.register(r"group", GroupViewSet, basename="api_group") # Launderette router.register( - r"launderette/place", LaunderettePlaceViewSet, base_name="api_launderette_place" + r"launderette/place", LaunderettePlaceViewSet, basename="api_launderette_place" ) router.register( r"launderette/machine", LaunderetteMachineViewSet, - base_name="api_launderette_machine", + basename="api_launderette_machine", ) router.register( - r"launderette/token", LaunderetteTokenViewSet, base_name="api_launderette_token" + r"launderette/token", LaunderetteTokenViewSet, basename="api_launderette_token" ) urlpatterns = [ From 59185ab2a81ded33e945fd2b6c9286f50e5ca327 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 03:02:17 +0200 Subject: [PATCH 18/23] django2.2: rewrite login and password stack because of removed API --- core/urls.py | 26 +++++++++++---- core/views/user.py | 79 ++++++++++++++++++++-------------------------- 2 files changed, 55 insertions(+), 50 deletions(-) diff --git a/core/urls.py b/core/urls.py index 2f200266..6a853707 100644 --- a/core/urls.py +++ b/core/urls.py @@ -39,23 +39,37 @@ urlpatterns = [ # Login and co re_path(r"^login/$", SithLoginView.as_view(), name="login"), re_path(r"^logout/$", logout, name="logout"), - re_path(r"^password_change/$", password_change, name="password_change"), + re_path( + r"^password_change/$", SithPasswordChangeView.as_view(), name="password_change" + ), re_path( r"^password_change/(?P[0-9]+)$", password_root_change, name="password_root_change", ), re_path( - r"^password_change/done$", password_change_done, name="password_change_done" + r"^password_change/done$", + SithPasswordChangeDoneView.as_view(), + name="password_change_done", + ), + re_path( + r"^password_reset/$", SithPasswordResetView.as_view(), name="password_reset" + ), + re_path( + r"^password_reset/done$", + SithPasswordResetDoneView.as_view(), + name="password_reset_done", ), - re_path(r"^password_reset/$", password_reset, name="password_reset"), - re_path(r"^password_reset/done$", password_reset_done, name="password_reset_done"), re_path( r"^reset/(?P[0-9A-Za-z_\-]+)/(?P[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$", - password_reset_confirm, + SithPasswordResetConfirmView.as_view(), name="password_reset_confirm", ), - re_path(r"^reset/done/$", password_reset_complete, name="password_reset_complete"), + re_path( + r"^reset/done/$", + SithPasswordResetCompleteView.as_view(), + name="password_reset_complete", + ), re_path(r"^register$", register, name="register"), # Group handling re_path(r"^group/$", GroupListView.as_view(), name="group_list"), diff --git a/core/views/user.py b/core/views/user.py index 1dd0f17e..3a340e2b 100644 --- a/core/views/user.py +++ b/core/views/user.py @@ -26,6 +26,7 @@ # This file contains all the views that concern the user model from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth import views +from django.contrib.auth.forms import PasswordChangeForm from django.utils.translation import ugettext as _ from django.urls import reverse from django.core.exceptions import PermissionDenied, ValidationError @@ -76,6 +77,24 @@ class SithLoginView(views.LoginView): template_name = "core/login.jinja" authentication_form = LoginForm + form_class = PasswordChangeForm + + +class SithPasswordChangeView(views.PasswordChangeView): + """ + Allows a user to change its password + """ + + template_name = "core/password_change.jinja" + success_url = reverse_lazy("core:password_change_done") + + +class SithPasswordChangeDoneView(views.PasswordChangeDoneView): + """ + Allows a user to change its password + """ + + template_name = "core/password_change_done.jinja" def logout(request): @@ -85,26 +104,6 @@ def logout(request): return views.logout_then_login(request) -def password_change(request): - """ - Allows a user to change its password - """ - return views.password_change( - request, - template_name="core/password_change.jinja", - post_change_redirect=reverse("core:password_change_done"), - ) - - -def password_change_done(request): - """ - Allows a user to change its password - """ - return views.password_change_done( - request, template_name="core/password_change_done.jinja" - ) - - def password_root_change(request, user_id): """ Allows a root user to change someone's password @@ -126,47 +125,39 @@ def password_root_change(request, user_id): ) -def password_reset(request): +class SithPasswordResetView(views.PasswordResetView): """ Allows someone to enter an email adresse for resetting password """ - return views.password_reset( - request, - template_name="core/password_reset.jinja", - email_template_name="core/password_reset_email.jinja", - post_reset_redirect="core:password_reset_done", - ) + + template_name = "core/password_reset.jinja" + email_template_name = "core/password_reset_email.jinja" + success_url = reverse_lazy("core:password_reset_done") -def password_reset_done(request): +class SithPasswordResetDoneView(views.PasswordResetDoneView): """ Confirm that the reset email has been sent """ - return views.password_reset_done( - request, template_name="core/password_reset_done.jinja" - ) + + template_name = "core/password_reset_done.jinja" -def password_reset_confirm(request, uidb64=None, token=None): +class SithPasswordResetConfirmView(views.PasswordResetConfirmView): """ - Provide a reset password formular + Provide a reset password form """ - return views.password_reset_confirm( - request, - uidb64=uidb64, - token=token, - post_reset_redirect="core:password_reset_complete", - template_name="core/password_reset_confirm.jinja", - ) + + template_name = "core/password_reset_confirm.jinja" + success_url = reverse_lazy("core:password_reset_complete") -def password_reset_complete(request): +class SithPasswordResetCompleteView(views.PasswordResetCompleteView): """ Confirm the password has sucessfully been reset """ - return views.password_reset_complete( - request, template_name="core/password_reset_complete.jinja" - ) + + template_name = "core/password_reset_complete.jinja" def register(request): From cf3f5ea60c6c28e4b026103e1d1ed9d85387638d Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 14:12:15 +0200 Subject: [PATCH 19/23] django2.2: fix django server crash because of breaking change in widget rendering method --- core/views/forms.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/core/views/forms.py b/core/views/forms.py index 0c557749..5d980732 100644 --- a/core/views/forms.py +++ b/core/views/forms.py @@ -56,39 +56,39 @@ from PIL import Image class SelectSingle(Select): - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): if attrs: attrs["class"] = "select_single" else: attrs = {"class": "select_single"} - return super(SelectSingle, self).render(name, value, attrs) + return super(SelectSingle, self).render(name, value, attrs, renderer) class SelectMultiple(Select): - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): if attrs: attrs["class"] = "select_multiple" else: attrs = {"class": "select_multiple"} - return super(SelectMultiple, self).render(name, value, attrs) + return super(SelectMultiple, self).render(name, value, attrs, renderer) class SelectDateTime(DateTimeInput): - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): if attrs: attrs["class"] = "select_datetime" else: attrs = {"class": "select_datetime"} - return super(SelectDateTime, self).render(name, value, attrs) + return super(SelectDateTime, self).render(name, value, attrs, renderer) class SelectDate(DateInput): - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): if attrs: attrs["class"] = "select_date" else: attrs = {"class": "select_date"} - return super(SelectDate, self).render(name, value, attrs) + return super(SelectDate, self).render(name, value, attrs, renderer) class MarkdownInput(Textarea): @@ -127,7 +127,7 @@ class MarkdownInput(Textarea): class SelectFile(TextInput): - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): if attrs: attrs["class"] = "select_file" else: @@ -135,7 +135,7 @@ class SelectFile(TextInput): output = ( '%(content)s
' % { - "content": super(SelectFile, self).render(name, value, attrs), + "content": super(SelectFile, self).render(name, value, attrs, renderer), "title": _("Choose file"), "name": name, } @@ -151,7 +151,7 @@ class SelectFile(TextInput): class SelectUser(TextInput): - def render(self, name, value, attrs=None): + def render(self, name, value, attrs=None, renderer=None): if attrs: attrs["class"] = "select_user" else: @@ -159,7 +159,7 @@ class SelectUser(TextInput): output = ( '%(content)s
' % { - "content": super(SelectUser, self).render(name, value, attrs), + "content": super(SelectUser, self).render(name, value, attrs, renderer), "title": _("Choose user"), "name": name, } From d7075eb7621aaad8004db2a3c23622c47d663af8 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 14:11:38 +0200 Subject: [PATCH 20/23] django2.2: fix breaking change for getting uploaded files size --- core/views/files.py | 2 +- core/views/forms.py | 2 +- core/views/user.py | 2 +- sas/views.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/views/files.py b/core/views/files.py index 1ed98946..60f7f7aa 100644 --- a/core/views/files.py +++ b/core/views/files.py @@ -109,7 +109,7 @@ class AddFilesForm(forms.Form): owner=owner, is_folder=False, mime_type=f.content_type, - size=f._size, + size=f.size, ) try: new_file.clean() diff --git a/core/views/forms.py b/core/views/forms.py index 5d980732..3b33b0c4 100644 --- a/core/views/forms.py +++ b/core/views/forms.py @@ -302,7 +302,7 @@ class UserProfileForm(forms.ModelForm): owner=self.instance, is_folder=False, mime_type=f.content_type, - size=f._size, + size=f.size, moderator=self.instance, is_moderated=True, ) diff --git a/core/views/user.py b/core/views/user.py index 3a340e2b..f613d6d5 100644 --- a/core/views/user.py +++ b/core/views/user.py @@ -630,7 +630,7 @@ class UserUploadProfilePictView(CanEditMixin, DetailView): owner=self.object, is_folder=False, mime_type=f.content_type, - size=f._size, + size=f.size, ) new_file.file.name = name new_file.save() diff --git a/sas/views.py b/sas/views.py index 91d0518d..941e2bb6 100644 --- a/sas/views.py +++ b/sas/views.py @@ -78,7 +78,7 @@ class SASForm(forms.Form): file=f, owner=owner, mime_type=f.content_type, - size=f._size, + size=f.size, is_folder=False, is_moderated=automodere, ) From 81fcf411c18a6f280b0da9b6ac7662bf9382ca34 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 16:50:55 +0200 Subject: [PATCH 21/23] django2.2: forms fixs for new API --- club/forms.py | 2 +- election/views.py | 17 ++--------------- 2 files changed, 3 insertions(+), 16 deletions(-) diff --git a/club/forms.py b/club/forms.py index 791cd1fc..4f5d9b85 100644 --- a/club/forms.py +++ b/club/forms.py @@ -66,7 +66,7 @@ class MailingForm(forms.Form): super(MailingForm, self).__init__(*args, **kwargs) self.fields["action"] = forms.TypedChoiceField( - ( + choices=( (self.ACTION_NEW_MAILING, _("New Mailing")), (self.ACTION_NEW_SUBSCRIPTION, _("Subscribe")), (self.ACTION_REMOVE_SUBSCRIPTION, _("Remove")), diff --git a/election/views.py b/election/views.py index a730c011..78342cd2 100644 --- a/election/views.py +++ b/election/views.py @@ -28,23 +28,10 @@ class LimitedCheckboxField(forms.ModelMultipleChoiceField): automatic backend verification """ - def __init__( - self, - queryset, - max_choice, - required=True, - widget=None, - label=None, - initial=None, - help_text="", - *args, - **kwargs - ): + def __init__(self, queryset, max_choice, **kwargs): self.max_choice = max_choice widget = forms.CheckboxSelectMultiple() - super(LimitedCheckboxField, self).__init__( - queryset, None, required, widget, label, initial, help_text, *args, **kwargs - ) + super(LimitedCheckboxField, self).__init__(queryset, **kwargs) def clean(self, value): qs = super(LimitedCheckboxField, self).clean(value) From cd2d3ee6b4a1647ad0a1568546656eec3f77540f Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 17:44:30 +0200 Subject: [PATCH 22/23] django2.2: fix tests for accounting --- .../journal_statement_accounting.jinja | 6 +-- .../accounting/journal_statement_nature.jinja | 10 ++-- .../accounting/journal_statement_person.jinja | 8 ++-- accounting/tests.py | 46 +++++++++++++------ 4 files changed, 45 insertions(+), 25 deletions(-) diff --git a/accounting/templates/accounting/journal_statement_accounting.jinja b/accounting/templates/accounting/journal_statement_accounting.jinja index 98564095..0661bbcf 100644 --- a/accounting/templates/accounting/journal_statement_accounting.jinja +++ b/accounting/templates/accounting/journal_statement_accounting.jinja @@ -20,14 +20,14 @@ {% for k,v in statement.items() %} {{ k }} - {{ v }} + {{ "%.2f" % v }} {% endfor %} -

{% trans %}Amount: {% endtrans %}{{ object.amount }} €

-

{% trans %}Effective amount: {% endtrans %}{{ object.effective_amount }} €

+

{% trans %}Amount: {% endtrans %}{{ "%.2f" % object.amount }} €

+

{% trans %}Effective amount: {% endtrans %}{{ "%.2f" %object.effective_amount }} €

{% endblock %} diff --git a/accounting/templates/accounting/journal_statement_nature.jinja b/accounting/templates/accounting/journal_statement_nature.jinja index 0bfca0d0..a3aa1567 100644 --- a/accounting/templates/accounting/journal_statement_nature.jinja +++ b/accounting/templates/accounting/journal_statement_nature.jinja @@ -18,12 +18,12 @@ {% for k,v in dict['CREDIT'].items() %} {{ k }} - {{ v }} + {{ "%.2f" % v }} {% endfor %} - {% trans %}Total: {% endtrans %}{{ dict['CREDIT_sum'] }} + {% trans %}Total: {% endtrans %}{{ "%.2f" % dict['CREDIT_sum'] }}
{% trans %}Debit{% endtrans %}
@@ -37,19 +37,19 @@ {% for k,v in dict['DEBIT'].items() %} - + {% endfor %}
{{ k }}{{ v }}{{ "%.2f" % v }}
- {% trans %}Total: {% endtrans %}{{ dict['DEBIT_sum'] }} + {% trans %}Total: {% endtrans %}{{ "%.2f" % dict['DEBIT_sum'] }} {% endmacro %} {% block content %}

{% trans %}Statement by nature: {% endtrans %} {{ object.name }}

{% for k,v in statement.items() %} -

{{ k }} : {{ v['CREDIT_sum'] - v['DEBIT_sum'] }}

+

{{ k }} : {{ "%.2f" % (v['CREDIT_sum'] - v['DEBIT_sum']) }}

{{ display_tables(v) }}
{% endfor %} diff --git a/accounting/templates/accounting/journal_statement_person.jinja b/accounting/templates/accounting/journal_statement_person.jinja index 0fd0dd5d..9a88e73f 100644 --- a/accounting/templates/accounting/journal_statement_person.jinja +++ b/accounting/templates/accounting/journal_statement_person.jinja @@ -28,14 +28,14 @@ {% else %} {% endif %} - {{ credit_statement[key] }} + {{ "%.2f" % credit_statement[key] }} {% endfor %} -

Total : {{ total_credit }}

+

Total : {{ "%.2f" % total_credit }}

{% trans %}Debit{% endtrans %}

@@ -56,13 +56,13 @@ {% else %} {% endif %} - {{ debit_statement[key] }} + {{ "%.2f" % debit_statement[key] }} {% endfor %} -

Total : {{ total_debit }}

+

Total : {{ "%.2f" % total_debit }}

{% endblock %} diff --git a/accounting/tests.py b/accounting/tests.py index 96b19010..f424d8e8 100644 --- a/accounting/tests.py +++ b/accounting/tests.py @@ -272,30 +272,50 @@ class OperationTest(TestCase): def test_nature_statement(self): self.client.login(username="comptable", password="plop") - response_get = self.client.get( + response = self.client.get( reverse("accounting:journal_nature_statement", args=[self.journal.id]) ) - self.assertTrue( - "bob (Troll Pench\\xc3\\xa9) : 3.00" in str(response_get.content) - ) + self.assertContains(response, "bob (Troll Penché) : 3.00", status_code=200) def test_person_statement(self): self.client.login(username="comptable", password="plop") - response_get = self.client.get( + response = self.client.get( reverse("accounting:journal_person_statement", args=[self.journal.id]) ) - self.assertTrue( - "3.00" in str(response_get.content) - and 'S' Kia' - in str(response_get.content) + self.assertContains(response, "Total : 5575.72", status_code=200) + self.assertContains(response, "Total : 71.42") + self.assertContains( + response, + """ + S' Kia + + 3.00""", + ) + self.assertContains( + response, + """ + S' Kia + + 823.00""", ) def test_accounting_statement(self): self.client.login(username="comptable", password="plop") - response_get = self.client.get( + response = self.client.get( reverse("accounting:journal_accounting_statement", args=[self.journal.id]) ) - self.assertTrue( - "443 - Cr\\xc3\\xa9dit - Ce code n'existe pas" - in str(response_get.content) + self.assertContains( + response, + """ + + 443 - Crédit - Ce code n'existe pas + 3.00 + """, + status_code=200, + ) + self.assertContains( + response, + """ +

Montant : -5504.30 €

+

Montant effectif: -5504.30 €

""", ) From c3f2d0a134e1975ecafd2f69ca067986ef84d810 Mon Sep 17 00:00:00 2001 From: Bartuccio Antoine Date: Sun, 6 Oct 2019 17:59:38 +0200 Subject: [PATCH 23/23] django2.2: unlock djangorestframework version limit --- api/views/__init__.py | 4 ++-- api/views/counter.py | 4 ++-- api/views/launderette.py | 10 +++++----- api/views/user.py | 4 ++-- requirements.txt | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/api/views/__init__.py b/api/views/__init__.py index 90f3fc0e..3d731738 100644 --- a/api/views/__init__.py +++ b/api/views/__init__.py @@ -25,7 +25,7 @@ from rest_framework.response import Response from rest_framework import viewsets from django.core.exceptions import PermissionDenied -from rest_framework.decorators import detail_route +from rest_framework.decorators import action from django.db.models.query import QuerySet from core.views import can_view, can_edit @@ -46,7 +46,7 @@ def check_if(obj, user, test): class ManageModelMixin: - @detail_route() + @action(detail=True) def id(self, request, pk=None): """ Get by id (api/v1/router/{pk}/id/) diff --git a/api/views/counter.py b/api/views/counter.py index 43ac1885..5b241031 100644 --- a/api/views/counter.py +++ b/api/views/counter.py @@ -24,7 +24,7 @@ from rest_framework import serializers from rest_framework.response import Response -from rest_framework.decorators import list_route +from rest_framework.decorators import action from counter.models import Counter @@ -51,7 +51,7 @@ class CounterViewSet(RightModelViewSet): serializer_class = CounterSerializer queryset = Counter.objects.all() - @list_route() + @action(detail=False) def bar(self, request): """ Return all bars (api/v1/counter/bar/) diff --git a/api/views/launderette.py b/api/views/launderette.py index 940f8ebd..cdcacd0a 100644 --- a/api/views/launderette.py +++ b/api/views/launderette.py @@ -24,7 +24,7 @@ from rest_framework import serializers from rest_framework.response import Response -from rest_framework.decorators import list_route +from rest_framework.decorators import action from launderette.models import Launderette, Machine, Token @@ -96,7 +96,7 @@ class LaunderetteTokenViewSet(RightModelViewSet): serializer_class = LaunderetteTokenSerializer queryset = Token.objects.all() - @list_route() + @action(detail=False) def washing(self, request): """ Return all washing tokens (api/v1/launderette/token/washing) @@ -105,7 +105,7 @@ class LaunderetteTokenViewSet(RightModelViewSet): serializer = self.get_serializer(self.queryset, many=True) return Response(serializer.data) - @list_route() + @action(detail=False) def drying(self, request): """ Return all drying tokens (api/v1/launderette/token/drying) @@ -114,7 +114,7 @@ class LaunderetteTokenViewSet(RightModelViewSet): serializer = self.get_serializer(self.queryset, many=True) return Response(serializer.data) - @list_route() + @action(detail=False) def avaliable(self, request): """ Return all avaliable tokens (api/v1/launderette/token/avaliable) @@ -125,7 +125,7 @@ class LaunderetteTokenViewSet(RightModelViewSet): serializer = self.get_serializer(self.queryset, many=True) return Response(serializer.data) - @list_route() + @action(detail=False) def unavaliable(self, request): """ Return all unavaliable tokens (api/v1/launderette/token/unavaliable) diff --git a/api/views/user.py b/api/views/user.py index 4724c292..bb45a8a2 100644 --- a/api/views/user.py +++ b/api/views/user.py @@ -26,7 +26,7 @@ import datetime from rest_framework import serializers from rest_framework.response import Response -from rest_framework.decorators import list_route +from rest_framework.decorators import action from core.models import User @@ -57,7 +57,7 @@ class UserViewSet(RightModelViewSet): serializer_class = UserSerializer queryset = User.objects.filter(is_active=True) - @list_route() + @action(detail=False) def birthday(self, request): """ Return all users born today (api/v1/user/birstdays) diff --git a/requirements.txt b/requirements.txt index bf650400..ae74020d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,7 +5,7 @@ mistune django-jinja pyopenssl pytz -djangorestframework <3.10 +djangorestframework django-phonenumber-field phonenumbers django-ajax-selects