Move deferred insert code to separate file

This commit is contained in:
Suraj Shetty 2018-10-08 14:17:42 +05:30
parent 3c28adb15c
commit 011b4c8355
4 changed files with 70 additions and 29 deletions

64
frappe/deferred_insert.py Normal file
View 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()

View file

@ -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"""

View file

@ -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",

View file

@ -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() {