Move deferred insert code to separate file
This commit is contained in:
parent
3c28adb15c
commit
011b4c8355
4 changed files with 70 additions and 29 deletions
64
frappe/deferred_insert.py
Normal file
64
frappe/deferred_insert.py
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
import frappe
|
||||
import json
|
||||
|
||||
queue_prefix = 'insert_queue_for_'
|
||||
|
||||
@frappe.whitelist()
|
||||
def deferred_insert(doctype, records):
|
||||
frappe.cache().rpush(queue_prefix + doctype, records)
|
||||
|
||||
def save_to_db():
|
||||
queue_keys = frappe.cache().get_keys(queue_prefix)
|
||||
for key in queue_keys:
|
||||
record_count = 0
|
||||
queue_key = get_key_name(key)
|
||||
doctype = get_doctype_name(key)
|
||||
while frappe.cache().llen(queue_key) > 0 and record_count <= 500:
|
||||
records = frappe.cache().lpop(queue_key)
|
||||
records = json.loads(records)
|
||||
if isinstance(records, dict):
|
||||
insert_record(records, doctype)
|
||||
continue
|
||||
for record in records:
|
||||
record_count += 1
|
||||
insert_record(record, doctype)
|
||||
|
||||
def insert_record(record, doctype):
|
||||
if not record['doctype']:
|
||||
record['doctype'] = doctype
|
||||
try:
|
||||
doc = frappe.get_doc(record)
|
||||
doc.insert()
|
||||
except Exception as e:
|
||||
print(e, doctype)
|
||||
|
||||
def get_key_name(key):
|
||||
return key.split('|')[1]
|
||||
|
||||
def get_doctype_name(key):
|
||||
return key.split(queue_prefix)[1]
|
||||
|
||||
|
||||
# def save_to_db(doctype):
|
||||
# values=[]
|
||||
# queue_key = 'deferred_insert_queue_for' + doctype
|
||||
# value_key = ''
|
||||
# while frappe.cache().llen(queue_key) > 0:
|
||||
# records = frappe.cache().lpop(queue_key)
|
||||
# records = json.loads(records)
|
||||
# if not value_key: value_key = list(records[0].keys())
|
||||
# value_template = "('{" + "}', '{".join(value_key) + "}')"
|
||||
# for record in records:
|
||||
# if value_key != list(record.keys()):
|
||||
# print('Keys should match for all records', value_key, list(record.keys()))
|
||||
# continue
|
||||
# values.append(value_template.format(**record))
|
||||
|
||||
# if not values: return
|
||||
|
||||
# frappe.db.sql('''
|
||||
# INSERT INTO `tab{doctype}` (`{keys}`)
|
||||
# VALUES {values}
|
||||
# '''.format(doctype=doctype, keys="`, `".join(value_key), values=", ".join(values)), debug=1)
|
||||
|
||||
# frappe.db.commit()
|
||||
|
|
@ -10,30 +10,6 @@ import json
|
|||
class RouteHistory(Document):
|
||||
pass
|
||||
|
||||
@frappe.whitelist()
|
||||
def save_route_history(routes):
|
||||
frappe.cache().rpush('route_history', routes)
|
||||
|
||||
def save_route_history_to_db():
|
||||
values = []
|
||||
while frappe.cache().llen('route_history') > 0:
|
||||
routes = frappe.cache().lpop('route_history')
|
||||
routes = json.loads(routes)
|
||||
for route_obj in routes:
|
||||
route_obj['name'] = frappe.generate_hash('Route History', 10)
|
||||
route_obj['modified'] = frappe.utils.now()
|
||||
values.append("('{user}', '{name}', '{route}', '{creation}', '{modified}')"
|
||||
.format(**route_obj))
|
||||
|
||||
if not values: return
|
||||
|
||||
frappe.db.sql('''
|
||||
INSERT INTO `tabRoute History` (`user`, `name`, `route`, `creation`, `modified`)
|
||||
VALUES {0}
|
||||
'''.format(", ".join(values)), debug=1)
|
||||
|
||||
frappe.db.commit()
|
||||
|
||||
def flush_old_route_records():
|
||||
"""Deletes all route records except last 500 records per user"""
|
||||
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ scheduler_events = {
|
|||
"frappe.desk.page.backups.backups.delete_downloadable_backups",
|
||||
"frappe.limits.update_space_usage",
|
||||
"frappe.desk.doctype.auto_repeat.auto_repeat.make_auto_repeat_entry",
|
||||
"frappe.desk.doctype.route_history.route_history.save_route_history_to_db"
|
||||
"frappe.deferred_insert.save_to_db"
|
||||
],
|
||||
"daily": [
|
||||
"frappe.email.queue.clear_outbox",
|
||||
|
|
|
|||
|
|
@ -17,14 +17,15 @@ const routes_to_skip = ['Form'];
|
|||
const save_routes = frappe.utils.debounce(() => {
|
||||
const routes = frappe.route_history_queue;
|
||||
frappe.route_history_queue = [];
|
||||
frappe.xcall('frappe.desk.doctype.route_history.route_history.save_route_history', {
|
||||
routes: routes
|
||||
frappe.xcall('frappe.deferred_insert.deferred_insert', {
|
||||
'doctype': 'Route History',
|
||||
'records': routes
|
||||
}).then(() => {
|
||||
console.log('routes saved!');
|
||||
console.log('Routes saved!');
|
||||
}).catch(() => {
|
||||
frappe.route_history_queue.concat(routes);
|
||||
});
|
||||
}, 5000);
|
||||
}, 10000);
|
||||
|
||||
|
||||
frappe.route = function() {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue