| OLD | NEW |
| 1 # Copyright (C) 2013 Google Inc. All rights reserved. | 1 # Copyright (C) 2013 Google Inc. All rights reserved. |
| 2 # | 2 # |
| 3 # Redistribution and use in source and binary forms, with or without | 3 # Redistribution and use in source and binary forms, with or without |
| 4 # modification, are permitted provided that the following conditions are | 4 # modification, are permitted provided that the following conditions are |
| 5 # met: | 5 # met: |
| 6 # | 6 # |
| 7 # * Redistributions of source code must retain the above copyright | 7 # * Redistributions of source code must retain the above copyright |
| 8 # notice, this list of conditions and the following disclaimer. | 8 # notice, this list of conditions and the following disclaimer. |
| 9 # * Redistributions in binary form must reproduce the above | 9 # * Redistributions in binary form must reproduce the above |
| 10 # copyright notice, this list of conditions and the following disclaimer | 10 # copyright notice, this list of conditions and the following disclaimer |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 25 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 28 | 28 |
| 29 import datetime | 29 import datetime |
| 30 import logging | 30 import logging |
| 31 import webapp2 | 31 import webapp2 |
| 32 | 32 |
| 33 from google.appengine.ext import ndb | 33 from google.appengine.ext import ndb |
| 34 from google.appengine.ext.webapp import template | 34 from google.appengine.ext.webapp import template |
| 35 from google.appengine.ext.db import BadRequestError |
| 35 | 36 |
| 36 # A simple log server for rebaseline-o-matic. | 37 # A simple log server for rebaseline-o-matic. |
| 37 # | 38 # |
| 38 # Accepts updates to the same log entry and shows a simple status page. | 39 # Accepts updates to the same log entry and shows a simple status page. |
| 39 # Has a special state for the case where there are no NeedsRebaseline | 40 # Has a special state for the case where there are no NeedsRebaseline |
| 40 # lines in TestExpectations to avoid cluttering the log with useless | 41 # lines in TestExpectations to avoid cluttering the log with useless |
| 41 # entries every 30 seconds. | 42 # entries every 30 seconds. |
| 42 # | 43 # |
| 43 # Other than that, new updatelog calls append to the most recent log | 44 # Other than that, new updatelog calls append to the most recent log |
| 44 # entry until they have the newentry parameter, in which case, it | 45 # entry until they have the newentry parameter, in which case, it |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 elif log_entry.is_no_needs_rebaseline: | 94 elif log_entry.is_no_needs_rebaseline: |
| 94 out = "Previous entry was a no need rebaseline log. Writing
a new log." | 95 out = "Previous entry was a no need rebaseline log. Writing
a new log." |
| 95 new_entry = True | 96 new_entry = True |
| 96 else: | 97 else: |
| 97 out = "Added to existing log entry." | 98 out = "Added to existing log entry." |
| 98 log_entry.content = log_entry.content + "\n" + new_log_data | 99 log_entry.content = log_entry.content + "\n" + new_log_data |
| 99 | 100 |
| 100 if new_entry or not log_entries: | 101 if new_entry or not log_entries: |
| 101 log_entry = LogEntry(content=new_log_data, is_no_needs_rebaseline=no
_needs_rebaseline) | 102 log_entry = LogEntry(content=new_log_data, is_no_needs_rebaseline=no
_needs_rebaseline) |
| 102 | 103 |
| 103 log_entry.put() | 104 try: |
| 105 log_entry.put() |
| 106 except BadRequestError: |
| 107 out = "Created new log entry because the previous one exceeded the m
ax length." |
| 108 LogEntry(content=new_log_data, is_no_needs_rebaseline=no_needs_rebas
eline).put() |
| 109 |
| 104 self.response.out.write(out) | 110 self.response.out.write(out) |
| 105 | 111 |
| 106 | 112 |
| 107 class UploadForm(webapp2.RequestHandler): | 113 class UploadForm(webapp2.RequestHandler): |
| 108 def get(self): | 114 def get(self): |
| 109 self.response.out.write(template.render("uploadform.html", { | 115 self.response.out.write(template.render("uploadform.html", { |
| 110 "update_log_url": "/updatelog", | 116 "update_log_url": "/updatelog", |
| 111 "set_no_needs_rebaseline_url": "/noneedsrebaselines", | 117 "set_no_needs_rebaseline_url": "/noneedsrebaselines", |
| 112 "log_param": LOG_PARAM, | 118 "log_param": LOG_PARAM, |
| 113 "new_entry_param": NEW_ENTRY_PARAM, | 119 "new_entry_param": NEW_ENTRY_PARAM, |
| (...skipping 20 matching lines...) Expand all Loading... |
| 134 })) | 140 })) |
| 135 | 141 |
| 136 | 142 |
| 137 routes = [ | 143 routes = [ |
| 138 ('/uploadform', UploadForm), | 144 ('/uploadform', UploadForm), |
| 139 ('/updatelog', UpdateLog), | 145 ('/updatelog', UpdateLog), |
| 140 ('/', ShowLatest), | 146 ('/', ShowLatest), |
| 141 ] | 147 ] |
| 142 | 148 |
| 143 app = webapp2.WSGIApplication(routes, debug=True) | 149 app = webapp2.WSGIApplication(routes, debug=True) |
| OLD | NEW |