Merge branch 'main' into avm99963-monorail
Merged commit 4137ed7879acadbf891e8c471108acb874dae886.
GitOrigin-RevId: b6100ffc5b1da355a35f37b13fcaaf746ee8b307
diff --git a/flaskregisterpages.py b/flaskregisterpages.py
new file mode 100644
index 0000000..1f0a949
--- /dev/null
+++ b/flaskregisterpages.py
@@ -0,0 +1,59 @@
+# Copyright 2022 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style
+# license that can be found in the LICENSE file or at
+# https://developers.google.com/open-source/licenses/bsd
+"""This file sets up all the urls for monorail pages."""
+
+import logging
+from framework import excessiveactivity
+import settings
+from flask import Flask
+
+from project import project_constants
+
+
+class ServletRegistry(object):
+
+ _PROJECT_NAME_REGEX = project_constants.PROJECT_NAME_PATTERN
+ _USERNAME_REGEX = r'[-+\w=.%]+(@([-a-z0-9]+\.)*[a-z0-9]+)?'
+ _HOTLIST_ID_NAME_REGEX = r'\d+|[a-zA-Z][-0-9a-zA-Z\.]*'
+
+ def __init__(self):
+ self.routes = []
+
+ def _AddRoute(
+ self, path_regex, servlet_handler, method='GET', does_write=False):
+ """Add a GET or POST handler to our flask route list.
+
+ Args:
+ path_regex: string with flask URL template regex.
+ servlet_handler: a servlet handler function.
+ method: string 'GET' or 'POST'.
+ does_write: True if the servlet could write to the database, we skip
+ registering such servlets when the site is in read_only mode. GET
+ handlers never write. Most, but not all, POST handlers do write.
+ """
+ if settings.read_only and does_write:
+ logging.info('Not registring %r because site is read-only', path_regex)
+ else:
+ self.routes.append([path_regex, servlet_handler, [method]])
+
+ def _SetupServlets(self, spec_dict, base='', post_does_write=True):
+ """Register each of the given servlets."""
+ for get_uri, servlet_handler in spec_dict.items():
+ self._AddRoute(base + get_uri, servlet_handler, 'GET')
+ post_uri = get_uri + ('edit.do' if get_uri.endswith('/') else '.do')
+ self._AddRoute(
+ base + post_uri, servlet_handler, 'POST', does_write=post_does_write)
+
+ def Register(self):
+ """Register all the monorail request handlers."""
+ return self.routes
+
+ def RegisterExcesiveActivity(self, service):
+ flaskapp_excessive_activity = Flask(__name__)
+ flaskapp_excessive_activity.add_url_rule(
+ '/',
+ view_func=excessiveactivity.ExcessiveActivity(services=service).handler,
+ methods=['GET'])
+ return flaskapp_excessive_activity