bpo-44929: [Enum] Fix global repr (GH-27789)

* Fix typo in __repr__ code

* Add more tests for global int flag reprs

* use last module if multi-module string
  - when an enum's `__module__` contains several module names, only
     use the last one

Co-authored-by: Łukasz Langa <lukasz@langa.pl>
Co-authored-by: Ethan Furman <ethan@stoneleaf.us>
This commit is contained in:
Pablo Galindo Salgado 2021-08-25 15:24:32 +01:00 committed by GitHub
parent a3c11cebf1
commit 24da544014
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 74 additions and 15 deletions

View file

@ -1390,17 +1390,28 @@ def _power_of_two(value):
return value == 2 ** _high_bit(value)
def global_enum_repr(self):
return '%s.%s' % (self.__class__.__module__, self._name_)
"""
use module.enum_name instead of class.enum_name
the module is the last module in case of a multi-module name
"""
module = self.__class__.__module__.split('.')[-1]
return '%s.%s' % (module, self._name_)
def global_flag_repr(self):
module = self.__class__.__module__
"""
use module.flag_name instead of class.flag_name
the module is the last module in case of a multi-module name
"""
module = self.__class__.__module__.split('.')[-1]
cls_name = self.__class__.__name__
if self._name_ is None:
return "%x" % (module, cls_name, self._value_)
return "%s.%s(0x%x)" % (module, cls_name, self._value_)
if _is_single_bit(self):
return '%s.%s' % (module, self._name_)
if self._boundary_ is not FlagBoundary.KEEP:
return module + module.join(self.name.split('|'))
return '|'.join(['%s.%s' % (module, name) for name in self.name.split('|')])
else:
name = []
for n in self._name_.split('|'):