Browse Source

Auto reformat code

devel
bashmak 8 years ago
parent
commit
7c29eca01e
  1. 1
      abonapp/admin.py
  2. 1
      abonapp/forms.py
  3. 74
      abonapp/migrations/0001_initial.py
  4. 7
      abonapp/models.py
  5. 36
      abonapp/pay_systems.py
  6. 1
      accounts_app/admin.py
  7. 1
      accounts_app/forms.py
  8. 27
      accounts_app/migrations/0001_initial.py
  9. 4
      accounts_app/models.py
  10. 2
      accounts_app/templatetags/acc_tags.py
  11. 1
      accounts_app/urls.py
  12. 1
      agent/__init__.py
  13. 1
      agent/monitoring_agent.py
  14. 1
      agent/netflow/netflow_handler.py
  15. 5
      agent/structs.py
  16. 11
      chatbot/migrations/0001_initial.py
  17. 1
      chatbot/models.py
  18. 6
      chatbot/telebot.py
  19. 2
      clientsideapp/models.py
  20. 2
      clientsideapp/urls.py
  21. 2
      cron.py
  22. 1
      devapp/admin.py
  23. 2
      devapp/apps.py
  24. 9
      devapp/base_intr.py
  25. 27
      devapp/migrations/0001_initial.py
  26. 1
      devapp/tests.py
  27. 1
      dhcp_lever.py
  28. 3
      dialing.py
  29. 9
      dialing_app/migrations/0001_initial.py
  30. 2
      dialing_app/templatetags/telephone_filters.py
  31. 2
      dialing_app/urls.py
  32. 1
      djing/__init__.py
  33. 1
      djing/fields.py
  34. 1
      djing/formfields.py
  35. 4
      djing/global_base_views.py
  36. 12
      djing/settings.py
  37. 4
      djing/urls.py
  38. 1
      group_app/migrations/0001_initial.py
  39. 4
      mapapp/migrations/0001_initial.py
  40. 2
      mapapp/templates/maps/dot.html
  41. 2
      mapapp/urls.py
  42. 1
      messaging/sms/base.py
  43. 3
      messaging/sms/deliver.py
  44. 1
      messaging/sms/gsm0338.py
  45. 1
      messaging/sms/pdu.py
  46. 3
      messaging/sms/udh.py
  47. 18
      migrate_to_0.2.py
  48. 1
      msg_app/admin.py
  49. 9
      msg_app/forms.py
  50. 33
      msg_app/migrations/0001_initial.py
  51. 4
      msg_app/models.py
  52. 2
      msg_app/urls.py
  53. 1
      photo_app/admin.py
  54. 1
      photo_app/migrations/0001_initial.py
  55. 9
      photo_app/urls.py
  56. 4
      queue_mngr.py
  57. 2
      searchapp/apps.py
  58. 2
      searchapp/models.py
  59. 1
      searchapp/urls.py
  60. 3
      statistics/fields.py
  61. 4
      statistics/migrations/0001_initial.py
  62. 20
      statistics/models.py
  63. 2
      statistics/urls.py
  64. 6
      systemd_units/webdav_backup.py
  65. 1
      tariff_app/admin.py
  66. 9
      tariff_app/migrations/0001_initial.py
  67. 1
      tariff_app/models.py
  68. 1
      taskapp/admin.py
  69. 1
      taskapp/forms.py
  70. 2
      taskapp/handle.py
  71. 44
      taskapp/migrations/0001_initial.py
  72. 7
      taskapp/models.py
  73. 5
      taskapp/urls.py
  74. 4
      taskapp/views.py

1
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)

1
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}$')

74
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'),
),
]

7
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)

