beanstalkc icon indicating copy to clipboard operation
beanstalkc copied to clipboard

Python 3 Compatibility

Open seveas opened this issue 10 years ago • 23 comments

These three patches make beanstalkc compatible with python 2.4-3.4. Possibly even 2.3, but I don't have that installed anywhere to test.

seveas avatar Feb 07 '15 19:02 seveas

There is a warning in the docs about sys.exc_info() which is about assigning the traceback object to a variable:

Warning: Assigning the traceback return value to a local variable in a function that is handling an exception will cause a circular reference. This will prevent anything referenced by a local variable in the same function or by the traceback from being garbage collected. Since most functions don’t need access to the traceback, the best solution is to use something like exctype, value = sys.exc_info()[:2] to extract only the exception type and value. If you do need the traceback, make sure to delete it after use (best done with a try ... finally statement) or to call exc_info() in a function that does not itself handle an exception.

which does indeed appear to happen with _:

>>> try:
...   raise Exception()
... except:
...   _, a, _ = sys.exc_info()
...   print(_)
...
<traceback object at 0x1073eedd0>

I think compatibility with 2.4 should be dropped by using the as exc syntax.

svisser avatar Feb 07 '15 21:02 svisser

Ah, thanks for that. I'll push -f a fixed version in a bit. And no, I won't drop 2.4 support in patches I submit, as I need it :smile:

seveas avatar Feb 07 '15 21:02 seveas

:+1:

arturhoo avatar Mar 18 '15 12:03 arturhoo

:shipit:

EDIT: Emoticons, how do they work?

CtrlC-Root avatar Mar 30 '15 18:03 CtrlC-Root

Thanks for your work on this, @seveas. The continued support for Python 2.4 is much appreciated, I know from a few beanstalkc users who rely on Python 2.4; so also thanks for that on their behalf. I cherry-picked your exception handling fix, so that we have at least this part settled.

As for the other parts introducing Py3 compatibility, there's this design issue I mentioned in #13 with 8-bit transparency in combination with cross-Python 2/3 support. Your "PY3" version switch nicely manages to keep 8-bit transparency working properly on Py2, but doesn't provide similar functionality on Py3. How to do that nicely on Py3 is mainly a question of design. Since this issue seems to be little known, I'll write it up in a separate ticket. I'll leave your pull request pending, for the time being, as it's quite conceivable to implement whatever 8-bit transparency design we come of for Py3 on top of it.

earl avatar May 10 '15 22:05 earl

@earl When will you merge this pr?

bcho avatar Aug 12 '15 04:08 bcho

Can this be rebased/merged?

Happy to help in any form

erikbern avatar Aug 28 '15 19:08 erikbern

Rebased and updated to include the suggestion I made on #60.

seveas avatar Oct 03 '15 05:10 seveas

What's going on here – can this be merged? Let me know if there's anything I can do. I'm tempted to fork this repo for now since this is holding us back from migrating our stack to Python 3

erikbern avatar Oct 29 '15 14:10 erikbern

@erikbern I think you can fork & rebase this patch in your sub stream, install it via editable mode.

bcho avatar Oct 30 '15 01:10 bcho

Yes of course – would just be nice not to have to rely on our own custom verision

erikbern avatar Oct 30 '15 02:10 erikbern

I've tested this with Python 3.5 and it works well, thanks.

Can we merge this?

Currently my requirements.txt uses:

-e git+https://github.com/seveas/beanstalkc.git@python3-compatibility#egg=beanstalkc

HarryR avatar May 01 '16 17:05 HarryR

@earl Any update on when this might be merged?

ejlangev avatar May 16 '16 19:05 ejlangev

For what it is worth, an other project facing a similar issue, redis-py, chose to go accept either bytes or str as input, and returns bytes (whereas #65 goes all the way and accepts only bytes as input).

By the way, it may be worth it to look at how they implement Python2/3 compatibility.

I think it is fine to do the encoding/decoding automagically, as long as the user is able to bypass it if she chooses to do so (here by setting encoding=None).

I've added some inline comments, but good job, take my :+1:

Rogdham avatar May 27 '16 19:05 Rogdham

Hello @seveas, could you please bump the version number in your branch?

Also if you have some time to review my last comment, it would be appreciated :-)

Rogdham avatar Jun 12 '16 15:06 Rogdham

:+1:

alup avatar Jul 08 '16 11:07 alup

Would be nice if this can be merged in

edwardmp avatar Oct 01 '16 00:10 edwardmp

Is there any timeline on when me might be able to expect python3 support to be merged?

devinmatte avatar Jun 07 '17 19:06 devinmatte

I'm happy with this being merged... while I'm not actively using it, I have used this specific branch & revision on both 2.7 and 3.4 and 3.5 and it seems to work fine.

HarryR avatar Jun 08 '17 08:06 HarryR

Paging @seveas :wave:: could you please take a few minutes to review my comments? :angel:

I know this issue is starting to be old and all, but it would be appreciated :yellow_heart:

Rogdham avatar Jun 08 '17 17:06 Rogdham

Any update here? Python 3 support is really needed.

rwarren avatar Oct 03 '17 19:10 rwarren

@rwarren I solved it by switching to: https://pypi.python.org/pypi/beanstalkc3.

svisser avatar Oct 03 '17 19:10 svisser

@svisser Perfect... thanks for the PyPi link!

rwarren avatar Oct 03 '17 19:10 rwarren