Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

98 wiersze
2.7 KiB

  1. # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. import frappe
  4. import frappe.handler
  5. import frappe.client
  6. import frappe.widgets.reportview
  7. from frappe.utils.response import build_response, report_error
  8. def handle():
  9. """
  10. /api/method/{methodname} will call a whitelisted method
  11. /api/resource/{doctype} will query a table
  12. examples:
  13. ?fields=["name", "owner"]
  14. ?filters=[["Task", "name", "like", "%005"]]
  15. ?limit_start=0
  16. ?limit_page_length=20
  17. /api/resource/{doctype}/{name} will point to a resource
  18. GET will return doclist
  19. POST will insert
  20. PUT will update
  21. DELETE will delete
  22. /api/resource/{doctype}/{name}?run_method={method} will run a whitelisted controller method
  23. """
  24. parts = frappe.request.path[1:].split("/")
  25. call = doctype = name = None
  26. if len(parts) > 1:
  27. call = parts[1]
  28. if len(parts) > 2:
  29. doctype = parts[2]
  30. if len(parts) > 3:
  31. name = parts[3]
  32. try:
  33. if call=="method":
  34. frappe.local.form_dict.cmd = doctype
  35. frappe.handler.handle()
  36. return
  37. elif call=="resource":
  38. if "run_method" in frappe.local.form_dict:
  39. bean = frappe.bean(doctype, name)
  40. if frappe.local.request.method=="GET":
  41. if not bean.has_permission("read"):
  42. frappe.throw("No Permission", frappe.PermissionError)
  43. bean.run_method(frappe.local.form_dict.run_method, **frappe.local.form_dict)
  44. if frappe.local.request.method=="POST":
  45. if not bean.has_permission("write"):
  46. frappe.throw("No Permission", frappe.PermissionError)
  47. bean.run_method(frappe.local.form_dict.run_method, **frappe.local.form_dict)
  48. frappe.conn.commit()
  49. else:
  50. if name:
  51. if frappe.local.request.method=="GET":
  52. frappe.local.response.update({
  53. "doclist": frappe.client.get(doctype,
  54. name)})
  55. if frappe.local.request.method=="POST":
  56. frappe.local.response.update({
  57. "doclist": frappe.client.insert(frappe.local.form_dict.doclist)})
  58. frappe.conn.commit()
  59. if frappe.local.request.method=="PUT":
  60. frappe.local.response.update({
  61. "doclist":frappe.client.save(frappe.local.form_dict.doclist)})
  62. frappe.conn.commit()
  63. if frappe.local.request.method=="DELETE":
  64. frappe.client.delete(doctype, name)
  65. frappe.local.response.message = "ok"
  66. elif doctype:
  67. if frappe.local.request.method=="GET":
  68. frappe.local.response.update({
  69. "data": frappe.call(frappe.widgets.reportview.execute,
  70. doctype, **frappe.local.form_dict)})
  71. else:
  72. raise frappe.DoesNotExistError
  73. else:
  74. raise frappe.DoesNotExistError
  75. except frappe.DoesNotExistError, e:
  76. report_error(404)
  77. except Exception, e:
  78. report_error(500)
  79. build_response()