Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-greenlet for openSUSE:Factory 
checked in at 2022-09-15 22:57:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-greenlet (Old)
 and      /work/SRC/openSUSE:Factory/.python-greenlet.new.2083 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-greenlet"

Thu Sep 15 22:57:30 2022 rev:39 rq:1003047 version:1.1.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-greenlet/python-greenlet.changes  
2021-10-20 20:24:11.245374487 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-greenlet.new.2083/python-greenlet.changes    
    2022-09-15 22:57:32.320935590 +0200
@@ -1,0 +2,6 @@
+Mon Sep 12 20:13:22 UTC 2022 - Dirk M??ller <dmuel...@suse.com>
+
+- update to 1.1.3:
+  * Add support for Python 3.11. 
+
+-------------------------------------------------------------------

Old:
----
  greenlet-1.1.2.tar.gz

New:
----
  greenlet-1.1.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-greenlet.spec ++++++
--- /var/tmp/diff_new_pack.9EN8Fp/_old  2022-09-15 22:57:32.836937046 +0200
+++ /var/tmp/diff_new_pack.9EN8Fp/_new  2022-09-15 22:57:32.840937058 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-greenlet
 #
-# Copyright (c) 2021 SUSE LLC
+# Copyright (c) 2022 SUSE LLC
 # Copyright (c) 2010 B1 Systems GmbH, Vohburg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
@@ -19,7 +19,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-greenlet
-Version:        1.1.2
+Version:        1.1.3
 Release:        0
 Summary:        Lightweight in-process concurrent programming
 License:        MIT

++++++ greenlet-1.1.2.tar.gz -> greenlet-1.1.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/.github/workflows/tests.yml 
new/greenlet-1.1.3/.github/workflows/tests.yml
--- old/greenlet-1.1.2/.github/workflows/tests.yml      2021-09-29 
12:35:47.000000000 +0200
+++ new/greenlet-1.1.3/.github/workflows/tests.yml      2022-08-25 
12:22:46.000000000 +0200
@@ -24,7 +24,7 @@
     runs-on: ${{ matrix.os }}
     strategy:
       matrix:
-        python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10.0-rc.1]
+        python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9, "3.10", "3.11.0-rc.1"]
         os: [ubuntu-latest, macos-latest]
     steps:
     - uses: actions/checkout@v2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/.gitignore 
new/greenlet-1.1.3/.gitignore
--- old/greenlet-1.1.2/.gitignore       1970-01-01 01:00:00.000000000 +0100
+++ new/greenlet-1.1.3/.gitignore       2022-08-25 12:22:46.000000000 +0200
@@ -0,0 +1,13 @@
+*.so
+*.pyd
+*.pyc
+*.pyo
+build/
+dist/
+.tox/
+wheelhouse/
+greenlet.egg-info/
+/docs/_build
+__pycache__/
+/.ropeproject/
+/MANIFEST
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/CHANGES.rst 
new/greenlet-1.1.3/CHANGES.rst
--- old/greenlet-1.1.2/CHANGES.rst      2021-09-29 12:35:47.000000000 +0200
+++ new/greenlet-1.1.3/CHANGES.rst      2022-08-25 12:22:46.000000000 +0200
@@ -2,6 +2,12 @@
  Changes
 =========
 
+1.1.3 (2022-08-25)
+==================
+
+- Add support for Python 3.11. Please note that Windows binary wheels
+  are not available at this time.
+
 1.1.2 (2021-09-29)
 ==================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/PKG-INFO new/greenlet-1.1.3/PKG-INFO
--- old/greenlet-1.1.2/PKG-INFO 2021-09-29 12:35:47.783776500 +0200
+++ new/greenlet-1.1.3/PKG-INFO 2022-08-25 12:22:47.529386800 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: greenlet
-Version: 1.1.2
+Version: 1.1.3
 Summary: Lightweight in-process concurrent programming
 Home-page: https://greenlet.readthedocs.io/
 Author: Alexey Borzenkov
