• R/O
  • HTTP
  • SSH
  • HTTPS

タグ
未設定

よく使われているワード(クリックで追加)

javaandroidc++linuxobjective-cc#cocoa誰得qtrubybathyscaphegamephpguiwindows翻訳cpythonomegattwitterframeworkbtronarduinovb.net計画中(planning stage)directxpreviewertestゲームエンジンdom

PythonからElixir Reportのレポートサーバーにアクセスするサンプルコード


ファイル情報

Rev. 035502cd03efae53b90c7321f6989d16751f2a72
サイズ 4,724 バイト
日時 2014-12-03 18:18:41
作者 hylom
ログメッセージ

fix: typo in server_app.py

内容

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. import os
  4. from datetime import date, timedelta
  5. from tornado import ioloop
  6. from tornado import web
  7. from config import config
  8. from report_server import ReportServer
  9. # configurations
  10. CSS_PATH = os.path.join(os.getcwd(), "www_root/css")
  11. JS_PATH = os.path.join(os.getcwd(), "www_root/js")
  12. class MainHandler(web.RequestHandler):
  13. "index.htmlを返すハンドラ"
  14. def get(self):
  15. self.render("index.html")
  16. class TrafficDataHandler(web.RequestHandler):
  17. "トラフィックデータリクエストを処理するハンドラ"
  18. def get(self):
  19. try:
  20. year = int(self.get_argument("y"))
  21. month = int(self.get_argument("m"))
  22. except ValueError:
  23. self.send_err(400)
  24. return
  25. # パラメータで指定された年/月から
  26. # 開始/終了年月日を生成する
  27. start_date = date(year, month, 1)
  28. if month == 12:
  29. end_date = date(year + 1, 1, 1) + timedelta(-1)
  30. else:
  31. end_date = date(year, month + 1, 1) + timedelta(-1)
  32. # レポートサーバーに投げるパラメータを作成
  33. param = {
  34. "start_date": start_date,
  35. "end_date": end_date
  36. }
  37. # リクエスト送信
  38. r = ReportServer(config["report_server"]["user"],
  39. config["report_server"]["password"],
  40. config["report_server"]["host"],
  41. config["report_server"]["port"])
  42. xml = r.data(config["data_source"]["traffic"], param)
  43. # 取得したXMLをクライアントに送信
  44. self.set_header("Content-type", "application/xml")
  45. self.set_status(200)
  46. self.finish(xml)
  47. class PdfHandler(web.RequestHandler):
  48. "PDF出力用ハンドラ"
  49. def get(self):
  50. try:
  51. year = int(self.get_argument("y"))
  52. month = int(self.get_argument("m"))
  53. except ValueError:
  54. self.send_err(400)
  55. return
  56. # パラメータで指定された年/月から
  57. # 開始/終了年月日を生成する
  58. start_date = date(year, month, 1)
  59. if month == 12:
  60. end_date = date(year + 1, 1, 1) + timedelta(-1)
  61. else:
  62. end_date = date(year, month + 1, 1) + timedelta(-1)
  63. # レポートサーバーに投げるパラメータを作成
  64. param = {
  65. "start_date": start_date,
  66. "end_date": end_date
  67. }
  68. # リクエスト送信
  69. r = ReportServer(config["report_server"]["user"],
  70. config["report_server"]["password"],
  71. config["report_server"]["host"],
  72. config["report_server"]["port"])
  73. r.login()
  74. pdf = r.pdf(config["report_template"]["traffic"], param)
  75. # 取得したXMLをクライアントに送信
  76. self.set_header("Content-type", "application/pdf")
  77. self.set_status(200)
  78. self.finish(pdf)
  79. class DataTestHandler(web.RequestHandler):
  80. "テスト用ハンドラ"
  81. def get(self, request_path):
  82. data_dir = os.path.join(os.getcwd(), "testdata")
  83. if request_path == "sample.xml":
  84. target = os.path.join(data_dir, "sample.xml")
  85. f = open(target)
  86. result = f.read()
  87. f.close()
  88. self.set_header("Content-type", "application/xml")
  89. self.set_status(200)
  90. self.finish(result)
  91. elif request_path == "traffic":
  92. try:
  93. year = int(self.get_argument("y"))
  94. month = int(self.get_argument("m"))
  95. except ValueError:
  96. self.send_error(400)
  97. target = os.path.join(data_dir,
  98. "{:04}{:02}.xml".format(year, month))
  99. try:
  100. f = open(target)
  101. except IOError:
  102. self.send_error(404)
  103. result = f.read()
  104. f.close()
  105. self.set_header("Content-type", "application/xml")
  106. self.set_status(200)
  107. self.finish(result)
  108. else:
  109. self.send_error(404)
  110. application = web.Application([
  111. ("/", MainHandler),
  112. ("/data/traffic", TrafficDataHandler),
  113. ("/pdf/traffic", PdfHandler),
  114. ("/data/(.*)", DataTestHandler),
  115. ("/css/(.*)", web.StaticFileHandler, {"path": CSS_PATH}),
  116. ("/js/(.*)", web.StaticFileHandler, {"path": JS_PATH}),
  117. ],
  118. template_path=os.path.join(os.getcwd(), 'template')
  119. )
  120. if __name__ == "__main__":
  121. port = 8000
  122. application.listen(port)
  123. print("start listening, port {}".format(port))
  124. ioloop.IOLoop.instance().start()