def edit(name, new_name=None, options=None, type=None, organization='default'): """Edit data source settings (name, options, type).""" try: if type is not None: validate_data_source_type(type) data_source = models.DataSource.get( models.DataSource.name == name, models.DataSource.org == org, ) if options is not None: schema = get_configuration_schema_for_query_runner_type( data_source.type) options = json.loads(options) data_source.options.set_schema(schema) data_source.options.update(options) update_attr(data_source, "name", new_name) update_attr(data_source, "type", type) update_attr(data_source, "options", options) data_source.save() except models.DataSource.DoesNotExist: print "Couldn't find data source named: {}".format(name)
def post(self): req = request.get_json(True) require_fields(req, ('options', 'name', 'type')) schema = get_configuration_schema_for_query_runner_type(req['type']) if schema is None: abort(400) config = ConfigurationContainer(filter_none(req['options']), schema) # from IPython import embed # embed() if not config.is_valid(): abort(400) try: datasource = models.DataSource.create_with_group(org=self.current_org, name=req['name'], type=req['type'], options=config) models.db.session.commit() except IntegrityError as e: if req['name'] in e.message: abort(400, message="Data source with the name {} already exists.".format(req['name'])) abort(400) self.record_event({ 'action': 'create', 'object_id': datasource.id, 'object_type': 'datasource' }) return datasource.to_dict(all=True)
def post(self): req = request.get_json(True) required_fields = ('options', 'name', 'type') for f in required_fields: if f not in req: abort(400) schema = get_configuration_schema_for_query_runner_type(req['type']) if schema is None: abort(400) config = ConfigurationContainer(req['options'], schema) if not config.is_valid(): abort(400) datasource = models.DataSource.create_with_group(org=self.current_org, name=req['name'], type=req['type'], options=config) self.record_event({ 'action': 'create', 'object_id': datasource.id, 'object_type': 'datasource' }) return datasource.to_dict(all=True)
def to_dict(self, all=False, with_permissions_for=None): d = { 'id': self.id, 'name': self.name, 'type': self.type, 'syntax': self.query_runner.syntax, 'paused': self.paused, 'pause_reason': self.pause_reason } if all: schema = get_configuration_schema_for_query_runner_type(self.type) self.options.set_schema(schema) d['options'] = self.options.to_dict(mask_secrets=True) d['queue_name'] = self.queue_name d['scheduled_queue_name'] = self.scheduled_queue_name d['groups'] = self.groups if with_permissions_for is not None: d['view_only'] = db.session.query( DataSourceGroup.view_only).filter( DataSourceGroup.group == with_permissions_for, DataSourceGroup.data_source == self).one()[0] return d
def post(self, data_source_id): data_source = models.DataSource.get_by_id_and_org(data_source_id, self.current_org) req = request.get_json(True) schema = get_configuration_schema_for_query_runner_type(req['type']) if schema is None: abort(400) try: data_source.options.set_schema(schema) data_source.options.update(filter_none(req['options'])) except ValidationError: abort(400) data_source.type = req['type'] data_source.name = req['name'] models.db.session.add(data_source) try: models.db.session.commit() except IntegrityError as e: if req['name'] in e.message: abort(400, message="Data source with the name {} already exists.".format(req['name'])) abort(400) return data_source.to_dict(all=True)
def post(self, data_source_id): data_source = models.DataSource.get_by_id_and_org( data_source_id, self.current_org) req = request.get_json(True) schema = get_configuration_schema_for_query_runner_type(req['type']) if schema is None: abort(400) try: data_source.options.set_schema(schema) data_source.options.update(filter_none(req['options'])) except ValidationError: abort(400) data_source.type = req['type'] data_source.name = req['name'] models.db.session.add(data_source) # Refresh the stored schemas when a data source is updated refresh_schemas.apply_async(queue=settings.SCHEMAS_REFRESH_QUEUE) try: models.db.session.commit() except IntegrityError as e: if req['name'] in e.message: abort(400, message="Data source with the name {} already exists.". format(req['name'])) abort(400) return data_source.to_dict(all=True)
def to_dict(self, all=False, with_permissions_for=None): d = { "id": self.id, "name": self.name, "type": self.type, "syntax": self.query_runner.syntax, "paused": self.paused, "pause_reason": self.pause_reason, "supports_auto_limit": self.query_runner.supports_auto_limit } if all: schema = get_configuration_schema_for_query_runner_type(self.type) self.options.set_schema(schema) d["options"] = self.options.to_dict(mask_secrets=True) d["queue_name"] = self.queue_name d["scheduled_queue_name"] = self.scheduled_queue_name d["groups"] = self.groups if with_permissions_for is not None: d["view_only"] = ( db.session.query(DataSourceGroup.view_only) .filter( DataSourceGroup.group == with_permissions_for, DataSourceGroup.data_source == self, ) .one()[0] ) return d
def post(self, data_source_id): data_source = models.DataSource.get_by_id_and_org( data_source_id, self.current_org) req = request.get_json(True) schema = get_configuration_schema_for_query_runner_type(req['type']) if schema is None: abort(400) try: data_source.options.set_schema(schema) data_source.options.update(filter_none(req['options'])) except ValidationError: abort(400) data_source.type = req['type'] data_source.name = req['name'] models.db.session.add(data_source) try: models.db.session.commit() except IntegrityError as e: if req['name'] in e.message: abort(400, message="Data source with the name {} already exists.". format(req['name'])) abort(400) self.record_event({ 'action': 'edit', 'object_id': data_source.id, 'object_type': 'datasource', }) return data_source.to_dict(all=True)
def post(self): req = request.get_json(True) require_fields(req, ("options", "name", "type")) schema = get_configuration_schema_for_query_runner_type(req["type"]) if schema is None: abort(400) config = ConfigurationContainer(filter_none(req["options"]), schema) if not config.is_valid(): abort(400) try: datasource = models.DataSource.create_with_group( org=self.current_org, name=req["name"], type=req["type"], description=req["description"] if "description" in req else "", options=config, ) models.db.session.commit() # Refresh the stored schemas when a new data source is added to the list refresh_schema.delay(datasource.id) except IntegrityError as e: models.db.session.rollback() if req["name"] in str(e): abort( 400, message="Data source with the name {} already exists.". format(req["name"]), ) abort(400) self.record_event({ "action": "create", "object_id": datasource.id, "object_type": "datasource", }) return datasource.to_dict(all=True)
def post(self, data_source_id): data_source = models.DataSource.get_by_id_and_org(data_source_id, self.current_org) req = request.get_json(True) schema = get_configuration_schema_for_query_runner_type(req['type']) if schema is None: abort(400) try: data_source.options.set_schema(schema) data_source.options.update(req['options']) except ValidationError: abort(400) data_source.type = req['type'] data_source.name = req['name'] data_source.save() return data_source.to_dict(all=True)
def post(self, data_source_id): data_source = models.DataSource.get_by_id_and_org(data_source_id, self.current_org) req = request.get_json(True) schema = get_configuration_schema_for_query_runner_type(req['type']) if schema is None: abort(400) try: data_source.options.set_schema(schema) data_source.options.update(req['options']) except ValidationError: abort(400) data_source.type = req['type'] data_source.name = req['name'] models.db.session.add(data_source) models.db.session.commit() return data_source.to_dict(all=True)
def post(self): req = request.get_json(True) required_fields = ('options', 'name', 'type') for f in required_fields: if f not in req: abort(400) schema = get_configuration_schema_for_query_runner_type(req['type']) if schema is None: abort(400) config = ConfigurationContainer(filter_none(req['options']), schema) # from IPython import embed # embed() if not config.is_valid(): abort(400) try: datasource = models.DataSource.create_with_group( org=self.current_org, name=req['name'], type=req['type'], options=config) models.db.session.commit() # Refresh the stored schemas when a new data source is added to the list refresh_schemas.apply_async(queue=settings.SCHEMAS_REFRESH_QUEUE) except IntegrityError as e: if req['name'] in e.message: abort(400, message="Data source with the name {} already exists.". format(req['name'])) abort(400) self.record_event({ 'action': 'create', 'object_id': datasource.id, 'object_type': 'datasource' }) return datasource.to_dict(all=True)
def post(self, data_source_id): data_source = models.DataSource.get_by_id_and_org( data_source_id, self.current_org) req = request.get_json(True) schema = get_configuration_schema_for_query_runner_type(req["type"]) if schema is None: abort(400) try: data_source.options.set_schema(schema) data_source.options.update(filter_none(req["options"])) except ValidationError: abort(400) data_source.type = req["type"] data_source.name = req["name"] data_source.description = req[ "description"] if "description" in req else "" models.db.session.add(data_source) # Refresh the stored schemas when a data source is updated refresh_schema.delay(data_source.id) try: models.db.session.commit() except IntegrityError as e: models.db.session.rollback() if req["name"] in str(e): abort( 400, message="Data source with the name {} already exists.". format(req["name"]), ) abort(400) self.record_event({ "action": "edit", "object_id": data_source.id, "object_type": "datasource" }) return data_source.to_dict(all=True)
def to_dict(self, all=False, with_permissions=False): d = { 'id': self.id, 'name': self.name, 'type': self.type, 'syntax': self.query_runner.syntax } if all: schema = get_configuration_schema_for_query_runner_type(self.type) self.options.set_schema(schema) d['options'] = self.options.to_dict(mask_secrets=True) d['queue_name'] = self.queue_name d['scheduled_queue_name'] = self.scheduled_queue_name d['groups'] = self.groups if with_permissions: d['view_only'] = self.data_source_groups.view_only return d
def post(self): req = request.get_json(True) required_fields = ("options", "name", "type") for f in required_fields: if f not in req: abort(400) schema = get_configuration_schema_for_query_runner_type(req["type"]) if schema is None: abort(400) config = ConfigurationContainer(req["options"], schema) if not config.is_valid(): abort(400) datasource = models.DataSource.create_with_group( org=self.current_org, name=req["name"], type=req["type"], options=config ) self.record_event({"action": "create", "object_id": datasource.id, "object_type": "datasource"}) return datasource.to_dict(all=True)
def edit(name, new_name=None, options=None, type=None): """Edit data source settings (name, options, type).""" try: if type is not None: validate_data_source_type(type) data_source = models.DataSource.get(models.DataSource.name==name) if options is not None: schema = get_configuration_schema_for_query_runner_type(data_source.type) options = json.loads(options) data_source.options.set_schema(schema) data_source.options.update(options) update_attr(data_source, "name", new_name) update_attr(data_source, "type", type) update_attr(data_source, "options", options) data_source.save() except models.DataSource.DoesNotExist: print "Couldn't find data source named: {}".format(name)
def to_dict(self, all=False, with_permissions=False): d = { 'id': self.id, 'name': self.name, 'type': self.type, 'syntax': self.query_runner.syntax, 'paused': self.paused, 'pause_reason': self.pause_reason } if all: schema = get_configuration_schema_for_query_runner_type(self.type) self.options.set_schema(schema) d['options'] = self.options.to_dict(mask_secrets=True) d['queue_name'] = self.queue_name d['scheduled_queue_name'] = self.scheduled_queue_name d['groups'] = self.groups if with_permissions: d['view_only'] = self.data_source_groups.view_only return d
def edit(name, new_name=None, options=None, type=None, organization="default"): """Edit data source settings (name, options, type).""" try: if type is not None: validate_data_source_type(type) org = models.Organization.get_by_slug(organization) data_source = models.DataSource.query.filter( models.DataSource.name == name, models.DataSource.org == org ).one() update_attr(data_source, "name", new_name) update_attr(data_source, "type", type) if options is not None: schema = get_configuration_schema_for_query_runner_type(data_source.type) options = json_loads(options) data_source.options.set_schema(schema) data_source.options.update(options) models.db.session.add(data_source) models.db.session.commit() except NoResultFound: print("Couldn't find data source named: {}".format(name))
def to_dict(self, all=False, with_permissions_for=None): d = { 'id': self.id, 'name': self.name, 'type': self.type, 'syntax': self.query_runner.syntax, 'paused': self.paused, 'pause_reason': self.pause_reason } if all: schema = get_configuration_schema_for_query_runner_type(self.type) self.options.set_schema(schema) d['options'] = self.options.to_dict(mask_secrets=True) d['queue_name'] = self.queue_name d['scheduled_queue_name'] = self.scheduled_queue_name d['groups'] = self.groups if with_permissions_for is not None: d['view_only'] = db.session.query(DataSourceGroup.view_only).filter( DataSourceGroup.group == with_permissions_for, DataSourceGroup.data_source == self).one()[0] return d
def post(self): req = request.get_json(True) require_fields(req, ("options", "name", "type")) schema = get_configuration_schema_for_query_runner_type(req["type"]) if schema is None: abort(400) config = ConfigurationContainer(filter_none(req["options"]), schema) if not config.is_valid(): abort(400) try: datasource = models.DataSource.create_with_group( org=self.current_org, name=req["name"], type=req["type"], options=config) models.db.session.commit() except IntegrityError as e: if req["name"] in str(e): abort( 400, message="同名数据源 {} 已经存在。".format(req["name"]), ) abort(400) self.record_event({ "action": "create", "object_id": datasource.id, "object_type": "datasource", }) return datasource.to_dict(all=True)
def post(self, data_source_id): data_source = models.DataSource.get_by_id_and_org( data_source_id, self.current_org) req = request.get_json(True) schema = get_configuration_schema_for_query_runner_type(req["type"]) if schema is None: abort(400) try: data_source.options.set_schema(schema) data_source.options.update(filter_none(req["options"])) except ValidationError: abort(400) data_source.type = req["type"] data_source.name = req["name"] models.db.session.add(data_source) try: models.db.session.commit() except IntegrityError as e: if req["name"] in str(e): abort( 400, message="同名数据源 {} 已经存在。".format(req["name"]), ) abort(400) self.record_event({ "action": "edit", "object_id": data_source.id, "object_type": "datasource" }) return data_source.to_dict(all=True)
def edit(name, new_name=None, options=None, type=None, organization='default'): """Edit data source settings (name, options, type).""" try: if type is not None: validate_data_source_type(type) org = models.Organization.get_by_slug(organization) data_source = models.DataSource.query.filter( models.DataSource.name == name, models.DataSource.org == org).one() update_attr(data_source, "name", new_name) update_attr(data_source, "type", type) if options is not None: schema = get_configuration_schema_for_query_runner_type( data_source.type) options = json.loads(options) data_source.options.set_schema(schema) data_source.options.update(options) models.db.session.add(data_source) models.db.session.commit() except NoResultFound: print("Couldn't find data source named: {}".format(name))