您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

158 行
4.8 KiB

  1. from __future__ import unicode_literals
  2. app_name = "frappe"
  3. app_title = "Frappe Framework"
  4. app_publisher = "Frappe Technologies Pvt. Ltd."
  5. app_description = """## Frappe Framework
  6. Frappe is a full stack web application framework written in Python,
  7. Javascript, HTML/CSS with MySQL as the backend. It was built for ERPNext
  8. but is pretty generic and can be used to build database driven apps.
  9. The key differece in Frappe compared to other frameworks is that Frappe
  10. is that meta-data is also treated as data and is used to build front-ends
  11. very easily. Frappe comes with a full blown admin UI called the **Desk**
  12. that handles forms, navigation, lists, menus, permissions, file attachment
  13. and much more out of the box.
  14. Frappe also has a plug-in architecture that can be used to build plugins
  15. to ERPNext.
  16. ### Links:
  17. - Project Home: [https://frappe.io](https://frappe.io)
  18. - Tutorial: [https://frappe.io/tutorial](https://frappe.io/tutorial)
  19. - GitHub: [https://github.com/frappe/frappe](https://github.com/frappe/frappe)
  20. - Forum: [https://discuss.erpnext.com](https://discuss.erpnext.com)
  21. """
  22. app_icon = "octicon octicon-circuit-board"
  23. app_version = "5.4.1"
  24. app_color = "orange"
  25. github_link = "https://github.com/frappe/frappe"
  26. app_email = "info@frappe.io"
  27. before_install = "frappe.utils.install.before_install"
  28. after_install = "frappe.utils.install.after_install"
  29. # website
  30. app_include_js = [
  31. "assets/js/desk.min.js",
  32. "assets/js/editor.min.js",
  33. "assets/js/list.min.js",
  34. "assets/js/form.min.js",
  35. "assets/js/report.min.js",
  36. "assets/js/module.min.js"
  37. ]
  38. app_include_css = [
  39. "assets/css/desk.min.css",
  40. "assets/css/list.min.css",
  41. "assets/css/form.min.css",
  42. "assets/css/report.min.css",
  43. "assets/css/module.min.css"
  44. ]
  45. web_include_js = [
  46. "website_script.js"
  47. ]
  48. bootstrap = "assets/frappe/css/bootstrap.css"
  49. web_include_css = [
  50. "assets/css/frappe-web.css"
  51. ]
  52. website_route_rules = [
  53. {"from_route": "/blog", "to_route": "Blog Post"},
  54. {"from_route": "/blog/<category>", "to_route": "Blog Post"}
  55. ]
  56. website_context = {
  57. "hero": {
  58. "blog": "templates/includes/blog/hero.html"
  59. }
  60. }
  61. write_file_keys = ["file_url", "file_name"]
  62. notification_config = "frappe.core.notifications.get_notification_config"
  63. before_tests = "frappe.utils.install.before_tests"
  64. website_generators = ["Web Page", "Blog Post", "Blog Category", "Web Form"]
  65. email_append_to = ["Event", "ToDo", "Communication"]
  66. calendars = ["Event"]
  67. # login
  68. on_session_creation = [
  69. "frappe.desk.doctype.feed.feed.login_feed",
  70. "frappe.core.doctype.user.user.notifify_admin_access_to_system_manager"
  71. ]
  72. # permissions
  73. permission_query_conditions = {
  74. "Event": "frappe.desk.doctype.event.event.get_permission_query_conditions",
  75. "ToDo": "frappe.desk.doctype.todo.todo.get_permission_query_conditions",
  76. "User": "frappe.core.doctype.user.user.get_permission_query_conditions",
  77. "Feed": "frappe.desk.doctype.feed.feed.get_permission_query_conditions",
  78. "Note": "frappe.desk.doctype.note.note.get_permission_query_conditions"
  79. }
  80. has_permission = {
  81. "Event": "frappe.desk.doctype.event.event.has_permission",
  82. "ToDo": "frappe.desk.doctype.todo.todo.has_permission",
  83. "User": "frappe.core.doctype.user.user.has_permission",
  84. "Feed": "frappe.desk.doctype.feed.feed.has_permission",
  85. "Note": "frappe.desk.doctype.note.note.has_permission"
  86. }
  87. standard_queries = {
  88. "User": "frappe.core.doctype.user.user.user_query"
  89. }
  90. doc_events = {
  91. "*": {
  92. "after_insert": "frappe.email.doctype.email_alert.email_alert.trigger_email_alerts",
  93. "validate": "frappe.email.doctype.email_alert.email_alert.trigger_email_alerts",
  94. "on_update": [
  95. "frappe.desk.notifications.clear_doctype_notifications",
  96. "frappe.email.doctype.email_alert.email_alert.trigger_email_alerts",
  97. "frappe.desk.doctype.feed.feed.update_feed"
  98. ],
  99. "after_rename": "frappe.desk.notifications.clear_doctype_notifications",
  100. "on_submit": [
  101. "frappe.email.doctype.email_alert.email_alert.trigger_email_alerts",
  102. "frappe.desk.doctype.feed.feed.update_feed"
  103. ],
  104. "on_cancel": [
  105. "frappe.desk.notifications.clear_doctype_notifications",
  106. "frappe.email.doctype.email_alert.email_alert.trigger_email_alerts"
  107. ],
  108. "on_trash": "frappe.desk.notifications.clear_doctype_notifications"
  109. }
  110. }
  111. scheduler_events = {
  112. "all": [
  113. "frappe.email.bulk.flush",
  114. "frappe.email.doctype.email_account.email_account.pull",
  115. "frappe.email.doctype.email_account.email_account.notify_unreplied",
  116. ],
  117. "daily": [
  118. "frappe.email.bulk.clear_outbox",
  119. "frappe.desk.notifications.clear_notifications",
  120. "frappe.core.doctype.scheduler_log.scheduler_log.set_old_logs_as_seen",
  121. "frappe.desk.doctype.event.event.send_event_digest",
  122. "frappe.sessions.clear_expired_sessions",
  123. "frappe.email.doctype.email_alert.email_alert.trigger_daily_alerts",
  124. ]
  125. }
  126. default_background = "/assets/frappe/images/ui/into-the-dawn.jpg"
  127. get_translated_dict = {
  128. ("doctype", "System Settings"): "frappe.geo.country_info.get_translated_dict"
  129. }