Resolved Py3 issues.

Fixes T459
This commit is contained in:
Kai Huuhko 2013-10-26 02:38:25 +03:00
parent 47be89c8ea
commit 19e7d11f61
4 changed files with 29 additions and 11 deletions

View File

@ -34,7 +34,7 @@ cdef int PY_EFL_EO_LOG_DOMAIN = add_logger(__name__)
def init():
EINA_LOG_DOM_INFO(PY_EFL_EO_LOG_DOMAIN, "Initializing %s", <char *>__name__)
EINA_LOG_DOM_INFO(PY_EFL_EO_LOG_DOMAIN, "Initializing efl.eo", NULL)
return eo_init()
def shutdown():
@ -65,7 +65,10 @@ cdef void _object_mapping_register(char *name, object cls) except *:
if eina_hash_find(object_mapping, name) != NULL:
raise ValueError("Object type name '%s' already registered." % name)
EINA_LOG_DOM_DBG(PY_EFL_EO_LOG_DOMAIN, "REGISTER: %s => %s", name, <char *>cls.__name__)
cdef object cls_name = cls.__name__
if isinstance(cls_name, unicode): cls_name = PyUnicode_AsUTF8String(cls_name)
EINA_LOG_DOM_DBG(PY_EFL_EO_LOG_DOMAIN, "REGISTER: %s => %s", <char *>name, <char *>cls_name)
eina_hash_add(object_mapping, name, <PyObject *>cls)

View File

@ -2,6 +2,8 @@ import traceback
import types
from functools import update_wrapper
from cpython cimport PY_VERSION_HEX, PyUnicode_AsUTF8String
from efl.eina cimport EINA_LOG_DOM_WARN
from efl.utils.logger cimport PY_EFL_LOG_DOMAIN
@ -33,7 +35,10 @@ class WRAPPER(object):
self.message = message
def __get__(self, obj, objtype):
return types.MethodType(self, obj, objtype)
if PY_VERSION_HEX < 0x03000000:
return types.MethodType(self, obj, objtype)
else:
return types.MethodType(self, obj)
def __call__(self, *args, **kwargs):
cdef:
@ -58,6 +63,9 @@ class WRAPPER(object):
if self.message is not None:
msg += " " + self.message
EINA_LOG_DOM_WARN(PY_EFL_LOG_DOMAIN, msg, NULL)
msg2 = msg
if isinstance(msg2, unicode): msg2 = PyUnicode_AsUTF8String(msg2)
EINA_LOG_DOM_WARN(PY_EFL_LOG_DOMAIN, msg2, NULL)
return self.f(*args, **kwargs)

View File

@ -18,7 +18,9 @@
from libc.string cimport const_char
from efl.eina cimport Eina_Log_Domain, const_Eina_Log_Domain, Eina_Log_Level, \
eina_log_print_cb_set, eina_log_domain_register, eina_log_level_set, \
eina_log_level_get, eina_log_domain_level_get, eina_log_domain_level_set
eina_log_level_get, eina_log_domain_level_get, eina_log_domain_level_set, \
eina_log_print
from cpython cimport PyUnicode_AsUTF8String
cdef extern from "stdarg.h":
ctypedef struct va_list:
@ -42,8 +44,9 @@ cdef void py_eina_log_print_cb(const_Eina_Log_Domain *d,
const_char *file, const_char *fnc, int line,
const_char *fmt, void *data, va_list args) with gil:
cdef unicode msg = PyUnicode_FromFormatV(fmt, args)
rec = logging.LogRecord(d.name, log_levels[level], file, line, msg, None, None, fnc)
logger = loggers.get(d.name, loggers["efl"])
cdef unicode name = d.name.decode("utf-8")
rec = logging.LogRecord(name, log_levels[level], file, line, msg, None, None, fnc)
logger = loggers.get(name, loggers["efl"])
logger.handle(rec)
import logging
@ -52,12 +55,16 @@ eina_log_print_cb_set(py_eina_log_print_cb, NULL)
class PyEFLLogger(logging.Logger):
def __init__(self, name):
self.eina_log_domain = eina_log_domain_register(name, NULL)
cname = name
if isinstance(cname, unicode): cname = PyUnicode_AsUTF8String(cname)
self.eina_log_domain = eina_log_domain_register(cname, NULL)
loggers[name] = self
logging.Logger.__init__(self, name)
def setLevel(self, lvl):
eina_log_domain_level_set(self.name, log_levels.index(lvl))
cname = self.name
if isinstance(cname, unicode): cname = PyUnicode_AsUTF8String(cname)
eina_log_domain_level_set(cname, log_levels.index(lvl))
logging.Logger.setLevel(self, lvl)
logging.setLoggerClass(PyEFLLogger)
@ -71,7 +78,7 @@ logging.setLoggerClass(logging.Logger)
cdef public int PY_EFL_LOG_DOMAIN = rootlog.eina_log_domain
cdef int add_logger(char *name):
cdef int add_logger(object name):
logging.setLoggerClass(PyEFLLogger)
log = logging.getLogger(name)

View File

@ -1,3 +1,3 @@
cdef:
int add_logger(char *name)
int add_logger(object name)
int PY_EFL_LOG_DOMAIN