From 2e5f2d4c4fe81f8d6a7a83126197d6cb05ca081b Mon Sep 17 00:00:00 2001 From: Greg Thole Date: Sat, 3 Feb 2018 12:41:43 -0500 Subject: [PATCH] Tests work once more --- gedgo/gedcom_update.py | 8 +-- gedgo/management/commands/update_gedcom.py | 4 +- gedgo/models/comment.py | 3 +- gedgo/models/gedcom.py | 2 - gedgo/models/person.py | 1 + gedgo/storages.py | 6 +- gedgo/tasks.py | 4 +- gedgo/tests.py | 72 +++++++++++++--------- gedgo/views/__init__.py | 3 +- gedgo/views/dashboard.py | 4 +- gedgo/views/media.py | 4 +- gedgo/views/model_views.py | 3 +- gedgo/views/research.py | 5 +- gedgo/views/util.py | 1 - gedgo/views/visualizations.py | 1 + test.sh | 4 +- 16 files changed, 71 insertions(+), 54 deletions(-) diff --git a/gedgo/gedcom_update.py b/gedgo/gedcom_update.py index 035c46e..a140e6a 100644 --- a/gedgo/gedcom_update.py +++ b/gedgo/gedcom_update.py @@ -5,7 +5,7 @@ from django.db import transaction from django.utils.datetime_safe import date from django.utils import timezone -from datetime import datetime, date +from datetime import datetime from re import findall from os import path @@ -24,7 +24,8 @@ def update(g, file_name, verbose=True): title=__child_value_by_tags(parsed.header, 'TITL', default=''), last_updated=datetime(1920, 1, 1) # TODO: Fix. ) - print 'Gedcom id=%s' % g.id + if verbose: + print 'Gedcom id=%s' % g.id if verbose: print 'Importing entries to models' @@ -177,7 +178,6 @@ def __process_Person(entry, g): p.profile.add(d) - def __process_Family(entry, g): f, _ = Family.objects.get_or_create( pointer=entry['pointer'], @@ -297,7 +297,7 @@ def __check_unchanged(entry, existing): __child_value_by_tags(entry, ['CHAN', 'DATE']) )[0] return isinstance(existing.last_changed, date) and \ - changed == existing.last_changed + changed == existing.last_changed DATE_FORMATS = [ diff --git a/gedgo/management/commands/update_gedcom.py b/gedgo/management/commands/update_gedcom.py index c608076..b2ce1fc 100644 --- a/gedgo/management/commands/update_gedcom.py +++ b/gedgo/management/commands/update_gedcom.py @@ -32,7 +32,7 @@ def handle(self, *args, **options): gid = args[0] try: g = Gedcom.objects.get(pk=gid) - except: + except Exception: raise CommandError('Gedcom "%s" does not exist.' % gid) file_name = args[1] @@ -51,7 +51,7 @@ def handle(self, *args, **options): errstr = '' try: update(g, file_name) - except: + except Exception: e = exc_info()[0] errstr = 'There was an error: %s\n%s' % ( e, traceback.format_exc()) diff --git a/gedgo/models/comment.py b/gedgo/models/comment.py index 88006ce..38ce10b 100644 --- a/gedgo/models/comment.py +++ b/gedgo/models/comment.py @@ -9,7 +9,8 @@ class Meta: user = models.ForeignKey(User) text = models.TextField() posted = models.DateTimeField(auto_now_add=True) - upload = models.FileField(upload_to='uploads/comments', null=True, blank=True) + upload = models.FileField(upload_to='uploads/comments', null=True, + blank=True) gedcom = models.ForeignKey('Gedcom', null=True, blank=True) person = models.ForeignKey('Person', null=True, blank=True) diff --git a/gedgo/models/gedcom.py b/gedgo/models/gedcom.py index fb61e7f..e6cd9ee 100644 --- a/gedgo/models/gedcom.py +++ b/gedgo/models/gedcom.py @@ -1,6 +1,4 @@ from django.db import models -import random - from person import Person diff --git a/gedgo/models/person.py b/gedgo/models/person.py index 1395e45..60f2304 100644 --- a/gedgo/models/person.py +++ b/gedgo/models/person.py @@ -134,6 +134,7 @@ def education_delimited(self): else: return '' + # Keywords to filter out document-type photos in preference of portraits. BLOCK_TAGS_RE = re.compile( "(?i)(?:death|birth|masscard|census|burial|tax|obit|cemet(?:a|e)ry|" diff --git a/gedgo/storages.py b/gedgo/storages.py index 38903fa..805281f 100644 --- a/gedgo/storages.py +++ b/gedgo/storages.py @@ -26,7 +26,7 @@ def exists(self, name): self.client.files_get_metadata(self.path(name)), (FileMetadata, FolderMetadata) ) - except: + except Exception: return False def listdir(self, name): @@ -43,7 +43,7 @@ def _list_from_contents(self, path, contents): return (directories, files) def open(self, name, mode='rb'): - meta, resp= self.client.files_download(self.path(name)) + meta, resp = self.client.files_download(self.path(name)) return resp.raw def size(self, name): @@ -81,7 +81,6 @@ def can_preview(self, name): ) - class FileSystemSearchableStorage(FileSystemStorage): def search(self, query): terms = [term for term in query.lower().split()] @@ -126,6 +125,7 @@ def resize_thumb(file_, size='w128h128', crop=None): im.save(output, 'JPEG') return output + research_storage = import_string(settings.GEDGO_RESEARCH_FILE_STORAGE)( location=settings.GEDGO_RESEARCH_FILE_ROOT) diff --git a/gedgo/tasks.py b/gedgo/tasks.py index e135944..d75cff7 100644 --- a/gedgo/tasks.py +++ b/gedgo/tasks.py @@ -1,6 +1,8 @@ +# flake8: noqa: E402 from __future__ import absolute_import import os os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings') + import django django.setup() @@ -29,7 +31,7 @@ def async_update(gedcom_id, file_name, recipient_ids, errstr = '' try: update(gedcom, file_name, verbose=False) - except: + except Exception: errstr = traceback.format_exc() end = datetime.now() diff --git a/gedgo/tests.py b/gedgo/tests.py index 897a79b..e79a18d 100644 --- a/gedgo/tests.py +++ b/gedgo/tests.py @@ -4,7 +4,7 @@ from django.test.utils import override_settings from gedgo.gedcom_update import update -from gedgo.models import Person, Family, Gedcom +from gedgo.models import Person, Family, Gedcom, Comment from datetime import date from mock import patch @@ -87,35 +87,56 @@ def test_pages_load(self): self.assertEqual(resp.status_code, 200, '%s %s' % (resp.status_code, page)) - def test_comments(self): - pages = [ - ('/gedgo/1/', 'Test Gedcom'), - ('/gedgo/1/I1/', 'John Doe (I1)') - ] + def test_comment_person(self): self.login_user() data = { - 'message': 'My test message' + 'person': 'I1', + 'text': 'My test message' } - for page, noun in pages: - resp = self.client.post(page, data) - self.assertEqual(resp.status_code, 302) - self.assertEqual(len(mail.outbox), 1) - message = mail.outbox[0] - self.assertEqual( - message.subject, - 'Comment from Test User about %s' % noun - ) - self.assertEqual(message.body, data['message'] + '\n\n') + resp = self.client.post('/gedgo/%s/I1/' % self.gedcom.id, data) + self.assertEqual(resp.status_code, 302) - mail.outbox = [] + self.assertEqual(len(mail.outbox), 1) + message = mail.outbox[0] + self.assertEqual( + message.subject, + 'Comment from Test User about Doe, John (I1)' + ) + self.assertEqual(message.body.split('\n\n')[-1], data['text']) + self.assertEqual( + Comment.objects.filter(person__pointer='I1').count(), + 1 + ) + + mail.outbox = [] + + def test_comment_gedcom(self): + self.login_user() + data = { + 'gedcom': '1', + 'text': 'My test message' + } + resp = self.client.post('/gedgo/1/', data) + self.assertEqual(resp.status_code, 302) + + self.assertEqual(len(mail.outbox), 1) + message = mail.outbox[0] + self.assertEqual( + message.subject, + 'Comment from Test User about Test Gedcom (1)' + ) + self.assertEqual(message.body.split('\n\n')[-1], data['text']) + self.assertEqual(Comment.objects.filter(gedcom__id=1).count(), 1) + mail.outbox = [] @patch('django.core.files.storage.default_storage.save') def test_upload_file(self, FileStorageMock): self.login_user() with open('gedgo/static/img/generic_person.gif') as fp: data = { - 'message': 'My test message', + 'person': 'I1', + 'text': 'My test message', 'uploads': fp } resp = self.client.post('/gedgo/%s/I1/' % self.gedcom.id, data) @@ -125,18 +146,11 @@ def test_upload_file(self, FileStorageMock): message = mail.outbox[0] self.assertEqual( message.subject, - 'Comment from Test User about John Doe (I1)' - ) - self.assertTrue( - message.body.endswith( - 'uploaded/test/%s/I1/generic_person.gif' % self.gedcom.id - ) + 'Comment from Test User about Doe, John (I1)' ) - self.assertTrue(FileStorageMock.called) - self.assertTrue( - ('uploaded/test/%s/I1/generic_person.gif' % self.gedcom.id) - in str(FileStorageMock.call_args)) + comment = Comment.objects.filter(person__pointer='I1').first() + self.assertFalse(comment.upload is None) # TODO: Sort this test out @override_settings(CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, diff --git a/gedgo/views/__init__.py b/gedgo/views/__init__.py index 931767d..793e10e 100644 --- a/gedgo/views/__init__.py +++ b/gedgo/views/__init__.py @@ -1,5 +1,6 @@ from search import search -from model_views import person, gedcom, documentaries, document, documentary_by_id +from model_views import person, gedcom, documentaries, document, \ + documentary_by_id from dashboard import dashboard, user_tracking, worker_status from blog import blog, blog_list, blogpost from research import research diff --git a/gedgo/views/dashboard.py b/gedgo/views/dashboard.py index 597a768..526484e 100644 --- a/gedgo/views/dashboard.py +++ b/gedgo/views/dashboard.py @@ -61,7 +61,7 @@ def worker_status(request): """ try: status = app.control.ping() or [] - except Exception as e: + except Exception: # TODO: What celery exceptions are we catching here? status = [] return HttpResponse( @@ -166,5 +166,5 @@ def _timestamp_from_redis(key): try: timestamp = redis.get(key) return datetime.datetime.fromtimestamp(int(timestamp)) - except: + except Exception: pass diff --git a/gedgo/views/media.py b/gedgo/views/media.py index aea5eb9..00930db 100644 --- a/gedgo/views/media.py +++ b/gedgo/views/media.py @@ -3,10 +3,10 @@ from django.contrib.auth.decorators import login_required from django.http import Http404 from django.conf import settings -from django.shortcuts import redirect from gedgo.views.research import can_preview -from gedgo.storages import gedcom_storage, research_storage, documentary_storage +from gedgo.storages import gedcom_storage, research_storage, \ + documentary_storage import mimetypes from os import path diff --git a/gedgo/views/model_views.py b/gedgo/views/model_views.py index fa368aa..bde6f51 100644 --- a/gedgo/views/model_views.py +++ b/gedgo/views/model_views.py @@ -39,7 +39,8 @@ def person(request, gedcom_id, person_id): context = { 'person': p, 'posts': BlogPost.objects.filter(tagged_people=p), - 'photos': [photo for photo in p.photos if not photo.id == p.key_photo.id], + 'photos': [photo for photo in p.photos + if not photo.id == p.key_photo.id], 'gedcom': g, 'form': form, 'comment_noun': str(p) diff --git a/gedgo/views/research.py b/gedgo/views/research.py index d23b937..b7cd4b2 100644 --- a/gedgo/views/research.py +++ b/gedgo/views/research.py @@ -1,6 +1,5 @@ from django.http import Http404 from django.contrib.auth.decorators import login_required -from django.core.files.storage import default_storage from os import path import mimetypes @@ -68,7 +67,7 @@ def research(request, pathname): if request.GET.get('fn'): try: index = [f[len(dirname):] for f in files].index(basename) - except: + except Exception: raise Http404 next_file = files[(index + 1) % len(files)] prev_file = files[(index - 1) % len(files)] @@ -99,6 +98,7 @@ def process_file(name, p, is_dir=False): 'preview': can_preview(storage, p) } + # glyphicon name mappings MIMETYPE_MAPPING = { 'video': 'video-camera', @@ -107,7 +107,6 @@ def process_file(name, p, is_dir=False): } - def _get_type(c): guess, _ = mimetypes.guess_type(c) if guess and guess.split('/')[0] in MIMETYPE_MAPPING: diff --git a/gedgo/views/util.py b/gedgo/views/util.py index 24a6eae..4a5ad30 100644 --- a/gedgo/views/util.py +++ b/gedgo/views/util.py @@ -1,4 +1,3 @@ -from django.core.files.storage import default_storage from django.conf import settings from django.shortcuts import redirect from django.contrib.auth import logout diff --git a/gedgo/views/visualizations.py b/gedgo/views/visualizations.py index 885d35a..76d912f 100644 --- a/gedgo/views/visualizations.py +++ b/gedgo/views/visualizations.py @@ -151,6 +151,7 @@ def __gatherby(inlist, func): d[func(item)].append(item) return d.values() + # TODO: Switch to database storage? HISTORICAL = [ ['First Nobel Prizes awarded', 1901], diff --git a/test.sh b/test.sh index 7c59681..2ad9527 100755 --- a/test.sh +++ b/test.sh @@ -1,8 +1,8 @@ #!/bin/bash set -e -rm -rf /src/files/test -mkdir /src/files/test +rm -rf /app/files/test +mkdir /app/files/test flake8 ./ --exclude migrations