Database API, -L: database reports summary, if possible

This commit is contained in:
Doug Blank 2015-05-15 07:32:03 -04:00
parent 3c52f7016b
commit ea996cf6dd
4 changed files with 107 additions and 21 deletions

View File

@ -133,12 +133,42 @@ class CLIDbManager(object):
def get_dbdir_summary(self, dirpath, name):
"""
Returns (people_count, bsddb_version, schema_version) of
current DB.
Returns ("Unknown", "Unknown", "Unknown") if invalid DB or other error.
dirpath: full path to database
name: proper name of family tree
Returns dictionary of summary item.
Should include at least, if possible:
_("Path")
_("Family Tree")
_("Last accessed")
_("Database backend")
_("Locked?")
and these details:
_("Number of people")
_("Version")
_("Schema version")
"""
## Maybe return the txt file contents, for now
return ("Unknown", "Unknown", "Unknown")
dbid = "bsddb"
dbid_path = os.path.join(dirpath, "database.txt")
if os.path.isfile(dbid_path):
dbid = open(dbid_path).read().strip()
try:
database = self.dbstate.make_database(dbid)
database.load(dirpath, None)
retval = database.get_summary()
except Exception as msg:
retval = {"Unavailable": str(msg)[:74] + "..."}
retval.update({
_("Family Tree"): name,
_("Path"): dirpath,
_("Database backend"): dbid,
_("Last accessed"): time_val(dirpath)[1],
_("Locked?"): self.is_locked(dirpath),
})
return retval
def family_tree_summary(self):
"""
@ -149,19 +179,7 @@ class CLIDbManager(object):
for item in self.current_names:
(name, dirpath, path_name, last,
tval, enable, stock_id) = item
count, bsddb_version, schema_version = self.get_dbdir_summary(dirpath, name)
retval = {}
retval[_("Number of people")] = count
if enable:
retval[_("Locked?")] = _("yes")
else:
retval[_("Locked?")] = _("no")
retval[_("Bsddb version")] = bsddb_version
retval[_("Schema version")] = schema_version
retval[_("Family Tree")] = name
retval[_("Path")] = dirpath
retval[_("Last accessed")] = time.strftime('%x %X',
time.localtime(tval))
retval = self.get_dbdir_summary(dirpath, name)
summary_list.append( retval )
return summary_list

View File

@ -1976,3 +1976,16 @@ class DbBsddbRead(DbReadBase, Callback):
self.__log_error()
name = None
return name
def get_summary(self):
"""
Returns dictionary of summary item.
Should include, if possible:
_("Number of people")
_("Version")
_("Schema version")
"""
return {
_("Number of people"): self.get_number_of_people(),
}

View File

@ -36,6 +36,8 @@ import logging
# Gramps Modules
#
#------------------------------------------------------------------------
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
from gramps.gen.db import DbReadBase, DbWriteBase, DbTxn, KEY_TO_NAME_MAP
from gramps.gen.db.undoredo import DbUndo
from gramps.gen.db.dbconst import *
@ -1711,3 +1713,30 @@ class DictionaryDb(DbWriteBase, DbReadBase, UpdateCallback, Callback):
"""
return self._bm_changes > 0
def get_summary(self):
"""
Returns dictionary of summary item.
Should include, if possible:
_("Number of people")
_("Version")
_("Schema version")
"""
return {
_("Number of people"): self.get_number_of_people(),
}
def get_dbname(self):
"""
In DictionaryDb, the database is in a text file at the path
"""
filepath = os.path.join(self._directory, "name.txt")
try:
name_file = open(filepath, "r")
name = name_file.readline().strip()
name_file.close()
except (OSError, IOError) as msg:
_LOG.error(str(msg))
name = None
return name

View File

@ -40,6 +40,8 @@ from django.db import transaction
#
#------------------------------------------------------------------------
import gramps
from gramps.gen.const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext
from gramps.gen.lib import (Person, Family, Event, Place, Repository,
Citation, Source, Note, MediaObject, Tag,
Researcher)
@ -2028,9 +2030,6 @@ class DbDjango(DbWriteBase, DbReadBase, UpdateCallback, Callback):
## FIXME
pass
def get_dbname(self):
return "Django Database"
## missing
def find_place_child_handles(self, handle):
@ -2111,3 +2110,30 @@ class DbDjango(DbWriteBase, DbReadBase, UpdateCallback, Callback):
"""
return self._bm_changes > 0
def get_summary(self):
"""
Returns dictionary of summary item.
Should include, if possible:
_("Number of people")
_("Version")
_("Schema version")
"""
return {
_("Number of people"): self.get_number_of_people(),
}
def get_dbname(self):
"""
In Django, the database is in a text file at the path
"""
filepath = os.path.join(self._directory, "name.txt")
try:
name_file = open(filepath, "r")
name = name_file.readline().strip()
name_file.close()
except (OSError, IOError) as msg:
_LOG.error(str(msg))
name = None
return name