From 313bcfa0cde99d7b15360dee2e4d9cb96fd370ee Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Sun, 15 Nov 2009 22:47:43 +0000 Subject: [PATCH] Django debug support; added table support; add missing DjangoDb funcs; minor css tweaks svn: r13594 --- src/data/Web_Mainz.css | 4 + src/data/templates/view_family_detail.html | 38 +++- src/data/templates/view_person_detail.html | 115 ++++++------ src/web/djangodb.py | 10 ++ src/web/grampsdb/templatetags/my_tags.py | 12 +- src/web/settings.py | 26 +++ src/web/utils.py | 194 ++++++++++++++++++++- 7 files changed, 332 insertions(+), 67 deletions(-) diff --git a/src/data/Web_Mainz.css b/src/data/Web_Mainz.css index a8141c0ea..63a833557 100644 --- a/src/data/Web_Mainz.css +++ b/src/data/Web_Mainz.css @@ -198,6 +198,10 @@ a:visited { margin:0 0 5px 50px; } +#data { + background-color: white; +} + /* Navigation ----------------------------------------------------- */ #navigation, #subnavigation { diff --git a/src/data/templates/view_family_detail.html b/src/data/templates/view_family_detail.html index 467430905..0240455f1 100644 --- a/src/data/templates/view_family_detail.html +++ b/src/data/templates/view_family_detail.html @@ -30,16 +30,36 @@
-
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
- -
Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.
-
Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.
+
+ + {{ family|family_children_table:user|safe }} +
+
+ {{ family|family_event_table:user|safe }} +
+
+ {{ family|family_source_table:user|safe }} +
+
+ {{ family|family_attribute_table:user|safe }} +
+
+ {{ family|family_note_table:user|safe }} +
+ +
+ {{ family|family_lds_table:user|safe }} +
diff --git a/src/data/templates/view_person_detail.html b/src/data/templates/view_person_detail.html index 449d9950a..288d0b65d 100644 --- a/src/data/templates/view_person_detail.html +++ b/src/data/templates/view_person_detail.html @@ -13,37 +13,34 @@

{{person.name_set|make_name:user}}

