From 0e14f53bcd519e0b17882d60be37b00e539db935 Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Sun, 20 Dec 2009 22:26:45 +0000 Subject: [PATCH] Using Gramps Proxy Databases from Gramps-Connect: first revisions svn: r13863 --- src/data/templates/view_event_detail.html | 4 ++ src/data/templates/view_families.html | 4 +- src/data/templates/view_family_detail.html | 6 +- src/data/templates/view_people.html | 18 +++-- src/web/djangodb.py | 9 +++ src/web/grampsdb/fixtures/initial_data.json | 2 +- src/web/grampsdb/templatetags/my_tags.py | 37 ++++++++++ src/web/grampsdb/views.py | 13 ++++ src/web/utils.py | 75 ++++++++++++++------- 9 files changed, 126 insertions(+), 42 deletions(-) diff --git a/src/data/templates/view_event_detail.html b/src/data/templates/view_event_detail.html index 24b1bd2b6..4a665b6aa 100644 --- a/src/data/templates/view_event_detail.html +++ b/src/data/templates/view_event_detail.html @@ -22,7 +22,11 @@ Description: +{% if user.is_authenticated %} {{event.description|escape}} +{% else %} +[Private] +{% endif %} ID: diff --git a/src/data/templates/view_families.html b/src/data/templates/view_families.html index c2769a241..8c7a9c37c 100644 --- a/src/data/templates/view_families.html +++ b/src/data/templates/view_families.html @@ -18,8 +18,8 @@ {{ forloop.counter|row_count:page }} [{{family.gramps_id}}] - {{family.father.name_set|make_name:user|nbsp}} - {{family.mother.name_set|make_name:user|nbsp}} + {{family.father|make_name:user|nbsp}} + {{family.mother|make_name:user|nbsp}} {% if user.is_authenticated %} {{family.family_rel_type|escape}} {% else %} diff --git a/src/data/templates/view_family_detail.html b/src/data/templates/view_family_detail.html index a727f011d..2ffb5ac69 100644 --- a/src/data/templates/view_family_detail.html +++ b/src/data/templates/view_family_detail.html @@ -12,7 +12,7 @@
-

{{family.father.name_set|make_name:user}} and {{family.mother.name_set|make_name:user}}

+

{{family.father|make_name:user}} and {{family.mother|make_name:user}}

