Skip to content

Instantly share code, notes, and snippets.

@kolobaev
Created August 9, 2019 12:49
Show Gist options
  • Save kolobaev/9be93ad273cd838d40f1463989ff942a to your computer and use it in GitHub Desktop.
Save kolobaev/9be93ad273cd838d40f1463989ff942a to your computer and use it in GitHub Desktop.
@transaction.atomic()
def save(self, device, full=True):
manufacturer_id = self._get_manufacturer_id(device.manufacturer)
device_type_id = self._get_device_type_id(device.model, manufacturer_id)
key = dict(
site_id=AVITO_SITE_ID,
device_type_id=device_type_id,
device_role_id=self._get_device_role_id('server'),
)
defaults = dict(
name=device.host,
serial=device.serial,
processor_count=device.processor_count,
mem_size_gb=device.mem_size_gb,
)
if (device.host in self.device_name_set) and (device.serial not in self.device_serial_set):
key['name'] = device.host
else:
key['serial'] = device.serial
try:
db_device = Device.objects.get(**key)
need_update = False
for db_name, item_value in defaults.items():
attr = getattr(db_device, db_name)
if attr != item_value:
setattr(db_device, db_name, item_value)
need_update = True
if need_update:
db_device.save()
except Device.DoesNotExist:
key.update(defaults)
db_device = Device.objects.create(**key)
if full:
self.save_interfaces(db_device, device) # XXX not id
self.save_hardware(db_device.id, device)
self.save_containers(db_device.id, device.containers)
self.save_firmware(db_device.id, device.firmware)
self.save_tags(db_device, device.tags)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment