am_dot_com

CN 2023-03-29

Mar 29th, 2023 (edited)
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.80 KB | None | 0 0
  1. # app.py
  2. from flask import Flask, request, render_template
  3. from tools import str_to_date,\
  4. diff_between_dates
  5. from datetime import datetime
  6.  
  7. app = Flask(__name__)
  8.  
  9. HTML_NAME_FOR_THE_DATE = "d"
  10.  
  11. # NOT a view
  12. def obtain_user_date():
  13. str_user_date = None
  14. b_GET:bool = request.method=='GET'
  15. b_POST:bool = request.method=='POST'
  16.  
  17. if(b_GET):
  18. b_caution:bool = HTML_NAME_FOR_THE_DATE in\
  19. request.args.keys()
  20. if(b_caution):
  21. str_user_date = \
  22. request.args[HTML_NAME_FOR_THE_DATE]
  23. return str_user_date
  24. # if
  25. else:
  26. if(b_POST):
  27. b_caution:bool = HTML_NAME_FOR_THE_DATE in\
  28. request.form.keys()
  29. if(b_caution):
  30. str_user_date = \
  31. request.form[HTML_NAME_FOR_THE_DATE]
  32. return str_user_date
  33. # if
  34. # if
  35. # if-else
  36. #return "no user date"
  37. return None
  38. # obtain_user_date
  39.  
  40. # decorator
  41. @app.route("/", methods=['POST', 'GET'])
  42. def respond_to_distance_request():
  43. the_user_date = obtain_user_date()
  44.  
  45. if(the_user_date!=None):
  46. the_date:datetime = \
  47. str_to_date(the_user_date)
  48.  
  49. response:dict = diff_between_dates(
  50. the_date
  51. )
  52.  
  53. #return response # dict (appears as a JSON response }
  54. return render_template(
  55. "date_input.html",
  56. response_available=True,
  57. d_days=response['days'],
  58. d_hours=response['hours']
  59. )
  60. #
  61. else:
  62. # tested OK - displays the input form
  63. return render_template(
  64. "date_input.html"
  65. )
  66. # def respond_to_distance_request
  67.  
  68. app.run(
  69. host="0.0.0.0", # all network interfaces
  70. port=5555,
  71. debug=True
  72. )
  73.  
  74. ***********************
  75. # tools.py
  76. from datetime import\
  77. datetime, timedelta
  78.  
  79. def str_to_date(
  80. p_date:str,
  81. p_format:str="%Y-%m-%d"
  82. ):
  83. d:datetime =\
  84. datetime.strptime(
  85. p_date,
  86. p_format
  87. )
  88. return d
  89. # def str_to_date
  90.  
  91. def diff_between_dates(
  92. p_d1:datetime,
  93. p_d2:datetime=None
  94. ):
  95. if(p_d2==None):
  96. p_d2=datetime.now()
  97. # if
  98. diff:timedelta = abs(p_d1-p_d2)
  99. diff_days:float = diff.days
  100. diff_seconds:float = diff.total_seconds()
  101. diff_hours:float = diff_seconds/60/60
  102. """
  103. dict_response:dict = dict()
  104. dict_response['days']=diff_days
  105. dict_response['hours']=diff_hours
  106. """
  107. dict_response:dict = {
  108. "days":diff_days,
  109. "hours":diff_hours
  110. }
  111. # import json
  112. # return json.dumps(dict_response)
  113. return dict_response
  114. # def diff_between_dates
  115.  
  116. ********
  117.  
  118. <!-- ./templates/date_input.html -->
  119. <!DOCTYPE html>
  120. <html lang="en">
  121. <head>
  122. <meta charset="UTF-8">
  123. <title>Date Input</title>
  124. </head>
  125. <body>
  126. <form
  127. action="http://127.0.0.1:5555/"
  128. method="POST"
  129. enctype="application/x-www-form-urlencoded"
  130. >
  131. <label for="id_d">Your date:</label>
  132. <input
  133. id="id_d"
  134. name="d"
  135. type="date"
  136. pattern="\d{2,4}-\d{1,2}-\d{1,2}"
  137. value="1969-06-21"
  138. ><br>
  139. <input
  140. type="submit"
  141. value="compute distance to today">
  142. </form>
  143. <hr>
  144. <!-- results in a conditional Jinja2 template -->
  145. {% if response_available is defined %}
  146. <ul>
  147. <li>Distance in days: {{d_days}}</li>
  148. <li>Distance in days: {{d_hours}}</li>
  149. </ul>
  150. {% endif %}
  151. </body>
  152. </html>
  153.  
  154. ********
  155.  
  156. cloudbuild.yaml
  157. steps:
  158. - name: "gcr.io/cloud-builders/gcloud"
  159. args: ["app", "deploy"]
  160. timeout: "1600s"
  161.  
  162. app.yaml
  163. runtime: python38
  164. entrypoint: gunicorn -w 2 name-of-flask-app-python-module:name-of-flask-var
Advertisement
Add Comment
Please, Sign In to add comment