Beispiel #1
0
 def updateExportStatus(self, result):
     """ Update export status of HTML/CSV/TSV
     """
     setattr(self, 'exportWorks', True)
     try:
         setattr(self, 'exportWorks', True)
         setattr(self, 'exportStatusMessage', '')
         sparql2json(result)
     except Exception, err:
         logger.exception(err)
         setattr(self, 'exportWorks', False)
         setattr(self, 'exportStatusMessage', err)
Beispiel #2
0
 def updateExportStatus(self, result):
     """ Update export status of HTML/CSV/TSV
     """
     setattr(self, 'exportWorks', True)
     try:
         setattr(self, 'exportWorks', True)
         setattr(self, 'exportStatusMessage', '')
         sparql2json(result)
     except Exception, err:
         logger.exception(err)
         setattr(self, 'exportWorks', False)
         setattr(self, 'exportStatusMessage', err)
Beispiel #3
0
def set_sparql_export_attribute(context):
    catalog = getToolByName(context, 'portal_catalog')
    brains = catalog.searchResults(portal_type='Sparql',
                                   Language='all',
                                   show_inactive=True)

    log_total = len(brains)
    log_count = 0
    migrated = 0
    negative_export = 0
    no_result = 0
    for brain in brains:
        log_count += 1
        try:
            obj = brain.getObject()
        except Exception:
            logger.info('FAILED getObject %s:%s: %s', log_count, log_total,
                        brain.getPath())
            continue

        try:
            cached_result = obj.getSparqlCacheResults()
        except:
            cached_result = None
            logger.info('FAILED getgetSparqlCacheResults %s:%s: %s', log_count,
                        log_total, brain.getPath())
            no_result += 1
            continue

        if cached_result:
            logger.info('PATH %s:%s: %s', log_count, log_total,
                        brain.getPath())

            setattr(obj, 'exportWorks', True)
            try:
                setattr(obj, 'exportWorks', True)
                setattr(obj, 'exportStatusMessage', '')
                sparql2json(cached_result)
            except Exception, err:
                logger.info('Export status failed on: %s', brain.getPath())
                setattr(obj, 'exportWorks', False)
                setattr(obj, 'exportStatusMessage', err)
                negative_export += 1
                continue
            transaction.commit()
            migrated += 1
            if log_count % 100 == 0:
                logger.info('INFO: Transaction committed to zodb (%s/%s)',
                            log_count, log_total)
Beispiel #4
0
def set_sparql_export_attribute(context):
    catalog = getToolByName(context, 'portal_catalog')
    brains = catalog.searchResults(portal_type='Sparql', Language='all',
                                   show_inactive=True)

    log_total = len(brains)
    log_count = 0
    migrated = 0
    negative_export = 0
    no_result = 0
    for brain in brains:
        log_count += 1
        try:
            obj = brain.getObject()
        except Exception:
            logger.info('FAILED getObject %s:%s: %s', log_count, log_total,
                        brain.getPath())
            continue

        try:
            cached_result = obj.getSparqlCacheResults()
        except:
            cached_result = None
            logger.info('FAILED getgetSparqlCacheResults %s:%s: %s', log_count,
            log_total, brain.getPath())
            no_result += 1
            continue

        if cached_result:
            logger.info('PATH %s:%s: %s', log_count, log_total, brain.getPath())

            setattr(obj, 'exportWorks', True)
            try:
                setattr(obj, 'exportWorks', True)
                setattr(obj, 'exportStatusMessage', '')
                sparql2json(cached_result)
            except Exception, err:
                logger.info('Export status failed on: %s', brain.getPath())
                setattr(obj, 'exportWorks', False)
                setattr(obj, 'exportStatusMessage', err)
                negative_export += 1
                continue
            transaction.commit()
            migrated += 1
            if log_count % 100 == 0:
                logger.info('INFO: Transaction committed to zodb (%s/%s)',
                            log_count, log_total)
Beispiel #5
0
 def sparql2exhibit(self):
     """ Download sparql results as Exhibit JSON
     """
     try:
         data = sparql2json(self.context.execute_query(
             self.getArgumentMap()))
     except Exception, err:
         logger.exception(err)
         data = {'properties':{}, 'items':{}}
Beispiel #6
0
 def sparql2exhibit(self):
     """ Download sparql results as Exhibit JSON
     """
     try:
         data = sparql2json(
             self.context.execute_query(self.getArgumentMap()))
     except Exception, err:
         logger.exception(err)
         data = {'properties': {}, 'items': {}}
Beispiel #7
0
    def json(self, **kwargs):
        """json"""
        data = self.context.execute_query(self.getArgumentMap())

        column_types = kwargs.get('column_types')
        annotations = kwargs.get('annotations')
        return sortProperties(json.dumps(
            sparql2json(data,
                        column_types=column_types,
                        annotations=annotations)
        ))
Beispiel #8
0
    def sparql2csv(self, dialect='excel'):
        """ Download sparql results as Comma Separated File
        """
        if not self.getExportStatus():
            self.request.response.setStatus(500)
            return 'Error: %s' % self.context.exportStatusMessage

        try:
            data = sparql2json(self.context.execute_query(
                self.getArgumentMap()))
        except Exception, err:
            data = {'properties':{}, 'items':{}}
            logger.exception(err)
