##// END OF EJS Templates
Speed up loading by getting all favorite tags at once (BB-65)
neko259 -
r996:1e1098b4 default
parent child Browse files
Show More
@@ -1,148 +1,146 b''
1 1 from django.shortcuts import get_object_or_404
2 2 from boards.models import Tag
3 3
4 4 __author__ = 'neko259'
5 5
6 6 SESSION_SETTING = 'setting'
7 7
8 8 # Remove this, it is not used any more cause there is a user's permission
9 9 PERMISSION_MODERATE = 'moderator'
10 10
11 11 SETTING_THEME = 'theme'
12 12 SETTING_FAVORITE_TAGS = 'favorite_tags'
13 13 SETTING_HIDDEN_TAGS = 'hidden_tags'
14 14 SETTING_PERMISSIONS = 'permissions'
15 15 SETTING_USERNAME = 'username'
16 16 SETTING_LAST_NOTIFICATION_ID = 'last_notification'
17 17
18 18 DEFAULT_THEME = 'md'
19 19
20 20
21 21 class SettingsManager:
22 22 """
23 23 Base settings manager class. get_setting and set_setting methods should
24 24 be overriden.
25 25 """
26 26 def __init__(self):
27 27 pass
28 28
29 29 def get_theme(self):
30 30 theme = self.get_setting(SETTING_THEME)
31 31 if not theme:
32 32 theme = DEFAULT_THEME
33 33 self.set_setting(SETTING_THEME, theme)
34 34
35 35 return theme
36 36
37 37 def set_theme(self, theme):
38 38 self.set_setting(SETTING_THEME, theme)
39 39
40 40 def has_permission(self, permission):
41 41 permissions = self.get_setting(SETTING_PERMISSIONS)
42 42 if permissions:
43 43 return permission in permissions
44 44 else:
45 45 return False
46 46
47 47 def get_setting(self, setting):
48 48 pass
49 49
50 50 def set_setting(self, setting, value):
51 51 pass
52 52
53 53 def add_permission(self, permission):
54 54 permissions = self.get_setting(SETTING_PERMISSIONS)
55 55 if not permissions:
56 56 permissions = [permission]
57 57 else:
58 58 permissions.append(permission)
59 59 self.set_setting(SETTING_PERMISSIONS, permissions)
60 60
61 61 def del_permission(self, permission):
62 62 permissions = self.get_setting(SETTING_PERMISSIONS)
63 63 if not permissions:
64 64 permissions = []
65 65 else:
66 66 permissions.remove(permission)
67 67 self.set_setting(SETTING_PERMISSIONS, permissions)
68 68
69 69 def get_fav_tags(self):
70 70 tag_names = self.get_setting(SETTING_FAVORITE_TAGS)
71 71 tags = []
72 72 if tag_names:
73 for tag_name in tag_names:
74 tag = get_object_or_404(Tag, name=tag_name)
75 tags.append(tag)
73 tags = Tag.objects.filter(name__in=tag_names)
76 74 return tags
77 75
78 76 def add_fav_tag(self, tag):
79 77 tags = self.get_setting(SETTING_FAVORITE_TAGS)
80 78 if not tags:
81 79 tags = [tag.name]
82 80 else:
83 81 if not tag.name in tags:
84 82 tags.append(tag.name)
85 83
86 84 tags.sort()
87 85 self.set_setting(SETTING_FAVORITE_TAGS, tags)
88 86
89 87 def del_fav_tag(self, tag):
90 88 tags = self.get_setting(SETTING_FAVORITE_TAGS)
91 89 if tag.name in tags:
92 90 tags.remove(tag.name)
93 91 self.set_setting(SETTING_FAVORITE_TAGS, tags)
94 92
95 93 def get_hidden_tags(self):
96 94 tag_names = self.get_setting(SETTING_HIDDEN_TAGS)
97 95 tags = []
98 96 if tag_names:
99 97 for tag_name in tag_names:
100 98 tag = get_object_or_404(Tag, name=tag_name)
101 99 tags.append(tag)
102 100
103 101 return tags
104 102
105 103 def add_hidden_tag(self, tag):
106 104 tags = self.get_setting(SETTING_HIDDEN_TAGS)
107 105 if not tags:
108 106 tags = [tag.name]
109 107 else:
110 108 if not tag.name in tags:
111 109 tags.append(tag.name)
112 110
113 111 tags.sort()
114 112 self.set_setting(SETTING_HIDDEN_TAGS, tags)
115 113
116 114 def del_hidden_tag(self, tag):
117 115 tags = self.get_setting(SETTING_HIDDEN_TAGS)
118 116 if tag.name in tags:
119 117 tags.remove(tag.name)
120 118 self.set_setting(SETTING_HIDDEN_TAGS, tags)
121 119
122 120
123 121 class SessionSettingsManager(SettingsManager):
124 122 """
125 123 Session-based settings manager. All settings are saved to the user's
126 124 session.
127 125 """
128 126 def __init__(self, session):
129 127 SettingsManager.__init__(self)
130 128 self.session = session
131 129
132 130 def get_setting(self, setting):
133 131 if setting in self.session:
134 132 return self.session[setting]
135 133 else:
136 134 return None
137 135
138 136 def set_setting(self, setting, value):
139 137 self.session[setting] = value
140 138
141 139
142 140 def get_settings_manager(request) -> SettingsManager:
143 141 """
144 142 Get settings manager based on the request object. Currently only
145 143 session-based manager is supported. In the future, cookie-based or
146 144 database-based managers could be implemented.
147 145 """
148 146 return SessionSettingsManager(request.session)
General Comments 0
You need to be logged in to leave comments. Login now