Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
    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')
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
 def success(total):
     bibtex = Adapter.adapt_schema(db, 'org.pybliographer/bibtex/0.1')
     return True, query, bibtex, total
Ejemplo n.º 5
0
    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)