- +
{% comment %} 5 cols {% endcomment %} - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - - - - - - + + + + + +
Family{{person.name_set|preferred:"surname"}}Prefix{{person.name_set|preferred:"prefix"}}Family:{{person.name_set|preferred:"surname"}}Prefix:{{person.name_set|preferred:"prefix"}}Image:
Given{{person.name_set|preferred:"first_name"}}Callname{{person.name_set|preferred:"call"}}Given:{{person.name_set|preferred:"first_name"}}Call Name:{{person.name_set|preferred:"call"}}
Type{{person.name_set|preferred:"name_type"}}Patronymic{{person.name_set|preferred:"patronymic"}}Type:{{person.name_set|preferred:"name_type"}}Patronymic:{{person.name_set|preferred:"patronymic"}}
Description
ID{{person.gramps_id|escape}}
PlaceGender:{{person.gender_type|escape}}ID:{{person.gramps_id|escape}}Marker:{{person.marker_type|escape}}
@@ -55,40 +52,52 @@
-
+
- {{ person|events_table|safe }} + {{ person|person_event_table:user|safe }}
-
- - - {% for name in person.name_set.all %} - - - - - {% endfor %} -
{{forloop.counter}}{{name|make_name:user}}
+
+ {{ person|person_name_table:user|safe }} +
+
+ {{ person|person_source_table:user|safe }} +
+
+ {{ person|person_attribute_table:user|safe }} +
+
+ {{ person|person_address_table:user|safe }} +
+
+ {{ person|person_note_table:user|safe }} +
+ +
+ {{ person|person_internet_table:user|safe }} +
+
+ {{ person|person_association_table:user|safe }} +
+
+ {{ person|person_lds_table:user|safe }} +
+
+ {{ person|person_reference_table:user|safe }}
-
table 3
-
table 4
-
table 5
-
table 6
-
table 7
-
table 8
-
table 9
-
table 10
diff --git a/src/web/djangodb.py b/src/web/djangodb.py index ce8af56d3..4da6d0543 100644 --- a/src/web/djangodb.py +++ b/src/web/djangodb.py @@ -59,6 +59,16 @@ class DjangoDb(GrampsDbBase): obj.unserialize(self.dji.get_place(self.dji.Place.get(handle=handle))) return obj + def get_source_from_handle(self, handle): + obj = gen.lib.Source() + obj.unserialize(self.dji.get_source(self.dji.Source.get(handle=handle))) + return obj + + def get_note_from_handle(self, handle): + obj = gen.lib.Note() + obj.unserialize(self.dji.get_note(self.dji.Note.get(handle=handle))) + return obj + def get_person_handles(self): return [person.handle for person in self.dji.Person.all()] diff --git a/src/web/grampsdb/templatetags/my_tags.py b/src/web/grampsdb/templatetags/my_tags.py index 19eebf7c8..d63951436 100644 --- a/src/web/grampsdb/templatetags/my_tags.py +++ b/src/web/grampsdb/templatetags/my_tags.py @@ -1,10 +1,18 @@ from django.template import escape, Library from web.utils import * +import web.utils register = Library() -events_table.is_safe = True -register.filter('events_table', events_table) +util_filters = ['person_event_table', 'person_name_table', 'person_source_table', 'person_attribute_table', + 'person_address_table', 'person_note_table', 'person_gallery_table', 'person_internet_table', + 'person_association_table', 'person_lds_table', 'person_reference_table', + 'family_children_table', 'family_event_table', 'family_source_table', 'family_attribute_table', + 'family_note_table', 'family_gallery_table', 'family_lds_table'] +for filter_name in util_filters: + func = getattr(web.utils, filter_name) + func.is_safe = True + register.filter(filter_name, func) person_get_birth_date.is_safe = True register.filter('person_get_birth_date', person_get_birth_date) diff --git a/src/web/settings.py b/src/web/settings.py index 526be41a0..b3072413f 100644 --- a/src/web/settings.py +++ b/src/web/settings.py @@ -6,6 +6,8 @@ import os DEBUG = True TEMPLATE_DEBUG = DEBUG +INTERNAL_IPS = ('127.0.0.1',) + ADMINS = ( ('admin', 'your_email@domain.com'), ) @@ -35,6 +37,7 @@ MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', +# 'debug_toolbar.middleware.DebugToolbarMiddleware', ) ROOT_URLCONF = 'web.urls' @@ -60,8 +63,31 @@ INSTALLED_APPS = ( 'django.contrib.admin', 'web.grampsdb', # 'django_extensions', +# 'debug_toolbar', ) +DEBUG_TOOLBAR_PANELS = ( + 'debug_toolbar.panels.version.VersionDebugPanel', + 'debug_toolbar.panels.timer.TimerDebugPanel', + 'debug_toolbar.panels.settings_vars.SettingsVarsDebugPanel', + 'debug_toolbar.panels.headers.HeaderDebugPanel', + 'debug_toolbar.panels.request_vars.RequestVarsDebugPanel', + 'debug_toolbar.panels.template.TemplateDebugPanel', + 'debug_toolbar.panels.sql.SQLDebugPanel', + 'debug_toolbar.panels.signals.SignalDebugPanel', + 'debug_toolbar.panels.logger.LoggingPanel', + ) + +def custom_show_toolbar(request): + return True # Always show toolbar, for example purposes only. + +DEBUG_TOOLBAR_CONFIG = { + 'INTERCEPT_REDIRECTS': True, +# 'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar, +# 'EXTRA_SIGNALS': ['myproject.signals.MySignal'], + 'HIDE_DJANGO_SQL': False, + } + # Had to add these to use settings.configure(): DATABASE_OPTIONS = '' URL_VALIDATOR_USER_AGENT = '' diff --git a/src/web/utils.py b/src/web/utils.py index 2058af7ca..7d92d48aa 100644 --- a/src/web/utils.py +++ b/src/web/utils.py @@ -61,7 +61,7 @@ class Table(object): _ = lambda text: text -def events_table(djperson): +def person_event_table(djperson, user): table = Table() table.columns(_("Description"), _("Type"), @@ -75,7 +75,6 @@ def events_table(djperson): object_type=obj_type).order_by("order") event_list = [(obj.ref_object, obj) for obj in event_ref_list] for (djevent, event_ref) in event_list: - print djevent.description table.row( djevent.description, table.db.get_event_from_handle(djevent.handle), @@ -85,6 +84,195 @@ def events_table(djperson): str(event_ref.role_type)) return table.get_html() +def person_name_table(djperson, user): + table = Table() + table.columns(_("Name"), + _("Type"), + _("Group As"), + _("Source"), + _("Note Preview")) + for name in djperson.name_set.all(): + obj_type = ContentType.objects.get_for_model(name) + sourceq = dji.SourceRef.filter(object_type=obj_type, + object_id=name.id).count() > 0 + note_refs = dji.NoteRef.filter(object_type=obj_type, + object_id=name.id) + note = "" + if note_refs.count() > 0: + note = dji.Note.get(id=note_refs[0].object_id).text[:50] + table.row(make_name(name, user), + str(name.name_type), + name.group_as, + ["No", "Yes"][sourceq], + note) + return table.get_html() + +def person_source_table(djperson, user): + table = Table() + table.columns(_("ID"), + _("Title"), + _("Author"), + _("Page")) + obj_type = ContentType.objects.get_for_model(djperson) + source_refs = dji.SourceRef.filter(object_type=obj_type, + object_id=djperson.id) + for source_ref in source_refs: + source = table.db.get_source_from_handle(source_ref.ref_object.handle) + table.row(source, + source_ref.ref_object.title, + source_ref.ref_object.author, + source_ref.page, + ) + return table.get_html() + +def person_attribute_table(djperson, user): + table = Table() + table.columns(_("Type"), + _("Value"), + ) + obj_type = ContentType.objects.get_for_model(djperson) + attributes = dji.Attribute.filter(object_type=obj_type, + object_id=djperson.id) + for attribute in attributes: + table.row(attribute.attribute_type.name, + attribute.value) + return table.get_html() + +def person_address_table(djperson, user): + table = Table() + table.columns(_("Date"), + _("Address"), + _("City"), + _("State"), + _("Country")) + for address in djperson.address_set.all().order_by("order"): + locations = address.location_set.all().order_by("order") + for location in locations: + table.row(display_date(address), + location.street, + location.city, + location.state, + location.country) + return table.get_html() + +def person_note_table(djperson, user): + table = Table() + table.columns( + _("ID"), + _("Type"), + _("Note")) + obj_type = ContentType.objects.get_for_model(djperson) + note_refs = dji.NoteRef.filter(object_type=obj_type, + object_id=djperson.id) + for note_ref in note_refs: + note = table.db.get_note_from_handle( + note_ref.ref_object.handle) + table.row(table.db.get_note_from_handle(note.handle), + str(note_ref.ref_object.note_type), + note_ref.ref_object.text[:50]) + return table.get_html() + +def person_gallery_table(djperson, user): + table = Table() + table.columns(_("Name"), + _("Type"), + ) + return table.get_html() + +def person_internet_table(djperson, user): + table = Table() + table.columns(_("Type"), + _("Path"), + _("Description")) + urls = dji.Url.filter(person=djperson) + for url in urls: + table.row(str(url.url_type), + url.path, + url.desc) + return table.get_html() + +def person_association_table(djperson, user): + table = Table() + table.columns(_("Name"), + _("ID"), + _("Association")) + gperson = table.db.get_person_from_handle(djperson.handle) + associations = gperson.get_person_ref_list() + for association in associations: + table.row() + return table.get_html() + +def person_lds_table(djperson, user): + table = Table() + table.columns(_("Type"), + _("Date"), + _("Status"), + _("Temple"), + _("Place")) + obj_type = ContentType.objects.get_for_model(djperson) + ldss = djperson.lds_set.all().order_by("order") + for lds in ldss: + table.row(str(lds.lds_type), + display_date(lds), + str(lds.status), + lds.temple, + get_title(lds.place)) + return table.get_html() + +def person_reference_table(djperson, user): + table = Table() + table.columns(_("Type"), + _("ID"), + _("Name")) + references = dji.PersonRef.filter(ref_object=djperson) + for reference in references: + table.row(str(reference.reference_type), + reference.ref_object.gramps_id, + make_name(reference.ref_object)) + return table.get_html() + +def family_children_table(djfamily, user): + table = Table() + table.columns(_("Column")) + table.row("test") + return table.get_html() + +def family_event_table(djfamily, user): + table = Table() + table.columns(_("Column")) + table.row("test") + return table.get_html() + +def family_source_table(djfamily, user): + table = Table() + table.columns(_("Column")) + table.row("test") + return table.get_html() + +def family_attribute_table(djfamily, user): + table = Table() + table.columns(_("Column")) + table.row("test") + return table.get_html() + +def family_note_table(djfamily, user): + table = Table() + table.columns(_("Column")) + table.row("test") + return table.get_html() + +def family_gallery_table(djfamily, user): + table = Table() + table.columns(_("Column")) + table.row("test") + return table.get_html() + +def family_lds_table(djfamily, user): + table = Table() + table.columns(_("Column")) + table.row("test") + return table.get_html() + ## FIXME: these dji function wrappers just use the functions ## written for the import/export. Can be done much more directly. @@ -142,7 +330,7 @@ def make_name(name, user): return escape("%s, %s" % (surname, "[Living]")) else: return escape("%s, %s" % (surname, name.first_name)) - elif name: + elif name: # name_set name = name.get(preferred=True) if name: return make_name(name, user)