X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fhpc%2Fmodels.py;h=1b7535fe58dbed28dab7a41bad7951dd9fc28ee3;hb=25f36240782d59077e97af0730748cdfb1be305a;hp=d257032857083abcc2d77b98db3c363065786c94;hpb=2d95e48d394480aa22596105c9ca469fb5c4c923;p=plstackapi.git diff --git a/planetstack/hpc/models.py b/planetstack/hpc/models.py index d257032..1b7535f 100644 --- a/planetstack/hpc/models.py +++ b/planetstack/hpc/models.py @@ -1,5 +1,5 @@ from django.db import models -from core.models import User +from core.models import User, Service, SingletonModel, PlCoreBase import os from django.db import models from django.forms.models import model_to_dict @@ -7,56 +7,32 @@ from django.forms.models import model_to_dict # Create your models here. -class HpcCoreBase(models.Model): - - created = models.DateTimeField(auto_now_add=True) - updated = models.DateTimeField(auto_now=True) +class HpcService(SingletonModel,Service): class Meta: - abstract = True app_label = "hpc" + verbose_name = "HPC Service" - def __init__(self, *args, **kwargs): - super(HpcCoreBase, self).__init__(*args, **kwargs) - self.__initial = self._dict - - @property - def diff(self): - d1 = self.__initial - d2 = self._dict - diffs = [(k, (v, d2[k])) for k, v in d1.items() if v != d2[k]] - return dict(diffs) - - @property - def has_changed(self): - return bool(self.diff) - - @property - def changed_fields(self): - return self.diff.keys() - - def get_field_diff(self, field_name): - return self.diff.get(field_name, None) - - def save(self, *args, **kwargs): - super(HpcCoreBase, self).save(*args, **kwargs) - - self.__initial = self._dict - - @property - def _dict(self): - return model_to_dict(self, fields=[field.name for field in - self._meta.fields]) +class ServiceProvider(PlCoreBase): + class Meta: + app_label = "hpc" - -class ServiceProvider(HpcCoreBase): + service_provider_id = models.IntegerField(null=True, blank=True) name = models.CharField(max_length=254,help_text="Service Provider Name") description = models.TextField(max_length=254,null=True, blank=True, help_text="Description of Service Provider") enabled = models.BooleanField(default=True) def __unicode__(self): return u'%s' % (self.name) -class ContentProvider(HpcCoreBase): +class ContentProvider(PlCoreBase): + class Meta: + app_label = "hpc" + + # legacy vicci content providers already have names. + CP_TO_ACCOUNT = {"ON.LAB": "onlabcp", + "Syndicate": "syndicatecp"} + + content_provider_id = models.IntegerField(null=True, blank=True) name = models.CharField(max_length=254) enabled = models.BooleanField(default=True) description = models.TextField(max_length=254,null=True, blank=True,help_text="Description of Content Provider") @@ -67,7 +43,15 @@ class ContentProvider(HpcCoreBase): def __unicode__(self): return u'%s' % (self.name) -class OriginServer(HpcCoreBase): + @property + def account(self): + return self.CP_TO_ACCOUNT.get(self.name, self.name) + +class OriginServer(PlCoreBase): + class Meta: + app_label = "hpc" + + origin_server_id = models.IntegerField(null=True, blank=True) url = models.URLField() contentProvider = models.ForeignKey(ContentProvider) @@ -80,13 +64,34 @@ class OriginServer(HpcCoreBase): def __unicode__(self): return u'%s' % (self.url) -class CDNPrefix(HpcCoreBase): +class CDNPrefix(PlCoreBase): + class Meta: + app_label = "hpc" + + cdn_prefix_id = models.IntegerField(null=True, blank=True) prefix = models.CharField(max_length=200, help_text="Registered Prefix for Domain") contentProvider = models.ForeignKey(ContentProvider) description = models.TextField(max_length=254,null=True, blank=True,help_text="Description of Content Provider") - defaultOriginServer = models.ForeignKey(OriginServer) + defaultOriginServer = models.ForeignKey(OriginServer, blank=True, null=True) enabled = models.BooleanField(default=True) def __unicode__(self): return u'%s' % (self.prefix) +class AccessMap(models.Model): + contentProvider = models.ForeignKey(ContentProvider) + name = models.CharField(max_length=64, help_text="Name of the Access Map") + description = models.TextField(null=True, blank=True,max_length=130) + map = models.FileField(upload_to="maps/", help_text="specifies which client requests are allowed") + + def __unicode__(self): return self.name + +class SiteMap(models.Model): + """ can be bound to a ContentProvider, ServiceProvider, or neither """ + contentProvider = models.ForeignKey(ContentProvider, blank=True, null=True) + serviceProvider = models.ForeignKey(ServiceProvider, blank=True, null=True) + name = models.CharField(max_length=64, help_text="Name of the Site Map") + description = models.TextField(null=True, blank=True,max_length=130) + map = models.FileField(upload_to="maps/", help_text="specifies how to map requests to hpc instances") + + def __unicode__(self): return self.name