本文整理汇总了Python中eulexistdb.db.ExistDB类的典型用法代码示例。如果您正苦于以下问题:Python ExistDB类的具体用法?Python ExistDB怎么用?Python ExistDB使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ExistDB类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: preview
def preview(request, archive):
if request.method == 'POST':
archive = get_object_or_404(Archive, slug=archive)
filename = request.POST['filename']
errors = []
try:
# only load to exist if document passes publication check
ok, response, dbpath, fullpath = _prepublication_check(request, filename,
archive, mode='preview')
if ok is not True:
return response
db = ExistDB()
# load the document to the *preview* collection in eXist with the same fileneame
preview_dbpath = settings.EXISTDB_PREVIEW_COLLECTION + "/" + filename
# make sure the preview collection exists, but don't complain if it's already there
success = db.load(open(fullpath, 'r'), preview_dbpath, overwrite=True)
except ExistDBException, e:
success = False
errors.append(e.message())
if success:
# load the file as a FindingAid object so we can generate the preview url
ead = load_xmlobject_from_file(fullpath, FindingAid)
messages.success(request, 'Successfully loaded <b>%s</b> for preview.' % filename)
# redirect to document preview page with code 303 (See Other)
return HttpResponseSeeOtherRedirect(reverse('fa-admin:preview:findingaid', kwargs={'id': ead.eadid}))
else:
return render(request, 'fa_admin/publish-errors.html',
{'errors': errors, 'filename': filename, 'mode': 'preview', 'exception': e})
示例2: _remove_file_from_exist
def _remove_file_from_exist(self, filename):
db = ExistDB()
fname = path.split(filename)[-1]
exist_path = path.join(settings.EXISTDB_ROOT_COLLECTION, fname)
# tests could remove fixtures, so an exception here is not a problem
try:
db.removeDocument(exist_path)
except ExistDBException:
# any way to determine if error ever needs to be reported?
pass
示例3: _fixture_teardown
def _fixture_teardown(self):
if hasattr(self, 'exist_fixtures'):
db = ExistDB()
if 'index' in self.exist_fixtures:
db.removeCollectionIndex(settings.EXISTDB_ROOT_COLLECTION)
if 'directory' in self.exist_fixtures:
for filename in glob(path.join(self.exist_fixtures['directory'], '*.xml')):
self._remove_file_from_exist(filename)
if 'files' in self.exist_fixtures:
for filename in self.exist_fixtures['files']:
self._remove_file_from_exist(filename)
return super(TestCase, self)._fixture_teardown()
示例4: delete_ead
def delete_ead(request, id, archive=None):
""" Delete a published EAD.
On GET, display a form with information about the document to be removed.
On POST, actually remove the specified EAD document from eXist and create (or
update) a deleted record for that document in the relational DB.
"""
# retrieve the finding aid to be deleted with fields needed for
# form display or actual deletion
if archive is not None:
arch = get_object_or_404(Archive, slug=archive)
filter = {'repository__fulltext_terms': '"%s"' % arch.name}
else:
filter = {}
try:
fa = FindingAid.objects.only('eadid', 'unittitle',
'document_name', 'collection_name').filter(**filter).get(eadid=id)
# if this record has been deleted before, get that record and update it
deleted_info, created = Deleted.objects.get_or_create(eadid=fa.eadid)
deleted_info.title = unicode(fa.unittitle) # update with title from current document
render_form = False
# on GET, display delete form
if request.method == 'GET':
# pre-populate the form with info from the finding aid to be removed
delete_form = DeleteForm(instance=deleted_info)
render_form = True
else: # POST : actually delete the document
delete_form = DeleteForm(request.POST, instance=deleted_info)
if delete_form.is_valid():
delete_form.save()
db = ExistDB()
try:
success = db.removeDocument(fa.collection_name + '/' + fa.document_name)
if success:
DeleteForm(request.POST, instance=deleted_info).save()
messages.success(request, 'Successfully removed <b>%s</b>.' % id)
else:
# remove exited normally but was not successful
messages.error(request, 'Error: failed to removed <b>%s</b>.' % id)
except ExistDBException, e:
messages.error(request, "Error: failed to remove <b>%s</b> - %s." \
% (id, e.message()))
else:
示例5: use_test_collection
def use_test_collection(self):
self.stored_default_collection = getattr(settings, "EXISTDB_ROOT_COLLECTION", None)
if getattr(settings, "EXISTDB_TEST_COLLECTION", None):
settings.EXISTDB_ROOT_COLLECTION = settings.EXISTDB_TEST_COLLECTION
else:
settings.EXISTDB_ROOT_COLLECTION = getattr(settings, "EXISTDB_ROOT_COLLECTION", "/default") + "_test"
print >> sys.stderr, "Creating eXist Test Collection: %s" % \
settings.EXISTDB_ROOT_COLLECTION
# now that existdb root collection has been set to test collection, init db connection
db = ExistDB()
# create test collection (don't complain if collection already exists)
db.createCollection(settings.EXISTDB_ROOT_COLLECTION, True)
示例6: preview
def preview(request, archive):
if request.method == 'POST':
archive = get_object_or_404(Archive, slug=archive)
filename = request.POST['filename']
errors = []
err = None
try:
# only load to exist if document passes publication check
ok, response, dbpath, fullpath = _prepublication_check(request, filename,
archive, mode='preview')
if ok is not True:
return response
db = ExistDB()
# load the document to the *preview* collection in eXist with the same fileneame
preview_dbpath = settings.EXISTDB_PREVIEW_COLLECTION + "/" + filename
# make sure the preview collection exists, but don't complain if it's already there
success = db.load(open(fullpath, 'r'), preview_dbpath)
except ExistDBException as err:
success = False
errors.append(err.message())
if success:
# load the file as a FindingAid object so we can generate the preview url
ead = load_xmlobject_from_file(fullpath, FindingAid)
messages.success(request, 'Successfully loaded <b>%s</b> for preview.' % filename)
# redirect to document preview page with code 303 (See Other)
return HttpResponseSeeOtherRedirect(reverse('fa-admin:preview:findingaid', kwargs={'id': ead.eadid}))
else:
# no exception but no success means the load failed;
# *probably* due to insufficient permissions
if errors == [] and success == False:
errors.append('Failed to load the document to the preview collection')
return render(request, 'fa_admin/publish-errors.html',
{'errors': errors, 'filename': filename, 'mode': 'preview', 'exception': err})
# NOTE: preview list is not used anymore; functionality is handled
# by main admin view; if we revisit preview list, to be more usable it
# should be filterable by archive
else:
fa = get_findingaid(preview=True, only=['eadid', 'list_title', 'last_modified'],
order_by='last_modified')
return render(request, 'fa_admin/preview_list.html',
{'findingaids': fa, #'querytime': [fa.queryTime()]
})
示例7: _fixture_setup
def _fixture_setup(self):
if hasattr(self, 'exist_fixtures'):
db = ExistDB()
# load index
if 'index' in self.exist_fixtures:
db.loadCollectionIndex(settings.EXISTDB_ROOT_COLLECTION,
open(self.exist_fixtures['index']))
if 'directory' in self.exist_fixtures:
for filename in glob(path.join(self.exist_fixtures['directory'], '*.xml')):
self._load_file_to_exist(filename)
if 'files' in self.exist_fixtures:
for filename in self.exist_fixtures['files']:
self._load_file_to_exist(filename)
return super(TestCase, self)._fixture_setup()
示例8: restore_root_collection
def restore_root_collection(self):
# if use_test_collection didn't run, don't change anything
if self.stored_default_collection is not None:
print >> sys.stderr, "Removing eXist Test Collection: %s" % settings.EXISTDB_ROOT_COLLECTION
# before restoring existdb non-test root collection, init db connection
db = ExistDB()
try:
# remove test collection
db.removeCollection(settings.EXISTDB_ROOT_COLLECTION)
except ExistDBException, e:
print >> sys.stderr, "Error removing collection %s: %s" \
% (settings.EXISTDB_ROOT_COLLECTION, e)
print >> sys.stderr, "Restoring eXist Root Collection: %s" \
% self.stored_default_collection
settings.EXISTDB_ROOT_COLLECTION = self.stored_default_collection
示例9: setUp
def setUp(self):
self.db = ExistDB(server_url=EXISTDB_SERVER_URL)
# create index for collection - should be applied to newly loaded files
self.db.loadCollectionIndex(COLLECTION, self.FIXTURE_INDEX)
load_fixtures(self.db)
self.qs = QuerySet(using=self.db, xpath='/root',
collection=COLLECTION, model=QueryTestModel)
示例10: ModelTest
class ModelTest(unittest.TestCase):
COLLECTION = EXISTDB_TEST_COLLECTION
def setUp(self):
self.db = ExistDB(server_url=EXISTDB_SERVER_URL,
username=EXISTDB_SERVER_USER, password=EXISTDB_SERVER_PASSWORD)
self.db.createCollection(self.COLLECTION, True)
test_dir = os.path.dirname(os.path.abspath(__file__))
fixture = os.path.join(test_dir, 'exist_fixtures', 'goodbye-english.xml')
loaded = self.db.load(open(fixture), self.COLLECTION + '/goodbye-english.xml')
fixture = os.path.join(test_dir, 'exist_fixtures', 'goodbye-french.xml')
loaded = self.db.load(open(fixture), self.COLLECTION + '/goodbye-french.xml')
# temporarily set test collection as root exist collection
self._root_collection = settings.EXISTDB_ROOT_COLLECTION
settings.EXISTDB_ROOT_COLLECTION = self.COLLECTION
def tearDown(self):
self.db.removeCollection(self.COLLECTION)
settings.EXISTDB_ROOT_COLLECTION = self._root_collection
def test_manager(self):
partings = Parting.objects.all()
self.assertEquals(2, partings.count())
def test_sibling_query(self):
# test sibling node access via 'also'
exc = Exclamation.objects.filter(text='Au revoir').also('next').get()
self.assertEqual('monde', exc.next)
示例11: ModelTest
class ModelTest(unittest.TestCase):
COLLECTION = settings.EXISTDB_TEST_COLLECTION
def setUp(self):
self.db = ExistDB()
self.db.createCollection(self.COLLECTION, True)
test_dir = os.path.dirname(os.path.abspath(__file__))
fixture = os.path.join(test_dir, 'exist_fixtures', 'goodbye-english.xml')
loaded = self.db.load(open(fixture), self.COLLECTION + '/goodbye-english.xml', True)
fixture = os.path.join(test_dir, 'exist_fixtures', 'goodbye-french.xml')
loaded = self.db.load(open(fixture), self.COLLECTION + '/goodbye-french.xml', True)
# temporarily set test collection as root exist collection
self._root_collection = settings.EXISTDB_ROOT_COLLECTION
settings.EXISTDB_ROOT_COLLECTION = self.COLLECTION
def tearDown(self):
self.db.removeCollection(self.COLLECTION)
settings.EXISTDB_ROOT_COLLECTION = self._root_collection
def test_manager(self):
partings = Parting.objects.all()
self.assertEquals(2, partings.count())
示例12: test_ead_lastmodified
def test_ead_lastmodified(self):
modified = ead_lastmodified('rqst', 'abbey244')
self.assert_(isinstance(modified, datetime),
"ead_lastmodified should return a datetime object")
date_format = '%Y-%m-%d'
expected = datetime.now().strftime(date_format)
value = modified.strftime(date_format)
self.assertEqual(expected, value,
'ead lastmodified should be today, expected %s, got %s' % (expected, value))
# invalid eadid
self.assertRaises(Http404, ead_lastmodified, 'rqst', 'bogusid')
db = ExistDB()
# preview document - load fixture to preview collection
fullpath = path.join(exist_fixture_path, 'raoul548.xml')
db.load(open(fullpath, 'r'), settings.EXISTDB_PREVIEW_COLLECTION + '/raoul548.xml')
preview_modified = ead_lastmodified('rqst', 'raoul548', preview=True)
self.assert_(isinstance(preview_modified, datetime),
"ead_lastmodified should return a datetime object")
# clean up
db.removeDocument(settings.EXISTDB_PREVIEW_COLLECTION + '/raoul548.xml')
示例13: setUp
def setUp(self):
self.db = ExistDB()
self.db.createCollection(self.COLLECTION, True)
test_dir = os.path.dirname(os.path.abspath(__file__))
fixture = os.path.join(test_dir, 'exist_fixtures', 'goodbye-english.xml')
loaded = self.db.load(open(fixture), self.COLLECTION + '/goodbye-english.xml', True)
fixture = os.path.join(test_dir, 'exist_fixtures', 'goodbye-french.xml')
loaded = self.db.load(open(fixture), self.COLLECTION + '/goodbye-french.xml', True)
# temporarily set test collection as root exist collection
self._root_collection = settings.EXISTDB_ROOT_COLLECTION
settings.EXISTDB_ROOT_COLLECTION = self.COLLECTION
示例14: handle
def handle(self, *files, **options):
verbosity = int(options.get('verbosity', self.v_normal))
# check for required settings
if not hasattr(settings, 'EXISTDB_ROOT_COLLECTION') or \
not settings.EXISTDB_ROOT_COLLECTION:
raise CommandError("EXISTDB_ROOT_COLLECTION setting is missing")
return
self.db = ExistDB()
self.cbgeocoder = CodebookGeocoder()
# initalize progress bar
pbar = None
total = len(files)
# init progress bar if processing enough files, running on a terminal
if total >= 10 and os.isatty(sys.stderr.fileno()):
widgets = [Percentage(), ' (', SimpleProgress(), ')',
Bar(), ETA()]
pbar = ProgressBar(widgets=widgets, maxval=total).start()
errored = 0
loaded = 0
for f in files:
success = False
if pbar:
pbar.update(errored + loaded)
try:
# full path location where file will be loaded in exist db collection
dbpath = settings.EXISTDB_ROOT_COLLECTION + "/" + os.path.basename(f)
# TODO: any error checking? validation?
start = time.time()
cb = load_xmlobject_from_file(f, CodeBook)
logger.debug('%s loaded as xml in %f sec' % (f, time.time() - start))
start = time.time()
self.prep(cb)
logger.debug('%s prepped in %f sec' % (f, time.time() - start))
# load to eXist from string since DDI documents aren't that large,
# rather than reloading the file
if not options.get('dryrun', False):
start = time.time()
success = self.db.load(cb.serialize(pretty=True), dbpath, overwrite=True)
logger.debug('%s loaded to eXist in %f sec' % (f, time.time() - start))
except IOError as e:
self.stdout.write("Error opening %s: %s" % (f, e))
errored += 1
except ExistDBException as e:
self.stdout.write("Error: failed to load %s to eXist" % f)
self.stdout.write(e.message())
errored += 1
if not options.get('dryrun', False) and success:
loaded += 1
if verbosity > self.v_normal:
self.stdout.write("Loaded %s as %s" % (f, dbpath))
try:
os.remove(f)
except OSError as e:
self.stdout.write('Error removing %s: %s' % (f, e))
if pbar:
pbar.finish()
# output a summary of what was done if more than one file was processed
if verbosity >= self.v_normal:
if loaded > 1:
self.stdout.write("%d document%s loaded" % \
(loaded, 's' if loaded != 1 else ''))
if errored > 1:
self.stdout.write("%d document%s with errors" % \
(errored, 's' if errored != 1 else ''))
示例15: Command
class Command(BaseCommand):
args = '<filename filename filename ...>'
help = '''Loads XML files into the configured eXist collection.
The local copy will be *removed* after it is successfully loaded.'''
option_list = BaseCommand.option_list + (
make_option('--dry-run', '-n',
dest='dryrun',
action='store_true',
help='''Report on what would be done, but don't delete any files'''
),
)
v_normal = 1
def handle(self, *files, **options):
verbosity = int(options.get('verbosity', self.v_normal))
# check for required settings
if not hasattr(settings, 'EXISTDB_ROOT_COLLECTION') or \
not settings.EXISTDB_ROOT_COLLECTION:
raise CommandError("EXISTDB_ROOT_COLLECTION setting is missing")
return
self.db = ExistDB()
self.cbgeocoder = CodebookGeocoder()
# initalize progress bar
pbar = None
total = len(files)
# init progress bar if processing enough files, running on a terminal
if total >= 10 and os.isatty(sys.stderr.fileno()):
widgets = [Percentage(), ' (', SimpleProgress(), ')',
Bar(), ETA()]
pbar = ProgressBar(widgets=widgets, maxval=total).start()
errored = 0
loaded = 0
for f in files:
success = False
if pbar:
pbar.update(errored + loaded)
try:
# full path location where file will be loaded in exist db collection
dbpath = settings.EXISTDB_ROOT_COLLECTION + "/" + os.path.basename(f)
# TODO: any error checking? validation?
start = time.time()
cb = load_xmlobject_from_file(f, CodeBook)
logger.debug('%s loaded as xml in %f sec' % (f, time.time() - start))
start = time.time()
self.prep(cb)
logger.debug('%s prepped in %f sec' % (f, time.time() - start))
# load to eXist from string since DDI documents aren't that large,
# rather than reloading the file
if not options.get('dryrun', False):
start = time.time()
success = self.db.load(cb.serialize(pretty=True), dbpath, overwrite=True)
logger.debug('%s loaded to eXist in %f sec' % (f, time.time() - start))
except IOError as e:
self.stdout.write("Error opening %s: %s" % (f, e))
errored += 1
except ExistDBException as e:
self.stdout.write("Error: failed to load %s to eXist" % f)
self.stdout.write(e.message())
errored += 1
if not options.get('dryrun', False) and success:
loaded += 1
if verbosity > self.v_normal:
self.stdout.write("Loaded %s as %s" % (f, dbpath))
try:
os.remove(f)
except OSError as e:
self.stdout.write('Error removing %s: %s' % (f, e))
if pbar:
pbar.finish()
# output a summary of what was done if more than one file was processed
if verbosity >= self.v_normal:
if loaded > 1:
self.stdout.write("%d document%s loaded" % \
(loaded, 's' if loaded != 1 else ''))
if errored > 1:
self.stdout.write("%d document%s with errors" % \
(errored, 's' if errored != 1 else ''))
topic_id = re.compile('^(?P<org>[A-Z]+)[ .](?P<id>[IVX]+(\.[A-Z](\.[0-9]+(\.[a-z]+)?)?)?)')
def prep(self, cb):
# do any prep work or cleanup that needs to be done
# before loading to exist
self.local_topics(cb)
#.........这里部分代码省略.........