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 *

Reply via email to