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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")