Ticket #24513: user_model.py

File user_model.py, 4.3 KB (added by Christopher Schäpers, 4 years ago)

Model that should be migrated

Line 
1(testenv)kondou:project/ (master) $ cat project/models/user_model.py
2from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Group, PermissionsMixin
3from django.core import mail, validators
4from django.conf import settings
5from django.core.urlresolvers import reverse
6from django.db import models
7from django.utils import timezone, translation
8from django.utils.translation import ugettext_lazy
9import re
10
11from project.dbutilities import date_in_one_month
12
13
14class UserManager(BaseUserManager):
15    def create_user(self, username, email, password=None, to_activate=False, languagecode="en-us"):
16        pass
17
18    def create_superuser(self, username, email, password):
19        pass
20
21class User(PermissionsMixin, AbstractBaseUser):
22    class Meta:
23        get_latest_by = "date_joined"
24
25    username = models.CharField(
26        ugettext_lazy('username'), max_length=30, unique=True,
27        help_text=ugettext_lazy('30 characters or less. Letters, numbers and ./+/-/_ characters are allowed'),
28        validators=[
29            validators.RegexValidator(re.compile('^[\w.+-]+$'), ugettext_lazy('Invalid username.'), 'invalid')
30        ]
31    )
32    displayname = models.CharField(max_length=150, blank=True)
33    email = models.EmailField()
34    email_bounced = models.BooleanField(
35        default=False,
36        help_text="Whether a mail to this email bounced, and no more mail should be sent to this"
37    )
38    email_complained = models.BooleanField(
39        default=False,
40        help_text="Whether this email complained, meaning no mail, other than pwreset mails should be sent"
41    )
42    banned = models.BooleanField(default=False)
43    active = models.BooleanField(default=True)
44    date_joined = models.DateField(auto_now_add=True)
45    lastpwchange = models.DateTimeField(auto_now_add=True)
46    follows = models.ManyToManyField('self', symmetrical=False, related_name="following")
47    ignores = models.ManyToManyField(
48        'self', symmetrical=False, related_name="ignoring",
49        help_text=ugettext_lazy(
50            "Ignored means you don't get messages anymore from this user, but for them their messages seem to arrive."
51        )
52    )
53    blocks = models.ManyToManyField(
54        'self', symmetrical=False, related_name="blocking",
55        help_text=ugettext_lazy(
56            "Blocked means you don't get messages anymore from this user and they will see a \"You're blocked\" "
57            "message on trying to message you. They also can't comment on your gallerys either."
58        )
59    )
60    monetization_enabled = models.BooleanField(default=False)
61    monetization_in_queue = models.BooleanField(default=False)
62    countrycode = models.CharField(max_length=10, blank=True)
63    languagecode = models.CharField(max_length=10, blank=True)
64    payment_credit = models.FloatField(default=0)
65    avatar = models.CharField(max_length=10, unique=True, blank=True, null=True)
66    default_moderators = models.ManyToManyField('self', related_name="default_moderators")
67    uploader = models.BooleanField(default=False)
68    unread_messages = models.IntegerField(default=0)
69
70    USERNAME_FIELD = 'username'
71    REQUIRED_FIELDS = ['email']
72    objects = UserManager()
73
74    # Required methods
75
76    def get_full_name(self):
77        if self.displayname != '':
78            return self.displayname
79        else:
80            return self.username
81
82    def get_short_name(self):
83        return self.username
84
85    def is_active(self):
86        return self.active
87
88    # -- Own methods --
89
90    # Administrative
91
92    def is_banned(self):
93        return self.banned
94
95    def set_password(self, raw_password):
96        self.lastpwchange = timezone.now()
97        super().set_password(raw_password)
98
99    def set_countrycode(self, code):
100        self.countrycode = code
101        self.save()
102
103    def set_languagecode(self, code):
104        self.languagecode = code
105        self.save()
106
107    # Other
108
109    def get_url(self):
110        return reverse('userview', kwargs={'username': self.username})
111
112
113class AccountActivation(models.Model):
114    user = models.OneToOneField(User, primary_key=True)
115    token = models.CharField(
116        max_length=10, unique=True,
117        validators=[validators.RegexValidator(
118            re.compile('^[abcdefghijklmnopqrstuvwxyz\d]{10}$'), 'Invalid key', 'invalid'
119        )]
120    )
121    used = models.BooleanField(default=False)
122    expiry = models.DateField(default=date_in_one_month)
Back to Top