aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/cython/Cython/Utility/CpdefEnums.pyx
diff options
context:
space:
mode:
authoralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
committeralexv-smirnov <alex@ydb.tech>2023-06-13 11:05:01 +0300
commitbf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0 (patch)
tree1d1df72c0541a59a81439842f46d95396d3e7189 /contrib/tools/cython/Cython/Utility/CpdefEnums.pyx
parent8bfdfa9a9bd19bddbc58d888e180fbd1218681be (diff)
downloadydb-bf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0.tar.gz
add ymake export to ydb
Diffstat (limited to 'contrib/tools/cython/Cython/Utility/CpdefEnums.pyx')
-rw-r--r--contrib/tools/cython/Cython/Utility/CpdefEnums.pyx66
1 files changed, 66 insertions, 0 deletions
diff --git a/contrib/tools/cython/Cython/Utility/CpdefEnums.pyx b/contrib/tools/cython/Cython/Utility/CpdefEnums.pyx
new file mode 100644
index 0000000000..148d776c29
--- /dev/null
+++ b/contrib/tools/cython/Cython/Utility/CpdefEnums.pyx
@@ -0,0 +1,66 @@
+#################### EnumBase ####################
+
+cimport cython
+
+cdef extern from *:
+ int PY_VERSION_HEX
+
+cdef object __Pyx_OrderedDict
+if PY_VERSION_HEX >= 0x02070000:
+ from collections import OrderedDict as __Pyx_OrderedDict
+else:
+ __Pyx_OrderedDict = dict
+
+@cython.internal
+cdef class __Pyx_EnumMeta(type):
+ def __init__(cls, name, parents, dct):
+ type.__init__(cls, name, parents, dct)
+ cls.__members__ = __Pyx_OrderedDict()
+ def __iter__(cls):
+ return iter(cls.__members__.values())
+ def __getitem__(cls, name):
+ return cls.__members__[name]
+
+# @cython.internal
+cdef object __Pyx_EnumBase
+class __Pyx_EnumBase(int):
+ __metaclass__ = __Pyx_EnumMeta
+ def __new__(cls, value, name=None):
+ for v in cls:
+ if v == value:
+ return v
+ if name is None:
+ raise ValueError("Unknown enum value: '%s'" % value)
+ res = int.__new__(cls, value)
+ res.name = name
+ setattr(cls, name, res)
+ cls.__members__[name] = res
+ return res
+ def __repr__(self):
+ return "<%s.%s: %d>" % (self.__class__.__name__, self.name, self)
+ def __str__(self):
+ return "%s.%s" % (self.__class__.__name__, self.name)
+
+if PY_VERSION_HEX >= 0x03040000:
+ from enum import IntEnum as __Pyx_EnumBase
+
+#################### EnumType ####################
+#@requires: EnumBase
+
+cdef dict __Pyx_globals = globals()
+if PY_VERSION_HEX >= 0x03040000:
+ # create new IntEnum()
+ {{name}} = __Pyx_EnumBase('{{name}}', __Pyx_OrderedDict([
+ {{for item in items}}
+ ('{{item}}', {{item}}),
+ {{endfor}}
+ ]))
+ {{for item in items}}
+ __Pyx_globals['{{item}}'] = {{name}}.{{item}}
+ {{endfor}}
+else:
+ class {{name}}(__Pyx_EnumBase):
+ pass
+ {{for item in items}}
+ __Pyx_globals['{{item}}'] = {{name}}({{item}}, '{{item}}')
+ {{endfor}}