diff --git a/frappe/__init__.py b/frappe/__init__.py index 0b93244f0c..160e679a43 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -309,13 +309,6 @@ def reset_metadata_version(): cache().set_value("metadata_version", v) return v -def get_obj(dt = None, dn = None, doc=None, doclist=None, with_children = True): - from frappe.model.code import get_obj - return get_obj(dt, dn, doc, doclist, with_children) - -def doc(doctype=None, name=None, fielddata=None): - return Document(doctype, name, fielddata) - def new_doc(doctype, parent_doc=None, parentfield=None): from frappe.model.create_new import get_new_doc return get_new_doc(doctype, parent_doc, parentfield) @@ -328,21 +321,10 @@ def doclist(lst=None): from frappe.model.doclist import DocList return DocList(lst) -def bean(doctype=None, name=None, copy=None): - """return an instance of the object, wrapped as a Bean (frappe.model.bean)""" - from frappe.model.bean import Bean - if copy: - return Bean(copy_doc(copy)) - else: - return Bean(doctype, name) - def set_value(doctype, docname, fieldname, value): import frappe.client return frappe.client.set_value(doctype, docname, fieldname, value) -def get_doclist(doctype, name=None): - return bean(doctype, name).doclist - def get_doc(arg1, arg2=None): import frappe.model.document return frappe.model.document.get_doc(arg1, arg2) diff --git a/frappe/api.py b/frappe/api.py index 2365cecb44..01cec3b335 100644 --- a/frappe/api.py +++ b/frappe/api.py @@ -41,7 +41,7 @@ def handle(): elif call=="resource": if "run_method" in frappe.local.form_dict: - bean = frappe.bean(doctype, name) + bean = frappe.get_doc(doctype, name) if frappe.local.request.method=="GET": if not bean.has_permission("read"): diff --git a/frappe/client.py b/frappe/client.py index 7f03d2f281..ac46d3ec1d 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -14,7 +14,7 @@ def get(doctype, name=None, filters=None): name = frappe.db.get_value(doctype, json.loads(filters)) if not name: raise Exception, "No document found for given filters" - return [d.fields for d in frappe.bean(doctype, name).doclist] + return [d.fields for d in frappe.get_doc(doctype, name).doclist] @frappe.whitelist() def get_value(doctype, fieldname, filters=None, as_dict=True, debug=False): @@ -32,11 +32,11 @@ def set_value(doctype, name, fieldname, value): doc = frappe.db.get_value(doctype, name, ["parenttype", "parent"], as_dict=True) if doc and doc.parent: - bean = frappe.bean(doc.parenttype, doc.parent) + bean = frappe.get_doc(doc.parenttype, doc.parent) child = bean.doclist.getone({"doctype": doctype, "name": name}) child.set(fieldname, value) else: - bean = frappe.bean(doctype, name) + bean = frappe.get_doc(doctype, name) bean.set(fieldname, value) bean.save() @@ -54,12 +54,12 @@ def insert(doclist): if doclist[0].get("parent") and doclist[0].get("parenttype"): # inserting a child record d = doclist[0] - bean = frappe.bean(d["parenttype"], d["parent"]) + bean = frappe.get_doc(d["parenttype"], d["parent"]) bean.append(d) bean.save() return [d] else: - bean = frappe.bean(doclist).insert() + bean = frappe.get_doc(doclist).insert() return [d.fields for d in bean.doclist] @frappe.whitelist() @@ -67,7 +67,7 @@ def save(doclist): if isinstance(doclist, basestring): doclist = json.loads(doclist) - bean = frappe.bean(doclist).save() + bean = frappe.get_doc(doclist).save() return [d.fields for d in bean.doclist] @frappe.whitelist() @@ -80,14 +80,14 @@ def submit(doclist): if isinstance(doclist, basestring): doclist = json.loads(doclist) - doclistobj = frappe.bean(doclist) + doclistobj = frappe.get_doc(doclist) doclistobj.submit() return [d.fields for d in doclist] @frappe.whitelist() def cancel(doctype, name): - wrapper = frappe.bean(doctype, name) + wrapper = frappe.get_doc(doctype, name) wrapper.cancel() return [d.fields for d in wrapper.doclist] @@ -106,7 +106,7 @@ def set_default(key, value, parent=None): def make_width_property_setter(): doclist = json.loads(frappe.form_dict.doclist) if doclist[0]["doctype"]=="Property Setter" and doclist[0]["property"]=="width": - bean = frappe.bean(doclist) + bean = frappe.get_doc(doclist) bean.ignore_permissions = True bean.insert() @@ -119,7 +119,7 @@ def bulk_update(docs): ddoc = {key: val for key, val in doc.iteritems() if key not in ['doctype', 'docname']} doctype = doc['doctype'] docname = doc['docname'] - bean = frappe.bean(doctype, docname) + bean = frappe.get_doc(doctype, docname) bean.update(ddoc) bean.save() except: diff --git a/frappe/core/doctype/comment/test_comment.py b/frappe/core/doctype/comment/test_comment.py index b97724d73c..7c6dc19543 100644 --- a/frappe/core/doctype/comment/test_comment.py +++ b/frappe/core/doctype/comment/test_comment.py @@ -9,7 +9,7 @@ import frappe, unittest, json # class TestComment(unittest.TestCase): # def setUp(self): # self.cleanup() -# self.test_rec = frappe.bean({ +# self.test_rec = frappe.get_doc({ # "doctype":"Event", # "subject":"__Comment Test Event", # "event_type": "Private", @@ -29,21 +29,21 @@ import frappe, unittest, json # frappe.db.sql("""alter table `tabEvent` drop column `_comments`""") # # def test_add_comment(self): -# self.comment = frappe.bean({ +# self.comment = frappe.get_doc({ # "doctype":"Comment", # "comment_doctype": self.test_rec.doctype, # "comment_docname": self.test_rec.name, # "comment": "__Test Comment" # }).insert() # -# test_rec = frappe.doc(self.test_rec.doctype, self.test_rec.name) +# test_rec = frappe.get_doc(self.test_rec.doctype, self.test_rec.name) # _comments = json.loads(test_rec.get("_comments")) # self.assertTrue(_comments[0].get("comment")=="__Test Comment") # # def test_remove_comment(self): # self.test_add_comment() # frappe.delete_doc("Comment", self.comment.name) -# test_rec = frappe.doc(self.test_rec.doctype, self.test_rec.name) +# test_rec = frappe.get_doc(self.test_rec.doctype, self.test_rec.name) # _comments = json.loads(test_rec.get("_comments")) # self.assertEqual(len(_comments), 0) # diff --git a/frappe/core/doctype/communication/communication.py b/frappe/core/doctype/communication/communication.py index 8b76d41add..57a6ce6270 100644 --- a/frappe/core/doctype/communication/communication.py +++ b/frappe/core/doctype/communication/communication.py @@ -16,7 +16,7 @@ from frappe.model.document import Document class Communication(Document): def get_parent_bean(self): - return frappe.bean(self.parenttype, self.parent) + return frappe.get_doc(self.parenttype, self.parent) def update_parent(self): """update status of parent Lead or Contact based on who is replying""" diff --git a/frappe/core/doctype/custom_field/custom_field.py b/frappe/core/doctype/custom_field/custom_field.py index 98019b127d..ab38710454 100644 --- a/frappe/core/doctype/custom_field/custom_field.py +++ b/frappe/core/doctype/custom_field/custom_field.py @@ -114,7 +114,7 @@ def create_custom_field_if_values_exist(doctype, df): frappe.db.sql("""select count(*) from `tab{doctype}` where ifnull({fieldname},'')!=''""".format(doctype=doctype, fieldname=df.fieldname))[0][0] and \ not frappe.db.get_value("Custom Field", {"dt": doctype, "fieldname": df.fieldname}): - frappe.bean({ + frappe.get_doc({ "doctype":"Custom Field", "dt": doctype, "permlevel": df.permlevel or 0, diff --git a/frappe/core/doctype/customize_form/customize_form.py b/frappe/core/doctype/customize_form/customize_form.py index 4c805157dc..a30899a5e8 100644 --- a/frappe/core/doctype/customize_form/customize_form.py +++ b/frappe/core/doctype/customize_form/customize_form.py @@ -291,7 +291,7 @@ class CustomizeForm(Document): if d.doctype=="Customize Form Field": fields.append(d.fieldname) - d = frappe.doc('Property Setter') + d = frappe.get_doc('Property Setter') d.doctype_or_field = 'DocType' d.doc_type = self.doc_type d.property = "_idx" diff --git a/frappe/core/doctype/defaultvalue/defaultvalue.py b/frappe/core/doctype/defaultvalue/defaultvalue.py index 2099698b54..66b97bdbb4 100644 --- a/frappe/core/doctype/defaultvalue/defaultvalue.py +++ b/frappe/core/doctype/defaultvalue/defaultvalue.py @@ -7,6 +7,7 @@ import frappe from frappe.model.document import Document class Defaultvalue(Document): + pass def on_doctype_update(): if not frappe.db.sql("""show index from `tabDefaultValue` diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index f3f154546f..6f91bc77c5 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -328,16 +328,18 @@ def validate_permissions(permissions, for_remove=False): def make_module_and_roles(doc, perm_fieldname="permissions"): try: if not frappe.db.exists("Module Def", doc.module): - m = frappe.bean({"doctype": "Module Def", "module_name": doc.module}) + m = frappe.get_doc({"doctype": "Module Def", "module_name": doc.module}) + m.ignore_mandatory = m.ignore_permissions = True m.insert() default_roles = ["Administrator", "Guest", "All"] - roles = [p.role for p in doc.get(permissions)] + default_roles + roles = [p.role for p in doc.get("permissions") or []] + default_roles for role in list(set(roles)): if not frappe.db.exists("Role", role): - r = frappe.bean({"doctype": "Role", "role_name": role}) + r = frappe.get_doc({"doctype": "Role", "role_name": role}) r.role_name = role + r.ignore_mandatory = r.ignore_permissions = True r.insert() except frappe.DoesNotExistError, e: pass diff --git a/frappe/core/doctype/event/event.py b/frappe/core/doctype/event/event.py index 31a2dabf82..fe1d30d35f 100644 --- a/frappe/core/doctype/event/event.py +++ b/frappe/core/doctype/event/event.py @@ -33,7 +33,7 @@ def has_permission(doc, bean=None): # need full doclist to check roles and users if not bean: - bean = frappe.bean("Event", doc.name) + bean = frappe.get_doc("Event", doc.name) if len(bean.doclist)==1: return False diff --git a/frappe/core/doctype/event/test_event.py b/frappe/core/doctype/event/test_event.py index a866a85049..ddc2563ec3 100644 --- a/frappe/core/doctype/event/test_event.py +++ b/frappe/core/doctype/event/test_event.py @@ -35,25 +35,25 @@ import unittest class TestEvent(unittest.TestCase): # def setUp(self): - # user = frappe.bean("User", "test1@example.com") - # user.get_controller().add_roles("Website Manager") + # user = frappe.get_doc("User", "test1@example.com") + # user.add_roles("Website Manager") def tearDown(self): frappe.set_user("Administrator") def test_allowed_public(self): frappe.set_user("test1@example.com") - doc = frappe.doc("Event", frappe.db.get_value("Event", {"subject":"_Test Event 1"})) + doc = frappe.get_doc("Event", frappe.db.get_value("Event", {"subject":"_Test Event 1"})) self.assertTrue(frappe.has_permission("Event", refdoc=doc)) def test_not_allowed_private(self): frappe.set_user("test1@example.com") - doc = frappe.doc("Event", frappe.db.get_value("Event", {"subject":"_Test Event 2"})) + doc = frappe.get_doc("Event", frappe.db.get_value("Event", {"subject":"_Test Event 2"})) self.assertFalse(frappe.has_permission("Event", refdoc=doc)) def test_allowed_private_if_in_event_user(self): frappe.set_user("test1@example.com") - doc = frappe.doc("Event", frappe.db.get_value("Event", {"subject":"_Test Event 3"})) + doc = frappe.get_doc("Event", frappe.db.get_value("Event", {"subject":"_Test Event 3"})) self.assertTrue(frappe.has_permission("Event", refdoc=doc)) def test_event_list(self): diff --git a/frappe/core/doctype/file_data/file_data.py b/frappe/core/doctype/file_data/file_data.py index 096ff54a79..7b58f9e905 100644 --- a/frappe/core/doctype/file_data/file_data.py +++ b/frappe/core/doctype/file_data/file_data.py @@ -34,7 +34,7 @@ class FileData(Document): if self.attached_to_name: # check persmission try: - if not self.bean.ignore_permissions and \ + if not self.ignore_permissions and \ not frappe.has_permission(self.attached_to_doctype, "write", self.attached_to_name): frappe.msgprint(frappe._("No permission to write / remove."), raise_exception=True) diff --git a/frappe/core/doctype/notification_count/notification_count.py b/frappe/core/doctype/notification_count/notification_count.py index 089a097816..9067aeeaa7 100644 --- a/frappe/core/doctype/notification_count/notification_count.py +++ b/frappe/core/doctype/notification_count/notification_count.py @@ -9,9 +9,12 @@ import frappe from frappe.model.document import Document class NotificationCount(Document): + pass @frappe.whitelist() def get_notifications(): + if frappe.in_install_app: + return config = get_notification_config() can_read = frappe.user.get_can_read() open_count_doctype = {} @@ -31,7 +34,7 @@ def get_notifications(): result = frappe.get_list(d, fields=["count(*)"], filters=[[d, key, "=", condition[key]]], as_list=True, limit_page_length=1)[0][0] - frappe.doc({"doctype":"Notification Count", "for_doctype":d, + frappe.get_doc({"doctype":"Notification Count", "for_doctype":d, "open_count":result}).insert() open_count_doctype[d] = result @@ -41,7 +44,7 @@ def get_notifications(): open_count_module[m] = notification_count[m] else: open_count_module[m] = frappe.get_attr(config.for_module[m])() - frappe.doc({"doctype":"Notification Count", "for_doctype":m, + frappe.get_doc({"doctype":"Notification Count", "for_doctype":m, "open_count":open_count_module[m]}).insert() return { diff --git a/frappe/core/doctype/print_format/print_format.py b/frappe/core/doctype/print_format/print_format.py index 4248a1b3ba..b93e82358c 100644 --- a/frappe/core/doctype/print_format/print_format.py +++ b/frappe/core/doctype/print_format/print_format.py @@ -48,7 +48,7 @@ def get_args():
%s
""" % repr(frappe.form_dict) } - bean = frappe.bean(frappe.form_dict.doctype, frappe.form_dict.name) + bean = frappe.get_doc(frappe.form_dict.doctype, frappe.form_dict.name) for ptype in ("read", "print"): if not frappe.has_permission(bean.doctype, ptype, bean.doc): return { @@ -66,7 +66,7 @@ def get_html(doc, doclist, print_format=None): from jinja2 import Environment if isinstance(doc, basestring) and isinstance(doclist, basestring): - bean = frappe.bean(doc, doclist) + bean = frappe.get_doc(doc, doclist) doc = bean.doc doclist = bean.doclist diff --git a/frappe/core/doctype/property_setter/property_setter.py b/frappe/core/doctype/property_setter/property_setter.py index 4e83d0245b..6108035320 100644 --- a/frappe/core/doctype/property_setter/property_setter.py +++ b/frappe/core/doctype/property_setter/property_setter.py @@ -55,7 +55,7 @@ class PropertySetter(Document): validate_fields_for_doctype(self.doc_type) def make_property_setter(doctype, fieldname, property, value, property_type, for_doctype = False): - return frappe.bean({ + return frappe.get_doc({ "doctype":"Property Setter", "doctype_or_field": for_doctype and "DocType" or "DocField", "doc_type": doctype, diff --git a/frappe/core/doctype/todo/todo.py b/frappe/core/doctype/todo/todo.py index 6560492a17..1146c12e04 100644 --- a/frappe/core/doctype/todo/todo.py +++ b/frappe/core/doctype/todo/todo.py @@ -20,7 +20,7 @@ class Todo(Document): if not self.reference_type and self.reference_name: return - comment = frappe.bean({ + comment = frappe.get_doc({ "doctype":"Comment", "comment_by": frappe.session.user, "comment_doctype": self.reference_type, diff --git a/frappe/core/doctype/user/test_user.py b/frappe/core/doctype/user/test_user.py index 3361dc9e97..bc3a18b018 100644 --- a/frappe/core/doctype/user/test_user.py +++ b/frappe/core/doctype/user/test_user.py @@ -11,11 +11,11 @@ class TestUser(unittest.TestCase): frappe.db.sql("""delete from tabUserRole where role='_Test Role 2'""") delete_doc("Role","_Test Role 2") - user = frappe.bean(copy=test_records[1]) + user = frappe.get_doc(copy=test_records[1]) user.email = "_test@example.com" user.insert() - frappe.bean({"doctype": "ToDo", "description": "_Test"}).insert() + frappe.get_doc({"doctype": "ToDo", "description": "_Test"}).insert() delete_doc("User", "_test@example.com") @@ -23,7 +23,7 @@ class TestUser(unittest.TestCase): ("_test@example.com",))) from frappe.core.doctype.role.test_role import test_records as role_records - frappe.bean(copy=role_records[1]).insert() + frappe.get_doc(copy=role_records[1]).insert() def test_get_value(self): self.assertEquals(frappe.db.get_value("User", "test@example.com"), "test@example.com") diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index d7fa879d84..f4897581db 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -250,7 +250,7 @@ class User(Document): "role": role }) - self.bean.save() + self.save() @frappe.whitelist() def get_languages(): @@ -312,7 +312,7 @@ def sign_up(email, full_name): TIMEDIFF(%s, modified) > '1:00:00' """, now())[0][0] > 200: raise Exception, "Too Many New Users" from frappe.utils import random_string - user = frappe.bean({ + user = frappe.get_doc({ "doctype":"User", "email": email, "first_name": full_name, @@ -333,8 +333,8 @@ def reset_password(user): if frappe.db.sql("""select name from tabUser where name=%s""", (user,)): # Hack! frappe.session["user"] = "Administrator" - user = frappe.bean("User", user) - user.get_controller().reset_password() + user = frappe.get_doc("User", user) + user.reset_password() return "Password reset details sent to your email." else: return "No such user (%s)" % user diff --git a/frappe/core/doctype/version/version.py b/frappe/core/doctype/version/version.py index ecf721d3b7..f3bdccbf8e 100644 --- a/frappe/core/doctype/version/version.py +++ b/frappe/core/doctype/version/version.py @@ -9,13 +9,14 @@ import frappe, json from frappe.model.document import Document class Version(Document): + pass @frappe.whitelist() def restore(version): if not "System Manager" in frappe.get_roles(): raise frappe.PermissionError - version = frappe.doc("Version", version) + version = frappe.get_doc("Version", version) doclist = json.loads(version.doclist_json) # check if renamed @@ -27,4 +28,4 @@ def restore(version): doclist[0]["modified"] = frappe.db.get_value(version.ref_doctype, version.docname, "modified") # overwrite - frappe.bean(doclist).save() \ No newline at end of file + frappe.get_doc(doclist).save() \ No newline at end of file diff --git a/frappe/core/doctype/workflow/workflow.py b/frappe/core/doctype/workflow/workflow.py index bae11baffd..b249ef5025 100644 --- a/frappe/core/doctype/workflow/workflow.py +++ b/frappe/core/doctype/workflow/workflow.py @@ -21,7 +21,7 @@ class Workflow(Document): meta = frappe.get_meta(self.document_type) if not meta.get_field(self.workflow_state_field): # create custom field - frappe.bean([{ + frappe.get_doc([{ "doctype":"Custom Field", "dt": self.document_type, "__islocal": 1, diff --git a/frappe/core/page/data_import_tool/data_import_tool.py b/frappe/core/page/data_import_tool/data_import_tool.py index 1975fe9312..0537c18de4 100644 --- a/frappe/core/page/data_import_tool/data_import_tool.py +++ b/frappe/core/page/data_import_tool/data_import_tool.py @@ -399,13 +399,13 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, check_record(d, None, doctype_dl) if overwrite and frappe.db.exists(doctype, doclist[0]["name"]): - bean = frappe.bean(doctype, doclist[0]["name"]) + bean = frappe.get_doc(doctype, doclist[0]["name"]) bean.ignore_links = ignore_links bean.doclist.update(doclist) bean.save() ret.append('Updated row (#%d) %s' % (row_idx + 1, getlink(bean.doctype, bean.name))) else: - bean = frappe.bean(doclist) + bean = frappe.get_doc(doclist) bean.ignore_links = ignore_links bean.insert() ret.append('Inserted row (#%d) %s' % (row_idx + 1, getlink(bean.doctype, bean.name))) @@ -417,7 +417,7 @@ def upload(rows = None, submit_after_import=None, ignore_encoding_errors=False, if parenttype: # child doc - doc = frappe.doc(doctype) + doc = frappe.get_doc(doctype) doc.fields.update(doclist[0]) if parenttype: doc.parenttype = parenttype @@ -454,7 +454,7 @@ def validate_parent(parent_list, parenttype, ret, error): parent_list = list(set(parent_list)) for p in parent_list: try: - obj = frappe.bean(parenttype, p) + obj = frappe.get_doc(parenttype, p) obj.run_method("validate") obj.run_method("on_update") except Exception, e: @@ -503,7 +503,7 @@ def export_json(doctype, name, path): if not name or name=="-": name = doctype with open(path, "w") as outfile: - doclist = [d.fields for d in frappe.bean(doctype, name).doclist] + doclist = [d.fields for d in frappe.get_doc(doctype, name).doclist] for d in doclist: if d.get("parent"): del d["parent"] @@ -529,7 +529,7 @@ def import_doclist(path, overwrite=False, ignore_links=False, ignore_insert=Fals files = [path] def _import_doclist(d): - b = frappe.bean(d) + b = frappe.get_doc(d) b.ignore_links = ignore_links if insert: b.set("__islocal", True) diff --git a/frappe/core/page/permission_manager/permission_manager.py b/frappe/core/page/permission_manager/permission_manager.py index 8d0b491865..378381c8cd 100644 --- a/frappe/core/page/permission_manager/permission_manager.py +++ b/frappe/core/page/permission_manager/permission_manager.py @@ -36,7 +36,7 @@ def remove(doctype, name): @frappe.whitelist() def add(parent, role, permlevel): frappe.only_for("System Manager") - frappe.doc(fielddata={ + frappe.get_doc({ "doctype":"DocPerm", "__islocal": 1, "parent": parent, diff --git a/frappe/database.py b/frappe/database.py index da7ba924da..c7970e3375 100644 --- a/frappe/database.py +++ b/frappe/database.py @@ -475,7 +475,7 @@ class Database: def exists(self, dt, dn=None): if isinstance(dt, basestring): - if dt==dn: + if dt!="DocType" and dt==dn: return True # single always exists (!) try: return self.sql('select name from `tab%s` where name=%s' % (dt, '%s'), (dn,)) diff --git a/frappe/defaults.py b/frappe/defaults.py index 36840da232..3f2d895c26 100644 --- a/frappe/defaults.py +++ b/frappe/defaults.py @@ -82,7 +82,7 @@ def set_default(key, value, parent, parenttype="Control Panel"): add_default(key, value, parent) def add_default(key, value, parent, parenttype=None): - d = frappe.doc({ + d = frappe.get_doc({ "doctype": "DefaultValue", "parent": parent, "parenttype": parenttype or "Control Panel", diff --git a/frappe/handler.py b/frappe/handler.py index 3f780567c8..4ad72503e6 100755 --- a/frappe/handler.py +++ b/frappe/handler.py @@ -33,7 +33,7 @@ def web_logout(): @frappe.whitelist(allow_guest=True) def run_custom_method(doctype, name, custom_method): """cmd=run_custom_method&doctype={doctype}&name={name}&custom_method={custom_method}""" - bean = frappe.bean(doctype, name) + bean = frappe.get_doc(doctype, name) controller = bean.get_controller() if getattr(controller, custom_method, frappe._dict()).is_whitelisted: frappe.call(getattr(controller, custom_method), **frappe.local.form_dict) diff --git a/frappe/installer.py b/frappe/installer.py index ed5c921799..b02b6077ac 100755 --- a/frappe/installer.py +++ b/frappe/installer.py @@ -130,7 +130,7 @@ def set_all_patches_as_completed(app): patch_path = os.path.join(frappe.get_pymodule_path(app), "patches.txt") if os.path.exists(patch_path): for patch in frappe.get_file_items(patch_path): - frappe.doc({ + frappe.get_doc({ "doctype": "Patch Log", "patch": patch }).insert() diff --git a/frappe/model/__init__.py b/frappe/model/__init__.py index 9d329e8182..40a9e624a9 100644 --- a/frappe/model/__init__.py +++ b/frappe/model/__init__.py @@ -19,7 +19,7 @@ def insert(doclist): else: d.set("__islocal", 1) - wrapper = frappe.bean(doclist) + wrapper = frappe.get_doc(doclist) wrapper.save() return wrapper diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index be3a5116db..adfb3c2706 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -42,7 +42,7 @@ class BaseDocument(object): else: value = self.__dict__.get(key, default) - if value is None and key in self.get_table_fields(): + if value is None and key!="_meta" and key in (d.fieldname for d in self.get_table_fields()): self.set(key, []) value = self.__dict__.get(key) @@ -111,6 +111,9 @@ class BaseDocument(object): for fieldname in self.valid_columns: d[fieldname] = self.get(fieldname) return d + + def is_new(self): + return self.get("__islocal") @property def valid_columns(self): @@ -178,7 +181,7 @@ class BaseDocument(object): self.docstatus = cint(self.docstatus) def set_missing_values(self, d): - for key, value in d.iteritems(): + for key, value in d.get_valid_dict().iteritems(): if self.get(key) is None: self.set(key, value) diff --git a/frappe/model/create_new.py b/frappe/model/create_new.py index ce6206323f..6d8842e038 100644 --- a/frappe/model/create_new.py +++ b/frappe/model/create_new.py @@ -51,7 +51,6 @@ def get_new_doc(doctype, parent_doc = None, parentfield = None): else: ref_docname = frappe.db.get_default(ref_fieldname) doc.set(d.fieldname, frappe.db.get_value(ref_doctype, ref_docname, d.fieldname)) - else: doc.set(d.fieldname, d.default) diff --git a/frappe/model/document.py b/frappe/model/document.py index 2265be6c12..7ab4e25f91 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -72,7 +72,7 @@ class Document(BaseDocument): self.update(d, valid_columns = d.keys()) for df in self.get_table_fields(): - children = frappe.db.get_values(df.options, + children = frappe.db.get_values(df.options, {"parent": self.name, "parenttype": self.doctype, "parentfield": df.fieldname}, "*", as_dict=True) if children: @@ -81,13 +81,14 @@ class Document(BaseDocument): self.set(df.fieldname, []) def has_permission(self, permtype): - if getattr(self, "_ignore_permissions", False): + if getattr(self, "ignore_permissions", False): return True return frappe.has_permission(self.doctype, permtype, self) - def insert(self): - # check links - # check permissions + def insert(self, ignore_permissions=None): + if ignore_permissions!=None: + self.ignore_permissions = ignore_permissions + self.set("__islocal", True) if not self.has_permission("create"): @@ -114,7 +115,10 @@ class Document(BaseDocument): self.run_method("after_insert") self.run_post_save_methods() - def save(self): + def save(self, ignore_permissions=None): + if ignore_permissions!=None: + self.ignore_permissions = ignore_permissions + if self.get("__islocal") or not self.get("name"): self.insert() return @@ -135,7 +139,7 @@ class Document(BaseDocument): # children child_map = {} - ignore_children_type = self.get("_ignore_children_type", []) + ignore_children_type = self.get("ignore_children_type") or [] for d in self.get_all_children(): d.parent = self.name # rename if reqd @@ -199,13 +203,13 @@ class Document(BaseDocument): self.set_missing_values(new_doc) # children - for df in self.meta.get("fields", {"fieldtype":"Table"}): + for df in self.get_table_fields(): new_doc = frappe.new_doc(df.options) value = self.get(df.fieldname) if isinstance(value, list): for d in value: d.set_missing_values(new_doc) - + def _check_if_latest(self): conflict = False self._action = "save" @@ -327,6 +331,9 @@ class Document(BaseDocument): self.save() def run_before_save_methods(self): + if getattr(self, "ignore_validate", False): + return + if self._action=="save": self.run_method("validate") self.run_method("before_save") diff --git a/frappe/model/meta.py b/frappe/model/meta.py index f15eed9d7b..b020cf36c6 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -4,17 +4,17 @@ # metadata from __future__ import unicode_literals -import frappe +import frappe, json from frappe.utils import cstr, cint from frappe.model import integer_docfield_properties from frappe.model.document import Document +from frappe.model.base_document import BaseDocument ###### def get_meta(doctype, cached=True): # TODO: cache to be cleared - - if cached: + if cached and not frappe.flags.in_install_app: if doctype not in frappe.local.meta: frappe.local.meta[doctype] = frappe.cache().get_value("meta:" + doctype, lambda: Meta(doctype)) return frappe.local.meta.get(doctype) @@ -25,7 +25,23 @@ class Meta(Document): _metaclass = True def __init__(self, doctype): super(Meta, self).__init__("DocType", doctype) - + + def load_from_db(self): + try: + super(Meta, self).load_from_db() + except frappe.DoesNotExistError: + if self.doctype=="DocType" and self.name in ("DocField", "DocPerm", "Role", "DocType", "Module Def"): + fname = frappe.scrub(self.name) + with open(frappe.get_app_path("frappe", "core", "doctype", fname, fname + ".txt"), "r") as f: + txt = f.read() + + self.__dict__.update(json.loads(txt)) + self.fields = [BaseDocument(d) for d in self.fields] + if hasattr(self, "permissions"): + self.permissions = [BaseDocument(d) for d in self.permissions] + else: + raise + def get_link_fields(self): tmp = self.get("fields", {"fieldtype":"Link"}) tmp.extend(self.get("fields", {"fieldtype":"Select", "options": "^link:"})) diff --git a/frappe/model/naming.py b/frappe/model/naming.py index 32e348accf..216e68d76a 100644 --- a/frappe/model/naming.py +++ b/frappe/model/naming.py @@ -19,7 +19,9 @@ def set_new_name(doc): if getattr(doc, "amended_from", None): return doc._get_amended_name() else: - if hasattr(doc, "autoname"): + tmp = getattr(doc, "autoname", None) + if tmp and not isinstance(tmp, basestring): + # autoname in a function, not a property doc.autoname() if doc.name and doc.localname != doc.name: return diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index ca782e9bbd..fc199c601d 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -23,7 +23,7 @@ def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=F doclist = frappe.model.doctype.get(doctype) # call before_rename - out = frappe.bean(doctype, old).run_method("before_rename", old, new, merge) or {} + out = frappe.get_doc(doctype, old).run_method("before_rename", old, new, merge) or {} new = out.get("new") or new new = validate_rename(doctype, new, doclist, merge, force, ignore_permissions) @@ -43,7 +43,7 @@ def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=F frappe.delete_doc(doctype, old) # call after_rename - frappe.bean(doctype, new).run_method("after_rename", old, new, merge) + frappe.get_doc(doctype, new).run_method("after_rename", old, new, merge) rename_versions(doctype, old, new) diff --git a/frappe/modules/import_file.py b/frappe/modules/import_file.py index 42ef2cceae..87cff6b819 100644 --- a/frappe/modules/import_file.py +++ b/frappe/modules/import_file.py @@ -71,22 +71,24 @@ def import_doc(docdict): docdict["__islocal"] = 1 doc = frappe.get_doc(docdict) - old_doc = None - if doctype in ignore_values: - if frappe.db.exists(doc.doctype, doc.name): - old_doc = frappe.get_doc(doc.doctype, doc.name) - - # update ignore values - for key in ignore_values.get(doctype) or []: - doc.set(key, old_doc.get(key)) - - # update ignored docs into new doc - for df in doc.get_table_fields(): - if df.options in ignore_doctypes: - doc.set(df.fieldname, []) + ignore = [] + + if frappe.db.exists(doc.doctype, doc.name): + old_doc = frappe.get_doc(doc.doctype, doc.name) + + if doc.doctype in ignore_values: + # update ignore values + for key in ignore_values.get(doc.doctype) or []: + doc.set(key, old_doc.get(key)) + + # update ignored docs into new doc + for df in doc.get_table_fields(): + if df.options in ignore_doctypes: + doc.set(df.fieldname, []) + ignore.append(df.options) - # delete old - frappe.delete_doc(doctype, name, force=1, ignore_doctypes=ignore, for_reload=True) + # delete old + frappe.delete_doc(doc.doctype, doc.name, force=1, ignore_doctypes=ignore, for_reload=True) doc.ignore_children_type = ignore doc.ignore_links = True diff --git a/frappe/modules/patch_handler.py b/frappe/modules/patch_handler.py index 851bf7b7b5..bd2b18941f 100644 --- a/frappe/modules/patch_handler.py +++ b/frappe/modules/patch_handler.py @@ -95,7 +95,7 @@ def update_patch_log(patchmodule): frappe.db.sql("""INSERT INTO `__PatchLog` VALUES (%s, now())""", \ patchmodule) else: - frappe.doc({"doctype": "Patch Log", "patch": patchmodule}).insert() + frappe.get_doc({"doctype": "Patch Log", "patch": patchmodule}).insert() def executed(patchmodule): """return True if is executed""" diff --git a/frappe/permissions.py b/frappe/permissions.py index 07006fb516..7ceca5dda2 100644 --- a/frappe/permissions.py +++ b/frappe/permissions.py @@ -36,7 +36,7 @@ def has_permission(doctype, ptype="read", doc=None, verbose=True): if doc: if isinstance(doc, basestring): - doc = frappe.doc(meta.name, doc) + doc = frappe.get_doc(meta.name, doc) if not has_unrestricted_access(doc, verbose=verbose): return False @@ -105,9 +105,9 @@ def has_unrestricted_access(doc, verbose=True): def has_controller_permissions(doc): if doc.get("__islocal"): - bean = frappe.bean([doc]) + bean = frappe.get_doc([doc]) else: - bean = frappe.bean(doc.doctype, doc.name) + bean = frappe.get_doc(doc.doctype, doc.name) condition_methods = frappe.get_hooks("has_permission:" + doc.doctype) for method in frappe.get_hooks("has_permission:" + doc.doctype): diff --git a/frappe/templates/generators/blog_post.py b/frappe/templates/generators/blog_post.py index 5726481a9d..4a9965e1e3 100644 --- a/frappe/templates/generators/blog_post.py +++ b/frappe/templates/generators/blog_post.py @@ -24,7 +24,7 @@ def get_context(context): blog_post.updated = global_date_format(blog_post.published_on) if blog_post.blogger: - blog_post.blogger_info = frappe.doc("Blogger", blog_post.blogger).fields + blog_post.blogger_info = frappe.get_doc("Blogger", blog_post.blogger).fields blog_post.description = blog_post.blog_intro or blog_post.content[:140] blog_post.meta_description = blog_post.description diff --git a/frappe/templates/generators/website_group.py b/frappe/templates/generators/website_group.py index 514f00b3b0..a36f4e07ea 100644 --- a/frappe/templates/generators/website_group.py +++ b/frappe/templates/generators/website_group.py @@ -70,10 +70,10 @@ def build_view_context(context): context.post_list_html = get_post_list_html(context.group.name, context.view.name) elif context.view.name == "edit": - context.post = frappe.doc("Post", frappe.form_dict.name).fields + context.post = frappe.get_doc("Post", frappe.form_dict.name).fields if context.post.assigned_to: - context.user = frappe.doc("User", context.post.assigned_to) + context.user = frappe.get_doc("User", context.post.assigned_to) elif context.view.name == "settings": context.users = frappe.db.sql("""select p.*, wsp.`read`, wsp.`write`, wsp.`admin` diff --git a/frappe/templates/includes/comments.py b/frappe/templates/includes/comments.py index ac2782e6be..59b1b9f453 100644 --- a/frappe/templates/includes/comments.py +++ b/frappe/templates/includes/comments.py @@ -30,7 +30,7 @@ def add_comment(args=None): if "cmd" in args: del args["cmd"] - comment = frappe.bean(args) + comment = frappe.get_doc(args) comment.ignore_permissions = True comment.insert() diff --git a/frappe/templates/pages/about.py b/frappe/templates/pages/about.py index 75b6262716..8039f55ba0 100644 --- a/frappe/templates/pages/about.py +++ b/frappe/templates/pages/about.py @@ -5,4 +5,4 @@ from __future__ import unicode_literals import frappe def get_context(context): - return { "obj": frappe.bean("About Us Settings", "About Us Settings").get_controller() } + return { "obj": frappe.get_doc("About Us Settings", "About Us Settings").get_controller() } diff --git a/frappe/templates/pages/blog.py b/frappe/templates/pages/blog.py index f6f0854f15..5c1945b874 100644 --- a/frappe/templates/pages/blog.py +++ b/frappe/templates/pages/blog.py @@ -5,4 +5,4 @@ from __future__ import unicode_literals import frappe def get_context(context): - return frappe.doc("Blog Settings", "Blog Settings").fields + return frappe.get_doc("Blog Settings", "Blog Settings").fields diff --git a/frappe/templates/pages/contact.py b/frappe/templates/pages/contact.py index 4287be0121..9f94dd96b3 100644 --- a/frappe/templates/pages/contact.py +++ b/frappe/templates/pages/contact.py @@ -7,12 +7,12 @@ import frappe from frappe.utils import now def get_context(context): - bean = frappe.bean("Contact Us Settings", "Contact Us Settings") + bean = frappe.get_doc("Contact Us Settings", "Contact Us Settings") query_options = filter(None, bean.query_options.replace(",", "\n").split()) if \ bean.query_options else ["Sales", "Support", "General"] - address = frappe.bean("Address", bean.address).doc if bean.address else None + address = frappe.get_doc("Address", bean.address).doc if bean.address else None out = { "query_options": query_options diff --git a/frappe/templates/pages/login.py b/frappe/templates/pages/login.py index 6d8ceec7fb..fcde1e341c 100644 --- a/frappe/templates/pages/login.py +++ b/frappe/templates/pages/login.py @@ -84,7 +84,7 @@ def get_oauth_keys(provider): if not keys: # try database - social = frappe.doc("Social Login Keys", "Social Login Keys") + social = frappe.get_doc("Social Login Keys", "Social Login Keys") keys = {} for fieldname in ("client_id", "client_secret"): value = social.get("{provider}_{fieldname}".format(provider=provider, fieldname=fieldname)) @@ -183,7 +183,7 @@ def create_oauth_user(data, provider): if isinstance(data.get("location"), dict): data["location"] = data.get("location").get("name") - user = frappe.bean({ + user = frappe.get_doc({ "doctype":"User", "first_name": data.get("first_name") or data.get("given_name") or data.get("name"), "last_name": data.get("last_name") or data.get("family_name"), @@ -211,5 +211,5 @@ def create_oauth_user(data, provider): user.github_username = data["login"] user.ignore_permissions = True - user.get_controller().no_welcome_mail = True + user.no_welcome_mail = True user.insert() diff --git a/frappe/templates/pages/rss.py b/frappe/templates/pages/rss.py index f41239473b..a02f1dda11 100644 --- a/frappe/templates/pages/rss.py +++ b/frappe/templates/pages/rss.py @@ -29,7 +29,7 @@ def get_context(context): else: modified = now() - ws = frappe.doc('Website Settings', 'Website Settings') + ws = frappe.get_doc('Website Settings', 'Website Settings') context = { 'title': ws.title_prefix, diff --git a/frappe/templates/pages/style_settings.py b/frappe/templates/pages/style_settings.py index 208b1efe4a..95a492e128 100644 --- a/frappe/templates/pages/style_settings.py +++ b/frappe/templates/pages/style_settings.py @@ -9,7 +9,7 @@ base_template_path = "templates/pages/style_settings.css" def get_context(context): """returns web style""" - doc = frappe.doc("Style Settings", "Style Settings") + doc = frappe.get_doc("Style Settings", "Style Settings") prepare(doc) return { "doc": doc.fields } diff --git a/frappe/templates/pages/writers.py b/frappe/templates/pages/writers.py index 2b3093a551..60ac5520f3 100644 --- a/frappe/templates/pages/writers.py +++ b/frappe/templates/pages/writers.py @@ -17,6 +17,6 @@ def get_context(context): "categories": frappe.db.sql_list("select name from `tabBlog Category` order by name") } - writers_context.update(frappe.doc("Blog Settings", "Blog Settings").fields) + writers_context.update(frappe.get_doc("Blog Settings", "Blog Settings").fields) return writers_context diff --git a/frappe/templates/website_group/post.py b/frappe/templates/website_group/post.py index a4e38aa65d..530b541e81 100644 --- a/frappe/templates/website_group/post.py +++ b/frappe/templates/website_group/post.py @@ -9,7 +9,7 @@ from frappe.utils.file_manager import save_file from frappe.templates.generators.website_group import get_pathname def get_post_context(context): - post = frappe.doc("Post", frappe.form_dict.name) + post = frappe.get_doc("Post", frappe.form_dict.name) if post.parent_post: raise frappe.PermissionError @@ -26,7 +26,7 @@ def get_post_context(context): return frappe.cache().get_value(cache_key, lambda: _get_post_context()) def get_parent_post_html(post, context): - user = frappe.bean("User", post.owner).doc + user = frappe.get_doc("User", post.owner).doc for fieldname in ("first_name", "last_name", "user_image", "location"): post.set(fieldname, user.fields[fieldname]) @@ -65,8 +65,8 @@ def add_post(group, content, picture, picture_name, title=None, parent_post=None if frappe.db.get_value("Post", parent_post, "parent_post"): frappe.throw("Cannot reply to a reply") - group = frappe.doc("Website Group", group) - post = frappe.bean({ + group = frappe.get_doc("Website Group", group) + post = frappe.get_doc({ "doctype":"Post", "title": (title or "").title(), "content": content, @@ -98,7 +98,7 @@ def add_post(group, content, picture, picture_name, title=None, parent_post=None def save_post(post, content, picture=None, picture_name=None, title=None, assigned_to=None, status=None, event_datetime=None): - post = frappe.bean("Post", post) + post = frappe.get_doc("Post", post) access = get_access(get_pathname(post.website_group)) if not access.get("write"): diff --git a/frappe/templates/website_group/settings.py b/frappe/templates/website_group/settings.py index 5db96f145e..ed9e6aff8b 100644 --- a/frappe/templates/website_group/settings.py +++ b/frappe/templates/website_group/settings.py @@ -36,7 +36,7 @@ def add_sitemap_permission(group, user): if not get_access(pathname).get("admin"): raise frappe.PermissionError - permission = frappe.bean({ + permission = frappe.get_doc({ "doctype": "Website Route Permission", "website_route": pathname, "user": user, @@ -58,7 +58,7 @@ def update_permission(group, user, perm, value): if not get_access(pathname).get("admin"): raise frappe.PermissionError - permission = frappe.bean("Website Route Permission", {"website_route": pathname, "user": user}) + permission = frappe.get_doc("Website Route Permission", {"website_route": pathname, "user": user}) permission.set(perm, int(value)) permission.save(ignore_permissions=True) @@ -79,7 +79,7 @@ def update_description(group, description): if not get_access(get_pathname(group)).get("admin"): raise frappe.PermissionError - group = frappe.bean("Website Group", group) + group = frappe.get_doc("Website Group", group) group.group_description = description group.save(ignore_permissions=True) @@ -91,7 +91,7 @@ def add_website_group(group, new_group, public_read, public_write, group_type="F parent_website_route = frappe.db.get_value("Website Route", {"ref_doctype": "Website Group", "docname": group}) - frappe.bean({ + frappe.get_doc({ "doctype": "Website Group", "group_name": group + "-" + new_group, "group_title": new_group, diff --git a/frappe/tests/test_document.py b/frappe/tests/test_document.py index 9cd56b734e..4e4b80d44e 100644 --- a/frappe/tests/test_document.py +++ b/frappe/tests/test_document.py @@ -4,6 +4,10 @@ import frappe, unittest, time class TestDocument(unittest.TestCase): + def test_get_return_empty_list_for_table_field_if_none(self): + d = frappe.get_doc({"doctype":"User"}) + self.assertEquals(d.get("user_roles"), []) + def test_load(self): d = frappe.get_doc("DocType", "User") self.assertEquals(d.doctype, "DocType") diff --git a/frappe/translate.py b/frappe/translate.py index b02b447b37..a54b5a357c 100644 --- a/frappe/translate.py +++ b/frappe/translate.py @@ -164,7 +164,7 @@ def get_messages_from_page(name): return get_messages_from_page_or_report("Page", name) def get_messages_from_report(name): - report = frappe.doc("Report", name) + report = frappe.get_doc("Report", name) messages = get_messages_from_page_or_report("Report", name, frappe.db.get_value("DocType", report.ref_doctype, "module")) if report.query: diff --git a/frappe/utils/datautils.py b/frappe/utils/datautils.py index adb930e2b4..2bd92ef42b 100644 --- a/frappe/utils/datautils.py +++ b/frappe/utils/datautils.py @@ -128,7 +128,7 @@ def import_doc(d, doctype, overwrite, row_idx, submit=False, ignore_links=False) """import main (non child) document""" if d.get("name") and frappe.db.exists(doctype, d['name']): if overwrite: - bean = frappe.bean(doctype, d['name']) + bean = frappe.get_doc(doctype, d['name']) bean.ignore_links = ignore_links bean.update(d) if d.get("docstatus") == 1: @@ -140,7 +140,7 @@ def import_doc(d, doctype, overwrite, row_idx, submit=False, ignore_links=False) return 'Ignored row (#%d) %s (exists)' % (row_idx + 1, getlink(doctype, d['name'])) else: - bean = frappe.bean([d]) + bean = frappe.get_doc([d]) bean.ignore_links = ignore_links bean.insert() diff --git a/frappe/utils/email_lib/bulk.py b/frappe/utils/email_lib/bulk.py index ffdd6e2094..b0e1cb30bc 100644 --- a/frappe/utils/email_lib/bulk.py +++ b/frappe/utils/email_lib/bulk.py @@ -78,7 +78,7 @@ def send(recipients=None, sender=None, doctype='User', email_field='email', def add(email, sender, subject, formatted, text_content=None, ref_doctype=None, ref_docname=None): """add to bulk mail queue""" - e = frappe.doc('Bulk Email') + e = frappe.get_doc('Bulk Email') e.sender = sender e.recipient = email try: diff --git a/frappe/utils/email_lib/smtp.py b/frappe/utils/email_lib/smtp.py index 9ba7d9e94a..a00a544933 100644 --- a/frappe/utils/email_lib/smtp.py +++ b/frappe/utils/email_lib/smtp.py @@ -38,7 +38,7 @@ class SMTPServer: def __init__(self, login=None, password=None, server=None, port=None, use_ssl=None): # get defaults from control panel try: - es = frappe.doc('Outgoing Email Settings', 'Outgoing Email Settings') + es = frappe.get_doc('Outgoing Email Settings', 'Outgoing Email Settings') except frappe.DoesNotExistError: es = None diff --git a/frappe/utils/file_manager.py b/frappe/utils/file_manager.py index b0019c57e0..ce25e3ba63 100644 --- a/frappe/utils/file_manager.py +++ b/frappe/utils/file_manager.py @@ -45,7 +45,7 @@ def save_url(file_url, dt, dn): # frappe.msgprint("URL must start with 'http://' or 'https://'") # return None, None - f = frappe.bean({ + f = frappe.get_doc({ "doctype": "File Data", "file_url": file_url, "attached_to_doctype": dt, @@ -55,7 +55,7 @@ def save_url(file_url, dt, dn): try: f.insert(); except frappe.DuplicateEntryError: - return frappe.doc("File Data", f.duplicate_entry) + return frappe.get_doc("File Data", f.duplicate_entry) return f.doc def get_uploaded_content(): @@ -140,7 +140,7 @@ def save_file(fname, content, dt, dn, decode=False): os.rename(temp_fname, fpath.encode("utf-8")) - f = frappe.bean({ + f = frappe.get_doc({ "doctype": "File Data", "file_name": os.path.relpath(os.path.join(files_path, fname), get_site_path("public")), "attached_to_doctype": dt, @@ -151,7 +151,7 @@ def save_file(fname, content, dt, dn, decode=False): try: f.insert(); except frappe.DuplicateEntryError: - return frappe.doc("File Data", f.duplicate_entry) + return frappe.get_doc("File Data", f.duplicate_entry) return f.doc diff --git a/frappe/utils/install.py b/frappe/utils/install.py index 96c70bbffc..8d7ed41f26 100644 --- a/frappe/utils/install.py +++ b/frappe/utils/install.py @@ -29,12 +29,12 @@ def after_install(): for d in install_docs: try: - frappe.bean(d).insert() + frappe.get_doc(d).insert() except NameError: pass # all roles to admin - frappe.bean("User", "Administrator").get_controller().add_roles(*frappe.db.sql_list(""" + frappe.get_doc("User", "Administrator").add_roles(*frappe.db.sql_list(""" select name from tabRole""")) # update admin password diff --git a/frappe/utils/scheduler.py b/frappe/utils/scheduler.py index f4d743aaea..c0153956e8 100644 --- a/frappe/utils/scheduler.py +++ b/frappe/utils/scheduler.py @@ -97,7 +97,7 @@ def log(method, message=None): frappe.db.rollback() frappe.db.begin() - d = frappe.doc("Scheduler Log") + d = frappe.get_doc("Scheduler Log") d.method = method d.error = message d.save() diff --git a/frappe/utils/user.py b/frappe/utils/user.py index 6ca1432fd5..55b0614dc7 100644 --- a/frappe/utils/user.py +++ b/frappe/utils/user.py @@ -195,7 +195,7 @@ def get_system_managers(only_name=False): return [email.utils.formataddr((p.fullname, p.name)) for p in system_managers] def add_role(user, role): - user_wrapper = frappe.bean("User", user).get_controller().add_roles(role) + user_wrapper = frappe.get_doc("User", user).add_roles(role) def add_system_manager(email, first_name=None, last_name=None): # add user @@ -213,7 +213,7 @@ def add_system_manager(email, first_name=None, last_name=None): # add roles roles = frappe.db.sql_list("""select name from `tabRole` where name not in ("Administrator", "Guest", "All")""") - user.get_controller().add_roles(*roles) + user.add_roles(*roles) def get_roles(username=None, with_standard=True): """get roles of current user""" diff --git a/frappe/website/context.py b/frappe/website/context.py index cf573202fd..0656157a77 100644 --- a/frappe/website/context.py +++ b/frappe/website/context.py @@ -50,7 +50,7 @@ def build_context(sitemap_options): # provide bean if context.doctype and context.docname: - context.bean = frappe.bean(context.doctype, context.docname) + context.bean = frappe.get_doc(context.doctype, context.docname) if context.controller: module = frappe.get_module(context.controller) diff --git a/frappe/website/doctype/blog_post/blog_post.py b/frappe/website/doctype/blog_post/blog_post.py index 4c2a6b85ab..aaaa551b83 100644 --- a/frappe/website/doctype/blog_post/blog_post.py +++ b/frappe/website/doctype/blog_post/blog_post.py @@ -11,7 +11,7 @@ from frappe import _ from frappe.utils import today class BlogPost(WebsiteGenerator): - self.save_versions = True + save_versions = True def get_page_title(self): return self.title diff --git a/frappe/website/doctype/blog_post/test_blog_post.py b/frappe/website/doctype/blog_post/test_blog_post.py index da132ccac2..e37a55c908 100644 --- a/frappe/website/doctype/blog_post/test_blog_post.py +++ b/frappe/website/doctype/blog_post/test_blog_post.py @@ -39,11 +39,11 @@ class TestBlogPost(unittest.TestCase): frappe.clear_cache(doctype="Blog Post") - user = frappe.bean("User", "test1@example.com") - user.get_controller().add_roles("Website Manager") + user = frappe.get_doc("User", "test1@example.com") + user.add_roles("Website Manager") - user = frappe.bean("User", "test2@example.com") - user.get_controller().add_roles("Blogger") + user = frappe.get_doc("User", "test2@example.com") + user.add_roles("Blogger") frappe.set_user("test1@example.com") @@ -53,17 +53,17 @@ class TestBlogPost(unittest.TestCase): clear_restrictions("Blog Post") def test_basic_permission(self): - post = frappe.bean("Blog Post", "_test-blog-post") + post = frappe.get_doc("Blog Post", "_test-blog-post") self.assertTrue(post.has_read_perm()) def test_restriction_in_bean(self): frappe.defaults.add_default("Blog Category", "_Test Blog Category 1", "test1@example.com", "Restriction") - post = frappe.bean("Blog Post", "_test-blog-post") + post = frappe.get_doc("Blog Post", "_test-blog-post") self.assertFalse(post.has_read_perm()) - post1 = frappe.bean("Blog Post", "_test-blog-post-1") + post1 = frappe.get_doc("Blog Post", "_test-blog-post-1") self.assertTrue(post1.has_read_perm()) def test_restriction_in_report(self): @@ -92,10 +92,10 @@ class TestBlogPost(unittest.TestCase): frappe.set_user("test2@example.com") - post = frappe.bean("Blog Post", "_test-blog-post") + post = frappe.get_doc("Blog Post", "_test-blog-post") self.assertTrue(post.has_read_perm()) - post1 = frappe.bean("Blog Post", "_test-blog-post-1") + post1 = frappe.get_doc("Blog Post", "_test-blog-post-1") self.assertFalse(post1.has_read_perm()) def test_owner_match_report(self): @@ -130,11 +130,11 @@ class TestBlogPost(unittest.TestCase): frappe.set_user("test2@example.com") # user can only access restricted blog post - bean = frappe.bean("Blog Post", "_test-blog-post") + bean = frappe.get_doc("Blog Post", "_test-blog-post") self.assertTrue(bean.has_read_perm()) # and not this one - bean = frappe.bean("Blog Post", "_test-blog-post-1") + bean = frappe.get_doc("Blog Post", "_test-blog-post-1") self.assertFalse(bean.has_read_perm()) def test_not_allowed_to_remove_self(self): @@ -151,21 +151,21 @@ class TestBlogPost(unittest.TestCase): self.add_restricted_on_blogger() frappe.set_user("test2@example.com") - bean = frappe.bean("Blog Post", "_test-blog-post-1") + bean = frappe.get_doc("Blog Post", "_test-blog-post-1") self.assertFalse(bean.has_read_perm()) frappe.set_user("test1@example.com") add("test2@example.com", "Blog Post", "_test-blog-post-1") frappe.set_user("test2@example.com") - bean = frappe.bean("Blog Post", "_test-blog-post-1") + bean = frappe.get_doc("Blog Post", "_test-blog-post-1") self.assertTrue(bean.has_read_perm()) def test_set_only_once(self): blog_post = frappe.get_meta("Blog Post") blog_post.get_field("title").set_only_once = 1 - bean = frappe.bean("Blog Post", "_test-blog-post-1") + bean = frappe.get_doc("Blog Post", "_test-blog-post-1") bean.title = "New" self.assertRaises(frappe.CannotChangeConstantError, bean.save) blog_post.get_field("title").set_only_once = 0 diff --git a/frappe/website/doctype/blogger/blogger.py b/frappe/website/doctype/blogger/blogger.py index 32d41d76c0..4acc91408c 100644 --- a/frappe/website/doctype/blogger/blogger.py +++ b/frappe/website/doctype/blogger/blogger.py @@ -20,6 +20,6 @@ class Blogger(Document): if self.user: for blog in frappe.db.sql_list("""select name from `tabBlog Post` where owner=%s and ifnull(blogger,'')=''""", self.user): - b = frappe.bean("Blog Post", blog) + b = frappe.get_doc("Blog Post", blog) b.blogger = self.name b.save() \ No newline at end of file diff --git a/frappe/website/doctype/post/post.py b/frappe/website/doctype/post/post.py index 1023613b3e..0533eb101e 100644 --- a/frappe/website/doctype/post/post.py +++ b/frappe/website/doctype/post/post.py @@ -54,7 +54,7 @@ class Post(Document): def send_email_on_reply(self): owner_fullname = get_fullname(self.owner) - parent_post = frappe.bean("Post", self.parent_post).doc + parent_post = frappe.get_doc("Post", self.parent_post).doc message = self.get_reply_email_message(self.name, owner_fullname) diff --git a/frappe/website/doctype/user_vote/user_vote.py b/frappe/website/doctype/user_vote/user_vote.py index f6b6c25e6d..b0a333534e 100644 --- a/frappe/website/doctype/user_vote/user_vote.py +++ b/frappe/website/doctype/user_vote/user_vote.py @@ -42,7 +42,7 @@ def set_vote(ref_doctype, ref_name): raise frappe.PermissionError try: - user_vote = frappe.bean({ + user_vote = frappe.get_doc({ "doctype": "User Vote", "ref_doctype": ref_doctype, "ref_name": ref_name diff --git a/frappe/website/doctype/web_page/test_web_page.py b/frappe/website/doctype/web_page/test_web_page.py index fcdd0fda17..edffd53e37 100644 --- a/frappe/website/doctype/web_page/test_web_page.py +++ b/frappe/website/doctype/web_page/test_web_page.py @@ -60,7 +60,7 @@ class TestWebPage(unittest.TestCase): {"ref_doctype":"Web Page", "docname": "test-web-page-5"}, 'idx'), 2) def test_check_rename(self): - web_page = frappe.bean("Web Page", "test-web-page-1") + web_page = frappe.get_doc("Web Page", "test-web-page-1") web_page.parent_website_route = "test-web-page-4" web_page.save() @@ -76,7 +76,7 @@ class TestWebPage(unittest.TestCase): "test-web-page-1/test-web-page-2") def test_check_move(self): - web_page = frappe.bean("Web Page", "test-web-page-3") + web_page = frappe.get_doc("Web Page", "test-web-page-3") web_page.parent_website_route = "test-web-page-4" web_page.save() @@ -89,7 +89,7 @@ class TestWebPage(unittest.TestCase): self.assertEquals(frappe.db.get_value("Website Route", {"ref_doctype":"Web Page", "docname": "test-web-page-5"}, 'idx'), 1) - web_page = frappe.bean("Web Page", "test-web-page-3") + web_page = frappe.get_doc("Web Page", "test-web-page-3") web_page.parent_website_route = "test-web-page-1" web_page.save() diff --git a/frappe/website/doctype/website_route/website_route.py b/frappe/website/doctype/website_route/website_route.py index 83dfeccf0b..d7c873341b 100644 --- a/frappe/website/doctype/website_route/website_route.py +++ b/frappe/website/doctype/website_route/website_route.py @@ -11,7 +11,7 @@ sitemap_fields = ("page_name", "ref_doctype", "docname", "page_or_generator", "i "lastmod", "parent_website_route", "public_read", "public_write", "page_title") class WebsiteRoute(DocTypeNestedSet): - self.nsm_parent_field = "parent_website_route" + nsm_parent_field = "parent_website_route" def autoname(self): self.name = self.get_url() @@ -97,7 +97,7 @@ class WebsiteRoute(DocTypeNestedSet): # rename children for name in frappe.db.sql_list("""select name from `tabWebsite Route` where parent_website_route=%s""", self.name): - child = frappe.bean("Website Route", name) + child = frappe.get_doc("Website Route", name) child.parent_website_route = self.name child.save() @@ -139,32 +139,32 @@ class WebsiteRoute(DocTypeNestedSet): clear_cache(self.parent_website_route) def add_to_sitemap(options): - bean = frappe.new_bean("Website Route") + website_route = frappe.new_doc("Website Route") for key in sitemap_fields: - bean.set(key, options.get(key)) - if not bean.page_name: - bean.page_name = options.get("link_name") - bean.website_template = options.get("link_name") + website_route.set(key, options.get(key)) + if not website_route.page_name: + website_route.page_name = options.get("link_name") + website_route.website_template = options.get("link_name") - bean.insert(ignore_permissions=True) + website_route.insert(ignore_permissions=True) - return bean.idx + return website_route.idx def update_sitemap(website_route, options): - bean = frappe.bean("Website Route", website_route) + website_route = frappe.get_doc("Website Route", website_route) for key in sitemap_fields: - bean.set(key, options.get(key)) + website_route.set(key, options.get(key)) - if not bean.page_name: + if not website_route.page_name: # for pages - bean.page_name = options.get("link_name") + website_route.page_name = options.get("link_name") - bean.website_template = options.get("link_name") - bean.save(ignore_permissions=True) + website_route.website_template = options.get("link_name") + website_route.save(ignore_permissions=True) - return bean.idx + return website_route.idx def remove_sitemap(page_name=None, ref_doctype=None, docname=None): if page_name: diff --git a/frappe/website/doctype/website_settings/website_settings.py b/frappe/website/doctype/website_settings/website_settings.py index b646488943..068d96d35f 100644 --- a/frappe/website/doctype/website_settings/website_settings.py +++ b/frappe/website/doctype/website_settings/website_settings.py @@ -80,7 +80,7 @@ def get_website_settings(): ] }) - settings = frappe.doc("Website Settings", "Website Settings") + settings = frappe.get_doc("Website Settings", "Website Settings") for k in ["banner_html", "brand_html", "copyright", "twitter_share_via", "favicon", "facebook_share", "google_plus_one", "twitter_share", "linked_in_share", "disable_signup"]: diff --git a/frappe/website/doctype/website_slideshow/website_slideshow.py b/frappe/website/doctype/website_slideshow/website_slideshow.py index b0d1f5ead1..8978eebd63 100644 --- a/frappe/website/doctype/website_slideshow/website_slideshow.py +++ b/frappe/website/doctype/website_slideshow/website_slideshow.py @@ -16,7 +16,7 @@ class WebsiteSlideshow(Document): clear_cache() def get_slideshow(bean): - slideshow = frappe.bean("Website Slideshow", bean.slideshow) + slideshow = frappe.get_doc("Website Slideshow", bean.slideshow) return { "slides": slideshow.doclist.get({"doctype":"Website Slideshow Item"}), diff --git a/frappe/website/doctype/website_template/website_template.py b/frappe/website/doctype/website_template/website_template.py index e342c0333a..2f0357a23a 100644 --- a/frappe/website/doctype/website_template/website_template.py +++ b/frappe/website/doctype/website_template/website_template.py @@ -20,9 +20,9 @@ class WebsiteTemplate(Document): website_route = frappe.db.get_value("Website Route", {"website_template": self.name, "page_or_generator": "Page"}) - opts = self.copy() + opts = self.as_dict() opts.update({"public_read": 1}) - + if website_route: update_sitemap(website_route, opts) else: @@ -37,13 +37,13 @@ class WebsiteTemplate(Document): {condition} order by idx asc, {sort_field} {sort_order}""".format( doctype = self.ref_doctype, condition = condition, - sort_field = self.sort_field or "name", - sort_order = self.sort_order or "asc" + sort_field = getattr(self, "sort_field", "name"), + sort_order = getattr(self, "sort_order", "asc") )): - bean = frappe.bean(self.ref_doctype, name) + doc = frappe.get_doc(self.ref_doctype, name) # regenerate route - bean.run_method("on_update") + doc.run_method("on_update") def rebuild_website_template(): # TODO @@ -127,7 +127,7 @@ def add_website_template(page_or_generator, app, path, fname, app_path): # found by earlier app, override frappe.db.sql("""delete from `tabWebsite Template` where name=%s""", (wsc.link_name,)) - frappe.bean(wsc).insert() + frappe.get_doc(wsc).insert() return name diff --git a/frappe/website/page/sitemap_browser/sitemap_browser.py b/frappe/website/page/sitemap_browser/sitemap_browser.py index d638c54bab..df04e9f27a 100644 --- a/frappe/website/page/sitemap_browser/sitemap_browser.py +++ b/frappe/website/page/sitemap_browser/sitemap_browser.py @@ -24,10 +24,10 @@ def move(name, up_or_down): if not frappe.has_permission("Website Route"): raise frappe.PermissionError - sitemap = frappe.doc("Website Route", name) + sitemap = frappe.get_doc("Website Route", name) if up_or_down=="up": if sitemap.idx > 0: - prev = frappe.doc("Website Route", { + prev = frappe.get_doc("Website Route", { "parent_website_route": sitemap.parent_website_route, "idx": sitemap.idx - 1 }) @@ -40,7 +40,7 @@ def move(name, up_or_down): ret = "ok" else: - nexts = frappe.doc("Website Route", { + nexts = frappe.get_doc("Website Route", { "parent_website_route": sitemap.parent_website_route, "idx": sitemap.idx + 1 }) @@ -60,10 +60,10 @@ def update_parent(name, new_parent): if not frappe.has_permission("Website Route"): raise frappe.PermissionError - sitemap = frappe.doc("Website Route", name) + sitemap = frappe.get_doc("Website Route", name) if sitemap.ref_doctype: - generator = frappe.bean(sitemap.ref_doctype, sitemap.docname) + generator = frappe.get_doc(sitemap.ref_doctype, sitemap.docname) if not generator.meta.has_field("parent_website_route"): frappe.throw("Does not allow moving.") generator.parent_website_route = new_parent diff --git a/frappe/website/sitemap.py b/frappe/website/sitemap.py index f401dfedc8..5face42e0f 100644 --- a/frappe/website/sitemap.py +++ b/frappe/website/sitemap.py @@ -21,10 +21,10 @@ def get_sitemap_options(path): return frappe._dict(sitemap_options) def build_sitemap_options(path): - sitemap_options = frappe._dict(frappe.doc("Website Route", path).fields) + sitemap_options = frappe._dict(frappe.get_doc("Website Route", path).fields) home_page = get_home_page() - sitemap_config = frappe.doc("Website Template", + sitemap_config = frappe.get_doc("Website Template", sitemap_options.get("website_template")).fields # get sitemap config fields too @@ -65,7 +65,7 @@ def set_sidebar_items(sitemap_options, pathname, home_page): if sitemap_options.children: # if children are from generator and sort order is specified, then get that condition - website_template = frappe.doc("Website Template", sitemap_options.children[0].website_template) + website_template = frappe.get_doc("Website Template", sitemap_options.children[0].website_template) if website_template.sort_by!="name": sitemap_options.children = frappe.db.sql("""select t1.* from `tabWebsite Route` t1, `tab{ref_doctype}` t2 @@ -75,5 +75,5 @@ def set_sidebar_items(sitemap_options, pathname, home_page): order by t2.{sort_by} {sort_order}""".format(**website_template.fields), pathname, as_dict=True) - sitemap_options.children = [frappe.doc("Website Route", pathname).fields] + sitemap_options.children + sitemap_options.children = [frappe.get_doc("Website Route", pathname).fields] + sitemap_options.children diff --git a/frappe/website/statics.py b/frappe/website/statics.py index 879ff91943..3bdfed5f54 100644 --- a/frappe/website/statics.py +++ b/frappe/website/statics.py @@ -111,7 +111,7 @@ class sync(object): self.insert_web_page(route, fpath, page_name, priority, parent_website_route) def insert_web_page(self, route, fpath, page_name, priority, parent_website_route): - page = frappe.bean({ + page = frappe.get_doc({ "doctype":"Web Page", "idx": priority, "page_name": page_name, @@ -125,7 +125,7 @@ class sync(object): page.insert() except NameError: # page exists, if deleted static, delete it and try again - old_route = frappe.doc("Website Route", {"ref_doctype":"Web Page", + old_route = frappe.get_doc("Website Route", {"ref_doctype":"Web Page", "docname": page.name}) if old_route.static_file_timestamp and not os.path.exists(os.path.join(self.statics_path, old_route.name)): @@ -135,7 +135,7 @@ class sync(object): # update timestamp - route_bean = frappe.bean("Website Route", {"ref_doctype": "Web Page", + route_bean = frappe.get_doc("Website Route", {"ref_doctype": "Web Page", "docname": page.name}) route_bean.static_file_timestamp = cint(os.path.getmtime(fpath)) route_bean.save() @@ -148,12 +148,12 @@ class sync(object): if str(cint(os.path.getmtime(fpath)))!= route_details.static_file_timestamp \ or (cint(route_details.idx) != cint(priority) and (priority is not None)): - page = frappe.bean("Web Page", route_details.docname) + page = frappe.get_doc("Web Page", route_details.docname) page.update(get_static_content(fpath, route_details.docname)) page.idx = priority page.save() - route_bean = frappe.bean("Website Route", route_details.name) + route_bean = frappe.get_doc("Website Route", route_details.name) route_bean.static_file_timestamp = cint(os.path.getmtime(fpath)) route_bean.save() diff --git a/frappe/widgets/calendar.py b/frappe/widgets/calendar.py index 763ef854ac..8cc8c27a3c 100644 --- a/frappe/widgets/calendar.py +++ b/frappe/widgets/calendar.py @@ -11,7 +11,7 @@ import json def update_event(args, field_map): args = frappe._dict(json.loads(args)) field_map = frappe._dict(json.loads(field_map)) - w = frappe.bean(args.doctype, args.name) + w = frappe.get_doc(args.doctype, args.name) w.set(field_map.start, args[field_map.start]) w.set(field_map.end, args[field_map.end]) w.save() diff --git a/frappe/widgets/form/assign_to.py b/frappe/widgets/form/assign_to.py index c54d1db422..c787451aec 100644 --- a/frappe/widgets/form/assign_to.py +++ b/frappe/widgets/form/assign_to.py @@ -34,7 +34,7 @@ def add(args=None): else: from frappe.utils import nowdate - d = frappe.bean({ + d = frappe.get_doc({ "doctype":"ToDo", "owner": args['assign_to'], "reference_type": args['doctype'], @@ -79,7 +79,7 @@ def add(args=None): @frappe.whitelist() def remove(doctype, name, assign_to): """remove from todo""" - todo = frappe.bean("ToDo", {"reference_type":doctype, "reference_name":name, "owner":assign_to, "status":"Open"}) + todo = frappe.get_doc("ToDo", {"reference_type":doctype, "reference_name":name, "owner":assign_to, "status":"Open"}) todo.status = "Closed" todo.save(ignore_permissions=True) diff --git a/frappe/widgets/form/utils.py b/frappe/widgets/form/utils.py index 91bcc3f012..a32b445146 100644 --- a/frappe/widgets/form/utils.py +++ b/frappe/widgets/form/utils.py @@ -59,7 +59,7 @@ def add_comment(doclist): doclist = json.loads(doclist) doclist[0]["__islocal"] = 1 - doclistobj = frappe.bean(doclist) + doclistobj = frappe.get_doc(doclist) doclistobj.ignore_permissions = True doclistobj.save() diff --git a/frappe/widgets/query_report.py b/frappe/widgets/query_report.py index 1064677abe..d489280be0 100644 --- a/frappe/widgets/query_report.py +++ b/frappe/widgets/query_report.py @@ -13,7 +13,7 @@ from frappe.utils import flt, cint import frappe.widgets.reportview def get_report_doc(report_name): - bean = frappe.bean("Report", report_name) + bean = frappe.get_doc("Report", report_name) if not bean.has_read_perm(): raise frappe.PermissionError("You don't have access to: {report}".format(report=report_name)) diff --git a/frappe/widgets/reportview.py b/frappe/widgets/reportview.py index 74ef85dac2..a6447579af 100644 --- a/frappe/widgets/reportview.py +++ b/frappe/widgets/reportview.py @@ -63,7 +63,7 @@ def save_report(): d.report_type = "Report Builder" d.json = data['json'] - frappe.bean([d]).save() + frappe.get_doc([d]).save() frappe.msgprint("%s saved." % d.name) return d.name