Você não pode selecionar mais de 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.
 
 
 
 
 
 

75 linhas
1.8 KiB

  1. # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import json, inspect
  5. import frappe
  6. from frappe import _
  7. from frappe.utils import cint
  8. from six import text_type, string_types
  9. @frappe.whitelist()
  10. def runserverobj(method, docs=None, dt=None, dn=None, arg=None, args=None):
  11. """run controller method - old style"""
  12. if not args: args = arg or ""
  13. if dt: # not called from a doctype (from a page)
  14. if not dn: dn = dt # single
  15. doc = frappe.get_doc(dt, dn)
  16. else:
  17. doc = frappe.get_doc(json.loads(docs))
  18. doc._original_modified = doc.modified
  19. doc.check_if_latest()
  20. if not doc.has_permission("read"):
  21. frappe.msgprint(_("Not permitted"), raise_exception = True)
  22. if doc:
  23. try:
  24. args = json.loads(args)
  25. except ValueError:
  26. args = args
  27. fnargs, varargs, varkw, defaults = inspect.getargspec(getattr(doc, method))
  28. if not fnargs or (len(fnargs)==1 and fnargs[0]=="self"):
  29. r = doc.run_method(method)
  30. elif "args" in fnargs or not isinstance(args, dict):
  31. r = doc.run_method(method, args)
  32. else:
  33. r = doc.run_method(method, **args)
  34. if r:
  35. #build output as csv
  36. if cint(frappe.form_dict.get('as_csv')):
  37. make_csv_output(r, doc.doctype)
  38. else:
  39. frappe.response['message'] = r
  40. frappe.response.docs.append(doc)
  41. def make_csv_output(res, dt):
  42. """send method response as downloadable CSV file"""
  43. import frappe
  44. from six import StringIO
  45. import csv
  46. f = StringIO()
  47. writer = csv.writer(f)
  48. for r in res:
  49. row = []
  50. for v in r:
  51. if isinstance(v, string_types):
  52. v = v.encode("utf-8")
  53. row.append(v)
  54. writer.writerow(row)
  55. f.seek(0)
  56. frappe.response['result'] = text_type(f.read(), 'utf-8')
  57. frappe.response['type'] = 'csv'
  58. frappe.response['doctype'] = dt.replace(' ','')