Commit cc39a5d3bc818233f24fda541ec5765d4e2c0beb

Authored by carol15022
Committed by Sergio Oliveira
1 parent 5008375b

Applying flake8

Signed-off-by: Lucas Moura <lucas.moura128@gmail.com>
Signed-off-by: Thiago Ribeiro <thiagitosouza@hotmail.com>
colab/badger/admin.py
1 1 # -*- coding: utf-8 -*-
2 2  
3 3 from django.contrib import admin
4   -from django.utils.translation import ugettext_lazy as _
5 4  
6 5 from .forms import BadgeForm
7 6 from .models import Badge, BadgeI18N
... ...
colab/badger/forms.py
1 1 # -*- coding: utf-8 -*-
2 2  
3   -import base64
4   -
5 3 from django import forms
6 4 from django.utils.translation import ugettext_lazy as _
7 5  
... ...
colab/badger/management/commands/rebuild_badges.py
1 1 # -*- coding: utf-8 -*-
2 2  
3   -from django.core.management.base import BaseCommand, CommandError
  3 +from django.core.management.base import BaseCommand
4 4 from haystack.query import SearchQuerySet
5 5  
6 6 from colab.accounts.models import User
... ... @@ -23,7 +23,7 @@ class Command(BaseCommand):
23 23 continue
24 24  
25 25 comparison = u'__{}'.format(badge.comparison) if badge.comparison \
26   - is not 'equal' else u''
  26 + is not 'equal' else u''
