Rushabh Mehta 11 years ago
parent
commit
7bef30b270
76 changed files with 238 additions and 216 deletions
  1. +0
    -18
      frappe/__init__.py
  2. +1
    -1
      frappe/api.py
  3. +10
    -10
      frappe/client.py
  4. +4
    -4
      frappe/core/doctype/comment/test_comment.py
  5. +1
    -1
      frappe/core/doctype/communication/communication.py
  6. +1
    -1
      frappe/core/doctype/custom_field/custom_field.py
  7. +1
    -1
      frappe/core/doctype/customize_form/customize_form.py
  8. +1
    -0
      frappe/core/doctype/defaultvalue/defaultvalue.py
  9. +5
    -3
      frappe/core/doctype/doctype/doctype.py
  10. +1
    -1
      frappe/core/doctype/event/event.py
  11. +5
    -5
      frappe/core/doctype/event/test_event.py
  12. +1
    -1
      frappe/core/doctype/file_data/file_data.py
  13. +5
    -2
      frappe/core/doctype/notification_count/notification_count.py
  14. +2
    -2
      frappe/core/doctype/print_format/print_format.py
  15. +1
    -1
      frappe/core/doctype/property_setter/property_setter.py
  16. +1
    -1
      frappe/core/doctype/todo/todo.py
  17. +3
    -3
      frappe/core/doctype/user/test_user.py
  18. +4
    -4
      frappe/core/doctype/user/user.py
  19. +3
    -2
      frappe/core/doctype/version/version.py
  20. +1
    -1
      frappe/core/doctype/workflow/workflow.py
  21. +6
    -6
      frappe/core/page/data_import_tool/data_import_tool.py
  22. +1
    -1
      frappe/core/page/permission_manager/permission_manager.py
  23. +1
    -1
      frappe/database.py
  24. +1
    -1
      frappe/defaults.py
  25. +1
    -1
      frappe/handler.py
  26. +1
    -1
      frappe/installer.py
  27. +1
    -1
      frappe/model/__init__.py
  28. +5
    -2
      frappe/model/base_document.py
  29. +0
    -1
      frappe/model/create_new.py
  30. +16
    -9
      frappe/model/document.py
  31. +20
    -4
      frappe/model/meta.py
  32. +3
    -1
      frappe/model/naming.py
  33. +2
    -2
      frappe/model/rename_doc.py
  34. +17
    -15
      frappe/modules/import_file.py
  35. +1
    -1
      frappe/modules/patch_handler.py
  36. +3
    -3
      frappe/permissions.py
  37. +1
    -1
      frappe/templates/generators/blog_post.py
  38. +2
    -2
      frappe/templates/generators/website_group.py
  39. +1
    -1
      frappe/templates/includes/comments.py
  40. +1
    -1
      frappe/templates/pages/about.py
  41. +1
    -1
      frappe/templates/pages/blog.py
  42. +2
    -2
      frappe/templates/pages/contact.py
  43. +3
    -3
      frappe/templates/pages/login.py
  44. +1
    -1
      frappe/templates/pages/rss.py
  45. +1
    -1
      frappe/templates/pages/style_settings.py
  46. +1
    -1
      frappe/templates/pages/writers.py
  47. +5
    -5
      frappe/templates/website_group/post.py
  48. +4
    -4
      frappe/templates/website_group/settings.py
  49. +4
    -0
      frappe/tests/test_document.py
  50. +1
    -1
      frappe/translate.py
  51. +2
    -2
      frappe/utils/datautils.py
  52. +1
    -1
      frappe/utils/email_lib/bulk.py
  53. +1
    -1
      frappe/utils/email_lib/smtp.py
  54. +4
    -4
      frappe/utils/file_manager.py
  55. +2
    -2
      frappe/utils/install.py
  56. +1
    -1
      frappe/utils/scheduler.py
  57. +2
    -2
      frappe/utils/user.py
  58. +1
    -1
      frappe/website/context.py
  59. +1
    -1
      frappe/website/doctype/blog_post/blog_post.py
  60. +14
    -14
      frappe/website/doctype/blog_post/test_blog_post.py
  61. +1
    -1
      frappe/website/doctype/blogger/blogger.py
  62. +1
    -1
      frappe/website/doctype/post/post.py
  63. +1
    -1
      frappe/website/doctype/user_vote/user_vote.py
  64. +3
    -3
      frappe/website/doctype/web_page/test_web_page.py
  65. +16
    -16
      frappe/website/doctype/website_route/website_route.py
  66. +1
    -1
      frappe/website/doctype/website_settings/website_settings.py
  67. +1
    -1
      frappe/website/doctype/website_slideshow/website_slideshow.py
  68. +7
    -7
      frappe/website/doctype/website_template/website_template.py
  69. +5
    -5
      frappe/website/page/sitemap_browser/sitemap_browser.py
  70. +4
    -4
      frappe/website/sitemap.py
  71. +5
    -5
      frappe/website/statics.py
  72. +1
    -1
      frappe/widgets/calendar.py
  73. +2
    -2
      frappe/widgets/form/assign_to.py
  74. +1
    -1
      frappe/widgets/form/utils.py
  75. +1
    -1
      frappe/widgets/query_report.py
  76. +1
    -1
      frappe/widgets/reportview.py

+ 0
- 18
frappe/__init__.py View File

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


+ 1
- 1
frappe/api.py View File

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


+ 10
- 10
frappe/client.py View File

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


+ 4
- 4
frappe/core/doctype/comment/test_comment.py View File

