Example #1
0
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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
 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')
Example #5
0
 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')
Example #6
0
 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")
Example #7
0
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)))
Example #8
0
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))
Example #9
0
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()
Example #10
0
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()