@@ -11,68 +11,6 @@
 Project-URL: Bug Tracker, https://github.com/python-greenlet/greenlet/issues
 Project-URL: Source Code, https://github.com/python-greenlet/greenlet/
 Project-URL: Documentation, https://greenlet.readthedocs.io/
-Description: .. This file is included into docs/history.rst
-        
-        .. image:: 
https://github.com/python-greenlet/greenlet/workflows/tests/badge.svg
-           :target: https://github.com/python-greenlet/greenlet/actions
-        
-        Greenlets are lightweight coroutines for in-process concurrent
-        programming.
-        
-        The "greenlet" package is a spin-off of `Stackless`_, a version of
-        CPython that supports micro-threads called "tasklets". Tasklets run
-        pseudo-concurrently (typically in a single or a few OS-level threads)
-        and are synchronized with data exchanges on "channels".
-        
-        A "greenlet", on the other hand, is a still more primitive notion of
-        micro-thread with no implicit scheduling; coroutines, in other words.
-        This is useful when you want to control exactly when your code runs.
-        You can build custom scheduled micro-threads on top of greenlet;
-        however, it seems that greenlets are useful on their own as a way to
-        make advanced control flow structures. For example, we can recreate
-        generators; the difference with Python's own generators is that our
-        generators can call nested functions and the nested functions can
-        yield values too. (Additionally, you don't need a "yield" keyword. See
-        the example in `test_generator.py
-        
<https://github.com/python-greenlet/greenlet/blob/adca19bf1f287b3395896a8f41f3f4fd1797fdc7/src/greenlet/tests/test_generator.py#L1>`_).
-        
-        Greenlets are provided as a C extension module for the regular 
unmodified
-        interpreter.
-        
-        .. _`Stackless`: http://www.stackless.com
-        
-        
-        Who is using Greenlet?
-        ======================
-        
-        There are several libraries that use Greenlet as a more flexible
-        alternative to Python's built in coroutine support:
-        
-         - `Concurrence`_
-         - `Eventlet`_
-         - `Gevent`_
-        
-        .. _Concurrence: http://opensource.hyves.org/concurrence/
-        .. _Eventlet: http://eventlet.net/
-        .. _Gevent: http://www.gevent.org/
-        
-        Getting Greenlet
-        ================
-        
-        The easiest way to get Greenlet is to install it with pip::
-        
-          pip install greenlet
-        
-        
-        Source code archives and binary distributions are vailable on the
-        python package index at https://pypi.org/project/greenlet
-        
-        The source code repository is hosted on github:
-        https://github.com/python-greenlet/greenlet
-        
-        Documentation is available on readthedocs.org:
-        https://greenlet.readthedocs.io
-        
 Keywords: greenlet coroutine concurrency threads cooperative
 Platform: any
 Classifier: Development Status :: 5 - Production/Stable
@@ -90,9 +28,75 @@
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
 Classifier: Operating System :: OS Independent
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*
 Description-Content-Type: text/x-rst
 Provides-Extra: docs
 Provides-Extra: test
