Advertisement
Guest User

Untitled

a guest
Jul 27th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.65 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 Node(DateAwareModel,UserAwareModel):
  34.     parent = models.ForeignKey(
  35.         'self',
  36.         related_name='children',
  37.         blank=True,
  38.         null=True)
  39.  
  40. class Comment(Node):
  41.     content = models.TextField(blank=True)
  42.  
  43. class Tag(Node):
  44.     content = models.CharField(max_length=64)
  45.  
  46. class RBGroup(models.Model):
  47.     name = models.CharField(max_length=250)
  48.     short_name = models.CharField(max_length=25)
  49.     language = models.CharField(max_length=25,default="en")
  50.     blessed_tags = models.CharField(max_length=250,blank=True)
  51.     valid_domains = models.CharField(max_length=250,blank=True)
  52.  
  53.     # black/whitelist fields
  54.     anno_whitelist = models.CharField(max_length=250,blank=True)
  55.     img_whitelist = models.CharField(max_length=250,blank=True)
  56.     img_blacklist = models.CharField(max_length=250,blank=True)
  57.     no_readr = models.CharField(max_length=250,blank=True)
  58.    
  59.     # logo fields
  60.     logo_url_sm = models.URLField(blank=True,verify_exists=False)
  61.     logo_url_med = models.URLField(blank=True,verify_exists=False)
  62.     logo_url_lg = models.URLField(blank=True,verify_exists=False)
  63.    
  64.     # css
  65.     css_url = models.URLField(blank=True,verify_exists=False)
  66.    
  67.     def get_feature(self, name):
  68.         try:
  69.             feature_id = FEATURE_LOOKUP[name]
  70.         except:
  71.             raise Exception("Invalid feature name")
  72.         try:
  73.             return self.feature_set.values('text','images','flash').get(kind=feature_id)
  74.         except:
  75.             raise Exception("Feature instance not yet created")
  76.  
  77.     # TODO: write code to overwrite save method + create feature instances on
  78.     # the first save of the model.
  79.     # def save(self):
  80.  
  81.     def __unicode__(self):
  82.         return self.name
  83.        
  84.     class Meta:
  85.         ordering = ['short_name']
  86.  
  87. class Feature(models.Model):
  88.     kind = models.PositiveSmallIntegerField(choices=FEATURE_TYPES,default=1)
  89.     text = models.BooleanField()
  90.     images = models.BooleanField()
  91.     flash = models.BooleanField()
  92.     rb_group = models.ForeignKey(RBGroup,default=1)
  93.  
  94.     def __unicode__(self):
  95.         return (self.rb_group.short_name +":"+  FEATURE_TYPES[self.kind][1])
  96.  
  97. class RBSite(Site):
  98.     rb_group = models.ForeignKey(RBGroup)
  99.     include_selectors = models.CharField(max_length=250, blank=True)
  100.     no_rdr_selectors = models.CharField(max_length=250, blank=True)
  101.     css = models.URLField(blank=True)
  102.  
  103. class RBPage(models.Model):
  104.     rb_site = models.ForeignKey(RBSite)
  105.     url = models.URLField(verify_exists=False)
  106.     canonical_url = models.URLField(verify_exists=False)
  107.  
  108.     def __unicode__(self):
  109.         return self.canonical_url
  110.  
  111. class ContentNode(DateAwareModel):
  112.     user = models.ForeignKey(User)
  113.     content_type = models.CharField(max_length=3, choices=CONTENT_TYPES)
  114.     rb_page = models.ForeignKey(RBPage)
  115.     hash = models.CharField(max_length=32, editable=True)
  116.  
  117.     def __unicode__(self):
  118.         return self.hash
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement