Enlightenment CVS committal

Author  : barbieri
Project : e17
Module  : proto/python-efl

Dir     : e17/proto/python-efl/python-ecore/ecore


Modified Files:
        __init__.py ecore.c_ecore.pxd ecore.c_ecore_animator.pxi 
        ecore.c_ecore_fd_handler.pxi ecore.c_ecore_idle_enterer.pxi 
        ecore.c_ecore_idle_exiter.pxi ecore.c_ecore_idler.pxi 
        ecore.c_ecore_timer.pxi python.pxd 


Log Message:
Remove dependency on Numeric/array.h, improved __str__ and __repr__ and 
simplified ecore classes.

* Numeric/array.h was just required to print reference count, this
  macro is now in python_evas_utils.h and we're clean.
* __str__ was too verbose and not informative, it was improved with
  other attributes like color, geometry, name, clip and
  layer, but reference count and wrapped pointer are not there
  anymore, they made into new __repr__.
* Following previous patch from Caio, this version remove class
  redefinition in ecore/__init__.py, also these classes were redone to
  work better, and the results are good, with less lines of code and
  better consistency.


===================================================================
RCS file: /cvs/e/e17/proto/python-efl/python-ecore/ecore/__init__.py,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- __init__.py 19 Jul 2007 16:07:06 -0000      1.4
+++ __init__.py 2 Sep 2007 15:11:54 -0000       1.5
@@ -2,29 +2,18 @@
 
 import c_ecore
 
-shutdown = c_ecore.shutdown
+from c_ecore import shutdown, time_get, timer_add, \
+     main_loop_begin, main_loop_quit, main_loop_iterate, \
+     animator_add, animator_frametime_set, animator_frametime_get, \
+     idler_add, idle_enterer_add, idle_exiter_add, fd_handler_add, \
+     Animator, Timer, Idler, IdleExiter, IdleEnterer, FdHandler
 
-main_loop_begin = c_ecore.main_loop_begin
-main_loop_quit = c_ecore.main_loop_quit
-main_loop_iterate = c_ecore.main_loop_iterate
-
-time_get = c_ecore.time_get
-timer_add = c_ecore.timer_add
-
-animator_add = c_ecore.animator_add
-animator_frametime_set = c_ecore.animator_frametime_set
-animator_frametime_get = c_ecore.animator_frametime_get
-
-idler_add = c_ecore.idler_add
-idle_enterer_add = c_ecore.idle_enterer_add
-idle_exiter_add = c_ecore.idle_exiter_add
 
 ECORE_FD_NONE = 0
 ECORE_FD_READ = 1
 ECORE_FD_WRITE = 2
 ECORE_FD_ERROR = 4
 ECORE_FD_ALL = 7
-fd_handler_add = c_ecore.fd_handler_add
 
 
 class MainLoop(object):
@@ -39,41 +28,5 @@
     @staticmethod
     def iterate():
         main_loop_iterate()
-
-
-class Timer(c_ecore.Timer):
-    def __new__(type, timeout, func, *args, **kargs):
-        obj = timer_add(timeout, func, *args, **kargs)
-        return obj
-
-
-class Animator(c_ecore.Animator):
-    def __new__(type, func, *args, **kargs):
-        obj = animator_add(func, *args, **kargs)
-        return obj
-
-
-class Idler(c_ecore.Idler):
-    def __new__(type, func, *args, **kargs):
-        obj = idler_add(func, *args, **kargs)
-        return obj
-
-
-class IdleEnterer(c_ecore.IdleEnterer):
-    def __new__(type, func, *args, **kargs):
-        obj = idle_enterer_add(func, *args, **kargs)
-        return obj
-
-
-class IdleExiter(c_ecore.IdleExiter):
-    def __new__(type, func, *args, **kargs):
-        obj = idle_exiter_add(func, *args, **kargs)
-        return obj
-
-
-class FdHandler(c_ecore.FdHandler):
-    def __new__(type, fd, flags, func, *args, **kargs):
-        obj = fd_handler_add(fd, flags, func, *args, **kargs)
-        return obj
 
 c_ecore.init()
===================================================================
RCS file: /cvs/e/e17/proto/python-efl/python-ecore/ecore/ecore.c_ecore.pxd,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore.c_ecore.pxd   13 May 2007 20:51:38 -0000      1.3
+++ ecore.c_ecore.pxd   2 Sep 2007 15:11:54 -0000       1.4
@@ -1,3 +1,7 @@
+cdef extern from "python_evas_utils.h":
+    int PY_REFCOUNT(object)
+
+
 cdef extern from "Ecore.h":
     ctypedef enum Ecore_Fd_Handler_Flags:
         ECORE_FD_READ = 1
@@ -54,7 +58,7 @@
     cdef object args
     cdef object kargs
 
-    cdef int _set_obj(self, Ecore_Timer *obj) except 0
+    cdef object _exec(self)
 
 
 cdef class Animator:
@@ -63,7 +67,7 @@
     cdef object args
     cdef object kargs
 
-    cdef int _set_obj(self, Ecore_Animator *obj) except 0
+    cdef object _exec(self)
 
 
 cdef class Idler:
@@ -72,7 +76,7 @@
     cdef object args
     cdef object kargs
 
-    cdef int _set_obj(self, Ecore_Idler *obj) except 0
+    cdef object _exec(self)
 
 
 cdef class IdleEnterer:
@@ -81,7 +85,7 @@
     cdef object args
     cdef object kargs
 
-    cdef int _set_obj(self, Ecore_Idle_Enterer *obj) except 0
+    cdef object _exec(self)
 
 
 cdef class IdleExiter:
@@ -90,7 +94,7 @@
     cdef object args
     cdef object kargs
 
-    cdef int _set_obj(self, Ecore_Idle_Exiter *obj) except 0
+    cdef object _exec(self)
 
 
 cdef class FdHandler:
@@ -100,4 +104,4 @@
     cdef object kargs
     cdef object _prepare_callback
 
-    cdef int _set_obj(self, Ecore_Fd_Handler *obj) except 0
+    cdef object _exec(self)
===================================================================
RCS file: 
/cvs/e/e17/proto/python-efl/python-ecore/ecore/ecore.c_ecore_animator.pxi,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore.c_ecore_animator.pxi  19 Jul 2007 15:06:44 -0000      1.3
+++ ecore.c_ecore_animator.pxi  2 Sep 2007 15:11:54 -0000       1.4
@@ -1,18 +1,44 @@
 # This file is included verbatim by c_ecore.pyx
 
+cdef int animator_cb(void *_td):
+    cdef Animator obj
+    cdef int r
+
+    obj = <Animator>_td
+
+    try:
+        r = bool(obj._exec())
+    except Exception, e:
+        import traceback
+        traceback.print_exc()
+        r = 0
+
+    if not r:
+        obj.delete()
+    return r
+
+
 cdef class Animator:
-    def __init__(self, func, args, kargs):
+    def __init__(self, func, *args, **kargs):
+        if not callable(func):
+            raise TypeError("Parameter 'func' must be callable")
         self.func = func
         self.args = args
         self.kargs = kargs
-        self.obj = NULL
+        if self.obj == NULL:
+            self.obj = ecore_animator_add(animator_cb, <void *>self)
+            python.Py_INCREF(self)
 
     def __str__(self):
+        return "%s(func=%s, args=%s, kargs=%s)" % \
+               (self.__class__.__name__, self.func, self.args, self.kargs)
+
+    def __repr__(self):
         return ("%s(0x%x, func=%s, args=%s, kargs=%s, Ecore_Animator=0x%x, "
                 "refcount=%d)") % \
                (self.__class__.__name__, <unsigned long>self,
                 self.func, self.args, self.kargs,
-                <unsigned long>self.obj, python.REFCOUNT(self))
+                <unsigned long>self.obj, PY_REFCOUNT(self))
 
     def __dealloc__(self):
         if self.obj != NULL:
@@ -22,13 +48,7 @@
         self.args = None
         self.kargs = None
 
