doorcontrol: Add property on Door model to get associated DoorController

This commit is contained in:
Adam Goldsmith 2023-11-14 12:53:15 -05:00
parent a90cd39612
commit 300397b021
2 changed files with 12 additions and 9 deletions

View File

@ -1,15 +1,26 @@
from datetime import datetime from datetime import datetime
from django.conf import settings
from django.db import models from django.db import models
from django.db.models import ExpressionWrapper, F, Func, Q from django.db.models import ExpressionWrapper, F, Func, Q
from django.db.models.functions import Mod from django.db.models.functions import Mod
from django.utils import timezone from django.utils import timezone
from .hid.DoorController import DoorController
class Door(models.Model): class Door(models.Model):
name = models.CharField(max_length=64, unique=True) name = models.CharField(max_length=64, unique=True)
ip = models.GenericIPAddressField(protocol="IPv4") ip = models.GenericIPAddressField(protocol="IPv4")
@property
def controller(self) -> DoorController:
return DoorController(
self.ip,
settings.HID_DOOR_USERNAME,
settings.HID_DOOR_PASSWORD,
)
def __str__(self): def __str__(self):
return self.name return self.name

View File

@ -1,6 +1,5 @@
from datetime import datetime from datetime import datetime
from django.conf import settings
from django.db import transaction from django.db import transaction
from django.utils import timezone from django.utils import timezone
@ -9,7 +8,6 @@ from django_q.models import Schedule
from cmsmanage.django_q2_helper import ensure_scheduled from cmsmanage.django_q2_helper import ensure_scheduled
from doorcontrol.models import Door, HIDEvent from doorcontrol.models import Door, HIDEvent
from doorcontrol.hid.DoorController import DoorController
@transaction.atomic() @transaction.atomic()
@ -20,13 +18,7 @@ def getMessages(door: Door):
else: else:
last_ts = datetime(2010, 1, 1) last_ts = datetime(2010, 1, 1)
door_controller = DoorController( for events_page in door.controller.get_events(last_ts):
door.ip,
settings.HID_DOOR_USERNAME,
settings.HID_DOOR_PASSWORD,
)
for events_page in door_controller.get_events(last_ts):
print(f"Importing {len(events_page)} events for {door.name}") print(f"Importing {len(events_page)} events for {door.name}")
HIDEvent.objects.bulk_create( HIDEvent.objects.bulk_create(
(HIDEvent.from_xml_attributes(door, event.attrib) for event in events_page), (HIDEvent.from_xml_attributes(door, event.attrib) for event in events_page),