@@ -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)
#


+ 1
- 1
frappe/core/doctype/communication/communication.py View File

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


+ 1
- 1
frappe/core/doctype/custom_field/custom_field.py View File

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


+ 1
- 1
frappe/core/doctype/customize_form/customize_form.py View File

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


+ 1
- 0
frappe/core/doctype/defaultvalue/defaultvalue.py View File

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


+ 5
- 3
frappe/core/doctype/doctype/doctype.py View File

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


+ 1
- 1
frappe/core/doctype/event/event.py View File

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


+ 5
- 5
frappe/core/doctype/event/test_event.py View File

@@ -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):


+ 1
- 1
frappe/core/doctype/file_data/file_data.py View File

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


+ 5
- 2
frappe/core/doctype/notification_count/notification_count.py View File

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


+ 2
- 2
frappe/core/doctype/print_format/print_format.py View File

@@ -48,7 +48,7 @@ def get_args():
<pre>%s</pre>""" % 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



+ 1
- 1
frappe/core/doctype/property_setter/property_setter.py View File

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


+ 1
- 1
frappe/core/doctype/todo/todo.py View File

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


+ 3
- 3
frappe/core/doctype/user/test_user.py View File

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


+ 4
- 4
frappe/core/doctype/user/user.py View File

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


+ 3
- 2
frappe/core/doctype/version/version.py View File

@@ -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()
frappe.get_doc(doclist).save()

+ 1
- 1
frappe/core/doctype/workflow/workflow.py View File

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


+ 6
- 6
frappe/core/page/data_import_tool/data_import_tool.py View File

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


+ 1
- 1
frappe/core/page/permission_manager/permission_manager.py View File

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


+ 1
- 1
frappe/database.py View File

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


+ 1
- 1
frappe/defaults.py View File

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


+ 1
- 1
frappe/handler.py View File

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


+ 1
- 1
frappe/installer.py View File

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


+ 1
- 1
frappe/model/__init__.py View File

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


+ 5
- 2
frappe/model/base_document.py View File

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


+ 0
- 1
frappe/model/create_new.py View File

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


+ 16
- 9
frappe/model/document.py View File

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


+ 20
- 4
frappe/model/meta.py View File

@@ -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:"}))


+ 3
- 1
frappe/model/naming.py View File

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


+ 2
- 2
frappe/model/rename_doc.py View File

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


+ 17
- 15
frappe/modules/import_file.py View File

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


+ 1
- 1
frappe/modules/patch_handler.py View File

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


+ 3
- 3
frappe/permissions.py View File

@@ -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):


+ 1
- 1
frappe/templates/generators/blog_post.py View File

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


+ 2
- 2
frappe/templates/generators/website_group.py View File

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


+ 1
- 1
frappe/templates/includes/comments.py View File

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


+ 1
- 1
frappe/templates/pages/about.py View File

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

+ 1
- 1
frappe/templates/pages/blog.py View File

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

+ 2
- 2
frappe/templates/pages/contact.py View File

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


+ 3
- 3
frappe/templates/pages/login.py View File

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

+ 1
- 1
frappe/templates/pages/rss.py View File

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


+ 1
- 1
frappe/templates/pages/style_settings.py View File

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


+ 1
- 1
frappe/templates/pages/writers.py View File

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

+ 5
- 5
frappe/templates/website_group/post.py View File

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


+ 4
- 4
frappe/templates/website_group/settings.py View File

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


+ 4
- 0
frappe/tests/test_document.py View File

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


+ 1
- 1
frappe/translate.py View File

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


+ 2
- 2
frappe/utils/datautils.py View File

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


+ 1
- 1
frappe/utils/email_lib/bulk.py View File

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


+ 1
- 1
frappe/utils/email_lib/smtp.py View File

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


+ 4
- 4
frappe/utils/file_manager.py View File

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



+ 2
- 2
frappe/utils/install.py View File

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


+ 1
- 1
frappe/utils/scheduler.py View File

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


+ 2
- 2
frappe/utils/user.py View File

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


+ 1
- 1
frappe/website/context.py View File

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


+ 1
- 1
frappe/website/doctype/blog_post/blog_post.py View File

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


+ 14
- 14
frappe/website/doctype/blog_post/test_blog_post.py View File

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


+ 1
- 1
frappe/website/doctype/blogger/blogger.py View File

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

+ 1
- 1
frappe/website/doctype/post/post.py View File

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


+ 1
- 1
frappe/website/doctype/user_vote/user_vote.py View File

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


+ 3
- 3
frappe/website/doctype/web_page/test_web_page.py View File

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


+ 16
- 16
frappe/website/doctype/website_route/website_route.py View File

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


+ 1
- 1
frappe/website/doctype/website_settings/website_settings.py View File

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


+ 1
- 1
frappe/website/doctype/website_slideshow/website_slideshow.py View File

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


+ 7
- 7
frappe/website/doctype/website_template/website_template.py View File

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


+ 5
- 5
frappe/website/page/sitemap_browser/sitemap_browser.py View File

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


+ 4
- 4
frappe/website/sitemap.py View File

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

+ 5
- 5
frappe/website/statics.py View File

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



+ 1
- 1
frappe/widgets/calendar.py View File

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


+ 2
- 2
frappe/widgets/form/assign_to.py View File

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


+ 1
- 1
frappe/widgets/form/utils.py View File

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


+ 1
- 1
frappe/widgets/query_report.py View File

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


+ 1
- 1
frappe/widgets/reportview.py View File

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



Loading…
Cancel
Save