Exemplo n.º 1
0
class KSqlApi(Api):
    def __init__(self, user, interpreter=None):
        Api.__init__(self, user, interpreter=interpreter)

        self.db = KSqlClientApi(user=user)

    @query_error_handler
    def execute(self, notebook, snippet):

        data, description = self.db.query(
            snippet['statement'], channel_name=snippet.get('editorWsChannel'))
        has_result_set = data is not None

        return {
            'sync': True,
            'has_result_set': has_result_set,
            'result': {
                'has_more':
                False,
                'data':
                data if has_result_set else [],
                'meta': [{
                    'name': col[0],
                    'type': col[1],
                    'comment': ''
                } for col in description] if has_result_set else [],
                'type':
                'table'
            }
        }

    @query_error_handler
    def check_status(self, notebook, snippet):
        return {'status': 'available'}

    @query_error_handler
    def autocomplete(self,
                     snippet,
                     database=None,
                     table=None,
                     column=None,
                     nested=None):
        response = {}

        try:
            if database is None:
                response['databases'] = ['default']
            elif table is None:
                response['tables_meta'] = self.db.show_tables()
            else:
                response = {}

        except Exception as e:
            LOG.warn('Autocomplete data fetching error: %s' % e)
            response['code'] = 500
            response['error'] = e.message

        return response
Exemplo n.º 2
0
    def __init__(self, user, interpreter=None):
        Api.__init__(self, user, interpreter=interpreter)

        self.db = KSqlClientApi(user=user)
Exemplo n.º 3
0
  def __init__(self, user, interpreter=None):
    Api.__init__(self, user, interpreter=interpreter)

    self.options = interpreter['options']

    self.db = KSqlClientApi(user=user, url=self.options['url'])
Exemplo n.º 4
0
class KSqlApi(Api):

  def __init__(self, user, interpreter=None):
    Api.__init__(self, user, interpreter=interpreter)

    self.options = interpreter['options']

    self.db = KSqlClientApi(user=user, url=self.options['url'])


  @query_error_handler
  def execute(self, notebook, snippet):

    data, description = self.db.query(
        snippet['statement'],
        channel_name=snippet.get('editorWsChannel')
    )
    has_result_set = data is not None

    return {
      'sync': True,
      'has_result_set': has_result_set,
      'result': {
        'has_more': False,
        'data': data if has_result_set else [],
        'meta': [{
          'name': col[0],
          'type': col[1],
          'comment': ''
        } for col in description] if has_result_set else [],
        'type': 'table'
      }
    }


  @query_error_handler
  def check_status(self, notebook, snippet):
    return {'status': 'available'}


  @query_error_handler
  def autocomplete(self, snippet, database=None, table=None, column=None, nested=None):
    response = {}

    try:
      if database is None:
        response['databases'] = ['tables', 'topics', 'streams']
      elif table is None:
        if database == 'tables':
          response['tables_meta'] = self.db.show_tables()
        elif database == 'topics':
          response['tables_meta'] = self.db.show_topics()
        elif database == 'streams':
          response['tables_meta'] = [
            {'name': t['name'], 'type': t['type'], 'comment': 'Topic: %(topic)s Format: %(format)s' % t}
            for t in self.db.show_streams()
          ]
      elif column is None:
        columns = self.db.get_columns(table)
        response['columns'] = [col['name'] for col in columns]
        response['extended_columns'] = [{
            'comment': col.get('comment'),
            'name': col.get('name'),
            'type': str(col['schema'].get('type'))
          } for col in columns
        ]
      else:
        response = {}

    except Exception as e:
      LOG.warn('Autocomplete data fetching error: %s' % e)
      response['code'] = 500
      response['error'] = e.message

    return response