diff --git a/frappe/automation/doctype/assignment_rule/assignment_rule.py b/frappe/automation/doctype/assignment_rule/assignment_rule.py index 5d8dab90ce..0a5d85636f 100644 --- a/frappe/automation/doctype/assignment_rule/assignment_rule.py +++ b/frappe/automation/doctype/assignment_rule/assignment_rule.py @@ -165,7 +165,7 @@ def reopen_closed_assignment(doc): return True def apply(doc, method=None, doctype=None, name=None): - if frappe.flags.in_patch or frappe.flags.in_install: + if frappe.flags.in_patch or frappe.flags.in_install or frappe.flags.in_setup_wizard: return if not doc and doctype and name: diff --git a/frappe/automation/doctype/milestone_tracker/milestone_tracker.py b/frappe/automation/doctype/milestone_tracker/milestone_tracker.py index baa1bcc075..154cb599e1 100644 --- a/frappe/automation/doctype/milestone_tracker/milestone_tracker.py +++ b/frappe/automation/doctype/milestone_tracker/milestone_tracker.py @@ -30,6 +30,10 @@ class MilestoneTracker(Document): )).insert(ignore_permissions=True) def evaluate_milestone(doc, event): + if (frappe.flags.in_install + or frappe.flags.in_migrate + or frappe.flags.in_setup_wizard): + return for d in frappe.cache_manager.get_doctype_map('Milestone Tracker', doc.doctype, dict(document_type = doc.doctype, disabled=0)): frappe.get_doc('Milestone Tracker', d.name).apply(doc) diff --git a/frappe/cache_manager.py b/frappe/cache_manager.py index 1faa02ec63..2578d652b4 100644 --- a/frappe/cache_manager.py +++ b/frappe/cache_manager.py @@ -117,7 +117,11 @@ def clear_doctype_map(doctype, name): frappe.cache().hdel(cache_key, name) def build_table_count_cache(*args, **kwargs): - if frappe.flags.in_patch or frappe.flags.in_install or frappe.flags.in_import: + if (frappe.flags.in_patch + or frappe.flags.in_install + or frappe.flags.in_migrate + or frappe.flags.in_import + or frappe.flags.in_setup_wizard): return _cache = frappe.cache() data = frappe.db.multisql({ @@ -138,7 +142,11 @@ def build_table_count_cache(*args, **kwargs): return counts def build_domain_restriced_doctype_cache(*args, **kwargs): - if frappe.flags.in_patch or frappe.flags.in_install or frappe.flags.in_import: + if (frappe.flags.in_patch + or frappe.flags.in_install + or frappe.flags.in_migrate + or frappe.flags.in_import + or frappe.flags.in_setup_wizard): return _cache = frappe.cache() active_domains = frappe.get_active_domains() @@ -149,7 +157,11 @@ def build_domain_restriced_doctype_cache(*args, **kwargs): return doctypes def build_domain_restriced_page_cache(*args, **kwargs): - if frappe.flags.in_patch or frappe.flags.in_install or frappe.flags.in_import: + if (frappe.flags.in_patch + or frappe.flags.in_install + or frappe.flags.in_migrate + or frappe.flags.in_import + or frappe.flags.in_setup_wizard): return _cache = frappe.cache() active_domains = frappe.get_active_domains() diff --git a/frappe/desk/page/setup_wizard/setup_wizard.py b/frappe/desk/page/setup_wizard/setup_wizard.py index c725ed6c37..71088f8fea 100755 --- a/frappe/desk/page/setup_wizard/setup_wizard.py +++ b/frappe/desk/page/setup_wizard/setup_wizard.py @@ -61,6 +61,7 @@ def setup_complete(args): stages = get_setup_stages(args) try: + frappe.flags.in_setup_wizard = True current_task = None for idx, stage in enumerate(stages): frappe.publish_realtime('setup_task', {"progress": [idx, len(stages)], @@ -75,6 +76,8 @@ def setup_complete(args): else: run_setup_success(args) return {'status': 'ok'} + finally: + frappe.flags.in_setup_wizard = False def update_global_settings(args): if args.language and args.language != "English": @@ -349,6 +352,11 @@ def email_setup_wizard_exception(traceback, args): message=message, delayed=False) +def log_setup_wizard_exception(traceback, args): + with open('../logs/setup-wizard.log', 'w+') as setup_log: + setup_log.write(traceback) + setup_log.write(json.dumps(args)) + def get_language_code(lang): return frappe.db.get_value('Language', {'language_name':lang}) diff --git a/frappe/hooks.py b/frappe/hooks.py index 9d5389b529..cdc6e00bdd 100644 --- a/frappe/hooks.py +++ b/frappe/hooks.py @@ -134,12 +134,13 @@ doc_events = { ], "on_trash": [ "frappe.desk.notifications.clear_doctype_notifications", - "frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions" + "frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions", + "frappe.cache_manager.build_table_count_cache" ], "on_change": [ "frappe.social.doctype.energy_point_rule.energy_point_rule.process_energy_points" ], - "after_insert": "frappe.cache_manager.build_table_count_cache", + "after_insert": "frappe.cache_manager.build_table_count_cache" }, "Event": { "after_insert": "frappe.integrations.doctype.google_calendar.google_calendar.insert_event_in_google_calendar", @@ -257,7 +258,10 @@ bot_parsers = [ 'frappe.utils.bot.CountBot' ] -setup_wizard_exception = "frappe.desk.page.setup_wizard.setup_wizard.email_setup_wizard_exception" +setup_wizard_exception = [ + "frappe.desk.page.setup_wizard.setup_wizard.email_setup_wizard_exception", + "frappe.desk.page.setup_wizard.setup_wizard.log_setup_wizard_exception" +] before_migrate = ['frappe.patches.v11_0.sync_user_permission_doctype_before_migrate.execute'] after_migrate = ['frappe.website.doctype.website_theme.website_theme.generate_theme_files_if_not_exist'] diff --git a/frappe/model/document.py b/frappe/model/document.py index 86bee6cef8..39efe3f4df 100644 --- a/frappe/model/document.py +++ b/frappe/model/document.py @@ -268,7 +268,7 @@ class Document(BaseDocument): if hasattr(self, "__islocal"): delattr(self, "__islocal") - if not (frappe.flags.in_migrate or frappe.local.flags.in_install): + if not (frappe.flags.in_migrate or frappe.local.flags.in_install or frappe.flags.in_setup_wizard): follow_document(self.doctype, self.name, frappe.session.user) return self diff --git a/frappe/model/meta.py b/frappe/model/meta.py index 927a56b6b8..fafaefbfd1 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -529,7 +529,9 @@ def get_field_currency(df, doc=None): if currency: ref_docname = doc.name else: - currency = frappe.db.get_value(doc.parenttype, doc.parent, df.get("options")) + if frappe.get_meta(doc.parenttype).has_field(df.get("options")): + # only get_value if parent has currency field + currency = frappe.db.get_value(doc.parenttype, doc.parent, df.get("options")) if currency: frappe.local.field_currency.setdefault((doc.doctype, ref_docname), frappe._dict())\ diff --git a/frappe/social/doctype/energy_point_rule/energy_point_rule.py b/frappe/social/doctype/energy_point_rule/energy_point_rule.py index 6615c2ab1d..b603cb2b24 100644 --- a/frappe/social/doctype/energy_point_rule/energy_point_rule.py +++ b/frappe/social/doctype/energy_point_rule/energy_point_rule.py @@ -84,7 +84,8 @@ def process_energy_points(doc, state): if (frappe.flags.in_patch or frappe.flags.in_install or frappe.flags.in_migrate - or frappe.flags.in_import): + or frappe.flags.in_import + or frappe.flags.in_setup_wizard): return if not is_energy_point_enabled(): diff --git a/yarn.lock b/yarn.lock index 6de2bd96b2..1b3d0a2176 100644 --- a/yarn.lock +++ b/yarn.lock @@ -392,9 +392,9 @@ ace-builds@^1.4.8: integrity sha512-8ZVAxwyCGAxQX8mOp9imSXH0hoSPkGfy8igJy+WO/7axL30saRhKgg1XPACSmxxPA7nfHVwM+ShWXT+vKsNuFg== acorn@^5.2.1: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== acorn@^6.1.1: version "6.1.1"