#14 Update to 0.35.1
Merged 2 months ago by amoralej. Opened 2 months ago by amoralej.
rpms/ amoralej/python-eventlet rawhide  into  rawhide

file modified
+1
@@ -32,3 +32,4 @@ 

  /v0.33.1.zip

  /eventlet-0.33.1.tar.gz

  /eventlet-0.33.3.tar.gz

+ /eventlet-0.35.1.tar.gz

file modified
+13 -17
@@ -13,18 +13,14 @@ 

  %endif

  

  Name:           python-%{srcname}

- Version:        0.33.3

- Release:        5%{?dist}

+ Version:        0.35.1

+ Release:        1%{?dist}

  Summary:        Highly concurrent networking library

  License:        MIT

  

  URL:            https://eventlet.net

  Source:         %pypi_source %{srcname}

  

- # Python 3.12 support

- # Upstream draft PR: https://github.com/eventlet/eventlet/pull/797

- Patch:          python3.12.patch

- 

  BuildArch:      noarch

  

  %description %{_description}
@@ -32,18 +28,11 @@ 

  %package -n python3-%{srcname}

  Summary:        %{summary}

  BuildRequires:  python3-devel

- %if %{with tests}

- BuildRequires:  python3-nose

- BuildRequires:  python3-pyOpenSSL

- %endif

  

  %description -n python3-%{srcname} %{_description}

  

  %package -n python3-%{srcname}-doc

  Summary:        Documentation for python3-%{srcname}

- BuildRequires:  make

- BuildRequires:  python3-sphinx

- BuildRequires:  python3-zmq

  

  %description -n python3-%{srcname}-doc

  %{summary}.
@@ -51,22 +40,26 @@ 

  %prep

  %autosetup -p1 -n %{srcname}-%{version}

  

+ sed -i '/ *pip install -e.*/d' tox.ini

+ 

  %generate_buildrequires

- %pyproject_buildrequires

+ %pyproject_buildrequires -t -e %{default_toxenv},docs

  

  %build

  %pyproject_wheel

- %make_build -C doc html

  

  %install

  %pyproject_install

  %pyproject_save_files %{srcname}

  

+ PYTHONPATH="%{buildroot}/%{python3_sitelib}"

+ %tox -e docs

+ 

  %check

  %if %{with tests}

  # Disable setting up dns (we have no /etc/resolv.conf in mock

  export EVENTLET_NO_GREENDNS=yes

- nosetests-%{python3_version} -v -e greendns_test -e socket_test -e test_patcher_existing_locks_locked -e test_017_ssl_zeroreturnerror -e test_018b_http_10_keepalive_framing -e test_fork_after_monkey_patch

+ %tox -e %{default_toxenv} -- -- -k 'not test_clear and not test_noraise_dns_tcp and not test_raise_dns_tcp and not test_dns_methods_are_green and not test_fork_after_monkey_patch'

  %else

  %pyproject_check_import -t

  %endif
@@ -76,9 +69,12 @@ 

  

  %files -n python3-%{srcname}-doc

  %license LICENSE

- %doc doc/_build/html

+ %doc doc/build/html

  

  %changelog

+ * Fri Apr 5 2024 Alfredo Moralejo <amoralej@redhat.com > - 0.35.1-1

+ - Update to 0.35.1

+ 

  * Fri Jan 26 2024 Fedora Release Engineering <releng@fedoraproject.org> - 0.33.3-5

  - Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild

  

file removed
-407
@@ -1,407 +0,0 @@ 

- diff --git a/eventlet/green/http/client.py b/eventlet/green/http/client.py

- index e4bd2ad..125c0bf 100644

- --- a/eventlet/green/http/client.py

- +++ b/eventlet/green/http/client.py

- @@ -1447,6 +1447,18 @@ try:

-  except ImportError:

-      pass

-  else:

- +    def _create_https_context(http_version):

- +        # Function also used by urllib.request to be able to set the check_hostname

- +        # attribute on a context object.

- +        context = ssl._create_default_https_context()

- +        # send ALPN extension to indicate HTTP/1.1 protocol