-    cdef int _set_obj(self, Ecore_Animator *obj) except 0:
-        assert self.obj == NULL, "Object must be clean"
-        self.obj = obj
-        python.Py_INCREF(self)
-        return 1
-
-    def _exec(self):
+    cdef _exec(self):
         return self.func(*self.args, **self.kargs)
 
     def delete(self):
@@ -41,32 +61,5 @@
         self.delete()
 
 
-cdef int animator_cb(void *_td):
-    cdef int r
-
-    obj = <Animator>_td
-
-    try:
-        r = bool(obj._exec())
-    except Exception, e:
-        import traceback
-        traceback.print_exc()
-        r = 0
-
-    if not r:
-        obj.delete()
-    return r
-
-
 def animator_add(func, *args, **kargs):
-    cdef Ecore_Animator *h
-    cdef Animator obj
-
-    if not callable(func):
-        raise TypeError("Parameter 'func' must be callable")
-
-    obj = Animator(func, args, kargs)
-
-    h = ecore_animator_add(animator_cb, <void *>obj)
-    obj._set_obj(h)
-    return obj
+    return Animator(func, *args, **kargs)
===================================================================
RCS file: 
/cvs/e/e17/proto/python-efl/python-ecore/ecore/ecore.c_ecore_fd_handler.pxi,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore.c_ecore_fd_handler.pxi        19 Jul 2007 15:06:44 -0000      1.3
+++ ecore.c_ecore_fd_handler.pxi        2 Sep 2007 15:11:54 -0000       1.4
@@ -1,8 +1,8 @@
 # This file is included verbatim by c_ecore.pyx
 
 cdef void fd_handler_prepare_cb(void *_td, Ecore_Fd_Handler *fdh):
-    cdef int r
     cdef FdHandler obj
+    cdef int r
 
     obj = <FdHandler>_td
     if obj._prepare_callback is None:
@@ -15,13 +15,55 @@
         traceback.print_exc()
 
 
+cdef flags2str(int value):
+    flags = []
+    if value & <int>ECORE_FD_READ:
+        flags.append("READ")
+    if value & <int>ECORE_FD_WRITE:
+        flags.append("WRITE")
+    if value & <int>ECORE_FD_ERROR:
+        flags.append("ERROR")
+    return ", ".join(flags)
+
+
+cdef int fd_handler_cb(void *_td, Ecore_Fd_Handler *fdh):
+    cdef FdHandler obj
+    cdef int r
+
+    obj = <FdHandler>_td
+
+    try:
+        r = bool(obj._exec())
+    except Exception, e:
+        import traceback
+        traceback.print_exc()
+        r = 0
+
+    if not r:
+        obj.delete()
+    return r
+
+
 cdef class FdHandler:
-    def __init__(self, func, args, kargs):
+    def __init__(self, fd, int flags, func, *args, **kargs):
+        if not callable(func):
+            raise TypeError("Parameter 'func' must be callable")
         self.func = func
         self.args = args
         self.kargs = kargs
-        self.obj = NULL
         self._prepare_callback = None
+        if self.obj == NULL:
+            if not isinstance(fd, (int, long)):
+                try:
+                    fd = fd.fileno()
+                except AttributeError, e:
+                    raise ValueError("fd must be integer or have fileno()")
+
+            self.obj = ecore_main_fd_handler_add(fd,
+                                                 <Ecore_Fd_Handler_Flags>flags,
+                                                 fd_handler_cb, <void *>self,
+                                                 NULL, NULL)
+            python.Py_INCREF(self)
 
     def __str__(self):
         if self.obj == NULL:
@@ -29,20 +71,23 @@
             flags = ""
         else:
             fd = self.fd_get()
