def new(name=None, type=None, options=None): """Create new data source""" if name is None: name = click.prompt("Name") if type is None: print "Select type:" for i, query_runner_name in enumerate(query_runners.keys()): print "{}. {}".format(i + 1, query_runner_name) idx = 0 while idx < 1 or idx > len(query_runners.keys()): idx = click.prompt("[{}-{}]".format(1, len(query_runners.keys())), type=int) type = query_runners.keys()[idx - 1] else: validate_data_source_type(type) if options is None: query_runner = query_runners[type] schema = query_runner.configuration_schema() types = {'string': unicode, 'number': int, 'boolean': bool} options_obj = {} for k, prop in schema['properties'].iteritems(): required = k in schema.get('required', []) default_value = "<<DEFAULT_VALUE>>" if required: default_value = None prompt = prop.get('title', k.capitalize()) if required: prompt = "{} (required)".format(prompt) else: prompt = "{} (optional)".format(prompt) value = click.prompt(prompt, default=default_value, type=types[prop['type']], show_default=False) if value != default_value: options_obj[k] = value options = ConfigurationContainer(options_obj, schema) if not options.is_valid(): print "Error: invalid configuration." exit() print "Creating {} data source ({}) with options:\n{}".format( type, name, options) data_source = models.DataSource.create( name=name, type=type, options=options, org=models.Organization.get_by_slug('default')) print "Id: {}".format(data_source.id)
def new(name=None, type=None, options=None): """Create new data source.""" if name is None: name = click.prompt("Name") if type is None: print "Select type:" for i, query_runner_name in enumerate(query_runners.keys()): print "{}. {}".format(i + 1, query_runner_name) idx = 0 while idx < 1 or idx > len(query_runners.keys()): idx = click.prompt("[{}-{}]".format(1, len(query_runners.keys())), type=int) type = query_runners.keys()[idx - 1] else: validate_data_source_type(type) if options is None: query_runner = query_runners[type] schema = query_runner.configuration_schema() types = { 'string': unicode, 'number': int, 'boolean': bool } options_obj = {} for k, prop in schema['properties'].iteritems(): required = k in schema.get('required', []) default_value = "<<DEFAULT_VALUE>>" if required: default_value = None prompt = prop.get('title', k.capitalize()) if required: prompt = "{} (required)".format(prompt) else: prompt = "{} (optional)".format(prompt) value = click.prompt(prompt, default=default_value, type=types[prop['type']], show_default=False) if value != default_value: options_obj[k] = value options = ConfigurationContainer(options_obj, schema) if not options.is_valid(): print "Error: invalid configuration." exit() print "Creating {} data source ({}) with options:\n{}".format(type, name, options) data_source = models.DataSource.create(name=name, type=type, options=options, org=models.Organization.get_by_slug('default')) print "Id: {}".format(data_source.id)
def validate_data_source_type(type): if type not in query_runners.keys(): print( 'Error: the type "{}" is not supported (supported types: {}).'.format( type, ", ".join(query_runners.keys()) ) ) print("OJNK") exit(1)
def test_interactive_new(self): runner = CliRunner() pg_i = query_runners.keys().index('pg') + 1 result = runner.invoke( new, input="test\n%s\n\n\nexample.com\n\ntestdb\n" % (pg_i,)) self.assertFalse(result.exception) self.assertEqual(result.exit_code, 0) self.assertEqual(DataSource.select().count(), 1) ds = DataSource.select().first() self.assertEqual(ds.name, 'test') self.assertEqual(ds.type, 'pg') self.assertEqual(ds.options['dbname'], 'testdb')
def test_interactive_new(self): runner = CliRunner() pg_i = query_runners.keys().index('pg') + 1 result = runner.invoke( manager, ['ds', 'new'], input="test\n%s\n\n\nexample.com\n\n\ntestdb\n" % (pg_i,)) self.assertFalse(result.exception) self.assertEqual(result.exit_code, 0) self.assertEqual(DataSource.query.count(), 1) ds = DataSource.query.first() self.assertEqual(ds.name, 'test') self.assertEqual(ds.type, 'pg') self.assertEqual(ds.options['dbname'], 'testdb')
def test_interactive_new(self): runner = CliRunner() pg_i = list(query_runners.keys()).index("pg") + 1 result = runner.invoke( manager, ["ds", "new"], input="test\n%s\n\n\nexample.com\n\n\ntestdb\n" % (pg_i, ), ) self.assertFalse(result.exception) self.assertEqual(result.exit_code, 0) self.assertEqual(DataSource.query.count(), 1) ds = DataSource.query.first() self.assertEqual(ds.name, "test") self.assertEqual(ds.type, "pg") self.assertEqual(ds.options["dbname"], "testdb")
def list_types(): print("Enabled Query Runners:") types = sorted(query_runners.keys()) for query_runner_type in types: print(query_runner_type) print("Total of {}.".format(len(types)))
def new(name=None, type=None, options=None, organization="default"): """Create new data source.""" if name is None: name = click.prompt("Name") if type is None: print("Select type:") for i, query_runner_name in enumerate(query_runners.keys()): print("{}. {}".format(i + 1, query_runner_name)) idx = 0 while idx < 1 or idx > len(list(query_runners.keys())): idx = click.prompt("[{}-{}]".format(1, len(query_runners.keys())), type=int) type = list(query_runners.keys())[idx - 1] else: validate_data_source_type(type) query_runner = query_runners[type] schema = query_runner.configuration_schema() if options is None: types = {"string": str, "number": int, "boolean": bool} options_obj = {} for k, prop in schema["properties"].items(): required = k in schema.get("required", []) default_value = "<<DEFAULT_VALUE>>" if required: default_value = None prompt = prop.get("title", k.capitalize()) if required: prompt = "{} (required)".format(prompt) else: prompt = "{} (optional)".format(prompt) value = click.prompt( prompt, default=default_value, type=types[prop["type"]], show_default=False, ) if value != default_value: options_obj[k] = value options = ConfigurationContainer(options_obj, schema) else: options = ConfigurationContainer(json_loads(options), schema) if not options.is_valid(): print("Error: invalid configuration.") exit() print( "Creating {} data source ({}) with options:\n{}".format( type, name, options.to_json() ) ) data_source = models.DataSource.create_with_group( name=name, type=type, options=options, org=models.Organization.get_by_slug(organization), ) models.db.session.commit() print("Id: {}".format(data_source.id))
def validate_data_source_type(type): if type not in query_runners.keys(): print "Error: the type \"{}\" is not supported (supported types: {}).".format( type, ", ".join(query_runners.keys())) exit()
def validate_data_source_type(type): if type not in query_runners.keys(): print "Error: the type \"{}\" is not supported (supported types: {}).".format(type, ", ".join(query_runners.keys())) exit()