Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-PyICU for openSUSE:Factory checked in at 2023-06-27 23:15:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-PyICU (Old) and /work/SRC/openSUSE:Factory/.python-PyICU.new.15902 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-PyICU" Tue Jun 27 23:15:38 2023 rev:16 rq:1095261 version:2.11 Changes: -------- --- /work/SRC/openSUSE:Factory/python-PyICU/python-PyICU.changes 2022-10-28 19:29:47.482709876 +0200 +++ /work/SRC/openSUSE:Factory/.python-PyICU.new.15902/python-PyICU.changes 2023-06-27 23:15:39.935038134 +0200 @@ -1,0 +2,21 @@ +Sun Jun 25 19:30:35 UTC 2023 - Matej Cepl <mc...@suse.com> + +- Clean up SPEC file. +- Add remove_six.patch which removes the need to use six. + +------------------------------------------------------------------- +Sun Jun 25 07:21:50 UTC 2023 - Andreas Schneider <a...@cryptomilk.org> + +- Update to version 2.11 + * fixed bug PluralFormat.format accepting python strings, which are immutable + * fixed bug with UWordBreak wrapping wrong enum (UBreakIteratorType) + * added wrappers for UBreakIteratorType, ULine|SentenceBreakTag + * added wrappers for DateTimePatternGenerator::set|getDateTimeFormat() + * added wrappers for Precision::incrementExact() + * Locale objects can now be sorted (Fredrik Roubert) + * added wrapper for Calendar::inTemporalLeapYear() + * added wrappers for Calendar::get|getTemporalMonthCode() + * changed all Calendar setters to return self instead of None, setter chaining +- Use sle15_python_module_pythons + +------------------------------------------------------------------- Old: ---- PyICU-2.10.2.tar.gz New: ---- PyICU-2.11.tar.gz remove_six.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-PyICU.spec ++++++ --- /var/tmp/diff_new_pack.KjLSR6/_old 2023-06-27 23:15:40.727042794 +0200 +++ /var/tmp/diff_new_pack.KjLSR6/_new 2023-06-27 23:15:40.731042818 +0200 @@ -1,7 +1,7 @@ # # spec file # -# Copyright (c) 2022 SUSE LLC +# Copyright (c) 2023 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,20 +16,22 @@ # -%{?!python_module:%define python_module() python-%{**} python3-%{**}} %global modname PyICU Name: python-%{modname} -Version: 2.10.2 +Version: 2.11 Release: 0 Summary: Python Extension Wrapping the ICU C++ API License: MIT Group: Development/Libraries/Python URL: https://gitlab.pyicu.org -Source0: https://files.pythonhosted.org/packages/source/P/PyICU/%{modname}-%{version}.tar.gz +Source0: https://files.pythonhosted.org/packages/source/P/PyICU/PyICU-2.11.tar.gz +# PATCH-FEATURE-UPSTREAM remove_six.patch mc...@suse.com +# Remove dependency on six +Patch0: remove_six.patch BuildRequires: %{python_module devel} +BuildRequires: %{python_module pip} BuildRequires: %{python_module pytest} -BuildRequires: %{python_module setuptools} -BuildRequires: %{python_module six} +BuildRequires: %{python_module wheel} BuildRequires: fdupes BuildRequires: gcc-c++ BuildRequires: pkgconfig @@ -39,6 +41,7 @@ Provides: %{modname} = %{version} Provides: python-ICU = %{version} Obsoletes: python-ICU < 1.2 +%{?sle15_python_module_pythons} %python_subpackages %description @@ -46,15 +49,15 @@ library (ICU). %prep -%setup -q -n %{modname}-%{version} +%autosetup -p1 -n %{modname}-%{version} %build export CXXFLAGS="%{optflags} -fno-strict-aliasing" export CFLAGS="%{optflags} -fno-strict-aliasing" -%python_build +%pyproject_wheel %install -%python_install +%pyproject_install %python_expand %fdupes %{buildroot}%{$python_sitearch} %check @@ -63,6 +66,7 @@ %files %{python_files} %license LICENSE %doc CHANGES CREDITS README.md -%{python_sitearch}/* +%{python_sitearch}/icu +%{python_sitearch}/PyICU-%{version}*-info %changelog ++++++ PyICU-2.10.2.tar.gz -> PyICU-2.11.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/CHANGES new/PyICU-2.11/CHANGES --- old/PyICU-2.10.2/CHANGES 2022-10-25 19:54:35.000000000 +0200 +++ new/PyICU-2.11/CHANGES 2023-04-15 21:29:49.000000000 +0200 @@ -1,3 +1,15 @@ +Version 2.10.2 -> 2.11 +---------------------- + - fixed bug PluralFormat.format accepting python strings, which are immutable + - fixed bug with UWordBreak wrapping wrong enum (UBreakIteratorType) + - added wrappers for UBreakIteratorType, ULine|SentenceBreakTag + - added wrappers for DateTimePatternGenerator::set|getDateTimeFormat() + - added wrappers for Precision::incrementExact() + - Locale objects can now be sorted (Fredrik Roubert) + - added wrapper for Calendar::inTemporalLeapYear() + - added wrappers for Calendar::get|getTemporalMonthCode() + - changed all Calendar setters to return self instead of None, setter chaining + Version 2.10.1 -> 2.10.2 ------------------------ - fixed bug in logic computing max_char for PyUnicode_New() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/PKG-INFO new/PyICU-2.11/PKG-INFO --- old/PyICU-2.10.2/PKG-INFO 2022-10-25 19:55:02.967777300 +0200 +++ new/PyICU-2.11/PKG-INFO 2023-04-15 21:46:31.891961000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: PyICU -Version: 2.10.2 +Version: 2.11 Summary: Python extension wrapping the ICU C++ API Home-page: https://gitlab.pyicu.org/main/pyicu Author: Andi Vajda @@ -369,3 +369,5 @@ There are also a few [samples](https://gitlab.pyicu.org/main/pyicu/-/tree/main/samples) ported from ICU C/C++. + +Last but not least, this [cheat sheet](https://gist.github.com/dpk/8325992) has useful examples. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/README.md new/PyICU-2.11/README.md --- old/PyICU-2.10.2/README.md 2022-08-19 21:54:38.000000000 +0200 +++ new/PyICU-2.11/README.md 2023-01-03 23:22:49.000000000 +0100 @@ -345,3 +345,5 @@ There are also a few [samples](https://gitlab.pyicu.org/main/pyicu/-/tree/main/samples) ported from ICU C/C++. + +Last but not least, this [cheat sheet](https://gist.github.com/dpk/8325992) has useful examples. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/calendar.cpp new/PyICU-2.11/calendar.cpp --- old/PyICU-2.10.2/calendar.cpp 2021-04-10 21:14:19.000000000 +0200 +++ new/PyICU-2.11/calendar.cpp 2023-04-15 21:26:50.000000000 +0200 @@ -77,6 +77,11 @@ static PyObject *t_calendar_defaultCenturyStartYear(t_calendar *self); static PyObject *t_calendar_getLocale(t_calendar *self, PyObject *args); static PyObject *t_calendar_getLocaleID(t_calendar *self, PyObject *args); +#if U_ICU_VERSION_HEX >= VERSION_HEX(73, 0, 0) +static PyObject *t_calendar_inTemporalLeapYear(t_calendar *self); +static PyObject *t_calendar_getTemporalMonthCode(t_calendar *self); +static PyObject *t_calendar_setTemporalMonthCode(t_calendar *self, PyObject *arg); +#endif static PyObject *t_calendar_createInstance(PyTypeObject *type, PyObject *args); static PyObject *t_calendar_getAvailableLocales(PyTypeObject *type); static PyObject *t_calendar_getNow(PyTypeObject *type); @@ -116,6 +121,11 @@ DECLARE_METHOD(t_calendar, defaultCenturyStartYear, METH_NOARGS), DECLARE_METHOD(t_calendar, getLocale, METH_VARARGS), DECLARE_METHOD(t_calendar, getLocaleID, METH_VARARGS), +#if U_ICU_VERSION_HEX >= VERSION_HEX(73, 0, 0) + DECLARE_METHOD(t_calendar, inTemporalLeapYear, METH_NOARGS), + DECLARE_METHOD(t_calendar, getTemporalMonthCode, METH_NOARGS), + DECLARE_METHOD(t_calendar, setTemporalMonthCode, METH_O), +#endif DECLARE_METHOD(t_calendar, createInstance, METH_VARARGS | METH_CLASS), DECLARE_METHOD(t_calendar, getAvailableLocales, METH_NOARGS | METH_CLASS), DECLARE_METHOD(t_calendar, getNow, METH_NOARGS | METH_CLASS), @@ -170,7 +180,7 @@ if (!parseArg(arg, "D", &date)) { STATUS_CALL(self->object->setTime(date, status)); - Py_RETURN_NONE; + Py_RETURN_SELF(); } return PyErr_SetArgsError((PyObject *) self, "setTime", arg); @@ -240,7 +250,7 @@ if (!parseArgs(args, "ii", &field, &amount)) { STATUS_CALL(self->object->add(field, amount, status)); - Py_RETURN_NONE; + Py_RETURN_SELF(); } return PyErr_SetArgsError((PyObject *) self, "add", args); @@ -254,12 +264,12 @@ if (!parseArgs(args, "iB", &field, &up)) { STATUS_CALL(self->object->roll(field, (UBool) up, status)); - Py_RETURN_NONE; + Py_RETURN_SELF(); } if (!parseArgs(args, "ii", &field, &amount)) { STATUS_CALL(self->object->roll(field, amount, status)); - Py_RETURN_NONE; + Py_RETURN_SELF(); } return PyErr_SetArgsError((PyObject *) self, "roll", args); @@ -293,7 +303,7 @@ if (!parseArg(arg, "P", TYPE_CLASSID(TimeZone), &tz)) { self->object->setTimeZone(*tz); /* copied */ - Py_RETURN_NONE; + Py_RETURN_SELF(); } return PyErr_SetArgsError((PyObject *) self, "setTimeZone", arg); @@ -320,7 +330,7 @@ if (!parseArg(arg, "b", &b)) { self->object->setLenient(b); - Py_RETURN_NONE; + Py_RETURN_SELF(); } return PyErr_SetArgsError((PyObject *) self, "setLenient", arg); @@ -343,7 +353,7 @@ if (!parseArg(arg, "i", &day)) { self->object->setFirstDayOfWeek(day); - Py_RETURN_NONE; + Py_RETURN_SELF(); } return PyErr_SetArgsError((PyObject *) self, "setFirstDayOfWeek", arg); @@ -362,7 +372,7 @@ if (!parseArg(arg, "i", &days)) { self->object->setMinimalDaysInFirstWeek(days); - Py_RETURN_NONE; + Py_RETURN_SELF(); } return PyErr_SetArgsError((PyObject *) self, "setMinimalDaysInFirstWeek", arg); @@ -473,21 +483,21 @@ if (!parseArgs(args, "ii", &field, &value)) { self->object->set((UCalendarDateFields) field, value); - Py_RETURN_NONE; + Py_RETURN_SELF(); } break; case 3: if (!parseArgs(args, "iii", &year, &month, &date)) { self->object->set(year, month, date); - Py_RETURN_NONE; + Py_RETURN_SELF(); } break; case 5: if (!parseArgs(args, "iiiii", &year, &month, &date, &hour, &minute)) { self->object->set(year, month, date, hour, minute); - Py_RETURN_NONE; + Py_RETURN_SELF(); } break; case 6: @@ -495,7 +505,7 @@ &second)) { self->object->set(year, month, date, hour, minute, second); - Py_RETURN_NONE; + Py_RETURN_SELF(); } break; } @@ -510,12 +520,12 @@ switch (PyTuple_Size(args)) { case 0: self->object->clear(); - Py_RETURN_NONE; + Py_RETURN_SELF(); case 1: if (!parseArgs(args, "i", &field)) { self->object->clear(field); - Py_RETURN_NONE; + Py_RETURN_SELF(); } break; } @@ -584,6 +594,38 @@ return PyErr_SetArgsError((PyObject *) self, "getLocaleID", args); } +#if U_ICU_VERSION_HEX >= VERSION_HEX(73, 0, 0) + +static PyObject *t_calendar_inTemporalLeapYear(t_calendar *self) { + UBool result; + STATUS_CALL(result = self->object->inTemporalLeapYear(status)); + Py_RETURN_BOOL(result); +} + +static PyObject *t_calendar_getTemporalMonthCode(t_calendar *self) +{ + const char *code; + STATUS_CALL(code = self->object->getTemporalMonthCode(status)); + + return PyString_FromString(code); +} + +static PyObject *t_calendar_setTemporalMonthCode(t_calendar *self, PyObject *arg) +{ + charsArg code; + + if (!parseArg(arg, "n", &code)) + { + STATUS_CALL(self->object->setTemporalMonthCode(code, status)); + Py_RETURN_SELF(); + } + + return PyErr_SetArgsError((PyObject *) self, "setTemporalMonthCode", arg); +} + +#endif // ICU >= 73 + + static PyObject *t_calendar_createInstance(PyTypeObject *type, PyObject *args) { TimeZone *tz; @@ -767,7 +809,7 @@ if (!parseArg(arg, "D", &date)) { STATUS_CALL(self->object->setGregorianChange(date, status)); - Py_RETURN_NONE; + Py_RETURN_SELF(); } return PyErr_SetArgsError((PyObject *) self, "setGregorianChange", arg); @@ -823,6 +865,9 @@ INSTALL_ENUM(UCalendarDateFields, "JULIAN_DAY", UCAL_JULIAN_DAY); INSTALL_ENUM(UCalendarDateFields, "MILLISECONDS_IN_DAY", UCAL_MILLISECONDS_IN_DAY); INSTALL_ENUM(UCalendarDateFields, "DAY_OF_MONTH", UCAL_DAY_OF_MONTH); +#if U_ICU_VERSION_HEX >= VERSION_HEX(73, 0, 0) + INSTALL_ENUM(UCalendarDateFields, "ORDINAL_MONTH", UCAL_ORDINAL_MONTH); +#endif INSTALL_ENUM(UCalendarDaysOfWeek, "SUNDAY", UCAL_SUNDAY); INSTALL_ENUM(UCalendarDaysOfWeek, "MONDAY", UCAL_MONDAY); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/char.cpp new/PyICU-2.11/char.cpp --- old/PyICU-2.10.2/char.cpp 2022-09-30 02:21:56.000000000 +0200 +++ new/PyICU-2.11/char.cpp 2022-11-16 20:58:47.000000000 +0100 @@ -1160,7 +1160,7 @@ INSTALL_ENUM(UBlockCode, "NO_BLOCK", UBLOCK_NO_BLOCK); INSTALL_ENUM(UBlockCode, "BASIC_LATIN", UBLOCK_BASIC_LATIN); - INSTALL_ENUM(UBlockCode, "LATIN_1_SUPPLEMENT,", UBLOCK_LATIN_1_SUPPLEMENT); + INSTALL_ENUM(UBlockCode, "LATIN_1_SUPPLEMENT", UBLOCK_LATIN_1_SUPPLEMENT); INSTALL_ENUM(UBlockCode, "LATIN_EXTENDED_A", UBLOCK_LATIN_EXTENDED_A); INSTALL_ENUM(UBlockCode, "LATIN_EXTENDED_B", UBLOCK_LATIN_EXTENDED_B); INSTALL_ENUM(UBlockCode, "IPA_EXTENSIONS", UBLOCK_IPA_EXTENSIONS); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/common.cpp new/PyICU-2.11/common.cpp --- old/PyICU-2.10.2/common.cpp 2022-10-25 06:27:33.000000000 +0200 +++ new/PyICU-2.11/common.cpp 2023-04-05 01:20:20.000000000 +0200 @@ -170,6 +170,11 @@ return PyUnicode_FromUnicodeString(string->getBuffer(), string->length()); } +EXPORT PyObject *PyUnicode_FromUnicodeString(const UnicodeString &string) +{ + return PyUnicode_FromUnicodeString(string.getBuffer(), string.length()); +} + EXPORT PyObject *PyUnicode_FromUnicodeString(const UChar *utf16, int len16) { if (!utf16) @@ -361,6 +366,7 @@ PyUnicode_READY(object); switch (PyUnicode_KIND(object)) { +#if PY_VERSION_HEX < 0x030c0000 case PyUnicode_WCHAR_KIND: { // this code path should be deprecated if (SIZEOF_WCHAR_T == sizeof(UChar)) { @@ -387,7 +393,7 @@ } break; } - +#endif case PyUnicode_1BYTE_KIND: { Py_ssize_t len = PyUnicode_GET_LENGTH(object); Py_UCS1 *pchars = PyUnicode_1BYTE_DATA(object); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/common.h new/PyICU-2.11/common.h --- old/PyICU-2.10.2/common.h 2022-10-01 22:52:23.000000000 +0200 +++ new/PyICU-2.11/common.h 2023-04-05 01:19:48.000000000 +0200 @@ -350,6 +350,7 @@ }; EXPORT PyObject *PyUnicode_FromUnicodeString(const UnicodeString *string); +EXPORT PyObject *PyUnicode_FromUnicodeString(const UnicodeString &string); EXPORT PyObject *PyUnicode_FromUnicodeString(const UChar *utf16, int len16); EXPORT UnicodeString &PyBytes_AsUnicodeString(PyObject *object, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/dateformat.cpp new/PyICU-2.11/dateformat.cpp --- old/PyICU-2.10.2/dateformat.cpp 2021-04-10 22:11:11.000000000 +0200 +++ new/PyICU-2.11/dateformat.cpp 2023-04-05 01:25:53.000000000 +0200 @@ -40,8 +40,8 @@ DECLARE_CONSTANTS_TYPE(UDateTimePatternMatchOptions) #endif -#if U_ICU_VERSION_HEX >= VERSION_HEX(54, 0, 0) -DECLARE_CONSTANTS_TYPE(UDateRelativeDateTimeFormatterStyle) +#if U_ICU_VERSION_HEX >= VERSION_HEX(50, 0, 0) +DECLARE_CONSTANTS_TYPE(UDateFormatStyle) #endif #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0) @@ -56,6 +56,10 @@ DECLARE_CONSTANTS_TYPE(UDateFormatBooleanAttribute) #endif +#if U_ICU_VERSION_HEX >= VERSION_HEX(54, 0, 0) +DECLARE_CONSTANTS_TYPE(UDateRelativeDateTimeFormatterStyle) +#endif + #if U_ICU_VERSION_HEX >= VERSION_HEX(57, 0, 0) DECLARE_CONSTANTS_TYPE(URelativeDateTimeUnit) #endif @@ -271,6 +275,10 @@ static PyObject *t_datetimepatterngenerator_staticGetBaseSkeleton( PyTypeObject *type, PyObject *arg); #endif +static PyObject *t_datetimepatterngenerator_getDateTimeFormat( + t_datetimepatterngenerator *self, PyObject *args); +static PyObject *t_datetimepatterngenerator_setDateTimeFormat( + t_datetimepatterngenerator *self, PyObject *arg); static PyMethodDef t_datetimepatterngenerator_methods[] = { DECLARE_METHOD(t_datetimepatterngenerator, createEmptyInstance, @@ -298,6 +306,8 @@ DECLARE_METHOD(t_datetimepatterngenerator, staticGetBaseSkeleton, METH_O | METH_CLASS), #endif + DECLARE_METHOD(t_datetimepatterngenerator, getDateTimeFormat, METH_VARARGS), + DECLARE_METHOD(t_datetimepatterngenerator, setDateTimeFormat, METH_O), { NULL, NULL, 0, NULL } }; @@ -1634,7 +1644,7 @@ static PyObject *t_datetimepatterngenerator_setDecimal( t_datetimepatterngenerator *self, PyObject *arg) { - UnicodeString *u, _u;; + UnicodeString *u, _u; if (!parseArg(arg, "S", &u, &_u)) { @@ -1652,6 +1662,44 @@ return PyUnicode_FromUnicodeString(&result); } +static PyObject *t_datetimepatterngenerator_getDateTimeFormat( + t_datetimepatterngenerator *self, PyObject *args) +{ + switch (PyTuple_Size(args)) { + case 0: + return PyUnicode_FromUnicodeString(self->object->getDateTimeFormat()); +#if U_ICU_VERSION_HEX >= VERSION_HEX(71, 0, 0) + case 1: { + UDateFormatStyle dfs; + + if (!parseArgs(args, "i", &dfs)) + { + STATUS_RESULT_CALL( + const UnicodeString &u = self->object->getDateTimeFormat(dfs, status), + return PyUnicode_FromUnicodeString(u)) + } + break; + } +#endif + } + + return PyErr_SetArgsError((PyObject *) self, "getDateTimeFormat", args); +} + +static PyObject *t_datetimepatterngenerator_setDateTimeFormat( + t_datetimepatterngenerator *self, PyObject *arg) +{ + UnicodeString *u, _u; + + if (!parseArg(arg, "S", &u, &_u)) + { + self->object->setDateTimeFormat(*u); + Py_RETURN_NONE; + } + + return PyErr_SetArgsError((PyObject *) self, "setDateTimeFormat", arg); +} + #if U_ICU_VERSION_HEX >= 0x04000000 @@ -2354,6 +2402,10 @@ INSTALL_CONSTANTS_TYPE(UDateRelativeDateTimeFormatterStyle, m); #endif +#if U_ICU_VERSION_HEX >= VERSION_HEX(50, 0, 0) + INSTALL_CONSTANTS_TYPE(UDateFormatStyle, m); +#endif + #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0) INSTALL_CONSTANTS_TYPE(UDisplayContext, m); INSTALL_CONSTANTS_TYPE(UDisplayContextType, m); @@ -2504,6 +2556,17 @@ INSTALL_ENUM(UDateRelativeDateTimeFormatterStyle, "COUNT", UDAT_STYLE_COUNT); #endif +#if U_ICU_VERSION_HEX >= VERSION_HEX(50, 0, 0) + INSTALL_ENUM(UDateFormatStyle, "FULL", UDAT_FULL); + INSTALL_ENUM(UDateFormatStyle, "LONG", UDAT_LONG); + INSTALL_ENUM(UDateFormatStyle, "MEDIUM", UDAT_MEDIUM); + INSTALL_ENUM(UDateFormatStyle, "SHORT", UDAT_SHORT); + INSTALL_ENUM(UDateFormatStyle, "DEFAULT", UDAT_DEFAULT); + INSTALL_ENUM(UDateFormatStyle, "RELATIVE", UDAT_RELATIVE); + INSTALL_ENUM(UDateFormatStyle, "NONE", UDAT_NONE); + INSTALL_ENUM(UDateFormatStyle, "PATTERN", UDAT_PATTERN); +#endif + #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0) INSTALL_ENUM(UDisplayContext, "STANDARD_NAMES", UDISPCTX_STANDARD_NAMES); INSTALL_ENUM(UDisplayContext, "DIALECT_NAMES", UDISPCTX_DIALECT_NAMES); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/format.cpp new/PyICU-2.11/format.cpp --- old/PyICU-2.10.2/format.cpp 2021-04-06 23:39:38.000000000 +0200 +++ new/PyICU-2.11/format.cpp 2022-11-17 22:26:54.000000000 +0100 @@ -1745,25 +1745,25 @@ } break; case 2: - if (!parseArgs(args, "iS", &n, &u, &_u)) + if (!parseArgs(args, "iU", &n, &u, &_u)) { STATUS_CALL(self->object->format(n, *u, _fp, status)); Py_RETURN_ARG(args, 1); } - if (!parseArgs(args, "dS", &d, &u, &_u)) + if (!parseArgs(args, "dU", &d, &u, &_u)) { STATUS_CALL(self->object->format(d, *u, _fp, status)); Py_RETURN_ARG(args, 1); } break; case 3: - if (!parseArgs(args, "iSP", TYPE_CLASSID(FieldPosition), + if (!parseArgs(args, "iUP", TYPE_CLASSID(FieldPosition), &n, &u, &_u, &fp)) { STATUS_CALL(self->object->format(n, *u, *fp, status)); Py_RETURN_ARG(args, 1); } - if (!parseArgs(args, "dSP", TYPE_CLASSID(FieldPosition), + if (!parseArgs(args, "dUP", TYPE_CLASSID(FieldPosition), &d, &u, &_u, &fp)) { STATUS_CALL(self->object->format(d, *u, *fp, status)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/iterators.cpp new/PyICU-2.11/iterators.cpp --- old/PyICU-2.10.2/iterators.cpp 2021-05-13 21:36:29.000000000 +0200 +++ new/PyICU-2.11/iterators.cpp 2023-01-10 22:31:07.000000000 +0100 @@ -1,5 +1,5 @@ /* ==================================================================== - * Copyright (c) 2004-2019 Open Source Applications Foundation. + * Copyright (c) 2004-2023 Open Source Applications Foundation. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -29,7 +29,10 @@ #include "iterators.h" #include "macros.h" +DECLARE_CONSTANTS_TYPE(UBreakIteratorType) DECLARE_CONSTANTS_TYPE(UWordBreak) +DECLARE_CONSTANTS_TYPE(ULineBreakTag) +DECLARE_CONSTANTS_TYPE(USentenceBreakTag) /* ForwardCharacterIterator */ @@ -1505,7 +1508,10 @@ CollationElementIteratorType_.tp_richcompare = (richcmpfunc) t_collationelementiterator_richcmp; + INSTALL_CONSTANTS_TYPE(UBreakIteratorType, m); INSTALL_CONSTANTS_TYPE(UWordBreak, m); + INSTALL_CONSTANTS_TYPE(ULineBreakTag, m); + INSTALL_CONSTANTS_TYPE(USentenceBreakTag, m); INSTALL_TYPE(ForwardCharacterIterator, m); INSTALL_TYPE(CharacterIterator, m); @@ -1517,11 +1523,32 @@ REGISTER_TYPE(CanonicalIterator, m); REGISTER_TYPE(CollationElementIterator, m); - INSTALL_ENUM(UWordBreak, "CHARACTER", UBRK_CHARACTER); - INSTALL_ENUM(UWordBreak, "WORD", UBRK_WORD); - INSTALL_ENUM(UWordBreak, "LINE", UBRK_LINE); - INSTALL_ENUM(UWordBreak, "SENTENCE", UBRK_SENTENCE); - INSTALL_ENUM(UWordBreak, "TITLE", UBRK_TITLE); + INSTALL_ENUM(UBreakIteratorType, "CHARACTER", UBRK_CHARACTER); + INSTALL_ENUM(UBreakIteratorType, "WORD", UBRK_WORD); + INSTALL_ENUM(UBreakIteratorType, "LINE", UBRK_LINE); + INSTALL_ENUM(UBreakIteratorType, "SENTENCE", UBRK_SENTENCE); + INSTALL_ENUM(UBreakIteratorType, "TITLE", UBRK_TITLE); + + INSTALL_ENUM(UWordBreak, "NONE", UBRK_WORD_NONE); + INSTALL_ENUM(UWordBreak, "NONE_LIMIT", UBRK_WORD_NONE_LIMIT); + INSTALL_ENUM(UWordBreak, "NUMBER", UBRK_WORD_NUMBER); + INSTALL_ENUM(UWordBreak, "NUMBER_LIMIT", UBRK_WORD_NUMBER_LIMIT); + INSTALL_ENUM(UWordBreak, "LETTER", UBRK_WORD_LETTER); + INSTALL_ENUM(UWordBreak, "LETTER_LIMIT", UBRK_WORD_LETTER_LIMIT); + INSTALL_ENUM(UWordBreak, "KANA", UBRK_WORD_KANA); + INSTALL_ENUM(UWordBreak, "KANA_LIMIT", UBRK_WORD_KANA_LIMIT); + INSTALL_ENUM(UWordBreak, "IDEO", UBRK_WORD_IDEO); + INSTALL_ENUM(UWordBreak, "IDEO_LIMIT", UBRK_WORD_IDEO_LIMIT); + + INSTALL_ENUM(ULineBreakTag, "SOFT", UBRK_LINE_SOFT); + INSTALL_ENUM(ULineBreakTag, "SOFT_LIMIT", UBRK_LINE_SOFT_LIMIT); + INSTALL_ENUM(ULineBreakTag, "HARD", UBRK_LINE_HARD); + INSTALL_ENUM(ULineBreakTag, "HARD_LIMIT", UBRK_LINE_HARD_LIMIT); + + INSTALL_ENUM(USentenceBreakTag, "TERM", UBRK_SENTENCE_TERM); + INSTALL_ENUM(USentenceBreakTag, "TERM_LIMIT", UBRK_SENTENCE_TERM_LIMIT); + INSTALL_ENUM(USentenceBreakTag, "SEP", UBRK_SENTENCE_SEP); + INSTALL_ENUM(USentenceBreakTag, "SEP_LIMIT", UBRK_SENTENCE_SEP_LIMIT); INSTALL_STATIC_INT(ForwardCharacterIterator, DONE); INSTALL_STATIC_INT(BreakIterator, DONE); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/locale.cpp new/PyICU-2.11/locale.cpp --- old/PyICU-2.10.2/locale.cpp 2022-10-01 22:53:54.000000000 +0200 +++ new/PyICU-2.11/locale.cpp 2023-04-14 20:45:50.000000000 +0200 @@ -1290,8 +1290,33 @@ return (long) self->object->hashCode(); } -DEFINE_RICHCMP(Locale, t_locale) - +static PyObject *t_locale_richcmp(t_locale *self, PyObject *arg, int op) +{ + Locale *object; + if (!parseArg(arg, "P", TYPE_CLASSID(Locale), &object)) + { + switch (op) { + case Py_EQ: Py_RETURN_BOOL(*self->object == *object); + case Py_NE: Py_RETURN_BOOL(*self->object != *object); + case Py_LT: Py_RETURN_BOOL(strcmp(self->object->getName(), object->getName()) < 0); + case Py_LE: Py_RETURN_BOOL(strcmp(self->object->getName(), object->getName()) <= 0); + case Py_GT: Py_RETURN_BOOL(strcmp(self->object->getName(), object->getName()) > 0); + case Py_GE: Py_RETURN_BOOL(strcmp(self->object->getName(), object->getName()) >= 0); + default: + PyErr_SetNone(PyExc_NotImplementedError); + return NULL; + } + } + switch (op) { + case Py_EQ: + Py_RETURN_FALSE; + case Py_NE: + Py_RETURN_TRUE; + default: + PyErr_SetNone(PyExc_NotImplementedError); + return NULL; + } +} /* ResourceBundle */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/measureunit.cpp new/PyICU-2.11/measureunit.cpp --- old/PyICU-2.10.2/measureunit.cpp 2022-09-30 02:26:10.000000000 +0200 +++ new/PyICU-2.11/measureunit.cpp 2023-04-15 21:24:13.000000000 +0200 @@ -287,6 +287,10 @@ static PyObject *t_measureunit_createTonne(PyTypeObject *type); #endif +#if U_ICU_VERSION_HEX >= VERSION_HEX(73, 0, 0) +static PyObject *t_measureunit_createBeaufort(PyTypeObject *type); +#endif + static PyMethodDef t_measureunit_methods[] = { #if U_ICU_VERSION_HEX >= VERSION_HEX(53, 0, 0) DECLARE_METHOD(t_measureunit, getType, METH_NOARGS), @@ -521,6 +525,9 @@ DECLARE_METHOD(t_measureunit, createQuarter, METH_NOARGS | METH_CLASS), DECLARE_METHOD(t_measureunit, createTonne, METH_NOARGS | METH_CLASS), #endif +#if U_ICU_VERSION_HEX >= VERSION_HEX(73, 0, 0) + DECLARE_METHOD(t_measureunit, createBeaufort, METH_NOARGS | METH_CLASS), +#endif { NULL, NULL, 0, NULL } }; @@ -1144,6 +1151,10 @@ createMU(Tonne) #endif +#if U_ICU_VERSION_HEX >= VERSION_HEX(73, 0, 0) +createMU(Beaufort) +#endif + /* Measure */ #if U_ICU_VERSION_HEX >= VERSION_HEX(53, 1, 0) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/numberformat.cpp new/PyICU-2.11/numberformat.cpp --- old/PyICU-2.10.2/numberformat.cpp 2022-10-02 00:21:36.000000000 +0200 +++ new/PyICU-2.11/numberformat.cpp 2023-04-05 01:44:04.000000000 +0200 @@ -1070,6 +1070,9 @@ static PyObject *t_precision_maxSignificantDigits(PyTypeObject *type, PyObject *arg); static PyObject *t_precision_minMaxSignificantDigits(PyTypeObject *type, PyObject *args); static PyObject *t_precision_increment(PyTypeObject *type, PyObject *arg); +#if U_ICU_VERSION_HEX >= VERSION_HEX(71, 0, 0) +static PyObject *t_precision_incrementExact(PyTypeObject *type, PyObject *args); +#endif static PyObject *t_precision_currency(PyTypeObject *type, PyObject *arg); #if U_ICU_VERSION_HEX >= VERSION_HEX(69, 0, 0) @@ -1088,6 +1091,9 @@ DECLARE_METHOD(t_precision, maxSignificantDigits, METH_O | METH_CLASS), DECLARE_METHOD(t_precision, minMaxSignificantDigits, METH_VARARGS | METH_CLASS), DECLARE_METHOD(t_precision, increment, METH_O | METH_CLASS), +#if U_ICU_VERSION_HEX >= VERSION_HEX(71, 0, 0) + DECLARE_METHOD(t_precision, incrementExact, METH_VARARGS | METH_CLASS), +#endif DECLARE_METHOD(t_precision, currency, METH_O | METH_CLASS), #if U_ICU_VERSION_HEX >= VERSION_HEX(69, 0, 0) DECLARE_METHOD(t_precision, trailingZeroDisplay, METH_O), @@ -4710,6 +4716,21 @@ return PyErr_SetArgsError(type, "increment", arg); } +#if U_ICU_VERSION_HEX >= VERSION_HEX(71, 0, 0) +static PyObject *t_precision_incrementExact(PyTypeObject *type, PyObject *args) +{ + PY_LONG_LONG man; + int mag; + + if (!parseArgs(args, "Li", &man, &mag)) + { + return wrap_IncrementPrecision(Precision::incrementExact(man, mag)); + } + + return PyErr_SetArgsError(type, "incrementExact", args); +} +#endif + static PyObject *t_precision_currency(PyTypeObject *type, PyObject *arg) { int n; @@ -5290,7 +5311,6 @@ static PyObject *t_localizednumberrangeformatter_formatDecimalRangeToValue( t_localizednumberrangeformatter *self, PyObject *args) { - UnicodeString u; char *sFirst, *sSecond; switch (PyTuple_Size(args)) { @@ -5302,8 +5322,6 @@ Formattable(sFirst), Formattable(sSecond), status)), return wrap_FormattedNumberRange(value)); - - return PyUnicode_FromUnicodeString(&u); } break; } @@ -5637,6 +5655,26 @@ #if U_ICU_VERSION_HEX >= VERSION_HEX(49, 0, 0) INSTALL_CONSTANTS_TYPE(UNumberFormatFields, m); + INSTALL_ENUM(UNumberFormatFields, "INTEGER", UNUM_INTEGER_FIELD); + INSTALL_ENUM(UNumberFormatFields, "FRACTION", UNUM_FRACTION_FIELD); + INSTALL_ENUM(UNumberFormatFields, "DECIMAL_SEPARATOR", UNUM_DECIMAL_SEPARATOR_FIELD); + INSTALL_ENUM(UNumberFormatFields, "EXPONENT_SYMBOL", UNUM_EXPONENT_SYMBOL_FIELD); + INSTALL_ENUM(UNumberFormatFields, "EXPONENT_SIGN", UNUM_EXPONENT_SIGN_FIELD); + INSTALL_ENUM(UNumberFormatFields, "EXPONENT", UNUM_EXPONENT_FIELD); + INSTALL_ENUM(UNumberFormatFields, "GROUPING_SEPARATOR", UNUM_GROUPING_SEPARATOR_FIELD); + INSTALL_ENUM(UNumberFormatFields, "CURRENCY", UNUM_CURRENCY_FIELD); + INSTALL_ENUM(UNumberFormatFields, "PERCENT", UNUM_PERCENT_FIELD); + INSTALL_ENUM(UNumberFormatFields, "PERMILL", UNUM_PERMILL_FIELD); + INSTALL_ENUM(UNumberFormatFields, "SIGN", UNUM_SIGN_FIELD); +#if U_ICU_VERSION_HEX >= VERSION_HEX(64, 0, 0) + INSTALL_ENUM(UNumberFormatFields, "MEASURE_UNIT", UNUM_MEASURE_UNIT_FIELD); + INSTALL_ENUM(UNumberFormatFields, "COMPACT", UNUM_COMPACT_FIELD); +#endif +#if U_ICU_VERSION_HEX >= VERSION_HEX(71, 0, 0) + INSTALL_ENUM(UNumberFormatFields, "APPROXIMATELY_SIGN", UNUM_APPROXIMATELY_SIGN_FIELD); +#endif + + // oops, we're stuck with the extra suffix for these INSTALL_ENUM(UNumberFormatFields, "INTEGER_FIELD", UNUM_INTEGER_FIELD); INSTALL_ENUM(UNumberFormatFields, "FRACTION_FIELD", UNUM_FRACTION_FIELD); INSTALL_ENUM(UNumberFormatFields, "DECIMAL_SEPARATOR_FIELD", UNUM_DECIMAL_SEPARATOR_FIELD); @@ -5648,11 +5686,11 @@ INSTALL_ENUM(UNumberFormatFields, "PERCENT_FIELD", UNUM_PERCENT_FIELD); INSTALL_ENUM(UNumberFormatFields, "PERMILL_FIELD", UNUM_PERMILL_FIELD); INSTALL_ENUM(UNumberFormatFields, "SIGN_FIELD", UNUM_SIGN_FIELD); -#endif #if U_ICU_VERSION_HEX >= VERSION_HEX(64, 0, 0) INSTALL_ENUM(UNumberFormatFields, "MEASURE_UNIT_FIELD", UNUM_MEASURE_UNIT_FIELD); INSTALL_ENUM(UNumberFormatFields, "COMPACT_FIELD", UNUM_COMPACT_FIELD); #endif +#endif // ICU >= 49 #if U_ICU_VERSION_HEX >= VERSION_HEX(51, 0, 0) INSTALL_CONSTANTS_TYPE(UNumberCompactStyle, m); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/py/PyICU.egg-info/PKG-INFO new/PyICU-2.11/py/PyICU.egg-info/PKG-INFO --- old/PyICU-2.10.2/py/PyICU.egg-info/PKG-INFO 2022-10-25 19:55:02.000000000 +0200 +++ new/PyICU-2.11/py/PyICU.egg-info/PKG-INFO 2023-04-15 21:46:31.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: PyICU -Version: 2.10.2 +Version: 2.11 Summary: Python extension wrapping the ICU C++ API Home-page: https://gitlab.pyicu.org/main/pyicu Author: Andi Vajda @@ -369,3 +369,5 @@ There are also a few [samples](https://gitlab.pyicu.org/main/pyicu/-/tree/main/samples) ported from ICU C/C++. + +Last but not least, this [cheat sheet](https://gist.github.com/dpk/8325992) has useful examples. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/setup.py new/PyICU-2.11/setup.py --- old/PyICU-2.10.2/setup.py 2022-10-25 06:31:36.000000000 +0200 +++ new/PyICU-2.11/setup.py 2023-04-15 21:29:36.000000000 +0200 @@ -8,8 +8,8 @@ from distutils.spawn import find_executable -VERSION = '2.10.2' -ICU_MAX_MAJOR_VERSION = '72' # max supported major version of ICU +VERSION = '2.11' +ICU_MAX_MAJOR_VERSION = '73' # max supported major version of ICU try: from subprocess import check_output as subprocess_check_output diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PyICU-2.10.2/test/test_Locale.py new/PyICU-2.11/test/test_Locale.py --- old/PyICU-2.10.2/test/test_Locale.py 2021-04-01 23:28:41.000000000 +0200 +++ new/PyICU-2.11/test/test_Locale.py 2023-04-14 20:45:50.000000000 +0200 @@ -37,6 +37,34 @@ self.assertEqual('fr_BE@collation=phonebook;currency=euro', str(l1)) self.assertEqual(l0, l1) + def testCompare(self): + + af = Locale('af') + mt = Locale('mt') + zu = Locale('zu') + + self.assertLess(af, zu) + self.assertFalse(mt < mt) + self.assertFalse(zu < af) + + self.assertLessEqual(af, zu) + self.assertLessEqual(mt, mt) + self.assertFalse(zu <= af) + + self.assertEqual(mt, mt) + self.assertFalse(af == zu) + + self.assertNotEqual(af, zu) + self.assertFalse(mt != mt) + + self.assertGreater(zu, af) + self.assertFalse(mt > mt) + self.assertFalse(af > zu) + + self.assertGreaterEqual(zu, af) + self.assertGreaterEqual(mt, mt) + self.assertFalse(af >= zu) + if __name__ == "__main__": main() ++++++ remove_six.patch ++++++ --- setup.py | 7 +++---- test/test_BytesTrie.py | 2 +- test/test_Charset.py | 4 ++-- test/test_Collator.py | 4 ++-- test/test_LayoutEngine.py | 2 +- test/test_Locale.py | 2 +- test/test_LocaleData.py | 14 +++++++------- test/test_LocaleMatcher.py | 2 +- test/test_PythonReplaceable.py | 2 +- test/test_Script.py | 8 ++++---- test/test_TimeZone.py | 2 +- test/test_Transliterator.py | 4 ++-- test/test_UCharsTrie.py | 2 +- 13 files changed, 27 insertions(+), 28 deletions(-) --- a/setup.py +++ b/setup.py @@ -1,4 +1,3 @@ - import os, sys try: @@ -195,7 +194,7 @@ else: except: if not _cflags: raise RuntimeError(''' -Please install pkg-config on your system or set the PYICU_CFLAGS environment +Please install pkg-config on your system or set the PYICU_CFLAGS environment variable to the flags required by the C++ compiler to find the header files for ICU, and possibly -std=c++11 if using ICU version >= 60 ''') @@ -234,7 +233,7 @@ else: Please install pkg-config on your system or set the PYICU_LFLAGS environment variable to the flags required by the linker to find the libraries for ICU ''') - + if 'PYICU_LIBRARIES' in os.environ: _libraries = os.environ['PYICU_LIBRARIES'].split(os.pathsep) @@ -283,4 +282,4 @@ setup(name="PyICU", libraries=_libraries)], package_dir={"": "py"}, packages=['icu'], - tests_require=['pytest', 'six']) + tests_require=['pytest']) --- a/test/test_BytesTrie.py +++ b/test/test_BytesTrie.py @@ -21,7 +21,7 @@ # DEALINGS IN THE SOFTWARE. # ==================================================================== -import sys, os, six +import sys, os from unittest import TestCase, main from icu import * --- a/test/test_Charset.py +++ b/test/test_Charset.py @@ -21,7 +21,7 @@ # ==================================================================== # -import sys, os, six +import sys, os from unittest import TestCase, main from icu import * @@ -59,7 +59,7 @@ class TestCharset(TestCase): def testUnicode(self): bytes = u'beaut\xe9 probable'.encode('iso-8859-1') - ustring = six.text_type(CharsetDetector(bytes).detect()) + ustring = str(CharsetDetector(bytes).detect()) self.assertTrue(ustring.encode('iso-8859-1') == bytes) --- a/test/test_Collator.py +++ b/test/test_Collator.py @@ -21,7 +21,7 @@ # ==================================================================== # -import sys, os, six +import sys, os from unittest import TestCase, main from icu import * @@ -44,7 +44,7 @@ class TestCollator(TestCase): collator = Collator.createInstance(Locale.getFrance()) input = open(self.filePath('noms.txt'), 'rb') - names = [six.text_type(n.strip(), 'utf-8') for n in input.readlines()] + names = [str(n.strip(), 'utf-8') for n in input.readlines()] input.close() ecole = names[0] --- a/test/test_LayoutEngine.py +++ b/test/test_LayoutEngine.py @@ -22,7 +22,7 @@ # ==================================================================== # -import sys, os, six +import sys, os from unittest import TestCase, main from icu import * --- a/test/test_Locale.py +++ b/test/test_Locale.py @@ -21,7 +21,7 @@ # DEALINGS IN THE SOFTWARE. # ==================================================================== -import sys, os, six +import sys, os from unittest import TestCase, main from icu import * --- a/test/test_LocaleData.py +++ b/test/test_LocaleData.py @@ -22,7 +22,7 @@ # # This is a python translation of ICU's LocaleDataTest.java -import sys, os, six +import sys, os from unittest import TestCase, main from icu import * @@ -110,8 +110,8 @@ class TestLocaleData(TestCase): break if existsInScript == False: print_output("ExemplarSet containment failed for locale : "+ locale) - print_output(locale + " exemplar " + repr(six.text_type(exemplarSets[0]))) - print_output(locale + " exemplar(case-folded) " + repr(six.text_type(exemplarSets[1]))) + print_output(locale + " exemplar " + repr(str(exemplarSets[0]))) + print_output(locale + " exemplar(case-folded) " + repr(str(exemplarSets[1]))) self.assertTrue(locale + " case-folded is a superset", exemplarSets[1].containsAll(exemplarSets[0])) if (exemplarSets[1] == exemplarSets[0]): ++equalCount @@ -156,10 +156,10 @@ class TestLocaleData(TestCase): if existsInScript == False and h == 0: print_output("ExemplarSet containment failed for locale,option,type : " \ + locale + "," + str(option) + "," + str(esType)) - print_output(locale + " exemplar(ES_STANDARD)" + repr(six.text_type(exemplarSets[0]))) - print_output(locale + " exemplar(ES_AUXILIARY)" + repr(six.text_type(exemplarSets[1]))) - print_output(locale + " exemplar(case-folded,ES_STANDARD)" + repr(six.text_type(exemplarSets[2]))) - print_output(locale + " exemplar(case-folded,ES_AUXILIARY)" + repr(six.text_type(exemplarSets[3]))) + print_output(locale + " exemplar(ES_STANDARD)" + repr(str(exemplarSets[0]))) + print_output(locale + " exemplar(ES_AUXILIARY)" + repr(str(exemplarSets[1]))) + print_output(locale + " exemplar(case-folded,ES_STANDARD)" + repr(str(exemplarSets[2]))) + print_output(locale + " exemplar(case-folded,ES_AUXILIARY)" + repr(str(exemplarSets[3]))) self.assertTrue(locale + " case-folded is a superset", exemplarSets[2].containsAll(exemplarSets[0])) self.assertTrue(locale + " case-folder is a superset", exemplarSets[3].containsAll(exemplarSets[1])) if (exemplarSets[2] == exemplarSets[0]): --- a/test/test_LocaleMatcher.py +++ b/test/test_LocaleMatcher.py @@ -21,7 +21,7 @@ # DEALINGS IN THE SOFTWARE. # ==================================================================== -import sys, os, six +import sys, os from unittest import TestCase, main, SkipTest from icu import * --- a/test/test_PythonReplaceable.py +++ b/test/test_PythonReplaceable.py @@ -21,7 +21,7 @@ # DEALINGS IN THE SOFTWARE. # ==================================================================== -import sys, os, six +import sys, os from unittest import TestCase, main from icu import * --- a/test/test_Script.py +++ b/test/test_Script.py @@ -21,7 +21,7 @@ # ==================================================================== # -import sys, os, six +import sys, os from unittest import TestCase, main from icu import * @@ -53,7 +53,7 @@ class TestScript(TestCase): # iterating codepoints not UChar names = [Script.getScript(cp).getShortName() - for cp in six.text_type(pairs)] + for cp in str(pairs)] if unicode_32bit: self.assertEqual(['Latn', 'Deva', 'Hani', 'Hani'], names) else: @@ -83,10 +83,10 @@ class TestScript(TestCase): self.assertEqual(str(u), char) elif is_unicode_32bit(): self.assertEqual(len(char), 1) - self.assertEqual(six.text_type(u), char) + self.assertEqual(str(u), char) else: self.assertEqual(len(char), 2) - self.assertEqual(six.text_type(u), char) + self.assertEqual(str(u), char) if __name__ == "__main__": main() --- a/test/test_TimeZone.py +++ b/test/test_TimeZone.py @@ -21,7 +21,7 @@ # ==================================================================== # -import sys, os, six, datetime +import sys, os, datetime from unittest import TestCase, main from icu import * --- a/test/test_Transliterator.py +++ b/test/test_Transliterator.py @@ -22,7 +22,7 @@ # ==================================================================== # -import sys, os, six +import sys, os from unittest import TestCase, main from icu import * @@ -50,7 +50,7 @@ class TestTransliterator(TestCase): string = UnicodeString("Shang4hai3 zi4lai2shui3 lai2 zi4 hai3 shang4") result = u'Sh\xe0ngh\u01cei z\xecl\xe1ishu\u01d0 l\xe1i z\xec h\u01cei sh\xe0ng' - self.assertTrue(trans.transliterate(six.text_type(string)) == result) + self.assertTrue(trans.transliterate(str(string)) == result) self.assertTrue(trans.transliterate(string) == result) self.assertTrue(string == result) --- a/test/test_UCharsTrie.py +++ b/test/test_UCharsTrie.py @@ -21,7 +21,7 @@ # DEALINGS IN THE SOFTWARE. # ==================================================================== -import sys, os, six +import sys, os from unittest import TestCase, main from icu import *