From 030c5541cf76ce68bcbc68c9ce96bf15aa974bd0 Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Wed, 8 Mar 2023 16:11:32 -0500 Subject: [PATCH] Finished the manual upload and now working on CSV --- app/__pycache__/routes.cpython-311.pyc | Bin 16927 -> 15563 bytes app/routes.py | 291 +++++++++------------ app/static/files/FLASK-TEST_-_Sheet1.csv | 4 + app/static/files/FLASK-TEST_-_Sheet1_1.csv | 4 + app/templates/bulk_add.html | 6 +- app/templates/csv.html | 13 +- 6 files changed, 147 insertions(+), 171 deletions(-) create mode 100644 app/static/files/FLASK-TEST_-_Sheet1.csv create mode 100644 app/static/files/FLASK-TEST_-_Sheet1_1.csv diff --git a/app/__pycache__/routes.cpython-311.pyc b/app/__pycache__/routes.cpython-311.pyc index 3091544f0d79279e1eeaac0d6019bd1b777c826d..ae269c9b369b0f5537c6ab98ac7847b7671b2ede 100644 GIT binary patch delta 5294 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 QX;rH_VH$vC+I!yqAE^g7lmGw# diff --git a/app/routes.py b/app/routes.py index f9a0f45..5510247 100644 --- a/app/routes.py +++ b/app/routes.py @@ -3,7 +3,7 @@ import itertools import pandas as pd import re import os -import glob +import csv from app import app from flask import ( redirect, @@ -59,6 +59,7 @@ def correct_key(response): def allowed_file(filename): return "." in filename and filename.rsplit(".", 1)[1].lower() in ALLOWED_EXTENSIONS + @app.route("/dev", methods=["GET", "POST"]) def dev_test(): return render_template("options.html", title="Dev Test") @@ -106,6 +107,10 @@ def clear_session(): return render_template("index.html", title="Home, New session") +@app.route("/table") +def table(): + return render_template("table.html", tables=[session["dfhtml"]], titles=["Table"]) + """ uploaded_file = request.files['file'] if uploaded_file.filename != '': @@ -114,44 +119,99 @@ uploaded_file.save(uploaded_file.filename) return render_template("options.html", title="Home, Now with CSV!") """ - -@app.route("/csv", methods=["GET", "POST"]) -def csv(): +@app.route("/upload_file", methods=["GET", "POST"]) +@app.route("/bulk_add", methods=["GET", "POST"]) +def upload_file(): print("Uploading CSV") csvData = pd.DataFrame() if request.method == "POST": if "file" not in request.files: - print("file not in request.files") flash("No file found or uploaded") - return redirect(request.url) + return redirect(url_for("bulk_add_opts")) file = request.files["file"] if file.filename == "": print("no file exists") flash("No file found or uploaded") - return redirect(request.url) + return redirect(url_for("bulk_add_opts")) + # return redirect(request.url) if file and allowed_file(file.filename): filename = secure_filename(file.filename) session["file"] = filename file_path = os.path.join(app.config["UPLOAD_FOLDER"], filename) session["filepath"] = file_path file.save(file_path) - csvData = pd.read_csv(file_path, usecols=["Email"], index_col=False) - html_data = csvData.to_html() + # csvData = pd.read_csv(file_path) + file = list(csv.reader(open(file_path, "r"))) + emails = [] + groups = [] + for col in file: + emails.append(col[0]) + #groups.append(col(range(1,20))) + print(emails) + #print(groups) + + #print(emails) + # for item in data: + # print(item[0]) + # lines = reader(csvData) + # csvData = list(lines) + # print(csvData) + selection = request.form.get('learner-groups') + if selection == "all-groups": + if request.form['preview']: + return api_csv_all_groups(csvData) + elif request.form['submit']: + return "Submitted Selection" + elif selection == "some-groups": + return api_csv_some_groups(csvData) return render_template( - "options.html", table=html_data, title="Uploaded File" + "bulk_add.html", table=html_data, title="Uploaded File" ) - # TODO: Figure out how to delete the file after use. - print("nothing happened") return render_template("options.html", title="Home, now with a CSV Table!") -@app.route("/table") -def table(): - return render_template("table.html", tables=[session["dfhtml"]], titles=["Table"]) +def api_csv_all_groups(csvData): + # htmlcsv = csvData.to_html() + # for items in csvData: + # emails = csvData['Email'].values.tolist() + # emails = [nan for nan in emails if str(nan) != 'nan'] + + # groups = csvData['Groups'].values.tolist() + # groups = [nan for nan in groups if str(nan) != 'nan'] + + if emails and groups: + return api_add_ppl_groups(emails, groups) + elif emails: + return api_add_ppl(emails) + elif groups: + return api_add_groups(groups) + return render_template("bulk_add.html", table=htmlcsv, title="CSV Submission") + +def api_csv_some_groups(csvData): + htmlcsv = csvData.to_html() + + emails = csvData['Email'].values.tolist() + emails = [nan for nan in emails if str(nan) != 'nan'] + + groups = csvData['Groups'].values.tolist() + groups = [nan for nan in groups if str(nan) != 'nan'] + + print(emails) + print(groups) + + # print(email) + # return groups + # row_list = csvData.loc[2, :].values.flatten().tolist() + + return htmlcsv + @app.route("/bulk_add_opts", methods=["GET", "POST"]) def bulk_add_opts(): + return render_template("bulk_add.html", titles="Bulk Add Options") + + ''' array = [] dict_response = {} dataframe = pd.DataFrame() @@ -159,48 +219,9 @@ def bulk_add_opts(): if request.method == "POST": if session.get("file"): - print("file exists! uploading data...") - return "File Exists! Test Complete" - else: - while True: - count += 1 - endpoint = f"v2/groups?page={count}" - headers = {"accept": "application/json", "X-Api-Key": session["key"]} - response = requests.get(url + endpoint, headers=headers) - data = response.json() - nextlink = data["links"] - - for response in data["data"]: - uuid = response["id"] - dict_response = {"id": uuid} - for keys, values in response["attributes"].items(): - dict_response[keys] = values - array.append(dict_response) - dataframe = pd.DataFrame(array).drop( - "group_enrollment_link", axis=1 - ) - print(dataframe) - - if "next" not in nextlink: - break - - dfgroups = dataframe.to_html() - session["dfcsv"] = dataframe.to_csv() - return render_template( - "bulk_add.html", table=dfgroups, titles="Bulk Add" - ) - else: - return "This isn't working. Let's go our own way." - - -@app.route("/bulk_add_groups_opts", methods=["GET", "POST"]) -def bulk_add_groups_opts(): - array = [] - dict_response = {} - count = 0 - dataframe = pd.DataFrame() - - if request.method == "POST": + pass + #print("file exists! uploading data...") + #return "File Exists! Test Complete" while True: count += 1 endpoint = f"v2/groups?page={count}" @@ -215,20 +236,20 @@ def bulk_add_groups_opts(): for keys, values in response["attributes"].items(): dict_response[keys] = values array.append(dict_response) - dataframe = pd.DataFrame(array).drop("group_enrollment_link", axis=1) + dataframe = pd.DataFrame(array).drop( + "group_enrollment_link", axis=1 + ) print(dataframe) if "next" not in nextlink: break - session["dfgroups"] = dataframe.to_html() + dfgroups = dataframe.to_html() session["dfcsv"] = dataframe.to_csv() - return render_template( - "bulk_add_groups.html", table=session["dfgroups"], titles="Bulk Add Groups" - ) + return render_template("bulk_add.html", table=dfgroups, titles="Bulk Add") else: return "This isn't working. Let's go our own way." - +''' @app.route("/bulk_add", methods=["GET", "POST"]) def bulk_add(): @@ -239,35 +260,36 @@ def bulk_add(): if "\n" in emails: emails = emails.split("\n") emails = [email.strip() for email in emails] - emails = [re.sub(r'[,]', "", email) for email in emails] + emails = [re.sub(r"[,]", "", email) for email in emails] elif "," in emails: emails = emails.split(",") emails = [email.strip() for email in emails] else: - emails = [] - emails.append(emails) + emails = emails.split() + else: + emails = [] + emails.append(emails) if groups: if "\n" in groups: groups = groups.split("\n") groups = [group.strip() for group in groups] - groups = [re.sub(r'[,]', "", group) for group in groups] + groups = [re.sub(r"[,]", "", group) for group in groups] elif "," in groups: groups = groups.split(",") groups = [group.strip() for group in groups] else: - groups = [] - groups.append(groups) + groups = groups.split() + else: + groups = [] + groups.append(groups) if emails and groups: - print(emails) - print(groups) return api_add_ppl_groups(emails, groups) elif emails: return api_add_ppl(emails) elif groups: return api_add_groups(groups) - - return render_template('bulk_add.html') + return render_template("bulk_add.html") # for group in groups: @@ -276,57 +298,56 @@ def bulk_add(): def api_add_ppl(emails): - print(emails) + payload2 = [] endpoint = "v2/bulk/people" - payload = { - "data": { - "attributes": {"people": [{"email": emails}]} - } - } + for email in emails: + payload2.append({"email": email }) + payload = {"data": {"attributes": {"people": payload2 }}} headers = { "accept": "application/json", "content-type": "application/json", "X-Api-Key": session["key"], } - response = requests.post(url + endpoint, json=payload, headers=headers) - return check_response(response) + return payload + # response = requests.post(url + endpoint, json=payload, headers=headers) + # return check_response(response) def api_add_groups(groups): - print(groups) + payload2 = [] endpoint = "v2/bulk/people" - payload = { - "data": { - "attributes": {"people": [{"groups": groups}]} - } - } + for group in groups: + payload2.append({"groups" : group }) + payload = {"data": {"attributes": {"people": payload2 }}} headers = { "accept": "application/json", "content-type": "application/json", "X-Api-Key": session["key"], } - response = requests.post(url + endpoint, json=payload, headers=headers) - return check_response(response) + return payload + # response = requests.post(url + endpoint, json=payload, headers=headers) + # return check_response(response) def api_add_ppl_groups(emails, groups): - endpoint = "v2/bulk/people" - print(len(groups)) - combinations = list(itertools.product(emails, groups)) - print(combinations) - payload = { - "data": { - "attributes": {"people": [{"email": emails, "groups": groups}]} - } - } - print(payload) - headers = { - "accept": "application/json", - "content-type": "application/json", - "X-Api-Key": session["key"], - } - response = requests.post(url + endpoint, json=payload, headers=headers) - return check_response(response) + payload2 = [] + endpoint = "v2/bulk/people" + combinations = list(itertools.product(emails, groups)) + for combo in combinations: + payload2.append({"email": combo[0], "groups": combo[1]}) + payload = { + "data": {"attributes": {"people": payload2 }} + } + + headers = { + "accept": "application/json", + "content-type": "application/json", + "X-Api-Key": session["key"], + } + return payload + #response = requests.post(url + endpoint, json=payload, headers=headers) + #return check_response(response) + def check_response(response): response = str(response) @@ -343,67 +364,11 @@ def check_response(response): error = "Shrug" return render_template("bulk_add.html", title="Shrug", errors=error) + @app.route("/templates", methods=["GET", "POST"]) def templates(): pass -''' -@app.route("/bulk_add_groups", methods=["GET", "POST"]) -def bulk_add_groups(): - grouparr = [] - count = 0 - if request.method == "POST": - groups = request.form.get("groups") - if "\n" in groups: - groups.split("\n") - groups = [group.strip() for group in groups] - elif "," in groups: - groups.split(",") - groups = [group.strip() for group in groups] - for group in groups: - groupdict = {} - groupdict["name"] = group - grouparr.append(groupdict) - - endpoint = "v2/bulk/groups" - payload = {"data": {"attributes": {"groups": grouparr}}} - headers = { - "accept": "application/json", - "content-type": "application/json", - "X-Api-Key": session["key"], - } - response = requests.post(url + endpoint, json=payload, headers=headers) - print(type(response)) - response = str(response) - if "202" in response: - error = "Success! Groups have been added successfully." - return render_template( - "bulk_add_groups.html", - table=session["dfgroups"], - title="Groups Added", - error=error, - ) - elif "403" in response: - error = [ - "Uh oh. Looks like you're not the", - "admin or don't have appropriate privileges.", - "Please talk to your academy admin.", - ] - elif "422" in response: - error = [ - "Hm. Looks like something was wrong with the group names.", - "Reach out to the manager of this app.", - ] - return render_template( - "bulk_add_groups.html", - table=session["dfgroups"], - title="Groups Added", - error=error, - ) - else: - error = "Shrug" - return render_template("bulk_add_groups.html", title="Shrug", errors=error) -''' @app.route("/bulk_courses_to_groups", methods=["GET", "POST"]) def bulk_courses_to_groups(): diff --git a/app/static/files/FLASK-TEST_-_Sheet1.csv b/app/static/files/FLASK-TEST_-_Sheet1.csv new file mode 100644 index 0000000..29577e4 --- /dev/null +++ b/app/static/files/FLASK-TEST_-_Sheet1.csv @@ -0,0 +1,4 @@ +Email,Groups +norm+72@northpass.com,All Apologies,Come as you are +norm+90@northpass.com,Come as you are +norm+98@northpass.com,The Pines,The Sea,An Ocean diff --git a/app/static/files/FLASK-TEST_-_Sheet1_1.csv b/app/static/files/FLASK-TEST_-_Sheet1_1.csv new file mode 100644 index 0000000..1412503 --- /dev/null +++ b/app/static/files/FLASK-TEST_-_Sheet1_1.csv @@ -0,0 +1,4 @@ +Email,Groups, +norm+72@northpass.com,All Apologies,Come As You Are +norm+90@northpass.com,Come As You Are, +norm+98@northpass.com,Unplugged, \ No newline at end of file diff --git a/app/templates/bulk_add.html b/app/templates/bulk_add.html index 04c7108..b2d19cf 100644 --- a/app/templates/bulk_add.html +++ b/app/templates/bulk_add.html @@ -38,7 +38,7 @@

 

-

Emails

@@ -52,5 +52,7 @@ {% include 'csv.html' %}
- {% include 'table.html' %} + {% if table %} + {% include 'table.html' %} + {% endif %} {% endblock %} diff --git a/app/templates/csv.html b/app/templates/csv.html index 82e66d8..1f4708e 100644 --- a/app/templates/csv.html +++ b/app/templates/csv.html @@ -3,18 +3,19 @@

If you'd like to upload a CSV. Please do so here:

- - + +
- - + +
-

+

+