- +        if http_version == 11:

- +            context.set_alpn_protocols(['http/1.1'])

- +        # enable PHA for TLS 1.3 connections if available

- +        if context.post_handshake_auth is not None:

- +            context.post_handshake_auth = True

- +        return context

- +

-      class HTTPSConnection(HTTPConnection):

-          "This class allows communication via SSL."

-  

- @@ -1463,13 +1475,9 @@ else:

-              self.key_file = key_file

-              self.cert_file = cert_file

-              if context is None:

- -                context = ssl._create_default_https_context()

- -            will_verify = context.verify_mode != ssl.CERT_NONE

- -            if check_hostname is None:

- -                check_hostname = context.check_hostname

- -            if check_hostname and not will_verify:

- -                raise ValueError("check_hostname needs a SSL context with "

- -                                 "either CERT_OPTIONAL or CERT_REQUIRED")

- +                context = _create_https_context(self._http_vsn)

- +            if check_hostname is not None:

- +                context.check_hostname = check_hostname

-              if key_file or cert_file:

-                  context.load_cert_chain(cert_file, key_file)

-              self._context = context

- diff --git a/eventlet/green/ssl.py b/eventlet/green/ssl.py

- index b42ddaa..74b6c46 100644

- --- a/eventlet/green/ssl.py

- +++ b/eventlet/green/ssl.py

- @@ -22,21 +22,17 @@ __patched__ = [

-      'create_default_context', '_create_default_https_context']

-  

-  _original_sslsocket = __ssl.SSLSocket

- -_original_wrap_socket = __ssl.wrap_socket

-  _original_sslcontext = getattr(__ssl, 'SSLContext', None)

-  _is_under_py_3_7 = sys.version_info < (3, 7)

-  

-  

-  @contextmanager

-  def _original_ssl_context(*args, **kwargs):

- -    tmp_sslcontext = _original_wrap_socket.__globals__.get('SSLContext', None)

-      tmp_sslsocket = _original_sslsocket._create.__globals__.get('SSLSocket', None)

-      _original_sslsocket._create.__globals__['SSLSocket'] = _original_sslsocket

- -    _original_wrap_socket.__globals__['SSLContext'] = _original_sslcontext

-      try:

-          yield

-      finally:

- -        _original_wrap_socket.__globals__['SSLContext'] = tmp_sslcontext

-          _original_sslsocket._create.__globals__['SSLSocket'] = tmp_sslsocket

-  

-  

- @@ -76,16 +72,21 @@ class GreenSSLSocket(_original_sslsocket):

-                          session=kw.get('session'),

-                      )

-                  else:

