seitime-frappe/frappe/utils/install.py
Chinmay D. Pai f12ed9791a
fix: remove example users email ids from notifications
currently the system tries sending emails to all users that have
'thread_notify' enabled, including the default example emails that the
Administrator and Guest accounts have. this patch disables email
notifications for these accounts, and additionally tries to disable it
for any other user accounts with example emails

Signed-off-by: Chinmay D. Pai <chinmaydpai@gmail.com>
2020-07-17 11:32:02 +05:30

166 lines
5.4 KiB
Python

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt
from __future__ import unicode_literals, print_function
import frappe
import getpass
from frappe.utils.password import update_password
def before_install():
frappe.reload_doc("core", "doctype", "docfield")
frappe.reload_doc("core", "doctype", "docperm")
frappe.reload_doc("core", "doctype", "doctype")
def after_install():
# reset installed apps for re-install
frappe.db.set_global("installed_apps", '["frappe"]')
install_basic_docs()
from frappe.core.doctype.file.file import make_home_folder
make_home_folder()
import_country_and_currency()
from frappe.core.doctype.language.language import sync_languages
sync_languages()
# save default print setting
print_settings = frappe.get_doc("Print Settings")
print_settings.save()
# all roles to admin
frappe.get_doc("User", "Administrator").add_roles(*frappe.db.sql_list("""select name from tabRole"""))
# update admin password
update_password("Administrator", get_admin_password())
if not frappe.conf.skip_setup_wizard:
frappe.db.set_default('desktop:home_page', 'setup-wizard')
# clear test log
with open(frappe.get_site_path('.test_log'), 'w') as f:
f.write('')
frappe.db.commit()
def install_basic_docs():
# core users / roles
install_docs = [
{'doctype':'User', 'name':'Administrator', 'first_name':'Administrator',
'email':'admin@example.com', 'enabled':1, "is_admin": 1,
'roles': [{'role': 'Administrator'}],
'thread_notify': 0, 'send_me_a_copy': 0
},
{'doctype':'User', 'name':'Guest', 'first_name':'Guest',
'email':'guest@example.com', 'enabled':1, "is_guest": 1,
'roles': [{'role': 'Guest'}],
'thread_notify': 0, 'send_me_a_copy': 0
},
{'doctype': "Role", "role_name": "Report Manager"},
{'doctype': "Role", "role_name": "Translator"},
{'doctype': "Workflow State", "workflow_state_name": "Pending",
"icon": "question-sign", "style": ""},
{'doctype': "Workflow State", "workflow_state_name": "Approved",
"icon": "ok-sign", "style": "Success"},
{'doctype': "Workflow State", "workflow_state_name": "Rejected",
"icon": "remove", "style": "Danger"},
{'doctype': "Workflow Action Master", "workflow_action_name": "Approve"},
{'doctype': "Workflow Action Master", "workflow_action_name": "Reject"},
{'doctype': "Workflow Action Master", "workflow_action_name": "Review"},
{'doctype': "Email Domain", "domain_name":"example.com", "email_id": "account@example.com", "password": "pass", "email_server": "imap.example.com","use_imap": 1, "smtp_server": "smtp.example.com"},
{'doctype': "Email Account", "domain":"example.com", "email_id": "notifications@example.com", "default_outgoing": 1},
{'doctype': "Email Account", "domain":"example.com", "email_id": "replies@example.com", "default_incoming": 1}
]
for d in install_docs:
try:
frappe.get_doc(d).insert()
except frappe.NameError:
pass
def get_admin_password():
def ask_admin_password():
admin_password = getpass.getpass("Set Administrator password: ")
admin_password2 = getpass.getpass("Re-enter Administrator password: ")
if not admin_password == admin_password2:
print("\nPasswords do not match")
return ask_admin_password()
return admin_password
admin_password = frappe.conf.get("admin_password")
if not admin_password:
return ask_admin_password()
return admin_password
def before_tests():
if len(frappe.get_installed_apps()) > 1:
# don't run before tests if any other app is installed
return
frappe.db.sql("delete from `tabCustom Field`")
frappe.db.sql("delete from `tabEvent`")
frappe.db.commit()
frappe.clear_cache()
# complete setup if missing
if not int(frappe.db.get_single_value('System Settings', 'setup_complete') or 0):
complete_setup_wizard()
frappe.db.commit()
frappe.clear_cache()
def complete_setup_wizard():
from frappe.desk.page.setup_wizard.setup_wizard import setup_complete
setup_complete({
"language" :"English",
"email" :"test@erpnext.com",
"full_name" :"Test User",
"password" :"test",
"country" :"United States",
"timezone" :"America/New_York",
"currency" :"USD"
})
def import_country_and_currency():
from frappe.geo.country_info import get_all
from frappe.utils import update_progress_bar
data = get_all()
for i, name in enumerate(data):
update_progress_bar("Updating country info", i, len(data))
country = frappe._dict(data[name])
add_country_and_currency(name, country)
print("")
# enable frequently used currencies
for currency in ("INR", "USD", "GBP", "EUR", "AED", "AUD", "JPY", "CNY", "CHF"):
frappe.db.set_value("Currency", currency, "enabled", 1)
def add_country_and_currency(name, country):
if not frappe.db.exists("Country", name):
frappe.get_doc({
"doctype": "Country",
"country_name": name,
"code": country.code,
"date_format": country.date_format or "dd-mm-yyyy",
"time_format": country.time_format or "HH:mm:ss",
"time_zones": "\n".join(country.timezones or []),
"docstatus": 0
}).db_insert()
if country.currency and not frappe.db.exists("Currency", country.currency):
frappe.get_doc({
"doctype": "Currency",
"currency_name": country.currency,
"fraction": country.currency_fraction,
"symbol": country.currency_symbol,
"fraction_units": country.currency_fraction_units,
"smallest_currency_fraction_value": country.smallest_currency_fraction_value,
"number_format": country.number_format,
"docstatus": 0
}).db_insert()