diff --git a/.drone.yml b/.drone.yml index be2af8f..fb192f6 100644 --- a/.drone.yml +++ b/.drone.yml @@ -9,6 +9,10 @@ pipeline: - cp -n env.example .env - python manage.py test mhackspace --verbosity 2 + deploy: + + + #volumes: # postgres_data_dev: {} # postgres_backup_dev: {} diff --git a/docker-compose.yml b/docker-compose.yml index 8f0abc6..3646dd9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,36 +23,36 @@ services: command: /gunicorn.sh env_file: .env - nginx: - build: ./compose/nginx - depends_on: - - django - - certbot +# nginx: +# build: ./compose/nginx +# depends_on: +# - django +# - certbot - ports: - - "0.0.0.0:80:80" +# ports: +# - "0.0.0.0:80:80" - environment: - - MY_DOMAIN_NAME=maidstone-hackspace.org.uk - ports: - - "0.0.0.0:80:80" - - "0.0.0.0:443:443" - volumes: - - /etc/letsencrypt:/etc/letsencrypt - - /var/lib/letsencrypt:/var/lib/letsencrypt +# environment: +# - MY_DOMAIN_NAME=maidstone-hackspace.org.uk +# ports: +# - "0.0.0.0:80:80" +# - "0.0.0.0:443:443" +# volumes: +# - /etc/letsencrypt:/etc/letsencrypt +# - /var/lib/letsencrypt:/var/lib/letsencrypt - certbot: - image: quay.io/letsencrypt/letsencrypt - command: bash -c "sleep 6 && certbot certonly -n --standalone -d maidstone-hackspace.org.uk --text --agree-tos --email support@maidstone-hackspace.org.uk --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01" - entrypoint: "" - volumes: - - /etc/letsencrypt:/etc/letsencrypt - - /var/lib/letsencrypt:/var/lib/letsencrypt - ports: - - "80" - - "443" - environment: - - TERM=xterm +# certbot: +# image: quay.io/letsencrypt/letsencrypt +# command: bash -c "sleep 6 && certbot certonly -n --standalone -d maidstone-hackspace.org.uk --text --agree-tos --email support@maidstone-hackspace.org.uk --server https://acme-v01.api.letsencrypt.org/directory --rsa-key-size 4096 --verbose --keep-until-expiring --standalone-supported-challenges http-01" +# entrypoint: "" +# volumes: +# - /etc/letsencrypt:/etc/letsencrypt +# - /var/lib/letsencrypt:/var/lib/letsencrypt +# ports: +# - "80" +# - "443" +# environment: +# - TERM=xterm redis: diff --git a/mhackspace/feeds/migrations/0001_initial.py b/mhackspace/feeds/migrations/0001_initial.py index 53bcf3c..4a5c9b9 100644 --- a/mhackspace/feeds/migrations/0001_initial.py +++ b/mhackspace/feeds/migrations/0001_initial.py @@ -1,8 +1,12 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10.4 on 2017-01-04 14:04 +# Generated by Django 1.10.5 on 2017-01-28 18:38 from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import stdimage.models +import stdimage.utils class Migration(migrations.Migration): @@ -13,14 +17,35 @@ class Migration(migrations.Migration): ] operations = [ + migrations.CreateModel( + name='Article', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('url', models.URLField()), + ('title', models.CharField(max_length=255)), + ('original_image', models.URLField(blank=True, max_length=255, null=True)), + ('image', stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'))), + ('description', models.TextField()), + ('displayed', models.BooleanField(default=True)), + ('date', models.DateTimeField(default=django.utils.timezone.now)), + ], + ), migrations.CreateModel( name='Feed', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.CharField(max_length=255)), + ('home_url', models.URLField(verbose_name='Site Home Page')), + ('feed_url', models.URLField(verbose_name='RSS Feed URL')), + ('title', models.CharField(max_length=255)), ('author', models.CharField(max_length=255)), - ('tags', models.CharField(max_length=255)), - ('image', models.ImageField(upload_to='')), + ('tags', models.CharField(blank=True, max_length=255)), + ('image', stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'))), + ('enabled', models.BooleanField(default=True)), ], ), + migrations.AddField( + model_name='article', + name='feed', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='feeds.Feed'), + ), ] diff --git a/mhackspace/feeds/migrations/0002_auto_20170104_2033.py b/mhackspace/feeds/migrations/0002_auto_20170104_2033.py deleted file mode 100644 index 4f8bd15..0000000 --- a/mhackspace/feeds/migrations/0002_auto_20170104_2033.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.4 on 2017-01-04 20:33 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('feeds', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='feed', - name='id', - field=models.IntegerField(primary_key=True, serialize=False), - ), - migrations.AlterField( - model_name='feed', - name='image', - field=models.ImageField(blank=True, upload_to=''), - ), - migrations.AlterField( - model_name='feed', - name='tags', - field=models.CharField(blank=True, max_length=255), - ), - ] diff --git a/mhackspace/feeds/migrations/0003_auto_20170104_2035.py b/mhackspace/feeds/migrations/0003_auto_20170104_2035.py deleted file mode 100644 index 55a38dc..0000000 --- a/mhackspace/feeds/migrations/0003_auto_20170104_2035.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.4 on 2017-01-04 20:35 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('feeds', '0002_auto_20170104_2033'), - ] - - operations = [ - migrations.AlterField( - model_name='feed', - name='id', - field=models.AutoField(primary_key=True, serialize=False), - ), - ] diff --git a/mhackspace/feeds/migrations/0004_feed_enabled.py b/mhackspace/feeds/migrations/0004_feed_enabled.py deleted file mode 100644 index 9579887..0000000 --- a/mhackspace/feeds/migrations/0004_feed_enabled.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.4 on 2017-01-04 21:39 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('feeds', '0003_auto_20170104_2035'), - ] - - operations = [ - migrations.AddField( - model_name='feed', - name='enabled', - field=models.BooleanField(default=True), - ), - ] diff --git a/mhackspace/feeds/migrations/0005_storing_articles.py b/mhackspace/feeds/migrations/0005_storing_articles.py deleted file mode 100644 index 0734fba..0000000 --- a/mhackspace/feeds/migrations/0005_storing_articles.py +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.4 on 2017-01-08 03:42 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone -import stdimage.models -import stdimage.utils - - -class Migration(migrations.Migration): - - dependencies = [ - ('feeds', '0004_feed_enabled'), - ] - - operations = [ - migrations.CreateModel( - name='Article', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.URLField()), - ('title', models.CharField(max_length=255)), - ('original_image', models.URLField(blank=True, max_length=255, null=True)), - ('image', stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title'))), - ('description', models.TextField()), - ('displayed', models.BooleanField(default=True)), - ('date', models.DateTimeField(default=django.utils.timezone.now)), - ], - ), - migrations.RemoveField( - model_name='feed', - name='url', - ), - migrations.AddField( - model_name='feed', - name='feed_url', - field=models.URLField(default='http://thearduinoguy.org/?feed=rss2', verbose_name='RSS Feed URL'), - preserve_default=False, - ), - migrations.AddField( - model_name='feed', - name='home_url', - field=models.URLField(default='http://thearduinoguy.org/', verbose_name='Site Home Page'), - preserve_default=False, - ), - migrations.AddField( - model_name='feed', - name='title', - field=models.CharField(default='The Arduino Guy', max_length=255), - preserve_default=False, - ), - migrations.AlterField( - model_name='feed', - name='id', - field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='feed', - name='image', - field=stdimage.models.StdImageField(blank=True, null=True, upload_to=stdimage.utils.UploadToAutoSlugClassNameDir('title')), - ), - migrations.AddField( - model_name='article', - name='feed', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='feeds.Feed'), - ), - ] diff --git a/mhackspace/members/views.py b/mhackspace/members/views.py index dbc597c..34972b2 100644 --- a/mhackspace/members/views.py +++ b/mhackspace/members/views.py @@ -10,7 +10,7 @@ from mhackspace.users.models import User class MemberListView(LoginRequiredMixin, ListView): template_name = 'pages/members.html' - queryset = User.objects.prefetch_related('users', 'groups') + queryset = User.objects.prefetch_related('user', 'groups') paginate_by = 10 def get_context_data(self, **kwargs): diff --git a/mhackspace/subscriptions/management/commands/list_subscriptions.py b/mhackspace/subscriptions/management/commands/list_subscriptions.py index a4e1d39..dc8f84c 100644 --- a/mhackspace/subscriptions/management/commands/list_subscriptions.py +++ b/mhackspace/subscriptions/management/commands/list_subscriptions.py @@ -24,4 +24,4 @@ class Command(BaseCommand): for sub in provider.fetch_subscriptions(): self.stdout.write( self.style.SUCCESS( - '\t{reference} - {amount} - {status} - {email}'.format(**sub))) + '\t{start_date} {reference} - {amount} - {status} - {email}'.format(**sub))) diff --git a/mhackspace/subscriptions/management/commands/refresh_subscriptions.py b/mhackspace/subscriptions/management/commands/refresh_subscriptions.py new file mode 100644 index 0000000..9406808 --- /dev/null +++ b/mhackspace/subscriptions/management/commands/refresh_subscriptions.py @@ -0,0 +1,51 @@ +from datetime import datetime +from django.utils import timezone +from django.contrib.auth.models import Group +from django.forms.models import model_to_dict +from django.core.management.base import BaseCommand +from mhackspace.subscriptions.payments import select_provider +from mhackspace.users.models import Membership, User + + +class Command(BaseCommand): + help = 'Update user subscriptions' + + def handle(self, *args, **options): + provider = select_provider('gocardless') + + self.stdout.write( + self.style.NOTICE( + '== Gocardless subscriptions ==')) + + Membership.objects.all().delete() + subscriptions = [] + + group = Group.objects.get(name='member') + + for sub in provider.fetch_subscriptions(): + try: + user_model = User.objects.get(email=sub.get('email')) + if sub.get('status') == 'active': + user_model.groups.add(group) + except User.DoesNotExist: + user_model = None + + self.stdout.write(sub.get('status')) + subscriptions.append( + Membership( + user= user_model, + email= sub.get('email'), + reference= sub.get('reference'), + payment= 10.00, + # 'date'= sub.get('start_date'), + date=timezone.now(), + status=Membership.lookup_status(name=sub.get('status')) + ) + ) + + self.stdout.write( + self.style.SUCCESS( + '\t{reference} - {payment} - {status} - {email}'.format(**model_to_dict(subscriptions[-1])))) + + Membership.objects.bulk_create(subscriptions) + diff --git a/mhackspace/subscriptions/models.py b/mhackspace/subscriptions/models.py deleted file mode 100644 index e69de29..0000000 diff --git a/mhackspace/templates/pages/members.html b/mhackspace/templates/pages/members.html index e009e7c..265c63a 100644 --- a/mhackspace/templates/pages/members.html +++ b/mhackspace/templates/pages/members.html @@ -4,8 +4,8 @@ Members feed
{{ member.users.description }}
{{ member.users.skills }}
+{{ member.status }}
{% for group in member.groups.all %} {{ group.name }} {% endfor %}{{ member.userblurb }}
+{{ member.blurb }}
Member since
Description: {{ blurb.description }}
Skills: {{ blurb.description }}
+Membership Status: {{ membership.get_status }}
MHS{{ user.id|stringformat:"05d" }}
Change me
+MHS{{ user.id|stringformat:"05d" }}
{{user.name}}{{user.last_name}}
Cancel Membership