- -                    ret = _original_wrap_socket(

- +                    context = _original_sslcontext(protocol=ssl_version)

- +                    context.options |= cert_reqs

- +                    if certfile or keyfile:

- +                        context.load_cert_chain(

- +                            certfile=certfile,

- +                            keyfile=keyfile,

- +                        )

- +                    if ca_certs:

- +                        context.load_verify_locations(ca_certs)

- +                    if ciphers := kw.get('ciphers'):

- +                        context.set_ciphers(ciphers)

- +                    ret = context.wrap_socket(

-                          sock=sock.fd,

- -                        keyfile=keyfile,

- -                        certfile=certfile,

-                          server_side=server_side,

- -                        cert_reqs=cert_reqs,

- -                        ssl_version=ssl_version,

- -                        ca_certs=ca_certs,

-                          do_handshake_on_connect=False,

- -                        ciphers=kw.get('ciphers'),

-                      )

-              ret.keyfile = keyfile

-              ret.certfile = certfile

- diff --git a/eventlet/green/thread.py b/eventlet/green/thread.py

- index e26f6b3..7bcb563 100644

- --- a/eventlet/green/thread.py

- +++ b/eventlet/green/thread.py

- @@ -113,3 +113,6 @@ if hasattr(__thread, 'stack_size'):

-              # this thread will suffer

-  

-  from eventlet.corolocal import local as _local

- +

- +if hasattr(__thread, 'daemon_threads_allowed'):

- +    daemon_threads_allowed = __thread.daemon_threads_allowed

- diff --git a/tests/dagpool_test.py b/tests/dagpool_test.py

- index fdc23e7..dcd7dd8 100644

- --- a/tests/dagpool_test.py

- +++ b/tests/dagpool_test.py

- @@ -191,14 +191,14 @@ def test_init():

-          with check_no_suspend():

-              results = pool.waitall()

-          # with no spawn() or post(), waitall() returns preload data

- -        assert_equals(results, dict(a=1, b=2, c=3))

- +        assert_equal(results, dict(a=1, b=2, c=3))

-  

-          # preload sequence of pairs

-          pool = DAGPool([("d", 4), ("e", 5), ("f", 6)])

-          # this must not hang

-          with check_no_suspend():

-              results = pool.waitall()

- -        assert_equals(results, dict(d=4, e=5, f=6))

- +        assert_equal(results, dict(d=4, e=5, f=6))

-  

-  

-  def test_wait_each_empty():

- @@ -216,10 +216,10 @@ def test_wait_each_preload():

-          with check_no_suspend():

-              # wait_each() may deliver in arbitrary order; collect into a dict

-              # for comparison

- -            assert_equals(dict(pool.wait_each("abc")), dict(a=1, b=2, c=3))

- +            assert_equal(dict(pool.wait_each("abc")), dict(a=1, b=2, c=3))

-  

-              # while we're at it, test wait() for preloaded keys

- -            assert_equals(pool.wait("bc"), dict(b=2, c=3))

- +            assert_equal(pool.wait("bc"), dict(b=2, c=3))

-  

-  

-  def post_each(pool, capture):

- @@ -257,7 +257,7 @@ def test_wait_posted():

-      eventlet.spawn(post_each, pool, capture)

-      gotten = pool.wait("bcdefg")

-      capture.add("got all")

- -    assert_equals(gotten,

- +    assert_equal(gotten,

-                    dict(b=2, c=3,

-                         d="dval", e="eval",

-                         f="fval", g="gval"))

- @@ -285,7 +285,7 @@ def test_spawn_collision_spawn():

-      pool = DAGPool()

-      pool.spawn("a", (), lambda key, results: "aval")

-      # hasn't yet even started

- -    assert_equals(pool.get("a"), None)

- +    assert_equal(pool.get("a"), None)

-      with assert_raises(Collision):

-          # Attempting to spawn again with same key should collide even if the

-          # first spawned greenthread hasn't yet had a chance to run.

- @@ -293,7 +293,7 @@ def test_spawn_collision_spawn():

-      # now let the spawned eventlet run

-      eventlet.sleep(0)

-      # should have finished

- -    assert_equals(pool.get("a"), "aval")

- +    assert_equal(pool.get("a"), "aval")

-      with assert_raises(Collision):

-          # Attempting to spawn with same key collides even when the greenthread

-          # has completed.

- @@ -324,60 +324,60 @@ def test_spawn_multiple():

-      capture.step()

-      # but none of them has yet produced a result

-      for k in "defgh":

- -        assert_equals(pool.get(k), None)

- -    assert_equals(set(pool.keys()), set("abc"))

- -    assert_equals(dict(pool.items()), dict(a=1, b=2, c=3))

- -    assert_equals(pool.running(), 5)

- -    assert_equals(set(pool.running_keys()), set("defgh"))

- -    assert_equals(pool.waiting(), 1)

- -    assert_equals(pool.waiting_for(), dict(h=set("defg")))

- -    assert_equals(pool.waiting_for("d"), set())

- -    assert_equals(pool.waiting_for("c"), set())

- +        assert_equal(pool.get(k), None)

- +    assert_equal(set(pool.keys()), set("abc"))

- +    assert_equal(dict(pool.items()), dict(a=1, b=2, c=3))

- +    assert_equal(pool.running(), 5)

- +    assert_equal(set(pool.running_keys()), set("defgh"))

- +    assert_equal(pool.waiting(), 1)

- +    assert_equal(pool.waiting_for(), dict(h=set("defg")))

- +    assert_equal(pool.waiting_for("d"), set())

- +    assert_equal(pool.waiting_for("c"), set())

-      with assert_raises(KeyError):

-          pool.waiting_for("j")

- -    assert_equals(pool.waiting_for("h"), set("defg"))

- +    assert_equal(pool.waiting_for("h"), set("defg"))

-  

-      # let one of the upstream greenthreads complete

-      events["f"].send("fval")

-      spin()

-      capture.step()

- -    assert_equals(pool.get("f"), "fval")

- -    assert_equals(set(pool.keys()), set("abcf"))

- -    assert_equals(dict(pool.items()), dict(a=1, b=2, c=3, f="fval"))

- -    assert_equals(pool.running(), 4)

- -    assert_equals(set(pool.running_keys()), set("degh"))

- -    assert_equals(pool.waiting(), 1)

- -    assert_equals(pool.waiting_for("h"), set("deg"))

- +    assert_equal(pool.get("f"), "fval")

- +    assert_equal(set(pool.keys()), set("abcf"))

- +    assert_equal(dict(pool.items()), dict(a=1, b=2, c=3, f="fval"))

- +    assert_equal(pool.running(), 4)

- +    assert_equal(set(pool.running_keys()), set("degh"))

- +    assert_equal(pool.waiting(), 1)

- +    assert_equal(pool.waiting_for("h"), set("deg"))

-  

-      # now two others

-      events["e"].send("eval")

-      events["g"].send("gval")

-      spin()

-      capture.step()

- -    assert_equals(pool.get("e"), "eval")

- -    assert_equals(pool.get("g"), "gval")

- -    assert_equals(set(pool.keys()), set("abcefg"))

- -    assert_equals(dict(pool.items()),

- +    assert_equal(pool.get("e"), "eval")

- +    assert_equal(pool.get("g"), "gval")

- +    assert_equal(set(pool.keys()), set("abcefg"))

- +    assert_equal(dict(pool.items()),

-                    dict(a=1, b=2, c=3, e="eval", f="fval", g="gval"))

- -    assert_equals(pool.running(), 2)

- -    assert_equals(set(pool.running_keys()), set("dh"))

- -    assert_equals(pool.waiting(), 1)

- -    assert_equals(pool.waiting_for("h"), set("d"))

- +    assert_equal(pool.running(), 2)

- +    assert_equal(set(pool.running_keys()), set("dh"))

- +    assert_equal(pool.waiting(), 1)

- +    assert_equal(pool.waiting_for("h"), set("d"))

-  

-      # last one

-      events["d"].send("dval")

-      # make sure both pool greenthreads get a chance to run

-      spin()

-      capture.step()

- -    assert_equals(pool.get("d"), "dval")

- -    assert_equals(set(pool.keys()), set("abcdefgh"))

- -    assert_equals(dict(pool.items()),

- +    assert_equal(pool.get("d"), "dval")

- +    assert_equal(set(pool.keys()), set("abcdefgh"))

- +    assert_equal(dict(pool.items()),

-                    dict(a=1, b=2, c=3,

-                         d="dval", e="eval", f="fval", g="gval", h="hval"))

- -    assert_equals(pool.running(), 0)

- +    assert_equal(pool.running(), 0)

-      assert_false(pool.running_keys())

- -    assert_equals(pool.waiting(), 0)

- -    assert_equals(pool.waiting_for("h"), set())

- +    assert_equal(pool.waiting(), 0)

- +    assert_equal(pool.waiting_for("h"), set())

-  

-      capture.validate([

-          ["h got b", "h got c"],

- @@ -432,13 +432,13 @@ def test_spawn_many():

-      spin()

-      # verify that e completed (also that post(key) within greenthread

-      # overrides implicit post of return value, which would be None)

- -    assert_equals(pool.get("e"), "e")

- +    assert_equal(pool.get("e"), "e")

-  

-      # With the dependency graph shown above, it is not guaranteed whether b or

-      # c will complete first. Handle either case.

-      sequence = capture.sequence[:]

-      sequence[1:3] = [set([sequence[1].pop(), sequence[2].pop()])]

- -    assert_equals(sequence,

- +    assert_equal(sequence,

-                    [set(["a done"]),

-                     set(["b done", "c done"]),

-                     set(["d done"]),

- @@ -466,7 +466,7 @@ def test_wait_each_all():

-      for pos in range(len(keys)):

-          # next value from wait_each()

-          k, v = next(each)

- -        assert_equals(k, keys[pos])

- +        assert_equal(k, keys[pos])

-          # advance every pool greenlet as far as it can go

-          spin()

-          # everything from keys[:pos+1] should have a value by now

- @@ -494,7 +494,7 @@ def test_kill():

-      pool.kill("a")

-      # didn't run

-      spin()

- -    assert_equals(pool.get("a"), None)

- +    assert_equal(pool.get("a"), None)

-      # killing it forgets about it

-      with assert_raises(KeyError):

-          pool.kill("a")

- @@ -505,7 +505,7 @@ def test_kill():

-      with assert_raises(KeyError):

-          pool.kill("a")

-      # verify it ran to completion

- -    assert_equals(pool.get("a"), 2)

- +    assert_equal(pool.get("a"), 2)

-  

-  

-  def test_post_collision_preload():

- @@ -533,7 +533,7 @@ def test_post_collision_spawn():

-      pool.kill("a")

-      # now we can post

-      pool.post("a", 3)

- -    assert_equals(pool.get("a"), 3)

- +    assert_equal(pool.get("a"), 3)

-  

-      pool = DAGPool()

-      pool.spawn("a", (), lambda key, result: 4)

- @@ -553,10 +553,10 @@ def test_post_replace():

-      pool = DAGPool()

-      pool.post("a", 1)

-      pool.post("a", 2, replace=True)

- -    assert_equals(pool.get("a"), 2)

- -    assert_equals(dict(pool.wait_each("a")), dict(a=2))

- -    assert_equals(pool.wait("a"), dict(a=2))

- -    assert_equals(pool["a"], 2)

- +    assert_equal(pool.get("a"), 2)

- +    assert_equal(dict(pool.wait_each("a")), dict(a=2))

- +    assert_equal(pool.wait("a"), dict(a=2))

- +    assert_equal(pool["a"], 2)

-  

-  

-  def waitfor(capture, pool, key):

- @@ -598,10 +598,10 @@ def test_waitall_exc():

-      try:

-          pool.waitall()

-      except PropagateError as err:

- -        assert_equals(err.key, "a")

- +        assert_equal(err.key, "a")

-          assert isinstance(err.exc, BogusError), \

-              "exc attribute is {0}, not BogusError".format(err.exc)

- -        assert_equals(str(err.exc), "bogus")

- +        assert_equal(str(err.exc), "bogus")

-          msg = str(err)

-          assert_in("PropagateError(a)", msg)

-          assert_in("BogusError", msg)

- @@ -616,14 +616,14 @@ def test_propagate_exc():

-      try:

-          pool["c"]

-      except PropagateError as errc:

- -        assert_equals(errc.key, "c")

- +        assert_equal(errc.key, "c")

-          errb = errc.exc

- -        assert_equals(errb.key, "b")

- +        assert_equal(errb.key, "b")

-          erra = errb.exc

- -        assert_equals(erra.key, "a")

- +        assert_equal(erra.key, "a")

-          assert isinstance(erra.exc, BogusError), \

-              "exc attribute is {0}, not BogusError".format(erra.exc)

- -        assert_equals(str(erra.exc), "bogus")

- +        assert_equal(str(erra.exc), "bogus")

-          msg = str(errc)

-          assert_in("PropagateError(a)", msg)

-          assert_in("PropagateError(b)", msg)

- @@ -681,13 +681,13 @@ def test_post_get_exc():

-              pass

-  

-      # wait_each_success() filters

- -    assert_equals(dict(pool.wait_each_success()), dict(a=bogua))

- -    assert_equals(dict(pool.wait_each_success("ab")), dict(a=bogua))

- -    assert_equals(dict(pool.wait_each_success("a")), dict(a=bogua))

- -    assert_equals(dict(pool.wait_each_success("b")), {})

- +    assert_equal(dict(pool.wait_each_success()), dict(a=bogua))

- +    assert_equal(dict(pool.wait_each_success("ab")), dict(a=bogua))

- +    assert_equal(dict(pool.wait_each_success("a")), dict(a=bogua))

- +    assert_equal(dict(pool.wait_each_success("b")), {})

-  

-      # wait_each_exception() filters the other way

- -    assert_equals(dict(pool.wait_each_exception()), dict(b=bogub))

- -    assert_equals(dict(pool.wait_each_exception("ab")), dict(b=bogub))

- -    assert_equals(dict(pool.wait_each_exception("a")), {})

- -    assert_equals(dict(pool.wait_each_exception("b")), dict(b=bogub))

- +    assert_equal(dict(pool.wait_each_exception()), dict(b=bogub))

- +    assert_equal(dict(pool.wait_each_exception("ab")), dict(b=bogub))

- +    assert_equal(dict(pool.wait_each_exception("a")), {})

- +    assert_equal(dict(pool.wait_each_exception("b")), dict(b=bogub))

- diff --git a/tests/tpool_test.py b/tests/tpool_test.py

- index 1a730dc..ffd947b 100644

- --- a/tests/tpool_test.py

- +++ b/tests/tpool_test.py

- @@ -315,11 +315,11 @@ class TpoolLongTests(tests.LimitedTestCase):

-  

-      @tests.skip_with_pyevent

-      def test_a_buncha_stuff(self):

- -        assert_ = self.assert_

- +        assertTrue = self.assertTrue

-  

-          class Dummy(object):

-              def foo(self, when, token=None):

- -                assert_(token is not None)

- +                assertTrue(token is not None)

-                  time.sleep(random.random() / 200.0)

-                  return token

-  

- @@ -359,7 +359,7 @@ class TpoolLongTests(tests.LimitedTestCase):

-          first_created = middle_objs - initial_objs

-          gc.collect()

-          second_created = len(gc.get_objects()) - middle_objs

- -        self.assert_(second_created - first_created < 10,

- +        self.assertTrue(second_created - first_created < 10,

-                       "first loop: %s, second loop: %s" % (first_created,

-                                                            second_created))

-          tpool.killall()

file modified
+1 -1
@@ -1,1 +1,1 @@ 

- SHA512 (eventlet-0.33.3.tar.gz) = 667a42f9cecc9b228ad84dc1dc95ac377b56495174e474acf1cced4f1ab1f3257d19df26b0fb81452269261d92016e6540b8cf71f4f174967145648831f61152

+ SHA512 (eventlet-0.35.1.tar.gz) = e7f20514a35a070663c86197e4e5ffb3a0fbf81f386c750d3c5b13c2837df29aa09a0d934cdcb4062a310c20f2f2e4cb33c14777b387887f1114b410f21e4d24

It includes patches to support 3.12

rebased onto 819f688

2 months ago

rebased onto 29d1349

2 months ago

rebased onto ad2b036

2 months ago

Seems 0.35.2 is out now? ;)

Also, is this likely to cause any problems for dependent packages? Nothing really stands out as being a problem from a quick glance tho...

I'm sending 0.35.1 because that's the version used by openstack right now and there is a known issue related to redis and ssl in 0.33.3. Latest is 0.36.1, i can send an update after this one.

ok, sounds good.

BTW, would you care to take over this package? I packaged it up a long time ago for some deps, happy to hand it to someone who wants to give it more care, and I know openstack uses it.

ok, sounds good.

BTW, would you care to take over this package? I packaged it up a long time ago for some deps, happy to hand it to someone who wants to give it more care, and I know openstack uses it.

ok, i can take it. Are you willing to handover the main admin or just add me as co-maintainer? Actually, openstackers are now core maintainers of the library upstream and, although there were some plan to move out of eventlet, i doubt it will happen soon.

Sure, let me hand off main admin, and if you want to keep me as a co-maintainer or whatever I can try and keep an eye out, otherwise thats fine. ;)

Pull-Request has been merged by amoralej

2 months ago