diff --git a/beat/web/accounts/models.py b/beat/web/accounts/models.py index 42e4c8c6a354b3c7738bbd1ae0f1d1db88b2e541..7e272e8969f96ece4d8bef053433d7cf03e28501 100644 --- a/beat/web/accounts/models.py +++ b/beat/web/accounts/models.py @@ -71,7 +71,7 @@ class SupervisionTrack(models.Model): last_validation_date = models.DateTimeField(null=True, blank=True) supervision_key = models.CharField(max_length=40, null=True, blank=True) - def __unicode__(self): + def __str__(self): return u"Supervisor: %s, Supervisee, %s, Validity: %s" % ( self.supervisor.username, self.supervisee.username, @@ -123,8 +123,8 @@ class Profile(models.Model): objects = ProfileManager() - def __unicode__(self): - return u"User: %s" % self.user.username + def __str__(self): + return "User: %s" % self.user.username def _generate_current_supervision_key(self): length = 40 diff --git a/beat/web/navigation/models.py b/beat/web/navigation/models.py index a8136f1c79b1e36e8f1bd4cc32725ed5db7e8903..2b87891beb0aa972f40ee0ca6ce6d7b1bea319df 100644 --- a/beat/web/navigation/models.py +++ b/beat/web/navigation/models.py @@ -29,19 +29,15 @@ from django.db import models from django.contrib.auth.models import User -#---------------------------------------------------------- +# ---------------------------------------------------------- class Agreement(models.Model): user = models.OneToOneField(User) version = models.PositiveIntegerField( - default=1, - help_text='Last version of the ToS the user has agreed with', + default=1, help_text="Last version of the ToS the user has agreed with" ) - def __unicode__(self): - return u"%s agrees with ToS version %d" % ( - self.user.username, - self.version - ) + def __str__(self): + return "%s agrees with ToS version %d" % (self.user.username, self.version) diff --git a/beat/web/team/models.py b/beat/web/team/models.py index 5814b7870669637acf6f729c0164a3285569f8db..a11823885d3239a90bbb075b2d7746ad52c4e8b4 100644 --- a/beat/web/team/models.py +++ b/beat/web/team/models.py @@ -33,7 +33,6 @@ from django.utils.translation import ugettext_lazy as _ class TeamManager(models.Manager): - def get_by_natural_key(self, owner_username, name): return self.get(owner__username=owner_username, name=name) @@ -42,13 +41,14 @@ class TeamManager(models.Manager): if user.is_anonymous(): return self.public() - query = Q(owner=user) |\ - (Q(privacy_level__in=[Team.MEMBERS, Team.PRIVATE]) & Q(members=user)) + query = Q(owner=user) | ( + Q(privacy_level__in=[Team.MEMBERS, Team.PRIVATE]) & Q(members=user) + ) if add_public: query |= Q(privacy_level=Team.PUBLIC) - return self.filter(query).distinct().order_by('privacy_level') + return self.filter(query).distinct().order_by("privacy_level") def public(self): return self.filter(privacy_level=Team.PUBLIC) @@ -56,49 +56,45 @@ class TeamManager(models.Manager): class Team(models.Model): - #_____ Constants __________ + # _____ Constants __________ PRIVATE = 0 MEMBERS = 1 - PUBLIC = 2 - + PUBLIC = 2 - #_____ Fields __________ + # _____ Fields __________ PRIVACY_LEVELS = [ - [PRIVATE, _('Private')], - [MEMBERS, _('Members only')], - [PUBLIC, _('Public')], + [PRIVATE, _("Private")], + [MEMBERS, _("Members only")], + [PUBLIC, _("Public")], ] - owner = models.ForeignKey(User) - name = models.CharField(max_length=32) - short_description = models.TextField(max_length=100, default='', blank=True) - members = models.ManyToManyField(User, related_name='teams', blank=True) - privacy_level = models.PositiveIntegerField(default=PRIVATE, choices=PRIVACY_LEVELS) + owner = models.ForeignKey(User) + name = models.CharField(max_length=32) + short_description = models.TextField(max_length=100, default="", blank=True) + members = models.ManyToManyField(User, related_name="teams", blank=True) + privacy_level = models.PositiveIntegerField(default=PRIVATE, choices=PRIVACY_LEVELS) objects = TeamManager() - - #_____ Meta parameters __________ + # _____ Meta parameters __________ class Meta: - unique_together = ['owner', 'name'] + unique_together = ["owner", "name"] - - #_____ Utilities __________ + # _____ Utilities __________ def natural_key(self): return (self.owner.username, self.name) - def total_shares(self, user=None): - '''Count number of objects shared with this team + """Count number of objects shared with this team If ``user`` is passed, counts objects shared with this team that the given user has access to. - ''' + """ used_at = 0 @@ -127,34 +123,34 @@ class Team(models.Model): used_at += self.shared_environments.for_user(user, add_public=True).count() used_at += self.shared_experiments.for_user(user, add_public=True).count() used_at += self.shared_librarys.for_user(user, add_public=True).count() - used_at += self.shared_plotterparameters.for_user(user, add_public=True).count() + used_at += self.shared_plotterparameters.for_user( + user, add_public=True + ).count() used_at += self.shared_plotters.for_user(user, add_public=True).count() used_at += self.shared_searchs.for_user(user, add_public=True).count() used_at += self.shared_toolchains.for_user(user, add_public=True).count() used_at += self.usable_algorithms.for_user(user, add_public=True).count() used_at += self.usable_librarys.for_user(user, add_public=True).count() - used_at += self.usable_plotterparameters.for_user(user, add_public=True).count() + used_at += self.usable_plotterparameters.for_user( + user, add_public=True + ).count() used_at += self.usable_plotters.for_user(user, add_public=True).count() return used_at - def deletable(self): return not self.total_shares() + # _____ Overrides __________ - #_____ Overrides __________ - - def __unicode__(self): + def __str__(self): return self.fullname() - - #_____ Methods __________ + # _____ Methods __________ def fullname(self): - return '%s/%s' % (self.owner.username, self.name) - + return "%s/%s" % (self.owner.username, self.name) def get_absolute_url(self): - return reverse('teams:view', args=(self.owner.username, self.name)) + return reverse("teams:view", args=(self.owner.username, self.name)) diff --git a/beat/web/ui/registration/admin.py b/beat/web/ui/registration/admin.py index f63b6ccbbee3e6299487be8491b97d452ac2d1b9..6768db83db1f8ebf4112b98a254f170c6b6f2ae5 100644 --- a/beat/web/ui/registration/admin.py +++ b/beat/web/ui/registration/admin.py @@ -32,17 +32,16 @@ from .models import PreregistrationProfile class RegistrationAdmin(admin.ModelAdmin): - list_display = ('__unicode__', 'activation_key_expired') - search_fields = ('user__username', 'user__first_name') + list_display = ("__str__", "activation_key_expired") + search_fields = ("user__username", "user__first_name") admin.site.register(RegistrationProfile, RegistrationAdmin) - class PreregistrationAdmin(admin.ModelAdmin): - list_display = ('first_name', 'last_name', 'email') - search_fields = ('first_name', 'last_name', 'email') + list_display = ("first_name", "last_name", "email") + search_fields = ("first_name", "last_name", "email") admin.site.register(PreregistrationProfile, PreregistrationAdmin) diff --git a/beat/web/ui/registration/models.py b/beat/web/ui/registration/models.py index 08c488ba323af084f3d2b4c2291ff117211a3004..b6d584f13835775e6b46907a44b1a79bd61ef5cc 100644 --- a/beat/web/ui/registration/models.py +++ b/beat/web/ui/registration/models.py @@ -29,6 +29,7 @@ import datetime import random import re import hashlib + try: from urlparse import urlparse except ImportError: @@ -38,14 +39,13 @@ from django.conf import settings from django.contrib.auth.models import User from django.db import models from django.db import transaction -from django.template import loader from django.utils.translation import ugettext_lazy as _ from ...accounts.models import SupervisionTrack from ...accounts.models import Profile from ...utils import mail -SHA1_RE = re.compile('^[a-f0-9]{40}$') +SHA1_RE = re.compile("^[a-f0-9]{40}$") class RegistrationManager(models.Manager): @@ -57,6 +57,7 @@ class RegistrationManager(models.Manager): keys), and for cleaning out expired inactive accounts. """ + def activate_user(self, activation_key): """ Validate an activation key and activate the corresponding @@ -111,44 +112,56 @@ class RegistrationManager(models.Manager): if user.profile.is_supervisor: # Send email to beat admins parsed_url = urlparse(settings.URL_PREFIX) - server_address = '%s://%s' % (parsed_url.scheme, parsed_url.hostname) + server_address = "%s://%s" % ( + parsed_url.scheme, + parsed_url.hostname, + ) - context = { - 'supervisee': user, - 'prefix': server_address, - } + context = {"supervisee": user, "prefix": server_address} - beat_admins_email = settings.DEFAULT_FROM_EMAIL.split("<")[1].split(">")[0] + beat_admins_email = settings.DEFAULT_FROM_EMAIL.split("<")[1].split( + ">" + )[0] - mail.send_email('registration/mail.beatadmin_supervisor_validation.subject.txt', - 'registration/mail.beatadmin_supervisor_validation.message.txt', - context, - [beat_admins_email]) + mail.send_email( + "registration/mail.beatadmin_supervisor_validation.subject.txt", + "registration/mail.beatadmin_supervisor_validation.message.txt", + context, + [beat_admins_email], + ) else: # Fetch Supervisor user from supervision track - supervisiontrack = SupervisionTrack.objects.get(supervision_key=user.profile.supervision_key) + supervisiontrack = SupervisionTrack.objects.get( + supervision_key=user.profile.supervision_key + ) supervisor_user = supervisiontrack.supervisor parsed_url = urlparse(settings.URL_PREFIX) - server_address = '%s://%s' % (parsed_url.scheme, parsed_url.hostname) + server_address = "%s://%s" % ( + parsed_url.scheme, + parsed_url.hostname, + ) context = { - 'supervisor': supervisor_user, - 'supervisee': user, - 'prefix': server_address, + "supervisor": supervisor_user, + "supervisee": user, + "prefix": server_address, } - mail.send_email('registration/mail.supervisor_validation.subject.txt', - 'registration/mail.supervisor_validation.message.txt', - context, - [supervisor_user.email]) + mail.send_email( + "registration/mail.supervisor_validation.subject.txt", + "registration/mail.supervisor_validation.message.txt", + context, + [supervisor_user.email], + ) return user return False - def create_inactive_user(self, username, first_name, last_name, password, - email, send_email=True): + def create_inactive_user( + self, username, first_name, last_name, password, email, send_email=True + ): """ Create a new, inactive ``User``, generate a ``RegistrationProfile`` and email its activation key to the @@ -198,19 +211,21 @@ class RegistrationManager(models.Manager): if send_email: parsed_url = urlparse(settings.URL_PREFIX) - server_address = '%s://%s' % (parsed_url.scheme, parsed_url.hostname) + server_address = "%s://%s" % (parsed_url.scheme, parsed_url.hostname) context = { - 'activation_key': registration_profile.activation_key, - 'expiration_days': settings.ACCOUNT_ACTIVATION_DAYS, - 'user': new_user, - 'prefix': server_address, + "activation_key": registration_profile.activation_key, + "expiration_days": settings.ACCOUNT_ACTIVATION_DAYS, + "user": new_user, + "prefix": server_address, } - mail.send_email('registration/mail.subject.txt', - 'registration/mail.message.txt', - context, - [new_user.email]) + mail.send_email( + "registration/mail.subject.txt", + "registration/mail.message.txt", + context, + [new_user.email], + ) user_registered.send(sender=self.model, user=new_user) return new_user @@ -227,10 +242,11 @@ class RegistrationManager(models.Manager): username and a random salt. """ - salt = hashlib.sha1(str(random.random()).encode()).hexdigest()[:5] - activation_key = hashlib.sha1((salt+user.username).encode()).hexdigest() - return self.create(user=user, - activation_key=activation_key) + salt = hashlib.sha1(str(random.random()).encode()).hexdigest()[:5] # nosec + activation_key = hashlib.sha1( # nosec + (salt + user.username).encode() + ).hexdigest() + return self.create(user=user, activation_key=activation_key) def delete_expired_users(self): """ @@ -295,19 +311,20 @@ class RegistrationProfile(models.Model): account registration and activation. """ + ACTIVATED = u"ALREADY_ACTIVATED" - user = models.OneToOneField(User, verbose_name=_('user')) - activation_key = models.CharField(_('activation key'), max_length=40) + user = models.OneToOneField(User, verbose_name=_("user")) + activation_key = models.CharField(_("activation key"), max_length=40) objects = RegistrationManager() class Meta: - verbose_name = _('registration profile') - verbose_name_plural = _('registration profiles') + verbose_name = _("registration profile") + verbose_name_plural = _("registration profiles") - def __unicode__(self): - return u"Registration information for %s" % self.user + def __str__(self): + return "Registration information for %s" % self.user def activation_key_expired(self): """ @@ -332,19 +349,24 @@ class RegistrationProfile(models.Model): """ expiration_date = datetime.timedelta(days=settings.ACCOUNT_ACTIVATION_DAYS) - return self.activation_key == self.ACTIVATED or \ - (self.user.date_joined + expiration_date <= datetime.datetime.now()) + return self.activation_key == self.ACTIVATED or ( + self.user.date_joined + expiration_date <= datetime.datetime.now() + ) + activation_key_expired.boolean = True class PreregistrationProfile(models.Model): first_name = models.CharField(max_length=30) - last_name = models.CharField(max_length=30) - email = models.CharField(max_length=75) + last_name = models.CharField(max_length=30) + email = models.CharField(max_length=75) class Meta: - verbose_name = _('preregistration profile') - verbose_name_plural = _('preregistration profiles') - - def __unicode__(self): - return u"Preregistration information for %s %s" % (self.first_name, self.last_name) + verbose_name = _("preregistration profile") + verbose_name_plural = _("preregistration profiles") + + def __str__(self): + return "Preregistration information for %s %s" % ( + self.first_name, + self.last_name, + )