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
# 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")
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)
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