Skip to content

Commit 2d94e27

Browse files
committed
[Python APIView] vendor azure-core to avoid dependency conflict
1 parent 804043d commit 2d94e27

File tree

7 files changed

+1146
-0
lines changed

7 files changed

+1146
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# --------------------------------------------------------------------------
2+
#
3+
# Copyright (c) Microsoft Corporation. All rights reserved.
4+
#
5+
# The MIT License (MIT)
6+
#
7+
# Permission is hereby granted, free of charge, to any person obtaining a copy
8+
# of this software and associated documentation files (the ""Software""), to
9+
# deal in the Software without restriction, including without limitation the
10+
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
11+
# sell copies of the Software, and to permit persons to whom the Software is
12+
# furnished to do so, subject to the following conditions:
13+
#
14+
# The above copyright notice and this permission notice shall be included in
15+
# all copies or substantial portions of the Software.
16+
#
17+
# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22+
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
23+
# IN THE SOFTWARE.
24+
#
25+
# --------------------------------------------------------------------------
26+
from typing import Any
27+
from enum import EnumMeta, Enum
28+
29+
30+
class CaseInsensitiveEnumMeta(EnumMeta):
31+
"""Enum metaclass to allow for interoperability with case-insensitive strings.
32+
33+
Consuming this metaclass in an SDK should be done in the following manner:
34+
35+
.. code-block:: python
36+
37+
from enum import Enum
38+
from azure.core import CaseInsensitiveEnumMeta
39+
40+
class MyCustomEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta):
41+
FOO = 'foo'
42+
BAR = 'bar'
43+
44+
"""
45+
46+
def __getitem__(cls, name: str) -> Any:
47+
# disabling pylint bc of pylint bug https://github.com/PyCQA/astroid/issues/713
48+
return super(CaseInsensitiveEnumMeta, cls).__getitem__(name.upper())
49+
50+
def __getattr__(cls, name: str) -> Enum:
51+
"""Return the enum member matching `name`.
52+
53+
We use __getattr__ instead of descriptors or inserting into the enum
54+
class' __dict__ in order to support `name` and `value` being both
55+
properties for enum members (which live in the class' __dict__) and
56+
enum members themselves.
57+
58+
:param str name: The name of the enum member to retrieve.
59+
:rtype: ~azure.core.CaseInsensitiveEnumMeta
60+
:return: The enum member matching `name`.
61+
:raises AttributeError: If `name` is not a valid enum member.
62+
"""
63+
try:
64+
return cls._member_map_[name.upper()]
65+
except KeyError as err:
66+
raise AttributeError(name) from err

0 commit comments

Comments
 (0)