27 27  
28 28 key = u'{}{}'.format(
29 29 Badge.USER_ATTR_OPTS[badge.user_attr],
... ...
colab/badger/management/commands/update_badges.py
1 1 # -*- coding: utf-8 -*-
2 2  
3   -from django.core.management.base import BaseCommand, CommandError
  3 +from django.core.management.base import BaseCommand
4 4 from haystack.query import SearchQuerySet
5 5  
6 6 from colab.accounts.models import User
... ... @@ -8,6 +8,7 @@ from colab.badger.models import Badge
8 8  
9 9 import logging
10 10  
  11 +
11 12 class Command(BaseCommand):
12 13 help = "Update the user's badges"
13 14  
... ... @@ -23,7 +24,7 @@ class Command(BaseCommand):
23 24 continue
24 25  
25 26 comparison = u'__{}'.format(badge.comparison) if badge.comparison \
26   - is not 'equal' else u''
  27 + is not 'equal' else u''
27 28  
28 29 key = u'{}{}'.format(
29 30 Badge.USER_ATTR_OPTS[badge.user_attr],
... ...
colab/badger/models.py
... ... @@ -39,7 +39,7 @@ class Badge(models.Model):
39 39 image_base64 = models.TextField(_(u'Image'))
40 40 type = models.CharField(_(u'Type'), max_length=200, choices=TYPE_CHOICES)
41 41 user_attr = models.CharField(
42   - _(u'User attribute'),max_length=100,
  42 + _(u'User attribute'), max_length=100,
43 43 choices=USER_ATTR_CHOICES,
44 44 blank=True,
45 45 null=True,
... ...
colab/badger/tests.py
1   -from django.test import TestCase
  1 +# uncomment the import if you really use.
  2 +#from django.test import TestCase
2 3  
3 4 # Create your tests here.
... ...
colab/badger/utils.py
... ... @@ -2,27 +2,27 @@
2 2  
3 3 from django.db.models import Count
4 4  
5   -#from proxy.trac.models import (Revision, Ticket, Wiki,
6   -# WikiCollabCount, TicketCollabCount)
  5 +#from proxy.trac.models import (Ticket, Wiki)
  6 +#from proxy.trac.models import (Revision, WikiCollabCount, TicketCollabCount)
7 7 from colab.accounts.models import User
8 8  
9 9  
10   -def get_wiki_counters():
11   - return {author: count for author, count in
12   - WikiCollabCount.objects.values_list()}
  10 +#def get_wiki_counters():
  11 +# return {author: count for author, count in
  12 +# WikiCollabCount.objects.values_list()}
13 13  
14 14  
15   -def get_revision_counters():
16   - return {
17   - author: count for author, count in Revision.objects.values_list(
18   - 'author'
19   - ).annotate(count=Count('author'))
20   - }
  15 +#def get_revision_counters():
  16 +# return {
  17 +# author: count for author, count in Revision.objects.values_list(
  18 +# 'author'
  19 +# ).annotate(count=Count('author'))
  20 +# }
21 21  
22 22  
23   -def get_ticket_counters():
24   - return {author: count for author, count in
25   - TicketCollabCount.objects.values_list()}
  23 +#def get_ticket_counters():
  24 +# return {author: count for author, count in
  25 +# TicketCollabCount.objects.values_list()}
26 26  
27 27  
28 28 def get_users_counters():
... ...
colab/badger/views.py
1   -from django.shortcuts import render
  1 +# uncomment the import if you really use.
  2 +# from django.shortcuts import render
2 3  
3 4 # Create your views here.
... ...
colab/home/admin.py
1   -from django.contrib import admin
  1 +# uncomment the import if you really use.
  2 +# from django.contrib import admin
2 3  
3 4 # Register your models here.
... ...
colab/home/context_processors.py
... ... @@ -26,5 +26,6 @@ def ribbon(request):
26 26 }
27 27 }
28 28  
  29 +
29 30 def browserid_enabled(request):
30 31 return {'BROWSERID_ENABLED': getattr(settings, 'BROWSERID_ENABLED', False)}
... ...
colab/home/models.py
1   -from django.db import models
  1 +# uncomment the import if you really use.
  2 +#from django.db import models
2 3  
3 4 # Create your models here.
... ...
colab/home/tests.py
1   -from django.test import TestCase
  1 +# uncomment the import if you really use.
  2 +#from django.test import TestCase
2 3  
3 4 # Create your tests here.
... ...
colab/home/views.py
... ... @@ -15,8 +15,6 @@ from colab.super_archives.models import Thread
15 15  
16 16 def dashboard(request):
17 17 """Dashboard page"""
18   -
19   -
20 18 latest_threads = Thread.objects.all()[:6]
21 19 hottest_threads = Thread.highest_score.from_haystack()[:6]
22 20  
... ... @@ -40,7 +38,7 @@ def dashboard(request):
40 38 # count_types['wiki'] = sum([
41 39 # wiki.count for wiki in WikiCollabCount.objects.all()
42 40 # ])
43   -
  41 +
44 42 cache.set('home_chart', count_types)
45 43  
46 44 for key in count_types.keys():
... ...
colab/planet/admin.py
1   -from django.contrib import admin
  1 +# uncomment the import if you really use.
  2 +#from django.contrib import admin
2 3  
3 4 # Register your models here.
... ...
colab/planet/management/commands/update_planet.py
1 1  
2   -from django.conf import settings
  2 +from django.conf import settings
3 3  
4 4 from feedzilla.management.commands import feedzilla_update
5 5  
... ...
colab/planet/models.py
1   -from django.db import models
  1 +# uncomment the import if you really use.
  2 +#from django.db import models
2 3  
3 4 # Create your models here.
... ...
colab/planet/tests.py
1   -from django.test import TestCase
  1 +# uncomment the import if you really use.
  2 +#from django.test import TestCase
2 3  
3 4 # Create your tests here.
... ...
colab/planet/views.py
1   -from django.shortcuts import render
  1 +# uncomment the import if you really use.
  2 +#from django.shortcuts import render
2 3  
3 4 # Create your views here.
... ...
colab/search/admin.py
1   -from django.contrib import admin
  1 +# uncomment the import if you really use.
  2 +#from django.contrib import admin
2 3  
3 4 # Register your models here.
... ...
colab/search/forms.py
... ... @@ -8,8 +8,7 @@ from django.utils.translation import ugettext_lazy as _
8 8 from haystack.forms import SearchForm
9 9 from haystack.inputs import AltParser
10 10  
11   -from colab.accounts.models import User
12   -from colab.super_archives.models import Message, MailingList
  11 +from colab.super_archives.models import MailingList
13 12  
14 13  
15 14 class ColabSearchForm(SearchForm):
... ... @@ -90,8 +89,8 @@ class ColabSearchForm(SearchForm):
90 89 sqs = sqs.filter_or(**filter_sizes_exp)
91 90  
92 91 if self.cleaned_data['used_by']:
93   - sqs = sqs.filter_or(used_by__in=self.cleaned_data['used_by'].split())
94   -
  92 + sqs = sqs.filter_or(used_by__in=self.cleaned_data['used_by']
  93 + .split())
95 94  
96 95 if self.cleaned_data['q']:
97 96 q = unicodedata.normalize(
... ... @@ -103,7 +102,8 @@ class ColabSearchForm(SearchForm):
103 102 'pf': 'title^2.1 author^1.9 description^1.7',
104 103 'mm': '2<70%',
105 104  
106   - # Date boosting: http://wiki.apache.org/solr/FunctionQuery#Date_Boosting
  105 + # Date boosting:
  106 + # http://wiki.apache.org/solr/FunctionQuery#Date_Boosting
107 107 'bf': 'recip(ms(NOW/HOUR,modified),3.16e-11,1,1)^10',
108 108 }
109 109  
... ... @@ -124,8 +124,9 @@ class ColabSearchForm(SearchForm):
124 124 )
125 125  
126 126 if self.cleaned_data['modified_by']:
  127 + modified_by_data = self.cleaned_date['modified_by']
