diff --git a/democracy_club/apps/backlog/apps.py b/democracy_club/apps/backlog/apps.py index e86d219b..8c72b139 100644 --- a/democracy_club/apps/backlog/apps.py +++ b/democracy_club/apps/backlog/apps.py @@ -2,4 +2,4 @@ class BacklogConfig(AppConfig): - name = 'backlog' + name = "backlog" diff --git a/democracy_club/apps/backlog/management/commands/backlog_import_from_trello.py b/democracy_club/apps/backlog/management/commands/backlog_import_from_trello.py index 8e7d79c3..11845463 100644 --- a/democracy_club/apps/backlog/management/commands/backlog_import_from_trello.py +++ b/democracy_club/apps/backlog/management/commands/backlog_import_from_trello.py @@ -19,7 +19,7 @@ def handle(self, *args, **options): url = url_fmt.format(self.base_url, self.list_id, self.key, self.token) list_data = requests.get(url).json() - self.initial_ids = set(Card.objects.values_list('pk', flat=True)) + self.initial_ids = set(Card.objects.values_list("pk", flat=True)) self.seen_ids = set() self.setup_board_info() @@ -29,52 +29,52 @@ def handle(self, *args, **options): self.clean_up() def setup_board_info(self): - req = requests.get("{}/boards/{}/customFields?key={}&token={}".format( - self.base_url, - settings.BACKLOG_TRELLO_BOARD_ID, - self.key, - self.token, - )) + req = requests.get( + "{}/boards/{}/customFields?key={}&token={}".format( + self.base_url, + settings.BACKLOG_TRELLO_BOARD_ID, + self.key, + self.token, + ) + ) self.customfield_map = {} for field in req.json(): - self.customfield_map[field['id']] = field + self.customfield_map[field["id"]] = field def import_card(self, card_dict): labels = [] - for label in card_dict['labels']: - labels.append(CardLabel.objects.update_or_create( - trello_id=label['id'], - defaults={ - 'name': label['name'], - 'colour': label['color'], - } - )[0]) + for label in card_dict["labels"]: + labels.append( + CardLabel.objects.update_or_create( + trello_id=label["id"], + defaults={"name": label["name"], "colour": label["color"],}, + )[0] + ) card = Card.objects.update_or_create( - trello_id=card_dict['id'], + trello_id=card_dict["id"], defaults={ - 'title': card_dict['name'], - 'text': card_dict['desc'], - 'weight': card_dict['pos'], - 'url': card_dict['url'], - 'comment_count': card_dict['badges']['comments'] - - } + "title": card_dict["name"], + "text": card_dict["desc"], + "weight": card_dict["pos"], + "url": card_dict["url"], + "comment_count": card_dict["badges"]["comments"], + }, )[0] self.seen_ids.add(card.pk) card.labels.add(*labels) - for custom_field_value in card_dict['customFieldItems']: + for custom_field_value in card_dict["customFieldItems"]: for field_id, field in self.customfield_map.items(): - if field['id'] == custom_field_value['idCustomField']: - if field['id'] == "5a986717d6afbd6de1d24563": + if field["id"] == custom_field_value["idCustomField"]: + if field["id"] == "5a986717d6afbd6de1d24563": # CTA_URL - card.cta_url = custom_field_value['value']['text'] - if field['id'] == "5a986717d6afbd6de1d2455c": + card.cta_url = custom_field_value["value"]["text"] + if field["id"] == "5a986717d6afbd6de1d2455c": # Time Required - for option in field['options']: - if option["id"] == custom_field_value['idValue']: - card.time_required = option['value']['text'] + for option in field["options"]: + if option["id"] == custom_field_value["idValue"]: + card.time_required = option["value"]["text"] card.save() diff --git a/democracy_club/apps/backlog/migrations/0001_initial.py b/democracy_club/apps/backlog/migrations/0001_initial.py index 0ec1468b..15c86763 100644 --- a/democracy_club/apps/backlog/migrations/0001_initial.py +++ b/democracy_club/apps/backlog/migrations/0001_initial.py @@ -10,31 +10,49 @@ class Migration(migrations.Migration): initial = True - dependencies = [ - ] + dependencies = [] operations = [ migrations.CreateModel( - name='Card', + name="Card", fields=[ - ('trello_id', models.CharField(blank=True, max_length=100, primary_key=True, serialize=False)), - ('title', models.CharField(blank=True, max_length=800)), - ('text', models.TextField(blank=True)), - ('weight', models.FloatField()), - ('url', models.URLField(blank=True)), + ( + "trello_id", + models.CharField( + blank=True, + max_length=100, + primary_key=True, + serialize=False, + ), + ), + ("title", models.CharField(blank=True, max_length=800)), + ("text", models.TextField(blank=True)), + ("weight", models.FloatField()), + ("url", models.URLField(blank=True)), ], ), migrations.CreateModel( - name='CardLabel', + name="CardLabel", fields=[ - ('trello_id', models.CharField(blank=True, max_length=100, primary_key=True, serialize=False)), - ('name', models.CharField(blank=True, max_length=100)), - ('color', models.CharField(blank=True, max_length=100)), + ( + "trello_id", + models.CharField( + blank=True, + max_length=100, + primary_key=True, + serialize=False, + ), + ), + ("name", models.CharField(blank=True, max_length=100)), + ("color", models.CharField(blank=True, max_length=100)), ], ), migrations.AddField( - model_name='card', - name='labels', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backlog.CardLabel'), + model_name="card", + name="labels", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to="backlog.CardLabel", + ), ), ] diff --git a/democracy_club/apps/backlog/migrations/0002_auto_20170306_2043.py b/democracy_club/apps/backlog/migrations/0002_auto_20170306_2043.py index 0813d959..9d2090d9 100644 --- a/democracy_club/apps/backlog/migrations/0002_auto_20170306_2043.py +++ b/democracy_club/apps/backlog/migrations/0002_auto_20170306_2043.py @@ -8,17 +8,14 @@ class Migration(migrations.Migration): dependencies = [ - ('backlog', '0001_initial'), + ("backlog", "0001_initial"), ] operations = [ - migrations.RemoveField( - model_name='card', - name='labels', - ), + migrations.RemoveField(model_name="card", name="labels",), migrations.AddField( - model_name='card', - name='labels', - field=models.ManyToManyField(to='backlog.CardLabel'), + model_name="card", + name="labels", + field=models.ManyToManyField(to="backlog.CardLabel"), ), ] diff --git a/democracy_club/apps/backlog/migrations/0003_auto_20170306_2045.py b/democracy_club/apps/backlog/migrations/0003_auto_20170306_2045.py index 14cbc4a0..e2a85237 100644 --- a/democracy_club/apps/backlog/migrations/0003_auto_20170306_2045.py +++ b/democracy_club/apps/backlog/migrations/0003_auto_20170306_2045.py @@ -8,13 +8,11 @@ class Migration(migrations.Migration): dependencies = [ - ('backlog', '0002_auto_20170306_2043'), + ("backlog", "0002_auto_20170306_2043"), ] operations = [ migrations.RenameField( - model_name='cardlabel', - old_name='color', - new_name='colour', + model_name="cardlabel", old_name="color", new_name="colour", ), ] diff --git a/democracy_club/apps/backlog/migrations/0004_auto_20170307_0931.py b/democracy_club/apps/backlog/migrations/0004_auto_20170307_0931.py index 10ebfe18..92dafb8b 100644 --- a/democracy_club/apps/backlog/migrations/0004_auto_20170307_0931.py +++ b/democracy_club/apps/backlog/migrations/0004_auto_20170307_0931.py @@ -8,17 +8,16 @@ class Migration(migrations.Migration): dependencies = [ - ('backlog', '0003_auto_20170306_2045'), + ("backlog", "0003_auto_20170306_2045"), ] operations = [ migrations.AlterModelOptions( - name='card', - options={'ordering': ('weight',)}, + name="card", options={"ordering": ("weight",)}, ), migrations.AddField( - model_name='card', - name='published', + model_name="card", + name="published", field=models.BooleanField(default=True), ), ] diff --git a/democracy_club/apps/backlog/migrations/0005_card_comment_count.py b/democracy_club/apps/backlog/migrations/0005_card_comment_count.py index e7b26f6e..06c3b31a 100644 --- a/democracy_club/apps/backlog/migrations/0005_card_comment_count.py +++ b/democracy_club/apps/backlog/migrations/0005_card_comment_count.py @@ -8,13 +8,13 @@ class Migration(migrations.Migration): dependencies = [ - ('backlog', '0004_auto_20170307_0931'), + ("backlog", "0004_auto_20170307_0931"), ] operations = [ migrations.AddField( - model_name='card', - name='comment_count', + model_name="card", + name="comment_count", field=models.IntegerField(blank=True, null=True), ), ] diff --git a/democracy_club/apps/backlog/migrations/0006_auto_20170307_0947.py b/democracy_club/apps/backlog/migrations/0006_auto_20170307_0947.py index 9ac28743..2ad8066c 100644 --- a/democracy_club/apps/backlog/migrations/0006_auto_20170307_0947.py +++ b/democracy_club/apps/backlog/migrations/0006_auto_20170307_0947.py @@ -8,18 +8,18 @@ class Migration(migrations.Migration): dependencies = [ - ('backlog', '0005_card_comment_count'), + ("backlog", "0005_card_comment_count"), ] operations = [ migrations.AddField( - model_name='card', - name='cta_url', + model_name="card", + name="cta_url", field=models.URLField(blank=True, max_length=800), ), migrations.AddField( - model_name='card', - name='time_required', + model_name="card", + name="time_required", field=models.CharField(blank=True, max_length=100), ), ] diff --git a/democracy_club/apps/backlog/models.py b/democracy_club/apps/backlog/models.py index 49aa6888..cbbc5965 100644 --- a/democracy_club/apps/backlog/models.py +++ b/democracy_club/apps/backlog/models.py @@ -1,19 +1,20 @@ from django.db import models + class Card(models.Model): trello_id = models.CharField(blank=True, max_length=100, primary_key=True) title = models.CharField(blank=True, max_length=800) text = models.TextField(blank=True) weight = models.FloatField() url = models.URLField(blank=True) - labels = models.ManyToManyField('backlog.CardLabel') + labels = models.ManyToManyField("backlog.CardLabel") published = models.BooleanField(default=True) comment_count = models.IntegerField(blank=True, null=True) cta_url = models.URLField(blank=True, max_length=800) time_required = models.CharField(blank=True, max_length=100) class Meta: - ordering = ('weight', ) + ordering = ("weight",) def __str__(self): return self.title @@ -23,6 +24,7 @@ def get_cta_url(self): return self.cta_url return self.url + class CardLabel(models.Model): trello_id = models.CharField(blank=True, max_length=100, primary_key=True) name = models.CharField(blank=True, max_length=100) @@ -31,7 +33,6 @@ class CardLabel(models.Model): def __str__(self): return self.name - # { # "id": "58bd63361db95c69861b68da", # "checkItemStates": null, diff --git a/democracy_club/apps/backlog/tests/test_backlog_view.py b/democracy_club/apps/backlog/tests/test_backlog_view.py index 219b3f12..d3c54b92 100644 --- a/democracy_club/apps/backlog/tests/test_backlog_view.py +++ b/democracy_club/apps/backlog/tests/test_backlog_view.py @@ -4,17 +4,14 @@ class TestBacklogView(TestCase): - def setUp(self): self.card = Card( - time_required="10 minutes", - weight=1, - title="A test task" + time_required="10 minutes", weight=1, title="A test task" ) self.card.save() def test_info_on_backlog_cards(self): - resp = self.client.get('/quests/') + resp = self.client.get("/quests/") assert resp.status_code == 200 self.assertContains(resp, self.card.time_required) self.assertContains(resp, self.card.title) diff --git a/democracy_club/apps/backlog/tests/test_card_import_from_trello.py b/democracy_club/apps/backlog/tests/test_card_import_from_trello.py index 7b541eae..d76ab98a 100644 --- a/democracy_club/apps/backlog/tests/test_card_import_from_trello.py +++ b/democracy_club/apps/backlog/tests/test_card_import_from_trello.py @@ -9,9 +9,10 @@ class TestBacklogImporter(TestCase): @vcr.use_cassette( - 'fixtures/vcr_cassettes/test_backlog_import_cards.yaml', - filter_query_parameters=['key', 'token']) + "fixtures/vcr_cassettes/test_backlog_import_cards.yaml", + filter_query_parameters=["key", "token"], + ) def test_backlog_import_cards(self): assert Card.objects.count() == 0 - call_command('backlog_import_from_trello') + call_command("backlog_import_from_trello") assert Card.objects.count() == 4 diff --git a/democracy_club/apps/backlog/urls.py b/democracy_club/apps/backlog/urls.py index f39f1381..01b21a8a 100644 --- a/democracy_club/apps/backlog/urls.py +++ b/democracy_club/apps/backlog/urls.py @@ -3,14 +3,9 @@ from .views import BacklogView urlpatterns = [ - url( - r'^$', - BacklogView.as_view(), - name='backlog_view' - ), + url(r"^$", BacklogView.as_view(), name="backlog_view"), # url( # r'^(?P[^/]+)/(?P.*)$', # PartyView.as_view(), # name='party_view'), ] - diff --git a/democracy_club/apps/core/__init__.py b/democracy_club/apps/core/__init__.py index 56d428af..29964caa 100644 --- a/democracy_club/apps/core/__init__.py +++ b/democracy_club/apps/core/__init__.py @@ -2,17 +2,18 @@ from django.apps import apps from django.core.checks import Error, register + @register() def check_django_storage_version(app_configs, **kwargs): errors = [] - if (app_configs is None or apps.get_app_config('core') in app_configs): - if storages.__version__ != '1.6.5': + if app_configs is None or apps.get_app_config("core") in app_configs: + if storages.__version__ != "1.6.5": errors.append( Error( - 'django-storages must be at version 1.6.5', - hint='See https://github.com/DemocracyClub/Website/pull/117', - obj='core', - id='core.E001' + "django-storages must be at version 1.6.5", + hint="See https://github.com/DemocracyClub/Website/pull/117", + obj="core", + id="core.E001", ) ) return errors diff --git a/democracy_club/apps/core/apps.py b/democracy_club/apps/core/apps.py index cf2891b9..50752cc4 100644 --- a/democracy_club/apps/core/apps.py +++ b/democracy_club/apps/core/apps.py @@ -1,7 +1,8 @@ from django.apps import AppConfig + class CoreConfig(AppConfig): - name = 'core' + name = "core" def ready(self): import core.signals # noqa diff --git a/democracy_club/apps/core/cloudfront.py b/democracy_club/apps/core/cloudfront.py index bce9b0ab..22502faf 100644 --- a/democracy_club/apps/core/cloudfront.py +++ b/democracy_club/apps/core/cloudfront.py @@ -4,19 +4,16 @@ from django.conf import settings + def invalidate_paths(path_list): - if not hasattr(settings, 'ZAPPA_STAGE'): + if not hasattr(settings, "ZAPPA_STAGE"): return - cloudfront = boto3.client('cloudfront') + cloudfront = boto3.client("cloudfront") cloudfront.create_invalidation( DistributionId=settings.AWS_CLOUD_FRONT_ID, InvalidationBatch={ - 'Paths': { - 'Quantity': len(path_list), - 'Items': path_list - }, - 'CallerReference': 'django-invalidate-{}'.format(datetime.now()) - } + "Paths": {"Quantity": len(path_list), "Items": path_list}, + "CallerReference": "django-invalidate-{}".format(datetime.now()), + }, ) - diff --git a/democracy_club/apps/core/signals.py b/democracy_club/apps/core/signals.py index 736b7510..5cdb4336 100644 --- a/democracy_club/apps/core/signals.py +++ b/democracy_club/apps/core/signals.py @@ -8,6 +8,6 @@ @receiver(post_save, sender=Post) def blog_url_invalidation_handler(sender, **kwargs): - instance = kwargs['instance'] + instance = kwargs["instance"] path = instance.get_absolute_url() invalidate_paths([path, "/blog/"]) diff --git a/democracy_club/apps/core/views.py b/democracy_club/apps/core/views.py index 20e810f7..0403f920 100644 --- a/democracy_club/apps/core/views.py +++ b/democracy_club/apps/core/views.py @@ -3,12 +3,13 @@ from hermes.models import Post from backlog.models import Card + class HomeView(TemplateView): - template_name="home.html" + template_name = "home.html" def get_context_data(self, **kwargs): context = super(HomeView, self).get_context_data(**kwargs) - context['latest_posts'] = Post.objects.recent(5) - context['card'] = Card.objects.filter(published=True).first() + context["latest_posts"] = Post.objects.recent(5) + context["card"] = Card.objects.filter(published=True).first() return context diff --git a/democracy_club/apps/donations/forms.py b/democracy_club/apps/donations/forms.py index 665dd2bd..b761faeb 100644 --- a/democracy_club/apps/donations/forms.py +++ b/democracy_club/apps/donations/forms.py @@ -6,23 +6,17 @@ class DonationForm(forms.Form): payment_type = forms.ChoiceField( - label="", - choices=PAYMENT_TYPES, - widget=forms.RadioSelect()) + label="", choices=PAYMENT_TYPES, widget=forms.RadioSelect() + ) amount = forms.ChoiceField( required=True, label="", choices=PAYMENT_UNITS, - widget=forms.RadioSelect() + widget=forms.RadioSelect(), ) other_amount = forms.CharField( required=False, label="Other amount", - widget=forms.NumberInput( - attrs={ - 'size':5, - 'class': 'other_amount', - } - ) + widget=forms.NumberInput(attrs={"size": 5, "class": "other_amount",}), ) diff --git a/democracy_club/apps/donations/helpers.py b/democracy_club/apps/donations/helpers.py index ec6a1500..c6914bea 100644 --- a/democracy_club/apps/donations/helpers.py +++ b/democracy_club/apps/donations/helpers.py @@ -3,15 +3,15 @@ import gocardless_pro PAYMENT_TYPES = ( - ('subscription', 'Monthly donation'), - ('bill', 'Single donation'), + ("subscription", "Monthly donation"), + ("bill", "Single donation"), ) PAYMENT_UNITS = ( - (3, '£3'), - (10, '£10'), - (25, '£25'), - (50, '£50'), + (3, "£3"), + (10, "£10"), + (25, "£25"), + (50, "£50"), ) @@ -22,14 +22,14 @@ def __init__(self, request): # This is because the code is called from a middleware self.request.session.save() - if getattr(settings, 'GOCARDLESS_USE_SANDBOX', False): + if getattr(settings, "GOCARDLESS_USE_SANDBOX", False): gc_environment = "sandbox" else: gc_environment = "live" self.client = gocardless_pro.Client( access_token=settings.GOCARDLESS_ACCESS_TOKEN, - environment=gc_environment + environment=gc_environment, ) def get_redirect_url(self): @@ -40,41 +40,37 @@ def get_redirect_url(self): params={ "description": settings.GO_CARDLESS_PAYMENT_DESCRIPTION, "session_token": self.request.session.session_key, - "success_redirect_url": settings.GOCARDLESS_REDIRECT_URL + "success_redirect_url": settings.GOCARDLESS_REDIRECT_URL, } ) # Save the flow ID on the session - self.request.session['GC_REDIRECT_FLOW_ID'] = redirect_flow.id + self.request.session["GC_REDIRECT_FLOW_ID"] = redirect_flow.id self.request.session.save() return redirect_flow.redirect_url def confirm_redirect_flow(self): redirect_flow = self.client.redirect_flows.complete( - self.request.GET.get('redirect_flow_id'), - params={ - "session_token": self.request.session.session_key - } + self.request.GET.get("redirect_flow_id"), + params={"session_token": self.request.session.session_key}, ) - self.request.session['GC_CUSTOMER_ID'] = redirect_flow.links.customer - self.request.session['GC_MANDATE_ID'] = redirect_flow.links.mandate + self.request.session["GC_CUSTOMER_ID"] = redirect_flow.links.customer + self.request.session["GC_MANDATE_ID"] = redirect_flow.links.mandate self.request.session.save() def create_payment(self): - form = self.request.session['donation_form'] - payment_type = form['payment_type'] + form = self.request.session["donation_form"] + payment_type = form["payment_type"] assert payment_type in [i[0] for i in PAYMENT_TYPES] - amount = form['amount'] - if form['other_amount']: - amount = form['other_amount'] + amount = form["amount"] + if form["other_amount"]: + amount = form["other_amount"] amount = int(float(amount) * 100) params = { "amount": amount, "currency": "GBP", - "links": { - "mandate": self.request.session['GC_MANDATE_ID'] - }, + "links": {"mandate": self.request.session["GC_MANDATE_ID"]}, } if payment_type == "bill": # One off donation @@ -82,6 +78,6 @@ def create_payment(self): if payment_type == "subscription": # Monthly donation - params['interval_unit'] = "monthly" + params["interval_unit"] = "monthly" params["day_of_month"] = "1" return self.client.subscriptions.create(params) diff --git a/democracy_club/apps/donations/middleware.py b/democracy_club/apps/donations/middleware.py index bff28f4b..c3b658ba 100644 --- a/democracy_club/apps/donations/middleware.py +++ b/democracy_club/apps/donations/middleware.py @@ -8,25 +8,25 @@ class DonationFormMiddleware(object): def get_initial(self, request): form_initial = { - 'payment_type': 'subscription', + "payment_type": "subscription", } default_donation = 3 suggested_donation = request.GET.get( - 'suggested_donation', default_donation + "suggested_donation", default_donation ) - if re.search('[^0-9]', str(suggested_donation)): + if re.search("[^0-9]", str(suggested_donation)): suggested_donation = default_donation if int(suggested_donation) in [x[0] for x in PAYMENT_UNITS]: - form_initial['amount'] = suggested_donation + form_initial["amount"] = suggested_donation else: - form_initial['other_amount'] = suggested_donation + form_initial["other_amount"] = suggested_donation return form_initial def form_valid(self, request, form): # Add the form info to the session - request.session['donation_form'] = form.cleaned_data + request.session["donation_form"] = form.cleaned_data # Start the GoCardless process gc = GoCardlessHelper(request) @@ -41,13 +41,12 @@ def process_request(self, request): form_prefix = "donation_form" key_to_check = "{}-amount".format(form_prefix) - if request.method == 'POST' and key_to_check in request.POST: + if request.method == "POST" and key_to_check in request.POST: form = DonationForm(data=request.POST, prefix=form_prefix) if form.is_valid(): return self.form_valid(request, form) else: form = DonationForm( - initial=self.get_initial(request), - prefix=form_prefix + initial=self.get_initial(request), prefix=form_prefix ) request.donation_form = form diff --git a/democracy_club/apps/donations/tests/test_donations.py b/democracy_club/apps/donations/tests/test_donations.py index 90db0294..02e5803a 100644 --- a/democracy_club/apps/donations/tests/test_donations.py +++ b/democracy_club/apps/donations/tests/test_donations.py @@ -2,13 +2,17 @@ @vcr.use_cassette( - 'fixtures/vcr_cassettes/test_donation_redirect_url.yaml', - filter_headers=['Authorization', 'Idempotency-Key']) + "fixtures/vcr_cassettes/test_donation_redirect_url.yaml", + filter_headers=["Authorization", "Idempotency-Key"], +) def test_donation_middleware_form_valid(db, client): form_data = { - 'donation_form-amount': 10, - 'donation_form-payment_type': 'subscription', + "donation_form-amount": 10, + "donation_form-payment_type": "subscription", } - req = client.post('/donate/', form_data) - assert req.url == "https://pay-sandbox.gocardless.com/flow/RE0000PV77M4SN1QWF1F30SP8PXQHAWC" # noqa + req = client.post("/donate/", form_data) + assert ( + req.url + == "https://pay-sandbox.gocardless.com/flow/RE0000PV77M4SN1QWF1F30SP8PXQHAWC" + ) # noqa assert req.status_code == 302 diff --git a/democracy_club/apps/donations/urls.py b/democracy_club/apps/donations/urls.py index e80d076e..394a62a2 100644 --- a/democracy_club/apps/donations/urls.py +++ b/democracy_club/apps/donations/urls.py @@ -3,7 +3,7 @@ from .views import DonateFormView, DonateThanksView, ProcessDonationView urlpatterns = [ - url(r'thanks', DonateThanksView.as_view(), name="donate_thanks"), - url(r'process', ProcessDonationView.as_view(), name="donate_process"), - url(r'', DonateFormView.as_view(), name="donate"), + url(r"thanks", DonateThanksView.as_view(), name="donate_thanks"), + url(r"process", ProcessDonationView.as_view(), name="donate_process"), + url(r"", DonateFormView.as_view(), name="donate"), ] diff --git a/democracy_club/apps/donations/views.py b/democracy_club/apps/donations/views.py index 3e3b91ed..ada409b3 100644 --- a/democracy_club/apps/donations/views.py +++ b/democracy_club/apps/donations/views.py @@ -10,12 +10,12 @@ class DonateFormView(TemplateView): class ProcessDonationView(RedirectView): def get_redirect_url(self, *args, **kwargs): - redirect_flow_id = self.request.GET.get('redirect_flow_id') + redirect_flow_id = self.request.GET.get("redirect_flow_id") if redirect_flow_id: gc = GoCardlessHelper(self.request) gc.confirm_redirect_flow() gc.create_payment() - return reverse('donations:donate_thanks') + return reverse("donations:donate_thanks") class DonateThanksView(TemplateView): diff --git a/democracy_club/apps/mailing_list/urls.py b/democracy_club/apps/mailing_list/urls.py index cd9f59b5..c64555f5 100644 --- a/democracy_club/apps/mailing_list/urls.py +++ b/democracy_club/apps/mailing_list/urls.py @@ -7,12 +7,15 @@ urlpatterns = [ url( - r'^signup/$', - csrf_exempt(SignupFormView.as_view( - template_name='base.html', - form_class=MailingListSignupForm, - backend='local_db' - )), - name='mailing_list_signup_view'), - url(r'^api_signup/v1/', include('dc_signup_form.signup_server.urls')), + r"^signup/$", + csrf_exempt( + SignupFormView.as_view( + template_name="base.html", + form_class=MailingListSignupForm, + backend="local_db", + ) + ), + name="mailing_list_signup_view", + ), + url(r"^api_signup/v1/", include("dc_signup_form.signup_server.urls")), ] diff --git a/democracy_club/apps/projects/apps.py b/democracy_club/apps/projects/apps.py index 3ef44dee..20f1a5a8 100644 --- a/democracy_club/apps/projects/apps.py +++ b/democracy_club/apps/projects/apps.py @@ -2,4 +2,4 @@ class ProjectsConfig(AppConfig): - name = 'projects' + name = "projects" diff --git a/democracy_club/apps/projects/urls.py b/democracy_club/apps/projects/urls.py index 6a362a2b..17b08490 100644 --- a/democracy_club/apps/projects/urls.py +++ b/democracy_club/apps/projects/urls.py @@ -20,7 +20,9 @@ ), url( r"^reports/registers/$", - TemplateView.as_view(template_name="projects/report_odi_registers.html"), + TemplateView.as_view( + template_name="projects/report_odi_registers.html" + ), name="reports_registers", ), url( @@ -100,5 +102,4 @@ TemplateView.as_view(template_name="projects/cvs.html"), name="cvs", ), - ] diff --git a/democracy_club/apps/report_2016/graphs.py b/democracy_club/apps/report_2016/graphs.py index a3602f0d..4c592bdb 100644 --- a/democracy_club/apps/report_2016/graphs.py +++ b/democracy_club/apps/report_2016/graphs.py @@ -17,22 +17,22 @@ def plot(self): return plotly_plot( self.figure_or_data, show_link=False, - output_type='div', + output_type="div", include_plotlyjs=False, ) class TestGraph(BaseGraph): - name = 'test' + name = "test" def make_figure_or_data(self): - self.figure_or_data = [Scatter( - x=[1, 2, 3, 5, 6, 7], - y=[3, 1, 6, 3, 23, 23, 2, 12])] + self.figure_or_data = [ + Scatter(x=[1, 2, 3, 5, 6, 7], y=[3, 1, 6, 3, 23, 23, 2, 12]) + ] class YNREditsOverTimeGraph(BaseGraph): - name = 'ynr_edits_over_time' + name = "ynr_edits_over_time" def make_figure_or_data(self): interesting_days = { @@ -41,14 +41,12 @@ def make_figure_or_data(self): "2016-05-06": "Results coming in overnight", } data_file = os.path.join( - self.reports_root, - 'data', - 'logged_actions.csv', + self.reports_root, "data", "logged_actions.csv", ) data = defaultdict(int) for line in csv.reader(open(data_file)): - if line[1].startswith('2016-04') or line[1].startswith('2016-05'): - day = line[1].split(' ')[0] + if line[1].startswith("2016-04") or line[1].startswith("2016-05"): + day = line[1].split(" ")[0] data[day] += 1 grouped_list = [] @@ -61,33 +59,32 @@ def make_figure_or_data(self): Scatter( x=[x[0] for x in grouped_list], y=[x[1] for x in grouped_list], - name='Edits to Democracy Club candidates over 2016', + name="Edits to Democracy Club candidates over 2016", text=[x[2] for x in grouped_list], - mode='lines+markers+text', - textposition='top', + mode="lines+markers+text", + textposition="top", ) ] class YNRPagesOverTime(BaseGraph): - name = 'ynr_page_views_over_time' + name = "ynr_page_views_over_time" def make_figure_or_data(self): def _parse_date(date): - return datetime.strptime(date, '%d/%b/%Y') + return datetime.strptime(date, "%d/%b/%Y") + interesting_days = { _parse_date("5/May/2016"): "Election day", _parse_date("6/May/2016"): "Results & Telegraph embedded map", } data_file = os.path.join( - self.reports_root, - 'data', - 'ynr_pages_over_time.log', + self.reports_root, "data", "ynr_pages_over_time.log", ) data = defaultdict(int) for line in csv.reader(open(data_file)): - date = _parse_date(line[0].split(':')[0]) + date = _parse_date(line[0].split(":")[0]) data[date] += 1 grouped_list = [] @@ -100,10 +97,10 @@ def _parse_date(date): Scatter( x=[x[0] for x in grouped_list], y=[x[1] for x in grouped_list], - name='Edits to Democracy Club candidates over 2016', + name="Edits to Democracy Club candidates over 2016", text=[x[2] for x in grouped_list], - mode='lines+markers+text', - textposition='top', + mode="lines+markers+text", + textposition="top", ) ] diff --git a/democracy_club/apps/report_2016/management/commands/report_2016_make_graphs.py b/democracy_club/apps/report_2016/management/commands/report_2016_make_graphs.py index 43c6e347..0ec935a7 100644 --- a/democracy_club/apps/report_2016/management/commands/report_2016_make_graphs.py +++ b/democracy_club/apps/report_2016/management/commands/report_2016_make_graphs.py @@ -9,16 +9,15 @@ class Command(BaseCommand): def handle(self, **options): includes_path = os.path.join( os.path.dirname(graphs.__file__), - 'templates', - 'report_2016', - 'includes', + "templates", + "report_2016", + "includes", ) for graph in graphs.GRAPHS: include_name = os.path.join( - includes_path, - "_{}_graph.html".format(graph.name) + includes_path, "_{}_graph.html".format(graph.name) ) html = graph().html - with open(include_name, 'w') as include_file: + with open(include_name, "w") as include_file: include_file.write(html) diff --git a/democracy_club/apps/report_2016/urls.py b/democracy_club/apps/report_2016/urls.py index 5c2ef407..a8bf1d80 100644 --- a/democracy_club/apps/report_2016/urls.py +++ b/democracy_club/apps/report_2016/urls.py @@ -2,8 +2,9 @@ from django.views.generic import TemplateView urlpatterns = [ - url(r'^$', + url( + r"^$", TemplateView.as_view(template_name="report_2016/report.html"), - name="report_2016") - + name="report_2016", + ) ] diff --git a/democracy_club/apps/report_2017/urls.py b/democracy_club/apps/report_2017/urls.py index 14a7cdf7..781f2fd1 100644 --- a/democracy_club/apps/report_2017/urls.py +++ b/democracy_club/apps/report_2017/urls.py @@ -2,8 +2,9 @@ from django.views.generic import TemplateView urlpatterns = [ - url(r'^$', + url( + r"^$", TemplateView.as_view(template_name="report_2017/report.html"), - name="report_2017") - + name="report_2017", + ) ] diff --git a/democracy_club/apps/report_2018/urls.py b/democracy_club/apps/report_2018/urls.py index 8b8f18b6..7a6a56bc 100644 --- a/democracy_club/apps/report_2018/urls.py +++ b/democracy_club/apps/report_2018/urls.py @@ -2,8 +2,9 @@ from django.views.generic import TemplateView urlpatterns = [ - url(r'^$', + url( + r"^$", TemplateView.as_view(template_name="report_2018/report.html"), - name="report_2018") - + name="report_2018", + ) ] diff --git a/democracy_club/apps/report_2019/apps.py b/democracy_club/apps/report_2019/apps.py index 9486ef01..46554430 100644 --- a/democracy_club/apps/report_2019/apps.py +++ b/democracy_club/apps/report_2019/apps.py @@ -2,4 +2,4 @@ class Report2019Config(AppConfig): - name = 'report_2019' + name = "report_2019" diff --git a/democracy_club/apps/report_2019/templates/report_2019/report.html b/democracy_club/apps/report_2019/templates/report_2019/report.html index 7dff9f7a..d6098d93 100644 --- a/democracy_club/apps/report_2019/templates/report_2019/report.html +++ b/democracy_club/apps/report_2019/templates/report_2019/report.html @@ -8,7 +8,7 @@ {% block content %}
{% filter markdown %} - +c # Towards better elections — 2019 diff --git a/democracy_club/apps/report_2019/urls.py b/democracy_club/apps/report_2019/urls.py index 7260f837..7ca41c7f 100644 --- a/democracy_club/apps/report_2019/urls.py +++ b/democracy_club/apps/report_2019/urls.py @@ -2,8 +2,9 @@ from django.views.generic import TemplateView urlpatterns = [ - url(r'^$', + url( + r"^$", TemplateView.as_view(template_name="report_2019/report.html"), - name="report_2019") - + name="report_2019", + ) ] diff --git a/democracy_club/apps/report_whos_missing/apps.py b/democracy_club/apps/report_whos_missing/apps.py index a1ead5b7..4205aee3 100644 --- a/democracy_club/apps/report_whos_missing/apps.py +++ b/democracy_club/apps/report_whos_missing/apps.py @@ -2,4 +2,4 @@ class ReportWhosMissingConfig(AppConfig): - name = 'report_whos_missing' + name = "report_whos_missing" diff --git a/democracy_club/apps/report_whos_missing/urls.py b/democracy_club/apps/report_whos_missing/urls.py index 9794e78d..d37c6cd1 100644 --- a/democracy_club/apps/report_whos_missing/urls.py +++ b/democracy_club/apps/report_whos_missing/urls.py @@ -2,9 +2,4 @@ from .views import ReportView -urlpatterns = [ - url(r'^$', - ReportView.as_view(), - name="report_whos_missing") - -] +urlpatterns = [url(r"^$", ReportView.as_view(), name="report_whos_missing")] diff --git a/democracy_club/apps/report_whos_missing/views.py b/democracy_club/apps/report_whos_missing/views.py index 05f80a03..80dd0d01 100644 --- a/democracy_club/apps/report_whos_missing/views.py +++ b/democracy_club/apps/report_whos_missing/views.py @@ -3,6 +3,7 @@ import markdown_deux + class ReportView(TemplateView): template_name = "report_whos_missing/report.html" diff --git a/democracy_club/apps/wheredoivote_user_feedback/urls.py b/democracy_club/apps/wheredoivote_user_feedback/urls.py index 87313f0c..8a9a72e4 100644 --- a/democracy_club/apps/wheredoivote_user_feedback/urls.py +++ b/democracy_club/apps/wheredoivote_user_feedback/urls.py @@ -2,17 +2,27 @@ from django.views.generic import TemplateView urlpatterns = [ - # TODO: once we've got a research/reports list view # map this URL to there - url(r'^$', - TemplateView.as_view(template_name="wheredoivote_user_feedback/report2017.html"), - name="wheredoivote_user_feedback"), - - url(r'^2017/$', - TemplateView.as_view(template_name="wheredoivote_user_feedback/report2017.html"), - name="wheredoivote_user_feedback_2017"), - url(r'^2018/$', - TemplateView.as_view(template_name="wheredoivote_user_feedback/report2018.html"), - name="wheredoivote_user_feedback_2018"), + url( + r"^$", + TemplateView.as_view( + template_name="wheredoivote_user_feedback/report2017.html" + ), + name="wheredoivote_user_feedback", + ), + url( + r"^2017/$", + TemplateView.as_view( + template_name="wheredoivote_user_feedback/report2017.html" + ), + name="wheredoivote_user_feedback_2017", + ), + url( + r"^2018/$", + TemplateView.as_view( + template_name="wheredoivote_user_feedback/report2018.html" + ), + name="wheredoivote_user_feedback_2018", + ), ] diff --git a/democracy_club/context_processors.py b/democracy_club/context_processors.py index 55d684e7..4c99886f 100644 --- a/democracy_club/context_processors.py +++ b/democracy_club/context_processors.py @@ -1,5 +1,6 @@ import datetime + def days_to_election(request): end_timestamp = 1430959200 end_date = datetime.datetime.fromtimestamp(end_timestamp) @@ -7,8 +8,6 @@ def days_to_election(request): delta = end_date - datetime.datetime.now() days = delta.days - return { - 'days_to_election': days+1 - } + return {"days_to_election": days + 1} else: return {} diff --git a/democracy_club/settings/base.py b/democracy_club/settings/base.py index b0b64b7b..cdb92e83 100644 --- a/democracy_club/settings/base.py +++ b/democracy_club/settings/base.py @@ -7,7 +7,7 @@ PROJECT_ROOT = here("..") root = lambda *x: join(abspath(PROJECT_ROOT), *x) -sys.path.insert(0, root('apps')) +sys.path.insert(0, root("apps")) DEBUG = True @@ -18,22 +18,22 @@ MANAGERS = ADMINS DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'NAME': 'democracy_club', - 'USER': 'postgres', - 'PASSWORD': '', - 'HOST': '', - 'PORT': '', + "default": { + "ENGINE": "django.db.backends.postgresql_psycopg2", + "NAME": "democracy_club", + "USER": "postgres", + "PASSWORD": "", + "HOST": "", + "PORT": "", } } ALLOWED_HOSTS = [] -TIME_ZONE = 'Europe/London' +TIME_ZONE = "Europe/London" -LANGUAGE_CODE = 'en-gb' +LANGUAGE_CODE = "en-gb" SITE_ID = 1 @@ -43,26 +43,24 @@ USE_TZ = True -MEDIA_ROOT = root('assets', 'uploads') -MEDIA_URL = '/media/' +MEDIA_ROOT = root("assets", "uploads") +MEDIA_URL = "/media/" -STATIC_ROOT = root('static_files') -STATIC_URL = '/static/' -STATICFILES_DIRS = ( - root('assets'), -) +STATIC_ROOT = root("static_files") +STATIC_URL = "/static/" +STATICFILES_DIRS = (root("assets"),) -SECRET_KEY = 'CHANGE THIS!!!' +SECRET_KEY = "CHANGE THIS!!!" MIDDLEWARE_CLASSES = ( - 'corsheaders.middleware.CorsMiddleware', - 'django.contrib.sessions.middleware.SessionMiddleware', - 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', - 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'donations.middleware.DonationFormMiddleware', + "corsheaders.middleware.CorsMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", + "donations.middleware.DonationFormMiddleware", ) AUTHENTICATION_BACKENDS = [ @@ -72,117 +70,115 @@ "allauth.account.auth_backends.AuthenticationBackend", ] -ROOT_URLCONF = 'democracy_club.urls' +ROOT_URLCONF = "democracy_club.urls" # Python dotted path to the WSGI application used by Django's runserver. -WSGI_APPLICATION = 'democracy_club.wsgi.application' +WSGI_APPLICATION = "democracy_club.wsgi.application" INSTALLED_APPS = ( - 'django.contrib.auth', - 'django.contrib.contenttypes', - 'django.contrib.sessions', - 'django.contrib.sites', - 'django.contrib.messages', - 'django.contrib.staticfiles', - 'django.contrib.admin', - 'localflavor', - 'markdown_deux', - 'django_extensions', - 'rest_framework', - 'corsheaders', - 'dc_theme', - 'pipeline', - 'sorl.thumbnail', - 'dc_signup_form', - 'dc_signup_form.signup_server', + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.sites", + "django.contrib.messages", + "django.contrib.staticfiles", + "django.contrib.admin", + "localflavor", + "markdown_deux", + "django_extensions", + "rest_framework", + "corsheaders", + "dc_theme", + "pipeline", + "sorl.thumbnail", + "dc_signup_form", + "dc_signup_form.signup_server", ) PROJECT_APPS = ( - 'core.apps.CoreConfig', - 'hermes', - 'typogrify', - 'django_markdown', - 'report_2016', - 'report_2017', - 'report_2018', - 'report_2019', - 'report_whos_missing', - 'wheredoivote_user_feedback', - 'backlog', - 'mailing_list', - 'projects', + "core.apps.CoreConfig", + "hermes", + "typogrify", + "django_markdown", + "report_2016", + "report_2017", + "report_2018", + "report_2019", + "report_2019_general_election", + "report_whos_missing", + "wheredoivote_user_feedback", + "backlog", + "mailing_list", + "projects", ) ALLAUTH_APPS = ( - 'allauth', - 'allauth.account', - 'allauth.socialaccount', + "allauth", + "allauth.account", + "allauth.socialaccount", # 'allauth.socialaccount.providers.google', # 'allauth.socialaccount.providers.tumblr', - 'allauth.socialaccount.providers.twitter', - 'allauth.socialaccount.providers.facebook', + "allauth.socialaccount.providers.twitter", + "allauth.socialaccount.providers.facebook", ) INSTALLED_APPS += PROJECT_APPS INSTALLED_APPS += ALLAUTH_APPS from dc_theme.settings import get_pipeline_settings -from dc_theme.settings import (STATICFILES_FINDERS, SASS_INCLUDE_PATHS) # noqa +from dc_theme.settings import STATICFILES_FINDERS, SASS_INCLUDE_PATHS # noqa PIPELINE = get_pipeline_settings( - extra_css=['css/styles.scss', ], - extra_js=['js/date.format.js', ], + extra_css=["css/styles.scss",], extra_js=["js/date.format.js",], ) -PIPELINE['STYLESHEETS']['styles']['extra_context']['media'] = "screen,projection,print" +PIPELINE["STYLESHEETS"]["styles"]["extra_context"][ + "media" +] = "screen,projection,print" -STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage' +STATICFILES_STORAGE = "pipeline.storage.PipelineCachedStorage" LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'filters': { - 'require_debug_false': { - '()': 'django.utils.log.RequireDebugFalse' - } + "version": 1, + "disable_existing_loggers": False, + "filters": { + "require_debug_false": {"()": "django.utils.log.RequireDebugFalse"} }, - 'handlers': { - 'mail_admins': { - 'level': 'ERROR', - 'filters': ['require_debug_false'], - 'class': 'django.utils.log.AdminEmailHandler' + "handlers": { + "mail_admins": { + "level": "ERROR", + "filters": ["require_debug_false"], + "class": "django.utils.log.AdminEmailHandler", } }, - 'loggers': { - 'django.request': { - 'handlers': ['mail_admins'], - 'level': 'ERROR', - 'propagate': True, + "loggers": { + "django.request": { + "handlers": ["mail_admins"], + "level": "ERROR", + "propagate": True, }, - } + }, } TEMPLATES = [ { - 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [ - root('templates') - ], - 'APP_DIRS': True, - 'OPTIONS': { - 'context_processors': [ + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": [root("templates")], + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.i18n", "django.template.context_processors.media", "django.template.context_processors.static", - 'django.template.context_processors.request', + "django.template.context_processors.request", "django.template.context_processors.tz", "django.contrib.messages.context_processors.messages", "django.contrib.auth.context_processors.auth", - 'dc_theme.context_processors.dc_theme_context', - 'dc_signup_form.context_processors.signup_form', + "dc_theme.context_processors.dc_theme_context", + "dc_signup_form.context_processors.signup_form", ], - 'debug': DEBUG + "debug": DEBUG, }, }, ] @@ -190,16 +186,18 @@ LOGIN_REDIRECT_URL = "/members/" SOCIALACCOUNT_AUTO_SIGNUP = True -SOCIALACCOUNT_QUERY_EMAIL=True +SOCIALACCOUNT_QUERY_EMAIL = True ACCOUNT_USERNAME_REQUIRED = False SOCIALACCOUNT_PROVIDERS = { - 'google': {'SCOPE': ['https://www.googleapis.com/auth/userinfo.profile'], - 'AUTH_PARAMS': {'access_type': 'online'}}, - 'facebook': { - 'SCOPE': ['email',], + "google": { + "SCOPE": ["https://www.googleapis.com/auth/userinfo.profile"], + "AUTH_PARAMS": {"access_type": "online"}, + }, + "facebook": { + "SCOPE": ["email",], # 'AUTH_PARAMS': {'auth_type': 'reauthenticate'}, - 'METHOD': 'oauth2', - }, + "METHOD": "oauth2", + }, } ACCOUNT_EMAIL_VERIFICATION = "optional" ACCOUNT_EMAIL_REQUIRED = True @@ -208,11 +206,11 @@ # EMAILS -TEST_RUNNER = 'django.test.runner.DiscoverRunner' +TEST_RUNNER = "django.test.runner.DiscoverRunner" # importing test settings file if necessary (TODO could be done better) -if len(sys.argv) > 1 and 'test' in sys.argv[1]: +if len(sys.argv) > 1 and "test" in sys.argv[1]: from .testing import * # noqa @@ -231,21 +229,23 @@ } GO_CARDLESS_PAYMENT_NAME = "Democracy Club Donation" -GO_CARDLESS_PAYMENT_DESCRIPTION = "Helping Democracy Club "\ -"increase the quality of information on elections & the democratic processes" +GO_CARDLESS_PAYMENT_DESCRIPTION = ( + "Helping Democracy Club " + "increase the quality of information on elections & the democratic processes" +) GOCARDLESS_REDIRECT_URL = "https://democracyclub.org.uk/donate/process/" -CORS_URLS_REGEX = r'^/research/answers/*|/members/api/members/*$' +CORS_URLS_REGEX = r"^/research/answers/*|/members/api/members/*$" CORS_ORIGIN_WHITELIST = ( - 'localhost:8000', - 'localhost:4000', - 'yournextmp.com', - 'meetyournextmp.com', - 'electionmentions.com', - 'cv.democracyclub.org.uk', - 'pollingstations.democracyclub.org.uk', - 'democracyclub.org.uk', - ) + "localhost:8000", + "localhost:4000", + "yournextmp.com", + "meetyournextmp.com", + "electionmentions.com", + "cv.democracyclub.org.uk", + "pollingstations.democracyclub.org.uk", + "democracyclub.org.uk", +) SITE_TITLE = "Democracy Club" @@ -254,11 +254,11 @@ BACKLOG_TRELLO_DEFAULT_LIST_ID = "58bd618abc9a825bd64b5d8f" - # .local.py overrides all the common settings. import os + try: - if os.environ.get('FRAMEWORK', None) == 'Zappa': + if os.environ.get("FRAMEWORK", None) == "Zappa": from .zappa import * # noqa else: from .local import * # noqa diff --git a/democracy_club/settings/testing.py b/democracy_club/settings/testing.py index 0a62fb59..66589a61 100644 --- a/democracy_club/settings/testing.py +++ b/democracy_club/settings/testing.py @@ -3,7 +3,7 @@ BACKLOG_TRELLO_KEY = "empty" BACKLOG_TRELLO_TOKEN = "empty" -STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage' +STATICFILES_STORAGE = "pipeline.storage.PipelineStorage" GOCARDLESS_USE_SANDBOX = True GOCARDLESS_ACCESS_TOKEN = "Made Up" diff --git a/democracy_club/settings/zappa.py b/democracy_club/settings/zappa.py index 892b98d0..69c5e0a9 100644 --- a/democracy_club/settings/zappa.py +++ b/democracy_club/settings/zappa.py @@ -2,25 +2,25 @@ from .base import * # noqa -ZAPPA_STAGE = os.environ['STAGE'] -assert ZAPPA_STAGE in ('dev', 'prod') +ZAPPA_STAGE = os.environ["STAGE"] +assert ZAPPA_STAGE in ("dev", "prod") -FORCE_SCRIPT_NAME = '/' +FORCE_SCRIPT_NAME = "/" ALLOWED_HOSTS = [ - '8yx8ogttjk.execute-api.eu-west-1.amazonaws.com', # Dev - 'qwhhmkhcfk.execute-api.eu-west-1.amazonaws.com', # Prod + "8yx8ogttjk.execute-api.eu-west-1.amazonaws.com", # Dev + "qwhhmkhcfk.execute-api.eu-west-1.amazonaws.com", # Prod ] # Override the database name and user if needed DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.postgresql_psycopg2', - 'HOST': os.environ.get('DATABASE_HOST'), - 'USER': os.environ.get('DATABASE_USER'), - 'PORT': '5432', - 'NAME': os.environ.get('DATABASE_NAME'), - 'PASSWORD': os.environ.get('DATABASE_PASS') + "default": { + "ENGINE": "django.db.backends.postgresql_psycopg2", + "HOST": os.environ.get("DATABASE_HOST"), + "USER": os.environ.get("DATABASE_USER"), + "PORT": "5432", + "NAME": os.environ.get("DATABASE_NAME"), + "PASSWORD": os.environ.get("DATABASE_PASS"), } } @@ -32,10 +32,10 @@ ) -PIPELINE['COMPILERS'] = ('core.s3_lambda_storage.LambdaSASSCompiler', ) # noqa +PIPELINE["COMPILERS"] = ("core.s3_lambda_storage.LambdaSASSCompiler",) # noqa AWS_S3_SECURE_URLS = True -AWS_S3_HOST = 's3-eu-west-1.amazonaws.com' +AWS_S3_HOST = "s3-eu-west-1.amazonaws.com" AWS_S3_USE_SSL = False AWS_S3_REGION_NAME = "eu-west-2" @@ -46,32 +46,32 @@ AWS_STORAGE_BUCKET_NAME = "static.democracyclub.org.uk" AWS_S3_CUSTOM_DOMAIN = "static.democracyclub.org.uk" -STATICFILES_LOCATION = 'static' +STATICFILES_LOCATION = "static" STATIC_URL = "https://%s/%s/" % (AWS_S3_CUSTOM_DOMAIN, STATICFILES_LOCATION) -STATICFILES_STORAGE = 'core.s3_lambda_storage.StaticStorage' +STATICFILES_STORAGE = "core.s3_lambda_storage.StaticStorage" -MEDIAFILES_LOCATION = 'media' +MEDIAFILES_LOCATION = "media" MEDIA_URL = "https://{}/{}/".format(AWS_S3_CUSTOM_DOMAIN, MEDIAFILES_LOCATION) -DEFAULT_FILE_STORAGE = 'core.s3_lambda_storage.MediaStorage' +DEFAULT_FILE_STORAGE = "core.s3_lambda_storage.MediaStorage" CSRF_TRUSTED_ORIGINS = [ - 'stage.democracyclub.org.uk', - 'democracyclub.org.uk', + "stage.democracyclub.org.uk", + "democracyclub.org.uk", ] DEBUG = False -GOCARDLESS_ACCESS_TOKEN = os.environ.get('GOCARDLESS_ACCESS_TOKEN') +GOCARDLESS_ACCESS_TOKEN = os.environ.get("GOCARDLESS_ACCESS_TOKEN") -BACKLOG_TRELLO_KEY = os.environ.get('BACKLOG_TRELLO_KEY') -BACKLOG_TRELLO_TOKEN = os.environ.get('BACKLOG_TRELLO_TOKEN') +BACKLOG_TRELLO_KEY = os.environ.get("BACKLOG_TRELLO_KEY") +BACKLOG_TRELLO_TOKEN = os.environ.get("BACKLOG_TRELLO_TOKEN") -GOCARDLESS_APP_ID = os.environ.get('GOCARDLESS_APP_ID') -GOCARDLESS_APP_SECRET = os.environ.get('GOCARDLESS_APP_SECRET') -GOCARDLESS_ACCESS_TOKEN = os.environ.get('GOCARDLESS_ACCESS_TOKEN') -GOCARDLESS_MERCHANT_ID = os.environ.get('GOCARDLESS_MERCHANT_ID') +GOCARDLESS_APP_ID = os.environ.get("GOCARDLESS_APP_ID") +GOCARDLESS_APP_SECRET = os.environ.get("GOCARDLESS_APP_SECRET") +GOCARDLESS_ACCESS_TOKEN = os.environ.get("GOCARDLESS_ACCESS_TOKEN") +GOCARDLESS_MERCHANT_ID = os.environ.get("GOCARDLESS_MERCHANT_ID") -SENDGRID_API_KEY = os.environ.get('SENDGRID_API_KEY') +SENDGRID_API_KEY = os.environ.get("SENDGRID_API_KEY") import sentry_sdk @@ -80,10 +80,9 @@ sentry_sdk.init( dsn=os.environ.get("SENTRY_DSN"), integrations=[DjangoIntegration()], - # If you wish to associate users to errors (assuming you are using # django.contrib.auth) you may enable sending PII data. - send_default_pii=True + send_default_pii=True, ) diff --git a/democracy_club/urls.py b/democracy_club/urls.py index 44ac6d7d..72416f1b 100644 --- a/democracy_club/urls.py +++ b/democracy_club/urls.py @@ -12,54 +12,89 @@ # Uncomment the next two lines to enable the admin: from django.contrib import admin + admin.autodiscover() -handler500 = 'dc_theme.urls.dc_server_error' +handler500 = "dc_theme.urls.dc_server_error" urlpatterns = [ # Uncomment the next line to enable the admin: - url(r'^admin/', admin.site.urls), - url(r'^accounts/', include('allauth.urls')), - url(r'^logout/$', auth_views.logout, - {'next_page': '/'}, name='auth_logout'), - url(r'^$', HomeView.as_view(), name="home"), - url(r'^thanks/$', - TemplateView.as_view(template_name="thanks.html")), - url(r'^thanks/finished$', - TemplateView.as_view(template_name="thanks_finished.html")), - - + url(r"^admin/", admin.site.urls), + url(r"^accounts/", include("allauth.urls")), + url( + r"^logout/$", auth_views.logout, {"next_page": "/"}, name="auth_logout" + ), + url(r"^$", HomeView.as_view(), name="home"), + url(r"^thanks/$", TemplateView.as_view(template_name="thanks.html")), + url( + r"^thanks/finished$", + TemplateView.as_view(template_name="thanks_finished.html"), + ), # About URLs - url(r'^about/$', - TemplateView.as_view(template_name="about/index.html"), name="about"), - url(r'^about/jobs/$', - TemplateView.as_view(template_name="about/jobs.html"), name="jobs"), - url(r'^about/funding/$', - TemplateView.as_view(template_name="about/funding.html"), name="funding"), - url(r'^about/team/$', - TemplateView.as_view(template_name="about/team.html"), name="team"), - url(r'^privacy/$', - TemplateView.as_view(template_name="privacy.html"), name="privacy"), - url(r'^code-of-conduct/$', - TemplateView.as_view(template_name="code-of-conduct.html"), name="coc"), - url(r'^projects/', include('projects.urls', namespace="projects")), - url(r'^contact/$', - TemplateView.as_view(template_name="contact.html"), name="contact"), - url(r'^blog/', include('hermes.urls')), - url(r'^donate/', include('donations.urls', namespace="donations")), - url(r'^report_2016/', include('report_2016.urls', namespace="report_2016")), - url(r'^report_2017/', include('report_2017.urls', namespace="report_2017")), - url(r'^report_2018/', include('report_2018.urls', namespace="report_2018")), - url(r'^report_2019/', include('report_2019.urls', namespace="report_2019")), - url(r'^reports/whos_missing/', include('report_whos_missing.urls', namespace="report_whos_missing")), - url(r'^wheredoivote_user_feedback/', - include('wheredoivote_user_feedback.urls', - namespace="wheredoivote_user_feedback") + url( + r"^about/$", + TemplateView.as_view(template_name="about/index.html"), + name="about", + ), + url( + r"^about/jobs/$", + TemplateView.as_view(template_name="about/jobs.html"), + name="jobs", + ), + url( + r"^about/funding/$", + TemplateView.as_view(template_name="about/funding.html"), + name="funding", + ), + url( + r"^about/team/$", + TemplateView.as_view(template_name="about/team.html"), + name="team", + ), + url( + r"^privacy/$", + TemplateView.as_view(template_name="privacy.html"), + name="privacy", + ), + url( + r"^code-of-conduct/$", + TemplateView.as_view(template_name="code-of-conduct.html"), + name="coc", + ), + url(r"^projects/", include("projects.urls", namespace="projects")), + url( + r"^contact/$", + TemplateView.as_view(template_name="contact.html"), + name="contact", + ), + url(r"^blog/", include("hermes.urls")), + url(r"^donate/", include("donations.urls", namespace="donations")), + url(r"^report_2016/", include("report_2016.urls", namespace="report_2016")), + url(r"^report_2017/", include("report_2017.urls", namespace="report_2017")), + url(r"^report_2018/", include("report_2018.urls", namespace="report_2018")), + url(r"^report_2019/", include("report_2019.urls", namespace="report_2019")), + url( + r"^report_parl.2019/", + include( + "report_2019_general_election.urls", + namespace="report_2019_general_election", ), - url(r'^quests/', include('backlog.urls', namespace="backlog")), - url(r'^data/$', - RedirectView.as_view(url=reverse_lazy("projects")), ), - url(r'^mailing_list/', - include('mailing_list.urls', namespace="dc_signup_form")), + url( + r"^reports/whos_missing/", + include("report_whos_missing.urls", namespace="report_whos_missing"), + ), + url( + r"^wheredoivote_user_feedback/", + include( + "wheredoivote_user_feedback.urls", + namespace="wheredoivote_user_feedback", + ), + ), + url(r"^quests/", include("backlog.urls", namespace="backlog")), + url(r"^data/$", RedirectView.as_view(url=reverse_lazy("projects")),), + url( + r"^mailing_list/", + include("mailing_list.urls", namespace="dc_signup_form"), + ), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/democracy_club/wsgi.py b/democracy_club/wsgi.py index bd526e94..6ad35070 100644 --- a/democracy_club/wsgi.py +++ b/democracy_club/wsgi.py @@ -25,4 +25,5 @@ from django.core.wsgi import get_wsgi_application -application = get_wsgi_application() \ No newline at end of file + +application = get_wsgi_application() diff --git a/manage.py b/manage.py index 0d1cf94d..ddfcacc0 100644 --- a/manage.py +++ b/manage.py @@ -7,4 +7,4 @@ from django.core.management import execute_from_command_line - execute_from_command_line(sys.argv) \ No newline at end of file + execute_from_command_line(sys.argv) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..83c116eb --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,2 @@ +[tool.black] +line-length = 80 diff --git a/requirements/base.txt b/requirements/base.txt index a0f6849f..0e1a7143 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -33,3 +33,5 @@ django-storages==1.6.5 boto3==1.7.74 sentry-sdk==0.14.3 + +black==19.10b0 diff --git a/zappa_commands.py b/zappa_commands.py index 931f947d..8e229e63 100644 --- a/zappa_commands.py +++ b/zappa_commands.py @@ -31,10 +31,14 @@ commands you should use `zappa manage`. """ + class Runner: def __getattr__(self, attr): from django.core.management import call_command + return lambda: call_command(attr) + import sys + sys.modules[__name__] = Runner()