eea / sparql-client

Python API to query a SPARQL endpoint
http://pypi.python.org/pypi/sparql-client
33 stars 21 forks source link

Python 3.9+ is not supported #39

Open ynerant opened 2 years ago

ynerant commented 2 years ago

The function base64.encodestring is deprecated since Python 3.1 and was removed in Python 3.9. It is used here: https://github.com/eea/sparql-client/blob/master/sparql.py#L50

You may use use base64.encodebytes() instead.

cm3 commented 2 years ago

Temporarily, I edited sparql.py under the path given by pip show sparql-client. Replacing encodestring to encodebytes solved the error on Python 3.9. Just for your information. (However, that is used in BASIC authentication https://github.com/eea/sparql-client/blob/master/sparql.py#L421 and I've not tried the code with restricted websites.)

rjalexa commented 1 year ago

Tried @cm3 suggestion but get:

class NameDict(collections.MutableMapping):
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'collections' has no attribute 'MutableMapping'

Python 3.11 sparql-client 3.8

cm3 commented 1 year ago

@rjalexa I didn't checked but I found a solution: after import collections, put

if sys.version_info.major == 3 and sys.version_info.minor >= 10:
    from collections.abc import MutableMapping
else:
    from collections import MutableMapping

Reference: https://stackoverflow.com/questions/70943244/attributeerror-module-collections-has-no-attribute-mutablemapping