def parse(self, name, class_name): ''' Parse a name into a tuple of "words". For example, under default settings, an input of '_on_navigation_panel__left_down' would result in an output of `('navigation_panel', 'left_down')`. Returns `None` if there is no match. ''' unmangled_name = name_mangling.unmangle_attribute_name_if_needed( name, class_name ) n_preceding_underscores = string_tools.get_n_identical_edge_characters( unmangled_name, character='_', head=True ) if n_preceding_underscores not in \ self.n_preceding_underscores_possibilities: return None cleaned_name = unmangled_name[n_preceding_underscores:] for case_style in self.case_style_possibilites: result = case_style.parse(cleaned_name) if result is not None: return result else: return None
def test(): assert unmangle_attribute_name_if_needed('_Cat__meow', 'Cat') == '__meow' assert unmangle_attribute_name_if_needed('_Cat__meow', 'Dog') == '_Cat__meow' assert unmangle_attribute_name_if_needed('_Cat__meow', '__Cat') == '__meow' assert unmangle_attribute_name_if_needed('_Cat__meow', '__Cat_') == '_Cat__meow' assert unmangle_attribute_name_if_needed('_Cat___meow', '__Cat_') == '__meow' assert unmangle_attribute_name_if_needed('_Cat___meow', '_Cat') == '___meow' assert unmangle_attribute_name_if_needed('_Cat___meow', '_Cat') == '___meow' assert unmangle_attribute_name_if_needed('_Cat___meow_', '_Cat') == '___meow_' assert unmangle_attribute_name_if_needed('_Cat___meow__', '_Cat') == '_Cat___meow__'
def parse(self, name, class_name): ''' Parse a name into a tuple of "words". For example, under default settings, an input of '_on_navigation_panel__left_down' would result in an output of `('navigation_panel', 'left_down')`. Returns `None` if there is no match. ''' unmangled_name = name_mangling.unmangle_attribute_name_if_needed( name, class_name) n_preceding_underscores = string_tools.get_n_identical_edge_characters( unmangled_name, character='_', head=True) if n_preceding_underscores not in \ self.n_preceding_underscores_possibilities: return None cleaned_name = unmangled_name[n_preceding_underscores:] for case_style in self.case_style_possibilites: result = case_style.parse(cleaned_name) if result is not None: return result else: return None