-            v = self.active_get(7)
-            flags = []
-            if v & ECORE_FD_READ:
-                flags.append("READ")
-            if v & ECORE_FD_WRITE:
-                flags.append("WRITE")
-            if v & ECORE_FD_ERROR:
-                flags.append("ERROR")
-            flags = ", ".join(flags)
+            flags = flags2str(self.active_get(7))
+        return "%s(func=%s, args=%s, kargs=%s, fd=%s, flags=[%s])" % \
+               (self.__class__.__name__, self.func, self.args, self.kargs,
+                fd, flags)
+
+    def __repr__(self):
+        if self.obj == NULL:
+            fd = None
+            flags = ""
+        else:
+            fd = self.fd_get()
+            flags = flags2str(self.active_get(7))
         return ("%s(0x%x, func=%s, args=%s, kargs=%s, fd=%s, flags=[%s], "
                 "Ecore_Fd_Handler=0x%x, refcount=%d)") % \
                (self.__class__.__name__, <unsigned long>self,
                 self.func, self.args, self.kargs, fd, flags,
-                <unsigned long>self.obj, python.REFCOUNT(self))
+                <unsigned long>self.obj, PY_REFCOUNT(self))
 
     def __dealloc__(self):
         if self.obj != NULL:
@@ -52,13 +97,7 @@
         self.args = None
         self.kargs = None
 
-    cdef int _set_obj(self, Ecore_Fd_Handler *obj) except 0:
-        assert self.obj == NULL, "Object must be clean"
-        self.obj = obj
-        python.Py_INCREF(self)
-        return 1
-
-    def _exec(self):
+    cdef object _exec(self):
         return self.func(self, *self.args, **self.kargs)
 
     def delete(self):
@@ -110,35 +149,5 @@
             raise TypeError("Parameter 'func' must be callable")
 
 
-cdef int fd_handler_cb(void *_td, Ecore_Fd_Handler *fdh):
-    cdef int r
-
-    obj = <FdHandler>_td
-
-    try:
-        r = bool(obj._exec())
-    except Exception, e:
-        import traceback
-        traceback.print_exc()
-        r = 0
-
-    if not r:
-        obj.delete()
-    return r
-
-
-def fd_handler_add(int fd, int flags, func, *args, **kargs):
-    cdef Ecore_Fd_Handler *h
-    cdef Ecore_Fd_Handler_Flags v
-    cdef FdHandler obj
-
-    if not callable(func):
-        raise TypeError("Parameter 'func' must be callable")
-
-    obj = FdHandler(func, args, kargs)
-
-    v = <Ecore_Fd_Handler_Flags>flags
-    h = ecore_main_fd_handler_add(fd, v, fd_handler_cb, <void *>obj,
-                                  NULL, NULL)
-    obj._set_obj(h)
-    return obj
+def fd_handler_add(fd, int flags, func, *args, **kargs):
+    return FdHandler(fd, flags, func, *args, **kargs)
===================================================================
RCS file: 
/cvs/e/e17/proto/python-efl/python-ecore/ecore/ecore.c_ecore_idle_enterer.pxi,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore.c_ecore_idle_enterer.pxi      19 Jul 2007 15:06:44 -0000      1.3
+++ ecore.c_ecore_idle_enterer.pxi      2 Sep 2007 15:11:54 -0000       1.4
@@ -1,18 +1,44 @@
 # This file is included verbatim by c_ecore.pyx
 
+cdef int idle_enterer_cb(void *_td):
+    cdef IdleEnterer obj
+    cdef int r
+
+    obj = <IdleEnterer>_td
+
+    try:
+        r = bool(obj._exec())
+    except Exception, e:
+        import traceback
+        traceback.print_exc()
+        r = 0
+
+    if not r:
+        obj.delete()
+    return r
+
+
 cdef class IdleEnterer:
-    def __init__(self, func, args, kargs):
+    def __init__(self, func, *args, **kargs):
+        if not callable(func):
+            raise TypeError("Parameter 'func' must be callable")
         self.func = func
         self.args = args
         self.kargs = kargs
-        self.obj = NULL
+        if self.obj == NULL:
+            self.obj = ecore_idle_enterer_add(idle_enterer_cb, <void *>self)
+            python.Py_INCREF(self)
 
     def __str__(self):
