def databases(user, format=None): """ Give a list of all databases owned by the user. """ #require(user, database, 'read', format) try: databases = [] # TODO: this is a hack, find a nicer way to do this # # we want to allow user names to contain a '.', eg: 'thedatahub.org' # this breaks the routing for this function # # so if format exists, check that it should not be part of the user name if format: try: user_databases = db_factory.databases_by_user(user + '.' + format) user = user + '.' + format except UserNotFound: user_databases = db_factory.databases_by_user(user) else: user_databases = db_factory.databases_by_user(user) for database in user_databases: url = url_for('webstore.index', user=user, database=database) databases.append({'name': database, 'url': url}) return render_table(request, databases, ['name', 'url'], format) except UserNotFound: raise WebstoreException('User not found', format, state='error', code=404) except NamingException, ne: raise WebstoreException('Invalid name: %s' % ne.field, format, state='error', code=400)
def schema(user, database, table, format=None): require(user, database, 'read', format) _table = _get_table(user, database, table, format) schema = [] for column in _table.table.columns: values_url = url_for('webstore.distinct', user=user, database=database, table=table, column=column.name) schema.append(dict(name=column.name, values_url=values_url, type=unicode(column.type).lower())) return render_table(request, schema, schema[0].keys(), format)
def databases(user, format=None): """ Give a list of all databases owned by the user. """ #require(user, database, 'read', format) try: databases = [] for database in db_factory.databases_by_user(user): url = url_for('webstore.index', user=user, database=database) databases.append({'name': database, 'url': url}) return render_table(request, databases, ['name', 'url'], format) except NamingException, ne: raise WebstoreException('Invalid name: %s' % ne.field, format, state='error', code=400)
# send out sqlite database raw: if response_format(request, format) == 'db' \ and db.engine.name == 'sqlite': if not os.path.isfile(db.engine.engine.url.database): return WebstoreException('No such database: %s' % database, 'json', state='error', code=404) log.debug("Streaming out DB: %s" % db.engine.engine.url.database) return send_file(db.engine.engine.url.database, mimetype=SQLITE) tables = [] for table in db.engine.table_names(): url = url_for('webstore.read', user=user, database=database, table=table) tables.append({'name': table, 'url': url}) return render_table(request, tables, ['name', 'url', 'columns'], format) @store.route('/<user>/<database>.<format>', methods=['PUT']) @store.route('/<user>/<database>', methods=['PUT']) def sql(user, database, format=None): """ Execute an SQL statement on the database. """ # TODO: do we really, really need this? if request.content_type == 'text/sql': query = request.data params = None attaches = [] elif request.content_type.lower() == 'application/json': query = request.json.get('query', '') params = request.json.get('params') attaches = request.json.get('attach', []) else: