From afd6c76ce02838c11dbae24df8d83379aa242758 Mon Sep 17 00:00:00 2001 From: DamianJordaan Date: Tue, 27 Sep 2022 23:25:43 +0200 Subject: [PATCH 1/4] =?UTF-8?q?=E2=9C=A8(Backend)=20Testing=20Global=20Var?= =?UTF-8?q?iables?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/api/__init__.py | 65 +++++++++++++++++++++++++++++--------- server/api/queries_main.py | 40 +++++++++++++++++++++++ server/app.py | 26 ++++++++++++++- server/schema.graphql | 7 ++++ 4 files changed, 122 insertions(+), 16 deletions(-) diff --git a/server/api/__init__.py b/server/api/__init__.py index c635a7a6..fe732806 100644 --- a/server/api/__init__.py +++ b/server/api/__init__.py @@ -1,32 +1,67 @@ import os -from flask import Flask - -from flask import request -from flask import * +from flask import Flask, session, request from config import * app = Flask(__name__) +app.secret_key = b'_5#y2L"F4Q8z\n\xec]/' + @app.route('/') def hello(): - print('endpoint: %s, url: %s, path: %s' % ( - request.endpoint, - request.url, - request.path)) - website = request.args.get('website') - print("website: ", website) - print("host: ", request.host, "\nreff: ", request.referrer, "\nurl root: ", request.url_root) - @after_this_request - def test(resp): - print("resp loc", resp.www_authenticate) - return resp + # print('endpoint: %s, url: %s, path: %s' % ( + # request.endpoint, + # request.url, + # request.path)) + # website = request.args.get('website') + # print("website: ", website) + # print("host: ", request.host, "\nreff: ", request.referrer, "\nurl root: ", request.url_root) + # @after_this_request + # def test(resp): + # print("resp loc", resp.www_authenticate) + # return resp return 'MathU Similarity Index Server' @app.route('/apikey/') def default_apikey(): return "apikey" +@app.route('/session_counter/') +def test_sessions_var(): + if 'int_val' in session: + temp = "session value: " + session["users"]["default"] + counter = session["int_val"] + session["int_val"] = counter+1 + var_value = "def-test-value_"+str(session["int_val"]) + session["users"]["default"] = var_value + return temp + else: + session['users'] = dict() + session['int_val'] = 0 + var_value = "def-test-value_"+str(session["int_val"]) + session['users']["default"] = var_value + temp = "session value: " + session["users"]["default"] + return temp + +@app.route('/ses2/') +def test_sessions_var2(): + print("test") + return test_sessions_var() + # if 'int_val' in g: + # temp = "session value: " + g["users"]["default"] + # counter = g["int_val"] + # g["int_val"] = counter+1 + # var_value = "def-test-value_"+str(g["int_val"]) + # g["users"]["default"] = var_value + # return temp + # else: + # g['users'] = dict() + # g['int_val'] = 0 + # var_value = "def-test-value_"+str(g["int_val"]) + # g['users']["default"] = var_value + # temp = "session value: " + g["users"]["default"] + # return temp + import matplotlib.pyplot as plt import numpy as np import sympy as sym diff --git a/server/api/queries_main.py b/server/api/queries_main.py index e1a1e085..895ef50d 100644 --- a/server/api/queries_main.py +++ b/server/api/queries_main.py @@ -5,8 +5,48 @@ from services.tools import get_date_time_type from services.confidence_calc import get_all as get_all_conf +from flask import session + +from app import index_add_counter +from app import GLOBAL_SERVER_DATA + # import latex2mathml.converter +#tests: +def set_test_global_nolock(obj, info, index, data): + # print(GLOBAL_SERVER_DATA) + GLOBAL_SERVER_DATA[index] = data + return GLOBAL_SERVER_DATA[index] + +def get_test_global_nolock(obj, info, index): + # print(GLOBAL_SERVER_DATA) + return GLOBAL_SERVER_DATA[index] + +def get_test_global_nolock_full(obj, info): + return str(GLOBAL_SERVER_DATA) + +def test_sessions_var(obj, info): + # if 'int_val' in session: + # temp = "session value: " + session["users"]["default"] + # counter = session["int_val"] + # session["int_val"] = counter+1 + # var_value = "def-test-value_"+str(session["int_val"]) + # session["users"]["default"] = var_value + # return temp + # else: + # session['users'] = dict() + # session['int_val'] = 0 + # var_value = "def-test-value_"+str(session["int_val"]) + # session['users']["default"] = var_value + # temp = "session value: " + session["users"]["default"] + # return temp + + global index_add_counter + temp = index_add_counter + index_add_counter = temp+1 + return temp + +#main: def resolve_api_status(obj, info): print("resolve_api_status") return f'API is running' diff --git a/server/app.py b/server/app.py index 29057cc3..a2e96033 100644 --- a/server/app.py +++ b/server/app.py @@ -1,3 +1,13 @@ +# Global server config setup +# init vars: +index_add_counter = 0 +GLOBAL_SERVER_DATA = dict() + +# init data partial + + +# Server Setup +from email.policy import default from http import server from api import app @@ -6,7 +16,8 @@ from ariadne import load_schema_from_path, make_executable_schema, \ graphql_sync, snake_case_fallback_resolvers, ObjectType from ariadne.constants import PLAYGROUND_HTML -from flask import request, jsonify +from flask import request, jsonify, session +from flask import g as flask_globals from api.mutation_main import * from api.queries_main import * @@ -24,6 +35,11 @@ query.set_field("GetServerSettings", resolve_get_server_settings) query.set_field("GetAllTags", resolve_get_all_tags) +query.set_field("TestSession", test_sessions_var) +query.set_field("SetTestGlob", set_test_global_nolock) +query.set_field("GetTestGlob", get_test_global_nolock) +query.set_field("GetTestGlobFull", get_test_global_nolock_full) + mutation = ObjectType("Mutation") mutation.set_field("CreateComment", resolve_create_comment) @@ -65,3 +81,11 @@ def graphql_server(): return jsonify(result), status_code # print_config() + +# print("Flask Session var type: ", session.__class__.__name__) + +# var_value = "def-test-value_"+str(0) + +# session['users'] = dict() +# session['int_val'] = 0 +# session['users']["default"] = var_value \ No newline at end of file diff --git a/server/schema.graphql b/server/schema.graphql index 83b9c4b8..60554f06 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -52,6 +52,7 @@ type MathPastPaper { curriculum: String country: String language: String + downloadlink: String } type MathCalculationData { @@ -118,6 +119,12 @@ type Query { # Basic Data GetMathCalculationsData(apikey: String = "default"): [MathCalculationData] GetMathPastPaperData(apikey: String = "default"): [MathPastPaper] + + # Testing functions + TestSession: String + SetTestGlob(index: String, data: String): String + GetTestGlob(index: String): String + GetTestGlobFull: String } type Mutation { From a96d0bc846c7f273492fe6a9d3a40065cbb98f1c Mon Sep 17 00:00:00 2001 From: DamianJordaan Date: Tue, 27 Sep 2022 23:27:14 +0200 Subject: [PATCH 2/4] =?UTF-8?q?=E2=9C=A8(API)=20updates=20to=20past=20pape?= =?UTF-8?q?rs=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../queries/resolve_math_past_paper_data.py | 501 ++++++++++++++++-- 1 file changed, 444 insertions(+), 57 deletions(-) diff --git a/server/api/queries/resolve_math_past_paper_data.py b/server/api/queries/resolve_math_past_paper_data.py index 35e588f8..b3c9d5fb 100644 --- a/server/api/queries/resolve_math_past_paper_data.py +++ b/server/api/queries/resolve_math_past_paper_data.py @@ -11,7 +11,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2014%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=c2b69394-1320-4f4c-b881-c18df73a5f8c" }, { "id":2, @@ -23,7 +24,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2014%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=e8e34ca4-fad1-46e8-a494-36deaa6779e0" }, { "id":3, @@ -35,7 +37,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2014%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=bcf1ac48-b40e-483e-b6d0-381a20fe2c24" }, { "id":4, @@ -47,7 +50,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2014%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=29c84202-1619-4c1b-8800-0dd8660274ad" }, { "id":5, @@ -59,7 +63,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2014%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=b08e9081-85a4-4760-870d-b3212c6d8107" }, { "id":6, @@ -71,7 +76,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2014%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=524e78ef-5539-4520-9295-1422c0bdfe9e" }, { "id":7, @@ -83,7 +89,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2014%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=b08e9081-85a4-4760-870d-b3212c6d8107" }, { "id":8, @@ -95,7 +102,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2014%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=450305e4-db85-440e-92fa-96647295cb1f" }, { "id":9, @@ -107,7 +115,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"" }, { "id":10, @@ -119,11 +128,12 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2015%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=08d07667-bf66-4734-a99a-0f247b023af0" }, { "id":11, - "name":"Mathematics Paper2 ", + "name":"Paper 2 Question Paper", "subject":"Mathematics", "paper":2, "year":2015, @@ -131,7 +141,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2015%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=48b056d9-a349-4cf3-a107-7244f268e4a4" }, { "id":12, @@ -143,7 +154,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2015%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=7831a28c-b83a-44a8-9593-b53f4847e182" }, { "id":13, @@ -155,7 +167,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2015%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=e159efc6-b45c-4838-992e-82b2b1cf4242" }, { "id":14, @@ -167,7 +180,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2015%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=db0bd967-2db8-40d6-b443-5247d033a23e" }, { "id":15, @@ -179,7 +193,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2015%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=5bd70ff8-980f-42e2-bbec-4e6e1e47aab1" }, { "id":16, @@ -191,7 +206,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2015%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=55ed85cf-2d03-4060-97bd-2f2f8cea552e" }, { "id":17, @@ -203,7 +219,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2016%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=9201d677-d8be-4216-817f-b4ff16cfe38d" }, { "id":18, @@ -215,7 +232,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2016%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=040c9a14-6747-4530-bf17-48ea123d3c27" }, { "id":19, @@ -227,7 +245,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2016%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=aa169982-f685-4aa3-bdd0-12dc97e73393" }, { "id":20, @@ -239,7 +258,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2016%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=2cae4c37-9614-4c0f-b995-4a43440e5940" }, { "id":21, @@ -251,7 +271,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2016%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=10e79ac7-bd2e-4fe2-bc0b-2a33899b183f" }, { "id":22, @@ -263,7 +284,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2016%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=0d6b0f7f-97e8-447f-b433-d781ec153805" }, { "id":23, @@ -275,7 +297,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2016%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=b3ce87b1-3654-40f0-b7f0-700c03325df1" }, { "id":24, @@ -287,7 +310,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2016%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=afbd29bc-6f1b-4f65-a8a0-d45a696c79b4" }, { "id":25, @@ -299,7 +323,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2017%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=8c1e27ae-57af-460c-aba1-a48523f46ba4" }, { "id":26, @@ -311,7 +336,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2017%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=ae716594-5f35-44be-b7a1-21259b23dd87" }, { "id":27, @@ -323,7 +349,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2017%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=64fc4dff-ae87-444a-b8fd-412d3b54df90" }, { "id":28, @@ -335,7 +362,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2017%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=b4748c64-7d74-4921-a73c-c5b7b7e8ea58" }, { "id":29, @@ -347,7 +375,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2017%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=1309cd39-9aa5-4d03-9dce-be24c5846eb4" }, { "id":30, @@ -359,7 +388,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2017%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=cb80ad50-788b-431b-b6c7-92671e29cd70" }, { "id":31, @@ -371,7 +401,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2017%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=de29978b-bf7b-4db3-a23b-b97292d9bf4f" }, { "id":32, @@ -383,7 +414,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2017%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=191bd24d-1924-4692-af68-1d7ffb4eedb6" }, { "id":33, @@ -395,7 +427,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2018%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=1ee2ce22-47fc-4503-b3d1-e4537c05a56e" }, { "id":34, @@ -407,7 +440,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2018%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=d5b5a76f-9cfb-4dbd-bdf1-7d9c5f22af5a" }, { "id":35, @@ -419,7 +453,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2018%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=2124d49f-ca93-420e-922a-f81fc1e3b616" }, { "id":36, @@ -431,7 +466,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2018%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=737ed767-8e38-4b94-aa7c-8bd8a13406ff" }, { "id":37, @@ -443,7 +479,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2018%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=9d569720-58fb-4feb-b233-b625d9871e09" }, { "id":38, @@ -455,7 +492,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2018%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=4a837685-b6cf-468d-8175-9865ff1c9415" }, { "id":39, @@ -467,7 +505,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2018%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=13a574d0-033f-4482-aa78-6fd486355b54" }, { "id":40, @@ -479,7 +518,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2018%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=b8b0717d-c041-4a21-a658-3ec9d1925ff6" }, { "id":41, @@ -491,7 +531,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2019%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=dc69dc29-6b4a-4211-8af4-2aa0c05c551c" }, { "id":42, @@ -503,7 +544,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2019%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=4d611e48-e5b3-4815-b3de-c25fa3f95dd0" }, { "id":43, @@ -515,7 +557,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2019%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=fc08a0f6-0134-4f13-86bf-af662dd13b21" }, { "id":44, @@ -527,7 +570,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2019%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=354a58fd-5bdf-4805-acc1-afc9089d237d" }, { "id":45, @@ -539,7 +583,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2019%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=c41c22e0-4bf9-43fe-9d61-34c1c416cad5" }, { "id":46, @@ -551,7 +596,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2019%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=5cfd7036-68f9-4896-9dc2-ff7ee8215b61" }, { "id":47, @@ -563,7 +609,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2019%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=1b83bc91-d2e6-4d85-a9f1-d4693d0f9a23" }, { "id":48, @@ -575,7 +622,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2019%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=aaa08e52-1ad4-45b4-8719-ba815d2c932f" }, { "id":49, @@ -587,7 +635,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2020%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=cc26be17-ced7-4c08-abb4-c9a507c88258" }, { "id":50, @@ -599,7 +648,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2020%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=92abb50f-f91c-4934-b222-78270846578a" }, { "id":51, @@ -611,7 +661,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2020%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=2f3d0ac2-d1b4-48be-8ef8-1c571641890b" }, { "id":52, @@ -623,7 +674,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"June", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2020%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=c51c3fe3-e062-49c9-b673-d2063c88f4fa" }, { "id":53, @@ -635,7 +687,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2020%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=78c36ff8-8912-4979-bb1c-40c52b6c8af2" }, { "id":54, @@ -647,7 +700,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2020%2FGrade%2012%2FNovember%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=b5051e0a-47b5-4093-967f-3a9187f8b2b2" }, { "id":55, @@ -659,7 +713,8 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2020%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=501f2e34-3546-491f-8bc8-bfdbad585d9b" }, { "id":56, @@ -671,7 +726,339 @@ def resolve_math_past_paper_data(obj, info, apikey): "month":"November", "curriculum":"NSC", "country":"South Africa", - "language":"English" + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2020%2FGrade%2012%2FNovember%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=ffebf38c-bb4a-4f14-a7e6-a4a643ab53e1" + }, + { + "id":57, + "name":"Paper 1 Question Paper", + "subject":"Mathematics", + "paper":1, + "year":2021, + "grade":12, + "month":"June", + "curriculum":"NSC", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2021%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Question%20Paper.pdf?alt=media&token=fb571414-a917-4b92-8cd9-b757108dff07" + }, + { + "id":58, + "name":"Paper 1 Memo", + "subject":"Mathematics", + "paper":1, + "year":2021, + "grade":12, + "month":"June", + "curriculum":"NSC", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2021%2FGrade%2012%2FJune%2FEnglish%2FPaper%201%20Memo.pdf?alt=media&token=fea81645-0239-41ce-99fb-cb19965e60a2" + }, + { + "id":59, + "name":"Paper 2 Question Paper", + "subject":"Mathematics", + "paper":2, + "year":2021, + "grade":12, + "month":"June", + "curriculum":"NSC", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2021%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Question%20Paper.pdf?alt=media&token=1f69084a-bc76-4215-a58e-85fbfd8b197b" + }, + { + "id":60, + "name":"Paper 2 Memo", + "subject":"Mathematics", + "paper":2, + "year":2021, + "grade":12, + "month":"June", + "curriculum":"NSC", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FNSC%2FMathematics%2F2021%2FGrade%2012%2FJune%2FEnglish%2FPaper%202%20Memo.pdf?alt=media&token=09d9ead8-e71e-4cea-afad-275d0264bb57" + }, + { + "id":61, + "name":"Paper 1 Question Paper", + "subject":"Mathematics", + "paper":1, + "year":2017, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2017%2FGrade%2012%2FNovember%2FEnglish%2FMaths%20P1%202017.pdf?alt=media&token=1eecbae7-be1b-4cd4-b3c0-a3a728e2328a" + } + , + + { + "id":62, + "name":"Paper 2 Question Paper", + "subject":"Mathematics", + "paper":2, + "year":2017, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2017%2FGrade%2012%2FNovember%2FEnglish%2FMaths%20P2%202017%20.pdf?alt=media&token=94366040-cbff-4cf6-8013-cb5446f823d3" + } + , + { + "id":63, + "name":"Paper 1 Information Sheet", + "subject":"Mathematics", + "paper":1, + "year":2017, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2017%2FGrade%2012%2FNovember%2FEnglish%2FMaths%20P1%20Information%20Sheet%202017%20.pdf?alt=media&token=bc984091-7b9b-410f-82ef-049c5946570f" + } + , + { + "id":64, + "name":"Paper 2 Information Sheet", + "subject":"Mathematics", + "paper":2, + "year":2017, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2017%2FGrade%2012%2FNovember%2FEnglish%2FMaths%20P2%20Information%20Sheet%202017.pdf?alt=media&token=379cf4fa-73f2-4205-abdb-21c623cfc68f" + } + , + { + "id":65, + "name":"Paper 1 Question Paper", + "subject":"Mathematics", + "paper":1, + "year":2018, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2018%2FGrade%2012%2FEnglish%2FMathematics%20P1%202018.pdf?alt=media&token=c83731d3-03a6-4d87-a671-f54791bf3680" + } + , + { + "id":66, + "name":"Paper 2 Question Paper", + "subject":"Mathematics", + "paper":2, + "year":2018, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2018%2FGrade%2012%2FEnglish%2FMathematics%20P2%202018.pdf?alt=media&token=c71f16b1-37e0-44db-ac84-11aa375a9920" + } + , + { + "id":67, + "name":"Paper 1 Information Sheet", + "subject":"Mathematics", + "paper":1, + "year":2018, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2018%2FGrade%2012%2FEnglish%2FMathematics%20P1%20Information%20Sheet%202018.pdf?alt=media&token=2ad5af22-1e80-4622-a1b5-81ada13ccf43" + } + , + { + "id":68, + "name":"Paper 2 Information Sheet", + "subject":"Mathematics", + "paper":2, + "year":2018, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2018%2FGrade%2012%2FEnglish%2FMathematics%20P2%20Info%20Sheet%202018.pdf?alt=media&token=fd3d1469-fd9e-4d7e-b9e5-625e36e3b00d" + } + , + { + "id":69, + "name":"Paper 1 Question Paper", + "subject":"Mathematics", + "paper":1, + "year":2019, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2019%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P1%202019.pdf?alt=media&token=114d27fe-d5a5-4f1d-bbb2-175b691070c5" + } + , + { + "id":70, + "name":"Paper 2 Question Paper", + "subject":"Mathematics", + "paper":2, + "year":2019, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2019%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P2%202019.pdf?alt=media&token=49cd720f-db9a-4735-8efb-afb7d0ad066a" + } + , + { + "id":71, + "name":"Paper 1 Information Sheet", + "subject":"Mathematics", + "paper":1, + "year":2019, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2019%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P1%20Info%20Sheet%202019.pdf?alt=media&token=cdc08a03-9aa2-427b-bffe-92725084c804" + } + , + { + "id":72, + "name":"Paper 2 Information Sheet", + "subject":"Mathematics", + "paper":2, + "year":2019, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2019%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P2%20Info%20Sheet%202019.pdf?alt=media&token=e900140b-fff2-4fc2-a55a-3845437894bc" + } + , + { + "id":73, + "name":"Paper 1 Question Paper", + "subject":"Mathematics", + "paper":1, + "year":2020, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2020%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P1%202020.pdf?alt=media&token=ae50246b-6818-419f-babc-9dc9b2e29f6c" + } + , + { + "id":74, + "name":"Paper 2 Question Paper", + "subject":"Mathematics", + "paper":2, + "year":2020, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2020%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P2%202020.pdf?alt=media&token=a7277786-e670-42e8-983c-72cc85e530c6" + } + , + { + "id":75, + "name":"Paper 1 Information Sheet", + "subject":"Mathematics", + "paper":1, + "year":2020, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2020%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P1%20Info%20Sheet%202020.pdf?alt=media&token=c3e20019-a113-48ca-a6bb-3d9aff90b9c8" + } + , + { + "id":76, + "name":"Paper 2 Information Sheet", + "subject":"Mathematics", + "paper":2, + "year":2020, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2020%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P2%20Info%20Sheet%202020.pdf?alt=media&token=8989c2d8-8983-4455-9e71-7a2549793e0c" + } , + { + "id":77, + "name":"Paper 1 Question Paper", + "subject":"Mathematics", + "paper":1, + "year":2021, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2021%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P1%202021.pdf?alt=media&token=a0b32448-9fcc-41e8-94f9-b05ae9d65dc2" + } + , + { + "id":78, + "name":"Paper 2 Question Paper", + "subject":"Mathematics", + "paper":2, + "year":2021, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2021%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P2%202021.pdf?alt=media&token=e891ba49-7617-441f-9158-60fb46f85c9c" + } + , + { + "id":79, + "name":"Paper 1 Information Sheet", + "subject":"Mathematics", + "paper":1, + "year":2021, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2021%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P1%20Info%20Sheet%202021.pdf?alt=media&token=9bb0c086-5e44-4936-ae81-e118e3b4e3ee" + } + , + { + "id":80, + "name":"Paper 2 Information Sheet", + "subject":"Mathematics", + "paper":2, + "year":2021, + "grade":12, + "month":"November", + "curriculum":"IEB", + "country":"South Africa", + "language":"English", + "downloadlink":"https://firebasestorage.googleapis.com/v0/b/fluttermathu.appspot.com/o/PastPapers%2FZA%2FIEB%2FMathematics%2F2021%2FGrade%2012%2FNovember%2FEnglish%2FMathematics%20P2%20Info%20Sheet%202021.pdf?alt=media&token=57f4dfd9-d51c-4611-82be-d9f3f4c62a93" } ] return payload \ No newline at end of file From e157ceaddfca54e004db5c17f81d4abccf248097 Mon Sep 17 00:00:00 2001 From: DamianJordaan Date: Tue, 27 Sep 2022 23:29:59 +0200 Subject: [PATCH 3/4] =?UTF-8?q?=E2=9C=A8(API)=20updates=20to=20calculation?= =?UTF-8?q?s=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/api/__init__.py | 50 +++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/server/api/__init__.py b/server/api/__init__.py index fe732806..b00eb058 100644 --- a/server/api/__init__.py +++ b/server/api/__init__.py @@ -104,7 +104,7 @@ def areacircle(): r = int(text_input) Area = math.pi * r * r Answer = str(round(Area, 3)) - Formula = 'π' + str(r) + f'\N{SUPERSCRIPT TWO}' + Formula = 'π × ' + str(r) + f'\N{SUPERSCRIPT TWO}' return Formula+"separator"+Answer except Exception as e: @@ -158,7 +158,7 @@ def arearhombus(): diagonal1 = abc[0] diagonal2 = abc[1] Area = (diagonal1*diagonal2)/2 - Formula + "("+str(diagonal1)+"×"+str(diagonal2)+")/2" + Formula ="("+str(diagonal1)+"×"+str(diagonal2)+")/2" Answer = str(Area) return Formula+"separator"+Answer except Exception as e: @@ -191,9 +191,9 @@ def areatrapezoid(): firstbase = abc[0] secondbase = abc[1] height = abc[2] - Area = 0.5*(firstbase*secondbase) * height + Area = 0.5*(firstbase+secondbase) * height Answer = str(round(Area, 3)) - Formula = "(" + str(firstbase) + "×" + str(secondbase) +")/2 × "+str(height); + Formula = "(" + str(firstbase) + "+" + str(secondbase) +")/2 × "+str(height); return Formula+"separator"+Answer except Exception as e: return "INVALID INPUT" @@ -352,7 +352,7 @@ def simpleintrest(): r = abc[2] si = (p * t * r)/100 - Formula = "(" + str(p) + " × " + str(t) + " × " + str(r) + "/100" + Formula = "(" + str(p) + " × " + str(t) + " × " + str(r) + ")/100" Answer = str(si + abc[0]) return Formula+"separator"+Answer except Exception as e: @@ -390,13 +390,17 @@ def arithmeticsequence(): firstTerm = abc[1] N = abc[2] nthTerm = firstTerm + (N - 1) * commonDifference - arithmetic = [firstTerm + - (NI - 1)*commonDifference for NI in range(1, N + 1)] + # arithmetic = [firstTerm + + # (NI - 1)*commonDifference for NI in range(1, N + 1)] # Answer = "Common Difference in the arithmetic sequence is:" + str(abc[0]) + "\n" + "First term in the arithmetic sequence is:" + str( # abc[1]) + "\n" + "Nth term in the arithmetic sequence is:" + str(nthTerm) + "\n" - Answer = "[" + ", ".join(str(i) for i in arithmetic) + "]" + "\n" - Formula = "" - return Formula+"separator"+Answer + Answer = nthTerm + print(Answer) + Formula = str(abc[1]) + "+(" + str(abc[2]) + "-1)×"+ str(abc[0]) + print(Formula) + + + return Formula+"separator"+str(Answer) except Exception as e: return "INVALID INPUT" @@ -412,12 +416,10 @@ def geometricsequence(): a = abc[0] r = abc[1] length = abc[2] - geometric = [a * r ** (n - 1) for n in range(1, length + 1)] - # Answer = "Common Ratio in the geometric sequence is:" + str(abc[0]) + "\n" + "First term in the geometric sequence is:" + str( - # abc[1]) + "\n" + "Nth term in the arithmetic sequence is:" + str(length) + "\n" - Answer += "[" + ", ".join(str(i) for i in geometric) + "]" - Formula = " _ " - return Formula+"separator"+Answer + geometric = a * r ** (length - 1) + Answer = geometric + Formula = str(a) + "(" + str(r) +")" + "^(" + str(length) + "-1)" + return Formula+"separator"+str(Answer) except Exception as e: return "INVALID INPUT" @@ -454,22 +456,6 @@ def quadraticequation(): except Exception as e: return "INVALID INPUT" -# LINEAR FUNCTION -# @app.route('/api/plotlinearfunction/',methods = ['GET']) -# def plotlinearfunction(): -# x = np.linspace(-5,5,100) -# a = "2*x+1" -# y = 2*x+1 -# plt.plot(x, y, '-r',label=a) -# plt.title('Graph of: '+ a) -# plt.xlabel('x', color='#1C2833') -# plt.ylabel('y', color='#1C2833') -# plt.legend(loc='upper left') -# plt.grid() -# return plt - -#MEAN (STATISTICS) - @app.route('/api/13/', methods=['GET']) def mean(): From a546ee327d6bdcdcb080c82a222133bd6e4ab09a Mon Sep 17 00:00:00 2001 From: DamianJordaan Date: Wed, 28 Sep 2022 17:24:32 +0200 Subject: [PATCH 4/4] =?UTF-8?q?=E2=9C=A8(API)=20Major=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/api/__init__.py | 70 +++++++-------- server/api/mutation_main.py | 35 ++++++-- server/api/queries/resolve_similarity_search | 4 + server/api/queries_main.py | 20 +++-- server/app.py | 19 +++-- .../handlers/__init__.py} | 0 server/db/handlers/comments.py | 8 ++ server/db/handlers/problems.py | 45 ++++++++++ server/db/handlers/problems_shared.py | 66 ++++++++++++++ server/db/handlers/tags.py | 2 + server/db/handlers/users.py | 5 ++ server/db/handlers/users_shared.py | 16 ++++ server/schema.graphql | 85 +++++++++++++------ server/services/authentication.py | 3 + server/services/confidence_calc.py | 18 ++-- server/services/handlers/__init__.py | 0 server/services/handlers/handlers_main.py | 26 ++++++ 17 files changed, 334 insertions(+), 88 deletions(-) create mode 100644 server/api/queries/resolve_similarity_search rename server/{services/authenticate_user.py => db/handlers/__init__.py} (100%) create mode 100644 server/db/handlers/comments.py create mode 100644 server/db/handlers/problems.py create mode 100644 server/db/handlers/problems_shared.py create mode 100644 server/db/handlers/tags.py create mode 100644 server/db/handlers/users.py create mode 100644 server/db/handlers/users_shared.py create mode 100644 server/services/authentication.py create mode 100644 server/services/handlers/__init__.py create mode 100644 server/services/handlers/handlers_main.py diff --git a/server/api/__init__.py b/server/api/__init__.py index b00eb058..8562b9e1 100644 --- a/server/api/__init__.py +++ b/server/api/__init__.py @@ -26,41 +26,41 @@ def hello(): def default_apikey(): return "apikey" -@app.route('/session_counter/') -def test_sessions_var(): - if 'int_val' in session: - temp = "session value: " + session["users"]["default"] - counter = session["int_val"] - session["int_val"] = counter+1 - var_value = "def-test-value_"+str(session["int_val"]) - session["users"]["default"] = var_value - return temp - else: - session['users'] = dict() - session['int_val'] = 0 - var_value = "def-test-value_"+str(session["int_val"]) - session['users']["default"] = var_value - temp = "session value: " + session["users"]["default"] - return temp - -@app.route('/ses2/') -def test_sessions_var2(): - print("test") - return test_sessions_var() - # if 'int_val' in g: - # temp = "session value: " + g["users"]["default"] - # counter = g["int_val"] - # g["int_val"] = counter+1 - # var_value = "def-test-value_"+str(g["int_val"]) - # g["users"]["default"] = var_value - # return temp - # else: - # g['users'] = dict() - # g['int_val'] = 0 - # var_value = "def-test-value_"+str(g["int_val"]) - # g['users']["default"] = var_value - # temp = "session value: " + g["users"]["default"] - # return temp +# @app.route('/session_counter/') +# def test_sessions_var(): +# if 'int_val' in session: +# temp = "session value: " + session["users"]["default"] +# counter = session["int_val"] +# session["int_val"] = counter+1 +# var_value = "def-test-value_"+str(session["int_val"]) +# session["users"]["default"] = var_value +# return temp +# else: +# session['users'] = dict() +# session['int_val'] = 0 +# var_value = "def-test-value_"+str(session["int_val"]) +# session['users']["default"] = var_value +# temp = "session value: " + session["users"]["default"] +# return temp + +# @app.route('/ses2/') +# def test_sessions_var2(): +# print("test") +# return test_sessions_var() +# # if 'int_val' in g: +# # temp = "session value: " + g["users"]["default"] +# # counter = g["int_val"] +# # g["int_val"] = counter+1 +# # var_value = "def-test-value_"+str(g["int_val"]) +# # g["users"]["default"] = var_value +# # return temp +# # else: +# # g['users'] = dict() +# # g['int_val'] = 0 +# # var_value = "def-test-value_"+str(g["int_val"]) +# # g['users']["default"] = var_value +# # temp = "session value: " + g["users"]["default"] +# # return temp import matplotlib.pyplot as plt import numpy as np diff --git a/server/api/mutation_main.py b/server/api/mutation_main.py index 78f28f74..91b6bc68 100644 --- a/server/api/mutation_main.py +++ b/server/api/mutation_main.py @@ -40,14 +40,23 @@ def resolve_create_comment(obj, info, problemid, useremail, apikey, comment): def resolve_add_favorite(obj, info, problemid, useremail, apikey): print("resolve_add_favorite") - print("mutation") - return True + + payload = { + "success": True, + "msg": "" + } + return payload def resolve_add_user_search_click(obj, info, problemid, useremail, apikey): print("resolve_add_user_search_click") - return True -def resolve_user_sign_up(obj, info, useremail, password): + payload = { + "success": True, + "msg": "" + } + return payload + +def resolve_user_sign_up(obj, info, apikey, useremail, password): print("resolve_user_sign_up") # print("signup: ", useremail, password) # valid email @@ -113,12 +122,22 @@ def resolve_add_equation(obj, info, useremail, apikey, equation): } return payload -def resolve_set_auto_caching(obj, info, useremail, apikey, autocaching): - print("resolve_set_auto_caching") - return True +def resolve_set_server_settings(obj, info, useremail, apikey, password, autocaching): + print("resolve_set_server_settings") + + payload = { + "success": True, + "msg": "" + } + return payload def resolve_set_theme(obj, info, useremail, apikey, darktheme): print("resolve_set_theme") - return True + + payload = { + "success": True, + "msg": "" + } + return payload # todo remove favorite, remove equasion \ No newline at end of file diff --git a/server/api/queries/resolve_similarity_search b/server/api/queries/resolve_similarity_search new file mode 100644 index 00000000..6b6ff36a --- /dev/null +++ b/server/api/queries/resolve_similarity_search @@ -0,0 +1,4 @@ +def resolve_similarity_search(obj, info, useremail, apikey, input, tags, musthavememo, allowusersearch): + # auth + # search + pass \ No newline at end of file diff --git a/server/api/queries_main.py b/server/api/queries_main.py index 895ef50d..29e41896 100644 --- a/server/api/queries_main.py +++ b/server/api/queries_main.py @@ -51,7 +51,7 @@ def resolve_api_status(obj, info): print("resolve_api_status") return f'API is running' -def resolve_get_all_equations(obj, info): +def resolve_get_all_equations(obj, info, useremail, apikey): print("resolve_get_all_equations") # get all equations from database sql = "SELECT problem_id, problem FROM mathu_similarity_index_database.problems;" @@ -97,14 +97,14 @@ def resolve_search(obj, info, input, isloggedin, useremail, apikey): # sql = "SELECT problem_id, problem, levenshtein2(problem, '" + input + "') AS distance FROM problems ORDER BY distance ASC;" # sql = "SELECT problem_id, problem, 0 AS distance FROM problems;" - sql = "SELECT problem_id, problem, user_search, has_memo, 0 as sim FROM mathu_similarity_index_database.problems;" + sql = "SELECT problem_id, problem, user_search, has_memo FROM mathu_similarity_index_database.problems;" db = MySQLDatabase() db.set_default() # db.print_config_db() db.connect_to_db() results = db.execute_query(sql) - results = get_all_conf(input, results) + results = get_all_conf(input, results, 1, 4) ids = [] problems = [] @@ -252,7 +252,7 @@ def resolve_get_user_history(obj, info, useremail, apikey): return payload -def resolve_get_all_comments(obj, info): +def resolve_get_all_comments(obj, info, useremail, apikey): print("resolve_get_all_comments") payload = [ { @@ -303,8 +303,9 @@ def resolve_get_all_comments(obj, info): ] return payload -def resolve_get_comments(obj, info, problemid): +def resolve_get_comments(obj, info, useremail, apikey, problemid): print("resolve_get_comments") + # Auth # get comments payload = [] sql_prepared = """SELECT problem_id, date_time, nanosecond, user_email, comment FROM mathu_similarity_index_database.comments where problem_id = %s order by date_time;""" @@ -327,7 +328,7 @@ def resolve_get_comments(obj, info, problemid): return payload -def resolve_get_favorite_problems(obj, info, useremail): +def resolve_get_favorite_problems(obj, info, useremail, apikey): print("resolve_get_favorite_problems") payload = [ { @@ -347,7 +348,7 @@ def resolve_get_favorite_problems(obj, info, useremail): ] return payload -def resolve_authenticate_login(obj, info, useremail, passwordsalt): +def resolve_authenticate_login(obj, info, apikey, useremail, password): print("resolve_authenticate_login") payload = { "success": True, @@ -369,7 +370,7 @@ def resolve_get_server_settings(obj, info, useremail, apikey): } return payload -def resolve_get_all_tags(obj, info, apikey): +def resolve_get_all_tags(obj, info, useremail, apikey): print("resolve_get_all_tags") # print("arr",testarr) # print("api key: ",apikey) @@ -407,3 +408,6 @@ def resolve_get_all_tags(obj, info, apikey): payload.append(tag) return payload + +def get_problem(obj, info, useremail, apikey, problemid): + pass \ No newline at end of file diff --git a/server/app.py b/server/app.py index a2e96033..f8980cc6 100644 --- a/server/app.py +++ b/server/app.py @@ -2,6 +2,7 @@ # init vars: index_add_counter = 0 GLOBAL_SERVER_DATA = dict() +GLOBAL_SERVER_CONFIG = (False, False, False) #Auto Caching, Auto Add Search, Save default History # init data partial @@ -24,7 +25,8 @@ query = ObjectType("Query") -query.set_field("Search", resolve_search) +query.set_field("SimilaritySearch", resolve_search) +# query.set_field("Search", resolve_search) query.set_field("GetAllEquations", resolve_get_all_equations) query.set_field("APIStatus", resolve_api_status) query.set_field("GetUserHistory", resolve_get_user_history) @@ -35,10 +37,10 @@ query.set_field("GetServerSettings", resolve_get_server_settings) query.set_field("GetAllTags", resolve_get_all_tags) -query.set_field("TestSession", test_sessions_var) -query.set_field("SetTestGlob", set_test_global_nolock) -query.set_field("GetTestGlob", get_test_global_nolock) -query.set_field("GetTestGlobFull", get_test_global_nolock_full) +# query.set_field("TestSession", test_sessions_var) +# query.set_field("SetTestGlob", set_test_global_nolock) +# query.set_field("GetTestGlob", get_test_global_nolock) +# query.set_field("GetTestGlobFull", get_test_global_nolock_full) mutation = ObjectType("Mutation") @@ -47,7 +49,7 @@ mutation.set_field("AddUserSearchClick", resolve_add_user_search_click) mutation.set_field("UserSignUp", resolve_user_sign_up) mutation.set_field("AddEquation", resolve_add_equation) -mutation.set_field("SetAutoCaching", resolve_set_auto_caching) +mutation.set_field("SetServerSettings", resolve_set_server_settings) mutation.set_field("SetTheme", resolve_set_theme) # Math API @@ -80,6 +82,11 @@ def graphql_server(): status_code = 200 if success else 400 return jsonify(result), status_code +#Load config: +# + +# ################################################################################## + # print_config() # print("Flask Session var type: ", session.__class__.__name__) diff --git a/server/services/authenticate_user.py b/server/db/handlers/__init__.py similarity index 100% rename from server/services/authenticate_user.py rename to server/db/handlers/__init__.py diff --git a/server/db/handlers/comments.py b/server/db/handlers/comments.py new file mode 100644 index 00000000..5e986673 --- /dev/null +++ b/server/db/handlers/comments.py @@ -0,0 +1,8 @@ +def get_all_comments(): + pass + +def get_problem_comments(): + pass + +def create_problem_comment(): + pass \ No newline at end of file diff --git a/server/db/handlers/problems.py b/server/db/handlers/problems.py new file mode 100644 index 00000000..9efe1945 --- /dev/null +++ b/server/db/handlers/problems.py @@ -0,0 +1,45 @@ +from db.connect_db import sql_query +from db.handlers.problems_shared import add_problem_tags, add_problem_links + +# def get_all_problems(tags=[], has_memo=False, allow_user_search=True): +# pass + +def create_problem(): + pass + +def get_all_problems_favorite(user="default", tags=[], must_have_memo=False, allow_user_search=True): #problem_id, problem, user_search, has_memo, favorite + if len(tags) == 0: + imhm = not must_have_memo + pars = (user, must_have_memo, imhm, allow_user_search, allow_user_search,) + sql_prepared = """select problems.problem_id, problem, user_search, has_memo, exists(select distinct user_email from favorites where user_email like %s and favorites.problem_id = problems.problem_id) as favorite from problems left join favorites on favorites.problem_id = problems.problem_id where (problems.has_memo = %s or %s) and (problems.user_search = %s or %s) group by problems.problem_id order by problems.problem_id;""" + result = sql_query(sql_prepared, pars) + return result + else: + imhm = not must_have_memo + # pars = (user, tags, must_have_memo, imhm, allow_user_search, allow_user_search,) + pars = (user,) + for t in tags: + pars += (t,) + pars += (must_have_memo, imhm, allow_user_search, allow_user_search,) + # print("Params: ",pars) + + sql_prepared = """select problems.problem_id, problem, user_search, has_memo, exists(select distinct user_email from favorites where user_email like %s and favorites.problem_id = problems.problem_id) as favorite from ((problems left join favorites on favorites.problem_id = problems.problem_id) inner join problem_tags on problems.problem_id = problem_tags.problem_id) where problem_tags.tag_id in ({0}) and (problems.has_memo = %s or %s) and (problems.user_search = %s or %s) group by problems.problem_id order by problems.problem_id;""" + sql_prepared = sql_prepared.format(','.join('?' * len(tags))) + # print("sql: ", sql_prepared) + + result = sql_query(sql_prepared, pars) + return result + +def get_all_problem_data(user = "default", tags=[], must_have_memo=False, allow_user_search=True): #problem_id, problem, user_search, has_memo, favorite, [tag_id, tag_name, description], [link] + res = get_all_problems_favorite(user, tags, must_have_memo, allow_user_search) + res_t = add_problem_tags(res, 0) + results = add_problem_links(res_t, 0) + return results + +def get_problem_data(problem_id, user = "default"): #problem_id, problem, user_search, has_memo, favorite, [tag_id, tag_name, description], [link] + pars = (user, problem_id, ) + sql_prepared = """select problems.problem_id, problem, user_search, has_memo, exists(select distinct user_email from favorites where user_email like %s and favorites.problem_id = problems.problem_id) as favorite from problems left join favorites on favorites.problem_id = problems.problem_id where problems.problem_id = %s group by problems.problem_id order by problems.problem_id;""" + res = sql_query(sql_prepared, pars) + res_t = add_problem_tags(res, 0) + results = add_problem_links(res_t, 0) + return results \ No newline at end of file diff --git a/server/db/handlers/problems_shared.py b/server/db/handlers/problems_shared.py new file mode 100644 index 00000000..30a13ff8 --- /dev/null +++ b/server/db/handlers/problems_shared.py @@ -0,0 +1,66 @@ +from re import I +from tempfile import tempdir +from db.connect_db import sql_query + +def get_all_tags(tags = []): #tag_id, tag_name, description + pass + +def add_problem_tags(problems, id_index): #++ tag_id, tag_name, description + if len(problems) > 0: + ids = [item[0] for item in problems] + + sql_prepared = """select problem_tags.problem_id, problem_tags.tag_id, tag_name, description from problem_tags inner join tags on tags.tag_id = problem_tags.tag_id where problem_tags.problem_id in ({0}) or true order by problem_id;""" + sql_prepared = sql_prepared.format(','.join('?' * len(ids))) + + tags = sql_query(sql_prepared, ids) + + results = [] + index_count = 0 + for problem in problems: + temp = [] + + for i in range(index_count, len(tags)): + pid, tid, name, des = tags[i] + if problem[id_index] == pid: + temptup = (tid, name, des) + temp.append(temptup) + elif problem[id_index] < pid: + index_count = i + break + elif problem[id_index] > pid: + pass + + curr = problem + (temp,) + results.append(curr) + + return results + +def add_problem_links(problems, id_index): #++ link + if len(problems) > 0: + ids = [item[0] for item in problems] + + sql_prepared = """select problem_links.problem_id, problem_links.link_id, problem_links.link from problem_links where problem_id in ({0}) order by problem_id;""" + sql_prepared = sql_prepared.format(','.join('?' * len(ids))) + + links = sql_query(sql_prepared, ids) + + results = [] + index_count = 0 + for problem in problems: + temp = [] + + for i in range(index_count, len(links)): + pid, lid, link = links[i] + if problem[id_index] == pid: + temptup = link + temp.append(temptup) + elif problem[id_index] < pid: + index_count = i + break + elif problem[id_index] > pid: + pass + + curr = problem + (temp,) + results.append(curr) + + return results \ No newline at end of file diff --git a/server/db/handlers/tags.py b/server/db/handlers/tags.py new file mode 100644 index 00000000..824ebdb7 --- /dev/null +++ b/server/db/handlers/tags.py @@ -0,0 +1,2 @@ +def get_all_tags(): + pass \ No newline at end of file diff --git a/server/db/handlers/users.py b/server/db/handlers/users.py new file mode 100644 index 00000000..ea6391ba --- /dev/null +++ b/server/db/handlers/users.py @@ -0,0 +1,5 @@ +def get_user_data(): + pass + +def create_user(): + pass \ No newline at end of file diff --git a/server/db/handlers/users_shared.py b/server/db/handlers/users_shared.py new file mode 100644 index 00000000..528c5aaa --- /dev/null +++ b/server/db/handlers/users_shared.py @@ -0,0 +1,16 @@ +from db.handlers.users import * + +def get_user_favorite_problems(): + pass + +def add_user_favorite_problem(): + pass + +def remove_user_favorite_problem(): + pass + +def get_user_history(): + pass + +def add_user_history(): + pass \ No newline at end of file diff --git a/server/schema.graphql b/server/schema.graphql index 60554f06..3923654b 100644 --- a/server/schema.graphql +++ b/server/schema.graphql @@ -27,18 +27,24 @@ type Equation { tags: [Tag] mathml: String - type: String - category: String + + memolinks: [String] + + favorite: Boolean + issearch: Boolean } -type EquationResult { +type EquationSimilarity { equation: Equation similarity: Float + distance: Float } type SearchResult { + success: Boolean + msg: String numberofresults: Int - equations: [EquationResult] + equations: [EquationSimilarity] } type MathPastPaper { @@ -94,49 +100,76 @@ type EquationSuccess { equation: Equation } +type EquationResult { + success: Boolean + msg: String + equation: [Equation] +} + +type CommentResult { + success: Boolean + msg: String + comment: Comment +} + +type Success { + success: Boolean + msg: String +} + type ServerSettings{ autocaching: Boolean } type Query { - Search(input: String, isloggedin: Boolean, useremail: String, apikey: String): SearchResult - GetAllEquations: [Equation] + SimilaritySearch(useremail: String = "default", apikey: String, input: String, tags: [Int] = [], musthavememo: Boolean = False, allowusersearch: Boolean = True): SearchResult + + # Search(input: String, isloggedin: Boolean, useremail: String = "default", apikey: String): SearchResult + + GetAllEquations(useremail: String = "default", apikey: String): [Equation] #done - no auth + APIStatus: String - GetUserHistory(useremail: String, apikey: String): [Equation] + GetUserHistory(useremail: String = "default", apikey: String): [Equation] #done - no auth - GetAllComments: [Comment] - GetComments(problemid: ID): [Comment] - GetFavoriteProblems(useremail: String): [Equation] + GetAllComments(useremail: String = "default", apikey: String): [Comment] #todo - mock + GetComments(useremail: String = "default", apikey: String, problemid: ID): [Comment] #done - no auth + GetFavoriteProblems(useremail: String, apikey: String): [Equation] #todo - mock - AuthenticateLogin(useremail: String, passwordsalt: String): AuthenticateUser + AuthenticateLogin(apikey: String, useremail: String, password: String): AuthenticateUser #todo - mock - GetServerSettings(useremail: String, apikey: String): ServerSettings + GetServerSettings(useremail: String = "default", apikey: String): ServerSettings #todo - mock - GetAllTags(apikey: String = "default"): [Tag] + GetAllTags(useremail: String = "default", apikey: String): [Tag] #done - no auth # Math Calculations API # Basic Data - GetMathCalculationsData(apikey: String = "default"): [MathCalculationData] - GetMathPastPaperData(apikey: String = "default"): [MathPastPaper] + GetMathCalculationsData(useremail: String = "default", apikey: String): [MathCalculationData] #done - no auth + GetMathPastPaperData(useremail: String = "default", apikey: String): [MathPastPaper] #done - no auth # Testing functions - TestSession: String - SetTestGlob(index: String, data: String): String - GetTestGlob(index: String): String - GetTestGlobFull: String + # TestSession: String + # SetTestGlob(index: String, data: String): String + # GetTestGlob(index: String): String + # GetTestGlobFull: String + # FilterTest(tags: [Int], useremail: String = "default", hasmemoonly: Boolean = false, nousersearches: Boolean = false): EquationResult + + #new + GetProblem(useremail: String = "default", apikey: String, problemid: ID): EquationSuccess #todo - none } type Mutation { - CreateComment(problemid: Int, useremail: String, apikey: String, comment: String): CommentSuccess - AddFavorite(problemid: Int, useremail: String, apikey: String): Boolean + CreateComment(problemid: Int, useremail: String, apikey: String, comment: String): CommentSuccess #done - no auth + + AddFavorite(problemid: Int, useremail: String, apikey: String): Success #todo - mock + RemoveFavorite(problemid: Int, useremail: String, apikey: String): Success #todo - mock - AddUserSearchClick(problemid: Int, useremail: String, apikey: String): Boolean + AddUserSearchClick(problemid: Int, useremail: String, apikey: String): Success #todo - mock - UserSignUp(useremail: String, password: String): AuthenticateUser + UserSignUp(apikey: String, useremail: String, password: String): AuthenticateUser #done - no auth - AddEquation(useremail: String, apikey: String, equation: String): EquationSuccess + AddEquation(useremail: String, apikey: String, equation: String): EquationSuccess #todo - mock - SetAutoCaching(useremail: String, apikey: String, autocaching: Boolean): Boolean - SetTheme(useremail: String, apikey: String, darktheme: Boolean): Boolean + SetServerSettings(useremail: String, apikey: String, password: String, autocaching: Boolean): Success #todo - mock + SetTheme(useremail: String, apikey: String, darktheme: Boolean): Success #todo - mock } \ No newline at end of file diff --git a/server/services/authentication.py b/server/services/authentication.py new file mode 100644 index 00000000..d5ef41ce --- /dev/null +++ b/server/services/authentication.py @@ -0,0 +1,3 @@ +# Access Levels: +# 0: Public Functions, 1: Website Default, 2: Website logedin, 3: Admin +# 0: Permanent Key, 1: default Key, 2: Logedin Key, 3: Admin Key \ No newline at end of file diff --git a/server/services/confidence_calc.py b/server/services/confidence_calc.py index 788da368..8d527178 100644 --- a/server/services/confidence_calc.py +++ b/server/services/confidence_calc.py @@ -1,15 +1,23 @@ +from turtle import distance from unittest import result from services.tagging import * import latex2mathml.converter from rapidfuzz.distance import Levenshtein -def get_all(search_query, input): +def get_all(search_query, dataset, problem_index, cols): #++ sim_distance results = [] - for id, problem, user_search, has_memo, similarity in input: - similarity = get_conf(search_query, problem) - results.append((id, problem, user_search, has_memo, similarity,)) + # for id, problem, user_search, has_memo, similarity in dataset: + # similarity = get_conf(search_query, problem) + # results.append((id, problem, user_search, has_memo, similarity,)) + + for row in dataset: + current_problem = row[problem_index] + sim_distance = get_conf(search_query, current_problem) + new_row = row + (sim_distance,) + results.append(new_row) + + output = sorted(results, key=lambda data: data[cols]) - output = sorted(results, key=lambda data: data[4]) return output def close_finder(input): diff --git a/server/services/handlers/__init__.py b/server/services/handlers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/server/services/handlers/handlers_main.py b/server/services/handlers/handlers_main.py new file mode 100644 index 00000000..e247ba1c --- /dev/null +++ b/server/services/handlers/handlers_main.py @@ -0,0 +1,26 @@ +from db.handlers.problems import get_all_problem_data +from services.confidence_calc import get_all as get_all_conf + +def handle_search(user_email, input, tags, must_have_memo, allow_user_search):#problem_id, problem, user_search, has_memo, favorite, [tag_id, tag_name, description], [link], distance, sim + results_no_sim = get_all_problem_data(user_email, tags, must_have_memo, allow_user_search) #problem_id, problem, user_search, has_memo, favorite, [tag_id, tag_name, description], [link] + + # get confidence + results_conf = get_all_conf(input, results_no_sim, 1, 7) #problem_id, problem, user_search, has_memo, favorite, [tag_id, tag_name, description], [link], distance + + #normalize sim + res_size = len(results_conf) + max_sim = results_conf[res_size-1] + min_size = 0 + + results = [] + for row in results_conf: + sim_distance = row[7] + inverse_sim = max_sim - sim_distance + normalized_sim = inverse_sim / (max_sim) * 100 + new_row = row + (normalized_sim,) + results.append(new_row) + + # auto caching + # insert search as problem + + return results \ No newline at end of file