+        return "%s(func=%s, args=%s, kargs=%s)" % \
+               (self.__class__.__name__, self.func, self.args, self.kargs)
+
+    def __repr__(self):
         return ("%s(0x%x, func=%s, args=%s, kargs=%s, "
                 "Ecore_Idle_Enterer=0x%x, refcount=%d)") % \
                (self.__class__.__name__, <unsigned long>self,
                 self.func, self.args, self.kargs,
-                <unsigned long>self.obj, python.REFCOUNT(self))
+                <unsigned long>self.obj, PY_REFCOUNT(self))
 
     def __dealloc__(self):
         if self.obj != NULL:
@@ -22,13 +48,7 @@
         self.args = None
         self.kargs = None
 
-    cdef int _set_obj(self, Ecore_Idle_Enterer *obj) except 0:
-        assert self.obj == NULL, "Object must be clean"
-        self.obj = obj
-        python.Py_INCREF(self)
-        return 1
-
-    def _exec(self):
+    cdef object _exec(self):
         return self.func(*self.args, **self.kargs)
 
     def delete(self):
@@ -41,32 +61,5 @@
         self.delete()
 
 
-cdef int idle_enterer_cb(void *_td):
-    cdef int r
-
-    obj = <IdleEnterer>_td
-
-    try:
-        r = bool(obj._exec())
-    except Exception, e:
-        import traceback
-        traceback.print_exc()
-        r = 0
-
-    if not r:
-        obj.delete()
-    return r
-
-
 def idle_enterer_add(func, *args, **kargs):
-    cdef Ecore_Idle_Enterer *h
-    cdef IdleEnterer obj
-
-    if not callable(func):
-        raise TypeError("Parameter 'func' must be callable")
-
-    obj = IdleEnterer(func, args, kargs)
-
-    h = ecore_idle_enterer_add(idle_enterer_cb, <void *>obj)
-    obj._set_obj(h)
-    return obj
+    return IdleEnterer(func, *args, **kargs)
===================================================================
RCS file: 
/cvs/e/e17/proto/python-efl/python-ecore/ecore/ecore.c_ecore_idle_exiter.pxi,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore.c_ecore_idle_exiter.pxi       19 Jul 2007 15:06:44 -0000      1.3
+++ ecore.c_ecore_idle_exiter.pxi       2 Sep 2007 15:11:54 -0000       1.4
@@ -1,18 +1,44 @@
 # This file is included verbatim by c_ecore.pyx
 
+cdef int idle_exiter_cb(void *_td):
+    cdef IdleExiter obj
+    cdef int r
+
+    obj = <IdleExiter>_td
+
+    try:
+        r = bool(obj._exec())
+    except Exception, e:
+        import traceback
+        traceback.print_exc()
+        r = 0
+
+    if not r:
+        obj.delete()
+    return r
+
+
 cdef class IdleExiter:
-    def __init__(self, func, args, kargs):
+    def __init__(self, func, *args, **kargs):
+        if not callable(func):
+            raise TypeError("Parameter 'func' must be callable")
         self.func = func
         self.args = args
         self.kargs = kargs
-        self.obj = NULL
+        if self.obj == NULL:
+            self.obj = ecore_idle_exiter_add(idle_exiter_cb, <void *>self)
+            python.Py_INCREF(self)
 
     def __str__(self):
+        return "%s(func=%s, args=%s, kargs=%s)" % \
+               (self.__class__.__name__, self.func, self.args, self.kargs)
+
+    def __repr__(self):
         return ("%s(0x%x, func=%s, args=%s, kargs=%s, Ecore_Idle_Exiter=0x%x, "
                 "refcount=%d)") % \
                (self.__class__.__name__, <unsigned long>self,
                 self.func, self.args, self.kargs,
-                <unsigned long>self.obj, python.REFCOUNT(self))
+                <unsigned long>self.obj, PY_REFCOUNT(self))
 
     def __dealloc__(self):
         if self.obj != NULL:
@@ -22,13 +48,7 @@
         self.args = None
         self.kargs = None
 
