fix: Show ETA

This commit is contained in:
Faris Ansari 2019-09-06 03:30:24 +05:30
parent 87e525d40c
commit fc28a7eb72
2 changed files with 19 additions and 0 deletions

View file

@ -5,6 +5,7 @@
import io
import csv
import json
import timeit
import frappe
from datetime import datetime
from frappe import _
@ -42,6 +43,7 @@ class Importer:
self.data = None
# used to store date formats guessed from data rows per column
self._guessed_date_formats = {}
self.last_eta = 0
self.meta = frappe.get_meta(doctype)
self.prepare_content(file_path, content)
@ -359,7 +361,10 @@ class Importer:
try:
print("Importing", doc)
start = timeit.default_timer()
doc = self.process_doc(doc)
processing_time = timeit.default_timer() - start
eta = self.get_eta(current_index, total_payload_count, processing_time)
frappe.publish_realtime(
"data_import_progress",
{
@ -368,6 +373,7 @@ class Importer:
"docname": doc.name,
"success": True,
"row_indexes": row_indexes,
"eta": eta
},
)
import_log.append(
@ -570,6 +576,13 @@ class Importer:
return autoname_field.fieldname
return 'name'
def get_eta(self, current, total, processing_time):
remaining = total - current
eta = processing_time * remaining
if not self.last_eta or eta < self.last_eta:
self.last_eta = eta
return self.last_eta
DATE_FORMATS = [
r"%d-%m-%Y",

View file

@ -11,6 +11,10 @@ frappe.ui.form.on('Data Import Beta', {
});
frappe.realtime.on('data_import_progress', data => {
let percent = Math.floor((data.current * 100) / data.total);
let eta_message =
data.eta < 60
? __('ETA {0} seconds', [Math.floor(data.eta)])
: __('ETA {0} minutes', [Math.floor(data.eta / 60)]);
let message;
if (data.success) {
let message_args = [data.docname, data.current, data.total];
@ -23,6 +27,7 @@ frappe.ui.form.on('Data Import Beta', {
message = __('Skipping ({1} of {2})', [data.current, data.total]);
}
frm.dashboard.show_progress(__('Import Progress'), percent, message);
frm.page.set_indicator(eta_message, 'orange');
// hide progress when complete
if (data.current === data.total) {
@ -68,6 +73,7 @@ frappe.ui.form.on('Data Import Beta', {
frm.page.set_primary_action(__('Save'), () => frm.save());
}
}
frm.page.set_indicator(__(frm.doc.status), frm.doc.status === 'Success' ? 'green' : 'grey');
},
show_success_message(frm) {