36
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 = [
@ -50,14 +48,14 @@ def allpay(request):
current_date = timezone.now().strftime("%d.%m.%Y %H:%M:%S")
return "<?xml version='1.0' encoding='UTF-8'?>\n" \
"<pay-response>\n" \
" <balance>%.2f</balance>\n" % ballance +\
" <name>%s</name>\n" % fio +\
" <account>%d</account>\n" % pay_account +\
" <service_id>%s</service_id>\n" % SERV_ID +\
" <balance>%.2f</balance>\n" % ballance + \
" <name>%s</name>\n" % fio + \
" <account>%d</account>\n" % pay_account + \
" <service_id>%s</service_id>\n" % SERV_ID + \
" <min_amount>10.0</min_amount>\n" \
" <max_amount>50000</max_amount>\n" \
" <status_code>21</status_code>\n" \
" <time_stamp>%s</time_stamp>\n" % current_date +\
" <time_stamp>%s</time_stamp>\n" % current_date + \
"</pay-response>"
elif act == 4:
trade_point = safe_int(request.GET.get('TRADE_POINT'))
@ -79,12 +77,12 @@ def allpay(request):
)
current_date = timezone.now().strftime("%d.%m.%Y %H:%M:%S")
return "<?xml version='1.0' encoding='UTF-8'?>" \
"<pay-response>\n" +\
" <pay_id>%s</pay_id>\n" % pay_id +\
" <service_id>%s</service_id>\n" % serv_id +\
" <amount>%.2f</amount>\n" % pay_amount +\
" <status_code>22</status_code>\n" +\
" <time_stamp>%s</time_stamp>\n" % current_date +\
"<pay-response>\n" + \
" <pay_id>%s</pay_id>\n" % pay_id + \
" <service_id>%s</service_id>\n" % serv_id + \
" <amount>%.2f</amount>\n" % pay_amount + \
" <status_code>22</status_code>\n" + \
" <time_stamp>%s</time_stamp>\n" % current_date + \
"</pay-response>"
elif act == 7:
pay = AllTimePayLog.objects.get(pay_id=pay_id)
@ -92,13 +90,13 @@ def allpay(request):
return "<?xml version='1.0' encoding='UTF-8'?>\n" \
"<pay-response>\n" \
" <status_code>11</status_code>\n" \
" <time_stamp>%s</time_stamp>\n" % current_date +\
" <time_stamp>%s</time_stamp>\n" % current_date + \
" <transaction>\n" \
" <pay_id>%s</pay_id>\n" % pay_id +\
" <service_id>%s</service_id>\n" % serv_id +\
" <amount>%.2f</amount>\n" % float(pay.summ) +\
" <status>111</status>\n" +\
" <time_stamp>%s</time_stamp>\n" % current_date +\
" <pay_id>%s</pay_id>\n" % pay_id + \
" <service_id>%s</service_id>\n" % serv_id + \
" <amount>%.2f</amount>\n" % float(pay.summ) + \
" <status>111</status>\n" + \
" <time_stamp>%s</time_stamp>\n" % current_date + \
" </transaction>\n" \
"</pay-response>"
else:

1
accounts_app/admin.py

@ -2,5 +2,4 @@ from django.contrib import admin
from .models import UserProfile
admin.site.register(UserProfile)

1
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

27
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'),
),
]

4
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}$')
@ -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)

2
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

1
accounts_app/urls.py

@ -2,7 +2,6 @@ from django.conf.urls import url
from . import views
app_name = 'account_app'
urlpatterns = [

1
agent/__init__.py

@ -3,7 +3,6 @@ from .mod_mikrotik import MikrotikTransmitter
from .core import NasFailedResult, NasNetworkError
from .structs import TariffStruct, AbonStruct
# Transmitter мы будем импортировать в других местах
# Тут надо указать какой у нас будет NAS
# т.е. какой класс будет управлять доступом в интернет

1
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]?)\.' \

1
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")

5
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')

11
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',

1
chatbot/models.py

@ -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:

6
chatbot/telebot.py

@ -102,10 +102,12 @@ 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(
_("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 ;)")
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()})
# заканчивается время диалога

2
clientsideapp/models.py

@ -1,3 +1 @@
# Create your models here.

2
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'),

2
cron.py

@ -44,7 +44,7 @@ def main():
print('NetworkTrouble:', e)
# manage periodic pays
ppays = PeriodicPayForId.objects.filter(next_pay__lt=now)\
ppays = PeriodicPayForId.objects.filter(next_pay__lt=now) \
.prefetch_related('account', 'periodic_pay')
for pay in ppays:
pay.payment_for_service(now=now)

1
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)

2
devapp/apps.py

@ -1,5 +1,3 @@
from django.apps import AppConfig

9
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:

27
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',

1
devapp/tests.py

@ -3,7 +3,6 @@ from . import dev_types
class DevTest(TestCase):
def setUp(self):
pass

1
dhcp_lever.py

@ -7,6 +7,7 @@ def die(text):
print(text)
exit(1)
'''
obj = {
'client_ip': ip2int('127.0.0.1'),

3
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

9
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',

2
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 = '<a href="%s" target="_blank">%s</a>' % (url, value)
return a

2
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'),

1
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]?)\.' \

1
djing/fields.py

@ -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

1
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.'),

4
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)

12
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'

4
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)
]

1
group_app/migrations/0001_initial.py

@ -6,7 +6,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [

4
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={

2
mapapp/templates/maps/dot.html

@ -73,7 +73,7 @@
<a href="{% url 'devapp:view' 0 dev.pk %}">{{ dev.comment }}</a>
{% endif %}
</td>
<td>{{ dev.ip_address }}</td>
<td>{{ dev.ip_address|default:'-' }}</td>
<td>{{ dev.get_comment_display }}</td>
<td>
{% if dev.group %}

2
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'),

1
messaging/sms/base.py

@ -2,7 +2,6 @@
class SmsBase(object):
def __init__(self):
self.udh = None
self.number = None

3
messaging/sms/deliver.py

@ -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:
@ -261,4 +261,3 @@ class SmsDeliver(SmsBase):
'dt': dt,
'status': _status
}

1
messaging/sms/gsm0338.py

@ -275,6 +275,7 @@ def getregentry(encoding):
encode=encode,
decode=decode)
# Codec registration
codecs.register(getregentry)

1
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

3
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

18
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',

1
msg_app/admin.py

@ -3,4 +3,3 @@ from . import models
admin.site.register(models.Message)
admin.site.register(models.Conversation)

9
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

33
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',

4
msg_app/models.py

@ -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:

2
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'),

1
photo_app/admin.py

@ -2,5 +2,4 @@ from django.contrib import admin
from . import models
admin.site.register(models.Photo)

1
photo_app/migrations/0001_initial.py

@ -6,7 +6,6 @@ from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [

9
photo_app/urls.py

@ -2,10 +2,9 @@
urlpatterns = [
# url(r'^$', 'photo_albums', name='media_home_link'),
#url(r'^(?P<id>\d+)$', 'photo_albums', name='media_home_link_by_id'),
#url(r'^album(?P<id>\d+)$', 'photos', name='media_photos_link'),
# url(r'^(?P<id>\d+)$', 'photo_albums', name='media_home_link_by_id'),
# url(r'^album(?P<id>\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')
]

4
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()

2
searchapp/apps.py

@ -1,5 +1,3 @@
from django.apps import AppConfig

2
searchapp/models.py

@ -1,3 +1 @@
# Create your models here.

1
searchapp/urls.py

@ -2,7 +2,6 @@ from django.conf.urls import url
from . import views
app_name = 'searchapp'
urlpatterns = [

3
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):

4
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)),
],

20
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

2
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'),
]

6
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))

1
tariff_app/admin.py

@ -2,5 +2,4 @@ from django.contrib import admin
from . import models
admin.site.register(models.Tariff)

9
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')),
],

1
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])

1
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)

1
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

2
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
}

44
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),
),
]

7
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)

5
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<task_id>\d+)$', views.TaskUpdateView.as_view(), name='edit'),
@ -14,7 +12,8 @@ urlpatterns = [
url(r'^(?P<task_id>\d+)/fail$', views.task_failed, name='fail'),
url(r'^(?P<task_id>\d+)/remind', views.remind, name='remind'),
url(r'^(?P<task_id>\d+)/comment/add$', views.NewCommentView.as_view(), name='comment_add'),
url(r'^(?P<task_id>\d+)/comment/(?P<comment_id>\d{1,8})/remove$', views.DeleteCommentView.as_view(), name='comment_del'),
url(r'^(?P<task_id>\d+)/comment/(?P<comment_id>\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'),

4
taskapp/views.py

@ -67,8 +67,8 @@ class OwnTaskListView(NewTasksView):
def get_queryset(self):
# Attached and not finished tasks
return Task.objects.filter(author=self.request.user)\
.exclude(state='F')\
return Task.objects.filter(author=self.request.user) \
.exclude(state='F') \
.select_related('abon', 'abon__street', 'abon__group')

Loading…
Cancel
Save