diff --git a/abonapp/admin.py b/abonapp/admin.py index 70b55fc..2a8fe7d 100644 --- a/abonapp/admin.py +++ b/abonapp/admin.py @@ -2,7 +2,6 @@ from django.contrib import admin from . import models - admin.site.register(models.Abon) admin.site.register(models.InvoiceForPayment) admin.site.register(models.AbonLog) diff --git a/abonapp/forms.py b/abonapp/forms.py index 98e35db..4c1bdbe 100644 --- a/abonapp/forms.py +++ b/abonapp/forms.py @@ -8,7 +8,6 @@ from string import digits, ascii_lowercase from . import models from django.conf import settings - TELEPHONE_REGEXP = getattr(settings, 'TELEPHONE_REGEXP', r'^\+[7,8,9,3]\d{10,11}$') @@ -54,8 +53,8 @@ class AbonForm(forms.ModelForm): })) password = forms.CharField(max_length=64, initial=generate_random_password, widget=forms.TextInput(attrs={ - 'class': 'form-control', 'type': 'password', 'autocomplete': 'new-password' - })) + 'class': 'form-control', 'type': 'password', 'autocomplete': 'new-password' + })) class Meta: model = models.Abon diff --git a/abonapp/migrations/0001_initial.py b/abonapp/migrations/0001_initial.py index 50042d8..2877a67 100644 --- a/abonapp/migrations/0001_initial.py +++ b/abonapp/migrations/0001_initial.py @@ -12,7 +12,6 @@ import re class Migration(migrations.Migration): - initial = True dependencies = [ @@ -27,20 +26,26 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Abon', fields=[ - ('baseaccount_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='accounts_app.BaseAccount')), + ('baseaccount_ptr', + models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, + primary_key=True, serialize=False, to='accounts_app.BaseAccount')), ('ballance', models.FloatField(default=0.0)), ('ip_address', mydefs.MyGenericIPAddressField(blank=True, max_length=8, null=True, protocol='ipv4')), ('description', models.TextField(blank=True, null=True, verbose_name='Comment')), ('house', models.CharField(blank=True, max_length=12, null=True, verbose_name='House')), ('is_dynamic_ip', models.BooleanField(default=False)), - ('markers', bitfield.models.BitField((('icon_donkey', 'Donkey'), ('icon_fire', 'Fire'), ('icon_ok', 'Ok'), ('icon_king', 'King'), ('icon_tv', 'TV'), ('icon_smile', 'Smile'), ('icon_dollar', 'Dollar'), ('icon_service', 'Service'), ('icon_mrk', 'Marker')), default=0)), + ('markers', bitfield.models.BitField((('icon_donkey', 'Donkey'), ('icon_fire', 'Fire'), + ('icon_ok', 'Ok'), ('icon_king', 'King'), ('icon_tv', 'TV'), + ('icon_smile', 'Smile'), ('icon_dollar', 'Dollar'), + ('icon_service', 'Service'), ('icon_mrk', 'Marker')), default=0)), ], options={ 'verbose_name': 'Abon', 'verbose_name_plural': 'Abons', 'db_table': 'abonent', 'ordering': ['fio'], - 'permissions': (('can_buy_tariff', 'Buy service perm'), ('can_view_passport', 'Can view passport'), ('can_add_ballance', 'fill account'), ('can_ping', 'Can ping')), + 'permissions': (('can_buy_tariff', 'Buy service perm'), ('can_view_passport', 'Can view passport'), + ('can_add_ballance', 'fill account'), ('can_ping', 'Can ping')), }, bases=('accounts_app.baseaccount',), ), @@ -78,7 +83,8 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('time_start', models.DateTimeField(blank=True, default=None, null=True)), ('deadline', models.DateTimeField(blank=True, default=None, null=True)), - ('tariff', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='linkto_tariff', to='tariff_app.Tariff')), + ('tariff', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='linkto_tariff', + to='tariff_app.Tariff')), ], options={ 'verbose_name': 'Abon service', @@ -92,7 +98,8 @@ class Migration(migrations.Migration): name='AdditionalTelephone', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('telephone', models.CharField(max_length=16, validators=[django.core.validators.RegexValidator('^\\+[7,8,9,3]\\d{10,11}$')], verbose_name='Telephone')), + ('telephone', models.CharField(max_length=16, validators=[ + django.core.validators.RegexValidator('^\\+[7,8,9,3]\\d{10,11}$')], verbose_name='Telephone')), ('owner_name', models.CharField(max_length=127)), ], options={ @@ -122,7 +129,8 @@ class Migration(migrations.Migration): ('pay_id', models.CharField(max_length=36, primary_key=True, serialize=False, unique=True)), ('date_add', models.DateTimeField(auto_now_add=True)), ('summ', models.FloatField(default=0.0)), - ('trade_point', models.CharField(blank=True, default=None, max_length=20, null=True, verbose_name='Trade point')), + ('trade_point', + models.CharField(blank=True, default=None, max_length=20, null=True, verbose_name='Trade point')), ('receipt_num', models.BigIntegerField(default=0, verbose_name='Receipt number')), ], options={ @@ -135,7 +143,9 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(default='no title', max_length=16)), - ('field_type', models.CharField(choices=[('int', 'Digital field'), ('str', 'Text field'), ('dbl', 'Floating field'), ('ipa', 'Ip Address')], default='str', max_length=3)), + ('field_type', models.CharField( + choices=[('int', 'Digital field'), ('str', 'Text field'), ('dbl', 'Floating field'), + ('ipa', 'Ip Address')], default='str', max_length=3)), ('data', models.CharField(blank=True, max_length=64, null=True)), ], options={ @@ -164,8 +174,12 @@ class Migration(migrations.Migration): name='PassportInfo', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('series', models.CharField(max_length=4, validators=[django.core.validators.RegexValidator(re.compile('^-?\\d+\\Z', 32), code='invalid', message='Enter a valid integer.')])), - ('number', models.CharField(max_length=6, validators=[django.core.validators.RegexValidator(re.compile('^-?\\d+\\Z', 32), code='invalid', message='Enter a valid integer.')])), + ('series', models.CharField(max_length=4, validators=[ + django.core.validators.RegexValidator(re.compile('^-?\\d+\\Z', 32), code='invalid', + message='Enter a valid integer.')])), + ('number', models.CharField(max_length=6, validators=[ + django.core.validators.RegexValidator(re.compile('^-?\\d+\\Z', 32), code='invalid', + message='Enter a valid integer.')])), ('distributor', models.CharField(max_length=64)), ('date_of_acceptance', models.DateField()), ], @@ -189,7 +203,9 @@ class Migration(migrations.Migration): migrations.CreateModel( name='AbonRawPassword', fields=[ - ('account', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, to='abonapp.Abon')), + ('account', + models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, primary_key=True, serialize=False, + to='abonapp.Abon')), ('passw_text', models.CharField(max_length=64)), ], options={ @@ -199,17 +215,20 @@ class Migration(migrations.Migration): migrations.AddField( model_name='periodicpayforid', name='account', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon', verbose_name='Account'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon', + verbose_name='Account'), ), migrations.AddField( model_name='periodicpayforid', name='periodic_pay', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tariff_app.PeriodicPay', verbose_name='Periodic pay'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='tariff_app.PeriodicPay', + verbose_name='Periodic pay'), ), migrations.AddField( model_name='passportinfo', name='abon', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.Abon'), + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + to='abonapp.Abon'), ), migrations.AddField( model_name='invoiceforpayment', @@ -219,17 +238,20 @@ class Migration(migrations.Migration): migrations.AddField( model_name='invoiceforpayment', name='author', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + related_name='+', to=settings.AUTH_USER_MODEL), ), migrations.AddField( model_name='alltimepaylog', name='abon', - field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.SET_DEFAULT, to='abonapp.Abon'), + field=models.ForeignKey(blank=True, default=None, null=True, + on_delete=django.db.models.deletion.SET_DEFAULT, to='abonapp.Abon'), ), migrations.AddField( model_name='additionaltelephone', name='abon', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='additional_telephones', to='abonapp.Abon'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='additional_telephones', + to='abonapp.Abon'), ), migrations.AddField( model_name='abonlog', @@ -239,22 +261,26 @@ class Migration(migrations.Migration): migrations.AddField( model_name='abonlog', name='author', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, + related_name='+', to=settings.AUTH_USER_MODEL), ), migrations.AddField( model_name='abon', name='current_tariff', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.AbonTariff'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + to='abonapp.AbonTariff'), ), migrations.AddField( model_name='abon', name='dev_port', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='devapp.Port'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + to='devapp.Port'), ), migrations.AddField( model_name='abon', name='device', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='devapp.Device'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + to='devapp.Device'), ), migrations.AddField( model_name='abon', @@ -264,11 +290,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='abon', name='group', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='group_app.Group', verbose_name='User group'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + to='group_app.Group', verbose_name='User group'), ), migrations.AddField( model_name='abon', name='street', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='abonapp.AbonStreet', verbose_name='Street'), + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + to='abonapp.AbonStreet', verbose_name='Street'), ), ] diff --git a/abonapp/models.py b/abonapp/models.py index b489251..59c8e1c 100644 --- a/abonapp/models.py +++ b/abonapp/models.py @@ -19,7 +19,6 @@ from djing import IP_ADDR_REGEX from tariff_app.models import Tariff, PeriodicPay from bitfield import BitField - TELEPHONE_REGEXP = getattr(settings, 'TELEPHONE_REGEXP', r'^\+[7,8,9,3]\d{10,11}$') @@ -129,7 +128,6 @@ class ExtraFieldsModel(models.Model): class AbonManager(MyUserManager): - def get_queryset(self): return super(MyUserManager, self).get_queryset().filter(is_admin=False) @@ -184,7 +182,7 @@ class Abon(BaseAccount): ('can_ping', _('Can ping')) ) # TODO: Fix when duplicates already in database - #unique_together = ('device', 'dev_port') + # unique_together = ('device', 'dev_port') verbose_name = _('Abon') verbose_name_plural = _('Abons') ordering = ['fio'] @@ -273,7 +271,8 @@ class Abon(BaseAccount): def save(self, *args, **kwargs): # check if ip address already busy - if self.ip_address is not None and Abon.objects.filter(ip_address=self.ip_address).exclude(pk=self.pk).count() > 0: + if self.ip_address is not None and Abon.objects.filter(ip_address=self.ip_address).exclude( + pk=self.pk).count() > 0: self.is_bad_ip = True raise LogicError(_('Ip address already exist')) super(Abon, self).save(*args, **kwargs) diff --git a/abonapp/pay_systems.py b/abonapp/pay_systems.py index 378609b..33cf1af 100644 --- a/abonapp/pay_systems.py +++ b/abonapp/pay_systems.py @@ -5,13 +5,11 @@ from .models import Abon, AllTimePayLog from django.db import DatabaseError from django.conf import settings - SECRET = getattr(settings, 'PAY_SECRET') SERV_ID = getattr(settings, 'PAY_SERV_ID') def allpay(request): - def bad_ret(err_id, err_description=None): current_date = timezone.now() res = [ @@ -49,16 +47,16 @@ def allpay(request): ballance = float(abon.ballance) current_date = timezone.now().strftime("%d.%m.%Y %H:%M:%S") return "\n" \ - "\n" \ - " %.2f\n" % ballance +\ - " %s\n" % fio +\ - " %d\n" % pay_account +\ - " %s\n" % SERV_ID +\ - " 10.0\n" \ - " 50000\n" \ - " 21\n" \ - " %s\n" % current_date +\ - "" + "\n" \ + " %.2f\n" % ballance + \ + " %s\n" % fio + \ + " %d\n" % pay_account + \ + " %s\n" % SERV_ID + \ + " 10.0\n" \ + " 50000\n" \ + " 21\n" \ + " %s\n" % current_date + \ + "" elif act == 4: trade_point = safe_int(request.GET.get('TRADE_POINT')) receipt_num = safe_int(request.GET.get('RECEIPT_NUM')) @@ -79,12 +77,12 @@ def allpay(request): ) current_date = timezone.now().strftime("%d.%m.%Y %H:%M:%S") return "" \ - "\n" +\ - " %s\n" % pay_id +\ - " %s\n" % serv_id +\ - " %.2f\n" % pay_amount +\ - " 22\n" +\ - " %s\n" % current_date +\ + "\n" + \ + " %s\n" % pay_id + \ + " %s\n" % serv_id + \ + " %.2f\n" % pay_amount + \ + " 22\n" + \ + " %s\n" % current_date + \ "" elif act == 7: pay = AllTimePayLog.objects.get(pay_id=pay_id) @@ -92,13 +90,13 @@ def allpay(request): return "\n" \ "\n" \ " 11\n" \ - " %s\n" % current_date +\ + " %s\n" % current_date + \ " \n" \ - " %s\n" % pay_id +\ - " %s\n" % serv_id +\ - " %.2f\n" % float(pay.summ) +\ - " 111\n" +\ - " %s\n" % current_date +\ + " %s\n" % pay_id + \ + " %s\n" % serv_id + \ + " %.2f\n" % float(pay.summ) + \ + " 111\n" + \ + " %s\n" % current_date + \ " \n" \ "" else: diff --git a/accounts_app/admin.py b/accounts_app/admin.py index caeb394..f5bccb6 100644 --- a/accounts_app/admin.py +++ b/accounts_app/admin.py @@ -2,5 +2,4 @@ from django.contrib import admin from .models import UserProfile - admin.site.register(UserProfile) diff --git a/accounts_app/forms.py b/accounts_app/forms.py index 4288081..03a93b6 100644 --- a/accounts_app/forms.py +++ b/accounts_app/forms.py @@ -4,7 +4,6 @@ from guardian.shortcuts import assign_perm, remove_perm class MyUserObjectPermissionsForm(UserObjectPermissionsForm): - def save_obj_perms(self): """ Saves selected object permissions by creating new ones and removing diff --git a/accounts_app/migrations/0001_initial.py b/accounts_app/migrations/0001_initial.py index e630b71..f0c9177 100644 --- a/accounts_app/migrations/0001_initial.py +++ b/accounts_app/migrations/0001_initial.py @@ -8,7 +8,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - initial = True dependencies = [ @@ -24,13 +23,16 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('password', models.CharField(max_length=128, verbose_name='password')), ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('is_superuser', models.BooleanField(default=False, + help_text='Designates that this user has all permissions without explicitly assigning them.', + verbose_name='superuser status')), ('username', models.CharField(max_length=127, unique=True, verbose_name='profile username')), ('fio', models.CharField(max_length=256, verbose_name='fio')), ('birth_day', models.DateField(auto_now_add=True, verbose_name='birth day')), ('is_active', models.BooleanField(default=True, verbose_name='Is active')), ('is_admin', models.BooleanField(default=False)), - ('telephone', models.CharField(max_length=16, validators=[django.core.validators.RegexValidator('^\\+[7,8,9,3]\\d{10,11}$')], verbose_name='Telephone')), + ('telephone', models.CharField(max_length=16, validators=[ + django.core.validators.RegexValidator('^\\+[7,8,9,3]\\d{10,11}$')], verbose_name='Telephone')), ], options={ 'db_table': 'base_accounts', @@ -39,10 +41,14 @@ class Migration(migrations.Migration): migrations.CreateModel( name='UserProfile', fields=[ - ('baseaccount_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='accounts_app.BaseAccount')), + ('baseaccount_ptr', + models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, + primary_key=True, serialize=False, to='accounts_app.BaseAccount')), ('email', models.EmailField(default='admin@example.ru', max_length=254)), - ('avatar', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='photo_app.Photo')), - ('responsibility_groups', models.ManyToManyField(blank=True, to='group_app.Group', verbose_name='Responsibility groups')), + ('avatar', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + to='photo_app.Photo')), + ('responsibility_groups', + models.ManyToManyField(blank=True, to='group_app.Group', verbose_name='Responsibility groups')), ], options={ 'verbose_name': 'Staff account profile', @@ -55,11 +61,16 @@ class Migration(migrations.Migration): migrations.AddField( model_name='baseaccount', name='groups', - field=models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups'), + field=models.ManyToManyField(blank=True, + help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', + related_name='user_set', related_query_name='user', to='auth.Group', + verbose_name='groups'), ), migrations.AddField( model_name='baseaccount', name='user_permissions', - field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions'), + field=models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', + related_name='user_set', related_query_name='user', to='auth.Permission', + verbose_name='user permissions'), ), ] diff --git a/accounts_app/models.py b/accounts_app/models.py index 7219b96..639a528 100644 --- a/accounts_app/models.py +++ b/accounts_app/models.py @@ -8,7 +8,6 @@ from django.conf import settings from photo_app.models import Photo from group_app.models import Group - DEFAULT_PICTURE = getattr(settings, 'DEFAULT_PICTURE', '/static/img/user_ava.gif') TELEPHONE_REGEXP = getattr(settings, 'TELEPHONE_REGEXP', r'^\+[7,8,9,3]\d{10,11}$') @@ -39,7 +38,7 @@ class MyUserManager(BaseUserManager): user = self.create_user(telephone, password=password, username=username - ) + ) user.is_admin = True user.is_superuser = True user.save(using=self._db) @@ -60,7 +59,7 @@ class BaseAccount(AbstractBaseUser, PermissionsMixin): telephone = models.CharField( max_length=16, verbose_name=_('Telephone'), - #unique=True, + # unique=True, validators=[RegexValidator(TELEPHONE_REGEXP)] ) @@ -90,7 +89,6 @@ class BaseAccount(AbstractBaseUser, PermissionsMixin): class UserProfileManager(MyUserManager): - def get_profiles_by_group(self, group_id): return self.filter(responsibility_groups__id__in=[group_id], is_admin=True, is_active=True) diff --git a/accounts_app/templatetags/acc_tags.py b/accounts_app/templatetags/acc_tags.py index dd29299..821835a 100644 --- a/accounts_app/templatetags/acc_tags.py +++ b/accounts_app/templatetags/acc_tags.py @@ -2,8 +2,8 @@ from django import template from django.db.models import Model from django.apps import apps from six import string_types, class_types -register = template.Library() +register = template.Library() @register.simple_tag diff --git a/accounts_app/urls.py b/accounts_app/urls.py index dfab615..36edb3f 100644 --- a/accounts_app/urls.py +++ b/accounts_app/urls.py @@ -2,7 +2,6 @@ from django.conf.urls import url from . import views - app_name = 'account_app' urlpatterns = [ diff --git a/agent/__init__.py b/agent/__init__.py index 6eafe88..5e790d0 100644 --- a/agent/__init__.py +++ b/agent/__init__.py @@ -3,7 +3,6 @@ from .mod_mikrotik import MikrotikTransmitter from .core import NasFailedResult, NasNetworkError from .structs import TariffStruct, AbonStruct - # Transmitter мы будем импортировать в других местах # Тут надо указать какой у нас будет NAS # т.е. какой класс будет управлять доступом в интернет diff --git a/agent/monitoring_agent.py b/agent/monitoring_agent.py index f54059f..3898a3a 100755 --- a/agent/monitoring_agent.py +++ b/agent/monitoring_agent.py @@ -8,7 +8,6 @@ API_AUTH_SECRET = 'your api key' SERVER_DOMAIN = 'http://localhost:8000' - IP_REGEXP = r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \ r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \ r'(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \ diff --git a/agent/netflow/netflow_handler.py b/agent/netflow/netflow_handler.py index e3f84bd..c495a17 100755 --- a/agent/netflow/netflow_handler.py +++ b/agent/netflow/netflow_handler.py @@ -4,7 +4,6 @@ import sys import os from importlib import import_module - if __name__ == '__main__': if len(sys.argv) < 2: print("File name of netflow required") diff --git a/agent/structs.py b/agent/structs.py index 26c0e39..13f85b2 100644 --- a/agent/structs.py +++ b/agent/structs.py @@ -19,7 +19,6 @@ class BaseStruct(object, metaclass=ABCMeta): class IpStruct(BaseStruct): - def __init__(self, ip): if type(ip) is int: self.__ip = ip @@ -55,7 +54,6 @@ class IpStruct(BaseStruct): # Как обслуживается абонент class TariffStruct(BaseStruct): - def __init__(self, tariff_id=0, speedIn=None, speedOut=None): self.tid = int(tariff_id) self.speedIn = float(speedIn if speedIn is not None else 0.001) @@ -92,7 +90,6 @@ class TariffStruct(BaseStruct): # Абонент из базы class AbonStruct(BaseStruct): - def __init__(self, uid=0, ip=None, tariff=None, is_active=True): self.uid = int(uid or 0) self.ip = IpStruct(ip) @@ -143,7 +140,7 @@ class ShapeItem(BaseStruct): def serialize(self): abon_pack = self.abon.serialize() dt = pack('!L', self.sid) - return dt+abon_pack + return dt + abon_pack def deserialize(self, data, *args): sz = calcsize('!L') diff --git a/chatbot/migrations/0001_initial.py b/chatbot/migrations/0001_initial.py index 11c7ccc..5a6be22 100644 --- a/chatbot/migrations/0001_initial.py +++ b/chatbot/migrations/0001_initial.py @@ -8,7 +8,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - initial = True dependencies = [ @@ -35,9 +34,12 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('message', models.CharField(max_length=255, verbose_name='Message')), - ('status', models.CharField(choices=[('n', 'New'), ('r', 'Read')], default='n', max_length=1, verbose_name='Status of message')), + ('status', models.CharField(choices=[('n', 'New'), ('r', 'Read')], default='n', max_length=1, + verbose_name='Status of message')), ('tag', models.CharField(default='none', max_length=6, verbose_name='App tag')), - ('target_employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Target employee')), + ('target_employee', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, + verbose_name='Target employee')), ], options={ 'verbose_name': 'Message queue', @@ -50,7 +52,8 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('chat_id', models.PositiveIntegerField(default=0, verbose_name='Telegram chat id')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Employee')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, + verbose_name='Employee')), ], options={ 'verbose_name': 'Telegram bot', diff --git a/chatbot/models.py b/chatbot/models.py index b10f2bd..1046adf 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, models.CASCADE, verbose_name=_('Employee')) chat_id = models.PositiveIntegerField(_('Telegram chat id'), default=0) def __str__(self): @@ -37,7 +37,6 @@ class MessageHistory(models.Model): class MessageQueueManager(models.Manager): - def pop(self, user, tag='none'): msgs = self.filter(target_employee=user, status='n', tag=tag)[:1].only('message').values('id', 'message') if len(msgs) > 0: diff --git a/chatbot/telebot.py b/chatbot/telebot.py index cb18527..4e399aa 100755 --- a/chatbot/telebot.py +++ b/chatbot/telebot.py @@ -102,11 +102,13 @@ class DjingTelebot(helper.ChatHandler): chat_id=self._chat_id ) except UserProfile.DoesNotExist: - self._question(_("You are not found in the database, check that it correctly pointed out its LOGIN. Try again"), - self.question_name) + self._question( + _("You are not found in the database, check that it correctly pointed out its LOGIN. Try again"), + self.question_name) return - self._sent_reply(_("Yes, it's nice to meet %(username)s, I will notify you about events in billing. Successful work ;)") - % {'username': profile.get_full_name()}) + self._sent_reply( + _("Yes, it's nice to meet %(username)s, I will notify you about events in billing. Successful work ;)") + % {'username': profile.get_full_name()}) # заканчивается время диалога # ex - время ожидания (timeout=ex в pave_event_space) diff --git a/clientsideapp/models.py b/clientsideapp/models.py index b0b75a3..6b20219 100644 --- a/clientsideapp/models.py +++ b/clientsideapp/models.py @@ -1,3 +1 @@ - - # Create your models here. diff --git a/clientsideapp/urls.py b/clientsideapp/urls.py index 61fa864..689e42f 100644 --- a/clientsideapp/urls.py +++ b/clientsideapp/urls.py @@ -2,10 +2,8 @@ from django.conf.urls import url from . import views - app_name = 'clientsideapp' - urlpatterns = [ url(r'^$', views.home, name='home'), url(r'^pays$', views.pays, name='pays'), diff --git a/cron.py b/cron.py index 13879a8..6d7b4cc 100755 --- a/cron.py +++ b/cron.py @@ -44,8 +44,8 @@ def main(): print('NetworkTrouble:', e) # manage periodic pays - ppays = PeriodicPayForId.objects.filter(next_pay__lt=now)\ - .prefetch_related('account', 'periodic_pay') + ppays = PeriodicPayForId.objects.filter(next_pay__lt=now) \ + .prefetch_related('account', 'periodic_pay') for pay in ppays: pay.payment_for_service(now=now) diff --git a/devapp/admin.py b/devapp/admin.py index 6541f13..7144aef 100644 --- a/devapp/admin.py +++ b/devapp/admin.py @@ -2,6 +2,5 @@ from django.contrib import admin from . import models - admin.site.register(models.Device) admin.site.register(models.Port) diff --git a/devapp/apps.py b/devapp/apps.py index 1880f8c..09df060 100644 --- a/devapp/apps.py +++ b/devapp/apps.py @@ -1,5 +1,3 @@ - - from django.apps import AppConfig diff --git a/devapp/base_intr.py b/devapp/base_intr.py index dd714e4..ba128d3 100644 --- a/devapp/base_intr.py +++ b/devapp/base_intr.py @@ -1,10 +1,10 @@ from abc import ABCMeta, abstractmethod from datetime import timedelta +from django.utils.translation import gettext from typing import Union, Iterable, AnyStr, Generator from easysnmp import Session - ListOrError = Union[ Iterable, Union[Exception, Iterable] @@ -16,7 +16,6 @@ class DeviceImplementationError(Exception): class DevBase(object, metaclass=ABCMeta): - def __init__(self, dev_instance=None): self.db_instance = dev_instance @@ -78,10 +77,12 @@ class BasePort(object, metaclass=ABCMeta): class SNMPBaseWorker(object, metaclass=ABCMeta): ses = None - def __init__(self, ip, community='public', ver=2): + def __init__(self, ip: str, community='public', ver=2): + if ip is None: + raise DeviceImplementationError(gettext('Ip address is required')) self.ses = Session(hostname=ip, community=community, version=ver) - def set_int_value(self, oid, value): + def set_int_value(self, oid: str, value): return self.ses.set(oid, value, 'i') def get_list(self, oid) -> Generator: diff --git a/devapp/migrations/0001_initial.py b/devapp/migrations/0001_initial.py index 58a30ac..fa24063 100644 --- a/devapp/migrations/0001_initial.py +++ b/devapp/migrations/0001_initial.py @@ -9,7 +9,6 @@ import mydefs class Migration(migrations.Migration): - initial = True dependencies = [ @@ -21,16 +20,25 @@ class Migration(migrations.Migration): name='Device', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('ip_address', mydefs.MyGenericIPAddressField(max_length=8, protocol='ipv4', verbose_name='Ip address')), - ('mac_addr', djing.fields.MACAddressField(blank=True, integer=True, null=True, unique=True, verbose_name='Mac address')), + ( + 'ip_address', mydefs.MyGenericIPAddressField(max_length=8, protocol='ipv4', verbose_name='Ip address')), + ('mac_addr', djing.fields.MACAddressField(blank=True, integer=True, null=True, unique=True, + verbose_name='Mac address')), ('comment', models.CharField(max_length=256, verbose_name='Comment')), - ('devtype', models.CharField(choices=[('Dl', 'DLink switch'), ('Pn', 'PON OLT'), ('On', 'PON ONU'), ('Ex', 'Eltex switch')], default='Dl', max_length=2, verbose_name='Device type')), + ('devtype', models.CharField( + choices=[('Dl', 'DLink switch'), ('Pn', 'PON OLT'), ('On', 'PON ONU'), ('Ex', 'Eltex switch')], + default='Dl', max_length=2, verbose_name='Device type')), ('man_passw', models.CharField(blank=True, max_length=16, null=True, verbose_name='SNMP password')), ('snmp_item_num', models.PositiveSmallIntegerField(blank=True, default=0, verbose_name='SNMP Number')), - ('status', models.CharField(choices=[('und', 'Undefined'), ('up', 'Up'), ('unr', 'Unreachable'), ('dwn', 'Down')], default='und', max_length=3, verbose_name='Status')), - ('is_noticeable', models.BooleanField(default=False, verbose_name='Send notify when monitoring state changed')), - ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='group_app.Group', verbose_name='Device group')), - ('parent_dev', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='devapp.Device', verbose_name='Parent device')), + ('status', + models.CharField(choices=[('und', 'Undefined'), ('up', 'Up'), ('unr', 'Unreachable'), ('dwn', 'Down')], + default='und', max_length=3, verbose_name='Status')), + ('is_noticeable', + models.BooleanField(default=False, verbose_name='Send notify when monitoring state changed')), + ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + to='group_app.Group', verbose_name='Device group')), + ('parent_dev', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + to='devapp.Device', verbose_name='Parent device')), ], options={ 'verbose_name': 'Device', @@ -46,7 +54,8 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('num', models.PositiveSmallIntegerField(default=0, verbose_name='Number')), ('descr', models.CharField(blank=True, max_length=60, null=True, verbose_name='Description')), - ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='devapp.Device', verbose_name='Device')), + ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='devapp.Device', + verbose_name='Device')), ], options={ 'verbose_name': 'Port', diff --git a/devapp/tests.py b/devapp/tests.py index ea6adf0..8708627 100644 --- a/devapp/tests.py +++ b/devapp/tests.py @@ -3,7 +3,6 @@ from . import dev_types class DevTest(TestCase): - def setUp(self): pass diff --git a/dhcp_lever.py b/dhcp_lever.py index aac8e81..5322f49 100755 --- a/dhcp_lever.py +++ b/dhcp_lever.py @@ -7,6 +7,7 @@ def die(text): print(text) exit(1) + ''' obj = { 'client_ip': ip2int('127.0.0.1'), diff --git a/dialing.py b/dialing.py index ca591d3..a6fabbd 100755 --- a/dialing.py +++ b/dialing.py @@ -2,6 +2,7 @@ import os, signal from pid.decorator import pidfile import django + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings") django.setup() from messaging.sms import SmsSubmit, SmsDeliver @@ -11,14 +12,12 @@ from time import sleep from dialing_app.models import SMSModel, SMSOut from django.conf import settings - ASTERISK_MANAGER_AUTH = getattr(settings, 'ASTERISK_MANAGER_AUTH', { 'username': 'admin', 'password': 'admin', 'host': '127.0.0.1' }) - outbox_messages = False @@ -146,7 +145,7 @@ def main(): # register some callbacks manager.register_event('Shutdown', handle_shutdown) - manager.register_event('DongleNewCMGR', handle_inbox_long_sms_message) # PDU Here + manager.register_event('DongleNewCMGR', handle_inbox_long_sms_message) # PDU Here # get a status report response = manager.status() diff --git a/dialing_app/migrations/0001_initial.py b/dialing_app/migrations/0001_initial.py index c5c308d..a5c814a 100644 --- a/dialing_app/migrations/0001_initial.py +++ b/dialing_app/migrations/0001_initial.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - initial = True dependencies = [ @@ -30,7 +29,9 @@ class Migration(migrations.Migration): ('start', models.DateTimeField(blank=True, default=None, null=True)), ('answer', models.DateTimeField(blank=True, default=None, null=True)), ('end', models.DateTimeField(blank=True, default=None, null=True)), - ('disposition', models.CharField(choices=[('NO ANSWER', 'No answer'), ('FAILED', 'Failed'), ('BUSY', 'Busy'), ('ANSWERED', 'Answered'), ('UNKNOWN', 'Unknown')], default='', max_length=45)), + ('disposition', models.CharField( + choices=[('NO ANSWER', 'No answer'), ('FAILED', 'Failed'), ('BUSY', 'Busy'), + ('ANSWERED', 'Answered'), ('UNKNOWN', 'Unknown')], default='', max_length=45)), ('amaflags', models.IntegerField(default=0)), ('accountcode', models.CharField(default='', max_length=20)), ('userfield', models.CharField(default='', max_length=255)), @@ -66,7 +67,9 @@ class Migration(migrations.Migration): ('when', models.DateTimeField(auto_now_add=True, verbose_name='When')), ('dst', models.CharField(max_length=16, verbose_name='Telephone')), ('text', models.CharField(max_length=255, verbose_name='Text')), - ('status', models.CharField(choices=[('nw', 'New'), ('st', 'Sent'), ('fd', 'Failed')], default='nw', max_length=2, verbose_name='Status')), + ('status', + models.CharField(choices=[('nw', 'New'), ('st', 'Sent'), ('fd', 'Failed')], default='nw', max_length=2, + verbose_name='Status')), ], options={ 'verbose_name': 'Out SMS', diff --git a/dialing_app/templatetags/telephone_filters.py b/dialing_app/templatetags/telephone_filters.py index 83d9589..29cf37c 100644 --- a/dialing_app/templatetags/telephone_filters.py +++ b/dialing_app/templatetags/telephone_filters.py @@ -12,7 +12,7 @@ def abon_if_telephone(value): """Возвращаем ссыль на абонента если передали номер телефона""" if re.match(r'^\+?\d+$', value): if value[0] != '+': - value = '+'+value + value = '+' + value url = resolve_url('dialapp:to_abon', tel=value) a = '%s' % (url, value) return a diff --git a/dialing_app/urls.py b/dialing_app/urls.py index 9b18adf..3a1024f 100644 --- a/dialing_app/urls.py +++ b/dialing_app/urls.py @@ -1,10 +1,8 @@ from django.conf.urls import url 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'), diff --git a/djing/__init__.py b/djing/__init__.py index 8699bb5..6d02235 100644 --- a/djing/__init__.py +++ b/djing/__init__.py @@ -1,7 +1,6 @@ import importlib from netaddr import mac_unix, mac_eui48 - MAC_ADDR_REGEX = r'^([0-9A-Fa-f]{1,2}[:-]){5}([0-9A-Fa-f]{1,2})$' IP_ADDR_REGEX = r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.' \ @@ -40,5 +39,5 @@ except DistributionNotFound: __version__ = 'Please install this project with setup.py' else: __version__ = _dist.version -VERSION = __version__ # synonym +VERSION = __version__ # synonym default_app_config = 'abonapp.apps.AbonappConfig' diff --git a/djing/fields.py b/djing/fields.py index 4e4af52..b25fde9 100644 --- a/djing/fields.py +++ b/djing/fields.py @@ -13,10 +13,10 @@ class MACAddressField(models.Field): description = "A MAC address validated by netaddr.EUI" empty_strings_allowed = False dialect = None - + def __init__(self, *args, **kwargs): self.integer = kwargs.pop('integer', True) - if not self.integer: # If storing MAC address as string, set max_length to default (17) or use supplied kwarg value. + if not self.integer: # If storing MAC address as string, set max_length to default (17) or use supplied kwarg value. kwargs['max_length'] = kwargs.get('max_length', 17) super(MACAddressField, self).__init__(*args, **kwargs) @@ -63,7 +63,7 @@ class MACAddressField(models.Field): def from_db_value(self, value, expression, connection, context): return self.to_python(value) - + def to_python(self, value): if value is None: return value @@ -103,6 +103,7 @@ class MACAddressField(models.Field): try: from south.modelsinspector import add_introspection_rules + add_introspection_rules([], ["^macaddress\.fields\.MACAddressField"]) except ImportError: pass diff --git a/djing/formfields.py b/djing/formfields.py index 3050e67..9cbc937 100644 --- a/djing/formfields.py +++ b/djing/formfields.py @@ -7,7 +7,6 @@ from django.utils.translation import gettext_lazy as _ from netaddr import EUI, AddrFormatError from . import MAC_ADDR_REGEX - mac_address_validator = RegexValidator( _lazy_re_compile(MAC_ADDR_REGEX), message=_('Enter a valid integer.'), diff --git a/djing/global_base_views.py b/djing/global_base_views.py index 51040f2..cc47482 100644 --- a/djing/global_base_views.py +++ b/djing/global_base_views.py @@ -23,7 +23,6 @@ class RedirectWhenError(Exception): class HashAuthView(View): - @staticmethod def calc_hash(data): if type(data) is str: @@ -60,7 +59,6 @@ class HashAuthView(View): class AllowedSubnetMixin(object): - def dispatch(self, request, *args, **kwargs): """ Check if user ip in allowed subnet. @@ -80,6 +78,7 @@ class OrderingMixin(object): @dir - direction of ordering. down or up. @order_by - ordering field name """ + def get_context_data(self, **kwargs): context = super(OrderingMixin, self).get_context_data(**kwargs) context['order_by'] = self.request.GET.get('order_by') @@ -104,7 +103,6 @@ class OrderingMixin(object): class RedirectWhenErrorMixin(object): - def get(self, request, *args, **kwargs): try: return super(RedirectWhenErrorMixin, self).get(request, *args, **kwargs) diff --git a/djing/settings.py b/djing/settings.py index 1ef4e67..19726df 100644 --- a/djing/settings.py +++ b/djing/settings.py @@ -1,13 +1,11 @@ # -*- coding: utf-8 -* import os - try: from . import local_settings except ImportError: raise ImportError("You must create config file local_settings.py from template") - # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) from django.urls import reverse_lazy @@ -26,14 +24,14 @@ ALLOWED_HOSTS = local_settings.ALLOWED_HOSTS # required for django-guardian AUTHENTICATION_BACKENDS = ( 'djing.auth_backends.CustomAuthBackend', - #'django.contrib.auth.backends.ModelBackend', # default + # 'django.contrib.auth.backends.ModelBackend', # default 'guardian.backends.ObjectPermissionBackend' ) # Application definition INSTALLED_APPS = [ - #'django.contrib.admin', + # 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', @@ -79,7 +77,7 @@ TEMPLATES = [ 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ - #'django.template.context_processors.debug', + # 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', @@ -95,13 +93,11 @@ TEMPLATES = [ WSGI_APPLICATION = 'djing.wsgi.application' - # Database # https://docs.djangoproject.com/en/1.11/ref/settings/#databases DATABASES = local_settings.DATABASES - # Password validation # https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators @@ -145,7 +141,6 @@ FILE_UPLOAD_MAX_MEMORY_SIZE = 4096000 # time to session live, 1 day SESSION_COOKIE_AGE = 60 * 60 * 24 - # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.9/howto/static-files/ @@ -153,7 +148,6 @@ STATIC_URL = '/static/' if DEBUG: STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),) - # Example output: 16 september 2018 DATE_FORMAT = 'd E Y' diff --git a/djing/urls.py b/djing/urls.py index f9ac814..9b0d66c 100644 --- a/djing/urls.py +++ b/djing/urls.py @@ -1,6 +1,6 @@ from django.conf.urls import url, include from django.conf import settings -#from django.contrib import admin +# from django.contrib import admin from .views import home @@ -18,7 +18,7 @@ urlpatterns = [ 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'^admin/', admin.site.urls) + # url(r'^admin/', admin.site.urls) ] diff --git a/group_app/migrations/0001_initial.py b/group_app/migrations/0001_initial.py index b9e086a..e36d2d7 100644 --- a/group_app/migrations/0001_initial.py +++ b/group_app/migrations/0001_initial.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - initial = True dependencies = [ diff --git a/group_app/urls.py b/group_app/urls.py index a755334..6fa6954 100644 --- a/group_app/urls.py +++ b/group_app/urls.py @@ -7,4 +7,4 @@ 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') -] \ No newline at end of file +] diff --git a/mapapp/migrations/0001_initial.py b/mapapp/migrations/0001_initial.py index 9068339..043f9d1 100644 --- a/mapapp/migrations/0001_initial.py +++ b/mapapp/migrations/0001_initial.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - initial = True dependencies = [ @@ -21,7 +20,8 @@ class Migration(migrations.Migration): ('title', models.CharField(max_length=127, verbose_name='Map point title')), ('latitude', models.FloatField(verbose_name='Latitude')), ('longitude', models.FloatField(verbose_name='Longitude')), - ('attachment', models.FileField(blank=True, null=True, upload_to='map_attachments/%Y_%m_%d', verbose_name='Attachment')), + ('attachment', models.FileField(blank=True, null=True, upload_to='map_attachments/%Y_%m_%d', + verbose_name='Attachment')), ('devices', models.ManyToManyField(db_table='dot_device', to='devapp.Device', verbose_name='Devices')), ], options={ diff --git a/mapapp/templates/maps/dot.html b/mapapp/templates/maps/dot.html index a063840..8822423 100644 --- a/mapapp/templates/maps/dot.html +++ b/mapapp/templates/maps/dot.html @@ -73,7 +73,7 @@ {{ dev.comment }} {% endif %} - {{ dev.ip_address }} + {{ dev.ip_address|default:'-' }} {{ dev.get_comment_display }} {% if dev.group %} diff --git a/mapapp/urls.py b/mapapp/urls.py index 4e207a1..def6b23 100644 --- a/mapapp/urls.py +++ b/mapapp/urls.py @@ -2,10 +2,8 @@ from django.conf.urls import url from . import views - app_name = 'mapapp' - urlpatterns = [ url(r'^$', views.home, name='home'), url(r'^options$', views.OptionsListView.as_view(), name='options'), diff --git a/messaging/sms/base.py b/messaging/sms/base.py index b7b1d59..87c42ec 100644 --- a/messaging/sms/base.py +++ b/messaging/sms/base.py @@ -2,7 +2,6 @@ class SmsBase(object): - def __init__(self): self.udh = None self.number = None diff --git a/messaging/sms/deliver.py b/messaging/sms/deliver.py index 37714e6..5036e46 100644 --- a/messaging/sms/deliver.py +++ b/messaging/sms/deliver.py @@ -142,7 +142,7 @@ class SmsDeliver(SmsBase): if (tz & 0x08): offset = offset * -1 - # 02/08/26 19:37:41 + # 02/08/26 19:37:41 datestr = "%s%s/%s%s/%s%s %s%s:%s%s:%s%s" % tuple(date) outputfmt = '%y/%m/%d %H:%M:%S' @@ -174,7 +174,7 @@ class SmsDeliver(SmsBase): if self.fmt == 0x00: # XXX: Use unpack_msg2 data = data[ud_len:].tolist() - #self.text = unpack_msg2(data).decode("gsm0338") + # self.text = unpack_msg2(data).decode("gsm0338") self.text = unpack_msg(msg)[headlen:msgl].decode("gsm0338") elif self.fmt == 0x04: @@ -183,7 +183,7 @@ class SmsDeliver(SmsBase): elif self.fmt == 0x08: data = data[ud_len:].tolist() _bytes = [int("%02X%02X" % (data[i], data[i + 1]), 16) - for i in range(0, len(data), 2)] + for i in range(0, len(data), 2)] self.text = ''.join(list(map(chr, _bytes))) pdu = property(lambda self: self._pdu, _set_pdu) @@ -252,7 +252,7 @@ class SmsDeliver(SmsBase): self.number = sender self.text = "|".join(msg_l) - self.fmt = 0x08 # UCS2 + self.fmt = 0x08 # UCS2 self.type = 0x03 # status report self.sr = { @@ -261,4 +261,3 @@ class SmsDeliver(SmsBase): 'dt': dt, 'status': _status } - diff --git a/messaging/sms/gsm0338.py b/messaging/sms/gsm0338.py index b260f33..38e51be 100644 --- a/messaging/sms/gsm0338.py +++ b/messaging/sms/gsm0338.py @@ -31,9 +31,9 @@ def_regular_decode_dict = { '\x07': u'\u00EC', # LATIN SMALL LETTER I WITH GRAVE '\x08': u'\u00F2', # LATIN SMALL LETTER O WITH GRAVE '\x09': u'\u00C7', # LATIN CAPITAL LETTER C WITH CEDILLA - # The Unicode page suggests this is a mistake: but - # it's still in the latest version of the spec and - # our implementation has to be exact. + # The Unicode page suggests this is a mistake: but + # it's still in the latest version of the spec and + # our implementation has to be exact. '\x0A': u'\u000A', # LINE FEED '\x0B': u'\u00D8', # LATIN CAPITAL LETTER O WITH STROKE @@ -222,7 +222,7 @@ def encode(input_, errors='strict'): raise UnicodeError("Invalid GSM character") elif errors == 'replace': result.append( - def_replace_encode_dict.get(c, QUESTION_MARK)) + def_replace_encode_dict.get(c, QUESTION_MARK)) elif errors == 'ignore': pass else: @@ -275,6 +275,7 @@ def getregentry(encoding): encode=encode, decode=decode) + # Codec registration codecs.register(getregentry) diff --git a/messaging/sms/pdu.py b/messaging/sms/pdu.py index 9d680d5..352ae5a 100644 --- a/messaging/sms/pdu.py +++ b/messaging/sms/pdu.py @@ -2,7 +2,6 @@ class Pdu(object): - def __init__(self, pdu, len_smsc, cnt=1, seq=1): self.pdu = pdu.upper() self.length = len(pdu) / 2 - len_smsc diff --git a/messaging/sms/udh.py b/messaging/sms/udh.py index eecfa23..3574a56 100644 --- a/messaging/sms/udh.py +++ b/messaging/sms/udh.py @@ -2,7 +2,6 @@ class PortAddress(object): - def __init__(self, dest_port, orig_port, eight_bits): self.dest_port = dest_port self.orig_port = orig_port @@ -14,7 +13,6 @@ class PortAddress(object): class ConcatReference(object): - def __init__(self, ref, cnt, seq, eight_bits): self.ref = ref self.cnt = cnt @@ -27,7 +25,6 @@ class ConcatReference(object): class UserDataHeader(object): - def __init__(self): self.concat = None self.ports = None diff --git a/migrate_to_0.2.py b/migrate_to_0.2.py index 3393850..a2edee8 100755 --- a/migrate_to_0.2.py +++ b/migrate_to_0.2.py @@ -6,13 +6,11 @@ import shutil from json import dump import django - ''' Some permissions is not migrates, all admins is superuser after migrate. ''' - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings") from django.db.models import fields as django_fields @@ -29,14 +27,16 @@ def get_fixture_from_unchanget_model(model_name: str, model_class): def get_fields(obj): fields = dict() for field in obj._meta.get_fields(): - if isinstance(field, (django_fields.reverse_related.ManyToOneRel, django_fields.reverse_related.ManyToManyRel)): + if isinstance(field, + (django_fields.reverse_related.ManyToOneRel, django_fields.reverse_related.ManyToManyRel)): continue field_val = getattr(obj, field.name) if field_val is None: continue if isinstance(field, django_fields.related.ManyToManyField): fields[field.name] = [f.pk for f in field_val.all()] - elif isinstance(field, (django_fields.related.ForeignKey, django.contrib.contenttypes.fields.GenericForeignKey)): + elif isinstance(field, + (django_fields.related.ForeignKey, django.contrib.contenttypes.fields.GenericForeignKey)): fields[field.name] = field_val.pk elif isinstance(field, django_fields.FloatField): fields[field.name] = float(field_val) @@ -324,13 +324,13 @@ def move_to_fixtures_dirs(): def apply_fixtures(): from django.core.management import execute_from_command_line from accounts_app.models import UserProfile - #from django.contrib.auth import models + # from django.contrib.auth import models UserProfile.objects.filter(username='AnonymousUser').delete() - #print('clearing auth.group') - #models.Group.objects.all().delete() - #print('clearing auth.permission') - #models.Permission.objects.all().delete() + # print('clearing auth.group') + # models.Group.objects.all().delete() + # print('clearing auth.permission') + # models.Permission.objects.all().delete() fixtures_names = [ 'groups_fixture.json', 'tariffs_fixture.json', 'photos_fixture.json', diff --git a/msg_app/admin.py b/msg_app/admin.py index 06b7abc..309ebad 100644 --- a/msg_app/admin.py +++ b/msg_app/admin.py @@ -3,4 +3,3 @@ from . import models admin.site.register(models.Message) admin.site.register(models.Conversation) - diff --git a/msg_app/forms.py b/msg_app/forms.py index 2f14911..c725504 100644 --- a/msg_app/forms.py +++ b/msg_app/forms.py @@ -5,15 +5,16 @@ from accounts_app.models import UserProfile class ConversationForm(forms.ModelForm): - def __init__(self, *args, **kwargs): super(ConversationForm, self).__init__(*args, **kwargs) user_profile_queryset = UserProfile.objects.filter(is_admin=True) if user_profile_queryset is not None: self.fields['participants'].choices = [(up.pk, up.get_full_name()) for up in user_profile_queryset] - title = forms.CharField(max_length=32, required=False, widget=forms.TextInput(attrs={'class': 'form-control', 'maxlength': '32'})) - participants = forms.MultipleChoiceField(required=False, widget=forms.SelectMultiple(attrs={'class': 'form-control'})) + title = forms.CharField(max_length=32, required=False, + widget=forms.TextInput(attrs={'class': 'form-control', 'maxlength': '32'})) + participants = forms.MultipleChoiceField(required=False, + widget=forms.SelectMultiple(attrs={'class': 'form-control'})) class Meta: model = Conversation @@ -36,7 +37,6 @@ class ConversationForm(forms.ModelForm): class MessageForm(forms.ModelForm): - class Meta: model = Message exclude = ['sent_at', 'author', 'conversation', 'account_status'] @@ -57,7 +57,6 @@ class MessageForm(forms.ModelForm): ) return msg - def save(self, commit=True): # You must use MessageForm.create() for save the form raise NotImplementedError diff --git a/msg_app/migrations/0001_initial.py b/msg_app/migrations/0001_initial.py index 8bf0ddb..d51da03 100644 --- a/msg_app/migrations/0001_initial.py +++ b/msg_app/migrations/0001_initial.py @@ -8,7 +8,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - initial = True dependencies = [ @@ -35,10 +34,16 @@ class Migration(migrations.Migration): name='ConversationMembership', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('status', models.CharField(choices=[('adm', 'Admin'), ('gst', 'Guest'), ('ban', 'Banned user'), ('inv', 'Inviter')], default='gst', max_length=3)), - ('account', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='memberships', to=settings.AUTH_USER_MODEL)), - ('conversation', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='msg_app.Conversation')), - ('who_invite_that_user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='self_conversations', to=settings.AUTH_USER_MODEL)), + ('status', models.CharField( + choices=[('adm', 'Admin'), ('gst', 'Guest'), ('ban', 'Banned user'), ('inv', 'Inviter')], + default='gst', max_length=3)), + ('account', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='memberships', + to=settings.AUTH_USER_MODEL)), + ('conversation', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='msg_app.Conversation')), + ('who_invite_that_user', + models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, + related_name='self_conversations', to=settings.AUTH_USER_MODEL)), ], options={ 'verbose_name': 'Conversation membership', @@ -66,9 +71,12 @@ class Migration(migrations.Migration): name='MessageStatus', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('state', models.CharField(choices=[('new', 'New'), ('old', 'Seen'), ('del', 'Deleted')], default='new', max_length=3)), - ('msg', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='msg_statuses', to='msg_app.Message')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='usr_msg_status', to=settings.AUTH_USER_MODEL)), + ('state', models.CharField(choices=[('new', 'New'), ('old', 'Seen'), ('del', 'Deleted')], default='new', + max_length=3)), + ('msg', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='msg_statuses', + to='msg_app.Message')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='usr_msg_status', + to=settings.AUTH_USER_MODEL)), ], options={ 'verbose_name': 'Message status', @@ -84,17 +92,20 @@ class Migration(migrations.Migration): migrations.AddField( model_name='message', name='author', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='messages', to=settings.AUTH_USER_MODEL), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='messages', + to=settings.AUTH_USER_MODEL), ), migrations.AddField( model_name='message', name='conversation', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='msg_app.Conversation', verbose_name='Conversation'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='msg_app.Conversation', + verbose_name='Conversation'), ), migrations.AddField( model_name='conversation', name='participants', - field=models.ManyToManyField(related_name='conversations', through='msg_app.ConversationMembership', to=settings.AUTH_USER_MODEL), + field=models.ManyToManyField(related_name='conversations', through='msg_app.ConversationMembership', + to=settings.AUTH_USER_MODEL), ), migrations.AlterUniqueTogether( name='messagestatus', diff --git a/msg_app/models.py b/msg_app/models.py index 9319448..d95d96e 100644 --- a/msg_app/models.py +++ b/msg_app/models.py @@ -10,7 +10,7 @@ class MessageError(Exception): class MessageStatus(models.Model): - msg = models.ForeignKey('Message', models.CASCADE, related_name='msg_statuses') + msg = models.ForeignKey('Message', models.CASCADE, related_name='msg_statuses') user = models.ForeignKey(UserProfile, models.CASCADE, related_name='usr_msg_status') MESSAGE_STATES = ( ('new', _('New')), @@ -82,7 +82,8 @@ 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, related_name='self_conversations') + who_invite_that_user = models.ForeignKey(UserProfile, models.CASCADE, null=True, blank=True, + related_name='self_conversations') def __str__(self): return "%s < %s" % (self.conversation, self.account) @@ -103,7 +104,6 @@ def id_to_userprofile(acc): class ConversationManager(models.Manager): - def create_conversation(self, author, other_participants, title=None): other_participants = [id_to_userprofile(acc) for acc in other_participants] if not title: diff --git a/msg_app/urls.py b/msg_app/urls.py index e5e037a..883ebb6 100644 --- a/msg_app/urls.py +++ b/msg_app/urls.py @@ -1,10 +1,8 @@ from django.conf.urls import url 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'), diff --git a/photo_app/admin.py b/photo_app/admin.py index b5d50f5..d1a7052 100644 --- a/photo_app/admin.py +++ b/photo_app/admin.py @@ -2,5 +2,4 @@ from django.contrib import admin from . import models - -admin.site.register(models.Photo) \ No newline at end of file +admin.site.register(models.Photo) diff --git a/photo_app/migrations/0001_initial.py b/photo_app/migrations/0001_initial.py index ce18848..d2a7c83 100644 --- a/photo_app/migrations/0001_initial.py +++ b/photo_app/migrations/0001_initial.py @@ -6,7 +6,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - initial = True dependencies = [ diff --git a/photo_app/urls.py b/photo_app/urls.py index f7ba65c..4b893a5 100644 --- a/photo_app/urls.py +++ b/photo_app/urls.py @@ -2,10 +2,9 @@ urlpatterns = [ # url(r'^$', 'photo_albums', name='media_home_link'), - #url(r'^(?P\d+)$', 'photo_albums', name='media_home_link_by_id'), - #url(r'^album(?P\d+)$', 'photos', name='media_photos_link'), + # url(r'^(?P\d+)$', 'photo_albums', name='media_home_link_by_id'), + # url(r'^album(?P\d+)$', 'photos', name='media_photos_link'), - - #url(r'^newalbum/$', 'add_album', name='add_media_album_link'), - #url(r'^newphoto/$', 'add_photo_to_album', name='add_media_photo_link') + # url(r'^newalbum/$', 'add_album', name='add_media_album_link'), + # url(r'^newphoto/$', 'add_photo_to_album', name='add_media_photo_link') ] diff --git a/queue_mngr.py b/queue_mngr.py index c066eff..0a68c0d 100755 --- a/queue_mngr.py +++ b/queue_mngr.py @@ -4,10 +4,10 @@ from pickle import loads from pid.decorator import pidfile import socket import django + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings") from mydefs import LogicError - ''' obj = { 'client_ip': ip2int('127.0.0.1'), @@ -57,5 +57,5 @@ if __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djing.settings") django.setup() from agent.commands.dhcp import dhcp_commit, dhcp_expiry, dhcp_release - serve() + serve() diff --git a/searchapp/apps.py b/searchapp/apps.py index 3d549bf..992fa2b 100644 --- a/searchapp/apps.py +++ b/searchapp/apps.py @@ -1,5 +1,3 @@ - - from django.apps import AppConfig diff --git a/searchapp/models.py b/searchapp/models.py index b0b75a3..6b20219 100644 --- a/searchapp/models.py +++ b/searchapp/models.py @@ -1,3 +1 @@ - - # Create your models here. diff --git a/searchapp/urls.py b/searchapp/urls.py index 3a80e5b..9183924 100644 --- a/searchapp/urls.py +++ b/searchapp/urls.py @@ -2,7 +2,6 @@ from django.conf.urls import url from . import views - app_name = 'searchapp' urlpatterns = [ diff --git a/statistics/fields.py b/statistics/fields.py index d583ce0..f3ff199 100644 --- a/statistics/fields.py +++ b/statistics/fields.py @@ -8,7 +8,6 @@ import django.db.models as models class UnixDateTimeField(models.DateTimeField): - # TODO(niklas9): # * should we take care of transforming between time zones in any way here ? # * get default datetime format from settings ? @@ -16,7 +15,7 @@ class UnixDateTimeField(models.DateTimeField): TZ_CONST = '+' # TODO(niklas9): # * metaclass below just for Django < 1.9, fix a if stmt for it? - #__metaclass__ = models.SubfieldBase + # __metaclass__ = models.SubfieldBase description = "Unix timestamp integer to datetime object" def get_internal_type(self): diff --git a/statistics/migrations/0001_initial.py b/statistics/migrations/0001_initial.py index 47742f0..bd83354 100644 --- a/statistics/migrations/0001_initial.py +++ b/statistics/migrations/0001_initial.py @@ -8,7 +8,6 @@ import statistics.fields class Migration(migrations.Migration): - initial = True dependencies = [ @@ -19,7 +18,8 @@ class Migration(migrations.Migration): name='StatCache', fields=[ ('last_time', statistics.fields.UnixDateTimeField()), - ('ip', mydefs.MyGenericIPAddressField(max_length=8, primary_key=True, protocol='ipv4', serialize=False)), + ( + 'ip', mydefs.MyGenericIPAddressField(max_length=8, primary_key=True, protocol='ipv4', serialize=False)), ('octets', models.PositiveIntegerField(default=0)), ('packets', models.PositiveIntegerField(default=0)), ], diff --git a/statistics/models.py b/statistics/models.py index 7ce1f3b..9c9db7d 100644 --- a/statistics/models.py +++ b/statistics/models.py @@ -14,23 +14,22 @@ def get_dates(): class StatManager(models.Manager): - def chart(self, username, count_of_parts=12, want_date=date.today()): def byte_to_mbit(x): - return ((x/60)*8)/2**20 + return ((x / 60) * 8) / 2 ** 20 def split_list(lst, chunk_count): chunk_size = len(lst) // chunk_count if chunk_size == 0: chunk_size = 1 - return [lst[i:i+chunk_size] for i in range(0, len(lst), chunk_size)] + return [lst[i:i + chunk_size] for i in range(0, len(lst), chunk_size)] def avarage(elements): return sum(elements) / len(elements) try: charts_data = self.filter(uname=username) - charts_times = [cd.cur_time.timestamp()*1000 for cd in charts_data] + charts_times = [cd.cur_time.timestamp() * 1000 for cd in charts_data] charts_octets = [cd.octets for cd in charts_data] if len(charts_octets) > 0 and len(charts_octets) == len(charts_times): charts_octets = split_list(charts_octets, count_of_parts) @@ -52,7 +51,6 @@ class StatManager(models.Manager): return - class StatElem(models.Model): cur_time = UnixDateTimeField(primary_key=True) uname = models.CharField(max_length=127, blank=True, null=True, default=None) @@ -81,7 +79,7 @@ class StatElem(models.Model): cursor.execute(sql) @staticmethod - def percentile(N, percent, key=lambda x:x): + def percentile(N, percent, key=lambda x: x): """ Find the percentile of a list of values. @@ -93,25 +91,25 @@ class StatElem(models.Model): """ if not N: return None - k = (len(N)-1) * percent + k = (len(N) - 1) * percent f = math.floor(k) c = math.ceil(k) if f == c: return key(N[int(k)]) - d0 = key(N[int(f)]) * (c-k) - d1 = key(N[int(c)]) * (k-f) - return d0+d1 + d0 = key(N[int(f)]) * (c - k) + d1 = key(N[int(c)]) * (k - f) + return d0 + d1 class Meta: abstract = True def getModel(want_date=now()): - class DynamicStatElem(StatElem): class Meta: db_table = 'flowstat_%s' % want_date.strftime("%d%m%Y") abstract = False + return DynamicStatElem diff --git a/statistics/urls.py b/statistics/urls.py index 21eec76..7ae783a 100644 --- a/statistics/urls.py +++ b/statistics/urls.py @@ -2,10 +2,8 @@ from django.conf.urls import url from . import views - app_name = 'statistics' - urlpatterns = [ url(r'^$', views.home, name='home'), ] diff --git a/systemd_units/webdav_backup.py b/systemd_units/webdav_backup.py index 967de77..68388e0 100644 --- a/systemd_units/webdav_backup.py +++ b/systemd_units/webdav_backup.py @@ -3,7 +3,6 @@ from sys import argv from datetime import datetime, timedelta import webdav.client as wc - options = { 'webdav_hostname': "https://webdav.yandex.ru/", 'webdav_login': "YANDEX USERNAME", @@ -11,13 +10,13 @@ options = { } -def remove_old_files(border_time : datetime, client): +def remove_old_files(border_time: datetime, client): # files that older than border_time will be removed for file in client.list('ISBackups'): fdate = datetime.strptime(file, 'djing%Y-%m-%d_%H.%M.%S.sql.gz') if fdate < border_time: del_fname = 'ISBackups/%' % file - client.clean( del_fname ) + client.clean(del_fname) print("rm %s" % del_fname) @@ -32,4 +31,3 @@ if __name__ == '__main__': client.upload_sync(remote_path="ISBackups/%s" % reqfile, local_path="/var/backups/%s" % reqfile) except wc.WebDavException as we: print(we, type(we)) - diff --git a/tariff_app/admin.py b/tariff_app/admin.py index de4701a..c26b42b 100644 --- a/tariff_app/admin.py +++ b/tariff_app/admin.py @@ -2,5 +2,4 @@ from django.contrib import admin from . import models - admin.site.register(models.Tariff) diff --git a/tariff_app/migrations/0001_initial.py b/tariff_app/migrations/0001_initial.py index 75d508e..1958953 100644 --- a/tariff_app/migrations/0001_initial.py +++ b/tariff_app/migrations/0001_initial.py @@ -7,7 +7,6 @@ import jsonfield.fields class Migration(migrations.Migration): - initial = True dependencies = [ @@ -21,7 +20,9 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=64, verbose_name='Periodic pay name')), ('when_add', models.DateTimeField(auto_now_add=True, verbose_name='When pay created')), - ('calc_type', models.CharField(choices=[('df', 'Default periodic pay'), ('cs', 'Custom periodic pay')], default='df', max_length=2, verbose_name='Script type for calculations')), + ('calc_type', + models.CharField(choices=[('df', 'Default periodic pay'), ('cs', 'Custom periodic pay')], default='df', + max_length=2, verbose_name='Script type for calculations')), ('amount', models.FloatField(verbose_name='Total amount')), ('extra_info', jsonfield.fields.JSONField()), ], @@ -42,7 +43,9 @@ class Migration(migrations.Migration): ('speedIn', models.FloatField(default=0.0, verbose_name='Speed In')), ('speedOut', models.FloatField(default=0.0, verbose_name='Speed Out')), ('amount', models.FloatField(default=0.0, verbose_name='Price')), - ('calc_type', models.CharField(choices=[('Df', 'Base calculate functionality'), ('Dp', 'IS'), ('Cp', 'Private service')], default='Df', max_length=2, verbose_name='Script')), + ('calc_type', models.CharField( + choices=[('Df', 'Base calculate functionality'), ('Dp', 'IS'), ('Cp', 'Private service')], + default='Df', max_length=2, verbose_name='Script')), ('is_admin', models.BooleanField(default=False, verbose_name='Tech service')), ('groups', models.ManyToManyField(blank=True, to='group_app.Group')), ], diff --git a/tariff_app/models.py b/tariff_app/models.py index 3d2b15d..7beb1d3 100644 --- a/tariff_app/models.py +++ b/tariff_app/models.py @@ -10,7 +10,6 @@ from jsonfield import JSONField class TariffManager(models.Manager): - def get_tariffs_by_group(self, group_id): return self.filter(groups__id__in=[group_id]) diff --git a/taskapp/admin.py b/taskapp/admin.py index 48105b6..f0e1e94 100644 --- a/taskapp/admin.py +++ b/taskapp/admin.py @@ -2,6 +2,5 @@ from django.contrib import admin from . import models - admin.site.register(models.Task) admin.site.register(models.ChangeLog) diff --git a/taskapp/forms.py b/taskapp/forms.py index a81443f..e8bf8ef 100644 --- a/taskapp/forms.py +++ b/taskapp/forms.py @@ -44,7 +44,6 @@ class TaskFrm(forms.ModelForm): class ExtraCommentForm(forms.ModelForm): - def make_save(self, author, task: Task): comment = super(ExtraCommentForm, self).save(commit=False) comment.author = author diff --git a/taskapp/handle.py b/taskapp/handle.py index 0530270..c973dc3 100644 --- a/taskapp/handle.py +++ b/taskapp/handle.py @@ -28,7 +28,7 @@ def handle(task, author, recipients, abon_group): fulltext += _('locality %s.\n') % abon_group.title if task.abon: fulltext += _('address %(street)s %(house)s.\ntelephone %(telephone)s\n') % { - 'street': task.abon.street.name if task.abon.street is not None else '<'+_('not chosen')+'>', + 'street': task.abon.street.name if task.abon.street is not None else '<' + _('not chosen') + '>', 'house': task.abon.house, 'telephone': task.abon.telephone } diff --git a/taskapp/migrations/0001_initial.py b/taskapp/migrations/0001_initial.py index 9fcbe37..06da89c 100644 --- a/taskapp/migrations/0001_initial.py +++ b/taskapp/migrations/0001_initial.py @@ -9,7 +9,6 @@ import taskapp.models class Migration(migrations.Migration): - initial = True dependencies = [ @@ -22,7 +21,9 @@ class Migration(migrations.Migration): name='ChangeLog', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('act_type', models.CharField(choices=[('e', 'Change task'), ('c', 'Create task'), ('d', 'Delete task'), ('f', 'Completing tasks'), ('b', 'The task failed')], max_length=1)), + ('act_type', models.CharField(choices=[('e', 'Change task'), ('c', 'Create task'), ('d', 'Delete task'), + ('f', 'Completing tasks'), ('b', 'The task failed')], + max_length=1)), ('when', models.DateTimeField(auto_now_add=True)), ], ), @@ -32,7 +33,8 @@ class Migration(migrations.Migration): ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('text', models.TextField(verbose_name='Text of comment')), ('date_create', models.DateTimeField(auto_now_add=True, verbose_name='Time of create')), - ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Author')), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, + verbose_name='Author')), ], options={ 'verbose_name': 'Extra comment', @@ -46,15 +48,29 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('descr', models.CharField(blank=True, max_length=128, null=True, verbose_name='Description')), - ('priority', models.CharField(choices=[('A', 'Higher'), ('C', 'Average'), ('E', 'Low')], default='E', max_length=1, verbose_name='A priority')), - ('out_date', models.DateField(blank=True, default=taskapp.models._delta_add_days, null=True, verbose_name='Reality')), + ('priority', + models.CharField(choices=[('A', 'Higher'), ('C', 'Average'), ('E', 'Low')], default='E', max_length=1, + verbose_name='A priority')), + ('out_date', models.DateField(blank=True, default=taskapp.models._delta_add_days, null=True, + verbose_name='Reality')), ('time_of_create', models.DateTimeField(auto_now_add=True, verbose_name='Date of create')), - ('state', models.CharField(choices=[('S', 'New'), ('C', 'Confused'), ('F', 'Completed')], default='S', max_length=1, verbose_name='Condition')), - ('attachment', models.ImageField(blank=True, null=True, upload_to='task_attachments/%Y.%m.%d', verbose_name='Attached image')), - ('mode', models.CharField(choices=[('na', 'not chosen'), ('ic', 'ip conflict'), ('yt', 'yellow triangle'), ('rc', 'red cross'), ('ls', 'weak speed'), ('cf', 'cable break'), ('cn', 'connection'), ('pf', 'periodic disappearance'), ('cr', 'router setup'), ('co', 'configure onu'), ('fc', 'crimp cable'), ('ni', 'Internet crash'), ('ot', 'other')], default='na', max_length=2, verbose_name='The nature of the damage')), - ('abon', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='abonapp.Abon', verbose_name='Subscriber')), - ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='Task author')), - ('recipients', models.ManyToManyField(related_name='them_task', to=settings.AUTH_USER_MODEL, verbose_name='Recipients')), + ('state', models.CharField(choices=[('S', 'New'), ('C', 'Confused'), ('F', 'Completed')], default='S', + max_length=1, verbose_name='Condition')), + ('attachment', models.ImageField(blank=True, null=True, upload_to='task_attachments/%Y.%m.%d', + verbose_name='Attached image')), + ('mode', models.CharField( + choices=[('na', 'not chosen'), ('ic', 'ip conflict'), ('yt', 'yellow triangle'), + ('rc', 'red cross'), ('ls', 'weak speed'), ('cf', 'cable break'), ('cn', 'connection'), + ('pf', 'periodic disappearance'), ('cr', 'router setup'), ('co', 'configure onu'), + ('fc', 'crimp cable'), ('ni', 'Internet crash'), ('ot', 'other')], default='na', + max_length=2, verbose_name='The nature of the damage')), + ('abon', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, + to='abonapp.Abon', verbose_name='Subscriber')), + ('author', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, + related_name='+', to=settings.AUTH_USER_MODEL, + verbose_name='Task author')), + ('recipients', models.ManyToManyField(related_name='them_task', to=settings.AUTH_USER_MODEL, + verbose_name='Recipients')), ], options={ 'db_table': 'task', @@ -65,7 +81,8 @@ class Migration(migrations.Migration): migrations.AddField( model_name='extracomment', name='task', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='taskapp.Task', verbose_name='Owner task'), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='taskapp.Task', + verbose_name='Owner task'), ), migrations.AddField( model_name='changelog', @@ -75,6 +92,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='changelog', name='who', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL), + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', + to=settings.AUTH_USER_MODEL), ), ] diff --git a/taskapp/models.py b/taskapp/models.py index de3aa0c..b4d02a0 100644 --- a/taskapp/models.py +++ b/taskapp/models.py @@ -8,7 +8,6 @@ from django.utils.translation import ugettext as _ from abonapp.models import Abon from .handle import handle as task_handle - TASK_PRIORITIES = ( ('A', _('Higher')), ('C', _('Average')), @@ -61,8 +60,10 @@ def _delta_add_days(): class Task(models.Model): descr = models.CharField(_('Description'), max_length=128, null=True, blank=True) - recipients = models.ManyToManyField(settings.AUTH_USER_MODEL, verbose_name=_('Recipients'), related_name='them_task') - author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+', on_delete=models.SET_NULL, null=True, blank=True, verbose_name=_('Task author')) + recipients = models.ManyToManyField(settings.AUTH_USER_MODEL, verbose_name=_('Recipients'), + related_name='them_task') + author = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='+', on_delete=models.SET_NULL, null=True, + blank=True, verbose_name=_('Task author')) priority = models.CharField(_('A priority'), max_length=1, choices=TASK_PRIORITIES, default=TASK_PRIORITIES[2][0]) out_date = models.DateField(_('Reality'), null=True, blank=True, default=_delta_add_days) time_of_create = models.DateTimeField(_('Date of create'), auto_now_add=True) diff --git a/taskapp/urls.py b/taskapp/urls.py index 5485e77..4b4a289 100644 --- a/taskapp/urls.py +++ b/taskapp/urls.py @@ -2,10 +2,8 @@ from django.conf.urls import url 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'), @@ -14,7 +12,8 @@ urlpatterns = [ 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(), name='comment_del'), + url(r'^(?P\d+)/comment/(?P\d{1,8})/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'), diff --git a/taskapp/views.py b/taskapp/views.py index 7d449a8..202237a 100644 --- a/taskapp/views.py +++ b/taskapp/views.py @@ -38,8 +38,8 @@ class NewTasksView(BaseTaskListView): def get_queryset(self): return Task.objects.filter(recipients=self.request.user, state='S') \ - .annotate(comment_count=Count('extracomment')) \ - .select_related('abon', 'abon__street', 'abon__group', 'author') + .annotate(comment_count=Count('extracomment')) \ + .select_related('abon', 'abon__street', 'abon__group', 'author') class FailedTasksView(NewTasksView): @@ -51,7 +51,7 @@ class FailedTasksView(NewTasksView): def get_queryset(self): return Task.objects.filter(recipients=self.request.user, state='C') \ - .select_related('abon', 'abon__street', 'abon__group', 'author') + .select_related('abon', 'abon__street', 'abon__group', 'author') class FinishedTaskListView(NewTasksView): @@ -59,7 +59,7 @@ class FinishedTaskListView(NewTasksView): def get_queryset(self): return Task.objects.filter(recipients=self.request.user, state='F') \ - .select_related('abon', 'abon__street', 'abon__group', 'author') + .select_related('abon', 'abon__street', 'abon__group', 'author') class OwnTaskListView(NewTasksView): @@ -67,9 +67,9 @@ class OwnTaskListView(NewTasksView): def get_queryset(self): # Attached and not finished tasks - return Task.objects.filter(author=self.request.user)\ - .exclude(state='F')\ - .select_related('abon', 'abon__street', 'abon__group') + return Task.objects.filter(author=self.request.user) \ + .exclude(state='F') \ + .select_related('abon', 'abon__street', 'abon__group') class MyTaskListView(NewTasksView): @@ -78,7 +78,7 @@ class MyTaskListView(NewTasksView): def get_queryset(self): # Tasks in which I participated return Task.objects.filter(recipients=self.request.user) \ - .select_related('abon', 'abon__street', 'abon__group', 'author') + .select_related('abon', 'abon__street', 'abon__group', 'author') @method_decorator([login_required, permission_required('taskapp.can_viewall')], name='dispatch') @@ -88,7 +88,7 @@ class AllTasksListView(BaseTaskListView): def get_queryset(self): return Task.objects.annotate(comment_count=Count('extracomment')) \ - .select_related('abon', 'abon__street', 'abon__group', 'author') + .select_related('abon', 'abon__street', 'abon__group', 'author') class EmptyTasksListView(NewTasksView):