blob: 31691857e41c3e79c5ea02362b16d15e434c5c55 [file] [log] [blame]
from core.models.plcorebase import *
from models_decl import VBBUService_decl
from models_decl import VBBUTenant_decl
class VBBUService(VBBUService_decl):
class Meta:
proxy = True
class VBBUTenant(VBBUTenant_decl):
class Meta:
proxy = True
def __init__(self, *args, **kwargs):
vbbuservice = VBBUService.get_service_objects().all()
if vbbuservice:
self._meta.get_field(
"provider_service").default = vbbuservice[0].id
super(VBBUTenant, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs):
super(VBBUTenant, self).save(*args, **kwargs)
# This call needs to happen so that an instance is created for this
# tenant is created in the slice. One instance is created per tenant.
model_policy_vbbutenant(self.pk)
def delete(self, *args, **kwargs):
# Delete the instance that was created for this tenant
self.cleanup_container()
super(VBBUTenant, self).delete(*args, **kwargs)
def model_policy_vbbutenant(pk):
# This section of code is atomic to prevent race conditions
with transaction.atomic():
# We find all of the tenants that are waiting to update
tenant = VBBUTenant.objects.select_for_update().filter(pk=pk)
if not tenant:
return
# Since this code is atomic it is safe to always use the first tenant
tenant = tenant[0]
tenant.manage_container()