From 94cdf1fd64479a1f00a54f499fa0044772ce3efe Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Fri, 16 Nov 2018 15:25:52 +0300 Subject: [PATCH] Add tasks for abonapp --- abonapp/models.py | 34 ++++------------------------------ abonapp/tasks.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 30 deletions(-) create mode 100644 abonapp/tasks.py diff --git a/abonapp/models.py b/abonapp/models.py index 7878895..ecf24f4 100644 --- a/abonapp/models.py +++ b/abonapp/models.py @@ -1,6 +1,7 @@ from datetime import datetime from typing import Optional +from abonapp.tasks import user_remove_from_gw, user_add_to_gw, user_nas_sync from accounts_app.models import UserProfile, MyUserManager, BaseAccount from bitfield import BitField from django.conf import settings @@ -317,16 +318,7 @@ class Abon(BaseAccount): """ if self.nas is None: raise LogicError(_('gateway required')) - try: - agent_abon = self.build_agent_struct() - if agent_abon is not None: - mngr = self.nas.get_nas_manager() - mngr.update_user(agent_abon) - except (NasFailedResult, NasNetworkError, ConnectionResetError) as e: - print('ERROR:', e) - return e - except LogicError: - pass + user_nas_sync.delay(self.pk) def nas_add_self(self): """ @@ -335,16 +327,7 @@ class Abon(BaseAccount): """ if self.nas is None: raise LogicError(_('gateway required')) - try: - agent_abon = self.build_agent_struct() - if agent_abon is not None: - mngr = self.nas.get_nas_manager() - mngr.add_user(agent_abon) - except (NasFailedResult, NasNetworkError, ConnectionResetError) as e: - print('ERROR:', e) - return e - except LogicError: - pass + user_add_to_gw.delay(self.pk) def nas_remove_self(self): """ @@ -353,16 +336,7 @@ class Abon(BaseAccount): """ if self.nas is None: raise LogicError(_('gateway required')) - try: - agent_abon = self.build_agent_struct() - if agent_abon is not None: - mngr = self.nas.get_nas_manager() - mngr.remove_user(agent_abon) - except (NasFailedResult, NasNetworkError, ConnectionResetError) as e: - print('ERROR:', e) - return e - except LogicError: - pass + user_remove_from_gw.delay(self.pk) def get_absolute_url(self): return resolve_url('abonapp:abon_home', self.group.id, self.username) diff --git a/abonapp/tasks.py b/abonapp/tasks.py new file mode 100644 index 0000000..08be9ab --- /dev/null +++ b/abonapp/tasks.py @@ -0,0 +1,46 @@ +from celery import shared_task +from abonapp.models import Abon +from djing.lib import LogicError +from gw_app.nas_managers import NasFailedResult, NasNetworkError + + +@shared_task +def user_remove_from_gw(user_id: int): + try: + user = Abon.objects.get(pk=user_id) + agent_abon = user.build_agent_struct() + if agent_abon is not None: + mngr = user.nas.get_nas_manager() + mngr.remove_user(agent_abon) + except ( + Abon.DoesNotExist, NasFailedResult, + NasNetworkError, ConnectionResetError, LogicError + ): + pass + + +@shared_task +def user_add_to_gw(user_id: int): + try: + user = Abon.objects.get(pk=user_id) + agent_abon = user.build_agent_struct() + if agent_abon is not None: + mngr = user.nas.get_nas_manager() + mngr.add_user(agent_abon) + except ( + Abon.DoesNotExist, NasFailedResult, + NasNetworkError, ConnectionResetError, LogicError + ): + pass + + +@shared_task +def user_nas_sync(user_id: int): + try: + user = Abon.objects.get(pk=user_id) + agent_abon = user.build_agent_struct() + if agent_abon is not None: + mngr = user.nas.get_nas_manager() + mngr.update_user(agent_abon) + except (NasFailedResult, NasNetworkError, ConnectionResetError, LogicError) as e: + return 'ERROR:%s' % e