Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

391 linhas
14 KiB

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