From 1b9ce7b94f6d56b3b395c0632efc4d35febfe351 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Thu, 23 Aug 2018 17:05:56 +0300 Subject: [PATCH] First try to upgrade to Django2 --- abonapp/models.py | 20 +++--- abonapp/urls.py | 100 +++++++++++++-------------- abonapp/views.py | 35 +++++----- accounts_app/urls.py | 32 ++++----- chatbot/email_bot.py | 3 + chatbot/models.py | 6 +- clientsideapp/urls.py | 16 ++--- clientsideapp/views.py | 7 +- devapp/models.py | 2 +- devapp/urls.py | 50 +++++++------- devapp/views.py | 15 ++-- dialing_app/urls.py | 18 ++--- dialing_app/views.py | 6 +- djing/fields.py | 4 +- djing/global_base_views.py | 2 +- djing/settings.py | 2 +- djing/templatetags/dpagination.py | 2 +- djing/urls.py | 36 +++++----- group_app/urls.py | 10 +-- ip_pool/templatetags/ip_pool_tags.py | 2 +- ip_pool/urls.py | 21 +++--- mapapp/urls.py | 25 +++---- mapapp/views.py | 15 ++-- msg_app/context_processors.py | 2 +- msg_app/models.py | 16 ++--- msg_app/urls.py | 12 ++-- msg_app/views.py | 8 +-- nas_app/urls.py | 10 +-- requirements.txt | 2 +- searchapp/urls.py | 4 +- statistics/fields.py | 2 +- statistics/urls.py | 4 +- tariff_app/urls.py | 16 ++--- taskapp/models.py | 10 +-- taskapp/urls.py | 34 ++++----- 35 files changed, 274 insertions(+), 275 deletions(-) diff --git a/abonapp/models.py b/abonapp/models.py index 4e9c247..21461cb 100644 --- a/abonapp/models.py +++ b/abonapp/models.py @@ -22,9 +22,9 @@ from bitfield import BitField class AbonLog(models.Model): - abon = models.ForeignKey('Abon', models.CASCADE) + abon = models.ForeignKey('Abon', on_delete=models.CASCADE) amount = models.FloatField(default=0.0) - author = models.ForeignKey(UserProfile, models.CASCADE, related_name='+', blank=True, null=True) + author = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='+', blank=True, null=True) comment = models.CharField(max_length=128) date = models.DateTimeField(auto_now_add=True) @@ -40,7 +40,7 @@ class AbonLog(models.Model): class AbonTariff(models.Model): - tariff = models.ForeignKey(Tariff, models.CASCADE, related_name='linkto_tariff') + tariff = models.ForeignKey(Tariff, on_delete=models.CASCADE, related_name='linkto_tariff') time_start = models.DateTimeField(null=True, blank=True, default=None) @@ -72,7 +72,7 @@ class AbonTariff(models.Model): class AbonStreet(models.Model): name = models.CharField(max_length=64) - group = models.ForeignKey(Group, models.CASCADE) + group = models.ForeignKey(Group, on_delete=models.CASCADE) def __str__(self): return self.name @@ -91,7 +91,7 @@ class AbonManager(MyUserManager): class Abon(BaseAccount): current_tariff = models.ForeignKey(AbonTariff, null=True, blank=True, on_delete=models.SET_NULL) - group = models.ForeignKey(Group, models.SET_NULL, blank=True, null=True, verbose_name=_('User group')) + group = models.ForeignKey(Group, on_delete=models.SET_NULL, blank=True, null=True, verbose_name=_('User group')) ballance = models.FloatField(default=0.0) ip_addresses = models.ManyToManyField(IpLeaseModel, verbose_name=_('Ip addresses')) description = models.TextField(_('Comment'), null=True, blank=True) @@ -308,7 +308,7 @@ class PassportInfo(models.Model): class InvoiceForPayment(models.Model): - abon = models.ForeignKey(Abon, models.CASCADE) + abon = models.ForeignKey(Abon, on_delete=models.CASCADE) status = models.BooleanField(default=False) amount = models.FloatField(default=0.0) comment = models.CharField(max_length=128) @@ -353,7 +353,7 @@ class AllTimePayLogManager(models.Manager): # Log for pay system "AllTime" class AllTimePayLog(models.Model): - abon = models.ForeignKey(Abon, models.SET_DEFAULT, blank=True, null=True, default=None) + abon = models.ForeignKey(Abon, on_delete=models.SET_DEFAULT, blank=True, null=True, default=None) pay_id = models.CharField(max_length=36, unique=True, primary_key=True) date_add = models.DateTimeField(auto_now_add=True) summ = models.FloatField(default=0.0) @@ -397,7 +397,7 @@ class AbonRawPassword(models.Model): class AdditionalTelephone(models.Model): - abon = models.ForeignKey(Abon, models.CASCADE, related_name='additional_telephones') + abon = models.ForeignKey(Abon, on_delete=models.CASCADE, related_name='additional_telephones') telephone = models.CharField( max_length=16, verbose_name=_('Telephone'), @@ -422,10 +422,10 @@ class AdditionalTelephone(models.Model): class PeriodicPayForId(models.Model): - periodic_pay = models.ForeignKey(PeriodicPay, models.CASCADE, verbose_name=_('Periodic pay')) + periodic_pay = models.ForeignKey(PeriodicPay, on_delete=models.CASCADE, verbose_name=_('Periodic pay')) last_pay = models.DateTimeField(_('Last pay time'), blank=True, null=True) next_pay = models.DateTimeField(_('Next time to pay')) - account = models.ForeignKey(Abon, models.CASCADE, verbose_name=_('Account')) + account = models.ForeignKey(Abon, on_delete=models.CASCADE, verbose_name=_('Account')) def payment_for_service(self, author: UserProfile=None, now=None): """ diff --git a/abonapp/urls.py b/abonapp/urls.py index 7e419c1..ad06746 100644 --- a/abonapp/urls.py +++ b/abonapp/urls.py @@ -1,65 +1,65 @@ -from django.conf.urls import url, include +from django.urls import path, include, re_path from . import views app_name = 'abonapp' subscriber_patterns = [ - url(r'^$', views.AbonHomeUpdateView.as_view(), name='abon_home'), - url(r'^services/$', views.abon_services, name='abon_services'), - url(r'^amount/$', views.abonamount, name='abon_amount'), - url(r'^debts/$', views.DebtsListView.as_view(), name='abon_debts'), - url(r'^pay/$', views.PayHistoryListView.as_view(), name='abon_phistory'), - url(r'^addinvoice/$', views.add_invoice, name='add_invoice'), - url(r'^pick/$', views.pick_tariff, name='pick_tariff'), - url(r'^passport_view/$', views.PassportUpdateView.as_view(), name='passport_view'), - url(r'^chart/$', views.charts, name='charts'), - url(r'^dials/$', views.DialsListView.as_view(), name='dials'), - # url(r'^reset_ip/$', views.reset_ip, name='reset_ip'), - url(r'^unsubscribe_service(?P\d+)/$', views.unsubscribe_service, name='unsubscribe_service'), - url(r'^dev/$', views.dev, name='dev'), - url(r'^del/$', views.DelAbonDeleteView.as_view(), name='del_abon'), - url(r'^clear_dev/$', views.clear_dev, name='clear_dev'), - url(r'^task_log/$', views.TaskLogListView.as_view(), name='task_log'), - url(r'^user_dev/$', views.save_user_dev_port, name='save_user_dev_port'), - url(r'^telephones/$', views.tels, name='telephones'), - url(r'^tel/add/$', views.tel_add, name='telephone_new'), - url(r'^tel/del/$', views.tel_del, name='telephone_del'), - url(r'^markers/$', views.EditSibscriberMarkers.as_view(), name='markers_edit'), - url(r'^session/(?P\d+)/free$', views.user_session_toggle, {'action': 'free'}, name='user_session_free'), - url(r'^session/(?P\d+)/start$', views.user_session_toggle, {'action': 'start'}, name='user_session_start'), - url(r'^periodic_pay$', views.add_edit_periodic_pay, name='add_periodic_pay'), - url(r'^periodic_pay(?P\d+)/$', views.add_edit_periodic_pay, name='add_periodic_pay'), - url(r'^periodic_pay(?P\d+)/del/$', views.del_periodic_pay, name='del_periodic_pay'), - url(r'^lease/add/$', views.lease_add, name='lease_add'), - url(r'^ping$', views.abon_ping, name='ping') + path('', views.AbonHomeUpdateView.as_view(), name='abon_home'), + path('services/', views.abon_services, name='abon_services'), + path('amount/', views.abonamount, name='abon_amount'), + path('debts/', views.DebtsListView.as_view(), name='abon_debts'), + path('pay/', views.PayHistoryListView.as_view(), name='abon_phistory'), + path('addinvoice/', views.add_invoice, name='add_invoice'), + path('pick/', views.pick_tariff, name='pick_tariff'), + path('passport_view/', views.PassportUpdateView.as_view(), name='passport_view'), + path('chart/', views.charts, name='charts'), + path('dials/', views.DialsListView.as_view(), name='dials'), + # path('reset_ip/', views.reset_ip, name='reset_ip'), + path('unsubscribe_service//', views.unsubscribe_service, name='unsubscribe_service'), + path('dev/', views.dev, name='dev'), + path('del/', views.DelAbonDeleteView.as_view(), name='del_abon'), + path('clear_dev/', views.clear_dev, name='clear_dev'), + path('task_log/', views.TaskLogListView.as_view(), name='task_log'), + path('user_dev/', views.save_user_dev_port, name='save_user_dev_port'), + path('telephones/', views.tels, name='telephones'), + path('tel/add/', views.tel_add, name='telephone_new'), + path('tel/del/', views.tel_del, name='telephone_del'), + path('markers/', views.EditSibscriberMarkers.as_view(), name='markers_edit'), + path('session//free/', views.user_session_toggle, {'action': 'free'}, name='user_session_free'), + path('session//start/', views.user_session_toggle, {'action': 'start'}, name='user_session_start'), + path('periodic_pay/', views.add_edit_periodic_pay, name='add_periodic_pay'), + path('periodic_pay//', views.add_edit_periodic_pay, name='add_periodic_pay'), + path('periodic_pay//del/', views.del_periodic_pay, name='del_periodic_pay'), + path('lease/add/', views.lease_add, name='lease_add'), + path('ping/', views.abon_ping, name='ping') ] group_patterns = [ - url(r'^$', views.PeoplesListView.as_view(), name='people_list'), - url(r'^addabon$', views.AbonCreateView.as_view(), name='add_abon'), - url(r'^services$', views.chgroup_tariff, name='ch_group_tariff'), - url(r'^phonebook$', views.phonebook, name='phonebook'), - url(r'^export$', views.abon_export, name='abon_export'), - url(r'^street/add$', views.street_add, name='street_add'), - url(r'^street/edit', views.street_edit, name='street_edit'), - url(r'^street/(?P\d+)/delete$', views.street_del, name='street_del'), - url(r'^active_networks/$', views.active_nets, name='active_nets'), - url(r'^attach_nas/$', views.attach_nas, name='attach_nas'), - url(r'^(?P\w{1,127})/', include(subscriber_patterns)) + path('', views.PeoplesListView.as_view(), name='people_list'), + path('addabon/', views.AbonCreateView.as_view(), name='add_abon'), + path('services/', views.chgroup_tariff, name='ch_group_tariff'), + path('phonebook/', views.phonebook, name='phonebook'), + path('export/', views.abon_export, name='abon_export'), + path('street/add/', views.street_add, name='street_add'), + path('street/edit', views.street_edit, name='street_edit'), + path('street//delete/', views.street_del, name='street_del'), + path('active_networks/', views.active_nets, name='active_nets'), + path('attach_nas/', views.attach_nas, name='attach_nas'), + re_path('^(?P\w{1,127})/', include(subscriber_patterns)) ] urlpatterns = [ - url(r'^$', views.GroupListView.as_view(), name='group_list'), - url(r'^fin_report$', views.fin_report, name='fin_report'), - url(r'^(?P\d+)/', include(group_patterns)), - url(r'^log$', views.LogListView.as_view(), name='log'), - url(r'^pay$', views.terminal_pay, name='terminal_pay'), - url(r'^debtors$', views.DebtorsListView.as_view(), name='debtors'), - url(r'^contacts/vcards/$', views.vcards, name='vcards'), + path('', views.GroupListView.as_view(), name='group_list'), + path('fin_report/', views.fin_report, name='fin_report'), + path('/', include(group_patterns)), + path('log/', views.LogListView.as_view(), name='log'), + path('pay/', views.terminal_pay, name='terminal_pay'), + path('debtors/', views.DebtorsListView.as_view(), name='debtors'), + path('contacts/vcards/', views.vcards, name='vcards'), # Api's - url(r'^api/abons$', views.abons), - url(r'^api/abon_filter$', views.search_abon), - url(r'^api/dhcp_lever/$', views.DhcpLever.as_view()) + path('api/abons/', views.abons), + path('api/abon_filter/', views.search_abon), + path('api/dhcp_lever/', views.DhcpLever.as_view()) ] diff --git a/abonapp/views.py b/abonapp/views.py index 9f6a408..9c31bcb 100644 --- a/abonapp/views.py +++ b/abonapp/views.py @@ -1,11 +1,10 @@ from ipaddress import ip_address from typing import Dict, Optional from datetime import datetime, date -from django.contrib.gis.shortcuts import render_to_text from django.core.exceptions import PermissionDenied, ValidationError from django.db import IntegrityError, ProgrammingError, transaction from django.db.models import Count, Q -from django.shortcuts import render, redirect, get_object_or_404, resolve_url +from django.shortcuts import render, redirect, get_object_or_404, resolve_url, render_to_response from django.contrib.auth.decorators import login_required from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseRedirect from django.contrib import messages @@ -201,11 +200,11 @@ def abonamount(request, gid, uname): except lib.MultipleException as errs: for err in errs.err_list: messages.error(request, err) - return render_to_text('abonapp/modal_abonamount.html', { + return render_to_response('abonapp/modal_abonamount.html', { 'abon': abon, 'group_id': gid, 'form': frm - }, request=request) + }) @method_decorator((login_required, lib.decorators.only_admins), name='dispatch') @@ -843,10 +842,10 @@ def street_add(request, gid): messages.error(request, _('fix form errors')) else: frm = forms.AbonStreetForm(initial={'group': gid}) - return render_to_text('abonapp/modal_addstreet.html', { + return render_to_response('abonapp/modal_addstreet.html', { 'form': frm, 'gid': gid - }, request=request) + }) @login_required @@ -861,10 +860,10 @@ def street_edit(request, gid): street.save() messages.success(request, _('Streets has been saved')) else: - return render_to_text('abonapp/modal_editstreet.html', { + return render_to_response('abonapp/modal_editstreet.html', { 'gid': gid, 'streets': models.AbonStreet.objects.filter(group=gid) - }, request=request) + }) except models.AbonStreet.DoesNotExist: messages.error(request, _('One of these streets has not been found')) @@ -899,11 +898,11 @@ def active_nets(request, gid): def tels(request, gid, uname): abon = get_object_or_404(models.Abon, username=uname) telephones = abon.additional_telephones.all() - return render_to_text('abonapp/modal_additional_telephones.html', { + return render_to_response('abonapp/modal_additional_telephones.html', { 'telephones': telephones, 'gid': gid, 'uname': uname - }, request=request) + }) @login_required @@ -922,11 +921,11 @@ def tel_add(request, gid, uname): messages.error(request, _('fix form errors')) else: frm = forms.AdditionalTelephoneForm() - return render_to_text('abonapp/modal_add_phone.html', { + return render_to_response('abonapp/modal_add_phone.html', { 'form': frm, 'gid': gid, 'uname': uname - }, request=request) + }) @login_required @@ -958,10 +957,10 @@ def phonebook(request, gid): for row in telephones: writer.writerow(row) return response - return render_to_text('abonapp/modal_phonebook.html', { + return render_to_response('abonapp/modal_phonebook.html', { 'tels': telephones, 'gid': gid - }, request=request) + }) @login_required @@ -993,10 +992,10 @@ def abon_export(request, gid): return redirect('abonapp:group_list') else: frm = forms.ExportUsersForm() - return render_to_text('abonapp/modal_export.html', { + return render_to_response('abonapp/modal_export.html', { 'gid': gid, 'form': frm - }, request=request) + }) @login_required @@ -1041,11 +1040,11 @@ def add_edit_periodic_pay(request, gid, uname, periodic_pay_id=0): return redirect('abonapp:abon_services', gid, uname) else: frm = forms.PeriodicPayForIdForm(instance=periodic_pay_instance) - return render_to_text('abonapp/modal_periodic_pay.html', { + return render_to_response('abonapp/modal_periodic_pay.html', { 'form': frm, 'gid': gid, 'uname': uname - }, request=request) + }) @login_required diff --git a/accounts_app/urls.py b/accounts_app/urls.py index c0ac314..cb2882f 100644 --- a/accounts_app/urls.py +++ b/accounts_app/urls.py @@ -1,41 +1,39 @@ -from django.conf.urls import url +from django.urls import path, re_path from . import views app_name = 'account_app' urlpatterns = [ + path('', views.AccountsListView.as_view(), name='accounts_list'), + path('login/', views.to_signin, name='login'), + path('logout/', views.SignOut.as_view(), name='logout'), - url(r'^login/', views.to_signin, name='login'), - url(r'^logout/', views.SignOut.as_view(), name='logout'), + path('me/', views.profile_show, name='profile'), - url(r'^me$', views.profile_show, name='profile'), + path('add/', views.create_profile, name='create_profile'), - url(r'^$', views.AccountsListView.as_view(), name='accounts_list'), + path('settings/', views.ch_info, name='setup_info'), + path('settings/change_ava/', views.AvatarUpdateView.as_view(), name='setup_avatar'), - url(r'^add$', views.create_profile, name='create_profile'), + path('/', views.profile_show, name='other_profile'), + path('/perms/', views.perms, name='setup_perms'), - url(r'^settings$', views.ch_info, name='setup_info'), - url(r'^settings/change_ava$', views.AvatarUpdateView.as_view(), name='setup_avatar'), - - url(r'^(?P\d+)$', views.profile_show, name='other_profile'), - url(r'^(?P\d+)/perms$', views.perms, name='setup_perms'), - - url(r'^(?P\d+)/perms/(?P[a-z_]+\.[a-zA-Z_]+)$', + re_path('^(?P\d+)/perms/(?P[a-z_]+\.[a-zA-Z_]+)/', views.PermissionClassListView.as_view(), name='perms_klasses'), - url(r'^(?P\d+)/perms/(?P[a-z_]+\.[a-zA-Z_]+)/(?P\d+)$', + re_path('^(?P\d+)/perms/(?P[a-z_]+\.[a-zA-Z_]+)/(?P\d+)/', views.perms_edit, name='perms_edit'), - url(r'^(?P\d+)/del$', views.delete_profile, name='delete_profile'), + path('/del/', views.delete_profile, name='delete_profile'), - url(r'^(?P\d+)/user_group_access$', + path('/user_group_access/', views.set_abon_groups_permission, name='set_abon_groups_permission'), - url(r'^(?P\d+)/manage_responsibility_groups/$', + path('/manage_responsibility_groups/', views.ManageResponsibilityGroups.as_view(), name='manage_responsibility_groups') ] diff --git a/chatbot/email_bot.py b/chatbot/email_bot.py index 6c83e21..8b0bee1 100644 --- a/chatbot/email_bot.py +++ b/chatbot/email_bot.py @@ -1,3 +1,4 @@ +from _socket import gaierror from smtplib import SMTPException from django.core.mail import send_mail from django.conf import settings @@ -17,3 +18,5 @@ def send_notify(msg_text, account, tag='none'): ) except SMTPException as e: raise ChatException('SMTPException: %s' % e) + except gaierror as e: + raise ChatException('Socket error: %s' % e) diff --git a/chatbot/models.py b/chatbot/models.py index 263117f..200d72a 100644 --- a/chatbot/models.py +++ b/chatbot/models.py @@ -10,7 +10,7 @@ class ChatException(Exception): class TelegramBot(models.Model): - user = models.ForeignKey(AUTH_USER_MODEL, models.CASCADE, verbose_name=_('Employee')) + user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_('Employee')) chat_id = models.PositiveIntegerField(_('Telegram chat id'), default=0) def __str__(self): @@ -24,7 +24,7 @@ class TelegramBot(models.Model): class MessageHistory(models.Model): - user = models.ForeignKey(AUTH_USER_MODEL, models.CASCADE) + user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE) message = models.CharField(max_length=255) date_sent = models.DateTimeField(auto_now_add=True) @@ -51,7 +51,7 @@ class MessageQueueManager(models.Manager): class MessageQueue(models.Model): - target_employee = models.ForeignKey(AUTH_USER_MODEL, models.CASCADE, verbose_name=_('Target employee')) + target_employee = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE, verbose_name=_('Target employee')) message = models.CharField(_('Message'), max_length=255) STATUSES = ( ('n', 'New'), diff --git a/clientsideapp/urls.py b/clientsideapp/urls.py index 3f8274a..fa6fa18 100644 --- a/clientsideapp/urls.py +++ b/clientsideapp/urls.py @@ -1,14 +1,14 @@ -from django.conf.urls import url +from django.urls import path from . import views app_name = 'clientsideapp' urlpatterns = [ - url(r'^$', views.home, name='home'), - url(r'^pays$', views.pays, name='pays'), - url(r'^services$', views.services, name='services'), - url(r'^services/(?P\d+)/buy$', views.buy_service, name='buy_service'), - url(r'^debts$', views.debts_list, name='debts'), - url(r'^debts/(?P\d+)$', views.debt_buy, name='debt_buy'), - url(r'^tasks$', views.task_history, name='task_history') + path('', views.home, name='home'), + path('pays/', views.pays, name='pays'), + path('services/', views.services, name='services'), + path('services//buy/', views.buy_service, name='buy_service'), + path('debts/', views.debts_list, name='debts'), + path('debts//', views.debt_buy, name='debt_buy'), + path('tasks/', views.task_history, name='task_history') ] diff --git a/clientsideapp/views.py b/clientsideapp/views.py index a8cac8a..0484edb 100644 --- a/clientsideapp/views.py +++ b/clientsideapp/views.py @@ -1,6 +1,5 @@ from django.contrib.auth.decorators import login_required -from django.contrib.gis.shortcuts import render_to_text -from django.shortcuts import render, get_object_or_404, redirect +from django.shortcuts import render, get_object_or_404, redirect, render_to_response from django.contrib import messages from django.db import transaction from django.utils.translation import gettext_lazy as _, gettext @@ -56,10 +55,10 @@ def buy_service(request, srv_id): abon.nas_sync_self() messages.success(request, _("The service '%s' wan successfully activated") % service.title) else: - return render_to_text('clientsideapp/modal_service_buy.html', { + return render_to_response('clientsideapp/modal_service_buy.html', { 'service': service, 'current_service': current_service.tariff if current_service is not None else None - }, request=request) + }) except LogicError as e: messages.error(request, e) except NasFailedResult as e: diff --git a/devapp/models.py b/devapp/models.py index cd72167..3721e24 100644 --- a/devapp/models.py +++ b/devapp/models.py @@ -109,7 +109,7 @@ class Device(models.Model): class Port(models.Model): - device = models.ForeignKey(Device, models.CASCADE, verbose_name=_('Device')) + device = models.ForeignKey(Device, on_delete=models.CASCADE, verbose_name=_('Device')) num = models.PositiveSmallIntegerField(_('Number'), default=0) descr = models.CharField(_('Description'), max_length=60, null=True, blank=True) diff --git a/devapp/urls.py b/devapp/urls.py index 0125b16..374688d 100644 --- a/devapp/urls.py +++ b/devapp/urls.py @@ -1,39 +1,39 @@ -from django.conf.urls import url +from django.urls import path, re_path from . import views app_name = 'devapp' urlpatterns = [ - url(r'^$', views.GroupsListView.as_view(), name='group_list'), - url(r'^devices_without_groups$', views.DevicesWithoutGroupsListView.as_view(), name='devices_null_group'), - url(r'^fix_onu/$', views.fix_onu, name='fix_onu'), - url(r'^(?P\d+)$', views.DevicesListView.as_view(), name='devs'), - url(r'^(?P\d+)/add$', views.DeviceCreateView.as_view(), name='add'), - url(r'^(\d+)/(?P\d+)$', views.devview, name='view'), - url(r'^(\d+)/(?P\d+)/del$', views.DeviceDeleteView.as_view(), name='del'), - url(r'^(?P\d+)/(?P\d+)/add$', views.add_single_port, name='add_port'), - url(r'^(?P\d+)/(?P\d+)/edit$', views.DeviceUpdate.as_view(), name='edit'), - url(r'^(?P\d+)/(?P\d+)/edit_extra$', views.DeviceUpdateExtra.as_view(), name='extra_data_edit'), - url(r'^(\d+)/(?P\d+)/ports$', views.manage_ports, name='manage_ports'), - url(r'^(?P\d+)/(?P\d+)/ports/(?P\d+)/fix_port_conflict$', views.fix_port_conflict, + path('', views.GroupsListView.as_view(), name='group_list'), + path('devices_without_groups/', views.DevicesWithoutGroupsListView.as_view(), name='devices_null_group'), + path('fix_onu/', views.fix_onu, name='fix_onu'), + path('/', views.DevicesListView.as_view(), name='devs'), + path('/add/', views.DeviceCreateView.as_view(), name='add'), + path('//', views.devview, name='view'), + path('//del/', views.DeviceDeleteView.as_view(), name='del'), + path('//add/', views.add_single_port, name='add_port'), + path('//edit/', views.DeviceUpdate.as_view(), name='edit'), + path('//edit_extra/', views.DeviceUpdateExtra.as_view(), name='extra_data_edit'), + path('//ports/', views.manage_ports, name='manage_ports'), + path('//ports//fix_port_conflict/', views.fix_port_conflict, name='fix_port_conflict'), - url(r'^(?P\d+)/(?P\d+)/ports/(?P\d+)/show_subscriber_on_port$', + path('//ports//show_subscriber_on_port/', views.ShowSubscriberOnPort.as_view(), name='show_subscriber_on_port'), - url(r'^(\d+)/(?P\d+)/ports_add/$', views.add_ports, name='add_ports'), - url(r'^(\d+)/(?P\d+)/register_device/$', views.register_device, name='dev_register'), - url(r'^(\d+)/(?P\d+)/(?P\d+)_(?P[0-1]{1})$', views.toggle_port, name='port_toggle'), - url(r'^(?P\d+)/(?P\d+)/(?P\d+)/del$', views.delete_single_port, name='del_port'), - url(r'^(?P\d+)/(?P\d+)/(?P\d+)/edit$', views.edit_single_port, name='edit_port'), - url(r'^fix_device_group/(?P\d+)$', views.fix_device_group, name='fix_device_group'), - url(r'^search_dev$', views.search_dev), + path('//ports_add/', views.add_ports, name='add_ports'), + path('//register_device/', views.register_device, name='dev_register'), + re_path('^(\d+)/(?P\d+)/(?P\d+)_(?P[0-1]{1})$', views.toggle_port, name='port_toggle'), + path('///del/', views.delete_single_port, name='del_port'), + path('///edit/', views.edit_single_port, name='edit_port'), + path('fix_device_group//', views.fix_device_group, name='fix_device_group'), + path('search_dev/', views.search_dev), # ZTE ports under fibers - url(r'^(?P\d+)/(?P\d+)/(?P\d+)$', views.zte_port_view_uncfg, name='zte_port_view_uncfg'), + path('///', views.zte_port_view_uncfg, name='zte_port_view_uncfg'), # Monitoring api - url(r'^on_device_event/$', views.OnDeviceMonitoringEvent.as_view()), + path('on_device_event/', views.OnDeviceMonitoringEvent.as_view()), # Nagios mon generate - url(r'^nagios/hosts/$', views.nagios_objects_conf, name='nagios_objects_conf'), - url(r'^api/getall/$', views.DevicesGetListView.as_view(), name='nagios_get_all_hosts') + path('nagios/hosts/', views.nagios_objects_conf, name='nagios_objects_conf'), + path('api/getall/', views.DevicesGetListView.as_view(), name='nagios_get_all_hosts') ] diff --git a/devapp/views.py b/devapp/views.py index 353b4fc..8ca18b6 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -1,12 +1,11 @@ import re from ipaddress import ip_address from django.contrib.auth.decorators import login_required -from django.contrib.gis.shortcuts import render_to_text from django.core.exceptions import PermissionDenied from django.db import IntegrityError from django.db.models import Q, Count from django.http import HttpResponse, Http404 -from django.shortcuts import render, redirect, get_object_or_404, resolve_url +from django.shortcuts import render, redirect, get_object_or_404, resolve_url, render_to_response from django.contrib import messages from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _, gettext @@ -358,11 +357,11 @@ def delete_single_port(request, group_id, device_id, portid): Port.objects.get(pk=portid).delete() messages.success(request, _('Port successfully removed')) else: - return render_to_text('devapp/manage_ports/modal_del_port.html', { + return render_to_response('devapp/manage_ports/modal_del_port.html', { 'grp': group_id, 'did': device_id, 'port_id': portid - }, request=request) + }) except Port.DoesNotExist: messages.error(request, _('Port does not exist')) except DeviceDBException as e: @@ -385,12 +384,12 @@ def edit_single_port(request, group_id, device_id, port_id): return redirect('devapp:manage_ports', group_id, device_id) frm = PortForm(instance=port) - return render_to_text('devapp/manage_ports/modal_add_edit_port.html', { + return render_to_response('devapp/manage_ports/modal_add_edit_port.html', { 'port_id': port_id, 'did': device_id, 'gid': group_id, 'form': frm - }, request=request) + }) except Port.DoesNotExist: messages.error(request, _('Port does not exist')) except (DeviceDBException, DuplicateEntry) as e: @@ -416,11 +415,11 @@ def add_single_port(request, group_id, device_id): 'num': request.GET.get('n'), 'descr': request.GET.get('t') }) - return render_to_text('devapp/manage_ports/modal_add_edit_port.html', { + return render_to_response('devapp/manage_ports/modal_add_edit_port.html', { 'did': device_id, 'gid': group_id, 'form': frm - }, request=request) + }) except Device.DoesNotExist: messages.error(request, _('Device does not exist')) except (DeviceDBException, DuplicateEntry) as e: diff --git a/dialing_app/urls.py b/dialing_app/urls.py index e99d226..ba8efa5 100644 --- a/dialing_app/urls.py +++ b/dialing_app/urls.py @@ -1,15 +1,15 @@ -from django.conf.urls import url +from django.urls import path, re_path from . import views app_name = 'dialing_app' urlpatterns = [ - url(r'^$', views.LastCallsListView.as_view(), name='home'), - url(r'^filter$', views.DialsFilterListView.as_view(), name='vfilter'), - url(r'^to_abon(?P\+?\d+)$', views.to_abon, name='to_abon'), - url(r'^requests$', views.VoiceMailRequestsListView.as_view(), name='vmail_request'), - url(r'^reports$', views.VoiceMailReportsListView.as_view(), name='vmail_report'), - url(r'^sms/in$', views.InboxSMSListView.as_view(), name='inbox_sms'), - url(r'^sms/send$', views.send_sms, name='send_sms'), - url(r'^api/sms$', views.SmsManager.as_view()) + path('', views.LastCallsListView.as_view(), name='home'), + path('filter/', views.DialsFilterListView.as_view(), name='vfilter'), + re_path('^to_abon(?P\+?\d+)/$', views.to_abon, name='to_abon'), + path('requests/', views.VoiceMailRequestsListView.as_view(), name='vmail_request'), + path('reports/', views.VoiceMailReportsListView.as_view(), name='vmail_report'), + path('sms/in/', views.InboxSMSListView.as_view(), name='inbox_sms'), + path('sms/send/', views.send_sms, name='send_sms'), + path('api/sms/', views.SmsManager.as_view()) ] diff --git a/dialing_app/views.py b/dialing_app/views.py index af7d404..68a46b0 100644 --- a/dialing_app/views.py +++ b/dialing_app/views.py @@ -2,7 +2,7 @@ from datetime import datetime from subprocess import run from django.contrib.auth.decorators import login_required from django.contrib import messages -from django.contrib.gis.shortcuts import render_to_text + from django.db import ProgrammingError from django.shortcuts import redirect from django.utils.translation import gettext_lazy as _ @@ -151,10 +151,10 @@ def send_sms(request): messages.error(request, _('fix form errors')) else: frm = SMSOutForm(initial={'dst': initial_dst}) - return render_to_text('modal_send_sms.html', { + return render_to_response('modal_send_sms.html', { 'form': frm, 'path': path - }, request=request) + }) class SmsManager(SecureApiView): diff --git a/djing/fields.py b/djing/fields.py index 41b238f..b8effee 100644 --- a/djing/fields.py +++ b/djing/fields.py @@ -63,7 +63,7 @@ class MACAddressField(models.Field): return 'BigIntegerField' return 'CharField' - def from_db_value(self, value, expression, connection, context): + def from_db_value(self, value, expression, connection): return self.to_python(value) def to_python(self, value): @@ -131,7 +131,7 @@ class MyGenericIPAddressField(models.GenericIPAddressField): return 'PositiveIntegerField' @staticmethod - def from_db_value(value, expression, connection, context): + def from_db_value(value, expression, connection): if value: return str(ip_address(value)) diff --git a/djing/global_base_views.py b/djing/global_base_views.py index d3b71c2..67f86f2 100644 --- a/djing/global_base_views.py +++ b/djing/global_base_views.py @@ -35,7 +35,7 @@ class HashAuthView(View): class AuthenticatedOrHashAuthView(HashAuthView): def dispatch(self, request, *args, **kwargs): - if request.user.is_authenticated(): + if request.user.is_authenticated: if request.user.is_admin: return View.dispatch(self, request, *args, **kwargs) else: diff --git a/djing/settings.py b/djing/settings.py index b56e4c3..c7d3c61 100644 --- a/djing/settings.py +++ b/djing/settings.py @@ -70,7 +70,7 @@ MIDDLEWARE = [ 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] diff --git a/djing/templatetags/dpagination.py b/djing/templatetags/dpagination.py index 2490c94..33aabd9 100644 --- a/djing/templatetags/dpagination.py +++ b/djing/templatetags/dpagination.py @@ -6,7 +6,7 @@ register = template.Library() @register.simple_tag def url_page_replace(request, field, value): dict_ = request.GET.copy() - dict_[field] = value + dict_[field] = str(value) return dict_.urlencode() diff --git a/djing/urls.py b/djing/urls.py index 5d96007..2c18a6e 100644 --- a/djing/urls.py +++ b/djing/urls.py @@ -1,27 +1,27 @@ -from django.conf.urls import url, include +from django.urls import path, include from django.conf import settings from .views import home urlpatterns = [ - url(r'^$', home), - url(r'^accounts/', include('accounts_app.urls', namespace='acc_app')), - url(r'^abons/', include('abonapp.urls', namespace='abonapp')), - url(r'^tarifs/', include('tariff_app.urls', namespace='tarifs')), - url(r'^search/', include('searchapp.urls', namespace='searchapp')), - url(r'^dev/', include('devapp.urls', namespace='devapp')), - url(r'^map/', include('mapapp.urls', namespace='mapapp')), - url(r'^statistic/', include('statistics.urls', namespace='statistics')), - url(r'^tasks/', include('taskapp.urls', namespace='taskapp')), - url(r'^client/', include('clientsideapp.urls', namespace='client_side')), - url(r'^msg/', include('msg_app.urls', namespace='msg_app')), - url(r'^dialing/', include('dialing_app.urls', namespace='dialapp')), - url(r'^groups/', include('group_app.urls', namespace='group_app')), - url(r'^ip_pool/', include('ip_pool.urls', namespace='ip_pool')), - url(r'^nas/', include('nas_app.urls', namespace='nas_app')) + path('', home), + path('accounts/', include('accounts_app.urls', namespace='acc_app')), + path('abons/', include('abonapp.urls', namespace='abonapp')), + path('tarifs/', include('tariff_app.urls', namespace='tarifs')), + path('search/', include('searchapp.urls', namespace='searchapp')), + path('dev/', include('devapp.urls', namespace='devapp')), + path('map/', include('mapapp.urls', namespace='mapapp')), + path('statistic/', include('statistics.urls', namespace='statistics')), + path('tasks/', include('taskapp.urls', namespace='taskapp')), + path('client/', include('clientsideapp.urls', namespace='client_side')), + path('msg/', include('msg_app.urls', namespace='msg_app')), + path('dialing/', include('dialing_app.urls', namespace='dialapp')), + path('groups/', include('group_app.urls', namespace='group_app')), + path('ip_pool/', include('ip_pool.urls', namespace='ip_pool')), + path('nas/', include('nas_app.urls', namespace='nas_app')) # Switch language - #url(r'^i18n/', include('django.conf.urls.i18n')), + #path(r'i18n/', include('django.conf.urls.i18n')), ] @@ -32,4 +32,4 @@ if settings.DEBUG: urlpatterns.extend(static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)) urlpatterns.extend(staticfiles_urlpatterns()) - urlpatterns.append(url(r'^admin/', admin.site.urls)) + urlpatterns.append(path('admin/', admin.site.urls)) diff --git a/group_app/urls.py b/group_app/urls.py index a14e8a8..d07d098 100644 --- a/group_app/urls.py +++ b/group_app/urls.py @@ -1,11 +1,11 @@ -from django.conf.urls import url +from django.urls import path from . import views app_name = 'group_app' urlpatterns = [ - url(r'^$', views.GroupListView.as_view(), name='group_list'), - url(r'^add/$', views.AddGroupView.as_view(), name='add'), - url(r'^(?P\d{1,6})/edit/$', views.EditGroupView.as_view(), name='edit'), - url(r'^(?P\d{1,6})/del/$', views.DeleteGroupView.as_view(), name='del') + path('', views.GroupListView.as_view(), name='group_list'), + path('add/', views.AddGroupView.as_view(), name='add'), + path('/edit/', views.EditGroupView.as_view(), name='edit'), + path('/del/', views.DeleteGroupView.as_view(), name='del') ] diff --git a/ip_pool/templatetags/ip_pool_tags.py b/ip_pool/templatetags/ip_pool_tags.py index 909e812..da13156 100644 --- a/ip_pool/templatetags/ip_pool_tags.py +++ b/ip_pool/templatetags/ip_pool_tags.py @@ -9,6 +9,6 @@ register = template.Library() @register.simple_tag def get_device_kinds(): return (( - resolve_url('ip_pool:networks_%s' % kind_code), + resolve_url('ip_pool:networks_%s/' % kind_code), kind_descr )for kind_code, kind_descr in NetworkModel.NETWORK_KINDS) diff --git a/ip_pool/urls.py b/ip_pool/urls.py index 2c0303a..99233c2 100644 --- a/ip_pool/urls.py +++ b/ip_pool/urls.py @@ -1,21 +1,22 @@ -from django.conf.urls import url +from django.urls import path from ip_pool import views from ip_pool import models app_name = 'ip_pool' urlpatterns = [ - url('^$', views.NetworksListView.as_view(), name='networks'), - url('^network_add/$', views.NetworkCreateView.as_view(), name='net_add'), - url('^(?P\d{1,6})/$', views.IpLeasesListView.as_view(), name='ip_leases_list'), - url('^(?P\d{1,6})/edit/$', views.NetworkUpdateView.as_view(), name='net_edit'), - url('^(?P\d{1,6})/del/$', views.NetworkDeleteView.as_view(), name='net_delete'), - url('^(?P\d{1,6})/group_attach/$', views.network_in_groups, name='net_groups') + path('', views.NetworksListView.as_view(), name='networks'), + path('network_add/', views.NetworkCreateView.as_view(), name='net_add'), + path('/', views.IpLeasesListView.as_view(), name='ip_leases_list'), + path('/edit/', views.NetworkUpdateView.as_view(), name='net_edit'), + path('/del/', views.NetworkDeleteView.as_view(), name='net_delete'), + path('/group_attach/', views.network_in_groups, name='net_groups') ] for dev_kind_code, _ in models.NetworkModel.NETWORK_KINDS: - urlpatterns.append(url( - '^networks_%s/$' % dev_kind_code, + _url_name = 'networks_%s/' % dev_kind_code + urlpatterns.append(path( + _url_name, views.NetworksListView.as_view(device_kind_code=dev_kind_code), - name='networks_%s' % dev_kind_code + name=_url_name )) diff --git a/mapapp/urls.py b/mapapp/urls.py index e3673e3..4f5a03f 100644 --- a/mapapp/urls.py +++ b/mapapp/urls.py @@ -1,22 +1,23 @@ from django.conf.urls import url +from django.urls import path from . import views app_name = 'mapapp' urlpatterns = [ - url(r'^$', views.home, name='home'), - url(r'^options$', views.OptionsListView.as_view(), name='options'), - url(r'^options/add$', views.dot_edit, name='add_dot'), - url(r'^options/(?P\d+)/edit$', views.dot_edit, name='edit_dot'), - url(r'^options/(?P\d+)/remove$', views.remove, name='remove_dot'), - url(r'^options/(?P\d+)/add_dev$', views.add_dev, name='add_dev'), - url(r'^preload_devices$', views.preload_devices, name='preload_devices'), - url(r'^get_dots$', views.get_dots, name='get_dots'), + path('', views.home, name='home'), + path('options/', views.OptionsListView.as_view(), name='options'), + path('options/add/', views.dot_edit, name='add_dot'), + path('options//edit/', views.dot_edit, name='edit_dot'), + path('options//remove/', views.remove, name='remove_dot'), + path('options//add_dev/', views.add_dev, name='add_dev'), + path('preload_devices/', views.preload_devices, name='preload_devices'), + path('get_dots/', views.get_dots, name='get_dots'), - url(r'^modal_add_dot$', views.modal_add_dot, name='modal_add_dot'), - url(r'^j_dot_tooltip$', views.dot_tooltip, name='dot_tooltip'), - url(r'^resolve_dots_by_group(?P\d+)$', views.resolve_dots_by_group, name='resolve_dots_by_group'), + path('modal_add_dot/', views.modal_add_dot, name='modal_add_dot'), + path('j_dot_tooltip/', views.dot_tooltip, name='dot_tooltip'), + path('resolve_dots_by_group//', views.resolve_dots_by_group, name='resolve_dots_by_group'), - url(r'^to_single_dev/$', views.to_single_dev, name='to_single_dev') + path('to_single_dev/', views.to_single_dev, name='to_single_dev') ] diff --git a/mapapp/views.py b/mapapp/views.py index 3989678..6ef48ff 100644 --- a/mapapp/views.py +++ b/mapapp/views.py @@ -1,9 +1,8 @@ from django.contrib import messages from django.contrib.auth.decorators import login_required -from django.contrib.gis.shortcuts import render_to_text from django.core.exceptions import PermissionDenied from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden, HttpResponseBadRequest -from django.shortcuts import render, redirect, get_object_or_404, resolve_url +from django.shortcuts import render, redirect, get_object_or_404, resolve_url, render_to_response from django.utils.translation import gettext_lazy as _, gettext from django.utils.decorators import method_decorator from django.db.models import Count @@ -138,7 +137,7 @@ def get_dots(request): @login_required def modal_add_dot(request): if not request.user.has_perm('mapapp.add_dot'): - return render_to_text('403_for_modal.html') + return render_to_response('403_for_modal.html') if request.method == 'POST': frm = DotForm(request.POST, request.FILES) if frm.is_valid(): @@ -159,10 +158,10 @@ def modal_add_dot(request): coords = request.GET.get('coords') lat, lon = coords.split(',') frm = DotForm(initial={'latitude': lat, 'longitude': lon}) - return render_to_text('maps/modal_add_dot.html', { + return render_to_response('maps/modal_add_dot.html', { 'coords': coords, 'form': frm - }, request=request) + }) @login_required @@ -176,7 +175,7 @@ def preload_devices(request): dot_devices_ids = tuple(dev.pk for dev in dot_devices.iterator()) del dot_devices - ret = render_to_text('maps/preload_devices_tmpl.html', { + ret = render_to_response('maps/preload_devices_tmpl.html', { 'all_devices': all_devices.iterator(), 'dot_devices_ids': dot_devices_ids }) @@ -186,7 +185,7 @@ def preload_devices(request): @login_required def dot_tooltip(request): if not request.user.is_superuser: - return render_to_text('403_for_modal.html') + return render_to_response('403_for_modal.html') d = request.GET.get('d') devs, dot = None, None try: @@ -194,7 +193,7 @@ def dot_tooltip(request): devs = dot.devices.all() except Dot.DoesNotExist: pass - return render_to_text('maps/map_tooltip.html', { + return render_to_response('maps/map_tooltip.html', { 'devs': devs.iterator(), 'dot': dot }) diff --git a/msg_app/context_processors.py b/msg_app/context_processors.py index ef283e1..46af962 100644 --- a/msg_app/context_processors.py +++ b/msg_app/context_processors.py @@ -2,7 +2,7 @@ from .models import Conversation def get_new_messages_count(request): - if request.user.is_anonymous(): + if request.user.is_anonymous: count = 0 else: count = Conversation.objects.get_new_messages_count(request.user) diff --git a/msg_app/models.py b/msg_app/models.py index 887e79d..889609b 100644 --- a/msg_app/models.py +++ b/msg_app/models.py @@ -10,8 +10,8 @@ class MessageError(Exception): class MessageStatus(models.Model): - msg = models.ForeignKey('Message', models.CASCADE, related_name='msg_statuses') - user = models.ForeignKey(UserProfile, models.CASCADE, related_name='usr_msg_status') + msg = models.ForeignKey('Message', on_delete=models.CASCADE, related_name='msg_statuses') + user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='usr_msg_status') MESSAGE_STATES = ( ('new', _('New')), ('old', _('Seen')), @@ -34,8 +34,8 @@ class MessageStatus(models.Model): class Message(models.Model): text = models.TextField(_("Body")) sent_at = models.DateTimeField(_("sent at"), auto_now_add=True) - author = models.ForeignKey(UserProfile, models.CASCADE, related_name='messages') - conversation = models.ForeignKey('Conversation', models.CASCADE, verbose_name=_('Conversation')) + author = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='messages') + conversation = models.ForeignKey('Conversation', on_delete=models.CASCADE, verbose_name=_('Conversation')) attachment = models.FileField(upload_to='messages_attachments/%Y_%m_%d', blank=True, null=True) account_status = models.ManyToManyField(UserProfile, through=MessageStatus, through_fields=('msg', 'user')) @@ -73,8 +73,8 @@ class Message(models.Model): class ConversationMembership(models.Model): - account = models.ForeignKey(UserProfile, models.CASCADE, related_name='memberships') - conversation = models.ForeignKey('Conversation', models.CASCADE) + account = models.ForeignKey(UserProfile, on_delete=models.CASCADE, related_name='memberships') + conversation = models.ForeignKey('Conversation', on_delete=models.CASCADE) PARTICIPANT_STATUS = ( ('adm', _('Admin')), ('gst', _('Guest')), @@ -82,7 +82,7 @@ class ConversationMembership(models.Model): ('inv', _('Inviter')) ) status = models.CharField(max_length=3, choices=PARTICIPANT_STATUS, default='gst') - who_invite_that_user = models.ForeignKey(UserProfile, models.CASCADE, null=True, blank=True, + who_invite_that_user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, null=True, blank=True, related_name='self_conversations') def __str__(self): @@ -142,7 +142,7 @@ class Conversation(models.Model): participants = models.ManyToManyField(UserProfile, related_name='conversations', through='ConversationMembership', through_fields=('conversation', 'account')) - author = models.ForeignKey(UserProfile, models.CASCADE) + author = models.ForeignKey(UserProfile, on_delete=models.CASCADE) date_create = models.DateTimeField(auto_now_add=True) def __str__(self): diff --git a/msg_app/urls.py b/msg_app/urls.py index 883ebb6..bfcd91f 100644 --- a/msg_app/urls.py +++ b/msg_app/urls.py @@ -1,12 +1,12 @@ -from django.conf.urls import url +from django.urls import path from . import views app_name = 'msg_app' urlpatterns = [ - url(r'^$', views.ConversationsListView.as_view(), name='home'), - url(r'^new$', views.new_conversation, name='new_conversation'), - url(r'^(?P\d+)/$', views.to_conversation, name='to_conversation'), - url(r'^(?P\d+)/(?P\d+)/del$', views.remove_msg, name='remove_msg'), - url(r'^check_news$', views.check_news, name='check_news') + path('', views.ConversationsListView.as_view(), name='home'), + path('new/', views.new_conversation, name='new_conversation'), + path('/', views.to_conversation, name='to_conversation'), + path('//del/', views.remove_msg, name='remove_msg'), + path('check_news/', views.check_news, name='check_news') ] diff --git a/msg_app/views.py b/msg_app/views.py index 406e54b..832a6b5 100644 --- a/msg_app/views.py +++ b/msg_app/views.py @@ -1,12 +1,12 @@ from json import dumps from django.contrib.auth.decorators import login_required -from django.contrib.gis.shortcuts import render_to_text + from django.core.exceptions import PermissionDenied from django.http import HttpResponse from django.utils.decorators import method_decorator from django.utils.translation import gettext_lazy as _ from django.contrib import messages -from django.shortcuts import render, redirect, get_object_or_404 +from django.shortcuts import render, redirect, get_object_or_404, render_to_response from django.views.generic import ListView from chatbot.models import MessageQueue @@ -37,9 +37,9 @@ def new_conversation(request): else: messages.error(request, _('fix form errors')) else: - return render_to_text('msg_app/modal_new_conversation.html', { + return render_to_response('msg_app/modal_new_conversation.html', { 'form': frm - }, request=request) + }) except MessageError as e: messages.error(request, e) return redirect('msg_app:home') diff --git a/nas_app/urls.py b/nas_app/urls.py index 040970f..67db515 100644 --- a/nas_app/urls.py +++ b/nas_app/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import path from nas_app import views @@ -6,8 +6,8 @@ app_name = 'nas_app' urlpatterns = [ - url(r'^$', view=views.NasListView.as_view(), name='home'), - url(r'^add$', view=views.NasCreateView.as_view(), name='add'), - url(r'^(?P\d+)/del$', views.NasDeleteView.as_view(), name='del'), - url(r'^(?P\d+)/edit$', views.NasUpdateView.as_view(), name='edit'), + path('', view=views.NasListView.as_view(), name='home'), + path('add/', view=views.NasCreateView.as_view(), name='add'), + path('/del/', views.NasDeleteView.as_view(), name='del'), + path('/edit/', views.NasUpdateView.as_view(), name='edit'), ] diff --git a/requirements.txt b/requirements.txt index 1dbc294..03ea6e3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ urllib3 -Django==1.11 +Django>=2 Pillow telepot diff --git a/searchapp/urls.py b/searchapp/urls.py index 9183924..83fe08b 100644 --- a/searchapp/urls.py +++ b/searchapp/urls.py @@ -1,10 +1,10 @@ -from django.conf.urls import url +from django.urls import path from . import views app_name = 'searchapp' urlpatterns = [ - url(r'^$', views.home, name='home'), + path(r'', views.home, name='home'), ] diff --git a/statistics/fields.py b/statistics/fields.py index 82fcadf..62f61bf 100644 --- a/statistics/fields.py +++ b/statistics/fields.py @@ -49,5 +49,5 @@ class UnixDateTimeField(models.DateTimeField): val = self._get_val_from_obj(obj) return self.to_python(val).strftime(self.DEFAULT_DATETIME_FMT) - def from_db_value(self, val, expression, connection, context): + def from_db_value(self, val, expression, connection): return self.to_python(val) diff --git a/statistics/urls.py b/statistics/urls.py index 7ae783a..ab0f9d3 100644 --- a/statistics/urls.py +++ b/statistics/urls.py @@ -1,9 +1,9 @@ -from django.conf.urls import url +from django.urls import path from . import views app_name = 'statistics' urlpatterns = [ - url(r'^$', views.home, name='home'), + path('', views.home, name='home'), ] diff --git a/tariff_app/urls.py b/tariff_app/urls.py index 727996a..470c16a 100644 --- a/tariff_app/urls.py +++ b/tariff_app/urls.py @@ -1,16 +1,16 @@ -from django.conf.urls import url +from django.urls import path from . import views app_name = 'tariff_app' urlpatterns = [ - url(r'^$', views.TariffsListView.as_view(), name='home'), - url(r'^(?P\d+)$', views.edit_tarif, name='edit'), - url(r'^add$', views.edit_tarif, name='add'), - url(r'^del(?P\d+)$', views.TariffDeleteView.as_view(), name='del'), + path('', views.TariffsListView.as_view(), name='home'), + path('/', views.edit_tarif, name='edit'), + path('add/', views.edit_tarif, name='add'), + path('del//', views.TariffDeleteView.as_view(), name='del'), - url(r'^periodic_pays$', views.PeriodicPaysListView.as_view(), name='periodic_pays'), - url(r'^periodic_pays/add$', views.periodic_pay, name='periodic_pay_add'), - url(r'^periodic_pays/(?P\d+)$', views.periodic_pay, name='periodic_pay_edit') + path('periodic_pays/', views.PeriodicPaysListView.as_view(), name='periodic_pays'), + path('periodic_pays/add/', views.periodic_pay, name='periodic_pay_add'), + path('periodic_pays//', views.periodic_pay, name='periodic_pay_edit') ] diff --git a/taskapp/models.py b/taskapp/models.py index 89d8e2a..0764bcf 100644 --- a/taskapp/models.py +++ b/taskapp/models.py @@ -39,7 +39,7 @@ TASK_TYPES = ( class ChangeLog(models.Model): - task = models.ForeignKey('Task', models.CASCADE) + task = models.ForeignKey('Task', on_delete=models.CASCADE) ACT_CHOICES = ( ('e', _('Change task')), ('c', _('Create task')), @@ -49,7 +49,7 @@ class ChangeLog(models.Model): ) act_type = models.CharField(max_length=1, choices=ACT_CHOICES) when = models.DateTimeField(auto_now_add=True) - who = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, related_name='+') + who = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='+') def __str__(self): return self.get_act_type_display() @@ -71,7 +71,7 @@ class Task(models.Model): state = models.CharField(_('Condition'), max_length=1, choices=TASK_STATES, default=TASK_STATES[0][0]) attachment = models.ImageField(_('Attached image'), upload_to='task_attachments/%Y.%m.%d', blank=True, null=True) mode = models.CharField(_('The nature of the damage'), max_length=2, choices=TASK_TYPES, default=TASK_TYPES[0][0]) - abon = models.ForeignKey(Abon, models.CASCADE, null=True, blank=True, verbose_name=_('Subscriber')) + abon = models.ForeignKey(Abon, on_delete=models.CASCADE, null=True, blank=True, verbose_name=_('Subscriber')) class Meta: db_table = 'task' @@ -119,8 +119,8 @@ class Task(models.Model): class ExtraComment(models.Model): text = models.TextField(_('Text of comment')) - task = models.ForeignKey(Task, verbose_name=_('Owner task')) - author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('Author')) + task = models.ForeignKey(Task, verbose_name=_('Owner task'), on_delete=models.CASCADE) + author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=_('Author'), on_delete=models.CASCADE) date_create = models.DateTimeField(_('Time of create'), auto_now_add=True) def __str__(self): diff --git a/taskapp/urls.py b/taskapp/urls.py index 4b4a289..ce5f7e6 100644 --- a/taskapp/urls.py +++ b/taskapp/urls.py @@ -1,25 +1,25 @@ -from django.conf.urls import url +from django.urls import path from . import views app_name = 'taskapp' urlpatterns = [ - url(r'^$', views.NewTasksView.as_view(), name='home'), - url(r'^(?P\d+)$', views.TaskUpdateView.as_view(), name='edit'), - url(r'^(?P\d+)/delete$', views.task_delete, name='delete'), - url(r'^(?P\d+)/fin$', views.task_finish, name='finish'), - url(r'^(?P\d+)/fail$', views.task_failed, name='fail'), - url(r'^(?P\d+)/remind', views.remind, name='remind'), - url(r'^(?P\d+)/comment/add$', views.NewCommentView.as_view(), name='comment_add'), - url(r'^(?P\d+)/comment/(?P\d{1,8})/remove$', views.DeleteCommentView.as_view(), + path('', views.NewTasksView.as_view(), name='home'), + path('/', views.TaskUpdateView.as_view(), name='edit'), + path('/delete/', views.task_delete, name='delete'), + path('/fin/', views.task_finish, name='finish'), + path('/fail/', views.task_failed, name='fail'), + path('/remind/', views.remind, name='remind'), + path('/comment/add/', views.NewCommentView.as_view(), name='comment_add'), + path('/comment//remove/', views.DeleteCommentView.as_view(), name='comment_del'), - url(r'^add$', views.TaskUpdateView.as_view(), name='add'), - url(r'^failed$', views.FailedTasksView.as_view(), name='failed_tasks'), - url(r'^finished$', views.FinishedTaskListView.as_view(), name='finished_tasks'), - url(r'^own$', views.OwnTaskListView.as_view(), name='own_tasks'), - url(r'^my$', views.MyTaskListView.as_view(), name='my_tasks'), - url(r'^all$', views.AllTasksListView.as_view(), name='all_tasks'), - url(r'^empty$', views.EmptyTasksListView.as_view(), name='empty_tasks'), - url(r'^check_news$', views.check_news, name='check_news') + path('add/', views.TaskUpdateView.as_view(), name='add'), + path('failed/', views.FailedTasksView.as_view(), name='failed_tasks'), + path('finished/', views.FinishedTaskListView.as_view(), name='finished_tasks'), + path('own/', views.OwnTaskListView.as_view(), name='own_tasks'), + path('my/', views.MyTaskListView.as_view(), name='my_tasks'), + path('all/', views.AllTasksListView.as_view(), name='all_tasks'), + path('empty/', views.EmptyTasksListView.as_view(), name='empty_tasks'), + path('check_news/', views.check_news, name='check_news') ]