From f80740e30cd214fcc992bba5beb5524b698d0a90 Mon Sep 17 00:00:00 2001 From: Mark Norman Francis Date: Sun, 1 Aug 2021 09:23:00 +0100 Subject: [PATCH] Add a CSV of all wearings This allows users of the site to reuse their own data in some manner, and to take backups of their data. --- hasworn/wearers/models.py | 4 +++- hasworn/wearers/pages.py | 30 ++++++++++++++++++++++++++++++ nginx/prod/static.conf.template | 9 +++++++-- 3 files changed, 40 insertions(+), 3 deletions(-) diff --git a/hasworn/wearers/models.py b/hasworn/wearers/models.py index f54f01d..f0ff6c8 100644 --- a/hasworn/wearers/models.py +++ b/hasworn/wearers/models.py @@ -4,7 +4,7 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ -from .pages import WearerPage, WearerWornPage, WearerYear, WearerTypeIndex +from .pages import WearerPage, WearerWornPage, WearerYear, WearerTypeIndex, WearerCSV class Wearer(AbstractUser): @@ -94,6 +94,7 @@ def generate_wearer_site_wearing(self, wearing): WearerTypeIndex(wearer=self).create() WearerYear(wearer=self, year=wearing.day.year).create() WearerPage(wearer=self).create() + WearerCSV(wearer=self).create() def generate_wearer_site(self): WearerPage(wearer=self).create() @@ -102,3 +103,4 @@ def generate_wearer_site(self): for year in self.years_active(): WearerYear(wearer=self, year=year).create() WearerTypeIndex(wearer=self).create() + WearerCSV(wearer=self).create() diff --git a/hasworn/wearers/pages.py b/hasworn/wearers/pages.py index d1cda72..e1bc14a 100644 --- a/hasworn/wearers/pages.py +++ b/hasworn/wearers/pages.py @@ -1,5 +1,8 @@ +import csv from datetime import date +from django.conf import settings from hasworn.pages import ModelPage, StaticPage +import os class WearerPage(StaticPage): @@ -45,3 +48,30 @@ def get_context(self, **kwargs): context = super().get_context(**kwargs) context['wearings'] = self.wearer.most_worn() return context + + +class WearerCSV(StaticPage): + def get_filename(self): + return '%s/index.csv' % self.wearer.username + + def create_page(self): + filename = self.get_filename() + full_filename = os.path.join(settings.GENERATED_SITES_DIR, filename) + with open(full_filename, 'w') as handle: + print('->', full_filename) + writer = csv.DictWriter( + handle, + fieldnames=['day','type','slug','name'], + ) + writer.writeheader() + + wearings = self.wearer.wearings.select_related( + 'worn__clothing' + ).order_by('day') + for wearing in wearings: + writer.writerow({ + 'day': wearing.day, + 'type': wearing.clothing.type, + 'slug': wearing.clothing.slug, + 'name': wearing.clothing.name, + }) diff --git a/nginx/prod/static.conf.template b/nginx/prod/static.conf.template index be0ed62..f295d8a 100644 --- a/nginx/prod/static.conf.template +++ b/nginx/prod/static.conf.template @@ -1,3 +1,7 @@ +types { + text/csv csv; +} + server { listen 8080; server_name ~^([a-z][a-z0-9-]+)\.hasworn\.com$ ; @@ -14,7 +18,8 @@ server { server_name ~^([a-z][a-z0-9-]+)\.hasworn\.com$ ; root /baked/$1; - location / { - try_files $uri/index.html $uri.html =404; + location = /index.csv {} + location / { + try_files $uri.html $uri/index.html =404; } }