Beispiel #9
0
    def sparql2csv(self, dialect='excel'):
        """ Download sparql results as Comma Separated File
        """
        if not self.getExportStatus():
            self.request.response.setStatus(500)
            return 'Error: %s' % self.context.exportStatusMessage

        try:
            data = sparql2json(
                self.context.execute_query(self.getArgumentMap()))
        except Exception, err:
            data = {'properties': {}, 'items': {}}
            logger.exception(err)
Beispiel #10
0
    def sparql2csv(self, dialect='excel'):
        """ Download sparql results as Comma Separated File
        """
        try:
            data = sparql2json(self.context.execute_query(
                self.getArgumentMap()))
        except Exception:
            data = {'properties':{}, 'items':{}}

        if dialect == 'excel':
            self.request.response.setHeader(
                'Content-Type', 'application/csv')
            self.request.response.setHeader(
                'Content-Disposition',
                'attachment; filename="%s.csv"' % self.context.getId())
        else:
            self.request.response.setHeader(
                'Content-Type', 'application/tsv')
            self.request.response.setHeader(
                'Content-Disposition',
                'attachment; filename="%s.tsv"' % self.context.getId())

        writter = csv.writer(self.request.response, dialect=dialect)
        row = []

        properties = []
        def_order = 0
        for key, item in data['properties'].items():
            prop = []
            prop.append(item.get('order', def_order))
            prop.append(key)
            prop.append(item['valueType'])
            properties.append(prop)
            def_order += 1
        properties.sort()

        headers = []
        for prop in properties:
            headers.append(prop[1])

        for col in headers:
            header = '%s:%s' % (col, data['properties'][col]['valueType'])
            row.append(header)
        writter.writerow(row)
        for item in data['items']:
            row = []
            for col in headers:
                row.append(unicode(item[col]).encode('utf'))
            writter.writerow(row)

        return ''
Beispiel #11
0
    def json(self, **kwargs):
        """json"""
        data = self.context.execute_query(self.getArgumentMap())

        column_types = kwargs.get('column_types')
        annotations = kwargs.get('annotations')
        try:
            return sortProperties(
                json.dumps(
                    sparql2json(data,
                                column_types=column_types,
                                annotations=annotations)))
        except KeyError, err:
            logger.warn(err)
Beispiel #12
0
    def sparql2exhibit(self):
        """ Download sparql results as Exhibit JSON
        """

        try:
            data = sparql2json(self.context.execute_query(
                self.getArgumentMap()))
        except Exception:
            data = {'properties':{}, 'items':{}}

        self.request.response.setHeader(
            'Content-Type', 'application/json')
        self.request.response.setHeader(
            'Content-Disposition',
            'attachment; filename="%s.exhibit.json"' % self.context.getId())
        return sortProperties(json.dumps(data))
    def __call__(self):
        self.results = []
        self.can_save = False
        is_post = self.request.method == 'POST'

        if is_post and ('get_data' in self.request.form):
            endpoint_url = self.context.getEndpoint_url()
            query = self.request.form.get('query')
            if not query:
                return self.index()

            cooked_query = interpolate_query(query, {})

            args = (endpoint_url, cooked_query)
            results = run_with_timeout(20, query_and_get_result, *args)
            print results
            self.results = sparql2json(results)

        elif is_post and 'relabel' in self.request.form:
            blacklist = ['query', 'relabel', 'save']
            remap = [(k, v)
                     for k, v in self.request.form.items()
                     if (v and (k not in blacklist))]

            query = self.request.form.get('query')
            sm = IStatusMessage(self.request)
            if not query:
                sm.add(u"Need a query.", type='warning')
                return self.index()

            if len(remap) != len(self.choices):
                sm.add(u"You don't have enough mapped columns", type='warning')

                return self.index()
            else:
                for rep, sub in remap:
                    rx = r'(\?' + rep + ')(?!\w)'
                    query = re.sub(rx, '?' + sub, query)
                self.query = query  # override the method
                self.can_save = True

        elif is_post and 'save' in self.request.form:
            self.context.setSparql_query(self.query())
            return self.request.response.redirect(self.context.absolute_url())

        return self.index()
Beispiel #14
0
    def sparql2html(self):
        """ Download sparql results as HTML
        """
        try:
            data = sparql2json(self.context.execute_query(
                self.getArgumentMap()))
        except Exception:
            data = {'properties':{}, 'items':{}}

        result = []
        result.append(u"<style type='text/css'>")
        result.append(u"table {border-collapse: collapse }")
        result.append(u"th, td {border:1px solid black}")
        result.append(u"</style>")
        result.append(u"<table>")
        result.append(u"\t<tr>")

        properties = []
        def_order = 0
        for key, item in data['properties'].items():
            prop = []
            prop.append(item.get('order', def_order))
            prop.append(key)
            prop.append(item['valueType'])
            properties.append(prop)
            def_order += 1
        properties.sort()

        for col in properties:
            result.append(u"\t\t<th>" + col[1] + u"</th>")
        result.append(u"\t</tr>")
        for row in data['items']:
            result.append(u"\t<tr>")
            for col in properties:
                result.append(u"\t\t<td>" + unicode(row[col[1]]) + "</td>")
            result.append(u"\t</tr>")
        result.append(u"</table>")
        return '\n'.join(result)