+License-File: LICENSE
+License-File: LICENSE.PSF
+License-File: AUTHORS
+
+.. This file is included into docs/history.rst
+
+.. image:: 
https://github.com/python-greenlet/greenlet/workflows/tests/badge.svg
+   :target: https://github.com/python-greenlet/greenlet/actions
+
+Greenlets are lightweight coroutines for in-process concurrent
+programming.
+
+The "greenlet" package is a spin-off of `Stackless`_, a version of
+CPython that supports micro-threads called "tasklets". Tasklets run
+pseudo-concurrently (typically in a single or a few OS-level threads)
+and are synchronized with data exchanges on "channels".
+
+A "greenlet", on the other hand, is a still more primitive notion of
+micro-thread with no implicit scheduling; coroutines, in other words.
+This is useful when you want to control exactly when your code runs.
+You can build custom scheduled micro-threads on top of greenlet;
+however, it seems that greenlets are useful on their own as a way to
+make advanced control flow structures. For example, we can recreate
+generators; the difference with Python's own generators is that our
+generators can call nested functions and the nested functions can
+yield values too. (Additionally, you don't need a "yield" keyword. See
+the example in `test_generator.py
+<https://github.com/python-greenlet/greenlet/blob/adca19bf1f287b3395896a8f41f3f4fd1797fdc7/src/greenlet/tests/test_generator.py#L1>`_).
+
+Greenlets are provided as a C extension module for the regular unmodified
+interpreter.
+
+.. _`Stackless`: http://www.stackless.com
+
+
+Who is using Greenlet?
+======================
+
+There are several libraries that use Greenlet as a more flexible
+alternative to Python's built in coroutine support:
+
+ - `Concurrence`_
+ - `Eventlet`_
+ - `Gevent`_
+
+.. _Concurrence: http://opensource.hyves.org/concurrence/
+.. _Eventlet: http://eventlet.net/
+.. _Gevent: http://www.gevent.org/
+
+Getting Greenlet
+================
+
+The easiest way to get Greenlet is to install it with pip::
+
+  pip install greenlet
+
+
+Source code archives and binary distributions are vailable on the
+python package index at https://pypi.org/project/greenlet
+
+The source code repository is hosted on github:
+https://github.com/python-greenlet/greenlet
+
+Documentation is available on readthedocs.org:
+https://greenlet.readthedocs.io
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/appveyor.yml 
new/greenlet-1.1.3/appveyor.yml
--- old/greenlet-1.1.2/appveyor.yml     2021-09-29 12:35:47.000000000 +0200
+++ new/greenlet-1.1.3/appveyor.yml     2022-08-25 12:22:46.000000000 +0200
@@ -35,7 +35,7 @@
   matrix:
     # http://www.appveyor.com/docs/installed-software#python
     - PYTHON: "C:\\Python310-x64"
-      PYTHON_VERSION: "3.10.0rc2"
+      PYTHON_VERSION: "3.10.4"
       PYTHON_ARCH: "64"
       PYTHON_EXE: python
       APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/make-manylinux 
new/greenlet-1.1.3/make-manylinux
--- old/greenlet-1.1.2/make-manylinux   2021-09-29 12:35:47.000000000 +0200
+++ new/greenlet-1.1.3/make-manylinux   2022-08-25 12:22:46.000000000 +0200
@@ -27,7 +27,7 @@
     mkdir -p /greenlet/wheelhouse
     OPATH="$PATH"
     which auditwheel
-    for variant in `ls -d /opt/python/cp{27,35,36,37,38,39,310}*`; do
+    for variant in `ls -d /opt/python/cp{27,35,36,37,38,39,310,311}*`; do
         export PATH="$variant/bin:$OPATH"
         echo "Building $variant $(python --version)"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/setup.py new/greenlet-1.1.3/setup.py
--- old/greenlet-1.1.2/setup.py 2021-09-29 12:35:47.000000000 +0200
+++ new/greenlet-1.1.3/setup.py 2022-08-25 12:22:46.000000000 +0200
@@ -145,6 +145,7 @@
         'Programming Language :: Python :: 3.8',
         'Programming Language :: Python :: 3.9',
         'Programming Language :: Python :: 3.10',
+        'Programming Language :: Python :: 3.11',
         'Operating System :: OS Independent',
         'Topic :: Software Development :: Libraries :: Python Modules'
     ],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/src/greenlet/__init__.py 
new/greenlet-1.1.3/src/greenlet/__init__.py
--- old/greenlet-1.1.2/src/greenlet/__init__.py 2021-09-29 12:35:47.000000000 
+0200
+++ new/greenlet-1.1.3/src/greenlet/__init__.py 2022-08-25 12:22:46.000000000 
+0200
@@ -25,7 +25,7 @@
 ###
 # Metadata
 ###
