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.
 
 
 
 
 
 

64 lines
1.5 KiB

  1. import webnotes
  2. @webnotes.whitelist()
  3. def runserverobj():
  4. """
  5. Run server objects
  6. """
  7. import webnotes.model.code
  8. from webnotes.model.doclist import DocList
  9. from webnotes.utils import cint
  10. form = webnotes.form
  11. doclist = None
  12. method = form.getvalue('method')
  13. arg = form.getvalue('arg')
  14. dt = form.getvalue('doctype')
  15. dn = form.getvalue('docname')
  16. if dt: # not called from a doctype (from a page)
  17. if not dn: dn = dt # single
  18. so = webnotes.model.code.get_obj(dt, dn)
  19. else:
  20. doclist = DocList()
  21. doclist.from_compressed(form.getvalue('docs'), dn)
  22. so = doclist.make_obj()
  23. doclist.check_if_latest()
  24. check_guest_access(so.doc)
  25. if so:
  26. r = webnotes.model.code.run_server_obj(so, method, arg)
  27. if r:
  28. #build output as csv
  29. if cint(webnotes.form.getvalue('as_csv')):
  30. make_csv_output(r, so.doc.doctype)
  31. else:
  32. webnotes.response['message'] = r
  33. webnotes.response['docs'] =[so.doc] + so.doclist
  34. def check_guest_access(doc):
  35. if webnotes.session['user']=='Guest' and not webnotes.conn.sql("select name from tabDocPerm where role='Guest' and parent=%s and ifnull(`read`,0)=1", doc.doctype):
  36. webnotes.msgprint("Guest not allowed to call this object")
  37. raise Exception
  38. def make_csv_output(res, dt):
  39. """send method response as downloadable CSV file"""
  40. import webnotes
  41. from cStringIO import StringIO
  42. import csv
  43. f = StringIO()
  44. writer = csv.writer(f)
  45. for r in res:
  46. writer.writerow(r)
  47. f.seek(0)
  48. webnotes.response['result'] = f.read()
  49. webnotes.response['type'] = 'csv'
  50. webnotes.response['doctype'] = dt.replace(' ','')