settingsmanager.py
146 lines
| 3.9 KiB
| text/x-python
|
PythonLexer
|
r728 | from django.shortcuts import get_object_or_404 | ||
from boards.models import Tag | ||||
__author__ = 'neko259' | ||||
SESSION_SETTING = 'setting' | ||||
PERMISSION_MODERATE = 'moderator' | ||||
SETTING_THEME = 'theme' | ||||
SETTING_FAVORITE_TAGS = 'favorite_tags' | ||||
SETTING_HIDDEN_TAGS = 'hidden_tags' | ||||
SETTING_PERMISSIONS = 'permissions' | ||||
DEFAULT_THEME = 'md' | ||||
|
r730 | def get_settings_manager(request): | ||
""" | ||||
Get settings manager based on the request object. Currently only | ||||
session-based manager is supported. In the future, cookie-based or | ||||
database-based managers could be implemented. | ||||
""" | ||||
return SessionSettingsManager(request.session) | ||||
|
r728 | |||
|
r730 | |||
class SettingsManager: | ||||
""" | ||||
Base settings manager class. get_setting and set_setting methods should | ||||
be overriden. | ||||
""" | ||||
def __init__(self): | ||||
pass | ||||
|
r728 | |||
def get_theme(self): | ||||
theme = self.get_setting(SETTING_THEME) | ||||
if not theme: | ||||
theme = DEFAULT_THEME | ||||
self.set_setting(SETTING_THEME, theme) | ||||
return theme | ||||
def set_theme(self, theme): | ||||
self.set_setting(SETTING_THEME, theme) | ||||
def has_permission(self, permission): | ||||
permissions = self.get_setting(SETTING_PERMISSIONS) | ||||
if permissions: | ||||
return permission in permissions | ||||
else: | ||||
return False | ||||
def get_setting(self, setting): | ||||
|
r730 | pass | ||
|
r728 | |||
def set_setting(self, setting, value): | ||||
|
r730 | pass | ||
|
r728 | |||
def add_permission(self, permission): | ||||
permissions = self.get_setting(SETTING_PERMISSIONS) | ||||
if not permissions: | ||||
permissions = [permission] | ||||
else: | ||||
|
r729 | permissions.append(permission) | ||
self.set_setting(SETTING_PERMISSIONS, permissions) | ||||
def del_permission(self, permission): | ||||
permissions = self.get_setting(SETTING_PERMISSIONS) | ||||
if not permissions: | ||||
permissions = [] | ||||
else: | ||||
permissions.remove(permission) | ||||
|
r728 | self.set_setting(SETTING_PERMISSIONS, permissions) | ||
def get_fav_tags(self): | ||||
tag_names = self.get_setting(SETTING_FAVORITE_TAGS) | ||||
tags = [] | ||||
if tag_names: | ||||
for tag_name in tag_names: | ||||
tag = get_object_or_404(Tag, name=tag_name) | ||||
tags.append(tag) | ||||
return tags | ||||
def add_fav_tag(self, tag): | ||||
tags = self.get_setting(SETTING_FAVORITE_TAGS) | ||||
if not tags: | ||||
tags = [tag.name] | ||||
else: | ||||
if not tag.name in tags: | ||||
tags.append(tag.name) | ||||
|
r789 | |||
tags.sort() | ||||
|
r728 | self.set_setting(SETTING_FAVORITE_TAGS, tags) | ||
def del_fav_tag(self, tag): | ||||
tags = self.get_setting(SETTING_FAVORITE_TAGS) | ||||
if tag.name in tags: | ||||
tags.remove(tag.name) | ||||
self.set_setting(SETTING_FAVORITE_TAGS, tags) | ||||
def get_hidden_tags(self): | ||||
tag_names = self.get_setting(SETTING_HIDDEN_TAGS) | ||||
tags = [] | ||||
if tag_names: | ||||
for tag_name in tag_names: | ||||
tag = get_object_or_404(Tag, name=tag_name) | ||||
tags.append(tag) | ||||
return tags | ||||
def add_hidden_tag(self, tag): | ||||
tags = self.get_setting(SETTING_HIDDEN_TAGS) | ||||
if not tags: | ||||
tags = [tag.name] | ||||
else: | ||||
if not tag.name in tags: | ||||
tags.append(tag.name) | ||||
|
r789 | |||
tags.sort() | ||||
|
r728 | self.set_setting(SETTING_HIDDEN_TAGS, tags) | ||
def del_hidden_tag(self, tag): | ||||
tags = self.get_setting(SETTING_HIDDEN_TAGS) | ||||
if tag.name in tags: | ||||
tags.remove(tag.name) | ||||
self.set_setting(SETTING_HIDDEN_TAGS, tags) | ||||
|
r730 | |||
class SessionSettingsManager(SettingsManager): | ||||
""" | ||||
Session-based settings manager. All settings are saved to the user's | ||||
session. | ||||
""" | ||||
def __init__(self, session): | ||||
SettingsManager.__init__(self) | ||||
self.session = session | ||||
def get_setting(self, setting): | ||||
if setting in self.session: | ||||
return self.session[setting] | ||||
else: | ||||
return None | ||||
def set_setting(self, setting, value): | ||||
self.session[setting] = value | ||||