Harshit Ghosh commited on
Commit
31bb73c
·
1 Parent(s): 46811bc

some optimization

Browse files
Files changed (3) hide show
  1. auth_utils.py +1 -2
  2. docs/_config.yml +15 -0
  3. static/js/batch.js +22 -5
auth_utils.py CHANGED
@@ -1,10 +1,9 @@
1
  """
2
  Authentication utilities and decorators for user management and security
3
  """
4
- import os
5
  import logging
6
  from functools import wraps
7
- from flask import session, redirect, url_for, request, g, abort, has_request_context
8
  from flask_login import LoginManager, current_user
9
  from models import db, User, AuditLog, now_ist
10
  from sqlalchemy.exc import SQLAlchemyError
 
1
  """
2
  Authentication utilities and decorators for user management and security
3
  """
 
4
  import logging
5
  from functools import wraps
6
+ from flask import session, redirect, url_for, request, has_request_context
7
  from flask_login import LoginManager, current_user
8
  from models import db, User, AuditLog, now_ist
9
  from sqlalchemy.exc import SQLAlchemyError
docs/_config.yml CHANGED
@@ -1,3 +1,18 @@
1
  theme: jekyll-theme-minimal
2
  title: Intracranial Hemorrhage Detection
3
  description: AI-assisted CT-based ICH screening with explainability and reporting.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  theme: jekyll-theme-minimal
2
  title: Intracranial Hemorrhage Detection
3
  description: AI-assisted CT-based ICH screening with explainability and reporting.
4
+ markdown: kramdown
5
+ plugins:
6
+ - jekyll-remote-theme
7
+ remote_theme: pages-themes/slate@v0.2.0
8
+
9
+ # Custom CSS for theme improvements
10
+ # Uses theSlate theme's color palette (dark gray background, light text)
11
+
12
+ # Exclude files that shouldn't be in the final site
13
+ exclude:
14
+ - Gemfile
15
+ - Gemfile.lock
16
+ - README.md
17
+ - _venv
18
+
static/js/batch.js CHANGED
@@ -27,7 +27,7 @@
27
  var failPanel = document.getElementById('failPanel');
28
  var failList = document.getElementById('failList');
29
  var cancelBtn = document.getElementById('cancelBatch');
30
- var prevIds = [];
31
  var canceled = false;
32
 
33
  if (!statusUrl || !title || !subtitle || !fill || !pctLabel || !currentFile || !statTotal || !statProc || !statOK || !statFail || !feedPanel || !feedList || !donePanel || !doneSummary || !failPanel || !failList) {
@@ -42,7 +42,7 @@
42
  cancelBtn.disabled = true;
43
  fetch(cancelUrl, { method: 'POST' })
44
  .then(function (response) { return response.json(); })
45
- .then(function (data) {
46
  canceled = true;
47
  title.textContent = 'Batch Canceled';
48
  subtitle.textContent = 'The batch was canceled. You can start a new upload anytime.';
@@ -67,6 +67,9 @@
67
  return;
68
  }
69
 
 
 
 
70
  var total = data.total > 0 ? data.total : expectedTotal;
71
  var pct = total > 0 ? Math.round(data.processed / total * 100) : 0;
72
 
@@ -96,8 +99,8 @@
96
  if (data.image_ids && data.image_ids.length) {
97
  feedPanel.style.display = 'block';
98
  data.image_ids.forEach(function (imageId) {
99
- if (prevIds.indexOf(imageId) === -1) {
100
- prevIds.push(imageId);
101
  var li = document.createElement('li');
102
  var link = document.createElement('a');
103
  link.href = '/case/' + imageId;
@@ -105,7 +108,15 @@
105
  li.appendChild(link);
106
  feedList.insertBefore(li, feedList.firstChild);
107
  while (feedList.children.length > 20) {
108
- feedList.removeChild(feedList.lastChild);
 
 
 
 
 
 
 
 
109
  }
110
  }
111
  });
@@ -114,12 +125,18 @@
114
  if (data.status === 'canceled') {
115
  title.textContent = 'Batch Canceled';
116
  subtitle.textContent = 'The batch was canceled.';
 
 
 
117
  return;
118
  }
119
 
120
  if (data.status === 'completed' || data.status === 'failed') {
121
  title.textContent = 'Batch Complete';
122
  subtitle.textContent = '';
 
 
 
123
  donePanel.style.display = 'block';
124
  var failCount = data.failed_ids ? data.failed_ids.length : 0;
125
  doneSummary.textContent = data.succeeded + ' of ' + total + ' files processed successfully' + (failCount > 0 ? ', ' + failCount + ' failed' : '') + '.';
 
27
  var failPanel = document.getElementById('failPanel');
28
  var failList = document.getElementById('failList');
29
  var cancelBtn = document.getElementById('cancelBatch');
30
+ var seenIds = new Set();
31
  var canceled = false;
32
 
33
  if (!statusUrl || !title || !subtitle || !fill || !pctLabel || !currentFile || !statTotal || !statProc || !statOK || !statFail || !feedPanel || !feedList || !donePanel || !doneSummary || !failPanel || !failList) {
 
42
  cancelBtn.disabled = true;
43
  fetch(cancelUrl, { method: 'POST' })
44
  .then(function (response) { return response.json(); })
45
+ .then(function () {
46
  canceled = true;
47
  title.textContent = 'Batch Canceled';
48
  subtitle.textContent = 'The batch was canceled. You can start a new upload anytime.';
 
67
  return;
68
  }
69
 
70
+ if (data.total > 0 && expectedTotal === 0) {
71
+ expectedTotal = data.total;
72
+ }
73
  var total = data.total > 0 ? data.total : expectedTotal;
74
  var pct = total > 0 ? Math.round(data.processed / total * 100) : 0;
75
 
 
99
  if (data.image_ids && data.image_ids.length) {
100
  feedPanel.style.display = 'block';
101
  data.image_ids.forEach(function (imageId) {
102
+ if (!seenIds.has(imageId)) {
103
+ seenIds.add(imageId);
104
  var li = document.createElement('li');
105
  var link = document.createElement('a');
106
  link.href = '/case/' + imageId;
 
108
  li.appendChild(link);
109
  feedList.insertBefore(li, feedList.firstChild);
110
  while (feedList.children.length > 20) {
111
+ var last = feedList.lastChild;
112
+ if (!last) {
113
+ break;
114
+ }
115
+ var lastLink = last.querySelector('a');
116
+ if (lastLink && lastLink.textContent) {
117
+ seenIds.delete(lastLink.textContent);
118
+ }
119
+ feedList.removeChild(last);
120
  }
121
  }
122
  });
 
125
  if (data.status === 'canceled') {
126
  title.textContent = 'Batch Canceled';
127
  subtitle.textContent = 'The batch was canceled.';
128
+ if (cancelBtn) {
129
+ cancelBtn.disabled = true;
130
+ }
131
  return;
132
  }
133
 
134
  if (data.status === 'completed' || data.status === 'failed') {
135
  title.textContent = 'Batch Complete';
136
  subtitle.textContent = '';
137
+ if (cancelBtn) {
138
+ cancelBtn.disabled = true;
139
+ }
140
  donePanel.style.display = 'block';
141
  var failCount = data.failed_ids ? data.failed_ids.length : 0;
142
  doneSummary.textContent = data.succeeded + ' of ' + total + ' files processed successfully' + (failCount > 0 ? ', ' + failCount + ' failed' : '') + '.';