127 128 sqs = sqs.filter(
128   - fullname_and_username__contains=self.cleaned_data['modified_by']
  129 + fullname_and_username__contains=modified_by_data
129 130 )
130 131  
131 132 if self.cleaned_data['milestone']:
... ...
colab/search/models.py
1   -from django.db import models
  1 +# uncomment the import if you really use.
  2 +#from django.db import models
2 3  
3 4 # Create your models here.
... ...
colab/search/tests.py
1   -from django.test import TestCase
  1 +# uncomment the import if you really use.
  2 +#from django.test import TestCase
2 3  
3 4 # Create your tests here.
... ...
colab/search/views.py
... ... @@ -145,17 +145,19 @@ class ColabSearchView(SearchView):
145 145 size_choices = ()
146 146 used_by_choices = ()
147 147  
148   - if type_chosen == 'attachment':
149   - mimetype_choices = [(type_, display) for type_, display, mimelist_ in settings.FILE_TYPE_GROUPINGS]
150   - size_choices = [
151   - ('<500KB', u'< 500 KB'),
152   - ('500KB__10MB', u'>= 500 KB <= 10 MB'),
153   - ('>10MB', u'> 10 MB'),
154   - ]
155   - used_by_choices = set([
156   - (v, v) for v in Attachment.objects.values_list(
157   - 'used_by', flat=True)
158   - ])
  148 + #if type_chosen == 'attachment':
  149 + # mimetype_choices = [
  150 + # (type_, display)
  151 + # for type_, display, mimelist_ in settings.FILE_TYPE_GROUPINGS]
  152 + # size_choices = [
  153 + # ('<500KB', u'< 500 KB'),
  154 + # ('500KB__10MB', u'>= 500 KB <= 10 MB'),
  155 + # ('>10MB', u'> 10 MB'),
  156 + # ]
  157 + # used_by_choices = set([
  158 + # (v, v) for v in Attachment.objects.values_list('used_by',
  159 + # flat=True)
  160 + # ])
159 161  
160 162 mimetype_chosen = self.request.GET.get('mimetype')
161 163 size_chosen = self.request.GET.get('size')
... ...
colab/settings.py
... ... @@ -90,7 +90,8 @@ MEDIA_ROOT = &#39;/usr/share/nginx/colab/media/&#39;
90 90 STATIC_URL = '/static/'
91 91 MEDIA_URL = '/media/'
92 92  
93   -STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
  93 +STATICFILES_STORAGE = \
  94 + 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
94 95  
95 96  
96 97 # Normally you should not import ANYTHING from Django directly
... ...
colab/super_archives/admin.py
... ... @@ -11,13 +11,14 @@ class EmailAddressAdmin(admin.ModelAdmin):
11 11 'user__last_name',
12 12 )
13 13  
  14 +
14 15 class MessageAdmin(admin.ModelAdmin):
15 16 list_filter = ('spam', 'thread__mailinglist', 'received_time', )
16 17 search_fields = (
17 18 'id',
18 19 'subject',
19 20 'subject_clean',
20   - 'body',
  21 + 'body',
21 22 'from_address__real_name',
22 23 'from_address__address',
23 24 'from_address__user__first_name',
... ... @@ -40,14 +41,14 @@ class ThreadAdmin(admin.ModelAdmin):
40 41 'message__from_address__user__last_name',
41 42 'message__from_address__user__username',
42 43 )
43   -
  44 +
44 45 readonly_fields = (
45 46 'mailinglist',
46 47 'subject_token',
47 48 'latest_message',
48 49 'score',
49 50 )
50   -
  51 +
51 52 fields = (
52 53 'mailinglist',
53 54 'subject_token',
... ... @@ -55,10 +56,9 @@ class ThreadAdmin(admin.ModelAdmin):
55 56 'score',
56 57 'spam',
57 58 )
58   -
  59 +
59 60  
60 61 admin.site.register(MailingList)
61 62 admin.site.register(Thread, ThreadAdmin)
62 63 admin.site.register(Message, MessageAdmin)
63 64 admin.site.register(EmailAddress, EmailAddressAdmin)
64   -
... ...
colab/super_archives/apps.py
... ... @@ -7,4 +7,5 @@ class SuperArchivesConfig(AppConfig):
7 7 verbose_name = 'Super Archives'
8 8  
9 9 def ready(self):
10   - from . import signals
  10 + pass
  11 + #from . import signals
... ...
colab/super_archives/context_processors.py
1 1  
2 2 from .models import Message
3 3  
  4 +
4 5 def mailarchive(request):
5 6 context = {}
6 7  
7 8 try:
8   - context['last_imported_message'] = Message.objects.latest('received_time')
  9 + context['last_imported_message'] = \
  10 + Message.objects.latest('received_time')
