-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathmodels.py
More file actions
executable file
·141 lines (112 loc) · 4.59 KB
/
models.py
File metadata and controls
executable file
·141 lines (112 loc) · 4.59 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
from django.db import models
from django.contrib.auth import get_user_model
import json
User = get_user_model()
class Question(models.Model):
uid = models.IntegerField()
category = models.CharField(max_length=200)
tutorial = models.CharField(max_length=200)
minute_range = models.CharField(max_length=10)
second_range = models.CharField(max_length=10)
title = models.CharField(max_length=200)
body = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
views = models.IntegerField(default=1)
status = models.IntegerField(default=1)
last_active = models.DateTimeField(null=True)
last_post_by = models.IntegerField(null=True)
spam = models.BooleanField(default=False)
approval_required = models.BooleanField(default=False)
approved_by = models.IntegerField(null=True)
date_approved = models.DateTimeField(auto_now_add=True)
# votes = models.IntegerField(default=0)
def user(self):
user = User.objects.get(id=self.uid)
return user.username
def last_post_user(self):
user = User.objects.get(id=self.last_post_by)
return user.username
class Meta:
get_latest_by = "date_created"
class QuestionVote(models.Model):
uid = models.IntegerField()
question = models.ForeignKey(Question, on_delete=models.CASCADE,)
class QuestionComment(models.Model):
uid = models.IntegerField()
question = models.ForeignKey(Question, on_delete=models.CASCADE,)
body = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
class Answer(models.Model):
uid = models.IntegerField()
question = models.ForeignKey(Question, on_delete=models.CASCADE,)
body = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
# votes = models.IntegerField(default=0)
def user(self):
user = User.objects.get(id=self.uid)
return user.username
class AnswerVote(models.Model):
uid = models.IntegerField()
answer = models.ForeignKey(Answer, on_delete=models.CASCADE,)
class AnswerComment(models.Model):
uid = models.IntegerField()
answer = models.ForeignKey(Answer, on_delete=models.CASCADE,)
body = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
def user(self):
user = User.objects.get(id=self.uid)
return user.username
class Notification(models.Model):
uid = models.IntegerField()
pid = models.IntegerField()
qid = models.IntegerField()
aid = models.IntegerField(default=0)
cid = models.IntegerField(default=0)
date_created = models.DateTimeField(auto_now_add=True)
def poster(self):
user = User.objects.get(id=self.pid)
return user.username
# CDEEP database created using inspectdb arg of manage.py
class SpamRule(models.Model):
KEYWORD = "keyword"
DOMAIN = "domain"
TYPES = [(KEYWORD, "Keyword"), (DOMAIN, "Domain / URL")]
type = models.CharField(max_length=10, choices=TYPES)
pattern = models.CharField(max_length=500)
score = models.IntegerField(default=1)
active = models.BooleanField(default=True)
notes = models.CharField(max_length=200, blank=True)
expires_at = models.DateTimeField(null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.type}: {self.pattern} ({self.score})"
class SpamLog(models.Model):
ACTIONS = [
("AUTO_DELETE", "Auto Deleted"),
("FLAGGED", "Flagged for Review"),
("APPROVED", "Approved"),
]
#question_id = models.IntegerField()
user_id = models.IntegerField(null=True, blank=True)
category = models.CharField(max_length=200, blank=True)
title = models.CharField(max_length=200, blank=True)
content = models.TextField(blank=True)
action = models.CharField(max_length=20, choices=ACTIONS)
spam_score = models.IntegerField()
confidence = models.CharField(max_length=20)
details = models.TextField(blank=True, null=True)
def set_details(self, data):
self.details = json.dumps(data)
def get_details(self):
try:
return json.loads(self.details)
except Exception:
return {}
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"Q{self.question_id} - {self.action} ({self.spam_score})"