-__version__ = '1.1.2'
+__version__ = '1.1.3'
 from ._greenlet import _C_API # pylint:disable=no-name-in-module
 
 ###
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/src/greenlet/greenlet.c 
new/greenlet-1.1.3/src/greenlet/greenlet.c
--- old/greenlet-1.1.2/src/greenlet/greenlet.c  2021-09-29 12:35:47.000000000 
+0200
+++ new/greenlet-1.1.3/src/greenlet/greenlet.c  2022-08-25 12:22:46.000000000 
+0200
@@ -170,9 +170,11 @@
 {
 #if GREENLET_PY37
     g->exc_info = NULL;
-    g->exc_state.exc_type = NULL;
     g->exc_state.exc_value = NULL;
+#if !GREENLET_PY311
+    g->exc_state.exc_type = NULL;
     g->exc_state.exc_traceback = NULL;
+#endif
     g->exc_state.previous_item = NULL;
 #else
     g->exc_type = NULL;
@@ -525,8 +527,13 @@
     { /* save state */
         PyGreenlet* current = ts_current;
         PyThreadState* tstate = PyThreadState_GET();
+#if GREENLET_PY311
+        current->recursion_depth = (tstate->recursion_limit
+                                    - tstate->recursion_remaining);
+#else
         current->recursion_depth = tstate->recursion_depth;
         current->top_frame = tstate->frame;
+#endif
 #if GREENLET_PY37
         current->context = tstate->context;
 #endif
@@ -551,6 +558,15 @@
          */
         current->cframe = tstate->cframe;
         ts__g_switchstack_use_tracing = tstate->cframe->use_tracing;
+#if GREENLET_PY311
+        current->current_frame = tstate->cframe->current_frame;
+        current->datastack_chunk = tstate->datastack_chunk;
+        current->datastack_top = tstate->datastack_top;
+        current->datastack_limit = tstate->datastack_limit;
+        PyFrameObject *frame = PyThreadState_GetFrame(tstate);
+        Py_XDECREF(frame); /* PyThreadState_GetFrame gives us a new reference. 
*/
+        current->top_frame = frame;
+#endif
 #endif
     }
 
@@ -574,9 +590,6 @@
         PyGreenlet* target = ts_target;
         PyGreenlet* origin = ts_current;
         PyThreadState* tstate = PyThreadState_GET();
-        tstate->recursion_depth = target->recursion_depth;
-        tstate->frame = target->top_frame;
-        target->top_frame = NULL;
 
 #if GREENLET_PY37
         tstate->context = target->context;
@@ -607,7 +620,18 @@
         */
         tstate->cframe->use_tracing = ts__g_switchstack_use_tracing;
 #endif
-
+#if GREENLET_PY311
+        tstate->recursion_remaining = (tstate->recursion_limit
+                                       - target->recursion_depth);
+        tstate->cframe->current_frame = target->current_frame;
+        tstate->datastack_chunk = target->datastack_chunk;
+        tstate->datastack_top = target->datastack_top;
+        tstate->datastack_limit = target->datastack_limit;
+#else
+        tstate->recursion_depth = target->recursion_depth;
+        tstate->frame = target->top_frame;
+#endif
+        target->top_frame = NULL;
         assert(ts_origin == NULL);
         Py_INCREF(target);
         ts_current = target;
@@ -810,7 +834,7 @@
       We want to defer copying the state info until we're sure
       we need it and are in a stable place to do so.
     */
-    CFrame trace_info;
+    _PyCFrame trace_info;
 #endif
     /* save exception in case getattr clears it */
     PyErr_Fetch(&exc, &val, &tb);
@@ -875,7 +899,12 @@
     }
     self->top_frame = NULL;
     green_clear_exc(self);
+#if GREENLET_PY311
+    self->recursion_depth = (PyThreadState_GET()->recursion_limit
+                             - PyThreadState_GET()->recursion_remaining);
+#else
     self->recursion_depth = PyThreadState_GET()->recursion_depth;
