Skip to content

Commit fadd834

Browse files
committed
Adding proper exception handling to match with the legacy implementation
1 parent d692cd9 commit fadd834

File tree

3 files changed

+18
-15
lines changed

3 files changed

+18
-15
lines changed

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
"six>=1.15.0",
2828
"urllib3>=1.26.2,<2",
2929
"legacy-cgi>=2.6.2; python_version>='3.10'",
30+
"google-api-python-client"
3031
],
3132
classifiers=[
3233
"Programming Language :: Python :: 3",

src/google/appengine/api/modules/modules.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ def get_versions(module=None):
294294
response = request.execute()
295295
except errors.HttpError as e:
296296
if e.resp.status == 404:
297-
raise InvalidModuleError(f"Module '{module}' not found.") from e
297+
raise InvalidModuleError(f"") from e
298298
_raise_error(e)
299299

300300
return [version['id'] for version in response.get('versions', [])]
@@ -348,7 +348,7 @@ def get_default_version(module=None):
348348
response = request.execute()
349349
except errors.HttpError as e:
350350
if e.resp.status == 404:
351-
raise InvalidModuleError(f"Module '{module}' not found.") from e
351+
raise InvalidModuleError(f"") from e
352352
_raise_error(e)
353353

354354
allocations = response.get('split', {}).get('allocations')
@@ -430,12 +430,15 @@ def get_num_instances(
430430
try:
431431
response = request.execute()
432432
except errors.HttpError as e:
433+
if e.resp.status == 404:
434+
raise InvalidModuleError(f"") from e
433435
_raise_error(e)
434436

435-
if 'manualScaling' in response:
436-
return response['manualScaling'].get('instances')
437+
if 'manualScaling' not in response:
438+
raise InvalidVersionError(f"")
439+
440+
return response['manualScaling'].get('instances')
437441

438-
return 0
439442

440443
def get_num_instances_legacy(module, version):
441444
def _ResultHook(rpc):
@@ -753,6 +756,8 @@ def get_hostname(
753756
except errors.HttpError as e:
754757
_raise_error(e)
755758

759+
if req_module not in services:
760+
raise InvalidModuleError(f"")
756761
# Legacy Applications (Without "Engines")
757762
if len(services) == 1 and services[0] == 'default':
758763
if req_module != 'default':
@@ -832,4 +837,3 @@ def _ResultHook(rpc):
832837
response = modules_service_pb2.GetHostnameResponse()
833838
return _MakeAsyncCall('GetHostname', request, response,
834839
_ResultHook).get_result()
835-

tests/google/appengine/api/modules/modules_test.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ def testGetVersions_InvalidModule(self):
227227
mock_request.execute().AndRaise(self._CreateHttpError(404))
228228
self.mox.ReplayAll()
229229
with self.assertRaisesRegex(modules.InvalidModuleError,
230-
"Module 'foo' not found."):
230+
""):
231231
modules.get_versions(module='foo')
232232

233233
# --- Tests for Legacy get_versions ---
@@ -366,7 +366,7 @@ def testGetDefaultVersion_InvalidModule(self):
366366
self.mox.ReplayAll()
367367

368368
with self.assertRaisesRegex(modules.InvalidModuleError,
369-
"Module 'foo' not found."):
369+
""):
370370
modules.get_default_version(module='foo')
371371

372372
# --- Tests for legacy get_default_version ---
@@ -456,7 +456,9 @@ def testGetNumInstances_NoManualScaling(self):
456456
versionsId='v1').AndReturn(mock_request)
457457
mock_request.execute().AndReturn({'automaticScaling': {}})
458458
self.mox.ReplayAll()
459-
self.assertEqual(0, modules.get_num_instances())
459+
460+
with self.assertRaises(modules.InvalidVersionError):
461+
modules.get_num_instances()
460462

461463
def testGetNumInstances_InvalidVersion(self):
462464
os.environ['MODULES_USE_ADMIN_API'] = 'true'
@@ -479,7 +481,7 @@ def testGetNumInstances_InvalidVersion(self):
479481
versionsId='v-bad').AndReturn(mock_request)
480482
mock_request.execute().AndRaise(self._CreateHttpError(404))
481483
self.mox.ReplayAll()
482-
with self.assertRaises(modules.InvalidVersionError):
484+
with self.assertRaises(modules.InvalidModuleError):
483485
modules.get_num_instances(version='v-bad')
484486

485487
# --- Tests for updated get_num_instances ---
@@ -995,7 +997,7 @@ def testGetHostname_WithVersion_NoInstance(self):
995997
self.mox.StubOutWithMock(modules, '_get_project_id')
996998
modules._get_project_id().AndReturn('project')
997999
self.mox.StubOutWithMock(modules, 'get_modules')
998-
modules.get_modules().AndReturn(['default', 'other'])
1000+
modules.get_modules().AndReturn(['default', 'other', 'foo'])
9991001
mock_apps = self.mox.CreateMockAnything()
10001002
mock_get_request = self.mox.CreateMockAnything()
10011003
mock_admin_api_client.apps().AndReturn(mock_apps)
@@ -1011,14 +1013,12 @@ def testGetHostname_Instance_Success(self):
10111013
mock_client_1 = self.mox.CreateMockAnything()
10121014
mock_client_2 = self.mox.CreateMockAnything()
10131015

1014-
# Mock the two main dependencies of get_hostname
10151016
self.mox.StubOutWithMock(modules, '_get_admin_api_client_with_useragent')
10161017
modules._get_admin_api_client_with_useragent(
10171018
'get_hostname').AndReturn(mock_client_1)
10181019
self.mox.StubOutWithMock(modules.discovery, 'build')
10191020
modules.discovery.build('appengine', 'v1').AndReturn(mock_client_2)
10201021

1021-
# Mock the helper functions
10221022
self.mox.StubOutWithMock(modules, '_get_project_id')
10231023
modules._get_project_id().AndReturn('project')
10241024
self.mox.StubOutWithMock(modules, 'get_modules')
@@ -1028,15 +1028,13 @@ def testGetHostname_Instance_Success(self):
10281028
self.mox.StubOutWithMock(modules, 'get_current_version_name')
10291029
modules.get_current_version_name().AndReturn('v1')
10301030

1031-
# Set up expectations for the first client call
10321031
mock_apps_1 = self.mox.CreateMockAnything()
10331032
mock_get_request = self.mox.CreateMockAnything()
10341033
mock_client_1.apps().AndReturn(mock_apps_1)
10351034
mock_apps_1.get(appsId='project').AndReturn(mock_get_request)
10361035
mock_get_request.execute().AndReturn(
10371036
{'defaultHostname': 'project.appspot.com'})
10381037

1039-
# Set up expectations for the second client call
10401038
mock_apps_2 = self.mox.CreateMockAnything()
10411039
mock_services_2 = self.mox.CreateMockAnything()
10421040
mock_versions_2 = self.mox.CreateMockAnything()

0 commit comments

Comments
 (0)