[prev in list] [next in list] [prev in thread] [next in thread]
List: pykde
Subject: [PyQt] SIP and QString
From: Luca Beltrame <einar () heavensinferno ! net>
Date: 2012-11-18 15:36:14
Message-ID: 7277347.qGtjqMUA3W () leon ! lan
[Download RAW message or body]
[Attachment #2 (multipart/signed)]
[Attachment #4 (multipart/mixed)]
Hello,
while testing PyKDE4's modules with Python3, I noticed that the i18n() calls,
which accept const char*, are not properly handled in Python 3 (both with API
version 1 and 2):
In [2]: from PyKDE4.kdecore import i18n
In [3]: i18n("Test")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-00970cb5d435> in <module>()
----> 1 i18n("Test")
TypeError: i18n(): argument 1 has unexpected type 'str'
It does work if I pass bytes, but that's not correct, as we're dealing with
strings here.
PyQt documentation states that char* or const char* would be acceptable with
strings (Python 3 strings).
As the original SIP file had custom code inside, I'm attaching it here. I
looked at it briefly, but I couldn't find why it didn't work.
Can anyone shed a light on this issue?
--
Luca Beltrame - KDE Forums team
KDE Science supporter
GPG key ID: 6E1A4E79
["klocalizedstring.sip" (klocalizedstring.sip)]
//
// Copyright 2008 Jim Bublitz <jbublitz@nwinternet.com>
// Earlier copyrights 1998 - 2007 Jim Bublitz also apply
// Generated by twine
// This file is part of PyKDE4.
// PyKDE4 is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of
// the License, or (at your option) any later version.
// PyKDE4 is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
class KLocalizedString
{
%TypeHeaderCode
#include <klocalizedstring.h>
%End
public:
explicit KLocalizedString ();
KLocalizedString (const KLocalizedString& rhs);
QString toString () const;
QString toString (const KLocale* locale) const;
bool isEmpty () const;
//ig KLocalizedString subs (int a, int fieldWidth = 0, int base = 10, const \
QChar& fillChar = QLatin1Char(' ')) const; //ig KLocalizedString subs (uint \
a, int fieldWidth = 0, int base = 10, const QChar& fillChar = QLatin1Char(' ')) \
const; //ig KLocalizedString subs (long a, int fieldWidth = 0, int base = \
10, const QChar& fillChar = QLatin1Char(' ')) const; //ig KLocalizedString \
subs (ulong a, int fieldWidth = 0, int base = 10, const QChar& fillChar = \
QLatin1Char(' ')) const; KLocalizedString subs (qlonglong a, int fieldWidth = \
0, int base = 10, const QChar& fillChar = QLatin1Char(' ')) const; //ig \
KLocalizedString subs (qulonglong a, int fieldWidth = 0, int base = 10, const \
QChar& fillChar = QLatin1Char(' ')) const; //ig KLocalizedString subs \
(double a, int fieldWidth = 0, char format = 'g', int precision = -1, const QChar& \
fillChar = QLatin1Char(' ')) const; KLocalizedString subs (QChar a, int \
fieldWidth = 0, const QChar& fillChar = QLatin1Char(' ')) const; KLocalizedString \
subs (const QString& a, int fieldWidth = 0, const QChar& fillChar = QLatin1Char(' ')) \
const; KLocalizedString inContext (const QString& key, const QString& text) \
const; //ig static void notifyCatalogsUpdated (const QStringList& \
languages, const QList<KCatalogName>& catalogs);
private:
KLocalizedString (const char* ctxt, const char* msg, \
const char* plural); public:
~KLocalizedString ();
QString toString (const QString& catalogName) const;
QString toString (const KLocale* locale, const QString& \
catalogName) const; };
// KLocalizedString
KLocalizedString ki18n (const char* msg);
KLocalizedString ki18nc (const char* ctxt, const char* msg);
KLocalizedString ki18np (const char* singular, const char* plural);
KLocalizedString ki18ncp (const char* ctxt, const char* singular, const char* \
plural); QString tr2i18n (const char* message, const char* comment = \
0);
//ig class I18nTypeCheck;
%ModuleCode
QString klocalizedstring_i18n_template(KLocalizedString base, PyObject *list,int \
*sipIsErr) { KLocalizedString result = base;
QString *arg;
long long_arg;
double double_arg;
int iserr = 0;
for (int i=0; i < PyTuple_Size(list); i++) {
PyObject *pyarg = PyTuple_GET_ITEM (list, i);
#if PY_MAJOR_VERSION >= 3
if (PyLong_Check(pyarg)) {
long_arg = PyLong_AsLong(pyarg);
#else
if (PyInt_Check(pyarg)) {
long_arg = PyInt_AsLong(pyarg);
#endif
if (long_arg==-1 && PyErr_Occurred()) {
*sipIsErr = 1;
return QString();
}
result = result.subs(long_arg);
#if PY_MAJOR_VERSION >= 3
} else if (PyNumber_Check(pyarg)) {
PyObject *long_py = PyNumber_Long(pyarg);
long_arg = PyLong_AsLong(long_py);
Py_DECREF(long_py);
#else
} else if (PyLong_Check(pyarg)) {
long_arg = PyLong_AsLong(pyarg);
#endif
if (long_arg==-1 && PyErr_Occurred()) {
*sipIsErr = 1;
return QString();
}
result = result.subs(long_arg);
} else if (PyFloat_Check(pyarg)) {
double_arg = PyFloat_AsDouble(pyarg);
result = result.subs(double_arg);
} else {
int state = 0;
arg = (QString *)sipForceConvertToType(pyarg, sipType_QString, NULL, \
SIP_NOT_NONE, &state, &iserr); if (iserr) {
*sipIsErr = 1;
return QString();
}
result = result.subs(*arg);
sipReleaseType(arg,sipType_QString,state);
arg = 0;
}
}
return result.toString();
}
%End
//ig class I18nTypeCheck;
//force
QString i18n (const char* text, ...);
%MethodCode
QString result = klocalizedstring_i18n_template(ki18n(a0),a1,&sipIsErr);
if (!sipIsErr) {
sipRes = new QString(result);
}
%End
QString i18nc (const char* ctxt, const char* text, ...);
%MethodCode
QString result = klocalizedstring_i18n_template(ki18nc(a0,a1),a2,&sipIsErr);
if (!sipIsErr) {
sipRes = new QString(result);
}
%End
QString i18np (const char* sing, const char* plur, ...);
%MethodCode
QString result = klocalizedstring_i18n_template(ki18np(a0,a1),a2,&sipIsErr);
if (!sipIsErr) {
sipRes = new QString(result);
}
%End
QString i18ncp (const char* ctxt, const char* sing, const char* plur, \
...); %MethodCode
QString result = klocalizedstring_i18n_template(ki18ncp(a0,a1,a2),a3,&sipIsErr);
if (!sipIsErr) {
sipRes = new QString(result);
}
%End
//end
%ModuleHeaderCode
#include <klocalizedstring.h>
%End
//ig QString i18n (const char* text);
//ig QString i18nc (const char* ctxt, const char* text);
["signature.asc" (application/pgp-signature)]
_______________________________________________
PyQt mailing list PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic