Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.11 KB | None | 0 0
  1. from django.db import models
  2. from django.contrib.auth.models import User
  3. from django.contrib.sites.models import Site
  4. import datetime
  5.  
  6. CONTENT_TYPES = (
  7.     ('txt', 'text'),
  8.     ('img', 'image'),
  9.     ('vid', 'video'),
  10.     ('snd', 'sound'),
  11. )
  12.  
  13. FEATURE_TYPES = (
  14.     (0, 'share'),
  15.     (1, 'rate'),
  16.     (2, 'comment'),
  17.     (3, 'bookmark'),
  18.     (4, 'search'),
  19. )
  20.  
  21. FEATURE_LOOKUP = dict([(a[1], a[0]) for a in FEATURE_TYPES])
  22.  
  23. class DateAwareModel(models.Model):
  24.     inserted = models.DateTimeField(auto_now_add=True, editable=False)
  25.     updated = models.DateTimeField(auto_now=True, editable=False)    
  26.  
  27.     class Meta:
  28.         abstract = True
  29.  
  30. class UserAwareModel(models.Model):
  31.     user = models.ForeignKey(User)
  32.  
  33.     class Meta:
  34.         abstract = True
  35.  
  36. class Node(DateAwareModel,UserAwareModel):
  37.     relationships = models.ManyToManyField('self',through='Edge')
  38.     """
  39.    parent = models.ForeignKey('self',related_name="Parent")
  40.    child = models.ForeignKey('self',related_name="Child")
  41.    """
  42.  
  43. class Edge(models.Model):
  44.     parent = models.ForeignKey(Node,related_name="Parents")
  45.     child = models.ForeignKey(Node,related_name="Children")
  46.  
  47. class Comment(Node):
  48.     content = models.TextField(blank=True)
  49.  
  50.     def __unicode__(self):
  51.         return "CommentNode:" + self.content[:50]
  52.  
  53. class Tag(Node):
  54.     content = models.CharField(max_length=64)
  55.  
  56.     def __unicode__(self):
  57.         return "TagNode:" + self.content[:50]
  58.  
  59. class RBGroup(models.Model):
  60.     name = models.CharField(max_length=250)
  61.     short_name = models.CharField(max_length=25)
  62.     language = models.CharField(max_length=25,default="en")
  63.     blessed_tags = models.CharField(max_length=250,blank=True)
  64.     valid_domains = models.CharField(max_length=250,blank=True)
  65.  
  66.     # black/whitelist fields
  67.     anno_whitelist = models.CharField(max_length=250,blank=True)
  68.     img_whitelist = models.CharField(max_length=250,blank=True)
  69.     img_blacklist = models.CharField(max_length=250,blank=True)
  70.     no_readr = models.CharField(max_length=250,blank=True)
  71.    
  72.     # logo fields
  73.     logo_url_sm = models.URLField(blank=True,verify_exists=False)
  74.     logo_url_med = models.URLField(blank=True,verify_exists=False)
  75.     logo_url_lg = models.URLField(blank=True,verify_exists=False)
  76.    
  77.     # css
  78.     css_url = models.URLField(blank=True,verify_exists=False)
  79.    
  80.     def get_feature(self, name):
  81.         try:
  82.             feature_id = FEATURE_LOOKUP[name]
  83.         except:
  84.             raise Exception("Invalid feature name")
  85.         try:
  86.             return self.feature_set.values('text','images','flash').get(kind=feature_id)
  87.         except:
  88.             raise Exception("Feature instance not yet created")
  89.  
  90.     # TODO: write code to overwrite save method + create feature instances on
  91.     # the first save of the model.
  92.     # def save(self):
  93.  
  94.     def __unicode__(self):
  95.         return self.name
  96.        
  97.     class Meta:
  98.         ordering = ['short_name']
  99.  
  100. class Feature(models.Model):
  101.     kind = models.PositiveSmallIntegerField(choices=FEATURE_TYPES,default=1)
  102.     text = models.BooleanField()
  103.     images = models.BooleanField()
  104.     flash = models.BooleanField()
  105.     rb_group = models.ForeignKey(RBGroup,default=1)
  106.  
  107.     def __unicode__(self):
  108.         return (self.rb_group.short_name +":"+  FEATURE_TYPES[self.kind][1])
  109.  
  110. class RBSite(Site):
  111.     rb_group = models.ForeignKey(RBGroup)
  112.     include_selectors = models.CharField(max_length=250, blank=True)
  113.     no_rdr_selectors = models.CharField(max_length=250, blank=True)
  114.     css = models.URLField(blank=True)
  115.  
  116. class RBPage(models.Model):
  117.     rb_site = models.ForeignKey(RBSite)
  118.     url = models.URLField(verify_exists=False)
  119.     canonical_url = models.URLField(verify_exists=False)
  120.  
  121.     def __unicode__(self):
  122.         return self.canonical_url
  123.  
  124. class ContentNode(Node):
  125.     content_type = models.CharField(max_length=3, choices=CONTENT_TYPES)
  126.     content = models.TextField()
  127.     rb_page = models.ForeignKey(RBPage)
  128.     hash = models.CharField(max_length=32, editable=True)
  129.  
  130.     def __unicode__(self):
  131.         return "ContentNode:" + self.hash + ":" + self.content[:50]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement