aboutsummaryrefslogtreecommitdiffhomepage
path: root/third_party/py/gflags/gflags/exceptions.py
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/py/gflags/gflags/exceptions.py')
-rw-r--r--third_party/py/gflags/gflags/exceptions.py133
1 files changed, 133 insertions, 0 deletions
diff --git a/third_party/py/gflags/gflags/exceptions.py b/third_party/py/gflags/gflags/exceptions.py
new file mode 100644
index 0000000000..efaabb89fd
--- /dev/null
+++ b/third_party/py/gflags/gflags/exceptions.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+# Copyright 2002 Google Inc. All Rights Reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+"""//gflags exceptions.
+
+Instead of importing this module directly, it's preferable to import the
+flags package and use the aliases defined at the package level.
+"""
+
+import sys
+
+import _helpers
+
+
+# TODO(vrusinov): use DISCLAIM_key_flags when it's moved out of __init__.
+_helpers.disclaim_module_ids.add(id(sys.modules[__name__]))
+
+
+class Error(Exception):
+ """The base class for all flags errors."""
+
+
+# TODO(b/31596146): Remove FlagsError.
+FlagsError = Error
+
+
+class CantOpenFlagFileError(Error):
+ """Raised if flagfile fails to open: doesn't exist, wrong permissions, etc."""
+
+
+class DuplicateFlagCannotPropagateNoneToSwig(Error):
+ """Raised when redefining a SWIG flag and the default value is None.
+
+ It's raised when redefining a SWIG flag with allow_override=True and the
+ default value is None. Because it's currently impossible to pass None default
+ value back to SWIG. See FlagValues.SetDefault for details.
+ """
+
+
+class DuplicateFlagError(Error):
+ """Raised if there is a flag naming conflict."""
+
+ @classmethod
+ def from_flag(cls, flagname, flag_values, other_flag_values=None):
+ """Create a DuplicateFlagError by providing flag name and values.
+
+ Args:
+ flagname: Name of the flag being redefined.
+ flag_values: FlagValues object containing the first definition of
+ flagname.
+ other_flag_values: If this argument is not None, it should be the
+ FlagValues object where the second definition of flagname occurs.
+ If it is None, we assume that we're being called when attempting
+ to create the flag a second time, and we use the module calling
+ this one as the source of the second definition.
+
+ Returns:
+ An instance of DuplicateFlagError.
+ """
+ first_module = flag_values.FindModuleDefiningFlag(
+ flagname, default='<unknown>')
+ if other_flag_values is None:
+ second_module = _helpers.GetCallingModule()
+ else:
+ second_module = other_flag_values.FindModuleDefiningFlag(
+ flagname, default='<unknown>')
+ flag_summary = flag_values[flagname].help
+ msg = ("The flag '%s' is defined twice. First from %s, Second from %s. "
+ "Description from first occurrence: %s") % (
+ flagname, first_module, second_module, flag_summary)
+ return cls(msg)
+
+
+class IllegalFlagValueError(Error):
+ """Raised if the flag command line argument is illegal."""
+
+
+# TODO(yileiyang): Remove IllegalFlagValue.
+IllegalFlagValue = IllegalFlagValueError
+
+
+class UnrecognizedFlagError(Error):
+ """Raised if a flag is unrecognized.
+
+ Attributes:
+ flagname: Name of the unrecognized flag.
+ flagvalue: Value of the flag, empty if the flag is not defined.
+ """
+
+ def __init__(self, flagname, flagvalue='', suggestions=None):
+ self.flagname = flagname
+ self.flagvalue = flagvalue
+ if suggestions:
+ tip = '. Did you mean: %s?' % ', '.join(suggestions)
+ else:
+ tip = ''
+ Error.__init__(
+ self, 'Unknown command line flag \'%s\'%s' % (flagname, tip))
+
+
+class UnparsedFlagAccessError(Error):
+ """Attempt to use flag from unparsed FlagValues."""
+
+
+class ValidationError(Error):
+ """Raised if flag validator constraint is not satisfied."""