示例#1
0
    def __new__(cls, name, bases, attrs):
        classes = {}

        for n, v in filter(lambda i: inspect.isclass(i[1]), attrs.items()):
            ln = n.lower()
            if ln in classes:
                raise AttributeError('Member ' + ln + ' already exists.\
                    Please check that no [class name].lower() conflicts.')
            classes[ln] = (n, v)

        for n, _ in classes.values():
            del attrs[n]
            if hasattr(attrs, '_member_names'):
                attrs._member_names.remove(n)

        enum = BaseEnumMeta.__new__(cls, name, bases, attrs)
        for member in enum:
            for ln, clas in [(ln, v[1]) for ln, v in classes.items()]:
                try:
                    setattr(member, ln, getattr(clas, member.name))
                except AttributeError:
                    pass
            if not hasattr(member, "label"):
                member.label = member.name.replace('_', ' ').title()

        return enum
示例#2
0
    def __new__(metacls, cls, bases, classdict):
        enum_class = EnumMeta.__new__(metacls, cls, bases, classdict)
        for name, enum_value in enum_class._member_map_.items():
            prop_name = 'is_{}'.format(name.lower())
            setattr(enum_class, prop_name, is_member_factory(enum_value))

        return enum_class
示例#3
0
 def __symEnumDerivedNew(metacls, cls, bases, classdict):
     "update class fields defined as SymEnumValue to register external names"
     extNameMap = classdict["__extNameMap__"] = _SysEnumExternalNameMap()
     for name in classdict.iterkeys():
         if isinstance(classdict[name], SymEnumValue):
             SymEnumMeta.__symEnumValueUpdate(classdict, name, extNameMap)
     return EnumMeta.__new__(metacls, cls, bases, classdict)
示例#4
0
 def __symEnumDerivedNew(metacls, cls, bases, classdict):
     "update class fields defined as SymEnumValue to register external names"
     extNameMap = classdict["__extNameMap__"] = _SysEnumExternalNameMap()
     for name in classdict.iterkeys():
         if isinstance(classdict[name], SymEnumValue):
             SymEnumMeta.__symEnumValueUpdate(classdict, name, extNameMap)
     return EnumMeta.__new__(metacls, cls, bases, classdict)
示例#5
0
 def __new__(cls, name, bases, attrs):
     Labels = attrs.get('Labels')
     obj = BaseEnumMeta.__new__(cls, name, bases, attrs)
     for m in obj:
         try:
             m.label = getattr(Labels, m.name)
         except AttributeError:
             m.label = m.name.replace('_', ' ').title()
     return obj
示例#6
0
    def __new__(cls, name, bases, attrs):
        Labels = attrs.get('Labels')

        if Labels is not None and inspect.isclass(Labels):
            del attrs['Labels']

        obj = EnumMeta.__new__(cls, name, bases, attrs)
        for m in obj:
            try:
                m.label = getattr(Labels, m.name)
            except AttributeError:
                m.label = m.name.replace('_', ' ').title()

        return obj
示例#7
0
    def _parse_enum(self, location: str, raw_value: tp.Any, metaclass: enum.EnumMeta):

        if not isinstance(raw_value, str):
            return self._error(location, f"Expected {metaclass.__name__} (string), got {str(raw_value)}")

        try:
            enum_value = self._parse_enum_value(raw_value, metaclass)

            if isinstance(enum_value.value, tuple):
                enum_value._value_ = enum_value.value[0]

            return metaclass.__new__(metaclass, enum_value)

        except KeyError:
            return self._error(location, f"Invalid value for {metaclass.__name__}: {raw_value}")
示例#8
0
    def __new__(mcs, name, bases, attrs):
        Labels = attrs.get('Labels')

        if Labels is not None and inspect.isclass(Labels):
            del attrs['Labels']
            if hasattr(attrs, '_member_names'):
                attrs._member_names.remove('Labels')

        obj = BaseEnumMeta.__new__(mcs, name, bases, attrs)
        for m in obj:
            try:
                m.label = getattr(Labels, m.name)
            except AttributeError:
                m.label = m.name.replace('_', ' ').title()

        return obj
