| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- from django.core.exceptions import ValidationError
- from django.core.validators import MinValueValidator, MaxValueValidator
- from django.db import models
- from netaddr import AddrFormatError, EUI, mac_unix_expanded
- class ASNField(models.BigIntegerField):
- description = "32-bit ASN field"
- default_validators = [
- MinValueValidator(1),
- MaxValueValidator(4294967295),
- ]
- class mac_unix_expanded_uppercase(mac_unix_expanded):
- word_fmt = '%.2X'
- class MACAddressField(models.Field):
- description = "PostgreSQL MAC Address field"
- def python_type(self):
- return EUI
- def from_db_value(self, value, expression, connection):
- return self.to_python(value)
- def to_python(self, value):
- if value is None:
- return value
- try:
- return EUI(value, version=48, dialect=mac_unix_expanded_uppercase)
- except AddrFormatError as e:
- raise ValidationError("Invalid MAC address format: {}".format(value))
- def db_type(self, connection):
- return 'macaddr'
- def get_prep_value(self, value):
- if not value:
- return None
- return str(self.to_python(value))
|