From f492515494c8b0cd0080b28fdb9d6a1ad201944e Mon Sep 17 00:00:00 2001 From: Doug Blank Date: Sat, 15 Oct 2011 20:12:11 +0000 Subject: [PATCH] Export from webapp is complete; working on import into webapp svn: r18326 --- src/data/templates/view_report_detail.html | 2 +- src/web/dbdjango.py | 77 +--------------------- src/web/grampsdb/models.py | 1 + src/web/grampsdb/views.py | 3 +- src/web/reports.py | 74 +++++++++++++++++++++ src/web/utils.py | 1 + 6 files changed, 80 insertions(+), 78 deletions(-) create mode 100644 src/web/reports.py diff --git a/src/data/templates/view_report_detail.html b/src/data/templates/view_report_detail.html index bebfbc390..8c5f3a442 100644 --- a/src/data/templates/view_report_detail.html +++ b/src/data/templates/view_report_detail.html @@ -18,7 +18,7 @@ Options: -
+
Hint: use Gramps CLI options such as output file format off=pdf, off=ged, or off=gramps diff --git a/src/web/dbdjango.py b/src/web/dbdjango.py index c05770be4..938f7a9b8 100644 --- a/src/web/dbdjango.py +++ b/src/web/dbdjango.py @@ -28,7 +28,6 @@ #------------------------------------------------------------------------ import cPickle import base64 -import web import gen import re from gen.db import DbReadBase, DbWriteBase, DbTxn @@ -43,79 +42,6 @@ from gen.db import (PERSON_KEY, import Utils from web.libdjango import DjangoInterface -# Example for running a report: -# ------------------------------ -# from cli.plug import run_report -# from django.conf import settings -# import web.settings as default_settings -# try: -# settings.configure(default_settings) -# except: -# pass -# import dbdjango -# db = dbdjango.DbDjango() -# run_report(db, "ancestor_report", off="txt", of="ar.txt", pid="I0363") - -# Imports for importing a file: -import DbState -from cli.grampscli import CLIManager -from gen.plug import BasePluginManager -import os - -def import_file(db, filename, callback): - """ - Import a file (such as a GEDCOM file) into the given db. - - >>> import_file(DbDjango(), "/home/user/Untitled_1.ged", lambda a: a) - """ - dbstate = DbState.DbState() - climanager = CLIManager(dbstate, False) # do not load db_loader - climanager.do_reg_plugins(dbstate, None) - pmgr = BasePluginManager.get_instance() - (name, ext) = os.path.splitext(os.path.basename(filename)) - format = ext[1:].lower() - import_list = pmgr.get_reg_importers() - for pdata in import_list: - if format == pdata.extension: - mod = pmgr.load_plugin(pdata) - if not mod: - for name, error_tuple in pmgr.get_fail_list(): - etype, exception, traceback = error_tuple - print "ERROR:", name, exception - return False - import_function = getattr(mod, pdata.import_function) - db.prepare_import() - import_function(db, filename, callback) - db.commit_import() - return True - return False - -def export_file(db, filename, callback): - """ - Export the db to a file (such as a GEDCOM file). - - >>> export_file(DbDjango(), "/home/user/Untitled_1.ged", lambda a: a) - """ - dbstate = DbState.DbState() - climanager = CLIManager(dbstate, False) # do not load db_loader - climanager.do_reg_plugins(dbstate, None) - pmgr = BasePluginManager.get_instance() - (name, ext) = os.path.splitext(os.path.basename(filename)) - format = ext[1:].lower() - export_list = pmgr.get_reg_exporters() - for pdata in export_list: - if format == pdata.extension: - mod = pmgr.load_plugin(pdata) - if not mod: - for name, error_tuple in pmgr.get_fail_list(): - etype, exception, traceback = error_tuple - print "ERROR:", name, exception - return False - export_function = getattr(mod, pdata.export_function) - export_function(db, filename, callback) - return True - return False - class Cursor(object): def __init__(self, model, func): self.model = model @@ -586,7 +512,6 @@ class DbDjango(DbWriteBase, DbReadBase): if handle in self.import_cache: return self.import_cache[handle] try: - #person = self.dji.Person.select_related().get(handle=handle) person = self.dji.Person.get(handle=handle) except: return None @@ -596,7 +521,7 @@ class DbDjango(DbWriteBase, DbReadBase): if self.use_db_cache and repository.cache: data = cPickle.loads(base64.decodestring(repository.cache)) else: - data = self.dji.get_family(family) + data = self.dji.get_repository(repository) return gen.lib.Repository.create(data) def make_source(self, source): diff --git a/src/web/grampsdb/models.py b/src/web/grampsdb/models.py index dd70dfac9..ff18ca541 100644 --- a/src/web/grampsdb/models.py +++ b/src/web/grampsdb/models.py @@ -884,6 +884,7 @@ def clear_tables(*categories): Clear the entries of categories of tables. Category is: "abstract", "type", "ref", "system", "primary" and "secondary". """ + # FIXME: I don't think this works anymore... from django.db import connection, transaction cursor = connection.cursor() flush_tables = [] diff --git a/src/web/grampsdb/views.py b/src/web/grampsdb/views.py index b41964014..66c556541 100644 --- a/src/web/grampsdb/views.py +++ b/src/web/grampsdb/views.py @@ -248,8 +248,9 @@ def send_file(request, filename, mimetype): return response def process_action(request, view, handle, action): + from web.reports import import_file + from web.reports import export_file from cli.plug import run_report - from web.dbdjango import export_file db = DbDjango() if view == "report": if request.user.is_authenticated(): diff --git a/src/web/reports.py b/src/web/reports.py new file mode 100644 index 000000000..6e203f399 --- /dev/null +++ b/src/web/reports.py @@ -0,0 +1,74 @@ +# imports for import/export: + +import DbState +from cli.grampscli import CLIManager +from gen.plug import BasePluginManager +import os + +# Example for running a report: +# ------------------------------ +# from cli.plug import run_report +# from django.conf import settings +# import web.settings as default_settings +# try: +# settings.configure(default_settings) +# except: +# pass +# import dbdjango +# db = dbdjango.DbDjango() +# run_report(db, "ancestor_report", off="txt", of="ar.txt", pid="I0363") + +def import_file(db, filename, callback): + """ + Import a file (such as a GEDCOM file) into the given db. + + >>> import_file(DbDjango(), "/home/user/Untitled_1.ged", lambda a: a) + """ + dbstate = DbState.DbState() + climanager = CLIManager(dbstate, False) # do not load db_loader + climanager.do_reg_plugins(dbstate, None) + pmgr = BasePluginManager.get_instance() + (name, ext) = os.path.splitext(os.path.basename(filename)) + format = ext[1:].lower() + import_list = pmgr.get_reg_importers() + for pdata in import_list: + if format == pdata.extension: + mod = pmgr.load_plugin(pdata) + if not mod: + for name, error_tuple in pmgr.get_fail_list(): + etype, exception, traceback = error_tuple + print "ERROR:", name, exception + return False + import_function = getattr(mod, pdata.import_function) + db.prepare_import() + import_function(db, filename, callback) + db.commit_import() + return True + return False + +def export_file(db, filename, callback): + """ + Export the db to a file (such as a GEDCOM file). + + >>> export_file(DbDjango(), "/home/user/Untitled_1.ged", lambda a: a) + """ + dbstate = DbState.DbState() + climanager = CLIManager(dbstate, False) # do not load db_loader + climanager.do_reg_plugins(dbstate, None) + pmgr = BasePluginManager.get_instance() + (name, ext) = os.path.splitext(os.path.basename(filename)) + format = ext[1:].lower() + export_list = pmgr.get_reg_exporters() + for pdata in export_list: + if format == pdata.extension: + mod = pmgr.load_plugin(pdata) + if not mod: + for name, error_tuple in pmgr.get_fail_list(): + etype, exception, traceback = error_tuple + print "ERROR:", name, exception + return False + export_function = getattr(mod, pdata.export_function) + export_function(db, filename, callback) + return True + return False + diff --git a/src/web/utils.py b/src/web/utils.py index f52d8ae4e..914ea4844 100644 --- a/src/web/utils.py +++ b/src/web/utils.py @@ -609,3 +609,4 @@ register_plugins() import HtmlDoc from libhtmlbackend import HtmlBackend from libhtml import Html +