-    cdef int _set_obj(self, Ecore_Idle_Exiter *obj) except 0:
-        assert self.obj == NULL, "Object must be clean"
-        self.obj = obj
-        python.Py_INCREF(self)
-        return 1
-
-    def _exec(self):
+    cdef object _exec(self):
         return self.func(*self.args, **self.kargs)
 
     def delete(self):
@@ -41,32 +61,5 @@
         self.delete()
 
 
-cdef int idle_exiter_cb(void *_td):
-    cdef int r
-
-    obj = <IdleExiter>_td
-
-    try:
-        r = bool(obj._exec())
-    except Exception, e:
-        import traceback
-        traceback.print_exc()
-        r = 0
-
-    if not r:
-        obj.delete()
-    return r
-
-
 def idle_exiter_add(func, *args, **kargs):
-    cdef Ecore_Idle_Exiter *h
-    cdef IdleExiter obj
-
-    if not callable(func):
-        raise TypeError("Parameter 'func' must be callable")
-
-    obj = IdleExiter(func, args, kargs)
-
-    h = ecore_idle_exiter_add(idle_exiter_cb, <void *>obj)
-    obj._set_obj(h)
-    return obj
+    return IdleExiter(func, *args, **kargs)
===================================================================
RCS file: 
/cvs/e/e17/proto/python-efl/python-ecore/ecore/ecore.c_ecore_idler.pxi,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore.c_ecore_idler.pxi     19 Jul 2007 15:06:44 -0000      1.3
+++ ecore.c_ecore_idler.pxi     2 Sep 2007 15:11:54 -0000       1.4
@@ -1,18 +1,42 @@
 # This file is included verbatim by c_ecore.pyx
 
+cdef int idler_cb(void *_td):
+    cdef Idler obj
+    cdef int r
+
+    obj = <Idler>_td
+
+    try:
+        r = bool(obj._exec())
+    except Exception, e:
+        import traceback
+        traceback.print_exc()
+        r = 0
+
+    if not r:
+        obj.delete()
+    return r
+
+
 cdef class Idler:
-    def __init__(self, func, args, kargs):
+    def __init__(self, func, *args, **kargs):
         self.func = func
         self.args = args
         self.kargs = kargs
-        self.obj = NULL
+        if self.obj == NULL:
+            self.obj = ecore_idler_add(idler_cb, <void *>self)
+            python.Py_INCREF(self)
 
     def __str__(self):
+        return "%s(func=%s, args=%s, kargs=%s)" % \
+               (self.__class__.__name__, self.func, self.args, self.kargs)
+
+    def __repr__(self):
         return ("%s(0x%x, func=%s, args=%s, kargs=%s, Ecore_Idler=0x%x, "
                 "refcount=%d)") % \
                (self.__class__.__name__, <unsigned long>self,
                 self.func, self.args, self.kargs,
-                <unsigned long>self.obj, python.REFCOUNT(self))
+                <unsigned long>self.obj, PY_REFCOUNT(self))
 
     def __dealloc__(self):
         if self.obj != NULL:
@@ -22,13 +46,7 @@
         self.args = None
         self.kargs = None
 
-    cdef int _set_obj(self, Ecore_Idler *obj) except 0:
-        assert self.obj == NULL, "Object must be clean"
-        self.obj = obj
-        python.Py_INCREF(self)
-        return 1
-
-    def _exec(self):
+    cdef object _exec(self):
         return self.func(*self.args, **self.kargs)
 
     def delete(self):
@@ -41,32 +59,5 @@
         self.delete()
 
 
-cdef int idler_cb(void *_td):
-    cdef int r
-
-    obj = <Idler>_td
-
-    try:
-        r = bool(obj._exec())
-    except Exception, e:
-        import traceback
-        traceback.print_exc()
-        r = 0
-
-    if not r:
-        obj.delete()
-    return r
-
-
 def idler_add(func, *args, **kargs):
