def check(self, name, schema): src = Store.get('file').dbopen( pybut.src('ut_adapter/' + name + '-src.bip')) dst = Adapter.adapt_schema(src, schema) tmp = pybut.dbname() fd = open(tmp, 'w') dst.xmlwrite(fd) fd.close() pybut.fileeq(pybut.src('ut_adapter/' + name + '-dst.bip'), tmp)
def testResolveA2B(self): sa = Schema.Schema(open(pybut.src('ut_adapter/a.sip'))) fmt = Store.get('memory') self.dba = fmt.dbcreate(None, sa) from Pyblio import Registry Registry.reset() Registry.load_settings(pybut.src('ut_adapter')) dest = Adapter.adapt_schema(self.dba, 'b') self.failUnlessEqual(dest.schema.id, 'b')
def success(total): print "pubmed: successfully fetched %d/%d records" % (len(db.entries), total) reactor.stop() # We filled db with pubmed data. To save it as BibTeX, we get an # adapter from PubMed to BibTeX bibtex = Adapter.adapt_schema(db, 'org.pybliographer/bibtex/0.1') # Now we have a "virtual" bibtex database, that we can actually # save as a BibTeX file from Pyblio.Parsers.Semantic.BibTeX import Writer w = Writer() w.write(open(output, 'w'), bibtex.entries, bibtex) return
def success(total): bibtex = Adapter.adapt_schema(db, 'org.pybliographer/bibtex/0.1') return True, query, bibtex, total
def __init__ (self, document, query, engine, parent=None): self.cell = None Utils.GladeWindow.__init__(self, parent) s = Registry.getSchema(engine.schema) db = Store.get('memory').dbcreate(None, s) self.pm = engine(db) self.document = document self.db = db url = Fields.URL('file:/dev/null') self.parser = Legacy.Format.BibTeX.DataBase(url) self._w_fetch.set_title(_("Results for: %s") % query) self.writer = BibTeX.Writer() # in order to display a compact form of the results, we need # to format them. use a mapping on top of the bibtex version. self.bibtex = Adapter.adapt_schema(db, 'org.pybliographer/bibtex/0.1') self.cite = Citator.Citator() self.cite.xmlload(os.path.join( Registry.RIP_dirs['system'], 'full.cip')) self.cite.prepare(self.bibtex, None) model = gtk.ListStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING) self.cell = gtk.CellRendererText() l = gtk.Label() l.set_markup(_("Results for <i>%s</i>") % escape(query)) column = gtk.TreeViewColumn(None, self.cell, markup=1) column.set_widget(l) l.show() self._w_view.append_column(column) self._w_view.set_model(model) callback = self.pm.count(query) self._w_progress.set_fraction(0.0) self._w_progress.set_text(_("Fetching results")) def failure(failure): self._w_stop.set_sensitive(False) if failure.check(Exceptions.QueryError): message = _("Failed to get results") secondary = str(failure.value) else: message = failure.getErrorMessage() secondary = failure.getTraceback() d = gtk.MessageDialog(self._w_fetch, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, message) if secondary: d.format_secondary_text(secondary) d.run() d.destroy() def fallback(failure): print failure def done_count(total): self._total = total self._got = 0.0 target = min(total, 100) def set_progress(): if target > 0: ratio = min(self._got / target, 1.0) else: ratio = 0 self._w_progress.set_fraction(ratio) self._w_progress.set_text(_("Done %d/%d (%d total)") % ( len(db.entries), target, self._total)) set_progress() l2cb, rs = self.pm.search(query, maxhits=100) def _on_add(k): v = self.bibtex[k] t = HTML.generate(self.cite.formatter(v)) model.append((k, t)) self._got += 1 set_progress() rs.register('add-item', _on_add) # ensure this function won't be garbage collected too # quickly self._on_add = _on_add def done(total): self._w_stop.set_sensitive(False) self._w_progress.set_fraction(1.0) self._w_progress.set_text(_("Done %d (%d total)") % ( len(db.entries), total)) l2cb.addCallback(done).\ addErrback(failure).\ addErrback(fallback) callback.addCallback(done_count).\ addErrback(failure).\ addErrback(fallback)