選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

185 行
4.6KB

  1. import flask_login
  2. import requests
  3. import yaml
  4. from flask import json, url_for, Response
  5. from flask_classy import FlaskView, route
  6. from flask_login import login_required, current_user
  7. from git import Repo, Git
  8. from modules.core.core import cbpi
  9. import pprint
  10. import time
  11. from modules.login import User
  12. class SystemView(FlaskView):
  13. def doShutdown(self):
  14. time.sleep(5)
  15. from subprocess import call
  16. call("halt")
  17. @login_required
  18. @route('/shutdown', methods=['POST'])
  19. def shutdown(self):
  20. """
  21. System Shutdown
  22. ---
  23. tags:
  24. - system
  25. responses:
  26. 200:
  27. description: Shutdown triggered
  28. """
  29. self.doShutdown()
  30. return ('', 204)
  31. def doReboot(self):
  32. time.sleep(5)
  33. from subprocess import call
  34. call("reboot")
  35. @login_required
  36. @route('/reboot', methods=['POST'])
  37. def reboot(self):
  38. """
  39. System Reboot
  40. ---
  41. tags:
  42. - system
  43. responses:
  44. 200:
  45. description: Reboot triggered
  46. """
  47. self.doReboot()
  48. return ('', 204)
  49. @login_required
  50. @route('/tags/<name>', methods=['GET'])
  51. def checkout_tag(self,name):
  52. repo = Repo('./')
  53. repo.git.reset('--hard')
  54. o = repo.remotes.origin
  55. o.fetch()
  56. g = Git('./')
  57. g.checkout(name)
  58. cbpi.notify("Checkout successful", "Please restart the system")
  59. return ('', 204)
  60. @login_required
  61. @route('/git/status', methods=['GET'])
  62. def git_status(self):
  63. repo = Repo('./')
  64. for remote in repo.remotes:
  65. print remote
  66. #o = repo.remotes.origin
  67. #o.fetch()
  68. print next((tag for tag in repo.tags if tag.commit == repo.head.commit), None)
  69. url = 'https://api.github.com/repos/manuel83/craftbeerpi3/releases'
  70. response = requests.get(url)
  71. data = response.json()
  72. result = []
  73. for r in data:
  74. result.append({"tag_name": r.get("tag_name"), "timestamp": r.get("created_at")})
  75. """
  76. Check for GIT status
  77. ---
  78. tags:
  79. - system
  80. responses:
  81. 200:
  82. description: Git Status
  83. """
  84. return json.dumps(result)
  85. @login_required
  86. @route('/check_update', methods=['GET'])
  87. def check_update(self):
  88. """
  89. Check for GIT update
  90. ---
  91. tags:
  92. - system
  93. responses:
  94. 200:
  95. description: Git Changes
  96. """
  97. repo = Repo('./')
  98. o = repo.remotes.origin
  99. o.fetch()
  100. changes = []
  101. commits_behind = repo.iter_commits('master..origin/master')
  102. for c in list(commits_behind):
  103. changes.append({"committer": c.committer.name, "message": c.message})
  104. return json.dumps(changes)
  105. @login_required
  106. @route('/git/pull', methods=['POST'])
  107. def update(self):
  108. """
  109. System Update
  110. ---
  111. tags:
  112. - system
  113. responses:
  114. 200:
  115. description: Git Pull Triggered
  116. """
  117. repo = Repo('./')
  118. o = repo.remotes.origin
  119. info = o.pull()
  120. cbpi.notify("Pull successful", "The lasted updated was downloaded. Please restart the system")
  121. return ('', 204)
  122. @route('/connect', methods=['GET'])
  123. def connect(self):
  124. """
  125. Connect
  126. ---
  127. tags:
  128. - system
  129. responses:
  130. 200:
  131. description: CraftBeerPi System Cache
  132. """
  133. if cbpi.get_config_parameter("password_security", "NO") == "NO":
  134. user = User()
  135. user.id = "craftbeerpi"
  136. flask_login.login_user(user)
  137. if self.api.get_config_parameter("setup", "YES") == "YES":
  138. return json.dumps(dict(setup=True, loggedin= current_user.is_authenticated ))
  139. else:
  140. return json.dumps(dict(setup=False, loggedin= current_user.is_authenticated))
  141. @login_required
  142. @route('/dump', methods=['GET'])
  143. def dump(self):
  144. """
  145. Dump Cache
  146. ---
  147. tags:
  148. - system
  149. responses:
  150. 200:
  151. description: CraftBeerPi System Cache
  152. """
  153. return Response(response=json.dumps(cbpi.cache, sort_keys=True, indent=4), status=200, mimetype='application/json')
  154. @cbpi.addon.core.initializer()
  155. def init(cbpi):
  156. SystemView.api = cbpi
  157. SystemView.register(cbpi._app, route_base='/api/system')