+#endif
 
     /* restore arguments in case they are clobbered */
     ts_target = self;
@@ -1006,13 +1035,13 @@
           it uses the ``root_cframe`` just to have something to put there.
           However, once the greenlet is actually switched to for the first
           time, ``g_initialstub`` (which doesn't actually "return" while the
-          greenlet is running) stores a new CFrame on its local stack, and
+          greenlet is running) stores a new _PyCFrame on its local stack, and
           copies the appropriate values from the currently running CFrame;
-          this is then made the CFrame for the newly-minted greenlet.
+          this is then made the _PyCFrame for the newly-minted greenlet.
           ``g_initialstub`` then proceeds to call ``glet.run()``, which
-          results in ``PyEval_...`` adding the CFrame to the list. Switches
+          results in ``PyEval_...`` adding the _PyCFrame to the list. Switches
           continue as normal. Finally, when the greenlet finishes, the call to
-          ``glet.run()`` returns and the CFrame is taken out of the linked
+          ``glet.run()`` returns and the _PyCFrame is taken out of the linked
           list and the stack value is now unused and free to expire.
         */
         ((PyGreenlet*)o)->cframe = &PyThreadState_GET()->root_cframe;
@@ -1121,9 +1150,11 @@
     Py_VISIT(self->context);
 #endif
 #if GREENLET_PY37
-    Py_VISIT(self->exc_state.exc_type);
     Py_VISIT(self->exc_state.exc_value);
+#if !GREENLET_PY311
+    Py_VISIT(self->exc_state.exc_type);
     Py_VISIT(self->exc_state.exc_traceback);
+#endif
 #else
     Py_VISIT(self->exc_type);
     Py_VISIT(self->exc_value);
@@ -1159,9 +1190,11 @@
     Py_CLEAR(self->context);
 #endif
 #if GREENLET_PY37
-    Py_CLEAR(self->exc_state.exc_type);
     Py_CLEAR(self->exc_state.exc_value);
+#if !GREENLET_PY311
+    Py_CLEAR(self->exc_state.exc_type);
     Py_CLEAR(self->exc_state.exc_traceback);
+#endif
 #else
     Py_CLEAR(self->exc_type);
     Py_CLEAR(self->exc_value);
@@ -1253,9 +1286,11 @@
     Py_CLEAR(self->context);
 #endif
 #if GREENLET_PY37
-    Py_CLEAR(self->exc_state.exc_type);
     Py_CLEAR(self->exc_state.exc_value);
+#if !GREENLET_PY311
+    Py_CLEAR(self->exc_state.exc_type);
     Py_CLEAR(self->exc_state.exc_traceback);
+#endif
 #else
     Py_CLEAR(self->exc_type);
     Py_CLEAR(self->exc_value);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/src/greenlet/greenlet.h 
new/greenlet-1.1.3/src/greenlet/greenlet.h
--- old/greenlet-1.1.2/src/greenlet/greenlet.h  2021-09-29 12:35:47.000000000 
+0200
+++ new/greenlet-1.1.3/src/greenlet/greenlet.h  2022-08-25 12:22:46.000000000 
+0200
@@ -14,6 +14,15 @@
 /* This is deprecated and undocumented. It does not change. */
 #define GREENLET_VERSION "1.0.0"
 
+#if PY_VERSION_HEX >= 0x30B00A6
+#  define GREENLET_PY311 1
+   /* _PyInterpreterFrame moved to the internal C API in Python 3.11 */
+#  include <internal/pycore_frame.h>
+#else
+#  define GREENLET_PY311 0
+#  define _PyCFrame CFrame
+#endif
+
 typedef struct _greenlet {
     PyObject_HEAD
     char* stack_start;
@@ -25,6 +34,12 @@
     PyObject* run_info;
     struct _frame* top_frame;
     int recursion_depth;
+#if GREENLET_PY311
+    _PyInterpreterFrame *current_frame;
+    _PyStackChunk *datastack_chunk;
+    PyObject **datastack_top;
+    PyObject **datastack_limit;
+#endif
     PyObject* weakreflist;
 #if PY_VERSION_HEX >= 0x030700A3
     _PyErr_StackItem* exc_info;
@@ -39,7 +54,7 @@
     PyObject* context;
 #endif
 #if PY_VERSION_HEX >= 0x30A00B1
-    CFrame* cframe;
+    _PyCFrame* cframe;
 #endif
 } PyGreenlet;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/src/greenlet.egg-info/PKG-INFO 
