Exemple #1
0
def repo_files(request, repo_base, repo):
  try:
    login = get_login(request)

    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'USAGE')
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')

    repo_dir = '/user_data/%s/%s' %(repo_base, repo)
    if not os.path.exists(repo_dir):
      os.makedirs(repo_dir)
    
    uploaded_files = [f for f in os.listdir(repo_dir)]
    
    res = {
        'login': get_login(request),
        'repo_base': repo_base,
        'repo': repo,
        'files': uploaded_files}
    
    res.update(csrf(request))
    return render_to_response("repo-browse-files.html", res)
  
  except Exception, e:
    return HttpResponse(json.dumps(
        {'error': str(e)}),
        content_type="application/json")
Exemple #2
0
def repo_tables(request, repo_base, repo):
  try:
    login = get_login(request)

    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'USAGE')
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    manager = DataHubManager(user=repo_base)
    
    # get base_tables for a given repo
    res = manager.list_tables(repo)
    base_tables = [t[0] for t in res['tuples']]

    # get views for a given repo
    res = manager.list_views(repo)
    views = [t[0] for t in res['tuples']]
    
    res = {
        'login': get_login(request),
        'repo_base': repo_base,
        'repo': repo,
        'base_tables': base_tables,
        'views': views}
    
    res.update(csrf(request))
    return render_to_response("repo-browse-tables.html", res)
  
  except Exception, e:
    return HttpResponse(json.dumps(
        {'error': str(e)}),
        content_type="application/json")
Exemple #3
0
def repo_settings(request, repo_base, repo):
    try:
        login = get_login(request)
        res = DataHubManager.has_repo_privilege(login, repo_base, repo,
                                                'CREATE')

        if not (res and res['tuples'][0][0]):
            raise Exception('Access denied. Missing required privileges.')

        manager = DataHubManager(user=repo_base)
        res = manager.list_collaborators(repo_base, repo)

        collaborators = [(c[0].split('=')[0]).strip() for c in res['tuples']]
        collaborators = filter(lambda x: x != '' and x != repo_base,
                               collaborators)

        res = {
            'login': get_login(request),
            'repo_base': repo_base,
            'repo': repo,
            'collaborators': collaborators
        }
        res.update(csrf(request))
        return render_to_response("repo-settings.html", res)
    except Exception, e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            content_type="application/json")
Exemple #4
0
def repo_cards(request, repo_base, repo):
  try:
    login = get_login(request)

    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'USAGE')
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')

    cards = Card.objects.all().filter(
        repo_base=repo_base, repo_name=repo)
    
    cards = [c.card_name for c in cards]
    
    res = {
        'login': get_login(request),
        'repo_base': repo_base,
        'repo': repo,
        'cards': cards}
    
    res.update(csrf(request))
    return render_to_response("repo-browse-cards.html", res)
  
  except Exception, e:
    return HttpResponse(json.dumps(
        {'error': str(e)}),
        content_type="application/json")
Exemple #5
0
def repo_files(request, repo_base, repo):
    try:
        login = get_login(request)

        res = DataHubManager.has_repo_privilege(login, repo_base, repo,
                                                'USAGE')
        if not (res and res['tuples'][0][0]):
            raise Exception('Access denied. Missing required privileges.')

        repo_dir = '/user_data/%s/%s' % (repo_base, repo)
        if not os.path.exists(repo_dir):
            os.makedirs(repo_dir)

        uploaded_files = [f for f in os.listdir(repo_dir)]

        res = {
            'login': get_login(request),
            'repo_base': repo_base,
            'repo': repo,
            'files': uploaded_files
        }

        res.update(csrf(request))
        return render_to_response("repo-browse-files.html", res)

    except Exception, e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            content_type="application/json")
Exemple #6
0
def repo_cards(request, repo_base, repo):
    try:
        login = get_login(request)

        res = DataHubManager.has_repo_privilege(login, repo_base, repo,
                                                'USAGE')
        if not (res and res['tuples'][0][0]):
            raise Exception('Access denied. Missing required privileges.')

        cards = Card.objects.all().filter(repo_base=repo_base, repo_name=repo)

        cards = [c.card_name for c in cards]

        res = {
            'login': get_login(request),
            'repo_base': repo_base,
            'repo': repo,
            'cards': cards
        }

        res.update(csrf(request))
        return render_to_response("repo-browse-cards.html", res)

    except Exception, e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            content_type="application/json")
