| # 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 |
| import settings |
| |
| import flask |
| |
| from features import banspammer |
| from features import inboundemail |
| from features import hotlistcreate |
| from features import savedqueries |
| from features import userhotlists |
| from framework import banned |
| from framework import clientmon |
| from framework import warmup |
| from framework import reap |
| from framework import deleteusers |
| from framework import excessiveactivity |
| from framework import ts_mon_js |
| from framework import trimvisitedpages |
| from project import peopledetail |
| from project import peoplelist |
| from project import projectadmin |
| from project import projectadminadvanced |
| from project import projectexport |
| from project import projectsummary |
| from project import projectupdates |
| from project import project_constants |
| from project import redirects |
| from services import cachemanager_svc |
| from services import client_config_svc |
| from sitewide import custom_404 |
| from sitewide import hostinghome |
| from sitewide import moved |
| from sitewide import userclearbouncing |
| from sitewide import userupdates |
| from sitewide import userprofile |
| from sitewide import projectcreate |
| from sitewide import usersettings |
| from sitewide import groupadmin |
| from sitewide import groupcreate |
| from sitewide import groupdetail |
| from sitewide import grouplist |
| from features import rerankhotlist |
| from features import hotlistdetails |
| from features import hotlistissues |
| from features import hotlistissuescsv |
| from features import hotlistpeople |
| from features import dateaction |
| from features import filterrules |
| from features import pubsub |
| from features import notify |
| from features import hotlistcreate |
| from features import savedqueries |
| from features import userhotlists |
| from features import banspammer |
| from search import backendnonviewable |
| from search import backendsearch |
| from tracker import componentcreate |
| from tracker import fltconversion |
| from tracker import fieldcreate |
| from tracker import fielddetail |
| from tracker import templatecreate |
| from tracker import templatedetail |
| from tracker import issueadmin |
| from tracker import issueadvsearch |
| from tracker import issueattachment |
| from tracker import issueattachmenttext |
| from tracker import issuebulkedit |
| from tracker import issuedetailezt |
| from tracker import issueentry |
| from tracker import issueentryafterlogin |
| from tracker import issueexport |
| from tracker import issueoriginal |
| from tracker import issuereindex |
| from tracker import issuetips |
| from tracker import issueimport |
| |
| from tracker import webcomponentspage |
| |
| |
| 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 _AddFlaskUrlRules(self, flask_instance, rule_tuple): |
| """Add url rules to a given Flask instance. |
| |
| Args: |
| flask_instance: The Flask app to add URLs to. |
| rule_tuple: List of tuple of path, module and method to call, HTTP method |
| |
| Returns: |
| The Flask instance. |
| """ |
| for rule in rule_tuple: |
| flask_instance.add_url_rule(rule[0], view_func=rule[1], methods=rule[2]) |
| return flask_instance |
| |
| # pylint: disable=unused-argument |
| def RegisterGroupUrls(self, services): |
| flaskapp_group = flask.Flask(__name__) |
| _GROUP_URL = [ |
| # ('/', grouplist.GroupList(services=services).GetGroupList, ['GET']), |
| # ( |
| # '/<string:viewed_username>/', |
| # groupdetail.GroupDetail(services=services).GetGroupDetail, |
| # ['GET']), |
| # ( |
| # '/<string:viewed_username>/edit.do', |
| # groupdetail.GroupDetail(services=services).PostGroupDetail, |
| # ['POST']), |
| # ( |
| # '/<string:viewed_username>/groupadmin', |
| # groupadmin.GroupAdmin(services=services).GetGroupAdmin, ['GET']), |
| # ( |
| # '/<string:viewed_username>/groupadmin.do', |
| # groupadmin.GroupAdmin(services=services).PostGroupAdmin, |
| # ['POST']), |
| ] |
| |
| return self._AddFlaskUrlRules(flaskapp_group, _GROUP_URL) |
| |
| # pylint: disable=unused-argument |
| def RegisterHostingUrl(self, service): |
| flaskapp_hosting = flask.Flask(__name__) |
| _HOSTING_URL = [ |
| # ( |
| # '/excessiveActivity', |
| # excessiveactivity.ExcessiveActivity( |
| # services=service).GetExcessiveActivity, ['GET']), |
| # ( |
| # '/settings', |
| # usersettings.UserSettings(services=service).GetUserSetting, ['GET' |
| # ]), |
| # ( |
| # '/settings.do', |
| # usersettings.UserSettings(services=service).PostUserSetting, |
| # ['POST']), |
| # ('/noAccess', banned.Banned(services=service).GetNoAccessPage, |
| # ['GET']), |
| # ( |
| # '/moved', moved.ProjectMoved(services=service).GetProjectMoved, |
| # ['GET']), |
| # ( |
| # '/createProject', |
| # projectcreate.ProjectCreate(services=service).GetCreateProject, |
| # ['GET']), |
| # ( |
| # '/createProject.do', |
| # projectcreate.ProjectCreate(services=service).PostCreateProject, |
| # ['POST']), |
| # ( |
| # '/createHotlist', |
| # hotlistcreate.HotlistCreate(services=service).GetCreateHotlist, |
| # ['GET']), |
| # ( |
| # '/createHotlist.do', |
| # hotlistcreate.HotlistCreate(services=service).PostCreateHotlist, |
| # ['POST']), |
| # ( |
| # '/createGroup', |
| # groupcreate.GroupCreate(services=service).GetGroupCreate, |
| # ['GET']), |
| # ( |
| # '/createGroup.do', |
| # groupcreate.GroupCreate(services=service).PostGroupCreate, |
| # ['POST']), |
| # ( |
| # '/deleteGroup', |
| # grouplist.GroupDelete(services=service).GetGroupDelete, |
| # ['GET']), |
| # ( |
| # '/deleteGroup.do', |
| # grouplist.GroupDelete(services=service).PostGroupDelete, |
| # ['POST']), |
| ] |
| |
| flaskapp_hosting = self._AddFlaskUrlRules(flaskapp_hosting, _HOSTING_URL) |
| |
| # pylint: disable=unused-variable |
| # for url /hosting/ |
| @flaskapp_hosting.route('/') |
| def DefaultToMainPage(): |
| url = flask.request.host_url |
| return flask.redirect(url) |
| |
| return flaskapp_hosting |
| |
| def RegisterOldHostUrl(self, service): |
| flaskapp_hosting_old = flask.Flask(__name__) |
| |
| # pylint: disable=unused-variable |
| @flaskapp_hosting_old.route('/') |
| def GetHostingOld(): |
| return hostinghome.HostingHome(services=service).GetOldHostingHome() |
| |
| return flaskapp_hosting_old |
| |
| def RegisterRedirectProjectUrl(self): |
| flaskapp_project_redirect = flask.Flask(__name__) |
| |
| # pylint: disable=unused-variable |
| @flaskapp_project_redirect.route('/') |
| def GetRedirectProject(): |
| url = flask.request.host_url |
| return flask.redirect(url) |
| |
| return flaskapp_project_redirect |
| |
| def RegisterProjectUrls(self, service): |
| flaskapp_project = flask.Flask(__name__) |
| _PROJECT_URLS = [ |
| # ( |
| # '/<string:project_name>/<string:unrecognized>', |
| # custom_404.ErrorPage(services=service).Get404Page, |
| # ['GET'], |
| # ), |
| # ( |
| # '/<string:project_name>/adminComponents', |
| # issueadmin.AdminComponents( |
| # services=service).GetAdminComponentsPage, ['GET']), |
| # ( |
| # '/<string:project_name>/adminComponents.do', |
| # issueadmin.AdminComponents( |
| # services=service).PostAdminComponentsPage, ['POST']), |
| # ( |
| # '/<string:project_name>/adminIntro', |
| # projectsummary.ProjectSummary( |
| # services=service).GetProjectSummaryPage, ['GET']), |
| # ( |
| # '/<string:project_name>/adminLabels', |
| # issueadmin.AdminLabels(services=service).GetAdminLabelsPage, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/adminLabels.do', |
| # issueadmin.AdminLabels(services=service).PostAdminLabelsPage, |
| # ['POST']), |
| # ( |
| # '/<string:project_name>/adminRules', |
| # issueadmin.AdminRules(services=service).GetAdminRulesPage, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/adminRules.do', |
| # issueadmin.AdminRules(services=service).PostAdminRulesPage, |
| # ['POST']), |
| # ( |
| # '/<string:project_name>/adminStatuses', |
| # issueadmin.AdminStatuses(services=service).GetAdminStatusesPage, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/adminStatuses.do', |
| # issueadmin.AdminStatuses(services=service).PostAdminStatusesPage, |
| # ['POST']), |
| # ( |
| # '/<string:project_name>/adminTemplates', |
| # issueadmin.AdminTemplates(services=service).GetAdminTemplatesPage, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/adminTemplates.do', |
| # issueadmin.AdminTemplates( |
| # services=service).PostAdminTemplatesPage, ['POST']), |
| # ( |
| # '/<string:project_name>/adminViews', |
| # issueadmin.AdminViews(services=service).GetAdminViewsPage, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/adminViews.do', |
| # issueadmin.AdminViews(services=service).PostAdminViewsPage, |
| # ['POST']), |
| # ( |
| # '/<string:project_name>/admin', |
| # projectadmin.ProjectAdmin(services=service).GetProjectAdminPage, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/admin.do', |
| # projectadmin.ProjectAdmin(services=service).PostProjectAdminPage, |
| # ['POST']), |
| # ( |
| # '/<string:project_name>/adminAdvanced', |
| # projectadminadvanced.ProjectAdminAdvanced( |
| # services=service).GetProjectAdminAdvancedPage, ['GET']), |
| # ( |
| # '/<string:project_name>/adminAdvanced.do', |
| # projectadminadvanced.ProjectAdminAdvanced( |
| # services=service).PostProjectAdminAdvancedPage, ['POST']), |
| # ( |
| # '/<string:project_name>/components/create', |
| # componentcreate.ComponentCreate( |
| # services=service).GetComponentCreatePage, ['GET']), |
| # ( |
| # '/<string:project_name>/components/create.do', |
| # componentcreate.ComponentCreate( |
| # services=service).PostComponentCreatePage, ['POST']), |
| # ( |
| # '/<string:project_name>/fields/create', |
| # fieldcreate.FieldCreate( |
| # services=service).GetFieldCreate, ['GET']), |
| # ( |
| # '/<string:project_name>/fields/create.do', |
| # fieldcreate.FieldCreate( |
| # services=service).PostFieldCreate, ['POST']), |
| # ( |
| # '/<string:project_name>/fields/detail', |
| # fielddetail.FieldDetail( |
| # services=service).GetFieldDetail, ['GET']), |
| # ( |
| # '/<string:project_name>/fields/detail.do', |
| # fielddetail.FieldDetail( |
| # services=service).PostFieldDetail, ['POST']), |
| # ( |
| # '/<string:project_name>/issues/advsearch', |
| # issueadvsearch.IssueAdvancedSearch( |
| # services=service).GetIssueAdvSearchPage, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/advsearch.do', |
| # issueadvsearch.IssueAdvancedSearch( |
| # services=service).PostIssueAdvSearchPage, ['POST']), |
| # ( |
| # '/<string:project_name>/issues/detail', |
| # webcomponentspage.WebComponentsPage( |
| # services=service).GetWebComponentsIssueDetail, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/export', |
| # issueexport.IssueExport(services=service).GetIssueExport, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/issues/export/json', |
| # issueexport.IssueExportJSON(services=service).GetIssueExportJSON, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/issues/export/json.do', |
| # issueexport.IssueExportJSON(services=service).PostIssueExportJSON, |
| # ['POST']), |
| # ( |
| # '/<string:project_name>/issues/import', |
| # issueimport.IssueImport(services=service).GetIssueImport, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/issues/import.do', |
| # issueimport.IssueImport(services=service).PostIssueImport, ['POST' |
| # ]), |
| # ( |
| # '/<string:project_name>/issues/original', |
| # issueoriginal.IssueOriginal(services=service).GetIssueOriginal, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/issues/entry', |
| # issueentry.IssueEntry( |
| # services=service).GetIssueEntry, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/entry.do', |
| # issueentry.IssueEntry( |
| # services=service).PostIssueEntry, ['POST']), |
| # ( |
| # '/<string:project_name>/issues/entry_new', |
| # webcomponentspage.WebComponentsPage( |
| # services=service).GetWebComponentsIssueNewEntry, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/list', |
| # webcomponentspage.WebComponentsPage( |
| # services=service).GetWebComponentsIssueList, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/reindex', |
| # issuereindex.IssueReindex( |
| # services=service).GetIssueReindex, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/reindex.do', |
| # issuereindex.IssueReindex( |
| # services=service).PostIssueReindex, ['POST']), |
| # ( |
| # '/<string:project_name>/issues/detail/list', |
| # issuedetailezt.FlipperList( |
| # services=service).GetFlipperList, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/detail/flipper', |
| # issuedetailezt.FlipperIndex( |
| # services=service).GetFlipperIndex, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/detail/flipper.do', |
| # issuedetailezt.FlipperIndex( |
| # services=service).PostFlipperIndex, ['POST']), |
| # ( |
| # '/<string:project_name>/issues/wizard', |
| # webcomponentspage.WebComponentsPage( |
| # services=service).GetWebComponentsIssueWizard, ['GET']), |
| # ( |
| # '/<string:project_name>/templates/create', |
| # templatecreate.TemplateCreate( |
| # services=service).GetTemplateCreate, ['GET']), |
| # ( |
| # '/<string:project_name>/templates/create.do', |
| # templatecreate.TemplateCreate( |
| # services=service).PostTemplateCreate, ['POST']), |
| # ( |
| # '/<string:project_name>/templates/detail', |
| # templatedetail.TemplateDetail( |
| # services=service).GetTemplateDetail, ['GET']), |
| # ( |
| # '/<string:project_name>/templates/detail.do', |
| # templatedetail.TemplateDetail( |
| # services=service).PostTemplateDetail, ['POST']), |
| # ( |
| # '/<string:project_name>/people/list', |
| # peoplelist.PeopleList(services=service).GetPeopleListPage, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/people/list.do', |
| # peoplelist.PeopleList(services=service).PostPeopleListPage, |
| # ['POST']), |
| # ( |
| # '/<string:project_name>/people/detail', |
| # peopledetail.PeopleDetail(services=service).GetPeopleDetailPage, |
| # ['GET']), |
| # ( |
| # '/<string:project_name>/people/detail.do', |
| # peopledetail.PeopleDetail(services=service).PostPeopleDetailPage, |
| # ['POST']), |
| # ( |
| # '/<string:project_name>/projectExport', |
| # projectexport.ProjectExport( |
| # services=service).GetProjectExportPage, ['GET']), |
| # ( |
| # '/<string:project_name>/projectExport/json', |
| # projectexport.ProjectExportJSON( |
| # services=service).GetProjectExportJSONPage, ['GET']), |
| # ( |
| # '/<string:project_name>/projectExport/json.do', |
| # projectexport.ProjectExportJSON( |
| # services=service).PostProjectExportJSONPage, ['POST']), |
| # ( |
| # '/<string:project_name>/updates/list', |
| # projectupdates.ProjectUpdates( |
| # services=service).GetProjectUpdatesPage, ['GET']), |
| # ( |
| # '/<string:project_name>/w/list', |
| # redirects.WikiRedirect( |
| # services=service).GetWikiListRedirect, ['GET']), |
| # ( |
| # '/<string:project_name>/wiki/<string:wiki_page>', |
| # redirects.WikiRedirect( |
| # services=service).GetWikiRedirect, ['GET']), |
| # ( |
| # '/<string:project_name>/source/<string:source_page>', |
| # redirects.SourceRedirect( |
| # services=service).GetSourceRedirect, ['GET']), |
| # '/<string:project_name>/issues/entryafterlogin', |
| # issueentryafterlogin.IssueEntryAfterLogin( |
| # services=service).GetIssueEntryAfterLogin, |
| # ['GET'], |
| # ), |
| # ( |
| # '/<string:project_name>/issues/searchtips', |
| # issuetips.IssueSearchTips(services=service).GetIssueSearchTips, |
| # ['GET'], |
| # ), |
| # ( |
| # '/<string:project_name>/issues/attachment', |
| # issueattachment.AttachmentPage(services=service).GetAttachmentPage, |
| # ['GET'], |
| # ), |
| # ( |
| # '/<string:project_name>/issues/attachmentText', |
| # issueattachmenttext.AttachmentText( |
| # services=service).GetAttachmentText, |
| # ['GET'], |
| # ), |
| # ( |
| # '/<string:project_name>/issues/bulkedit', |
| # issuebulkedit.IssueBulkEdit( |
| # services=service).GetIssueBulkEdit, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/bulkedit.do', |
| # issuebulkedit.IssueBulkEdit( |
| # services=service).PostIssueBulkEdit, ['POST']), |
| # ( |
| # '/<string:project_name>/issues/detail/next', |
| # issuedetailezt.FlipperNext( |
| # services=service).GetFlipperNextRedirectPage, ['GET']), |
| # ( |
| # '/<string:project_name>/issues/detail/previous', |
| # issuedetailezt.FlipperPrev( |
| # services=service).GetFlipperPrevRedirectPage, ['GET']), |
| ] |
| flaskapp_project = self._AddFlaskUrlRules(flaskapp_project, _PROJECT_URLS) |
| |
| # pylint: disable=unused-variable |
| @flaskapp_project.route('/<string:project_name>/issues/approval') |
| @flaskapp_project.route('/<string:project_name>/issues/detail_ezt') |
| def ProjectRedirectToIssueDetail(project_name): |
| host_url = flask.request.host_url |
| url = host_url + 'p/' + project_name + '/issues/detail' |
| query_string = flask.request.query_string |
| if query_string: |
| url = '%s?%s' % (url, query_string) |
| return flask.redirect(url) |
| |
| # pylint: disable=unused-variable |
| @flaskapp_project.route('/<string:project_name>/issues/list_new') |
| @flaskapp_project.route('/<string:project_name>/') |
| @flaskapp_project.route('/<string:project_name>/issues/') |
| def ProjectRedirectToIssueList(project_name): |
| host_url = flask.request.host_url |
| url = host_url + 'p/' + project_name + '/issues/list' |
| query_string = flask.request.query_string |
| if query_string: |
| url = '%s?%s' % (url, query_string) |
| return flask.redirect(url) |
| |
| # pylint: disable=unused-variable |
| @flaskapp_project.route('/') |
| def ProjectRedirectToMainPage(): |
| url = flask.request.host_url |
| return flask.redirect(url) |
| |
| # pylint: disable=unused-variable |
| @flaskapp_project.route('/<string:project_name>/people/') |
| def ProjectRedirectToPeopleList(project_name): |
| host_url = flask.request.host_url |
| url = host_url + 'p/' + project_name + '/people/list' |
| return flask.redirect(url) |
| |
| return flaskapp_project |
| |
| def RegisterUserUrls(self, service): |
| flaskapp_user = flask.Flask(__name__) |
| _USER_URLS = [ |
| # ( |
| # '/<string:viewed_username>/queries', |
| # savedqueries.SavedQueries(services=service).GetSavedQueriesPage, |
| # ['GET']), |
| # ( |
| # '/<string:viewed_username>/queries.do', |
| # savedqueries.SavedQueries(services=service).PostSavedQueriesPage, |
| # ['Post']), |
| # ( |
| # '/<string:viewed_username>/hotlists', |
| # userhotlists.UserHotlists(services=service).GetUserHotlistsPage, |
| # ['GET']), |
| # ( |
| # '/<string:viewed_username>/hotlists.do', |
| # userhotlists.UserHotlists(services=service).PostUserHotlistsPage, |
| # ['Post']), |
| # ( |
| # '/<string:viewed_username>/', |
| # userprofile.UserProfile(services=service).GetUserProfilePage, |
| # ['GET']), |
| # ( |
| # '/<string:viewed_username>/edit.do', |
| # userprofile.UserProfile(services=service).PostUserProfilePage, |
| # ['POST']), |
| # ( |
| # '/<string:viewed_username>/ban.do', |
| # userprofile.BanUser(services=service).PostBanUserPage, |
| # ['POST']), |
| # ( |
| # '/<string:viewed_username>/banSpammer.do', |
| # banspammer.BanSpammer(services=service).PostBanSpammerPage, |
| # ['POST']), |
| # ( |
| # '/<string:viewed_username>/clearBouncing', |
| # userclearbouncing.UserClearBouncing( |
| # services=service).GetUserClearBouncingPage, ['GET']), |
| # ( |
| # '/<string:viewed_username>/clearBouncing.do', |
| # userclearbouncing.UserClearBouncing( |
| # services=service).PostUserClearBouncingPage, ['Post']), |
| # ( |
| # '/<string:viewed_username>/updates/projects', |
| # userupdates.UserUpdatesProjects( |
| # services=service).GetUserUpdatesProjectsPage, ['GET']), |
| # ( |
| # '/<string:viewed_username>/updates/developers', |
| # userupdates.UserUpdatesDevelopers( |
| # services=service).GetUserUpdatesDevelopersPage, ['GET']), |
| # ( |
| # '/<string:viewed_username>/updates', |
| # userupdates.UserUpdatesIndividual( |
| # services=service).GetUserUpdatesPage, ['GET']), |
| # ( |
| # '/<string:viewed_username>/hotlists/<string:hotlist_id>', |
| # hotlistissues.HotlistIssues(services=service).GetHotlistIssuesPage, |
| # ['GET']), |
| # ( |
| # '/<string:viewed_username>/hotlists/<string:hotlist_id>.do', |
| # hotlistissues.HotlistIssues(services=service).PostHotlistIssuesPage, |
| # ['POST']), |
| # ( |
| # '/<string:viewed_username>/hotlists/<string:hotlist_id>/csv', |
| # hotlistissuescsv.HotlistIssuesCsv( |
| # services=service).GetHotlistIssuesCsvPage, ['GET']), |
| # ( |
| # '/<string:viewed_username>/hotlists/<string:hotlist_id>/people', |
| # hotlistpeople.HotlistPeopleList( |
| # services=service).GetHotlistPeoplePage, ['GET']), |
| # ( |
| # '/<string:viewed_username>/hotlists/<string:hotlist_id>/people.do', |
| # hotlistpeople.HotlistPeopleList( |
| # services=service).PostHotlistPeoplePage, ['POST']), |
| # ( |
| # '/<string:viewed_username>/hotlists/<string:hotlist_id>/details', |
| # hotlistdetails.HotlistDetails( |
| # services=service).GetHotlistDetailsPage, ['GET']), |
| # ( |
| # '/<string:viewed_username>/hotlists/<string:hotlist_id>/details.do', |
| # hotlistdetails.HotlistDetails( |
| # services=service).PostHotlistDetailsPage, ['POST']), |
| # ( |
| # '/<string:viewed_username>/hotlists/<string:hotlist_id>/rerank', |
| # rerankhotlist.RerankHotlistIssue( |
| # services=service).GetRerankHotlistIssuePage, ['GET']), |
| # ( |
| # '/<string:viewed_username>/hotlists/<string:hotlist_id>/rerank.do', |
| # rerankhotlist.RerankHotlistIssue( |
| # services=service).PostRerankHotlistIssuePage, ['POST']), |
| ] |
| |
| flaskapp_user = self._AddFlaskUrlRules(flaskapp_user, _USER_URLS) |
| |
| # pylint: disable=unused-variable |
| # for url /u/ |
| @flaskapp_user.route('/') |
| def UserRedirectToMainPage(): |
| url = flask.request.host_url |
| return flask.redirect(url) |
| |
| return flaskapp_user |
| |
| # pylint: disable=unused-argument |
| def RegisterTaskUrl(self, service): |
| flaskapp_task = flask.Flask(__name__) |
| _TASK_URL = [ |
| # ( |
| # '/banSpammer', |
| # banspammer.BanSpammerTask(services=service).GetBanSpammer, |
| # ['GET']), |
| # ( |
| # '/banSpammer.do', |
| # banspammer.BanSpammerTask(services=service).PostBanSpammer, |
| # ['POST']), |
| # ( |
| # '/sendWipeoutUserListsTask', |
| # deleteusers.SendWipeoutUserListsTask( |
| # services=service).GetSendWipeoutUserListsTask, ['GET']), |
| # ( |
| # '/sendWipeoutUserListsTask.do', |
| # deleteusers.SendWipeoutUserListsTask( |
| # services=service).PostSendWipeoutUserListsTask, ['POST']), |
| # ( |
| # '/deleteWipeoutUsersTask', |
| # deleteusers.DeleteWipeoutUsersTask( |
| # services=service).GetDeleteWipeoutUsersTask, ['GET']), |
| # ( |
| # '/deleteWipeoutUsersTask.do', |
| # deleteusers.DeleteWipeoutUsersTask( |
| # services=service).PostDeleteWipeoutUsersTask, ['POST']), |
| # ( |
| # '/deleteUsersTask', |
| # deleteusers.DeleteUsersTask(services=service).GetDeleteUsersTask, |
| # ['GET']), |
| # ( |
| # '/deleteUsersTask.do', |
| # deleteusers.DeleteUsersTask(services=service).PostDeleteUsersTask, |
| # ['POST']), |
| # ( |
| # '/notifyRulesDeleted', |
| # notify.NotifyRulesDeletedTask( |
| # services=service).GetNotifyRulesDeletedTask, ['GET']), |
| # ( |
| # '/notifyRulesDeleted.do', |
| # notify.NotifyRulesDeletedTask( |
| # services=service).PostNotifyRulesDeletedTask, ['POST']), |
| # ( |
| # '/notifyIssueChange', notify.NotifyIssueChangeTask( |
| # services=service).GetNotifyIssueChangeTask, ['GET']), |
| # ( |
| # '/notifyIssueChange.do', |
| # notify.NotifyIssueChangeTask( |
| # services=service).PostNotifyIssueChangeTask, ['POST']), |
| # ( |
| # '/notifyBlockingChange', |
| # notify.NotifyBlockingChangeTask( |
| # services=service).GetNotifyBlockingChangeTask, ['GET']), |
| # ( |
| # '/notifyBlockingChange.do', |
| # notify.NotifyBlockingChangeTask( |
| # services=service).PostNotifyBlockingChangeTask, ['POST']), |
| # ( |
| # '/notifyBulkEdit', notify.NotifyBulkChangeTask( |
| # services=service).GetNotifyBulkChangeTask, ['GET']), |
| # ( |
| # '/notifyBulkEdit.do', notify.NotifyBulkChangeTask( |
| # services=service).PostNotifyBulkChangeTask, ['POST']), |
| # ( |
| # '/notifyApprovalChange', |
| # notify.NotifyApprovalChangeTask( |
| # services=service).GetNotifyApprovalChangeTask, ['GET']), |
| # ( |
| # '/notifyApprovalChange.do', |
| # notify.NotifyApprovalChangeTask( |
| # services=service).PostNotifyApprovalChangeTask, ['POST']), |
| # ( |
| # '/publishPubsubIssueChange', |
| # pubsub.PublishPubsubIssueChangeTask( |
| # services=service).GetPublishPubsubIssueChangeTask, ['GET']), |
| # ( |
| # '/publishPubsubIssueChange.do', |
| # pubsub.PublishPubsubIssueChangeTask( |
| # services=service).PostPublishPubsubIssueChangeTask, ['POST']), |
| # ( |
| # '/issueDateAction', dateaction.IssueDateActionTask( |
| # services=service).GetIssueDateActionTask, ['GET']), |
| # ( |
| # '/issueDateAction.do', |
| # dateaction.IssueDateActionTask( |
| # services=service).PostIssueDateActionTask, ['POST']), |
| # ( |
| # '/fltConversionTask', |
| # fltconversion.FLTConvertTask(services=service).GetFLTConvertTask, |
| # ['GET']), |
| # ( |
| # '/fltConversionTask.do', |
| # fltconversion.FLTConvertTask(services=service).PostFLTConvertTask, |
| # ['POST']), |
| # ( |
| # '/outboundEmail', |
| # notify.OutboundEmailTask(services=service).GetOutboundEmailTask, |
| # ['GET']), |
| # ( |
| # '/outboundEmail.do', |
| # notify.OutboundEmailTask(services=service).PostOutboundEmailTask, |
| # ['POST']), |
| # ( |
| # '/recomputeDerivedFields', |
| # filterrules.RecomputeDerivedFieldsTask( |
| # services=service).GetRecomputeDerivedFieldsTask, ['GET']), |
| # ( |
| # '/recomputeDerivedFields.do', |
| # filterrules.RecomputeDerivedFieldsTask( |
| # services=service).PostRecomputeDerivedFieldsTask, ['POST']), |
| ] |
| |
| for rule in _TASK_URL: |
| flaskapp_task.add_url_rule(rule[0], view_func=rule[1], methods=rule[2]) |
| |
| return flaskapp_task |
| |
| # pylint: disable=unused-argument |
| def RegisterCronUrl(self, service): |
| flaskapp_cron = flask.Flask(__name__) |
| _CRON_URL = [ |
| # ( |
| # '/wipeoutSync', |
| # deleteusers.WipeoutSyncCron(services=service).GetWipeoutSyncCron, |
| # ['GET']), |
| # ( |
| # '/wipeoutSync.do', |
| # deleteusers.WipeoutSyncCron(services=service).PostWipeoutSyncCron, |
| # ['POST']), |
| # ( |
| # '/reindexQueue', |
| # filterrules.ReindexQueueCron( |
| # services=service).GetReindexQueueCron, |
| # ['GET']), |
| # ( |
| # '/reindexQueue.do', |
| # filterrules.ReindexQueueCron( |
| # services=service).PostReindexQueueCron, |
| # ['POST']), |
| # ( |
| # '/dateAction', |
| # dateaction.DateActionCron(services=service).GetDateActionCron, |
| # ['GET']), |
| # ( |
| # '/dateAction.do', |
| # dateaction.DateActionCron(services=service).PostDateActionCron, |
| # ['POST']), |
| # ( |
| # '/ramCacheConsolidate', |
| # cachemanager_svc.RamCacheConsolidate( |
| # services=service).GetRamCacheConsolidate, ['GET']), |
| # ( |
| # '/ramCacheConsolidate.do', |
| # cachemanager_svc.RamCacheConsolidate( |
| # services=service).PostRamCacheConsolidate, ['POST']), |
| # ('/reap', reap.Reap(services=service).GetReap, ['GET']), |
| # ('/reap.do', reap.Reap(services=service).PostReap, ['POST']), |
| # ( |
| # '/loadApiClientConfigs', |
| # client_config_svc.LoadApiClientConfigs().GetLoadApiClientConfigs, |
| # ['GET']), |
| # ( |
| # '/trimVisitedPages', |
| # trimvisitedpages.TrimVisitedPages( |
| # services=service).GetTrimVisitedPages, ['GET']), |
| # ( |
| # '/trimVisitedPages.do', |
| # trimvisitedpages.TrimVisitedPages( |
| # services=service).PostTrimVisitedPages, ['POST']), |
| ] |
| |
| for rule in _CRON_URL: |
| flaskapp_cron.add_url_rule(rule[0], view_func=rule[1], methods=rule[2]) |
| |
| return flaskapp_cron |
| |
| # pylint: disable=unused-argument |
| def RegisterBackendUrl(self, service): |
| flaskapp_backend = flask.Flask(__name__) |
| _BACKEND_URL = [ |
| # ( |
| # '/search', |
| # backendsearch.BackendSearch(services=service).GetBackendSearch, |
| # ['GET']), |
| # ( |
| # '/search.do', |
| # backendsearch.BackendSearch(services=service).PostBackendSearch, |
| # ['POST']), |
| # ( |
| # '/nonviewable', |
| # backendnonviewable.BackendNonviewable( |
| # services=service).GetBackendNonviewable, |
| # ['GET']), |
| # ( |
| # '/nonviewable.do', |
| # backendnonviewable.BackendNonviewable( |
| # services=service).PostBackendNonviewable, |
| # ['POST']), |
| ] |
| |
| for rule in _BACKEND_URL: |
| flaskapp_backend.add_url_rule(rule[0], view_func=rule[1], methods=rule[2]) |
| |
| return flaskapp_backend |
| |
| # pylint: disable=unused-argument |
| def RegisterMONSetUrl(self, service): |
| flaskapp_mon = flask.Flask(__name__) |
| _MON_URL = [ |
| # ( |
| # '/clientmon', |
| # clientmon.ClientMonitor(services=service).GetClientMonitor, ['GET' |
| # ]), |
| # ( |
| # '/clientmon.do', |
| # clientmon.ClientMonitor(services=service).PostClientMonitor, |
| # ['POST']), |
| # ( |
| # '/jstsmon.do', |
| # ts_mon_js.FlaskMonorailTSMonJSHandler( |
| # services=service).PostMonorailTSMonJSHandler, |
| # ['POST'], |
| # ) |
| ] |
| |
| flaskapp_mon = self._AddFlaskUrlRules(flaskapp_mon, _MON_URL) |
| return flaskapp_mon |
| |
| # pylint: disable=unused-argument |
| def RegisterAHUrl(self, service): |
| flaskapp_ah = flask.Flask(__name__) |
| _AH_URL = [ |
| # ('/warmup', warmup.Warmup(services=service).GetWarmup, ['GET']), |
| # ('/start', warmup.Start(services=service).GetStart, ['GET']), |
| # ('/stop', warmup.Stop(services=service).GetStop, ['GET']), |
| # ( |
| # '/bounce', |
| # inboundemail.BouncedEmail(services=service).postBouncedEmail, |
| # ['POST']), |
| # ( |
| # '/mail/<string:project_addr>', |
| # inboundemail.InboundEmail(services=service).HandleInboundEmail, |
| # ['GET', 'POST']) |
| ] |
| |
| flaskapp_ah = self._AddFlaskUrlRules(flaskapp_ah, _AH_URL) |
| |
| return flaskapp_ah |