示例#9
0
    def __new__(mcs, name, bases, attrs):
        Labels = attrs.get('Labels')

        if Labels is not None and inspect.isclass(Labels):
            del attrs['Labels']
            if hasattr(attrs, '_member_names'):
                attrs._member_names.remove('Labels')

        obj = BaseEnumMeta.__new__(mcs, name, bases, attrs)
        for m in obj:
            try:
                m.label = getattr(Labels, m.name)
            except AttributeError:
                m.label = m.name.replace('_', ' ').title()

        return obj
示例#10
0
文件: enums.py 项目: coenvk/lldbvis
 def __new__(metacls, cls, bases, classdict):
     if type(classdict) is dict:
         original_dict = classdict
         classdict = _EnumDict()
         for k, v in original_dict.items():
             classdict[k] = v
     temp = _EnumDict()
     for k, v in classdict.items():
         if k in classdict._member_names:
             if v == ():
                 v = metacls._i
             else:
                 metacls._i = v
             metacls._i += 1
             temp[k] = v
         else:
             temp[k] = classdict[k]
     return EnumMeta.__new__(metacls, cls, bases, temp)
示例#11
0
    def __new__(mcs, name, bases, attrs):
        member_names = attrs._member_names
        choices = {
            name: attrs[name] if isinstance(attrs[name], Choice)
            else Choice(attrs[name], name.replace('_', ' ').title())
            for name in member_names
        }
        attrs._member_names = []
        for member_name in member_names:
            attrs.pop(member_name)
            attrs[member_name] = choices[member_name].value
        attrs._member_names = member_names

        obj = BaseEnumMeta.__new__(mcs, name, bases, attrs)
        for name, choice in choices.items():
            m = obj[name]
            for k, v in choice.__dict__.items():
                if k != 'value':
                    setattr(m, k, v)

        return obj
示例#12
0
    def __new__(cls, name, bases, clsdict, *, _entity=Entity, **kwargs):
        base_entity = _entity
        if bases:
            base_entities = [
                base._entity_ for base in bases if hasattr(base, "_entity_")
            ]
            if base_entities:
                base_entity = base_entities[0]

        __init__ = clsdict.pop("__init__", None)
        __json__ = clsdict.pop("__json__", None)
        new_ent = EntityType(name, (base_entity, ), clsdict, **kwargs)
        if __init__ is not None:
            dict.__setitem__(clsdict, "__init__", __init__)
        if __json__ is not None:
            dict.__setitem__(clsdict, "__json__", __json__)

        new_ent.__fix_entries__ = []

        ignore = []
        for field in new_ent.__fields__:
            key = field._key_
            ignore.append(key)
            try:
                idx = clsdict._member_names.index(key)
            except ValueError:
                continue
            else:
                clsdict._member_names.pop(idx)
                clsdict._last_values.pop(idx)

        cignore = clsdict.get("_ignore_", [])
        cignore.extend(ignore)

        clsdict["_ignore_"] = ignore

        dict.__setitem__(clsdict, "_entity_", new_ent)

        return _EnumMeta.__new__(cls, name, bases, clsdict)
示例#13
0
 def __new__(metacls, cls, bases, classdict):
     if SymEnum in bases:
         return SymEnumMeta.__symEnumDerivedNew(metacls, cls, bases,
                                                classdict)
     else:
         return EnumMeta.__new__(metacls, cls, bases, classdict)
示例#14
0
文件: meta.py 项目: legau/kanon
 def __new__(*args, **kwargs):
     cls = EnumMeta.__new__(*args, **kwargs)
     models.update({v: {} for v in cls.__members__.values()})
     return cls
示例#15
0
 def __new__(metacls, cls, bases, classdict):
     if SymEnum in bases:
         return SymEnumMeta.__symEnumDerivedNew(metacls, cls, bases, classdict)
     else:
         return EnumMeta.__new__(metacls, cls, bases, classdict)