davemds pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=dd97383887c2439f5edfc5651bee45a27b9af5d9
commit dd97383887c2439f5edfc5651bee45a27b9af5d9 Author: Dave Andreoli <d...@gurumeditation.it> Date: Mon Jan 1 07:27:15 2018 +0100 Pyolian: a fix and some new utils --- src/scripts/pyolian/eolian.py | 51 ++++++++++++++++++++++++++++++-------- src/scripts/pyolian/eolian_lib.py | 2 +- src/scripts/pyolian/test_eolian.py | 18 +++++++++++++- 3 files changed, 58 insertions(+), 13 deletions(-) diff --git a/src/scripts/pyolian/eolian.py b/src/scripts/pyolian/eolian.py index 8a3d21f00a..ced4934f2e 100644 --- a/src/scripts/pyolian/eolian.py +++ b/src/scripts/pyolian/eolian.py @@ -251,7 +251,6 @@ class Iterator(object): def __next__(self): if not self._iter or not self._iter.value: - print("NULL Iterator... Error ?") raise StopIteration if not lib.eina_iterator_next(self._iter, byref(self._tmp)): lib.eina_iterator_free(self._iter) @@ -272,6 +271,12 @@ class EolianBaseObject(object): raise TypeError('Invalid constructor of type: %s for class: %s' % ( type(c_obj_pointer), self.__class__.__name__)) + def __eq__(self, other): + return self._obj.value == other._obj.value + + def __hash__(self): + return self._obj.value + ### Main Eolian Unit ######################################################## @@ -504,6 +509,10 @@ class Class(EolianBaseObject): return Iterator(_str_to_py, lib.eolian_class_namespaces_get(self._obj)) @property + def namespace(self): + return '.'.join(self.namespaces) + + @property def file(self): return _str_to_py(lib.eolian_class_file_get(self._obj)) @@ -660,7 +669,7 @@ class Function(EolianBaseObject): @property def full_c_setter_name_legacy(self): return self.full_c_name_get(Eolian_Function_Type.PROP_SET, True) - + @property def type(self): return Eolian_Function_Type(lib.eolian_function_type_get(self._obj)) @@ -837,10 +846,10 @@ class Implement(EolianBaseObject): c_cls = lib.eolian_implement_class_get(self._obj) return Class(c_cls) if c_cls else None - def function_get(self, ftype=Eolian_Function_Type.UNRESOLVED): - c_func = lib.eolian_implement_function_get(self._obj, ftype) + @property + def function(self): + c_func = lib.eolian_implement_function_get(self._obj, None) return Function(c_func) if c_func else None - # TODO implement util properties for function_get def documentation_get(self, ftype=Eolian_Function_Type.METHOD): c_doc = lib.eolian_implement_documentation_get(self._obj, ftype) @@ -867,6 +876,17 @@ class Implement(EolianBaseObject): def is_prop_get(self): return bool(lib.eolian_implement_is_prop_get(self._obj)) + @property + def is_property(self): + return self.is_prop_get or self.is_prop_set + + @property + def is_method(self): + return not self.is_property + + def is_overridden(self, cls): + return cls.name == self.class_.name # TODO equality inside class + class Type(EolianBaseObject): # OK (4 eolian issue) def __repr__(self): @@ -883,8 +903,11 @@ class Type(EolianBaseObject): # OK (4 eolian issue) @property def namespaces(self): - return Iterator(_str_to_py, - lib.eolian_type_namespaces_get(self._obj)) + return Iterator(_str_to_py, lib.eolian_type_namespaces_get(self._obj)) + + @property + def namespace(self): + return '.'.join(self.namespaces) @property def free_func(self): @@ -976,8 +999,11 @@ class Typedecl(EolianBaseObject): # OK (2 TODO) @property def namespaces(self): - return Iterator(_str_to_py, - lib.eolian_typedecl_namespaces_get(self._obj)) + return Iterator(_str_to_py, lib.eolian_typedecl_namespaces_get(self._obj)) + + @property + def namespace(self): + return '.'.join(self.namespaces) @property def free_func(self): @@ -1133,8 +1159,11 @@ class Variable(EolianBaseObject): @property def namespaces(self): - return Iterator(_str_to_py, - lib.eolian_variable_namespaces_get(self._obj)) + return Iterator(_str_to_py, lib.eolian_variable_namespaces_get(self._obj)) + + @property + def namespace(self): + return '.'.join(self.namespaces) @property def type(self): diff --git a/src/scripts/pyolian/eolian_lib.py b/src/scripts/pyolian/eolian_lib.py index 5553d066ee..a330853dbd 100644 --- a/src/scripts/pyolian/eolian_lib.py +++ b/src/scripts/pyolian/eolian_lib.py @@ -269,7 +269,7 @@ lib.eolian_implement_class_get.argtypes = [c_void_p,] lib.eolian_implement_class_get.restype = c_void_p # EAPI const Eolian_Function *eolian_implement_function_get(const Eolian_Implement *impl, Eolian_Function_Type *func_type); -lib.eolian_implement_function_get.argtypes = [c_void_p, c_int] +lib.eolian_implement_function_get.argtypes = [c_void_p, c_void_p] lib.eolian_implement_function_get.restype = c_void_p # EAPI const Eolian_Documentation *eolian_implement_documentation_get(const Eolian_Implement *impl, Eolian_Function_Type f_type); diff --git a/src/scripts/pyolian/test_eolian.py b/src/scripts/pyolian/test_eolian.py index fa9869d93b..24b76c5686 100755 --- a/src/scripts/pyolian/test_eolian.py +++ b/src/scripts/pyolian/test_eolian.py @@ -23,6 +23,21 @@ SCAN_FOLDER = os.path.join(root_path, 'src', 'lib') state = None +class TestBaseObject(unittest.TestCase): + def test_base_object_equality(self): + cls1 = state.class_get_by_name('Efl.Loop.Timer') + cls2 = state.class_get_by_file('efl_loop_timer.eo') + self.assertIsInstance(cls1, eolian.Class) + self.assertIsInstance(cls2, eolian.Class) + self.assertEqual(cls1, cls2) + + enum1 = state.typedecl_enum_get_by_name('Efl.Ui.Focus.Direction') + enum2 = state.typedecl_enum_get_by_name('Efl.Ui.Focus.Direction') + self.assertIsInstance(enum1, eolian.Typedecl) + self.assertIsInstance(enum2, eolian.Typedecl) + self.assertEqual(enum1, enum2) + + class TestEolianUnit(unittest.TestCase): def test_file_listing(self): l = list(state.all_eo_file_paths) @@ -179,6 +194,7 @@ class TestEolianFunction(unittest.TestCase): self.assertFalse(f.return_is_warn_unused(eolian.Eolian_Function_Type.METHOD)) self.assertFalse(f.object_is_const) self.assertEqual(f.class_.full_name, 'Efl.Loop.Timer') + self.assertIsInstance(f.implement, eolian.Implement) def test_function_parameter(self): cls = state.class_get_by_name('Efl.Loop.Timer') @@ -202,7 +218,7 @@ class TestEolianImplement(unittest.TestCase): self.assertIsInstance(im, eolian.Implement) self.assertEqual(im.full_name, 'Efl.Loop.Timer.delay') self.assertIsInstance(im.class_, eolian.Class) - self.assertIsInstance(im.function_get(), eolian.Function) # TODO is UNRESOLVED correct ? + self.assertIsInstance(im.function, eolian.Function) self.assertIsInstance(im.documentation_get(), eolian.Documentation) # TODO is UNRESOLVED correct ? self.assertFalse(im.is_auto()) self.assertFalse(im.is_empty()) --