Exemple #7
0
def repo_settings(request, repo_base, repo):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    manager = DataHubManager(user=repo_base)
    res = manager.list_collaborators(repo_base, repo)
    
    collaborators = [(c[0].split('=')[0]).strip() for c in res['tuples']]
    collaborators = filter(lambda x: x!='' and x!=repo_base, collaborators)

    res = {
        'login': get_login(request),
        'repo_base': repo_base,
        'repo': repo,
        'collaborators': collaborators}
    res.update(csrf(request))
    return render_to_response("repo-settings.html", res)
  except Exception, e:
    return HttpResponse(json.dumps(
        {'error': str(e)}),
        content_type="application/json")
Exemple #8
0
def repo_tables(request, repo_base, repo):
    try:
        login = get_login(request)

        res = DataHubManager.has_repo_privilege(login, repo_base, repo,
                                                'USAGE')
        if not (res and res['tuples'][0][0]):
            raise Exception('Access denied. Missing required privileges.')

        manager = DataHubManager(user=repo_base)

        # get base_tables for a given repo
        res = manager.list_tables(repo)
        base_tables = [t[0] for t in res['tuples']]

        # get views for a given repo
        res = manager.list_views(repo)
        views = [t[0] for t in res['tuples']]

        res = {
            'login': get_login(request),
            'repo_base': repo_base,
            'repo': repo,
            'base_tables': base_tables,
            'views': views
        }

        res.update(csrf(request))
        return render_to_response("repo-browse-tables.html", res)

    except Exception, e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            content_type="application/json")
Exemple #9
0
def file_import(request, repo_base, repo):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    file_name = request.GET['file']
    
    delimiter = str(request.GET['delimiter'])    
    if delimiter == '':
      delimiter = str(request.GET['other_delimiter'])
    
    header = True if request.GET['has_header'] == "true" else False
    
    quote_character = request.GET['quote_character']
    if quote_character == '':
      quote_character = request.GET['other_quote_character']

    delimiter = delimiter.decode('string_escape')
    
    repo_dir = '/user_data/%s/%s' %(repo_base, repo)
    file_path = '%s/%s' %(repo_dir, file_name)
    table_name, _ = os.path.splitext(file_name)
    table_name = clean_str(table_name, 'table')
    dh_table_name = '%s.%s.%s' %(repo_base, repo, table_name)

    f = codecs.open(file_path, 'r', 'ISO-8859-1')

    data = csv.reader(f, delimiter=delimiter)
    cells = data.next()
    
    columns = [clean_str(str(i), 'col') for i in range(0, len(cells))]
    if header:
      columns = map(lambda x: clean_str(x, 'col'), cells)
    
    columns = rename_duplicates(columns)
    
    query = 'CREATE TABLE %s (%s text' % (dh_table_name, columns[0])

    for i in range(1, len(columns)):
      query += ', %s %s' %(columns[i], 'text')
    query += ')'
    
    manager = DataHubManager(user=repo_base)
    manager.execute_sql(query=query)
    manager.import_file(
        repo_base=repo_base,
        table_name=dh_table_name,
        file_path=file_path,
        delimiter=delimiter,
        header=header,
        quote_character=quote_character)
    return HttpResponseRedirect('/browse/%s/%s' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        mimetype="application/json")
Exemple #10
0
def card_export(request, repo_base, repo, card_name):
    try:
        login = get_login(request)
        card = Card.objects.get(repo_base=repo_base,
                                repo_name=repo,
                                card_name=card_name)
        query = card.query
        res = DataHubManager.has_repo_privilege(login, repo_base, repo,
                                                'CREATE')

        if not (res and res['tuples'][0][0]):
            raise Exception('Access denied. Missing required privileges.')

        repo_dir = '/user_data/%s/%s' % (repo_base, repo)

        if not os.path.exists(repo_dir):
            os.makedirs(repo_dir)

        file_path = '%s/%s.csv' % (repo_dir, card_name)
        DataHubManager.export_query(repo_base=repo_base,
                                    query=query,
                                    file_path=file_path)
        return HttpResponseRedirect('/browse/%s/%s/files' % (repo_base, repo))
    except Exception, e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            content_type="application/json")
