1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
from base import *
class VoteManager(models.Manager):
def get_up_vote_count_from_user(self, user):
if user is not None:
return self.filter(user=user, vote=1).count()
else:
return 0
def get_down_vote_count_from_user(self, user):
if user is not None:
return self.filter(user=user, vote=-1).count()
else:
return 0
def get_votes_count_today_from_user(self, user):
if user is not None:
today = datetime.date.today()
return self.filter(user=user, voted_at__range=(today, today + datetime.timedelta(1))).count()
else:
return 0
class Vote(MetaContent, UserContent):
VOTE_UP = +1
VOTE_DOWN = -1
VOTE_CHOICES = (
(VOTE_UP, u'Up'),
(VOTE_DOWN, u'Down'),
)
vote = models.SmallIntegerField(choices=VOTE_CHOICES)
voted_at = models.DateTimeField(default=datetime.datetime.now)
objects = VoteManager()
class Meta(MetaContent.Meta):
unique_together = ('content_type', 'object_id', 'user')
db_table = u'vote'
def __unicode__(self):
return '[%s] voted at %s: %s' %(self.user, self.voted_at, self.vote)
def is_upvote(self):
return self.vote == self.VOTE_UP
def is_downvote(self):
return self.vote == self.VOTE_DOWN
def is_opposite(self, vote_type):
assert(vote_type in (self.VOTE_UP, self.VOTE_DOWN))
return self.vote != vote_type
class FlaggedItemManager(models.Manager):
def get_flagged_items_count_today(self, user):
if user is not None:
today = datetime.date.today()
return self.filter(user=user, flagged_at__range=(today, today + datetime.timedelta(1))).count()
else:
return 0
class FlaggedItem(MetaContent, UserContent):
"""A flag on a Question or Answer indicating offensive content."""
flagged_at = models.DateTimeField(default=datetime.datetime.now)
objects = FlaggedItemManager()
class Meta(MetaContent.Meta):
unique_together = ('content_type', 'object_id', 'user')
db_table = u'flagged_item'
def __unicode__(self):
return '[%s] flagged at %s' %(self.user, self.flagged_at)
class Comment(MetaContent, UserContent):
comment = models.CharField(max_length=300)
added_at = models.DateTimeField(default=datetime.datetime.now)
class Meta(MetaContent.Meta):
ordering = ('-added_at',)
db_table = u'comment'
def save(self,**kwargs):
super(Comment,self).save(**kwargs)
try:
ping_google()
except Exception:
logging.debug('problem pinging google did you register you sitemap with google?')
def __unicode__(self):
return self.comment
|