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
def __init__(self, user, interpreter=None): Api.__init__(self, user, interpreter=interpreter) self.db = KSqlClientApi(user=user)
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'])
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