Re: [PATCH] C extension fails to build on Python 2.5 because of PyUnicode_FromFormat

"R. Tyler Ballance" <[email protected]> Tue, 30 Mar 2010 18:18:44 -0700
Newsgroups gmane.comp.python.cheetah
Message-ID <[email protected]>
On Wed, 31 Mar 2010, Arnaud Fontaine wrote:

> Hello,
> 
> Cheetah  C  extension  doesn't  build   on  Python  <=  2.5  because  of
> PyUnicode_FromFormat() being  only available on  Python >= 2.6.   I have
> attached  a  patch  to  make   it  build  on  Python  2.5  and  inferior
> versions. It builds without warning on Python 2.5, 2.6 and 3.1 and I can
> import  _namemapper  on  all  these  versions, moreover  all  the  tests
> passed. Hope  the patch is good  as I'm not really  familiar with Python
> C/API.


Aha, good catch Arnaud, I had experienced a similar quirk when I ported another
C-extension that I maintain to run on Python 2.4 - 3.1, I'll squeeze an update
out tonight or tomorrow :)

> 
> BTW,  my question  may  be  silly but  I'm  wondering why  `newExcValue'
> reference           returned          by          PyUnicode_FromFormat()
> (wrapInternalNotFoundException() function) is never DECREF whereas it is
> in  setNotFoundException()  function  for `exceptionStr'.  Just  curious
> ;)...
> 
> Cheers,
> Arnaud Fontaine
> 

> Description: C extension fails to build because of PyUnicode_FromFormat only available on Python >= 2.6
> Author: Arnaud Fontaine <[email protected]>
> 
> --- a/cheetah/c/cheetah.h	2010-02-08 04:17:23.000000000 +0000
> +++ b/cheetah/c/cheetah.h	2010-03-30 22:42:49.000000000 +0100
> @@ -37,6 +37,9 @@
>  
>  #if PY_MAJOR_VERSION >= 3
>  #define IS_PYTHON3
> +#elif PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 5
> +/* PyUnicode_FromFormat is only available on Python >= 2.6 */
> +#define IS_PYTHON25_OR_LESS
>  #endif
>  
>  #define TRUE 1
> --- a/cheetah/c/_namemapper.c	2010-02-08 04:17:23.000000000 +0000
> +++ b/cheetah/c/_namemapper.c	2010-03-30 22:40:01.000000000 +0100
> @@ -35,7 +35,13 @@
>  static void setNotFoundException(char *key, PyObject *namespace)
>  {
>      PyObject *exceptionStr = NULL;
> +#ifdef IS_PYTHON25_OR_LESS
> +    exceptionStr = Py_BuildValue("s", "cannot find '");
> +    PyString_ConcatAndDel(&exceptionStr, Py_BuildValue("s", key));
> +    PyString_ConcatAndDel(&exceptionStr, Py_BuildValue("s", "'"));
> +#else
>      exceptionStr = PyUnicode_FromFormat("cannot find \'%s\'", key);
> +#endif
>      PyErr_SetObject(NotFound, exceptionStr);
>      Py_XDECREF(exceptionStr);
>  }
> @@ -58,8 +64,15 @@
>  
>          if (isAlreadyWrapped != NULL) {
>              if (PyLong_AsLong(isAlreadyWrapped) == -1) {
> +#ifdef IS_PYTHON25_OR_LESS
> +                newExcValue = Py_BuildValue("U", excValue);
> +                PyString_ConcatAndDel(&newExcValue, Py_BuildValue("s", "while searching for '"));
> +                PyString_ConcatAndDel(&newExcValue, Py_BuildValue("s", fullName));
> +                PyString_ConcatAndDel(&newExcValue, Py_BuildValue("s", "'"));
> +#else                                      
>                  newExcValue = PyUnicode_FromFormat("%U while searching for \'%s\'",
>                          excValue, fullName);
> +#endif
>              }
>              Py_DECREF(isAlreadyWrapped);
>          }

> ------------------------------------------------------------------------------
> Download Intel&#174; Parallel Studio Eval
> Try the new software tools for yourself. Speed compiling, find bugs
> proactively, and fine-tune applications for parallel performance.
> See why Intel Parallel Studio got high marks during beta.
> http://p.sf.net/sfu/intel-sw-dev

> _______________________________________________
> Cheetahtemplate-discuss mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss

Cheers,
-R. Tyler Ballance
--------------------------------------
 Jabber: [email protected]
 GitHub: http://github.com/rtyler
Twitter: http://twitter.com/agentdero
   Blog: http://unethicalblogger.com

------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev

_______________________________________________
Cheetahtemplate-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
signature.asc (application/pgp-signature, 198 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.12 (GNU/Linux)

iEYEARECAAYFAkuyovQACgkQFCbH3D9R4W+wvACfQXzUaPD+aORVphpqlzfTIFOx
/L0AoJ7kjuhZC4JjKGV4qgJ1AFUlYWYF
=nE5z
-----END PGP SIGNATURE-----