9 11 except Message.DoesNotExist:
10 12 pass
11 13  
... ...
colab/super_archives/management/commands/message.py
... ... @@ -71,15 +71,15 @@ class Message(mailbox.mboxMessage):
71 71  
72 72 return u"\n".join(body).strip()
73 73  
74   - else: # if it is not multipart, the payload will be a string
75   - # representing the message body
  74 + else: # if it is not multipart, the payload will be a string
  75 + # representing the message body
76 76 body = unicode(self.get_payload(decode=True),
77 77 get_charset(self),
78 78 "replace")
79 79 return body.strip()
80 80  
81 81 def get_received_datetime(self):
82   - if not self.has_key('Received'):
  82 + if not self in ('Received'):
83 83 return None
84 84 # The time received should always be the last element
85 85 # in the `Received` attribute from the message headers
... ...
colab/super_archives/management/commands/update_keywords.py
1 1 #!/usr/bin/env python
2 2  
3   -from django.core.management.base import BaseCommand, CommandError
  3 +from django.core.management.base import BaseCommand
4 4 from colab.super_archives.models import Thread
5 5  
6 6  
... ...
colab/super_archives/managers.py
1 1 from django.db import models
2 2  
3 3 from haystack.query import SearchQuerySet
4   -import django
5 4  
6 5  
7 6 class NotSpamManager(models.Manager):
... ...
colab/super_archives/migrations/0001_initial.py
... ... @@ -20,11 +20,15 @@ class Migration(migrations.Migration):
20 20 migrations.CreateModel(
21 21 name='EmailAddress',
22 22 fields=[
23   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  23 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  24 + auto_created=True, primary_key=True)),
24 25 ('address', models.EmailField(unique=True, max_length=75)),
25   - ('real_name', models.CharField(db_index=True, max_length=64, blank=True)),
  26 + ('real_name', models.CharField(db_index=True, max_length=64,
  27 + blank=True)),
26 28 ('md5', models.CharField(max_length=32, null=True)),
27   - ('user', models.ForeignKey(related_name=b'emails', on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, null=True)),
  29 + ('user', models.ForeignKey(related_name=b'emails',
  30 + on_delete=django.db.models.deletion.SET_NULL,
  31 + to=settings.AUTH_USER_MODEL, null=True)),
28 32 ],
29 33 options={
30 34 'ordering': ('id',),
... ... @@ -34,11 +38,17 @@ class Migration(migrations.Migration):
34 38 migrations.CreateModel(
35 39 name='EmailAddressValidation',
36 40 fields=[
37   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  41 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  42 + auto_created=True, primary_key=True)),
38 43 ('address', models.EmailField(unique=True, max_length=75)),
39   - ('validation_key', models.CharField(default=colab.super_archives.models.get_validation_key, max_length=32, null=True)),
  44 + ('validation_key',
  45 + models.CharField(
  46 + default=colab.super_archives.models.get_validation_key,
  47 + max_length=32, null=True)),
40 48 ('created', models.DateTimeField(auto_now_add=True)),
41   - ('user', models.ForeignKey(related_name=b'emails_not_validated', to=settings.AUTH_USER_MODEL, null=True)),
  49 + ('user',
  50 + models.ForeignKey(related_name=b'emails_not_validated',
  51 + to=settings.AUTH_USER_MODEL, null=True)),
42 52 ],
43 53 options={
44 54 },
... ... @@ -47,7 +57,8 @@ class Migration(migrations.Migration):
47 57 migrations.CreateModel(
48 58 name='Keyword',
49 59 fields=[
50   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  60 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  61 + auto_created=True, primary_key=True)),
51 62 ('keyword', models.CharField(max_length=b'128')),
52 63 ('weight', models.IntegerField(default=0)),
53 64 ],
... ... @@ -59,7 +70,8 @@ class Migration(migrations.Migration):
59 70 migrations.CreateModel(
60 71 name='MailingList',
61 72 fields=[
62   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  73 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  74 + auto_created=True, primary_key=True)),
63 75 ('name', models.CharField(max_length=80)),
64 76 ('email', models.EmailField(max_length=75)),
65 77 ('description', models.TextField()),
... ... @@ -73,8 +85,10 @@ class Migration(migrations.Migration):
73 85 migrations.CreateModel(
74 86 name='MailingListMembership',
75 87 fields=[
76   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
77   - ('mailinglist', models.ForeignKey(to='super_archives.MailingList')),
  88 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  89 + auto_created=True, primary_key=True)),
  90 + ('mailinglist',
  91 + models.ForeignKey(to='super_archives.MailingList')),
