From e69de80cfc89fb6fb9a08ff60811df4e6f56fb4d Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Thu, 27 Mar 2014 16:12:32 +0530 Subject: [PATCH] #478 --- frappe/core/doctype/bulk_email/bulk_email.py | 7 ++-- frappe/core/doctype/comment/comment.py | 6 +-- .../doctype/communication/communication.py | 8 ++-- .../doctype/control_panel/control_panel.py | 7 ++-- .../core/doctype/custom_field/custom_field.py | 6 +-- .../doctype/custom_script/custom_script.py | 6 +-- .../doctype/customize_form/customize_form.py | 12 +++--- .../customize_form_field.py | 7 ++-- .../default_home_page/default_home_page.py | 7 ++-- .../core/doctype/defaultvalue/defaultvalue.py | 6 +-- frappe/core/doctype/docfield/docfield.py | 7 ++-- frappe/core/doctype/docperm/docperm.py | 7 ++-- frappe/core/doctype/doctype/doctype.py | 2 +- .../core/doctype/doctype/doctype_template.py | 6 +-- frappe/core/doctype/event/event.py | 8 ---- frappe/core/doctype/event_role/event_role.py | 7 ++-- frappe/core/doctype/event_user/event_user.py | 7 ++-- frappe/core/doctype/file_data/file_data.py | 6 +-- .../core/doctype/letter_head/letter_head.py | 7 ++-- frappe/core/doctype/module_def/module_def.py | 7 ++-- .../notification_count/notification_count.py | 6 +-- .../outgoing_email_settings.py | 6 +-- frappe/core/doctype/page_role/page_role.py | 7 ++-- frappe/core/doctype/patch_log/patch_log.py | 7 ++-- .../core/doctype/print_format/print_format.py | 4 +- .../property_setter/property_setter.py | 6 +-- frappe/core/doctype/report/report.py | 4 +- frappe/core/doctype/role/role.py | 7 ++-- .../doctype/scheduler_log/scheduler_log.py | 7 ++-- .../social_login_keys/social_login_keys.py | 7 ++-- frappe/core/doctype/tag/tag.py | 7 ++-- frappe/core/doctype/todo/todo.py | 6 +-- frappe/core/doctype/user/user.py | 9 ++--- frappe/core/doctype/userrole/userrole.py | 6 +-- frappe/core/doctype/version/version.py | 6 +-- frappe/core/doctype/workflow/workflow.py | 6 +-- .../workflow_action/workflow_action.py | 7 ++-- .../workflow_document_state.py | 7 ++-- .../doctype/workflow_state/workflow_state.py | 7 ++-- .../workflow_transition.py | 7 ++-- frappe/model/__init__.py | 4 +- frappe/model/base_document.py | 18 +++++++-- frappe/model/bean.py | 5 +-- frappe/model/controller.py | 2 +- frappe/model/doc.py | 39 +------------------ frappe/model/document.py | 22 +++++++++-- frappe/utils/nestedset.py | 3 +- .../about_us_settings/about_us_settings.py | 6 +-- .../about_us_team_member.py | 7 ++-- .../doctype/blog_category/blog_category.py | 4 +- frappe/website/doctype/blog_post/blog_post.py | 4 +- .../doctype/blog_settings/blog_settings.py | 6 +-- frappe/website/doctype/blogger/blogger.py | 6 +-- .../company_history/company_history.py | 7 ++-- .../contact_us_settings.py | 6 +-- frappe/website/doctype/post/post.py | 6 +-- .../doctype/style_settings/style_settings.py | 6 +-- .../doctype/top_bar_item/top_bar_item.py | 7 ++-- frappe/website/doctype/user_vote/user_vote.py | 6 +-- .../doctype/website_group/website_group.py | 4 +- .../doctype/website_route/website_route.py | 4 +- .../website_route_permission.py | 6 +-- .../doctype/website_script/website_script.py | 6 +-- .../website_settings/website_settings.py | 6 +-- .../website_slideshow/website_slideshow.py | 6 +-- .../website_slideshow_item.py | 7 ++-- .../website_template/website_template.py | 6 +-- 67 files changed, 231 insertions(+), 243 deletions(-) diff --git a/frappe/core/doctype/bulk_email/bulk_email.py b/frappe/core/doctype/bulk_email/bulk_email.py index a48f49f2a7..3aa353233a 100644 --- a/frappe/core/doctype/bulk_email/bulk_email.py +++ b/frappe/core/doctype/bulk_email/bulk_email.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class BulkEmail(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/comment/comment.py b/frappe/core/doctype/comment/comment.py index 145625131a..bfff8da333 100644 --- a/frappe/core/doctype/comment/comment.py +++ b/frappe/core/doctype/comment/comment.py @@ -5,9 +5,9 @@ from __future__ import unicode_literals import frappe, json from frappe.website.render import clear_cache -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class Comment(Document): def validate(self): if frappe.db.sql("""select count(*) from tabComment where comment_doctype=%s diff --git a/frappe/core/doctype/communication/communication.py b/frappe/core/doctype/communication/communication.py index 42b1d8d43a..28d55c200c 100644 --- a/frappe/core/doctype/communication/communication.py +++ b/frappe/core/doctype/communication/communication.py @@ -12,11 +12,9 @@ from frappe.utils.email_lib.email_body import get_email from frappe.utils.email_lib.smtp import send from frappe.utils import scrub_urls -class DocType(): - def __init__(self, doc, doclist=None): - self.doc = doc - self.doclist = doclist - +from frappe.model.document import Document + +class Communication(Document): def get_parent_bean(self): return frappe.bean(self.doc.parenttype, self.doc.parent) diff --git a/frappe/core/doctype/control_panel/control_panel.py b/frappe/core/doctype/control_panel/control_panel.py index 673b1a33be..d4de2f70fd 100644 --- a/frappe/core/doctype/control_panel/control_panel.py +++ b/frappe/core/doctype/control_panel/control_panel.py @@ -7,10 +7,9 @@ import frappe from frappe import form, msgprint import frappe.defaults -class DocType: - def __init__(self, doc, doclist): - self.doc = doc - self.doclist = doclist +from frappe.model.document import Document + +class ControlPanel(Document): def on_update(self): # clear cache on save diff --git a/frappe/core/doctype/custom_field/custom_field.py b/frappe/core/doctype/custom_field/custom_field.py index e2520f0425..04f52e762d 100644 --- a/frappe/core/doctype/custom_field/custom_field.py +++ b/frappe/core/doctype/custom_field/custom_field.py @@ -6,9 +6,9 @@ import frappe from frappe.utils import cint, cstr from frappe import _ -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class CustomField(Document): def autoname(self): self.set_fieldname() diff --git a/frappe/core/doctype/custom_script/custom_script.py b/frappe/core/doctype/custom_script/custom_script.py index 6907e986b7..d2be1c8a6d 100644 --- a/frappe/core/doctype/custom_script/custom_script.py +++ b/frappe/core/doctype/custom_script/custom_script.py @@ -4,9 +4,9 @@ from __future__ import unicode_literals import frappe from frappe.utils import cstr -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class CustomScript(Document): def autoname(self): self.doc.name = self.doc.dt + "-" + self.doc.script_type diff --git a/frappe/core/doctype/customize_form/customize_form.py b/frappe/core/doctype/customize_form/customize_form.py index 5401135212..82ac597d97 100644 --- a/frappe/core/doctype/customize_form/customize_form.py +++ b/frappe/core/doctype/customize_form/customize_form.py @@ -9,7 +9,9 @@ from __future__ import unicode_literals import frappe, json from frappe.utils import cstr -class DocType: +from frappe.model.document import Document + +class CustomizeForm(Document): def __init__(self, doc, doclist=[]): self.doc, self.doclist = doc, doclist self.doctype_properties = [ @@ -57,12 +59,10 @@ class DocType: self.clear() if self.doc.doc_type: - from frappe.model.doc import addchild - + for d in self.get_ref_doclist(): if d.doctype=='DocField': - new = addchild(self.doc, 'fields', 'Customize Form Field', - self.doclist) + new = self.doc.append('fields', {}) self.set( { 'list': self.docfield_properties, @@ -94,7 +94,7 @@ class DocType: Clear fields in the doc """ # Clear table before adding new doctype's fields - self.doclist = self.doc.clear_table(self.doclist, 'fields') + self.set('fields', []) self.set({ 'list': self.doctype_properties, 'value': None }) diff --git a/frappe/core/doctype/customize_form_field/customize_form_field.py b/frappe/core/doctype/customize_form_field/customize_form_field.py index a48f49f2a7..4d2118a4a8 100644 --- a/frappe/core/doctype/customize_form_field/customize_form_field.py +++ b/frappe/core/doctype/customize_form_field/customize_form_field.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class CustomizeFormField(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/default_home_page/default_home_page.py b/frappe/core/doctype/default_home_page/default_home_page.py index a48f49f2a7..9993435b1a 100644 --- a/frappe/core/doctype/default_home_page/default_home_page.py +++ b/frappe/core/doctype/default_home_page/default_home_page.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class DefaultHomePage(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/defaultvalue/defaultvalue.py b/frappe/core/doctype/defaultvalue/defaultvalue.py index ed3b873f7d..2099698b54 100644 --- a/frappe/core/doctype/defaultvalue/defaultvalue.py +++ b/frappe/core/doctype/defaultvalue/defaultvalue.py @@ -4,9 +4,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class Defaultvalue(Document): def on_doctype_update(): if not frappe.db.sql("""show index from `tabDefaultValue` diff --git a/frappe/core/doctype/docfield/docfield.py b/frappe/core/doctype/docfield/docfield.py index a48f49f2a7..118a032b23 100644 --- a/frappe/core/doctype/docfield/docfield.py +++ b/frappe/core/doctype/docfield/docfield.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class DocField(Document): + pass diff --git a/frappe/core/doctype/docperm/docperm.py b/frappe/core/doctype/docperm/docperm.py index a48f49f2a7..00bffbfe52 100644 --- a/frappe/core/doctype/docperm/docperm.py +++ b/frappe/core/doctype/docperm/docperm.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class DocPerm(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index 2c05017e67..9013ce8474 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -134,7 +134,7 @@ class DocType(Document): with open(pypath, 'w') as pyfile: with open(os.path.join(get_module_path("core"), "doctype", "doctype", "doctype_template.py"), 'r') as srcfile: - pyfile.write(srcfile.read().format(app_publisher=app_publisher)) + pyfile.write(srcfile.read().format(app_publisher=app_publisher, classname=self.name.replace(" ", ""))) def make_amendable(self): """ diff --git a/frappe/core/doctype/doctype/doctype_template.py b/frappe/core/doctype/doctype/doctype_template.py index bb4f563ecf..369bd592d8 100644 --- a/frappe/core/doctype/doctype/doctype_template.py +++ b/frappe/core/doctype/doctype/doctype_template.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe +from frappe.model.document import Document -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +class {classname}(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/event/event.py b/frappe/core/doctype/event/event.py index 9e99b08f0a..31a2dabf82 100644 --- a/frappe/core/doctype/event/event.py +++ b/frappe/core/doctype/event/event.py @@ -14,14 +14,6 @@ class Event(Document): def validate(self): if self.starts_on and self.ends_on and self.starts_on > self.ends_on: frappe.msgprint(frappe._("Event End must be after Start"), raise_exception=True) - -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl - - def validate(self): - if self.doc.starts_on and self.doc.ends_on and self.doc.starts_on > self.doc.ends_on: - frappe.msgprint(frappe._("Event End must be after Start"), raise_exception=True) def get_permission_query_conditions(): return """(tabEvent.event_type='Public' or tabEvent.owner='%(user)s' diff --git a/frappe/core/doctype/event_role/event_role.py b/frappe/core/doctype/event_role/event_role.py index a48f49f2a7..cb24e5f51e 100644 --- a/frappe/core/doctype/event_role/event_role.py +++ b/frappe/core/doctype/event_role/event_role.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class EventRole(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/event_user/event_user.py b/frappe/core/doctype/event_user/event_user.py index a48f49f2a7..3d4591739b 100644 --- a/frappe/core/doctype/event_user/event_user.py +++ b/frappe/core/doctype/event_user/event_user.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class EventUser(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/file_data/file_data.py b/frappe/core/doctype/file_data/file_data.py index 242f32d8e7..ede5dd57e6 100644 --- a/frappe/core/doctype/file_data/file_data.py +++ b/frappe/core/doctype/file_data/file_data.py @@ -10,11 +10,9 @@ naming for same name files: file.gif, file-1.gif, file-2.gif etc import frappe, frappe.utils, os from frappe import conf +from frappe.model.document import Document -class DocType(): - def __init__(self, d, dl): - self.doc, self.doclist = d, dl - +class FileData(Document): def before_insert(self): frappe.local.rollback_observers.append(self) diff --git a/frappe/core/doctype/letter_head/letter_head.py b/frappe/core/doctype/letter_head/letter_head.py index 9e1c0a6f32..f004a73804 100755 --- a/frappe/core/doctype/letter_head/letter_head.py +++ b/frappe/core/doctype/letter_head/letter_head.py @@ -5,10 +5,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, doc, doclist=[]): - self.doc = doc - self.doclist = doclist +from frappe.model.document import Document + +class LetterHead(Document): def validate(self): self.set_as_default() diff --git a/frappe/core/doctype/module_def/module_def.py b/frappe/core/doctype/module_def/module_def.py index a48f49f2a7..b8b6fab465 100644 --- a/frappe/core/doctype/module_def/module_def.py +++ b/frappe/core/doctype/module_def/module_def.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class ModuleDef(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/notification_count/notification_count.py b/frappe/core/doctype/notification_count/notification_count.py index 21d81c4247..cd58e9aa46 100644 --- a/frappe/core/doctype/notification_count/notification_count.py +++ b/frappe/core/doctype/notification_count/notification_count.py @@ -6,9 +6,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class NotificationCount(Document): @frappe.whitelist() def get_notifications(): diff --git a/frappe/core/doctype/outgoing_email_settings/outgoing_email_settings.py b/frappe/core/doctype/outgoing_email_settings/outgoing_email_settings.py index e37bbe22a5..2d10488761 100644 --- a/frappe/core/doctype/outgoing_email_settings/outgoing_email_settings.py +++ b/frappe/core/doctype/outgoing_email_settings/outgoing_email_settings.py @@ -6,9 +6,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class OutgoingEmailSettings(Document): def validate(self): self.doc.encode() diff --git a/frappe/core/doctype/page_role/page_role.py b/frappe/core/doctype/page_role/page_role.py index a48f49f2a7..9752238bb2 100644 --- a/frappe/core/doctype/page_role/page_role.py +++ b/frappe/core/doctype/page_role/page_role.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class PageRole(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/patch_log/patch_log.py b/frappe/core/doctype/patch_log/patch_log.py index cb42e2eea2..18a3dc2aed 100644 --- a/frappe/core/doctype/patch_log/patch_log.py +++ b/frappe/core/doctype/patch_log/patch_log.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class PatchLog(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/print_format/print_format.py b/frappe/core/doctype/print_format/print_format.py index 637adb3d11..e5787c6584 100644 --- a/frappe/core/doctype/print_format/print_format.py +++ b/frappe/core/doctype/print_format/print_format.py @@ -8,7 +8,9 @@ from frappe.modules import get_doc_path standard_format = "templates/print_formats/standard.html" -class DocType: +from frappe.model.document import Document + +class PrintFormat(Document): def __init__(self, d, dl): self.doc, self.doclist = d,dl diff --git a/frappe/core/doctype/property_setter/property_setter.py b/frappe/core/doctype/property_setter/property_setter.py index 9e19f63ec5..e72b5ec1ed 100644 --- a/frappe/core/doctype/property_setter/property_setter.py +++ b/frappe/core/doctype/property_setter/property_setter.py @@ -4,9 +4,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class PropertySetter(Document): def autoname(self): self.doc.name = self.doc.doc_type + "-" \ diff --git a/frappe/core/doctype/report/report.py b/frappe/core/doctype/report/report.py index 881949ff0e..f130efe581 100644 --- a/frappe/core/doctype/report/report.py +++ b/frappe/core/doctype/report/report.py @@ -5,7 +5,9 @@ from __future__ import unicode_literals import frappe from frappe import conf, _ -class DocType: +from frappe.model.document import Document + +class Report(Document): def __init__(self, doc, doclist): self.doc, self.doclist = doc, doclist diff --git a/frappe/core/doctype/role/role.py b/frappe/core/doctype/role/role.py index a48f49f2a7..219bed3579 100644 --- a/frappe/core/doctype/role/role.py +++ b/frappe/core/doctype/role/role.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class Role(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/scheduler_log/scheduler_log.py b/frappe/core/doctype/scheduler_log/scheduler_log.py index cb42e2eea2..58185eb867 100644 --- a/frappe/core/doctype/scheduler_log/scheduler_log.py +++ b/frappe/core/doctype/scheduler_log/scheduler_log.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class SchedulerLog(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/social_login_keys/social_login_keys.py b/frappe/core/doctype/social_login_keys/social_login_keys.py index cb42e2eea2..1a6b2389e0 100644 --- a/frappe/core/doctype/social_login_keys/social_login_keys.py +++ b/frappe/core/doctype/social_login_keys/social_login_keys.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class SocialLoginKeys(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/tag/tag.py b/frappe/core/doctype/tag/tag.py index a48f49f2a7..668d620f78 100644 --- a/frappe/core/doctype/tag/tag.py +++ b/frappe/core/doctype/tag/tag.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class Tag(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/todo/todo.py b/frappe/core/doctype/todo/todo.py index 2203546c0a..9c9639df94 100644 --- a/frappe/core/doctype/todo/todo.py +++ b/frappe/core/doctype/todo/todo.py @@ -4,9 +4,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class Todo(Document): def validate(self): if self.doc.is_new(): diff --git a/frappe/core/doctype/user/user.py b/frappe/core/doctype/user/user.py index 1f8b9be91e..88fdc0c7d7 100644 --- a/frappe/core/doctype/user/user.py +++ b/frappe/core/doctype/user/user.py @@ -9,10 +9,9 @@ from frappe.auth import _update_password STANDARD_USERS = ("Guest", "Administrator") -class DocType: - def __init__(self, doc, doclist): - self.doc = doc - self.doclist = doclist +from frappe.model.document import Document + +class User(Document): def autoname(self): """set name as email id""" @@ -49,7 +48,7 @@ class DocType: def add_system_manager_role(self): # if adding system manager, do nothing if not cint(self.doc.enabled) or ("System Manager" in [user_role.role for user_role in - self.doclist.get({"parentfield": "user_roles"})]): + self.get("user_roles")]): return if self.doc.user_type == "System User" and not self.get_other_system_managers(): diff --git a/frappe/core/doctype/userrole/userrole.py b/frappe/core/doctype/userrole/userrole.py index 20f5e77cce..1b31f98aea 100644 --- a/frappe/core/doctype/userrole/userrole.py +++ b/frappe/core/doctype/userrole/userrole.py @@ -5,9 +5,9 @@ from __future__ import unicode_literals import frappe from frappe.utils import cint -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class Userrole(Document): def validate(self): if cint(self.doc.fields.get("__islocal")) and frappe.db.exists("UserRole", { diff --git a/frappe/core/doctype/version/version.py b/frappe/core/doctype/version/version.py index edb6e2e185..ecf721d3b7 100644 --- a/frappe/core/doctype/version/version.py +++ b/frappe/core/doctype/version/version.py @@ -6,9 +6,9 @@ from __future__ import unicode_literals import frappe, json -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class Version(Document): @frappe.whitelist() def restore(version): diff --git a/frappe/core/doctype/workflow/workflow.py b/frappe/core/doctype/workflow/workflow.py index 9550d667d8..213dca2c02 100644 --- a/frappe/core/doctype/workflow/workflow.py +++ b/frappe/core/doctype/workflow/workflow.py @@ -4,9 +4,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class Workflow(Document): def validate(self): self.set_active() diff --git a/frappe/core/doctype/workflow_action/workflow_action.py b/frappe/core/doctype/workflow_action/workflow_action.py index a48f49f2a7..3bf0ee4977 100644 --- a/frappe/core/doctype/workflow_action/workflow_action.py +++ b/frappe/core/doctype/workflow_action/workflow_action.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class WorkflowAction(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/workflow_document_state/workflow_document_state.py b/frappe/core/doctype/workflow_document_state/workflow_document_state.py index a48f49f2a7..fc491ac941 100644 --- a/frappe/core/doctype/workflow_document_state/workflow_document_state.py +++ b/frappe/core/doctype/workflow_document_state/workflow_document_state.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class WorkflowDocumentState(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/workflow_state/workflow_state.py b/frappe/core/doctype/workflow_state/workflow_state.py index a48f49f2a7..83eb8a4dc9 100644 --- a/frappe/core/doctype/workflow_state/workflow_state.py +++ b/frappe/core/doctype/workflow_state/workflow_state.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class WorkflowState(Document): + pass \ No newline at end of file diff --git a/frappe/core/doctype/workflow_transition/workflow_transition.py b/frappe/core/doctype/workflow_transition/workflow_transition.py index a48f49f2a7..69a04db9ee 100644 --- a/frappe/core/doctype/workflow_transition/workflow_transition.py +++ b/frappe/core/doctype/workflow_transition/workflow_transition.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class WorkflowTransition(Document): + pass \ No newline at end of file diff --git a/frappe/model/__init__.py b/frappe/model/__init__.py index 7dd9487f05..10554210bd 100644 --- a/frappe/model/__init__.py +++ b/frappe/model/__init__.py @@ -34,9 +34,9 @@ def copytables(srctype, src, srcfield, tartype, tar, tarfield, srcfields, tarfie if not tarfields: tarfields = srcfields l = [] - data = frappe.model.doc.getchildren(src.name, srctype, srcfield) + data = src.get(srcfield) for d in data: - newrow = frappe.model.doc.addchild(tar, tarfield, tartype) + newrow = tar.append(tarfield) newrow.idx = d.idx for i in range(len(srcfields)): diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index 4877ec97fb..3085ffbed0 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -33,9 +33,15 @@ class BaseDocument(object): def get(self, key=None, filters=None, limit=None, default=None): if key: if filters: - return _filter(self.__dict__.get(key), filters, limit=limit) + value = _filter(self.__dict__.get(key), filters, limit=limit) else: - return self.__dict__.get(key, default) + value = self.__dict__.get(key, default) + + if value is None and key in self.get_table_fields(): + self.set(key, []) + value = self.__dict__.get(key) + + return value else: return self.__dict__ @@ -48,11 +54,15 @@ class BaseDocument(object): self.__dict__[key] = value - def append(self, key, value): + def append(self, key, value=None): + if value==None: + value={} if isinstance(value, dict): if not self.get(key): self.__dict__[key] = [] - self.get(key).append(self._init_child(value, key)) + value = self._init_child(value, key) + self.get(key).append(value) + return value else: raise ValueError diff --git a/frappe/model/bean.py b/frappe/model/bean.py index c7e8ec9411..33e278b163 100644 --- a/frappe/model/bean.py +++ b/frappe/model/bean.py @@ -51,7 +51,6 @@ class Bean: """ Load doclist from dt """ - from frappe.model.doc import getchildren if not dt: dt = self.doc.doctype if not dn: dn = self.doc.name @@ -63,8 +62,6 @@ class Bean: # load chilren doclist = frappe.doclist([doc,]) - for t in tablefields: - doclist += getchildren(doc.name, t[0], t[1], dt) self.set_doclist(doclist) @@ -432,7 +429,7 @@ class Bean: if df.doctype=="DocField" and df.reqd and df.parent==doc.doctype and df.fieldname!="naming_series": msg = "" if df.fieldtype == "Table": - if not self.doclist.get({"parentfield": df.fieldname}): + if not self.get(df.fieldname): msg = _("Error") + ": " + _("Data missing in table") + ": " + _(df.label) elif doc.fields.get(df.fieldname) is None: diff --git a/frappe/model/controller.py b/frappe/model/controller.py index fd01646127..b44a580014 100644 --- a/frappe/model/controller.py +++ b/frappe/model/controller.py @@ -56,7 +56,7 @@ class DocListController(Document): msgprint(msg, raise_exception=raise_exception or True) def validate_table_has_rows(self, parentfield, raise_exception=None): - if not self.doclist.get({"parentfield": parentfield}): + if not self.get(parentfield): label = self.meta.get_label(parentfield) msgprint(_("Error") + ": " + _(label) + " " + _("cannot be empty"), raise_exception=raise_exception or EmptyTableError) diff --git a/frappe/model/doc.py b/frappe/model/doc.py index 144e3b6700..1e547fd122 100755 --- a/frappe/model/doc.py +++ b/frappe/model/doc.py @@ -545,29 +545,6 @@ class Document: self.fields['__unsaved'] = 1 return frappe.doclist(doclist) - - def addchild(self, fieldname, childtype = '', doclist=None): - """ - Returns a child record of the give `childtype`. - - * if local is set, it does not save the record - * if doclist is passed, it append the record to the doclist - """ - from frappe.model.doc import Document - d = Document() - d.parent = self.name - d.parenttype = self.doctype - d.parentfield = fieldname - d.doctype = childtype - d.docstatus = 0; - d.name = '' - d.owner = frappe.session['user'] - d.fields['__islocal'] = 1 # for Client to identify unsaved doc - - if doclist != None: - doclist.append(d) - - return d def get_values(self): """get non-null fields dict withouth standard fields""" @@ -581,21 +558,7 @@ class Document: def get_db_value(self, key): return frappe.db.get_value(self.doctype, self.name, key) - -def addchild(parent, fieldname, childtype = '', doclist=None): - """ - - Create a child record to the parent doc. - - Example:: - - c = Document('Contact','ABC') - d = addchild(c, 'contact_updates', 'Contact Update') - d.last_updated = 'Phone call' - d.save(1) - """ - return parent.addchild(fieldname, childtype, doclist) - + def make_autoname(key, doctype=''): """ Creates an autoname from the given key: diff --git a/frappe/model/document.py b/frappe/model/document.py index 3d2cb04b90..f46849d54c 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -132,12 +132,26 @@ class Document(BaseDocument): self.db_update() # children + child_map = {} ignore_children_type = self.get("_ignore_children_type", []) + for d in self.get_all_children(): - if d.doctype not in _ignore_children_type: - d.parent = self.name - d.db_update() - + d.parent = self.name # rename if reqd + d.parenttype = self.doctype + d.db_update() + child_map.setdefault(d.doctype, []).append(d.name) + + for df in self.get_table_fields(): + if df.options not in ignore_children_type: + cnames = child_map.get(df.options) or [] + if cnames: + frappe.db.sql("""delete from `tab%s` where parent=%s and parenttype=%s and + name not in (%s)""" % (df.options, '%s', '%s', ','.join(['%s'] * len(cnames))), + tuple([self.name, self.doctype] + cnames)) + else: + frappe.db.sql("""delete from `tab%s` where parent=%s and parenttype=%s""" \ + % (df.options, '%s', '%s'), (self.name, self.doctype)) + self.run_post_save_methods() def update_single(self, d): diff --git a/frappe/utils/nestedset.py b/frappe/utils/nestedset.py index 693f2da911..c0f63dbc45 100644 --- a/frappe/utils/nestedset.py +++ b/frappe/utils/nestedset.py @@ -14,6 +14,7 @@ from __future__ import unicode_literals import frappe from frappe import msgprint, _ +from frappe.model.document import Document class NestedSetRecursionError(frappe.ValidationError): pass class NestedSetMultipleRootsError(frappe.ValidationError): pass @@ -188,7 +189,7 @@ def validate_loop(doctype, name, lft, rgt): "%s", "%s"), (lft, rgt)): frappe.throw("""Item cannot be added to its own descendents.""", NestedSetRecursionError) -class DocTypeNestedSet(object): +class DocTypeNestedSet(Document): def on_update(self): update_nsm(self) self.validate_ledger() diff --git a/frappe/website/doctype/about_us_settings/about_us_settings.py b/frappe/website/doctype/about_us_settings/about_us_settings.py index 5c272ba8da..b5c198cbc5 100644 --- a/frappe/website/doctype/about_us_settings/about_us_settings.py +++ b/frappe/website/doctype/about_us_settings/about_us_settings.py @@ -6,9 +6,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class AboutUsSettings(Document): def on_update(self): from frappe.website.render import clear_cache diff --git a/frappe/website/doctype/about_us_team_member/about_us_team_member.py b/frappe/website/doctype/about_us_team_member/about_us_team_member.py index cb42e2eea2..1dea8b4be3 100644 --- a/frappe/website/doctype/about_us_team_member/about_us_team_member.py +++ b/frappe/website/doctype/about_us_team_member/about_us_team_member.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class AboutUsTeamMember(Document): + pass \ No newline at end of file diff --git a/frappe/website/doctype/blog_category/blog_category.py b/frappe/website/doctype/blog_category/blog_category.py index 492ca04eb6..04f819dba3 100644 --- a/frappe/website/doctype/blog_category/blog_category.py +++ b/frappe/website/doctype/blog_category/blog_category.py @@ -6,9 +6,7 @@ import frappe from frappe.website.website_generator import WebsiteGenerator from frappe.website.render import clear_cache -class DocType(WebsiteGenerator): - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +class BlogCategory(WebsiteGenerator): def autoname(self): # to override autoname of WebsiteGenerator diff --git a/frappe/website/doctype/blog_post/blog_post.py b/frappe/website/doctype/blog_post/blog_post.py index 09b09aad52..cae8a6d187 100644 --- a/frappe/website/doctype/blog_post/blog_post.py +++ b/frappe/website/doctype/blog_post/blog_post.py @@ -10,9 +10,7 @@ from frappe.website.render import clear_cache from frappe import _ from frappe.utils import today -class DocType(WebsiteGenerator): - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +class BlogPost(WebsiteGenerator): self.save_versions = True def get_page_title(self): diff --git a/frappe/website/doctype/blog_settings/blog_settings.py b/frappe/website/doctype/blog_settings/blog_settings.py index 2c03816c3c..19a2525ad8 100644 --- a/frappe/website/doctype/blog_settings/blog_settings.py +++ b/frappe/website/doctype/blog_settings/blog_settings.py @@ -6,9 +6,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class BlogSettings(Document): def on_update(self): from frappe.website.render import clear_cache diff --git a/frappe/website/doctype/blogger/blogger.py b/frappe/website/doctype/blogger/blogger.py index 3b71838336..b32ba1106c 100644 --- a/frappe/website/doctype/blogger/blogger.py +++ b/frappe/website/doctype/blogger/blogger.py @@ -7,9 +7,9 @@ from __future__ import unicode_literals import frappe from frappe import _ -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class Blogger(Document): def on_update(self): "if user is set, then update all older blogs" diff --git a/frappe/website/doctype/company_history/company_history.py b/frappe/website/doctype/company_history/company_history.py index cb42e2eea2..83af48808c 100644 --- a/frappe/website/doctype/company_history/company_history.py +++ b/frappe/website/doctype/company_history/company_history.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class CompanyHistory(Document): + pass \ No newline at end of file diff --git a/frappe/website/doctype/contact_us_settings/contact_us_settings.py b/frappe/website/doctype/contact_us_settings/contact_us_settings.py index 12162c1799..c3185832ba 100644 --- a/frappe/website/doctype/contact_us_settings/contact_us_settings.py +++ b/frappe/website/doctype/contact_us_settings/contact_us_settings.py @@ -6,9 +6,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class ContactUsSettings(Document): def on_update(self): from frappe.website.render import clear_cache diff --git a/frappe/website/doctype/post/post.py b/frappe/website/doctype/post/post.py index cc83b76e2a..0b15b97a01 100644 --- a/frappe/website/doctype/post/post.py +++ b/frappe/website/doctype/post/post.py @@ -10,9 +10,9 @@ from frappe.utils import get_fullname from frappe.utils.email_lib.bulk import send from frappe.utils.email_lib import sendmail -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class Post(Document): def validate(self): if not self.doc.parent_post and not self.doc.title: diff --git a/frappe/website/doctype/style_settings/style_settings.py b/frappe/website/doctype/style_settings/style_settings.py index c66e4779d0..5912a95ffc 100644 --- a/frappe/website/doctype/style_settings/style_settings.py +++ b/frappe/website/doctype/style_settings/style_settings.py @@ -7,9 +7,9 @@ import frappe from frappe.utils import cint, cstr from frappe import _ -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class StyleSettings(Document): def validate(self): """make custom css""" diff --git a/frappe/website/doctype/top_bar_item/top_bar_item.py b/frappe/website/doctype/top_bar_item/top_bar_item.py index a48f49f2a7..5e8cd7c469 100644 --- a/frappe/website/doctype/top_bar_item/top_bar_item.py +++ b/frappe/website/doctype/top_bar_item/top_bar_item.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class TopBarItem(Document): + pass \ No newline at end of file diff --git a/frappe/website/doctype/user_vote/user_vote.py b/frappe/website/doctype/user_vote/user_vote.py index 79b8334305..f6e9b51ad6 100644 --- a/frappe/website/doctype/user_vote/user_vote.py +++ b/frappe/website/doctype/user_vote/user_vote.py @@ -5,9 +5,9 @@ from __future__ import unicode_literals import frappe from frappe.website.permissions import get_access -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class UserVote(Document): def validate(self): # if new diff --git a/frappe/website/doctype/website_group/website_group.py b/frappe/website/doctype/website_group/website_group.py index 3068d3984f..536ae27943 100644 --- a/frappe/website/doctype/website_group/website_group.py +++ b/frappe/website/doctype/website_group/website_group.py @@ -7,9 +7,7 @@ from frappe.website.website_generator import WebsiteGenerator from frappe.templates.generators.website_group import clear_cache from frappe.model.doc import make_autoname -class DocType(WebsiteGenerator): - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +class WebsiteGroup(WebsiteGenerator): def get_page_title(self): return self.doc.group_title diff --git a/frappe/website/doctype/website_route/website_route.py b/frappe/website/doctype/website_route/website_route.py index 1498898565..0d58ae0cb3 100644 --- a/frappe/website/doctype/website_route/website_route.py +++ b/frappe/website/doctype/website_route/website_route.py @@ -10,9 +10,7 @@ from frappe.utils.nestedset import DocTypeNestedSet sitemap_fields = ("page_name", "ref_doctype", "docname", "page_or_generator", "idx", "lastmod", "parent_website_route", "public_read", "public_write", "page_title") -class DocType(DocTypeNestedSet): - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +class WebsiteRoute(DocTypeNestedSet): self.nsm_parent_field = "parent_website_route" def autoname(self): diff --git a/frappe/website/doctype/website_route_permission/website_route_permission.py b/frappe/website/doctype/website_route_permission/website_route_permission.py index 3a840cd7df..4c00077c0b 100644 --- a/frappe/website/doctype/website_route_permission/website_route_permission.py +++ b/frappe/website/doctype/website_route_permission/website_route_permission.py @@ -6,9 +6,9 @@ import frappe from frappe.website.permissions import remove_empty_permissions, clear_permissions -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class WebsiteRoutePermission(Document): def on_update(self): remove_empty_permissions() diff --git a/frappe/website/doctype/website_script/website_script.py b/frappe/website/doctype/website_script/website_script.py index 2fdabfe4c1..a50b91d9b9 100644 --- a/frappe/website/doctype/website_script/website_script.py +++ b/frappe/website/doctype/website_script/website_script.py @@ -6,9 +6,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class WebsiteScript(Document): def on_update(self): """clear cache""" diff --git a/frappe/website/doctype/website_settings/website_settings.py b/frappe/website/doctype/website_settings/website_settings.py index 81b59ea6c7..b5b5fed3e3 100644 --- a/frappe/website/doctype/website_settings/website_settings.py +++ b/frappe/website/doctype/website_settings/website_settings.py @@ -8,7 +8,7 @@ from frappe.utils import get_request_site_address, encode from frappe.model.controller import DocListController from urllib import quote -class DocType(DocListController): +class WebsiteSettings(DocListController): def validate(self): self.validate_top_bar_items() self.validate_footer_items() @@ -21,7 +21,7 @@ class DocType(DocListController): def validate_top_bar_items(self): """validate url in top bar items""" - for top_bar_item in self.doclist.get({"parentfield": "top_bar_items"}): + for top_bar_item in self.get("top_bar_items"): if top_bar_item.parent_label: parent_label_item = self.doclist.get({"parentfield": "top_bar_items", "label": top_bar_item.parent_label}) @@ -38,7 +38,7 @@ class DocType(DocListController): def validate_footer_items(self): """clear parent label in footer""" - for footer_item in self.doclist.get({"parentfield": "footer_items"}): + for footer_item in self.get("footer_items"): footer_item.parent_label = None def on_update(self): diff --git a/frappe/website/doctype/website_slideshow/website_slideshow.py b/frappe/website/doctype/website_slideshow/website_slideshow.py index 8f1e859add..ce121731c6 100644 --- a/frappe/website/doctype/website_slideshow/website_slideshow.py +++ b/frappe/website/doctype/website_slideshow/website_slideshow.py @@ -6,9 +6,9 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class WebsiteSlideshow(Document): def on_update(self): # a slide show can be in use and any change in it should get reflected diff --git a/frappe/website/doctype/website_slideshow_item/website_slideshow_item.py b/frappe/website/doctype/website_slideshow_item/website_slideshow_item.py index cb42e2eea2..d782525f4b 100644 --- a/frappe/website/doctype/website_slideshow_item/website_slideshow_item.py +++ b/frappe/website/doctype/website_slideshow_item/website_slideshow_item.py @@ -6,6 +6,7 @@ from __future__ import unicode_literals import frappe -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl \ No newline at end of file +from frappe.model.document import Document + +class WebsiteSlideshowItem(Document): + pass \ No newline at end of file diff --git a/frappe/website/doctype/website_template/website_template.py b/frappe/website/doctype/website_template/website_template.py index c9a8f2af94..12e70eef60 100644 --- a/frappe/website/doctype/website_template/website_template.py +++ b/frappe/website/doctype/website_template/website_template.py @@ -11,9 +11,9 @@ from frappe import _ from frappe.website.doctype.website_route.website_route import add_to_sitemap, update_sitemap, cleanup_sitemap from frappe.utils.nestedset import rebuild_tree -class DocType: - def __init__(self, d, dl): - self.doc, self.doclist = d, dl +from frappe.model.document import Document + +class WebsiteTemplate(Document): def after_insert(self): if self.doc.page_or_generator == "Page":