fix nonworking tabs displayed when adding user
[plstackapi.git] / planetstack / hpc / models.py
index d257032..1b7535f 100644 (file)
@@ -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