You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

365 lines
14 KiB

  1. from __future__ import unicode_literals
  2. from . import __version__ as app_version
  3. app_name = "frappe"
  4. app_title = "Frappe Framework"
  5. app_publisher = "Frappe Technologies"
  6. app_description = "Full stack web framework with Python, Javascript, MariaDB, Redis, Node"
  7. app_icon = "octicon octicon-circuit-board"
  8. app_color = "orange"
  9. source_link = "https://github.com/frappe/frappe"
  10. app_license = "MIT"
  11. app_logo_url = '/assets/frappe/images/frappe-framework-logo.png'
  12. develop_version = '13.x.x-develop'
  13. app_email = "info@frappe.io"
  14. docs_app = "frappe_io"
  15. translator_url = "https://translate.erpnext.com"
  16. before_install = "frappe.utils.install.before_install"
  17. after_install = "frappe.utils.install.after_install"
  18. page_js = {
  19. "setup-wizard": "public/js/frappe/setup_wizard.js"
  20. }
  21. # website
  22. app_include_js = [
  23. "assets/js/libs.min.js",
  24. "assets/js/desk.min.js",
  25. "assets/js/list.min.js",
  26. "assets/js/form.min.js",
  27. "assets/js/control.min.js",
  28. "assets/js/report.min.js",
  29. ]
  30. app_include_css = [
  31. "assets/css/desk.min.css",
  32. "assets/css/list.min.css",
  33. "assets/css/form.min.css",
  34. "assets/css/report.min.css",
  35. ]
  36. doctype_js = {
  37. "Web Page": "public/js/frappe/utils/web_template.js",
  38. "Website Settings": "public/js/frappe/utils/web_template.js"
  39. }
  40. web_include_js = [
  41. "website_script.js"
  42. ]
  43. web_include_css = []
  44. website_route_rules = [
  45. {"from_route": "/blog/<category>", "to_route": "Blog Post"},
  46. {"from_route": "/kb/<category>", "to_route": "Help Article"},
  47. {"from_route": "/newsletters", "to_route": "Newsletter"},
  48. {"from_route": "/profile", "to_route": "me"},
  49. ]
  50. base_template = "templates/base.html"
  51. write_file_keys = ["file_url", "file_name"]
  52. notification_config = "frappe.core.notifications.get_notification_config"
  53. before_tests = "frappe.utils.install.before_tests"
  54. email_append_to = ["Event", "ToDo", "Communication"]
  55. get_rooms = 'frappe.chat.doctype.chat_room.chat_room.get_rooms'
  56. calendars = ["Event"]
  57. leaderboards = "frappe.desk.leaderboard.get_leaderboards"
  58. # login
  59. on_session_creation = [
  60. "frappe.core.doctype.activity_log.feed.login_feed",
  61. "frappe.core.doctype.user.user.notify_admin_access_to_system_manager"
  62. ]
  63. on_logout = "frappe.core.doctype.session_default_settings.session_default_settings.clear_session_defaults"
  64. # permissions
  65. permission_query_conditions = {
  66. "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
  67. "ToDo": "frappe.desk.doctype.todo.todo.get_permission_query_conditions",
  68. "User": "frappe.core.doctype.user.user.get_permission_query_conditions",
  69. "Dashboard Settings": "frappe.desk.doctype.dashboard_settings.dashboard_settings.get_permission_query_conditions",
  70. "Notification Log": "frappe.desk.doctype.notification_log.notification_log.get_permission_query_conditions",
  71. "Dashboard": "frappe.desk.doctype.dashboard.dashboard.get_permission_query_conditions",
  72. "Dashboard Chart": "frappe.desk.doctype.dashboard_chart.dashboard_chart.get_permission_query_conditions",
  73. "Number Card": "frappe.desk.doctype.number_card.number_card.get_permission_query_conditions",
  74. "Notification Settings": "frappe.desk.doctype.notification_settings.notification_settings.get_permission_query_conditions",
  75. "Note": "frappe.desk.doctype.note.note.get_permission_query_conditions",
  76. "Kanban Board": "frappe.desk.doctype.kanban_board.kanban_board.get_permission_query_conditions",
  77. "Contact": "frappe.contacts.address_and_contact.get_permission_query_conditions_for_contact",
  78. "Address": "frappe.contacts.address_and_contact.get_permission_query_conditions_for_address",
  79. "Communication": "frappe.core.doctype.communication.communication.get_permission_query_conditions_for_communication",
  80. "Workflow Action": "frappe.workflow.doctype.workflow_action.workflow_action.get_permission_query_conditions",
  81. "Prepared Report": "frappe.core.doctype.prepared_report.prepared_report.get_permission_query_condition"
  82. }
  83. has_permission = {
  84. "Event": "frappe.desk.doctype.event.event.has_permission",
  85. "ToDo": "frappe.desk.doctype.todo.todo.has_permission",
  86. "User": "frappe.core.doctype.user.user.has_permission",
  87. "Note": "frappe.desk.doctype.note.note.has_permission",
  88. "Dashboard Chart": "frappe.desk.doctype.dashboard_chart.dashboard_chart.has_permission",
  89. "Number Card": "frappe.desk.doctype.number_card.number_card.has_permission",
  90. "Kanban Board": "frappe.desk.doctype.kanban_board.kanban_board.has_permission",
  91. "Contact": "frappe.contacts.address_and_contact.has_permission",
  92. "Address": "frappe.contacts.address_and_contact.has_permission",
  93. "Communication": "frappe.core.doctype.communication.communication.has_permission",
  94. "Workflow Action": "frappe.workflow.doctype.workflow_action.workflow_action.has_permission",
  95. "File": "frappe.core.doctype.file.file.has_permission",
  96. "Prepared Report": "frappe.core.doctype.prepared_report.prepared_report.has_permission"
  97. }
  98. has_website_permission = {
  99. "Address": "frappe.contacts.doctype.address.address.has_website_permission"
  100. }
  101. standard_queries = {
  102. "User": "frappe.core.doctype.user.user.user_query"
  103. }
  104. doc_events = {
  105. "*": {
  106. "after_insert": [
  107. "frappe.event_streaming.doctype.event_update_log.event_update_log.notify_consumers"
  108. ],
  109. "on_update": [
  110. "frappe.desk.notifications.clear_doctype_notifications",
  111. "frappe.core.doctype.activity_log.feed.update_feed",
  112. "frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions",
  113. "frappe.automation.doctype.assignment_rule.assignment_rule.apply",
  114. "frappe.core.doctype.file.file.attach_files_to_document",
  115. "frappe.event_streaming.doctype.event_update_log.event_update_log.notify_consumers",
  116. "frappe.automation.doctype.assignment_rule.assignment_rule.update_due_date",
  117. ],
  118. "after_rename": "frappe.desk.notifications.clear_doctype_notifications",
  119. "on_cancel": [
  120. "frappe.desk.notifications.clear_doctype_notifications",
  121. "frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions"
  122. ],
  123. "on_trash": [
  124. "frappe.desk.notifications.clear_doctype_notifications",
  125. "frappe.workflow.doctype.workflow_action.workflow_action.process_workflow_actions",
  126. "frappe.event_streaming.doctype.event_update_log.event_update_log.notify_consumers"
  127. ],
  128. "on_change": [
  129. "frappe.social.doctype.energy_point_rule.energy_point_rule.process_energy_points",
  130. "frappe.automation.doctype.milestone_tracker.milestone_tracker.evaluate_milestone"
  131. ]
  132. },
  133. "Event": {
  134. "after_insert": "frappe.integrations.doctype.google_calendar.google_calendar.insert_event_in_google_calendar",
  135. "on_update": "frappe.integrations.doctype.google_calendar.google_calendar.update_event_in_google_calendar",
  136. "on_trash": "frappe.integrations.doctype.google_calendar.google_calendar.delete_event_from_google_calendar",
  137. },
  138. "Contact": {
  139. "after_insert": "frappe.integrations.doctype.google_contacts.google_contacts.insert_contacts_to_google_contacts",
  140. "on_update": "frappe.integrations.doctype.google_contacts.google_contacts.update_contacts_to_google_contacts",
  141. },
  142. "DocType": {
  143. "after_insert": "frappe.cache_manager.build_domain_restriced_doctype_cache",
  144. "after_save": "frappe.cache_manager.build_domain_restriced_doctype_cache",
  145. },
  146. "Page": {
  147. "after_insert": "frappe.cache_manager.build_domain_restriced_page_cache",
  148. "after_save": "frappe.cache_manager.build_domain_restriced_page_cache",
  149. }
  150. }
  151. scheduler_events = {
  152. "cron": {
  153. "0/15 * * * *": [
  154. "frappe.oauth.delete_oauth2_data",
  155. "frappe.website.doctype.web_page.web_page.check_publish_status",
  156. "frappe.twofactor.delete_all_barcodes_for_users"
  157. ]
  158. },
  159. "all": [
  160. "frappe.email.queue.flush",
  161. "frappe.email.doctype.email_account.email_account.pull",
  162. "frappe.email.doctype.email_account.email_account.notify_unreplied",
  163. "frappe.integrations.doctype.razorpay_settings.razorpay_settings.capture_payment",
  164. 'frappe.utils.global_search.sync_global_search',
  165. "frappe.monitor.flush",
  166. ],
  167. "hourly": [
  168. "frappe.model.utils.link_count.update_link_count",
  169. 'frappe.model.utils.user_settings.sync_user_settings',
  170. "frappe.utils.error.collect_error_snapshots",
  171. "frappe.desk.page.backups.backups.delete_downloadable_backups",
  172. "frappe.deferred_insert.save_to_db",
  173. "frappe.desk.form.document_follow.send_hourly_updates",
  174. "frappe.integrations.doctype.google_calendar.google_calendar.sync",
  175. "frappe.email.doctype.newsletter.newsletter.send_scheduled_email",
  176. "frappe.utils.password.delete_password_reset_cache"
  177. ],
  178. "daily": [
  179. "frappe.email.queue.set_expiry_for_email_queue",
  180. "frappe.desk.notifications.clear_notifications",
  181. "frappe.core.doctype.error_log.error_log.set_old_logs_as_seen",
  182. "frappe.desk.doctype.event.event.send_event_digest",
  183. "frappe.sessions.clear_expired_sessions",
  184. "frappe.email.doctype.notification.notification.trigger_daily_alerts",
  185. "frappe.realtime.remove_old_task_logs",
  186. "frappe.utils.scheduler.restrict_scheduler_events_if_dormant",
  187. "frappe.email.doctype.auto_email_report.auto_email_report.send_daily",
  188. "frappe.website.doctype.personal_data_deletion_request.personal_data_deletion_request.remove_unverified_record",
  189. "frappe.desk.form.document_follow.send_daily_updates",
  190. "frappe.social.doctype.energy_point_settings.energy_point_settings.allocate_review_points",
  191. "frappe.integrations.doctype.google_contacts.google_contacts.sync",
  192. "frappe.automation.doctype.auto_repeat.auto_repeat.make_auto_repeat_entry",
  193. "frappe.automation.doctype.auto_repeat.auto_repeat.set_auto_repeat_as_completed",
  194. "frappe.email.doctype.unhandled_email.unhandled_email.remove_old_unhandled_emails",
  195. "frappe.core.doctype.prepared_report.prepared_report.delete_expired_prepared_reports",
  196. "frappe.core.doctype.log_settings.log_settings.run_log_clean_up"
  197. ],
  198. "daily_long": [
  199. "frappe.integrations.doctype.dropbox_settings.dropbox_settings.take_backups_daily",
  200. "frappe.utils.change_log.check_for_update",
  201. "frappe.integrations.doctype.s3_backup_settings.s3_backup_settings.take_backups_daily",
  202. "frappe.integrations.doctype.google_drive.google_drive.daily_backup"
  203. ],
  204. "weekly_long": [
  205. "frappe.integrations.doctype.dropbox_settings.dropbox_settings.take_backups_weekly",
  206. "frappe.integrations.doctype.s3_backup_settings.s3_backup_settings.take_backups_weekly",
  207. "frappe.desk.doctype.route_history.route_history.flush_old_route_records",
  208. "frappe.desk.form.document_follow.send_weekly_updates",
  209. "frappe.social.doctype.energy_point_log.energy_point_log.send_weekly_summary",
  210. "frappe.integrations.doctype.google_drive.google_drive.weekly_backup"
  211. ],
  212. "monthly": [
  213. "frappe.email.doctype.auto_email_report.auto_email_report.send_monthly",
  214. "frappe.social.doctype.energy_point_log.energy_point_log.send_monthly_summary"
  215. ],
  216. "monthly_long": [
  217. "frappe.integrations.doctype.s3_backup_settings.s3_backup_settings.take_backups_monthly"
  218. ]
  219. }
  220. get_translated_dict = {
  221. ("doctype", "System Settings"): "frappe.geo.country_info.get_translated_dict",
  222. ("page", "setup-wizard"): "frappe.geo.country_info.get_translated_dict"
  223. }
  224. sounds = [
  225. {"name": "email", "src": "/assets/frappe/sounds/email.mp3", "volume": 0.1},
  226. {"name": "submit", "src": "/assets/frappe/sounds/submit.mp3", "volume": 0.1},
  227. {"name": "cancel", "src": "/assets/frappe/sounds/cancel.mp3", "volume": 0.1},
  228. {"name": "delete", "src": "/assets/frappe/sounds/delete.mp3", "volume": 0.05},
  229. {"name": "click", "src": "/assets/frappe/sounds/click.mp3", "volume": 0.05},
  230. {"name": "error", "src": "/assets/frappe/sounds/error.mp3", "volume": 0.1},
  231. {"name": "alert", "src": "/assets/frappe/sounds/alert.mp3", "volume": 0.2},
  232. # {"name": "chime", "src": "/assets/frappe/sounds/chime.mp3"},
  233. # frappe.chat sounds
  234. { "name": "chat-message", "src": "/assets/frappe/sounds/chat-message.mp3", "volume": 0.1 },
  235. { "name": "chat-notification", "src": "/assets/frappe/sounds/chat-notification.mp3", "volume": 0.1 }
  236. # frappe.chat sounds
  237. ]
  238. bot_parsers = [
  239. 'frappe.utils.bot.ShowNotificationBot',
  240. 'frappe.utils.bot.GetOpenListBot',
  241. 'frappe.utils.bot.ListBot',
  242. 'frappe.utils.bot.FindBot',
  243. 'frappe.utils.bot.CountBot'
  244. ]
  245. setup_wizard_exception = [
  246. "frappe.desk.page.setup_wizard.setup_wizard.email_setup_wizard_exception",
  247. "frappe.desk.page.setup_wizard.setup_wizard.log_setup_wizard_exception"
  248. ]
  249. before_migrate = ['frappe.patches.v11_0.sync_user_permission_doctype_before_migrate.execute']
  250. after_migrate = ['frappe.website.doctype.website_theme.website_theme.after_migrate']
  251. otp_methods = ['OTP App','Email','SMS']
  252. user_privacy_documents = [
  253. {
  254. 'doctype': 'File',
  255. 'match_field': 'attached_to_name',
  256. 'personal_fields': ['file_name', 'file_url'],
  257. 'applies_to_website_user': 1
  258. },
  259. {
  260. 'doctype': 'Email Group Member',
  261. 'match_field': 'email',
  262. },
  263. {
  264. 'doctype': 'Email Unsubscribe',
  265. 'match_field': 'email',
  266. },
  267. {
  268. 'doctype': 'Email Queue',
  269. 'match_field': 'sender',
  270. },
  271. {
  272. 'doctype': 'Email Queue Recipient',
  273. 'match_field': 'recipient',
  274. },
  275. {
  276. 'doctype': 'Contact',
  277. 'match_field': 'email_id',
  278. 'personal_fields': ['first_name', 'last_name', 'phone', 'mobile_no'],
  279. },
  280. {
  281. 'doctype': 'Contact Email',
  282. 'match_field': 'email_id',
  283. },
  284. {
  285. 'doctype': 'Address',
  286. 'match_field': 'email_id',
  287. 'personal_fields': ['address_title', 'address_line1', 'address_line2', 'city', 'county', 'state', 'pincode',
  288. 'phone', 'fax'],
  289. },
  290. {
  291. 'doctype': 'Communication',
  292. 'match_field': 'sender',
  293. 'personal_fields': ['sender_full_name', 'phone_no', 'content'],
  294. },
  295. {
  296. 'doctype': 'Communication',
  297. 'match_field': 'recipients',
  298. },
  299. {
  300. 'doctype': 'User',
  301. 'match_field': 'name',
  302. 'personal_fields': ['email', 'username', 'first_name', 'middle_name', 'last_name', 'full_name', 'birth_date',
  303. 'user_image', 'phone', 'mobile_no', 'location', 'banner_image', 'interest', 'bio', 'email_signature'],
  304. 'applies_to_website_user': 1
  305. },
  306. ]
  307. global_search_doctypes = {
  308. "Default": [
  309. {"doctype": "Contact"},
  310. {"doctype": "Address"},
  311. {"doctype": "ToDo"},
  312. {"doctype": "Note"},
  313. {"doctype": "Event"},
  314. {"doctype": "Blog Post"},
  315. {"doctype": "Dashboard"},
  316. {"doctype": "Country"},
  317. {"doctype": "Currency"},
  318. {"doctype": "Newsletter"},
  319. {"doctype": "Letter Head"},
  320. {"doctype": "Workflow"},
  321. {"doctype": "Web Page"},
  322. {"doctype": "Web Form"}
  323. ]
  324. }