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"