Refactor acloud.public.errors to acloud.errors.
Bug: 113753798
Test: atest acloud_test && run acloud create/list/delete
Change-Id: I03b4b34769d754bfebd279895b0ca44311bbecc7
diff --git a/errors.py b/errors.py
index 8655752..5d08244 100644
--- a/errors.py
+++ b/errors.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-#
# Copyright 2018 - The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
@@ -15,11 +13,96 @@
# limitations under the License.
r"""Custom Exceptions for acloud."""
+HTTP_NOT_FOUND_CODE = 404
+
+
+class DriverError(Exception):
+ """Base Android Gce driver exception."""
+
+
+class ConfigError(DriverError):
+ """Error related to config."""
+
+
+class CommandArgError(DriverError):
+ """Error related to command line args."""
+
+
+class GceOperationTimeoutError(DriverError):
+ """Error raised when a GCE operation timedout."""
+
+
+class HttpError(DriverError):
+ """Error related to http requests."""
+
+ def __init__(self, code, message):
+ self.code = code
+ super(HttpError, self).__init__(message)
+
+ @staticmethod
+ def CreateFromHttpError(http_error):
+ """Create from an apiclient.errors.HttpError.
+
+ Parse the error code from apiclient.errors.HttpError
+ and create an instance of HttpError from this module
+ that has the error code.
+
+ Args:
+ http_error: An apiclient.errors.HttpError instance.
+
+ Returns:
+ An HttpError instance from this module.
+ """
+ return HttpError(http_error.resp.status, str(http_error))
+
+
+class ResourceNotFoundError(HttpError):
+ """Error raised when a resource is not found."""
+
+
+class InvalidVirtualDeviceIpError(DriverError):
+ """Invalid virtual device's IP is set.
+
+ Raise this when the virtual device's IP of an AVD instance is invalid.
+ """
+
+
+class HasRetriableRequestsError(DriverError):
+ """Raised when some retriable requests fail in a batch execution."""
+
+
+class AuthenticationError(DriverError):
+ """Raised when authentication fails."""
+
+
+class DeviceBootError(DriverError):
+ """To catch device boot errors."""
+
+
+class NoSubnetwork(DriverError):
+ """When there is no subnetwork for the GCE."""
+
+
+class DeviceConnectionError(DriverError):
+ """To catch device connection errors."""
+
+
+class DeviceBootTimeoutError(DeviceBootError):
+ """Raised when an AVD defice failed to boot within timeout."""
+
class SetupError(Exception):
"""Base Setup cmd exception."""
+class OSTypeError(SetupError):
+ """Error related to OS type."""
+
+
+class NoGoogleSDKDetected(SetupError):
+ """Can't find the SDK path."""
+
+
class PackageInstallError(SetupError):
"""Error related to package installation."""
diff --git a/internal/lib/android_build_client.py b/internal/lib/android_build_client.py
index 735c0e4..32a1179 100644
--- a/internal/lib/android_build_client.py
+++ b/internal/lib/android_build_client.py
@@ -21,9 +21,8 @@
import apiclient
-from acloud import errors as root_errors
+from acloud import errors
from acloud.internal.lib import base_cloud_client
-from acloud.public import errors
logger = logging.getLogger(__name__)
@@ -173,7 +172,7 @@
build = self.Execute(api)
if build:
return str(build.get("builds")[0].get("buildId"))
- raise root_errors.GetBuildIDError(
+ raise errors.GetBuildIDError(
"No available good builds for branch: %s target: %s"
% (build_branch, build_target)
)
diff --git a/internal/lib/android_build_client_test.py b/internal/lib/android_build_client_test.py
index 5629a68..c60a182 100644
--- a/internal/lib/android_build_client_test.py
+++ b/internal/lib/android_build_client_test.py
@@ -24,9 +24,9 @@
import apiclient
+from acloud import errors
from acloud.internal.lib import android_build_client
from acloud.internal.lib import driver_test_lib
-from acloud.public import errors
# pylint: disable=protected-access
class AndroidBuildClientTest(driver_test_lib.BaseDriverTest):
diff --git a/internal/lib/android_compute_client.py b/internal/lib/android_compute_client.py
index 9dde2c8..ebd5481 100755
--- a/internal/lib/android_compute_client.py
+++ b/internal/lib/android_compute_client.py
@@ -37,9 +37,9 @@
import os
import uuid
+from acloud import errors
from acloud.internal.lib import gcompute_client
from acloud.internal.lib import utils
-from acloud.public import errors
logger = logging.getLogger(__name__)
@@ -226,7 +226,7 @@
utils.VerifyRsaPubKey(rsa)
return rsa
- # pylint: disable=too-many-locals
+ # pylint: disable=too-many-locals,arguments-differ
def CreateInstance(self,
instance,
image_name,
diff --git a/internal/lib/android_compute_client_test.py b/internal/lib/android_compute_client_test.py
index cf13020..ff5fd95 100644
--- a/internal/lib/android_compute_client_test.py
+++ b/internal/lib/android_compute_client_test.py
@@ -17,10 +17,10 @@
import unittest
import mock
+from acloud import errors
from acloud.internal.lib import android_compute_client
from acloud.internal.lib import driver_test_lib
from acloud.internal.lib import gcompute_client
-from acloud.public import errors
class AndroidComputeClientTest(driver_test_lib.BaseDriverTest):
diff --git a/internal/lib/auth.py b/internal/lib/auth.py
index 966e72e..819abc8 100644
--- a/internal/lib/auth.py
+++ b/internal/lib/auth.py
@@ -47,7 +47,7 @@
from oauth2client.contrib import multistore_file
from oauth2client import tools as oauth2_tools
-from acloud.public import errors
+from acloud import errors
logger = logging.getLogger(__name__)
HOME_FOLDER = os.path.expanduser("~")
diff --git a/internal/lib/base_cloud_client.py b/internal/lib/base_cloud_client.py
index 273e2bd..9f851da 100755
--- a/internal/lib/base_cloud_client.py
+++ b/internal/lib/base_cloud_client.py
@@ -29,8 +29,8 @@
import httplib2
from oauth2client import client
+from acloud import errors
from acloud.internal.lib import utils
-from acloud.public import errors
logger = logging.getLogger(__name__)
diff --git a/internal/lib/base_cloud_client_test.py b/internal/lib/base_cloud_client_test.py
index 40c1f67..de74cd8 100644
--- a/internal/lib/base_cloud_client_test.py
+++ b/internal/lib/base_cloud_client_test.py
@@ -23,9 +23,9 @@
import apiclient
+from acloud import errors
from acloud.internal.lib import base_cloud_client
from acloud.internal.lib import driver_test_lib
-from acloud.public import errors
class FakeError(Exception):
diff --git a/internal/lib/gcompute_client.py b/internal/lib/gcompute_client.py
index ada5306..1f44de0 100755
--- a/internal/lib/gcompute_client.py
+++ b/internal/lib/gcompute_client.py
@@ -32,9 +32,9 @@
import logging
import os
+from acloud import errors
from acloud.internal.lib import base_cloud_client
from acloud.internal.lib import utils
-from acloud.public import errors
logger = logging.getLogger(__name__)
diff --git a/internal/lib/gcompute_client_test.py b/internal/lib/gcompute_client_test.py
index b84cdbd..a34bfa2 100644
--- a/internal/lib/gcompute_client_test.py
+++ b/internal/lib/gcompute_client_test.py
@@ -25,10 +25,10 @@
# pylint: disable=import-error
import apiclient.http
+from acloud import errors
from acloud.internal.lib import driver_test_lib
from acloud.internal.lib import gcompute_client
from acloud.internal.lib import utils
-from acloud.public import errors
GS_IMAGE_SOURCE_URI = "https://storage.googleapis.com/fake-bucket/fake.tar.gz"
GS_IMAGE_SOURCE_DISK = (
diff --git a/internal/lib/goldfish_compute_client.py b/internal/lib/goldfish_compute_client.py
index 9697d8e..4377d6d 100644
--- a/internal/lib/goldfish_compute_client.py
+++ b/internal/lib/goldfish_compute_client.py
@@ -42,9 +42,9 @@
import getpass
import logging
+from acloud import errors
from acloud.internal.lib import android_compute_client
from acloud.internal.lib import gcompute_client
-from acloud.public import errors
logger = logging.getLogger(__name__)
diff --git a/internal/lib/gstorage_client.py b/internal/lib/gstorage_client.py
index b309903..586b173 100755
--- a/internal/lib/gstorage_client.py
+++ b/internal/lib/gstorage_client.py
@@ -20,9 +20,9 @@
import apiclient
+from acloud import errors
from acloud.internal.lib import base_cloud_client
from acloud.internal.lib import utils
-from acloud.public import errors
logger = logging.getLogger(__name__)
diff --git a/internal/lib/gstorage_client_test.py b/internal/lib/gstorage_client_test.py
index f49802b..e2426e1 100644
--- a/internal/lib/gstorage_client_test.py
+++ b/internal/lib/gstorage_client_test.py
@@ -8,9 +8,9 @@
import apiclient
+from acloud import errors
from acloud.internal.lib import driver_test_lib
from acloud.internal.lib import gstorage_client
-from acloud.public import errors
# pylint: disable=protected-access, no-member
diff --git a/internal/lib/utils.py b/internal/lib/utils.py
index 418d14b..b044d38 100755
--- a/internal/lib/utils.py
+++ b/internal/lib/utils.py
@@ -36,9 +36,8 @@
import uuid
import zipfile
-from acloud import errors as root_errors
+from acloud import errors
from acloud.internal import constants
-from acloud.public import errors
logger = logging.getLogger(__name__)
@@ -454,7 +453,7 @@
with zipfile.ZipFile(sourcefile, 'r') as compressor:
compressor.extractall(dest_path)
else:
- raise root_errors.UnsupportedCompressionFileType(
+ raise errors.UnsupportedCompressionFileType(
"Sorry, we could only support compression file type "
"for zip or tar.gz.")
@@ -764,7 +763,7 @@
"""
bin_path = find_executable(cmd)
if not bin_path:
- raise root_errors.NoExecuteCmd("unable to locate %s" % cmd)
+ raise errors.NoExecuteCmd("unable to locate %s" % cmd)
command = [bin_path] + args
logger.debug("Running '%s'", ' '.join(command))
with open(os.devnull, "w") as dev_null:
diff --git a/internal/lib/utils_test.py b/internal/lib/utils_test.py
index 9225ddd..79c1c6d 100644
--- a/internal/lib/utils_test.py
+++ b/internal/lib/utils_test.py
@@ -27,9 +27,9 @@
import unittest
import mock
+from acloud import errors
from acloud.internal.lib import driver_test_lib
from acloud.internal.lib import utils
-from acloud.public import errors
# Tkinter may not be supported so mock it out.
try:
diff --git a/public/acloud_kernel/kernel_swapper.py b/public/acloud_kernel/kernel_swapper.py
index 6041b82..1e6abe3 100755
--- a/public/acloud_kernel/kernel_swapper.py
+++ b/public/acloud_kernel/kernel_swapper.py
@@ -19,7 +19,7 @@
"""
import subprocess
-from acloud.public import errors
+from acloud import errors
from acloud.public import report
from acloud.internal.lib import android_compute_client
from acloud.internal.lib import auth
diff --git a/public/acloud_main.py b/public/acloud_main.py
index 264560b..780a61d 100644
--- a/public/acloud_main.py
+++ b/public/acloud_main.py
@@ -59,6 +59,7 @@
OAUTH2_LOGGER.addHandler(logging.FileHandler("/dev/null"))
# pylint: disable=wrong-import-position
+from acloud import errors
from acloud.create import create
from acloud.create import create_args
from acloud.delete import delete
@@ -72,7 +73,6 @@
from acloud.public import acloud_common
from acloud.public import config
from acloud.public import device_driver
-from acloud.public import errors
from acloud.public.actions import create_cuttlefish_action
from acloud.public.actions import create_goldfish_action
from acloud.setup import setup
diff --git a/public/actions/common_operations.py b/public/actions/common_operations.py
index a5a8518..dbdd3a2 100644
--- a/public/actions/common_operations.py
+++ b/public/actions/common_operations.py
@@ -26,8 +26,8 @@
import os
import subprocess
+from acloud import errors
from acloud.public import avd
-from acloud.public import errors
from acloud.public import report
from acloud.internal import constants
from acloud.internal.lib import utils
diff --git a/public/actions/create_goldfish_action.py b/public/actions/create_goldfish_action.py
index b47f52b..8569d0b 100644
--- a/public/actions/create_goldfish_action.py
+++ b/public/actions/create_goldfish_action.py
@@ -21,7 +21,7 @@
import logging
import os
-from acloud.public import errors
+from acloud import errors
from acloud.public.actions import common_operations
from acloud.public.actions import base_device_factory
from acloud.internal.lib import android_build_client
diff --git a/public/config.py b/public/config.py
index e9d8bcd..c4e7ff2 100755
--- a/public/config.py
+++ b/public/config.py
@@ -49,10 +49,10 @@
from google.protobuf import text_format
# pylint: disable=no-name-in-module,import-error
+from acloud import errors
from acloud.internal.proto import internal_config_pb2
from acloud.internal.proto import user_config_pb2
from acloud.create import create_args
-from acloud.public import errors
_CONFIG_DATA_PATH = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "data")
diff --git a/public/config_test.py b/public/config_test.py
index dd4e757..e6cf679 100644
--- a/public/config_test.py
+++ b/public/config_test.py
@@ -21,10 +21,10 @@
import mock
# pylint: disable=no-name-in-module,import-error
+from acloud import errors
from acloud.internal.proto import internal_config_pb2
from acloud.internal.proto import user_config_pb2
from acloud.public import config
-from acloud.public import errors
class AcloudConfigManagerTest(unittest.TestCase):
diff --git a/public/device_driver.py b/public/device_driver.py
index b401410..739f470 100755
--- a/public/device_driver.py
+++ b/public/device_driver.py
@@ -36,8 +36,8 @@
import dateutil.parser
import dateutil.tz
+from acloud import errors
from acloud.public import avd
-from acloud.public import errors
from acloud.public import report
from acloud.public.actions import common_operations
from acloud.internal import constants
diff --git a/public/errors.py b/public/errors.py
deleted file mode 100755
index 9c13193..0000000
--- a/public/errors.py
+++ /dev/null
@@ -1,105 +0,0 @@
-#!/usr/bin/env python
-#
-# Copyright 2016 - The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-"""Define errors that are raised by the driver."""
-
-HTTP_NOT_FOUND_CODE = 404
-
-
-class DriverError(Exception):
- """Base Android Gce driver exception."""
-
-
-class ConfigError(DriverError):
- """Error related to config."""
-
-
-class CommandArgError(DriverError):
- """Error related to command line args."""
-
-
-class GceOperationTimeoutError(DriverError):
- """Error raised when a GCE operation timedout."""
-
-
-class HttpError(DriverError):
- """Error related to http requests."""
-
- def __init__(self, code, message):
- self.code = code
- super(HttpError, self).__init__(message)
-
- @staticmethod
- def CreateFromHttpError(http_error):
- """Create from an apiclient.errors.HttpError.
-
- Parse the error code from apiclient.errors.HttpError
- and create an instance of HttpError from this module
- that has the error code.
-
- Args:
- http_error: An apiclient.errors.HttpError instance.
-
- Returns:
- An HttpError instance from this module.
- """
- return HttpError(http_error.resp.status, str(http_error))
-
-
-class ResourceNotFoundError(HttpError):
- """Error raised when a resource is not found."""
-
-
-class InvalidVirtualDeviceIpError(DriverError):
- """Invalid virtual device's IP is set.
-
- Raise this when the virtual device's IP of an AVD instance is invalid.
- """
-
-
-class HasRetriableRequestsError(DriverError):
- """Raised when some retriable requests fail in a batch execution."""
-
-
-class AuthenticationError(DriverError):
- """Raised when authentication fails."""
-
-
-class DeviceBootError(DriverError):
- """To catch device boot errors."""
-
-
-class NoSubnetwork(DriverError):
- """When there is no subnetwork for the GCE."""
-
-
-class DeviceConnectionError(DriverError):
- """To catch device connection errors."""
-
-
-class DeviceBootTimeoutError(DeviceBootError):
- """Raised when an AVD defice failed to boot within timeout."""
-
-
-class SetupError(Exception):
- """Base Setup cmd exception."""
-
-
-class OSTypeError(SetupError):
- """Error related to OS type."""
-
-
-class NoGoogleSDKDetected(SetupError):
- """Can't find the SDK path."""
diff --git a/setup/google_sdk.py b/setup/google_sdk.py
index 2ff009b..c012dfe 100644
--- a/setup/google_sdk.py
+++ b/setup/google_sdk.py
@@ -36,8 +36,8 @@
import tempfile
import urllib2
+from acloud import errors
from acloud.internal.lib import utils
-from acloud.public import errors
SDK_BIN_PATH = os.path.join("google-cloud-sdk", "bin")
GCLOUD_BIN = "gcloud"