new/greenlet-1.1.3/src/greenlet.egg-info/PKG-INFO
--- old/greenlet-1.1.2/src/greenlet.egg-info/PKG-INFO   2021-09-29 
12:35:47.000000000 +0200
+++ new/greenlet-1.1.3/src/greenlet.egg-info/PKG-INFO   2022-08-25 
12:22:47.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: greenlet
-Version: 1.1.2
+Version: 1.1.3
 Summary: Lightweight in-process concurrent programming
 Home-page: https://greenlet.readthedocs.io/
 Author: Alexey Borzenkov
@@ -11,68 +11,6 @@
 Project-URL: Bug Tracker, https://github.com/python-greenlet/greenlet/issues
 Project-URL: Source Code, https://github.com/python-greenlet/greenlet/
 Project-URL: Documentation, https://greenlet.readthedocs.io/
-Description: .. This file is included into docs/history.rst
-        
-        .. image:: 
https://github.com/python-greenlet/greenlet/workflows/tests/badge.svg
-           :target: https://github.com/python-greenlet/greenlet/actions
-        
-        Greenlets are lightweight coroutines for in-process concurrent
-        programming.
-        
-        The "greenlet" package is a spin-off of `Stackless`_, a version of
-        CPython that supports micro-threads called "tasklets". Tasklets run
-        pseudo-concurrently (typically in a single or a few OS-level threads)
-        and are synchronized with data exchanges on "channels".
-        
-        A "greenlet", on the other hand, is a still more primitive notion of
-        micro-thread with no implicit scheduling; coroutines, in other words.
-        This is useful when you want to control exactly when your code runs.
-        You can build custom scheduled micro-threads on top of greenlet;
-        however, it seems that greenlets are useful on their own as a way to
-        make advanced control flow structures. For example, we can recreate
-        generators; the difference with Python's own generators is that our
-        generators can call nested functions and the nested functions can
-        yield values too. (Additionally, you don't need a "yield" keyword. See
-        the example in `test_generator.py
-        
<https://github.com/python-greenlet/greenlet/blob/adca19bf1f287b3395896a8f41f3f4fd1797fdc7/src/greenlet/tests/test_generator.py#L1>`_).
-        
-        Greenlets are provided as a C extension module for the regular 
unmodified
-        interpreter.
-        
-        .. _`Stackless`: http://www.stackless.com
-        
-        
-        Who is using Greenlet?
-        ======================
-        
-        There are several libraries that use Greenlet as a more flexible
-        alternative to Python's built in coroutine support:
-        
-         - `Concurrence`_
-         - `Eventlet`_
-         - `Gevent`_
-        
-        .. _Concurrence: http://opensource.hyves.org/concurrence/
-        .. _Eventlet: http://eventlet.net/
-        .. _Gevent: http://www.gevent.org/
-        
-        Getting Greenlet
-        ================
-        
-        The easiest way to get Greenlet is to install it with pip::
-        
-          pip install greenlet
-        
-        
-        Source code archives and binary distributions are vailable on the
-        python package index at https://pypi.org/project/greenlet
-        
-        The source code repository is hosted on github:
-        https://github.com/python-greenlet/greenlet
-        
-        Documentation is available on readthedocs.org:
-        https://greenlet.readthedocs.io
-        
 Keywords: greenlet coroutine concurrency threads cooperative
 Platform: any
 Classifier: Development Status :: 5 - Production/Stable
