diff options
Diffstat (limited to 'backend/models.py')
| -rw-r--r-- | backend/models.py | 165 |
1 files changed, 77 insertions, 88 deletions
diff --git a/backend/models.py b/backend/models.py index 6af8879..5a68429 100644 --- a/backend/models.py +++ b/backend/models.py @@ -5,35 +5,31 @@ from django.db import models from django.contrib import auth from django.contrib import admin +import json class SJSettingsModel(models.Model): """ ScannerJammer abstract settings model """ - settings = models.TextField(blank=True) + settings_text = models.TextField(blank=True) class Meta: abstract = True - def freeze_settings(self, settings_dict): - """ Serialize settings dictionary into settings text field - """ - self.settings = '\n'.join('%s\t%s' % (str(key), str(value)) for key, value in settings_dict.iteritems()) + @property + def settings(self): + if not self.settings_text: + return dict() + return json.loads(self.settings_text, parse_float=True, parse_int=True) - def thaw_settings(self): - """ Deserialize settings text field into settings dictionary - """ - settings_dict = {} - if self.settings: - for line in self.settings.split('\n'): - row = line.split('\t') - if len(row) == 2: - settings_dict[row[0]] = row[1] - return settings_dict + @settings.setter + def settings(self, settings): + if isinstance(settings, dict): + self.settings_text = json.dumps(settings) + + @settings.deleter + def settings(self): + self.settings_text = '{}' - def merge_settings(self, settings_dict): - """ Merge current setting with settings dictionary - """ - self.freeze_settings(self.thaw_settings().update(settings_dict)) class SJUserProfile(SJSettingsModel): """ ScannerJammer user model @@ -57,100 +53,93 @@ class SJUserProfile(SJSettingsModel): return "%s (%s)" % (self.username or self.user.username, self.nickname) return "%s" % (self.username or self.user.username) -class SJRoom(SJSettingsModel): - """ ScannerJammer room model - """ - name = models.CharField(max_length=32) - date = models.DateTimeField() - private = models.BooleanField(default=False) - tokbox = models.CharField(max_length=64) - - class Meta: - verbose_name = "SJ Room" - - def __unicode__(self): - return self.name +class SJUserProfileAdmin(admin.ModelAdmin): + list_display = ( + 'user', + 'nickname', + 'score', + 'access', + 'bio', + 'joindate', + 'seendate', + ) -class SJSiteModel(models.Model): - """ ScannerJammer abstract site base model +class SJUserActivity(models.Model): + """ ScannerJammer abstract user activity model """ user = models.ForeignKey(auth.models.User) - room = models.ForeignKey(SJRoom) - date = models.DateTimeField() - url = models.URLField(blank=True, verbose_name="URL") + datetime = models.DateTimeField(blank=True) class Meta: abstract = True - def __unicode__(self): - return self.url -class SJBackground(SJSiteModel): - """ ScannerJammer background model +class SJRoom(SJUserActivity, SJSettingsModel): + """ ScannerJammer room model """ + name = models.CharField(max_length=32) + private = models.BooleanField(default=False) + class Meta: - verbose_name = "SJ Background" + verbose_name = "SJ Room" -class SJURL(SJSiteModel): - """ ScannerJammer url model - """ - likes = models.IntegerField(default=0) + def __unicode__(self): + return self.name - class Meta: - verbose_name = "SJ URL" +class SJRoomAdmin(admin.ModelAdmin): + list_display = ( + 'name', + 'private', + 'user', + 'datetime', + ) -class SJVideo(SJSiteModel): - """ ScannerJammer video model +class SJContent(SJUserActivity, SJSettingsModel): + """ ScannerJammer model to encapsulate site content """ - title = models.CharField(max_length=100) - likes = models.IntegerField(default=0) - views = models.IntegerField(default=0) - removed = models.BooleanField(default=False) - thumbnail = models.CharField(max_length=64) + CONTENT_TYPE = ( + (u'url', u'URL'), + (u'html', u'HTML'), + (u'text', u'Plane Text'), + (u'image', u'Image'), + (u'video', u'Video'), + (u'audio', u'Audio'), + (u'background', u'Background'), + ) + + room = models.ForeignKey(SJRoom) + content_type = models.CharField(max_length=32, choices=CONTENT_TYPE) class Meta: - verbose_name = "SJ Video" + verbose_name = "SJ Content" def __unicode__(self): - return self.title + return '%s\'s %s' % (self.user, self.content_type) -class SJChat(SJSiteModel): - """ ScannerJammer chat model - """ - msg = models.TextField(verbose_name="Message") - class Meta: - verbose_name = "SJ Chat" +class SJContentAdmin(admin.ModelAdmin): + list_display = ( + 'room', + 'content_type', + 'settings_text', + ) -class SJLike(models.Model): +class SJLike(SJUserActivity): """ ScannerJammer like model """ - user = models.ForeignKey(auth.models.User) - video = models.ForeignKey(SJVideo) - url = models.ForeignKey(SJURL, verbose_name="URL") - date = models.DateTimeField() + content = models.ForeignKey(SJContent) class Meta: verbose_name = "SJ Like" -class SJSearchLog(models.Model): - """ SannerJammer search log - """ - date = models.DateTimeField() - query = models.CharField(max_length=255) - matches = models.IntegerField(default=0) - - class Meta: - verbose_name = "SJ Search Log" - - def __unicode__(self): - return '%s "%s" matched %d' % (self.date, self.query, self.matches) +class SJLikeAdmin(admin.ModelAdmin): + list_display = ( + 'user', + 'datetime', + 'content', + ) -admin.site.register(SJUserProfile) -admin.site.register(SJRoom) -admin.site.register(SJBackground) -admin.site.register(SJURL) -admin.site.register(SJVideo) -admin.site.register(SJChat) -admin.site.register(SJLike) -admin.site.register(SJSearchLog) +admin.site.register(SJUserProfile, SJUserProfileAdmin) +admin.site.register(SJRoom, SJRoomAdmin) +admin.site.register(SJContent, SJContentAdmin) +admin.site.register(SJLike, SJLikeAdmin) |