Exemple #11
0
def file_import(request, repo_base, repo, file_name):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    delimiter = str(request.GET['delimiter'])    
    if delimiter == '':
      delimiter = str(request.GET['other_delimiter'])
    
    header = True if request.GET['has_header'] == "true" else False
    
    quote_character = request.GET['quote_character']
    if quote_character == '':
      quote_character = request.GET['other_quote_character']

    delimiter = delimiter.decode('string_escape')
    
    repo_dir = '/user_data/%s/%s' %(repo_base, repo)
    file_path = '%s/%s' %(repo_dir, file_name)
    table_name, _ = os.path.splitext(file_name)
    table_name = clean_str(table_name, 'table')
    dh_table_name = '%s.%s.%s' %(repo_base, repo, table_name)

    f = codecs.open(file_path, 'r', 'ISO-8859-1')

    data = csv.reader(f, delimiter=delimiter)
    cells = data.next()
    
    columns = [clean_str(str(i), 'col') for i in range(0, len(cells))]
    if header:
      columns = map(lambda x: clean_str(x, 'col'), cells)
    
    columns = rename_duplicates(columns)
    
    query = 'CREATE TABLE %s (%s text' % (dh_table_name, columns[0])

    for i in range(1, len(columns)):
      query += ', %s %s' %(columns[i], 'text')
    query += ')'
    
    manager = DataHubManager(user=repo_base)
    manager.execute_sql(query=query)
    manager.import_file(
        repo_base=repo_base,
        table_name=dh_table_name,
        file_path=file_path,
        delimiter=delimiter,
        header=header,
        quote_character=quote_character)
    return HttpResponseRedirect('/browse/%s/%s' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        mimetype="application/json")
Exemple #12
0
def repo_collaborators_remove(request, repo_base, repo, username):
    try:
        login = get_login(request)
        res = DataHubManager.has_repo_privilege(login, repo_base, repo,
                                                'CREATE')

        if not (res and res['tuples'][0][0]):
            raise Exception('Access denied. Missing required privileges.')

        manager = DataHubManager(user=repo_base)
        manager.delete_collaborator(repo, username)
        return HttpResponseRedirect('/settings/%s/%s' % (repo_base, repo))
    except Exception, e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            content_type="application/json")
Exemple #13
0
def file_delete(request, repo_base, repo, file_name):
    try:
        login = get_login(request)
        res = DataHubManager.has_repo_privilege(login, repo_base, repo,
                                                'CREATE')

        if not (res and res['tuples'][0][0]):
            raise Exception('Access denied. Missing required privileges.')

        repo_dir = '/user_data/%s/%s' % (repo_base, repo)
        file_path = '%s/%s' % (repo_dir, file_name)
        os.remove(file_path)
        return HttpResponseRedirect('/browse/%s/%s/files' % (repo_base, repo))
    except Exception, e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            content_type="application/json")
Exemple #14
0
def repo_collaborators_remove(request, repo_base, repo, username):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    manager = DataHubManager(user=repo_base)
    manager.delete_collaborator(repo, username)
    return HttpResponseRedirect('/settings/%s/%s' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        content_type="application/json")
Exemple #15
0
def card_delete(request, repo_base, repo, card_name):
  try:    
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')

    card = Card.objects.get(repo_base=repo_base, repo_name=repo, card_name=card_name)
    card.delete()

    return HttpResponseRedirect('/browse/%s/%s/cards' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        mimetype="application/json")
Exemple #16
0
def card_delete(request, repo_base, repo, card_name):
  try:    
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')

    card = Card.objects.get(repo_base=repo_base, repo_name=repo, card_name=card_name)
    card.delete()

    return HttpResponseRedirect('/browse/%s/%s/cards' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        content_type="application/json")
Exemple #17
0
def file_delete(request, repo_base, repo, file_name):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')

    repo_dir = '/user_data/%s/%s' %(repo_base, repo)
    file_path = '%s/%s' %(repo_dir, file_name)
    os.remove(file_path)
    return HttpResponseRedirect('/browse/%s/%s/files' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        content_type="application/json")
Exemple #18
0
def repo_collaborators_add(request, repo_base, repo):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    username = request.POST['collaborator_username']
    manager = DataHubManager(user=repo_base)
    manager.add_collaborator(
        repo, username, privileges=['SELECT', 'INSERT', 'UPDATE'])
    return HttpResponseRedirect('/settings/%s/%s' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        mimetype="application/json")
Exemple #19
0
def add_collaborator(request, repo_base, repo):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    username = request.POST['collaborator_username']
    manager = DataHubManager(user=repo_base)
    manager.add_collaborator(
        repo, username, privileges=['SELECT', 'INSERT', 'UPDATE'])
    return HttpResponseRedirect('/settings/%s/%s' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        mimetype="application/json")