@@ -90,9 +28,75 @@
 Classifier: Programming Language :: Python :: 3.8
 Classifier: Programming Language :: Python :: 3.9
 Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
 Classifier: Operating System :: OS Independent
 Classifier: Topic :: Software Development :: Libraries :: Python Modules
 Requires-Python: >=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*
 Description-Content-Type: text/x-rst
 Provides-Extra: docs
 Provides-Extra: test
+License-File: LICENSE
+License-File: LICENSE.PSF
+License-File: AUTHORS
+
+.. This file is included into docs/history.rst
+
+.. image:: 
https://github.com/python-greenlet/greenlet/workflows/tests/badge.svg
+   :target: https://github.com/python-greenlet/greenlet/actions
+
+Greenlets are lightweight coroutines for in-process concurrent
+programming.
+
+The "greenlet" package is a spin-off of `Stackless`_, a version of
+CPython that supports micro-threads called "tasklets". Tasklets run
+pseudo-concurrently (typically in a single or a few OS-level threads)
+and are synchronized with data exchanges on "channels".
+
+A "greenlet", on the other hand, is a still more primitive notion of
+micro-thread with no implicit scheduling; coroutines, in other words.
+This is useful when you want to control exactly when your code runs.
+You can build custom scheduled micro-threads on top of greenlet;
+however, it seems that greenlets are useful on their own as a way to
+make advanced control flow structures. For example, we can recreate
+generators; the difference with Python's own generators is that our
+generators can call nested functions and the nested functions can
+yield values too. (Additionally, you don't need a "yield" keyword. See
+the example in `test_generator.py
+<https://github.com/python-greenlet/greenlet/blob/adca19bf1f287b3395896a8f41f3f4fd1797fdc7/src/greenlet/tests/test_generator.py#L1>`_).
+
+Greenlets are provided as a C extension module for the regular unmodified
+interpreter.
+
+.. _`Stackless`: http://www.stackless.com
+
+
+Who is using Greenlet?
+======================
+
+There are several libraries that use Greenlet as a more flexible
+alternative to Python's built in coroutine support:
+
+ - `Concurrence`_
+ - `Eventlet`_
+ - `Gevent`_
+
+.. _Concurrence: http://opensource.hyves.org/concurrence/
+.. _Eventlet: http://eventlet.net/
+.. _Gevent: http://www.gevent.org/
+
+Getting Greenlet
+================
+
+The easiest way to get Greenlet is to install it with pip::
+
+  pip install greenlet
+
+
+Source code archives and binary distributions are vailable on the
+python package index at https://pypi.org/project/greenlet
+
+The source code repository is hosted on github:
+https://github.com/python-greenlet/greenlet
+
+Documentation is available on readthedocs.org:
+https://greenlet.readthedocs.io
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/src/greenlet.egg-info/SOURCES.txt 
new/greenlet-1.1.3/src/greenlet.egg-info/SOURCES.txt
--- old/greenlet-1.1.2/src/greenlet.egg-info/SOURCES.txt        2021-09-29 
12:35:47.000000000 +0200
+++ new/greenlet-1.1.3/src/greenlet.egg-info/SOURCES.txt        2022-08-25 
12:22:47.000000000 +0200
@@ -1,4 +1,5 @@
 .clang-format
+.gitignore
 .readthedocs.yml
 AUTHORS
 CHANGES.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/greenlet-1.1.2/tox.ini new/greenlet-1.1.3/tox.ini
--- old/greenlet-1.1.2/tox.ini  2021-09-29 12:35:47.000000000 +0200
+++ new/greenlet-1.1.3/tox.ini  2022-08-25 12:22:46.000000000 +0200
@@ -1,6 +1,6 @@
 [tox]
 envlist =
-    py27,py35,py36,py37,py38,py39,py310,docs
+    py27,py35,py36,py37,py38,py39,py310,py311,docs
 
 [testenv]
 commands =

Reply via email to