From 0834ebc565e05e8560b9e1117a2ad2b7347a8073 Mon Sep 17 00:00:00 2001 From: Dmitry Novikov Date: Fri, 16 Nov 2018 16:39:07 +0300 Subject: [PATCH] Add devapp task --- devapp/models.py | 7 ------- devapp/{onu_register.py => tasks.py} | 9 ++++++--- devapp/views.py | 26 +++++++++++++++++--------- 3 files changed, 23 insertions(+), 19 deletions(-) rename devapp/{onu_register.py => tasks.py} (79%) diff --git a/devapp/models.py b/devapp/models.py index 4180b03..a8ad8d5 100644 --- a/devapp/models.py +++ b/devapp/models.py @@ -83,13 +83,6 @@ class Device(models.Model): def __str__(self): return "%s: (%s) %s %s" % (self.comment, self.get_devtype_display(), self.ip_address or '', self.mac_addr or '') - @staticmethod - def update_dhcp(): - from .onu_register import onu_register - onu_register( - Device.objects.exclude(group=None).select_related('group').only('mac_addr', 'group__code').iterator() - ) - def generate_config_template(self) -> Optional[AnyStr]: mng = self.get_manager_object() return mng.monitoring_template() diff --git a/devapp/onu_register.py b/devapp/tasks.py similarity index 79% rename from devapp/onu_register.py rename to devapp/tasks.py index c3118b7..b918033 100644 --- a/devapp/onu_register.py +++ b/devapp/tasks.py @@ -1,11 +1,14 @@ -#!/usr/bin/env python3 from typing import Iterable from subprocess import run +from celery import shared_task +from devapp.models import Device -def onu_register(devices: Iterable): +@shared_task +def onu_register(device_ids: Iterable[int]): with open('/etc/dhcp/macs.conf', 'w') as f: - for dev in devices: + for dev_id in device_ids: + dev = Device.objects.get(pk=dev_id) if not dev.has_attachable_to_subscriber() or dev.mac_addr is None: continue group_code = dev.group.code diff --git a/devapp/views.py b/devapp/views.py index 7781c75..8b6a71c 100644 --- a/devapp/views.py +++ b/devapp/views.py @@ -32,6 +32,7 @@ from guardian.decorators import \ from guardian.shortcuts import get_objects_for_user from .forms import DeviceForm, PortForm, DeviceExtraDataForm from .models import Device, Port, DeviceDBException, DeviceMonitoringException +from .tasks import onu_register class DevicesListView(LoginAdminPermissionMixin, @@ -91,7 +92,9 @@ class DeviceDeleteView(LoginAdminPermissionMixin, DeleteView): self.object.mac_addr or '-', self.object.comment or '-' )) - self.object.update_dhcp() + onu_register.delay( + tuple(dev.pk for dev in Device.objects.exclude(group=None).only('pk').iterator()) + ) except (DeviceDBException, PermissionError) as e: messages.error(request, e) messages.success(request, _('Device successfully deleted')) @@ -141,7 +144,9 @@ class DeviceUpdate(LoginAdminPermissionMixin, UpdateView): r = super().form_valid(form) # change device info in dhcpd.conf try: - self.object.update_dhcp() + onu_register.delay( + tuple(dev.pk for dev in Device.objects.exclude(group=None).only('pk').iterator()) + ) messages.success(self.request, _('Device info has been saved')) except PermissionError as e: messages.error(self.request, e) @@ -197,13 +202,16 @@ class DeviceCreateView(LoginAdminMixin, PermissionRequiredMixin, CreateView): r = super().form_valid(form) # change device info in dhcpd.conf try: - self.request.user.log(self.request.META, 'cdev', - 'ip %s, mac: %s, "%s"' % ( - self.object.ip_address, - self.object.mac_addr, - self.object.comment - )) - self.object.update_dhcp() + self.request.user.log( + self.request.META, 'cdev', + 'ip %s, mac: %s, "%s"' % ( + self.object.ip_address, + self.object.mac_addr, + self.object.comment + )) + onu_register.delay( + tuple(dev.pk for dev in Device.objects.exclude(group=None).only('pk').iterator()) + ) messages.success(self.request, _('Device info has been saved')) except PermissionError as e: messages.error(self.request, e)