{% comment %} 4 cols {% endcomment %} @@ -23,9 +23,9 @@ - + - + {% if user.is_authenticated or not family.father.handle|probably_alive %} diff --git a/src/data/templates/view_people.html b/src/data/templates/view_people.html index 531219058..a3b4333ad 100644 --- a/src/data/templates/view_people.html +++ b/src/data/templates/view_people.html @@ -20,18 +20,16 @@ {% for name in page.object_list %} - - - - - {% if user.is_authenticated %} - - - {% else %} - + + + {% endif %} {% endfor %} diff --git a/src/web/djangodb.py b/src/web/djangodb.py index 541218508..9eaffa7af 100644 --- a/src/web/djangodb.py +++ b/src/web/djangodb.py @@ -60,6 +60,15 @@ class DjangoDb(GrampsDbBase): self.dji = DjangoInterface() self.readonly = False self.db_is_open = True + self.name_formats = range(4) + self.bookmarks = [] + self.family_bookmarks = [] + self.event_bookmarks = [] + self.place_bookmarks = [] + self.source_bookmarks = [] + self.repo_bookmarks = [] + self.media_bookmarks = [] + self.note_bookmarks = [] def get_researcher(self): obj = gen.lib.Name() diff --git a/src/web/grampsdb/fixtures/initial_data.json b/src/web/grampsdb/fixtures/initial_data.json index dca732289..1ad2b0531 100644 --- a/src/web/grampsdb/fixtures/initial_data.json +++ b/src/web/grampsdb/fixtures/initial_data.json @@ -18,7 +18,7 @@ "setting" : "db_created" , "description" : "database creation date/time" , "value_type" : "str" , - "value" : "2009-11-22 17:24" + "value" : "2009-12-12 20:42" } }, { diff --git a/src/web/grampsdb/templatetags/my_tags.py b/src/web/grampsdb/templatetags/my_tags.py index 80bfd4270..72beef5e9 100644 --- a/src/web/grampsdb/templatetags/my_tags.py +++ b/src/web/grampsdb/templatetags/my_tags.py @@ -1,3 +1,6 @@ +import re + +from django import template from django.template import escape, Library from django.utils.safestring import mark_safe from web.utils import * @@ -21,6 +24,40 @@ for filter_name in util_filters: func.is_safe = True register.filter(filter_name, func) +def get_person_from_handle(db, handle): + # db is a Gramps Db interface + # handle is a Person Handle + return db.get_person_from_handle(handle) + +class TemplateNode(template.Node): + def __init__(self, args, var_name): + self.db = template.Variable(args[0]) + self.handle = template.Variable(args[1]) + self.var_name = var_name + + def render(self, context): + context[self.var_name] = \ + get_person_from_handle(self.db.resolve(context), + self.handle.resolve(context)) + return '' + +def do_get_person_from_handle(parser, token): + try: + # Splitting by None == splitting by spaces. + tag_name, args = token.contents.split(None, 1) + except ValueError: + raise template.TemplateSyntaxError, \ + ("%r tag requires arguments" % token.contents.split()[0]) + m = re.search(r'(.*?) as (\w+)', args) + if not m: + raise template.TemplateSyntaxError, \ + ("%r tag had invalid arguments" % tag_name) + args_string, var_name = m.groups() + args = args_string.split() + return TemplateNode(args, var_name) + +register.tag("get_person_from_handle", do_get_person_from_handle) + probably_alive.is_safe = True register.filter('probably_alive', probably_alive) diff --git a/src/web/grampsdb/views.py b/src/web/grampsdb/views.py index d98a05986..37ddffd44 100644 --- a/src/web/grampsdb/views.py +++ b/src/web/grampsdb/views.py @@ -43,6 +43,9 @@ import web from web.grampsdb.models import * from web.grampsdb.forms import NameForm from web.utils import probably_alive +from web.djangodb import DjangoDb + +from gen.proxy import LivingProxyDb _ = lambda text: text @@ -276,6 +279,15 @@ def view_detail(request, view, handle): return render_to_response(view_template, context) def view(request, view): + db_direct = DjangoDb() + if not request.user.is_authenticated(): + #MODE_EXCLUDE_ALL = 0 + #MODE_INCLUDE_LAST_NAME_ONLY = 1 + #MODE_INCLUDE_FULL_NAME_ONLY = 2 + db = LivingProxyDb(db_direct, + LivingProxyDb.MODE_INCLUDE_LAST_NAME_ONLY) + else: + db = db_direct search = "" if view == "event": if request.user.is_authenticated(): @@ -499,6 +511,7 @@ def view(request, view): context["tview"] = _(view.title()) context["search"] = search context["total"] = total + context["db"] = db if search: context["search_query"] = ("&search=%s" % escape(search)) else: diff --git a/src/web/utils.py b/src/web/utils.py index e37c59d9f..4bc414d7e 100644 --- a/src/web/utils.py +++ b/src/web/utils.py @@ -23,33 +23,50 @@ #------------------------------------------------------------------------ # -# Gramps/Django Modules +# Python Modules +# +#------------------------------------------------------------------------ +import locale + +#------------------------------------------------------------------------ +# +# Django Modules # #------------------------------------------------------------------------ -import web.grampsdb.models as models -import web.grampsdb.forms as forms -from web import libdjango -from web.djangodb import DjangoDb -from Simple import SimpleTable, SimpleAccess, make_basic_stylesheet -import Utils -import DbState -import DateHandler -from gen.lib.date import Date as GDate, Today -from gen.plug import BasePluginManager -from cli.grampscli import CLIManager from django.template import escape from django.utils.safestring import mark_safe from django.contrib.contenttypes.models import ContentType #------------------------------------------------------------------------ # -# Python Modules +# Gramps-Connect Modules # #------------------------------------------------------------------------ -import locale +import web.grampsdb.models as models +import web.grampsdb.forms as forms +from web import libdjango +from web.djangodb import DjangoDb +#------------------------------------------------------------------------ +# +# Gramps Modules +# +#------------------------------------------------------------------------ +from Simple import SimpleTable, SimpleAccess, make_basic_stylesheet +import Utils +import DbState +import DateHandler +from gen.lib.date import Date as GDate, Today +import gen.lib +from gen.plug import BasePluginManager +from cli.grampscli import CLIManager + +#------------------------------------------------------------------------ +# +# Modeul Constants +# +#------------------------------------------------------------------------ dji = libdjango.DjangoInterface() - _dd = DateHandler.displayer.display _dp = DateHandler.parser.parse @@ -458,10 +475,18 @@ def get_title(place): return "" def person_get_birth_date(person): - return person_get_event(person, models.EventType.BIRTH) + db = DjangoDb() + event = db.get_birth_or_fallback(person) + if event: + return event.date + return None def person_get_death_date(person): - return person_get_event(person, models.EventType.DEATH) + db = DjangoDb() + event = db.get_death_or_fallback(person) + if event: + return event.date + return None def display_date(obj): date_tuple = dji.get_date(obj) @@ -493,7 +518,7 @@ def person_get_event(person, event_type=None): for event_handle in event_ref_list] return [j for i in retval for j in i] -def make_name(name, user): +def make_name(name, user=None): if isinstance(name, models.Name): surname = name.surname.strip() if not surname: @@ -516,16 +541,14 @@ def make_name(name, user): return "%s, %s" % (surname, "[Living]") else: return "%s, %s" % (surname, name.model.first_name) - elif name: # name_set - try: - name = name.get(preferred=True) - except: + elif isinstance(name, gen.lib.Person): # name is a gen.lib.Person + person = name + name = person.get_primary_name() + if name is None: return "[No preferred name]" - if name: - return make_name(name, user) else: - return "" - else: + return "%s, %s" % (name.get_surname(), name.get_first_name()) + else: # no name return "" register_plugins()
Name:{{family.father.name_set|make_name:user}} [{{family.father.gramps_id|escape}}]{{family.father|make_name:user}} [{{family.father.gramps_id|escape}}] Name:{{family.mother.name_set|make_name:user}} [{{family.mother.gramps_id|escape}}]{{family.mother|make_name:user}} [{{family.mother.gramps_id|escape}}]
{{ forloop.counter|row_count:page }} + {% get_person_from_handle db name.person.handle as person %} + {% if person %} + {{ forloop.counter|row_count:page }} {{name|make_name:user}} + {{person|make_name}} [{{name.person.gramps_id|escape}}]{{name.person.gender_type|escape}}{{name.person|person_get_birth_date|nbsp}}{{name.person|person_get_death_date|nbsp}}[Private] - [Private] + [{{person.gramps_id}}]{{person.gender_type}}{{person|person_get_birth_date|nbsp}}{{person|person_get_death_date|nbsp}}