Skip to content

Commit 75b7066

Browse files
committed
Modify html to poll the result every 2 seconds.
1 parent dcc4ceb commit 75b7066

3 files changed

Lines changed: 52 additions & 7 deletions

File tree

Dockerfile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,9 @@ COPY requirements.txt /app
1515

1616
RUN pip install -r requirements.txt
1717

18-
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
18+
COPY start.sh /app/start.sh
19+
RUN chmod +x /app/start.sh
20+
21+
#CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
22+
#CMD ["fastapi", "dev", "main.py", "--host", "0.0.0.0", "--port", "8000"]
23+
CMD ["/app/start.sh"]

html/index.html

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ <h1 class="text-center mb-4">Extract text from documents</h1>
3131
</form>
3232
</div>
3333
</div>
34+
<div id="errorAlert" class="alert alert-danger d-none" role="alert">This is an error</div>
3435

3536
<div class="mt-4">
3637
<h4>Detected Text:</h4>
@@ -47,6 +48,7 @@ <h4>Detected Text:</h4>
4748
const form = document.getElementById('ocrForm');
4849
const fileInput = document.getElementById('fileInput');
4950
const resultText = document.getElementById('resultText');
51+
const errorAlert = document.getElementById('errorAlert');
5052

5153
let ocrMode = 'basic'; // default
5254

@@ -60,6 +62,10 @@ <h4>Detected Text:</h4>
6062

6163
form.addEventListener('submit', async (event) => {
6264
event.preventDefault();
65+
// Reset, hide previous alert
66+
errorAlert.classList.add('d-none');
67+
errorAlert.textContent = '';
68+
resultText.textContent = 'Processing.....';
6369

6470
const file = fileInput.files[0];
6571
if (!file) {
@@ -69,10 +75,12 @@ <h4>Detected Text:</h4>
6975

7076
const formData = new FormData();
7177
formData.append('attachment', file);
72-
formData.append('mode', ocrMode);
78+
formData.append('synchronous', false);
7379

7480
resultText.textContent = 'Processing...';
7581
const BASE_URL = 'http://localhost:8000';
82+
let pollUrl;
83+
let response;
7684

7785
try {
7886
let url = "";
@@ -82,19 +90,44 @@ <h4>Detected Text:</h4>
8290
else {
8391
url = BASE_URL + "/textract-ocr"
8492
}
85-
const response = await fetch(url, {
93+
response = await fetch(url, {
8694
method: 'POST',
8795
body: formData,
8896
});
97+
const data = await response.json();
8998

9099
if (!response.ok) {
91-
throw new Error('Server error during OCR.');
100+
throw new Error(data.detail);
92101
}
93102

94-
const data = await response.json();
95-
resultText.textContent = data.content || 'No text detected.';
103+
pollUrl = data.link;
96104
} catch (error) {
97-
resultText.textContent = 'Error: ' + error.message;
105+
errorAlert.textContent = error.message;
106+
errorAlert.classList.remove('d-none')
107+
resultText.textContent = '';
108+
}
109+
if (response.ok) {
110+
// Polling every 2 seconds
111+
const pollInterval = 2000;
112+
113+
const poll = setInterval(async () => {
114+
try {
115+
const pollResponse = await fetch(pollUrl);
116+
if (!pollResponse.ok) throw new Error('Polling error.');
117+
118+
const result = await pollResponse.json();
119+
120+
if (result.content !== null) {
121+
clearInterval(poll);
122+
resultText.textContent = result.content;
123+
}
124+
// If status is "pending", keep polling
125+
126+
} catch (pollError) {
127+
clearInterval(poll);
128+
resultText.textContent = 'Polling error: ' + pollError.message;
129+
}
130+
}, pollInterval);
98131
}
99132
});
100133
</script>

start.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/bash
2+
3+
# Start the RQ worker in the background
4+
rq worker --url redis://host.docker.internal &
5+
6+
# Start FastAPI (uvicorn)
7+
exec uvicorn main:app --host 0.0.0.0 --port 8000

0 commit comments

Comments
 (0)