api_w_render.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. from .tool.func import *
  2. class api_w_render_include:
  3. def __init__(self, data_option):
  4. self.include_change_list = data_option
  5. def __call__(self, match):
  6. match_org = match.group(0)
  7. match = match.groups()
  8. if len(match) < 3:
  9. match = list(match) + ['']
  10. if match[2] == '\\':
  11. return match_org
  12. else:
  13. slash_add = ''
  14. if match[0]:
  15. if len(match[0]) % 2 == 1:
  16. slash_add = '\\' * (len(match[0]) - 1)
  17. else:
  18. slash_add = match[0]
  19. if match[1] in self.include_change_list:
  20. return slash_add + self.include_change_list[match[1]]
  21. else:
  22. return slash_add + match[2]
  23. def api_w_render(name = '', tool = ''):
  24. with get_db_connect() as conn:
  25. curs = conn.cursor()
  26. if flask.request.method == 'POST':
  27. name = flask.request.form.get('name', '')
  28. data_org = flask.request.form.get('data', '')
  29. data_option = flask.request.form.get('option', '')
  30. if data_option != '':
  31. data_option = json.loads(data_option)
  32. data_option_func = api_w_render_include(data_option)
  33. # parameter replace
  34. data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)=((?:\\@|[^@\n])+)@', data_option_func, data_org)
  35. data_org = re.sub(r'(\\+)?@([ㄱ-힣a-zA-Z0-9]+)@', data_option_func, data_org)
  36. # remove end br
  37. data_org = re.sub('^\n+', '', data_org)
  38. if tool == '':
  39. data_pas = render_set(conn,
  40. doc_name = name,
  41. doc_data = data_org,
  42. data_type = 'api_view'
  43. )
  44. if tool == 'from':
  45. data_pas = render_set(conn,
  46. doc_name = name,
  47. doc_data = data_org,
  48. data_type = 'api_view'
  49. )
  50. elif tool == 'include':
  51. data_pas = render_set(conn,
  52. doc_name = name,
  53. doc_data = data_org,
  54. data_type = 'api_include'
  55. )
  56. else:
  57. data_pas = render_set(conn,
  58. doc_name = name,
  59. doc_data = data_org,
  60. data_type = 'api_thread'
  61. )
  62. return flask.jsonify({
  63. "data" : data_pas[0],
  64. "js_data" : data_pas[1]
  65. })
  66. else:
  67. return ''