Selaa lähdekoodia

Merge branch 'develop' into ignore-permlevel-for-fields

version-14
Suraj Shetty 3 vuotta sitten
committed by GitHub
vanhempi
commit
278204eeca
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
4 muutettua tiedostoa jossa 42 lisäystä ja 29 poistoa
  1. +1
    -1
      frappe/__init__.py
  2. +23
    -10
      frappe/deferred_insert.py
  3. +16
    -18
      frappe/desk/doctype/route_history/route_history.py
  4. +2
    -0
      frappe/public/js/frappe/form/controls/int.js

+ 1
- 1
frappe/__init__.py Näytä tiedosto

@@ -1536,7 +1536,7 @@ def make_property_setter(
.select(DocField_doctype.parent) .select(DocField_doctype.parent)
.where(DocField_doctype.fieldname == args.fieldname) .where(DocField_doctype.fieldname == args.fieldname)
.distinct() .distinct()
).run(as_list=True)
).run(pluck=True)


else: else:
doctype_list = [args.doctype] doctype_list = [args.doctype]


+ 23
- 10
frappe/deferred_insert.py Näytä tiedosto

@@ -1,13 +1,28 @@
import json import json
from typing import TYPE_CHECKING, Dict, List, Union

import redis


import frappe import frappe
from frappe.utils import cstr from frappe.utils import cstr


if TYPE_CHECKING:
from frappe.model.document import Document

queue_prefix = "insert_queue_for_" queue_prefix = "insert_queue_for_"




def deferred_insert(doctype, records):
frappe.cache().rpush(queue_prefix + doctype, records)
def deferred_insert(doctype: str, records: Union[List[Union[Dict, "Document"]], str]):
if isinstance(records, (dict, list)):
_records = json.dumps(records)
else:
_records = records

try:
frappe.cache().rpush(f"{queue_prefix}{doctype}", _records)
except redis.exceptions.ConnectionError:
for record in records:
insert_record(record, doctype)




def save_to_db(): def save_to_db():
@@ -30,19 +45,17 @@ def save_to_db():
frappe.db.commit() frappe.db.commit()




def insert_record(record, doctype):
if not record.get("doctype"):
record["doctype"] = doctype
def insert_record(record: Union[Dict, "Document"], doctype: str):
setattr(record, "doctype", doctype)
try: try:
doc = frappe.get_doc(record)
doc.insert()
frappe.get_doc(record).insert()
except Exception as e: except Exception as e:
print(e, doctype)
frappe.logger().error(f"Error while inserting deferred {doctype} record: {e}")




def get_key_name(key):
def get_key_name(key: str) -> str:
return cstr(key).split("|")[1] return cstr(key).split("|")[1]




def get_doctype_name(key):
def get_doctype_name(key: str) -> str:
return cstr(key).split(queue_prefix)[1] return cstr(key).split(queue_prefix)[1]

+ 16
- 18
frappe/desk/doctype/route_history/route_history.py Näytä tiedosto

@@ -1,11 +1,11 @@
# Copyright (c) 2021, Frappe Technologies and contributors
# Copyright (c) 2022, Frappe Technologies and contributors
# License: MIT. See LICENSE # License: MIT. See LICENSE


import json

import frappe import frappe
from frappe.deferred_insert import deferred_insert as _deferred_insert from frappe.deferred_insert import deferred_insert as _deferred_insert
from frappe.model.document import Document from frappe.model.document import Document
from frappe.query_builder import DocType
from frappe.query_builder.functions import Count




class RouteHistory(Document): class RouteHistory(Document):
@@ -14,31 +14,29 @@ class RouteHistory(Document):


def flush_old_route_records(): def flush_old_route_records():
"""Deletes all route records except last 500 records per user""" """Deletes all route records except last 500 records per user"""

records_to_keep_limit = 500 records_to_keep_limit = 500
users = frappe.db.sql(
"""
SELECT `user`
FROM `tabRoute History`
GROUP BY `user`
HAVING count(`name`) > %(limit)s
""",
{"limit": records_to_keep_limit},
)
RouteHistory = DocType("Route History")

users = (
frappe.qb.from_(RouteHistory)
.select(RouteHistory.user)
.groupby(RouteHistory.user)
.having(Count(RouteHistory.name) > records_to_keep_limit)
).run(pluck=True)


for user in users: for user in users:
user = user[0]
last_record_to_keep = frappe.db.get_all(
last_record_to_keep = frappe.get_all(
"Route History", "Route History",
filters={"user": user}, filters={"user": user},
limit=1,
limit_start=500, limit_start=500,
fields=["modified"], fields=["modified"],
order_by="modified desc", order_by="modified desc",
limit=1,
) )


frappe.db.delete( frappe.db.delete(
"Route History", {"modified": ("<=", last_record_to_keep[0].modified), "user": user}
"Route History",
{"modified": ("<=", last_record_to_keep[0].modified), "user": user},
) )




@@ -53,7 +51,7 @@ def deferred_insert(routes):
for route in frappe.parse_json(routes) for route in frappe.parse_json(routes)
] ]


_deferred_insert("Route History", json.dumps(routes))
_deferred_insert("Route History", routes)




@frappe.whitelist() @frappe.whitelist()


+ 2
- 0
frappe/public/js/frappe/form/controls/int.js Näytä tiedosto

@@ -41,3 +41,5 @@ frappe.ui.form.ControlInt = class ControlInt extends frappe.ui.form.ControlData
return cint(this.eval_expression(value), null); return cint(this.eval_expression(value), null);
} }
}; };

frappe.ui.form.ControlLongInt = frappe.ui.form.ControlInt;

Ladataan…
Peruuta
Tallenna