bryanyang0528 / ksql-python

A python wrapper for the KSQL REST API.
MIT License
159 stars 67 forks source link

Python 3.10 Incompatibility #102

Open mjallday opened 2 years ago

mjallday commented 2 years ago
Traceback (most recent call last):
  File "/app/consumer.py", line 17, in <module>
    import ksql
  File "/usr/local/lib/python3.10/site-packages/ksql/__init__.py", line 6, in <module>
    from ksql.client import KSQLAPI  # noqa
  File "/usr/local/lib/python3.10/site-packages/ksql/client.py", line 4, in <module>
    from ksql.api import SimplifiedAPI
  File "/usr/local/lib/python3.10/site-packages/ksql/api.py", line 12, in <module>
    from hyper import HTTPConnection
  File "/usr/local/lib/python3.10/site-packages/hyper/__init__.py", line 11, in <module>
    from .common.connection import HTTPConnection
  File "/usr/local/lib/python3.10/site-packages/hyper/common/connection.py", line 9, in <module>
    from ..http11.connection import HTTP11Connection
  File "/usr/local/lib/python3.10/site-packages/hyper/http11/connection.py", line 13, in <module>
    from collections import Iterable, Mapping
ImportError: cannot import name 'Iterable' from 'collections' (/usr/local/lib/python3.10/collections/__init__.py)

Looks like this dependency is using a deprecated API

DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working

"An ImportError will be raised as collections.Iterable will be in collections.abc.Iterable"

this is coming from https://github.com/python-hyper/hyper which is deprecated so I guess it's time to switch to https://www.python-httpx.org/ or similar.

udaysankarg commented 2 years ago

I am also facing this issue. Is there any fix for this.

pravinkusin commented 2 years ago

Is there any fix for this ??

emrekuecuek commented 2 years ago

I've been diving into this package's source code for a few days now, the error I'm receiving is given below (by omitting most of the error log on purpose):

ImportError: cannot import name 'Iterable' from 'collections' (/usr/lib/python3.10/collections/__init__.py)

Anyway, after doing some investigation, I realized that hyper package is no longer maintained (hyper). It is used for making requests over HTTP protocol. My suggestion would be changing it to another alternative such as HTTPX.

In api.py file, there are 2 functions which uses HTTPConnection from hyper package. query2 and inserts_stream.

Can we do something about this? Regards, Emre

dgkncelik commented 2 years ago

Hi fellas, i just created a pull request related to that issue, i hope it helps. #107 I will be creating pypi package in couple of days

dgkncelik commented 2 years ago

@mjallday i've fix the error and create an new pypi package https://pypi.org/project/pykSQL/0.11.0/

KenCox94 commented 2 years ago

107 should fix this as mentioned by @dgkncelik

@bryanyang0528 hasn't been active but has been merging pull request. He is currently working on some CI stuff so be patient and we should see a merge for this issue soon.

sauljabin commented 1 year ago

Hello folks same issue, is this project still active?, is there any other alternative?

sauljabin commented 1 year ago

If someone reading this issue needs a python client check this out : https://github.com/sauljabin/kayak/blob/main/kayak/ksql/ksql_service.py

AndreaPrati98 commented 1 year ago

are there easy straightforward solutions to easily use ksql with python?

Please, fix this compatibility issue :(

sauljabin commented 1 year ago

are there easy straightforward solutions to easily use ksql with python?

Please, fix this compatibility issue :(

Check this out https://github.com/sauljabin/kayak/blob/main/kayak/ksql/ksql_service.py

enowy commented 1 year ago

Hi. Reason is hyper, hyperframe is not compatible with 3.10.

`The Iterable abstract class was removed from collections in Python 3.10. See the deprecation note in the 3.9 collections docs. In the section Removed of the 3.10 docs, the item

Remove deprecated aliases to Collections Abstract Base Classes from the collections module. (Contributed by Victor Stinner in bpo-37324.) is what results in your error.

You can use Iterable from collections.abc instead, or use Python 3.9 if the problem is in a dependency that can't be updated.`

But hyper and hyperframe is archived on Jan 13, 2021.

We need to change code HTTPConnection on api.py.

lorenh commented 9 months ago

We are also facing this problem when running on anything newer than Python 3.9. This module appears to have stopped having PRs merged. Any suggestions for a similar module that does support versions of Python newer than 3.9?

sheinbergon commented 1 month ago

Hi @lorenh @enowy @sauljabin @AndreaPrati98

I've forked the code, modernized it (replaced hyper with HTTPX, bumped all dependencies, updated to Python 3.9 as the minimal version, and fixed all the tests to behave with latest KSQL DB versions (0.29.0). Could you check if it's still present in my version?

https://github.com/sheinbergon/ksql-python-ng

I'll be making a PYPI release soon enough. In the meanwhile, you can test it by running

pipx install git+https://github.com/sheinbergon/ksql-python-ng.git --include-deps

or

pip install git+https://github.com/sheinbergon/ksql-python-ng.git
AndreaPrati98 commented 1 month ago

Hi,

nice job!

I am not able to check since my environment now is completely change and it would take me a while to test it. Hope you will be able to double check anyway.

Regards, Andrea Prati

Da: Idan Sheinberg @.> Data: giovedì, 25 luglio 2024 alle ore 14:21 A: bryanyang0528/ksql-python @.> Cc: Andrea Prati @.>, Mention @.> Oggetto: Re: [bryanyang0528/ksql-python] Python 3.10 Incompatibility (Issue #102)

Hi @lorenhhttps://github.com/lorenh @enowyhttps://github.com/enowy @sauljabinhttps://github.com/sauljabin @AndreaPrati98https://github.com/AndreaPrati98

I've forked the code, modernized it (replaced hyper with HTTPX, bumped all dependencies, updated to Python 3.9 as the minimal version, and fixed all the tests to behave with latest KSQL DB versions (0.29.0). Could you check if it's still present in my version?

I'll be making a PYPI release soon enough. In the meanwhile, you can test it by running

pipx install git+https://github.com/sheinbergon/ksql-python-ng.git --include-deps

or

pip install git+https://github.com/sheinbergon/ksql-python-ng.git

— Reply to this email directly, view it on GitHubhttps://github.com/bryanyang0528/ksql-python/issues/102#issuecomment-2250191503, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AO2O5U7ELXTMAO3EJNUJSL3ZODUTZAVCNFSM6AAAAABLON62EKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENJQGE4TCNJQGM. You are receiving this because you were mentioned.Message ID: @.***>