Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
    # 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:
Exemple #7
0
    # 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: