Browse Source

FIXBUG

devel
bashmak 9 years ago
parent
commit
3cacdf682c
  1. 20
      abonapp/models.py
  2. 4
      agent/core.py
  3. 10
      agent/mod_mikrotik.py

20
abonapp/models.py

@ -247,7 +247,7 @@ class PassportInfo(models.Model):
date_of_acceptance = models.DateField() date_of_acceptance = models.DateField()
abon = models.OneToOneField(Abon, on_delete=models.SET_NULL, blank=True, null=True) abon = models.OneToOneField(Abon, on_delete=models.SET_NULL, blank=True, null=True)
def __unicode__(self):
def __str__(self):
return "%s %s" % (self.series, self.number) return "%s %s" % (self.series, self.number)
@ -331,7 +331,7 @@ def abon_post_save(sender, instance, **kwargs):
# обновляем абонента на NAS # обновляем абонента на NAS
tm.update_user(agent_abon, ip_timeout=timeout) tm.update_user(agent_abon, ip_timeout=timeout)
except (NasFailedResult, NasNetworkError) as e:
except (NasFailedResult, NasNetworkError, ConnectionResetError) as e:
print('ERROR:', e) print('ERROR:', e)
return True return True
@ -357,6 +357,22 @@ def abon_tariff_post_init(sender, instance, **kwargs):
instance.deadline = calc_obj.calc_deadline() instance.deadline = calc_obj.calc_deadline()
def abontariff_pre_delete(sender, instance, **kwargs):
try:
abon = Abon.objects.get(current_tariff=instance)
ab = abon.build_agent_struct()
if ab is None:
return True
tm = Transmitter()
tm.remove_user(ab)
except Abon.DoesNotExist:
print('ERROR: Abon.DoesNotExist')
except (NasFailedResult, NasNetworkError, ConnectionResetError) as e:
print('NetErr:', e)
return True
models.signals.post_save.connect(abon_post_save, sender=Abon) models.signals.post_save.connect(abon_post_save, sender=Abon)
models.signals.post_delete.connect(abon_del_signal, sender=Abon) models.signals.post_delete.connect(abon_del_signal, sender=Abon)
models.signals.post_init.connect(abon_tariff_post_init, sender=AbonTariff) models.signals.post_init.connect(abon_tariff_post_init, sender=AbonTariff)
models.signals.pre_delete.connect(abontariff_pre_delete, sender=AbonTariff)

4
agent/core.py

@ -19,8 +19,6 @@ class NasNetworkError(Exception):
def check_input_type(*types): def check_input_type(*types):
def real_check(fn): def real_check(fn):
def wrapped(self, *args): def wrapped(self, *args):
if len(types) != len(args):
raise AttributeError("length of @types must be equivalent for length of @args")
for param_type, param in zip(types, args): for param_type, param in zip(types, args):
if not isinstance(param, param_type): if not isinstance(param, param_type):
raise TypeError("%s must be %s, but is %s" % (str(param), str(param_type), type(param))) raise TypeError("%s must be %s, but is %s" % (str(param), str(param_type), type(param)))
@ -97,7 +95,7 @@ class BaseTransmitter(metaclass=ABCMeta):
""" """
@abstractmethod @abstractmethod
@check_input_type(str)
@check_input_type(str, int)
def ping(self, host, count=10): def ping(self, host, count=10):
""" """
:param host: ip адрес в текстовом виде, например '192.168.0.1' :param host: ip адрес в текстовом виде, например '192.168.0.1'

10
agent/mod_mikrotik.py

@ -6,7 +6,7 @@ from hashlib import md5
from .core import BaseTransmitter, NasFailedResult, NasNetworkError from .core import BaseTransmitter, NasFailedResult, NasNetworkError
from mydefs import ping from mydefs import ping
from .structs import TariffStruct, AbonStruct, IpStruct from .structs import TariffStruct, AbonStruct, IpStruct
from . import settings
from . import settings as local_settings
from django.conf import settings from django.conf import settings
import re import re
@ -144,15 +144,17 @@ class ApiRos:
class TransmitterManager(BaseTransmitter, metaclass=ABCMeta): class TransmitterManager(BaseTransmitter, metaclass=ABCMeta):
def __init__(self, login=None, password=None, ip=None, port=None): def __init__(self, login=None, password=None, ip=None, port=None):
ip = ip or settings.NAS_IP
ip = ip or getattr(local_settings, 'NAS_IP')
if ip is None:
raise NasNetworkError('Не передан ip адрес NAS')
if not ping(ip): if not ping(ip):
raise NasNetworkError('NAS %s не пингуется' % ip) raise NasNetworkError('NAS %s не пингуется' % ip)
try: try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((ip, port or settings.NAS_PORT))
s.connect((ip, port or getattr(local_settings, 'NAS_PORT', 8728)))
self.s = s self.s = s
self.ar = ApiRos(s) self.ar = ApiRos(s)
self.ar.login(login or settings.NAS_LOGIN, password or settings.NAS_PASSW)
self.ar.login(login or getattr(local_settings, 'NAS_LOGIN'), password or getattr(local_settings, 'NAS_PASSW'))
except ConnectionRefusedError: except ConnectionRefusedError:
raise NasNetworkError('Подключение к %s отклонено (Connection Refused)' % ip) raise NasNetworkError('Подключение к %s отклонено (Connection Refused)' % ip)

Loading…
Cancel
Save