Merge branch 'main' into avm99963-monorail
Merged commit 34d8229ae2b51fb1a15bd208e6fe6185c94f6266
GitOrigin-RevId: 7ee0917f93a577e475f8e09526dd144d245593f4
diff --git a/search/ast2ast.py b/search/ast2ast.py
index bf4de4f..0e1e4cf 100644
--- a/search/ast2ast.py
+++ b/search/ast2ast.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Convert a user's issue search AST into a simplified AST.
@@ -36,8 +35,8 @@
import re
from framework import exceptions
-from proto import ast_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import tracker_pb2
# TODO(jrobbins): if BUILTIN_ISSUE_FIELDS was passed through, I could
# remove this dep.
from search import query2ast
diff --git a/search/ast2select.py b/search/ast2select.py
index a6e5f17..cbcb0b0 100644
--- a/search/ast2select.py
+++ b/search/ast2select.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Convert a user's issue search AST into SQL clauses.
@@ -26,8 +25,8 @@
import logging
from framework import sql
-from proto import ast_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import tracker_pb2
from search import query2ast
from services import tracker_fulltext
diff --git a/search/ast2sort.py b/search/ast2sort.py
index 08ed346..8abb798 100644
--- a/search/ast2sort.py
+++ b/search/ast2sort.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Convert a user's issue sorting directives into SQL clauses.
@@ -28,7 +27,7 @@
import logging
from framework import sql
-from proto import tracker_pb2
+from mrproto import tracker_pb2
from tracker import tracker_constants
diff --git a/search/backendnonviewable.py b/search/backendnonviewable.py
index ab751a4..21f1189 100644
--- a/search/backendnonviewable.py
+++ b/search/backendnonviewable.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Servlet that searches for issues that the specified user cannot view.
@@ -37,7 +36,7 @@
NONVIEWABLE_MEMCACHE_EXPIRATION = 15 * framework_constants.SECS_PER_MINUTE
-class BackendNonviewable(jsonfeed.FlaskInternalTask):
+class BackendNonviewable(jsonfeed.InternalTask):
"""JSON servlet for getting issue IDs that the specified user cannot view."""
CHECK_SAME_APP = True
@@ -114,7 +113,7 @@
def GetAtRiskIIDs(
self, cnxn, user, effective_ids, project, perms, shard_id):
- # type: (MonorailConnection, proto.user_pb2.User, Sequence[int], Project,
+ # type: (MonorailConnection, mrproto.user_pb2.User, Sequence[int], Project,
# permission_objects_pb2.PermissionSet, int) -> Sequence[int]
"""Return IIDs of restricted issues that user might not be able to view."""
at_risk_label_ids = search_helpers.GetPersonalAtRiskLabelIDs(
diff --git a/search/backendsearch.py b/search/backendsearch.py
index 91a00dc..f0fbbbe 100644
--- a/search/backendsearch.py
+++ b/search/backendsearch.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""A servlet that implements the backend of issues search.
@@ -31,7 +30,7 @@
from tracker import tracker_constants
-class BackendSearch(jsonfeed.FlaskInternalTask):
+class BackendSearch(jsonfeed.InternalTask):
"""JSON servlet for issue search in a GAE backend."""
CHECK_SAME_APP = True
@@ -65,7 +64,7 @@
int(1000 * (time.time() - start)))
if pipeline.error:
- error_message = pipeline.error.message
+ error_message = str(pipeline.error)
else:
error_message = None
diff --git a/search/backendsearchpipeline.py b/search/backendsearchpipeline.py
index 69fdc6b..56fb6af 100644
--- a/search/backendsearchpipeline.py
+++ b/search/backendsearchpipeline.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Backend issue issue search and sorting.
@@ -27,8 +26,8 @@
from framework import framework_helpers
from framework import sorting
from framework import sql
-from proto import ast_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import tracker_pb2
from search import ast2ast
from search import ast2select
from search import ast2sort
@@ -156,11 +155,11 @@
where.extend(query_where)
except ast2ast.MalformedQuery as e:
# TODO(jrobbins): inform the user that their query had invalid tokens.
- logging.info('Invalid query tokens %s.\n %r\n\n', e.message, query_ast)
+ logging.info('Invalid query tokens %s.\n %r\n\n', str(e), query_ast)
return [], False, e
except ast2select.NoPossibleResults as e:
# TODO(jrobbins): inform the user that their query was impossible.
- logging.info('Impossible query %s.\n %r\n\n', e.message, query_ast)
+ logging.info('Impossible query %s.\n %r\n\n', str(e), query_ast)
return [], False, e
logging.info('translated to left_joins %r', left_joins)
logging.info('translated to where %r', where)
@@ -203,9 +202,9 @@
issue_ids, db_capped = services.issue.RunIssueQuery(
cnxn, left_joins + sort_left_joins, where, order_by, shard_id=shard_id)
- logging.warn('executed "%s" query %r for %d issues in %dms',
- query_desc, query_ast, len(issue_ids),
- int((time.time() - start_time) * 1000))
+ logging.warning(
+ 'executed "%s" query %r for %d issues in %dms', query_desc, query_ast,
+ len(issue_ids), int((time.time() - start_time) * 1000))
capped = fts_capped or db_capped
return issue_ids, capped, None
@@ -280,7 +279,7 @@
query_desc='getting query issue IDs')
logging.info('Found %d result_iids', len(result_iids))
if error:
- logging.warn('Got error %r', error)
+ logging.warning('Got error %r', error)
projects_str = ','.join(str(pid) for pid in sorted(query_project_ids))
projects_str = projects_str or 'all'
diff --git a/search/frontendsearchpipeline.py b/search/frontendsearchpipeline.py
index ec0a28e..b606672 100644
--- a/search/frontendsearchpipeline.py
+++ b/search/frontendsearchpipeline.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""The FrontendSearchPipeline class manages issue search and sorting.
@@ -24,6 +23,7 @@
import logging
import math
import random
+import six
import time
from google.appengine.api import apiproxy_stub_map
@@ -524,9 +524,9 @@
cnxn, query_ast, project_ids, services, harmonized_config,
is_member=member_of_all_projects)
except query2ast.InvalidQueryError as e:
- return e.message
+ return str(e)
except ast2ast.MalformedQuery as e:
- return e.message
+ return str(e)
return None
@@ -551,7 +551,7 @@
error_responses, services, me_user_ids, logged_in_user_id, new_url_num,
subqueries, can, group_by_spec, sort_spec, warnings, use_cached_searches):
# type: (MonorailConnection, Sequence[str], Sequence[int],
- # proto.tracker_pb2.ProjectIssueConfig,
+ # mrproto.tracker_pb2.ProjectIssueConfig,
# Mapping[Tuple(int, str), Sequence[int]],
# Mapping[Tuple(int, str), Sequence[bool]],
# Mapping[Tuple(int, str), Collection[int]], Sequence[Tuple(int, str)],
@@ -690,7 +690,7 @@
Instead, we do the same check, without blocking on any individual RPC.
"""
- if settings.local_mode:
+ if six.PY3 or settings.local_mode:
# The development server has very different code for RPCs than the
# code used in the hosted environment.
return apiproxy_stub_map.UserRPC.wait_any(active_rpcs)
@@ -777,7 +777,6 @@
nonviewable_iids[sid] = set(issue_ids)
if sid not in nonviewable_iids:
- logging.info('nonviewable for %r not found', key)
logging.info('starting backend call for nonviewable iids %r', key)
rpc = _StartBackendNonviewableCall(
pid, logged_in_user_id, sid, invalidation_timestep)
@@ -1048,7 +1047,7 @@
logging.info('got json text: %r length %r',
json_content[:framework_constants.LOGGING_MAX_LENGTH],
len(json_content))
- if json_content == '':
+ if json_content == b'':
raise Exception('Fast fail')
json_data = json.loads(json_content)
unfiltered_iids[shard_key] = json_data['unfiltered_iids']
@@ -1110,7 +1109,7 @@
logging.info('got json text: %r length %r',
json_content[:framework_constants.LOGGING_MAX_LENGTH],
len(json_content))
- if json_content == '':
+ if json_content == b'':
raise Exception('Fast fail')
json_data = json.loads(json_content)
nonviewable_iids[shard_id] = set(json_data['nonviewable'])
@@ -1120,7 +1119,7 @@
logging.exception(e)
if not remaining_retries:
- logging.warn('Used all retries, so give up on shard %r', shard_id)
+ logging.warning('Used all retries, so give up on shard %r', shard_id)
return
if duration_sec >= settings.backend_deadline:
diff --git a/search/query2ast.py b/search/query2ast.py
index 235f9b3..40c5cdc 100644
--- a/search/query2ast.py
+++ b/search/query2ast.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""A set of functions that integrate the GAE search index with Monorail."""
from __future__ import print_function
@@ -16,8 +15,8 @@
from google.appengine.api import search
-from proto import ast_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import tracker_pb2
# TODO(jrobbins): Consider re-implementing this whole file by using a
@@ -191,9 +190,9 @@
def ParseUserQuery(
query, scope, builtin_fields, harmonized_config, warnings=None,
now=None):
- # type: (str, str, Mapping[str, proto.tracker_pb2.FieldDef],
- # proto.tracker_pb2.ProjectIssueConfig, Sequence[str], int) ->
- # proto.ast_pb2.QueryAST
+ # type: (str, str, Mapping[str, mrproto.tracker_pb2.FieldDef],
+ # mrproto.tracker_pb2.ProjectIssueConfig, Sequence[str], int) ->
+ # mrproto.ast_pb2.QueryAST
"""Parse a user query and return a set of structure terms.
Args:
@@ -251,8 +250,8 @@
def _ParseConjunction(subquery, scope, fields, warnings, now=None):
- # type: (str, str, Mapping[str, proto.tracker_pb2.FieldDef], Sequence[str],
- # int) -> proto.ast_pb2.Condition
+ # type: (str, str, Mapping[str, mrproto.tracker_pb2.FieldDef], Sequence[str],
+ # int) -> mrproto.ast_pb2.Condition
"""Parse part of a user query into a Conjunction PB."""
scoped_query = ('%s %s' % (scope, subquery)).lower()
cond_strs = _ExtractConds(scoped_query, warnings)
@@ -263,8 +262,8 @@
def _ParseCond(cond_str, fields, warnings, now=None):
- # type: (str, Mapping[str, proto.tracker_pb2.FieldDef], Sequence[str],
- # int) -> proto.ast_pb2.Condition
+ # type: (str, Mapping[str, mrproto.tracker_pb2.FieldDef], Sequence[str],
+ # int) -> mrproto.ast_pb2.Condition
"""Parse one user query condition string into a Condition PB."""
op_match = OP_RE.match(cond_str)
# Do not treat as key:value search terms if any of the special prefixes match.
@@ -308,8 +307,8 @@
def _ParseStructuredTerm(prefix, op_str, value, fields, now=None):
- # type: (str, str, str, Mapping[str, proto.tracker_pb2.FieldDef]) ->
- # proto.ast_pb2.Condition
+ # type: (str, str, str, Mapping[str, mrproto.tracker_pb2.FieldDef]) ->
+ # mrproto.ast_pb2.Condition
"""Parse one user structured query term into an internal representation.
Args:
@@ -571,7 +570,7 @@
def _ParseQuery(token_iterator):
- # type (Sequence[proto.ast_pb2.QueryToken]) -> Sequence[str]
+ # type (Sequence[mrproto.ast_pb2.QueryToken]) -> Sequence[str]
"""Recursive helper to convert query tokens into a list of subqueries.
Parses a Query based on the following grammar (EBNF):
@@ -633,7 +632,7 @@
def _ParseOrGroup(token_iterator):
- # type (Sequence[proto.ast_pb2.QueryToken]) -> Sequence[str]
+ # type (Sequence[mrproto.ast_pb2.QueryToken]) -> Sequence[str]
"""Recursive helper to convert a single "OrGroup" into subqueries.
An OrGroup here is based on the following grammar:
@@ -675,7 +674,7 @@
def _ParseAndGroup(token_iterator):
- # type (Sequence[proto.ast_pb2.QueryToken]) -> Sequence[str]
+ # type (Sequence[mrproto.ast_pb2.QueryToken]) -> Sequence[str]
"""Recursive helper to convert a single "AndGroup" into subqueries.
An OrGroup here is based on the following grammar:
@@ -724,7 +723,7 @@
def _ValidateAndTokenizeQuery(query):
- # type: (str) -> Sequence[proto.ast_pb2.QueryToken]
+ # type: (str) -> Sequence[mrproto.ast_pb2.QueryToken]
"""Converts the input query into a set of tokens for easier parsing.
Tokenizing the query string before parsing allows us to not have to as many
@@ -777,7 +776,7 @@
def _TokenizeSubqueryOnOr(subquery):
- # type: (str) -> Sequence[proto.ast_pb2.QueryToken]
+ # type: (str) -> Sequence[mrproto.ast_pb2.QueryToken]
"""Helper to split a subquery by OR and convert the result into tokens.
Args:
@@ -872,10 +871,24 @@
pass
return 'End of PeekIterator'
+ def __next__(self):
+ # type: () -> Any
+ """Gets the next value in the iterator and increments pointer.
+
+ Returns:
+ Next value in iterator.
+
+ Raises:
+ StopIteration if you're at the end of the iterator.
+ """
+ return self.next()
+
def next(self):
# type: () -> Any
"""Gets the next value in the iterator and increments pointer.
+ For backwards compatibility with Python 2.
+
Returns:
Next value in iterator.
diff --git a/search/search_helpers.py b/search/search_helpers.py
index 0b3beb8..2ff4c50 100644
--- a/search/search_helpers.py
+++ b/search/search_helpers.py
@@ -1,7 +1,6 @@
-# Copyright 2018 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
+# Copyright 2018 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
from __future__ import print_function
from __future__ import division
diff --git a/search/searchpipeline.py b/search/searchpipeline.py
index 422a619..0147e53 100644
--- a/search/searchpipeline.py
+++ b/search/searchpipeline.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Helper functions and classes used in issue search and sorting."""
from __future__ import print_function
diff --git a/search/test/ast2ast_test.py b/search/test/ast2ast_test.py
index 9edeaf1..cd50b18 100644
--- a/search/test/ast2ast_test.py
+++ b/search/test/ast2ast_test.py
@@ -1,17 +1,17 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Tests for the ast2ast module."""
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
+import six
import unittest
-from proto import ast_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import tracker_pb2
from search import ast2ast
from search import query2ast
from services import service_manager
@@ -182,7 +182,7 @@
self.assertEqual(
'Searching for issues accross multiple/all projects without '
'project prefixes is ambiguous and is currently not supported.',
- cm.exception.message)
+ str(cm.exception))
def testPreprocessBlockedOnCond_WithExternalIssues(self):
blockedon_field = BUILTIN_ISSUE_FIELDS['blockedon']
@@ -322,7 +322,7 @@
self.assertEqual(
'Searching for issues accross multiple/all projects without '
'project prefixes is ambiguous and is currently not supported.',
- cm.exception.message)
+ str(cm.exception))
def testPreprocessBlockingCond_WithExternalIssues(self):
blocking_field = BUILTIN_ISSUE_FIELDS['blocking']
@@ -452,19 +452,19 @@
ast_pb2.QueryOp.IS_DEFINED, [BUILTIN_ISSUE_FIELDS['label']],
['Priority', 'Severity'], [])
regex = ast2ast._MakePrefixRegex(cond)
- self.assertRegexpMatches('Priority-1', regex)
- self.assertRegexpMatches('Severity-3', regex)
- self.assertNotRegexpMatches('My-Priority', regex)
+ self.assertRegex('Priority-1', regex)
+ self.assertRegex('Severity-3', regex)
+ self.assertNotRegex('My-Priority', regex)
def testKeyValueRegex(self):
cond = ast_pb2.MakeCond(
ast_pb2.QueryOp.KEY_HAS, [BUILTIN_ISSUE_FIELDS['label']],
['Type-Feature', 'Type-Security'], [])
regex = ast2ast._MakeKeyValueRegex(cond)
- self.assertRegexpMatches('Type-Feature', regex)
- self.assertRegexpMatches('Type-Bug-Security', regex)
- self.assertNotRegexpMatches('Type-Bug', regex)
- self.assertNotRegexpMatches('Security-Feature', regex)
+ self.assertRegex('Type-Feature', regex)
+ self.assertRegex('Type-Bug-Security', regex)
+ self.assertNotRegex('Type-Bug', regex)
+ self.assertNotRegex('Security-Feature', regex)
def testKeyValueRegex_multipleKeys(self):
cond = ast_pb2.MakeCond(
@@ -478,8 +478,8 @@
ast_pb2.QueryOp.TEXT_HAS, [BUILTIN_ISSUE_FIELDS['label']],
['Type-Bug'], [])
regex = ast2ast._MakeKeyValueRegex(cond)
- self.assertRegexpMatches('Type-Bug-Security', regex)
- self.assertNotRegexpMatches('Type-BugSecurity', regex)
+ self.assertRegex('Type-Bug-Security', regex)
+ self.assertNotRegex('Type-BugSecurity', regex)
def testPreprocessLabelCond(self):
label_field = BUILTIN_ISSUE_FIELDS['label']
@@ -693,7 +693,7 @@
self.cnxn, cond, [1], self.services, None, True)
self.assertEqual(ast_pb2.QueryOp.EQ, actual.op)
self.assertEqual([hotlist_id_field], actual.field_defs)
- self.assertItemsEqual([10, 30, 40, 50, 60], actual.int_values)
+ six.assertCountEqual(self, [10, 30, 40, 50, 60], actual.int_values)
def testPreprocessHotlistCond_UserNotFound(self):
hotlist_field = BUILTIN_ISSUE_FIELDS['hotlist']
diff --git a/search/test/ast2select_test.py b/search/test/ast2select_test.py
index f20d524..903c8c8 100644
--- a/search/test/ast2select_test.py
+++ b/search/test/ast2select_test.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Tests for the ast2select module."""
from __future__ import print_function
@@ -13,8 +12,8 @@
import unittest
from framework import sql
-from proto import ast_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import tracker_pb2
from search import ast2select
from search import query2ast
from tracker import tracker_bizobj
diff --git a/search/test/ast2sort_test.py b/search/test/ast2sort_test.py
index 9d365e8..ac5a00b 100644
--- a/search/test/ast2sort_test.py
+++ b/search/test/ast2sort_test.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Tests for the ast2sort module."""
from __future__ import print_function
@@ -10,7 +9,7 @@
import unittest
-from proto import tracker_pb2
+from mrproto import tracker_pb2
from search import ast2sort
from search import query2ast
diff --git a/search/test/backendnonviewable_test.py b/search/test/backendnonviewable_test.py
index 5360a93..a1b16c7 100644
--- a/search/test/backendnonviewable_test.py
+++ b/search/test/backendnonviewable_test.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Unittests for monorail.search.backendnonviewable."""
from __future__ import print_function
diff --git a/search/test/backendsearch_test.py b/search/test/backendsearch_test.py
index 6a9a710..f018f2f 100644
--- a/search/test/backendsearch_test.py
+++ b/search/test/backendsearch_test.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Unittests for monorail.search.backendsearch."""
from __future__ import print_function
@@ -125,4 +124,4 @@
self.mox.VerifyAll()
self.assertEqual([], json_data['unfiltered_iids'])
self.assertFalse(json_data['search_limit_reached'])
- self.assertEqual(error.message, json_data['error'])
+ self.assertEqual(str(error), json_data['error'])
diff --git a/search/test/backendsearchpipeline_test.py b/search/test/backendsearchpipeline_test.py
index dab2dba..1da86e7 100644
--- a/search/test/backendsearchpipeline_test.py
+++ b/search/test/backendsearchpipeline_test.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Tests for the backendsearchpipeline module."""
from __future__ import print_function
@@ -21,8 +20,8 @@
from framework import framework_helpers
from framework import sorting
from framework import sql
-from proto import ast_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import tracker_pb2
from search import backendsearchpipeline
from search import ast2ast
from search import query2ast
diff --git a/search/test/frontendsearchpipeline_test.py b/search/test/frontendsearchpipeline_test.py
index 9a94c3d..09883ad 100644
--- a/search/test/frontendsearchpipeline_test.py
+++ b/search/test/frontendsearchpipeline_test.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Tests for the frontendsearchpipeline module."""
from __future__ import print_function
@@ -23,9 +22,9 @@
from framework import framework_helpers
from framework import sorting
from framework import urls
-from proto import ast_pb2
-from proto import project_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import project_pb2
+from mrproto import tracker_pb2
from search import frontendsearchpipeline
from search import searchpipeline
from search import query2ast
diff --git a/search/test/query2ast_test.py b/search/test/query2ast_test.py
index fc92e72..a122d99 100644
--- a/search/test/query2ast_test.py
+++ b/search/test/query2ast_test.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Tests for the query2ast module."""
from __future__ import print_function
@@ -13,8 +12,8 @@
import unittest
import mock
-from proto import ast_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import tracker_pb2
from search import query2ast
from tracker import tracker_bizobj
@@ -751,7 +750,7 @@
query2ast.ParseUserQuery(
'modified>=' + val, '', BUILTIN_ISSUE_FIELDS,
self.default_config)
- self.assertEqual('Could not parse date: ' + val, cm.exception.message)
+ self.assertEqual('Could not parse date: ' + val, str(cm.exception))
def testQueryToSubqueries_BasicQuery(self):
self.assertEqual(['owner:me'], query2ast.QueryToSubqueries('owner:me'))
diff --git a/search/test/search_helpers_test.py b/search/test/search_helpers_test.py
index b9cfb51..e5746a6 100644
--- a/search/test/search_helpers_test.py
+++ b/search/test/search_helpers_test.py
@@ -1,7 +1,6 @@
-# Copyright 2018 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
+# Copyright 2018 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Unit tests for monorail.search.search_helpers."""
from __future__ import print_function
@@ -19,7 +18,7 @@
from google.appengine.ext import testbed
from framework import permissions
from framework import sql
-from proto import user_pb2
+from mrproto import user_pb2
from services import chart_svc
from services import service_manager
from testing import fake
diff --git a/search/test/searchpipeline_test.py b/search/test/searchpipeline_test.py
index 5d23316..ce4426a 100644
--- a/search/test/searchpipeline_test.py
+++ b/search/test/searchpipeline_test.py
@@ -1,7 +1,6 @@
-# Copyright 2016 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
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
"""Tests for the searchpipeline module."""
from __future__ import print_function
@@ -10,8 +9,8 @@
import unittest
-from proto import ast_pb2
-from proto import tracker_pb2
+from mrproto import ast_pb2
+from mrproto import tracker_pb2
from search import searchpipeline
from services import service_manager
from testing import fake