From 8d941f70907d0e370bfa2fda131a65a63d8af436 Mon Sep 17 00:00:00 2001 From: = Date: Sat, 4 Apr 2026 20:56:37 +0530 Subject: [PATCH 1/6] fix: gracefully handle missing active session on download routes (fixes #415) --- API/Routes/Case/CaseRoute.py | 2 ++ API/Routes/DataFile/DataFileRoute.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/API/Routes/Case/CaseRoute.py b/API/Routes/Case/CaseRoute.py index d95482f41..6a286a600 100644 --- a/API/Routes/Case/CaseRoute.py +++ b/API/Routes/Case/CaseRoute.py @@ -433,6 +433,8 @@ def prepareCSV(): def downloadCSV(): try: casename = session.get('osycase', None) + if casename is None: + return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 dataFile = Path(Config.DATA_STORAGE,casename,'export.csv') dir = Path(Config.DATA_STORAGE,casename) diff --git a/API/Routes/DataFile/DataFileRoute.py b/API/Routes/DataFile/DataFileRoute.py index 2b7e98eff..a337d256b 100644 --- a/API/Routes/DataFile/DataFileRoute.py +++ b/API/Routes/DataFile/DataFileRoute.py @@ -171,6 +171,8 @@ def downloadDataFile(): # return jsonify(response), 200 #path = "/Examples.pdf" case = session.get('osycase', None) + if case is None: + return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 caserunname = request.args.get('caserunname') dataFile = Path(Config.DATA_STORAGE,case, 'res',caserunname, 'data.txt') return send_file(dataFile.resolve(), as_attachment=True, max_age=0) @@ -182,6 +184,8 @@ def downloadDataFile(): def downloadFile(): try: case = session.get('osycase', None) + if case is None: + return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 file = request.args.get('file') dataFile = Path(Config.DATA_STORAGE,case,'res','csv',file) return send_file(dataFile.resolve(), as_attachment=True, max_age=0) @@ -193,6 +197,8 @@ def downloadFile(): def downloadCSVFile(): try: case = session.get('osycase', None) + if case is None: + return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 file = request.args.get('file') caserunname = request.args.get('caserunname') dataFile = Path(Config.DATA_STORAGE,case,'res',caserunname,'csv',file) @@ -205,6 +211,8 @@ def downloadCSVFile(): def downloadResultsFile(): try: case = session.get('osycase', None) + if case is None: + return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 caserunname = request.args.get('caserunname') dataFile = Path(Config.DATA_STORAGE,case, 'res', caserunname,'results.txt') return send_file(dataFile.resolve(), as_attachment=True, max_age=0) From 70897af450f8cd7a59932cb002d02b009460acd4 Mon Sep 17 00:00:00 2001 From: = Date: Thu, 9 Apr 2026 01:08:17 +0530 Subject: [PATCH 2/6] fix: correct guard order in OsemosysClass.RYE() to prevent phantom EmisId key (#423) --- API/Classes/Case/OsemosysClass.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/API/Classes/Case/OsemosysClass.py b/API/Classes/Case/OsemosysClass.py index 5ef3a5e53..08de84b52 100644 --- a/API/Classes/Case/OsemosysClass.py +++ b/API/Classes/Case/OsemosysClass.py @@ -612,9 +612,9 @@ def RYE(self, RYEdata): RYE[param][sc] = {} for o in array: for year, val in o.items(): - if year not in RYE[param][sc]: - RYE[param][sc][year] = {} if (year != 'EmisId'): + if year not in RYE[param][sc]: + RYE[param][sc][year] = {} RYE[param][sc][year][o['EmisId']] = val return RYE From 73b9f26118f7db437eeebd7cd74f9bb98c3be165 Mon Sep 17 00:00:00 2001 From: Tejas Singh Bhati Date: Thu, 9 Apr 2026 01:15:01 +0530 Subject: [PATCH 3/6] Remove session check in downloadCSV route Removed the check for an active session before downloading the CSV. --- API/Routes/Case/CaseRoute.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/API/Routes/Case/CaseRoute.py b/API/Routes/Case/CaseRoute.py index 6a286a600..d95482f41 100644 --- a/API/Routes/Case/CaseRoute.py +++ b/API/Routes/Case/CaseRoute.py @@ -433,8 +433,6 @@ def prepareCSV(): def downloadCSV(): try: casename = session.get('osycase', None) - if casename is None: - return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 dataFile = Path(Config.DATA_STORAGE,casename,'export.csv') dir = Path(Config.DATA_STORAGE,casename) From 90eb0a0219bb6856c70203b70e933b400ffd560b Mon Sep 17 00:00:00 2001 From: Tejas Singh Bhati Date: Thu, 9 Apr 2026 01:15:55 +0530 Subject: [PATCH 4/6] Remove check for active session in DataFileRoute Removed error handling for inactive session. --- API/Routes/DataFile/DataFileRoute.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/API/Routes/DataFile/DataFileRoute.py b/API/Routes/DataFile/DataFileRoute.py index a337d256b..75350022e 100644 --- a/API/Routes/DataFile/DataFileRoute.py +++ b/API/Routes/DataFile/DataFileRoute.py @@ -171,8 +171,6 @@ def downloadDataFile(): # return jsonify(response), 200 #path = "/Examples.pdf" case = session.get('osycase', None) - if case is None: - return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 caserunname = request.args.get('caserunname') dataFile = Path(Config.DATA_STORAGE,case, 'res',caserunname, 'data.txt') return send_file(dataFile.resolve(), as_attachment=True, max_age=0) @@ -266,4 +264,4 @@ def cleanUp(): return jsonify(response), 200 except(IOError): - return jsonify('Error!'), 404 \ No newline at end of file + return jsonify('Error!'), 404 From e33430501876353dc96118cc8a16e9252bf2a3f2 Mon Sep 17 00:00:00 2001 From: Tejas Singh Bhati Date: Thu, 9 Apr 2026 01:16:48 +0530 Subject: [PATCH 5/6] Remove session validation in download file routes Removed session check for active case in download routes. --- API/Routes/DataFile/DataFileRoute.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/API/Routes/DataFile/DataFileRoute.py b/API/Routes/DataFile/DataFileRoute.py index 75350022e..b9b40a248 100644 --- a/API/Routes/DataFile/DataFileRoute.py +++ b/API/Routes/DataFile/DataFileRoute.py @@ -182,8 +182,6 @@ def downloadDataFile(): def downloadFile(): try: case = session.get('osycase', None) - if case is None: - return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 file = request.args.get('file') dataFile = Path(Config.DATA_STORAGE,case,'res','csv',file) return send_file(dataFile.resolve(), as_attachment=True, max_age=0) @@ -195,8 +193,6 @@ def downloadFile(): def downloadCSVFile(): try: case = session.get('osycase', None) - if case is None: - return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 file = request.args.get('file') caserunname = request.args.get('caserunname') dataFile = Path(Config.DATA_STORAGE,case,'res',caserunname,'csv',file) From b2cec7b6242468d6e1b22f2fc0349bcc43375588 Mon Sep 17 00:00:00 2001 From: Tejas Singh Bhati Date: Thu, 9 Apr 2026 01:17:41 +0530 Subject: [PATCH 6/6] Remove session check in downloadResultsFile route --- API/Routes/DataFile/DataFileRoute.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/API/Routes/DataFile/DataFileRoute.py b/API/Routes/DataFile/DataFileRoute.py index b9b40a248..5d6efac21 100644 --- a/API/Routes/DataFile/DataFileRoute.py +++ b/API/Routes/DataFile/DataFileRoute.py @@ -205,8 +205,6 @@ def downloadCSVFile(): def downloadResultsFile(): try: case = session.get('osycase', None) - if case is None: - return jsonify({'message': 'No active session. Please select a model first.', 'status_code': 'error'}), 400 caserunname = request.args.get('caserunname') dataFile = Path(Config.DATA_STORAGE,case, 'res', caserunname,'results.txt') return send_file(dataFile.resolve(), as_attachment=True, max_age=0)