78 92 ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
79 93 ],
80 94 options={
... ... @@ -84,14 +98,23 @@ class Migration(migrations.Migration):
84 98 migrations.CreateModel(
85 99 name='Message',
86 100 fields=[
87   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
88   - ('subject', models.CharField(help_text='Please enter a message subject', max_length=512, verbose_name='Subject', db_index=True)),
89   - ('subject_clean', models.CharField(max_length=512, db_index=True)),
90   - ('body', models.TextField(default=b'', help_text='Please enter a message body', verbose_name='Message body')),
  101 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  102 + auto_created=True, primary_key=True)),
  103 + ('subject',
  104 + models.CharField(help_text='Please enter a message subject',
  105 + max_length=512, verbose_name='Subject',
  106 + db_index=True)),
  107 + ('subject_clean', models.CharField(max_length=512,
  108 + db_index=True)),
  109 + ('body',
  110 + models.TextField(default=b'',
  111 + help_text='Please enter a message body',
  112 + verbose_name='Message body')),
91 113 ('received_time', models.DateTimeField(db_index=True)),
92 114 ('message_id', models.CharField(max_length=512)),
93 115 ('spam', models.BooleanField(default=False)),
94   - ('from_address', models.ForeignKey(to='super_archives.EmailAddress')),
  116 + ('from_address',
  117 + models.ForeignKey(to='super_archives.EmailAddress')),
95 118 ],
96 119 options={
97 120 'ordering': ('received_time',),
... ... @@ -103,11 +126,13 @@ class Migration(migrations.Migration):
103 126 migrations.CreateModel(
104 127 name='MessageBlock',
105 128 fields=[
106   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  129 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  130 + auto_created=True, primary_key=True)),
107 131 ('text', models.TextField()),
108 132 ('is_reply', models.BooleanField(default=False)),
109 133 ('order', models.IntegerField()),
110   - ('message', models.ForeignKey(related_name=b'blocks', to='super_archives.Message')),
  134 + ('message', models.ForeignKey(related_name=b'blocks',
  135 + to='super_archives.Message')),
111 136 ],
112 137 options={
113 138 'ordering': ('order',),
... ... @@ -117,7 +142,8 @@ class Migration(migrations.Migration):
117 142 migrations.CreateModel(
118 143 name='MessageMetadata',
119 144 fields=[
120   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  145 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  146 + auto_created=True, primary_key=True)),
121 147 ('name', models.CharField(max_length=512)),
122 148 ('value', models.TextField()),
123 149 ('Message', models.ForeignKey(to='super_archives.Message')),
... ... @@ -129,13 +155,29 @@ class Migration(migrations.Migration):
129 155 migrations.CreateModel(
130 156 name='Thread',
131 157 fields=[
132   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  158 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  159 + auto_created=True, primary_key=True)),
133 160 ('subject_token', models.CharField(max_length=512)),
134   - ('score', models.IntegerField(default=0, help_text='Thread score', verbose_name='Score')),
  161 + ('score', models.IntegerField(default=0,
  162 + help_text='Thread score',
  163 + verbose_name='Score')),
135 164 ('spam', models.BooleanField(default=False)),
136   - ('latest_message', models.OneToOneField(related_name=b'+', null=True, to='super_archives.Message', help_text='Latest message posted', verbose_name='Latest message')),
137   - ('mailinglist', models.ForeignKey(verbose_name='Mailing List', to='super_archives.MailingList', help_text='The Mailing List where is the thread')),
138   - ('tags', taggit.managers.TaggableManager(to='taggit.Tag', through='taggit.TaggedItem', help_text='A comma-separated list of tags.', verbose_name='Tags')),
  165 + ('latest_message',
  166 + models.OneToOneField(related_name=b'+',
  167 + null=True, to='super_archives.Message',
  168 + help_text='Latest message posted',
  169 + verbose_name='Latest message')),
  170 + ('mailinglist',
  171 + models.ForeignKey(
  172 + verbose_name='Mailing List',
  173 + to='super_archives.MailingList',
  174 + help_text='The Mailing List where is the thread')),
  175 + ('tags',
  176 + taggit.managers.TaggableManager(
  177 + to='taggit.Tag',
  178 + through='taggit.TaggedItem',
  179 + help_text='A comma-separated list of tags.',
  180 + verbose_name='Tags')),
139 181 ],
140 182 options={
141 183 'ordering': ('-latest_message__received_time',),
... ... @@ -147,7 +189,8 @@ class Migration(migrations.Migration):
147 189 migrations.CreateModel(
148 190 name='Vote',
149 191 fields=[
150   - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
  192 + ('id', models.AutoField(verbose_name='ID', serialize=False,
  193 + auto_created=True, primary_key=True)),
151 194 ('created', models.DateTimeField(auto_now_add=True)),
152 195 ('message', models.ForeignKey(to='super_archives.Message')),
153 196 ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
... ...
colab/super_archives/models.py
... ... @@ -38,12 +38,14 @@ class EmailAddressValidation(models.Model):
38 38  
39 39 @classmethod
40 40 def create(cls, address, user):
41   - email_address_validation = cls.objects.create(address=address, user=user)
42   - email.send_verification_email(email_address_validation.address,
43   - email_address_validation.user,
44   - email_address_validation.validation_key)
  41 + email_address_validation = cls.objects.create(address=address,
  42 + user=user)
  43 + email.send_verification_email(email_address_validation.address,
  44 + email_address_validation.user,
  45 + email_address_validation.validation_key)
45 46 return email_address_validation
46 47  
  48 +
47 49 class EmailAddress(models.Model):
48 50 user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True,
49 51 related_name='emails', on_delete=models.SET_NULL)
... ... @@ -114,14 +116,17 @@ class Keyword(models.Model):
114 116 class Thread(models.Model, HitCounterModelMixin):
115 117  
116 118 subject_token = models.CharField(max_length=512)
117   - mailinglist = models.ForeignKey(MailingList,
118   - verbose_name=_(u"Mailing List"),
119   - help_text=_(u"The Mailing List where is the thread"))
120   - latest_message = models.OneToOneField('Message', null=True,
121   - related_name='+',
122   - verbose_name=_(u"Latest message"),
123   - help_text=_(u"Latest message posted"))
124   - score = models.IntegerField(default=0, verbose_name=_(u"Score"), help_text=_(u"Thread score"))
  119 + mailinglist = \
  120 + models.ForeignKey(
  121 + MailingList,
  122 + verbose_name=_(u"Mailing List"),
  123 + help_text=_(u"The Mailing List where is the thread"))
  124 + latest_message = \
  125 + models.OneToOneField('Message', null=True, related_name='+',
  126 + verbose_name=_(u"Latest message"),
  127 + help_text=_(u"Latest message posted"))
  128 + score = models.IntegerField(default=0, verbose_name=_(u"Score"),
  129 + help_text=_(u"Thread score"))
125 130 spam = models.BooleanField(default=False)
126 131  
127 132 highest_score = HighestScore()
... ... @@ -204,8 +209,8 @@ class Thread(models.Model, HitCounterModelMixin):
204 209 # function N times in the loops below
205 210 now = timezone.now()
206 211 days_ago = lambda date: (now - date).days
207   - get_score = lambda weight, created: \
208   - max(weight - (days_ago(created) // 3), 5)
  212 + get_score = lambda weight, created: max(weight - (days_ago(created)
  213 + // 3), 5)
209 214  
210 215 vote_score = 0
211 216 replies_score = 0
... ... @@ -384,7 +389,6 @@ class MessageBlock(models.Model):
384 389 return obj
385 390  
386 391  
387   -
388 392 class MessageMetadata(models.Model):
389 393 Message = models.ForeignKey(Message)
390 394 # Same problem here than on subjects. Read comment above
... ...
colab/super_archives/search_indexes.py
... ... @@ -36,8 +36,8 @@ class ThreadIndex(BaseIndex, indexes.Indexable):
36 36 def get_updated_field(self):
37 37 return 'latest_message__received_time'
38 38  
39   - def prepare_fullname(self, obj):
40   - return obj.message_set.first().from_address.get_full_name()
  39 + #def prepare_fullname(self, obj):
  40 + # return obj.message_set.first().from_address.get_full_name()
41 41  
42 42 def prepare_fullname_and_username(self, obj):
43 43 from_address = obj.message_set.first().from_address
... ...
colab/super_archives/signals.py
... ... @@ -13,7 +13,7 @@ def create_email_address(sender, instance, created, **kwargs):
13 13  
14 14 email, email_created = EmailAddress.objects.get_or_create(
15 15 address=instance.email,
16   - defaults= {
  16 + defaults={
17 17 'real_name': instance.get_full_name(),
18 18 'user': instance,
19 19 }
... ...
colab/super_archives/templatetags/superarchives.py
1 1  
2 2 from django import template
3   -from django.conf import settings
4   -
5 3 from colab.super_archives.utils import url
6 4  
7 5  
... ... @@ -14,7 +12,7 @@ def display_message(email):
14 12 if not email.blocks.count():
15 13 email.update_blocks()
16 14  
17   - return { 'blocks': email.blocks.all }
  15 + return {'blocks': email.blocks.all}
18 16  
19 17  
20 18 @register.simple_tag(takes_context=True)
... ...
colab/super_archives/urls.py
1   -from django.conf.urls import patterns, include, url
  1 +from django.conf.urls import patterns, url
2 2  
3   -from .views import EmailView, EmailValidationView, ThreadView, \
4   - ThreadDashboardView
  3 +from .views import EmailView, EmailValidationView, ThreadView
  4 +from .views import ThreadDashboardView
5 5  
6 6  
7   -urlpatterns = patterns('super_archives.views',
  7 +urlpatterns = patterns(
  8 + 'super_archives.views',
8 9 url(r'thread/(?P<mailinglist>[-\w]+)/(?P<thread_token>[-\w]+)$',
9 10 ThreadView.as_view(), name="thread_view"),
10 11 url(r'thread/$', ThreadDashboardView.as_view(), name='thread_list'),
11 12 url(r'manage/email/validate/?$', EmailValidationView.as_view(),
12   - name="archive_email_validation_view"),
  13 + name="archive_email_validation_view"),
13 14 url(r'manage/email/(?P<key>[0-9a-z]{32})?', EmailView.as_view(),
14   - name="archive_email_view"),
  15 + name="archive_email_view"),
15 16 )
... ...
colab/super_archives/utils/blocks.py
... ... @@ -8,7 +8,7 @@ from html2text import html2text
8 8  
9 9 EXTENDED_PUNCTUATION = '!"#$%&\'()*+,-./:;=?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
10 10 RE_WRAPPED_BY_HTML = re.compile(r'^<[a-z]+[^>]*>.*</[a-z]+[^>]*>$',
11   - re.MULTILINE|re.IGNORECASE|re.DOTALL)
  11 + re.MULTILINE | re.IGNORECASE | re.DOTALL)
12 12 RE_LINKS = re.compile(r'(?P<link>https?://[^ \t\r\n\<]+)')
13 13 LINK_MARKUP = u'<a target="_blank" href="\g<link>">\g<link></a>'
14 14  
... ... @@ -26,8 +26,8 @@ class EmailBlock(list):
26 26 def _html2text(self, text):
27 27 if RE_WRAPPED_BY_HTML.match(text.strip()):
28 28 return html2text(text)
29   -
30   - text, n = RE_BR_TO_LINEBREAK.subn('\n', text)
  29 +
  30 + text, n = RE_BR_TO_LINEBREAK.subn('\n', text)
31 31 text = strip_tags(text)
32 32 return text
33 33  
... ... @@ -90,10 +90,11 @@ class EmailBlockParser(list):
90 90 return True
91 91  
92 92 clean_line = RE_REPLY_LINE.subn('', stripped_line)[0]
93   - queryset = self.thread_emails.filter(
94   - received_time__lt=self.email.received_time,
95   - body__contains=clean_line).order_by('-received_time')
96   -
  93 + queryset = \
  94 + self.thread_emails.filter(
  95 + received_time__lt=self.email.received_time,
  96 + body__contains=clean_line).order_by('-received_time')
  97 +
97 98 if queryset[:1]:
98 99 return True
99 100  
... ...
colab/super_archives/utils/email.py
... ... @@ -12,7 +12,8 @@ def colab_send_email(subject, message, to):
12 12  
13 13 def send_verification_email(to, user, validation_key):
14 14 subject = _('Please verify your email ') + u'{}'.format(to)
15   - msg_tmpl = loader.get_template('superarchives/emails/email_verification.txt')
  15 + msg_tmpl = \
  16 + loader.get_template('superarchives/emails/email_verification.txt')
16 17 message = msg_tmpl.render(Context({'to': to, 'user': user,
17 18 'key': validation_key,
18 19 'SITE_URL': settings.SITE_URL}))
... ...
colab/super_archives/utils/url.py
... ... @@ -14,7 +14,7 @@ def append_to_get(path, query=None, **kwargs):
14 14 def pop_from_get(path, query=None, **kwargs):
15 15 query_dict = dict(urlparse.parse_qsl(query))
16 16 for key, value in kwargs.items():
17   - if not query_dict.has_key(key):
  17 + if not query_dict in (key):
18 18 continue
19 19 if query_dict[key] == value:
20 20 del query_dict[key]
... ...
colab/super_archives/views.py
... ... @@ -11,7 +11,6 @@ from django.conf import settings
11 11 from django.contrib import messages
12 12 from django.db import IntegrityError
13 13 from django.views.generic import View
14   -from django.core.paginator import Paginator, EmptyPage
15 14 from django.utils.translation import ugettext as _
16 15 from django.core.exceptions import ObjectDoesNotExist
17 16 from django.utils.decorators import method_decorator
... ... @@ -23,8 +22,8 @@ from haystack.query import SearchQuerySet
23 22 from colab.accounts.utils import mailman
24 23 from colab.accounts.models import User
25 24 from .utils.email import send_verification_email
26   -from .models import MailingList, Thread, EmailAddress, \
27   - EmailAddressValidation, Message
  25 +from .models import MailingList, Thread, EmailAddress
  26 +from .models import EmailAddressValidation, Message
28 27  
29 28  
30 29 class ThreadView(View):
... ... @@ -83,7 +82,8 @@ class ThreadView(View):
83 82 'body': request.POST.get('emailbody', '').strip(),
84 83 }
85 84  
86   - url = urlparse.urljoin(settings.MAILMAN_API_URL, mailinglist + '/sendmail')
  85 + url = urlparse.urljoin(settings.MAILMAN_API_URL,
  86 + mailinglist + '/sendmail')
87 87  
88 88 error_msg = None
89 89 try:
... ... @@ -110,7 +110,8 @@ class ThreadView(View):
110 110 elif resp.status_code == 404:
111 111 error_msg = _('Mailing list does not exist')
112 112 else:
113   - error_msg = _('Unknown error trying to connect to Mailman API')
  113 + error_msg = _('Unknown error\
  114 + trying to connect to Mailman API')
114 115 messages.error(request, error_msg)
115 116  
116 117 return self.get(request, mailinglist, thread_token)
... ... @@ -125,7 +126,7 @@ class ThreadDashboardView(View):
125 126 all_lists = mailman.all_lists(description=True)
126 127  
127 128 context['lists'] = []
128   - lists = MailingList.objects.filter()
  129 + #lists = MailingList.objects.filter()
129 130 for list_ in MailingList.objects.order_by('name'):
130 131 context['lists'].append((
131 132 list_.name,
... ... @@ -134,7 +135,7 @@ class ThreadDashboardView(View):
134 135 '-latest_message__received_time'
135 136 )[:MAX],
136 137 SearchQuerySet().filter(type='thread', tag=list_.name)[:MAX],
137   - len(mailman.list_users(list_.name)),
  138 + len(mailman.list_users(list_.name)),
138 139 ))
139 140  
140 141 return render(request, 'superarchives/thread-dashboard.html', context)
... ... @@ -151,7 +152,7 @@ class EmailView(View):
151 152 email_val = EmailAddressValidation.objects.get(validation_key=key)
152 153 except EmailAddressValidation.DoesNotExist:
153 154 messages.error(request, _('The email address you are trying to '
154   - 'verify either has already been verified '
  155 + 'verify either has already been verified'
155 156 'or does not exist.'))
156 157 return redirect('/')
157 158  
... ... @@ -170,7 +171,6 @@ class EmailView(View):
170 171 email.user = email_val.user
171 172 email.save()
172 173 email_val.delete()
173   -
174 174 user = User.objects.get(username=email.user.username)
175 175 user.is_active = True
176 176 user.save()
... ... @@ -178,7 +178,6 @@ class EmailView(View):
178 178 messages.success(request, _('Email address verified!'))
179 179 return redirect('user_profile', username=email_val.user.username)
180 180  
181   -
182 181 @method_decorator(login_required)
183 182 def post(self, request, key):
184 183 """Create new email address that will wait for validation"""
... ...
colab/urls.py
... ... @@ -4,14 +4,11 @@ from django.views.generic import TemplateView
4 4 from django.contrib import admin
5 5 from django.views.generic import RedirectView
6 6  
7   -from colab.accounts.models import User
8   -from .search.forms import ColabSearchForm
9   -from .super_archives.models import Message
10   -
11 7  
12 8 admin.autodiscover()
13 9  
14   -urlpatterns = patterns('',
  10 +urlpatterns = patterns(
  11 + '',
15 12 url(r'^robots.txt$', 'colab.home.views.robots', name='robots'),
16 13 url(r'^dashboard$', 'colab.home.views.dashboard', name='dashboard'),
17 14 url(r'^$', RedirectView.as_view(url=settings.COLAB_HOME_URL), name='home'),
... ... @@ -24,8 +21,12 @@ urlpatterns = patterns(&#39;&#39;,
24 21 url(r'^api/', include('colab.api.urls')),
25 22 url(r'^rss/', include('colab.rss.urls')),
26 23  
27   - url(r'^user/', include('colab.accounts.urls')), # Kept for backwards compatibility
28   - url(r'^signup/', include('colab.accounts.urls')), # (same here) TODO: move to nginx
  24 + # Kept for backwards compatibility
  25 + url(r'^user/', include('colab.accounts.urls')),
  26 + # Kept for backwards compatibility
  27 + url(r'^user/', include('colab.accounts.urls')),
  28 + # (same here) TODO: move to nginx
  29 + url(r'^signup/', include('colab.accounts.urls')),
29 30 url(r'^account/', include('colab.accounts.urls')),
30 31  
31 32 url(r'', include('django_browserid.urls')),
... ...
setup.py
1 1  
2 2 from setuptools import setup, find_packages
3   -
  3 +
4 4  
5 5 REQUIREMENTS = [
6 6 'Django>=1.7',
... ...