From 9561d14362422876a308ea59c513c3c695a81413 Mon Sep 17 00:00:00 2001 From: "Maksim A. Boyko" Date: Thu, 19 Jul 2012 15:56:03 -0400 Subject: Backend: Add SJSettingsModels abstarct model --- backend/models.py | 62 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 14 deletions(-) (limited to 'backend/models.py') diff --git a/backend/models.py b/backend/models.py index d3964af..51efb82 100644 --- a/backend/models.py +++ b/backend/models.py @@ -5,15 +5,43 @@ from django.db import models from django.contrib import auth from django.contrib import admin +class SJSettingsModel(models.Model): + """ ScannerJammer abstract settings model + """ + settings = models.TextField(blank=True) + + class Meta: + abstract = True -class SJUserProfile(models.Model): - """ ScannerJammer user model """ + 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()) + + 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 + + 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 + """ user = models.OneToOneField(auth.models.User) nickname = models.CharField(max_length=32, blank=True) score = models.IntegerField(default=0, blank=True) access = models.IntegerField(default=0, blank=True) bio = models.TextField(blank=True) - settings = models.TextField(blank=True) # Backward compatibility fields username = models.CharField(max_length=32, blank=True) # see User.username password = models.CharField(max_length=32, blank=True) # see User.password (store password hash) @@ -28,13 +56,13 @@ class SJUserProfile(models.Model): return "%s (%s)" % (self.username or self.user.username, self.nickname) return "%s" % (self.username or self.user.username) -class SJRoom(models.Model): - """ ScannerJammer room model """ +class SJRoom(SJSettingsModel): + """ ScannerJammer room model + """ name = models.CharField(max_length=32) date = models.DateField() private = models.BooleanField(default=False) tokbox = models.CharField(max_length=64) - settings = models.TextField() class Meta: verbose_name = "SJ Room" @@ -43,7 +71,8 @@ class SJRoom(models.Model): return self.name class SJSiteModel(models.Model): - """ ScannerJammer site base model """ + """ ScannerJammer abstract site base model + """ user = models.ForeignKey(auth.models.User) room = models.ForeignKey(SJRoom) date = models.DateField() @@ -56,20 +85,22 @@ class SJSiteModel(models.Model): return self.url class SJBackground(SJSiteModel): - """ ScannerJammer background model """ - + """ ScannerJammer background model + """ class Meta: verbose_name = "SJ Background" class SJURL(SJSiteModel): - """ ScannerJammer url model """ + """ ScannerJammer url model + """ likes = models.IntegerField(default=0) class Meta: verbose_name = "SJ URL" class SJVideo(SJSiteModel): - """ ScannerJammer video model """ + """ ScannerJammer video model + """ title = models.CharField(max_length=100) likes = models.IntegerField(default=0) views = models.IntegerField(default=0) @@ -80,14 +111,16 @@ class SJVideo(SJSiteModel): verbose_name = "SJ Video" class SJChat(SJSiteModel): - """ ScannerJammer chat model """ + """ ScannerJammer chat model + """ msg = models.TextField(verbose_name="Message") class Meta: verbose_name = "SJ Chat" class SJLike(models.Model): - """ ScannerJammer like model """ + """ ScannerJammer like model + """ user = models.ForeignKey(auth.models.User) video = models.ForeignKey(SJVideo) url = models.ForeignKey(SJURL, verbose_name="URL") @@ -97,7 +130,8 @@ class SJLike(models.Model): verbose_name = "SJ Like" class SJSearchLog(models.Model): - """ SannerJammer search log """ + """ SannerJammer search log + """ date = models.DateField() query = models.CharField(max_length=255) matches = models.IntegerField(default=0) -- cgit v1.2.3-70-g09d2