Exemple #20
0
def file_download(request, repo_base, repo, file_name):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'USAGE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')

    repo_dir = '/user_data/%s/%s' %(repo_base, repo)
    file_path = '%s/%s' %(repo_dir, file_name)
    response = HttpResponse(
        open(file_path).read(), content_type='application/force-download')
    response['Content-Disposition'] = 'attachment; filename="%s"' %(file_name)
    return response
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        content_type="application/json")
Exemple #21
0
def file_download(request, repo_base, repo, file_name):
    try:
        login = get_login(request)
        res = DataHubManager.has_repo_privilege(login, repo_base, repo,
                                                'USAGE')

        if not (res and res['tuples'][0][0]):
            raise Exception('Access denied. Missing required privileges.')

        repo_dir = '/user_data/%s/%s' % (repo_base, repo)
        file_path = '%s/%s' % (repo_dir, file_name)
        response = HttpResponse(open(file_path).read(),
                                content_type='application/force-download')
        response['Content-Disposition'] = 'attachment; filename="%s"' % (
            file_name)
        return response
    except Exception, e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            content_type="application/json")
Exemple #22
0
def repo_dashboards(request, repo_base, repo):
  try:
    login = get_login(request)

    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'USAGE')
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    res = {
        'login': get_login(request),
        'repo_base': repo_base,
        'repo': repo,
        'dashboards': []}
    
    res.update(csrf(request))
    return render_to_response("repo-browse-dashboards.html", res)
  
  except Exception, e:
    return HttpResponse(json.dumps(
        {'error': str(e)}),
        mimetype="application/json")
Exemple #23
0
def repo_dashboards(request, repo_base, repo):
  try:
    login = get_login(request)

    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'USAGE')
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    res = {
        'login': get_login(request),
        'repo_base': repo_base,
        'repo': repo,
        'dashboards': []}
    
    res.update(csrf(request))
    return render_to_response("repo-browse-dashboards.html", res)
  
  except Exception, e:
    return HttpResponse(json.dumps(
        {'error': str(e)}),
        content_type="application/json")
Exemple #24
0
def table_export(request, repo_base, repo, table_name):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    repo_dir = '/user_data/%s/%s' %(repo_base, repo)
    
    if not os.path.exists(repo_dir):
      os.makedirs(repo_dir)
    
    file_path = '%s/%s.csv' %(repo_dir, table_name)
    dh_table_name = '%s.%s.%s' %(repo_base, repo, table_name)
    DataHubManager.export_table(
        repo_base=repo_base, table_name=dh_table_name, file_path=file_path)
    return HttpResponseRedirect('/browse/%s/%s/files' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        content_type="application/json")
Exemple #25
0
def table_export(request, repo_base, repo, table_name):
  try:
    login = get_login(request)
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    repo_dir = '/user_data/%s/%s' %(repo_base, repo)
    
    if not os.path.exists(repo_dir):
      os.makedirs(repo_dir)
    
    file_path = '%s/%s.csv' %(repo_dir, table_name)
    dh_table_name = '%s.%s.%s' %(repo_base, repo, table_name)
    DataHubManager.export_table(
        repo_base=repo_base, table_name=dh_table_name, file_path=file_path)
    return HttpResponseRedirect('/browse/%s/%s/files' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        mimetype="application/json")
Exemple #26
0
def card_export(request, repo_base, repo, card_name):
  try:
    login = get_login(request)
    card = Card.objects.get(repo_base=repo_base, repo_name=repo, card_name=card_name)
    query = card.query
    res = DataHubManager.has_repo_privilege(login, repo_base, repo, 'CREATE')
    
    if not (res and res['tuples'][0][0]):
      raise Exception('Access denied. Missing required privileges.')
    
    repo_dir = '/user_data/%s/%s' %(repo_base, repo)
    
    if not os.path.exists(repo_dir):
      os.makedirs(repo_dir)
    
    file_path = '%s/%s.csv' %(repo_dir, card_name)
    DataHubManager.export_query(
        repo_base=repo_base, query=query, file_path=file_path)
    return HttpResponseRedirect('/browse/%s/%s/files' %(repo_base, repo))
  except Exception, e:
    return HttpResponse(
        json.dumps(
          {'error': str(e)}),
        mimetype="application/json")