-    cdef Ecore_Idler *h
-    cdef Idler obj
-
-    if not callable(func):
-        raise TypeError("Parameter 'func' must be callable")
-
-    obj = Idler(func, args, kargs)
-
-    h = ecore_idler_add(idler_cb, <void *>obj)
-    obj._set_obj(h)
-    return obj
+    return Idler(func, *args, **kargs)
===================================================================
RCS file: 
/cvs/e/e17/proto/python-efl/python-ecore/ecore/ecore.c_ecore_timer.pxi,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ecore.c_ecore_timer.pxi     19 Jul 2007 15:06:44 -0000      1.3
+++ ecore.c_ecore_timer.pxi     2 Sep 2007 15:11:54 -0000       1.4
@@ -1,19 +1,46 @@
 # This file is included verbatim by c_ecore.pyx
 
+cdef int timer_cb(void *_td):
+    cdef Timer obj
+    cdef int r
+
+    obj = <Timer>_td
+
+    try:
+        r = bool(obj._exec())
+    except Exception, e:
+        import traceback
+        traceback.print_exc()
+        r = 0
+
+    if not r:
+        obj.delete()
+    return r
+
+
 cdef class Timer:
-    def __init__(self, double interval, func, args, kargs):
+    def __init__(self, double interval, func, *args, **kargs):
+        if not callable(func):
+            raise TypeError("Parameter 'func' must be callable")
         self._interval = interval
         self.func = func
         self.args = args
         self.kargs = kargs
-        self.obj = NULL
+        if self.obj == NULL:
+            self.obj = ecore_timer_add(interval, timer_cb, <void *>self)
+            python.Py_INCREF(self)
 
     def __str__(self):
+        return "%s(interval=%f, func=%s, args=%s, kargs=%s)" % \
+               (self.__class__.__name__, self._interval,
+                self.func, self.args, self.kargs)
+
+    def __repr__(self):
         return ("%s(0x%x, interval=%f, func=%s, args=%s, kargs=%s, "
                 "Ecore_Timer=0x%x, refcount=%d)") % \
                (self.__class__.__name__, <unsigned long>self, self._interval,
                 self.func, self.args, self.kargs,
-                <unsigned long>self.obj, python.REFCOUNT(self))
+                <unsigned long>self.obj, PY_REFCOUNT(self))
 
     def __dealloc__(self):
         if self.obj != NULL:
@@ -23,13 +50,7 @@
         self.args = None
         self.kargs = None
 
-    cdef int _set_obj(self, Ecore_Timer *obj) except 0:
-        assert self.obj == NULL, "Object must be clean"
-        self.obj = obj
-        python.Py_INCREF(self)
-        return 1
-
-    def _exec(self):
+    cdef object _exec(self):
         return self.func(*self.args, **self.kargs)
 
     def delete(self):
@@ -57,32 +78,5 @@
             ecore_timer_interval_set(self.obj, t)
 
 
-cdef int timer_cb(void *_td):
-    cdef int r
-
-    obj = <Timer>_td
-
-    try:
-        r = bool(obj._exec())
-    except Exception, e:
-        import traceback
-        traceback.print_exc()
-        r = 0
-
-    if not r:
-        obj.delete()
-    return r
-
-
 def timer_add(double t, func, *args, **kargs):
-    cdef Ecore_Timer *h
-    cdef Timer obj
-
-    if not callable(func):
-        raise TypeError("Parameter 'func' must be callable")
-
-    obj = Timer(t, func, args, kargs)
-
-    h = ecore_timer_add(t, timer_cb, <void *>obj)
-    obj._set_obj(h)
-    return obj
+    return Timer(t, func, *args, **kargs)
===================================================================
RCS file: /cvs/e/e17/proto/python-efl/python-ecore/ecore/python.pxd,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- python.pxd  30 Apr 2007 20:17:47 -0000      1.1
+++ python.pxd  2 Sep 2007 15:11:54 -0000       1.2
@@ -81,8 +81,3 @@
     object PyBuffer_FromMemory(void *ptr, int size)
     object PyBuffer_FromReadWriteMemory(void *ptr, int size)
     object PyBuffer_New(int size)
-
-
-
-cdef extern from "Numeric/arrayobject.h":
-    int REFCOUNT(object)



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to