ppannuto / python-saleae

Python library to control a Saleae Logic Analyzer
Apache License 2.0
125 stars 54 forks source link

Python 2.7 support #5

Closed LeonardMH closed 8 years ago

LeonardMH commented 9 years ago

There is no mention of this in the README so I'm guessing it's unsupported but I'm unable to get this package working in Python 2.7.10 (which I unfortunately have to use).

I installed through pip and initially had an import error where it was failing to import enum so then I did a pip install enum and tried again but the script is now failing with AttributError: 'module' object has no attribute 'unique' in reference to the enum module.

ppannuto commented 9 years ago

Yeah, I didn't make any effort towards backwards compatibility when I wrote this. At the same time there isn't a ton of code. I'm happy to take a pull request that adds py2k support, but it's not something I have any interest in doing. Sorry.

On Sun, Sep 27, 2015 at 20:38 Michael Leonard notifications@github.com wrote:

There is no mention of this in the README so I'm guessing it's unsupported but I'm unable to get this package working in Python 2.7.10 (which I unfortunately have to use).

I installed through pip and initially had an import error where it was failing to import enum so then I did a pip install enum and tried again but the script is now failing with AttributError: 'module' object has no attribute 'unique' in reference to the enum module.

— Reply to this email directly or view it on GitHub https://github.com/ppannuto/python-saleae/issues/5.

LeonardMH commented 9 years ago

Understandable, I wouldn't either if I didn't have to. With that said, it doesn't look like too difficult of a change to make. Would you be opposed to a pull request that converts the enums to dictionaries? A few of the other changes I came across are:

  1. A try-except block for the bytes() function, in Python 2.7 this function doesn't have the format argument and I believe it defaults to UTF-8 anyways.
  2. In the demo function, do an initial check of the Python version, if it is less than 3 set input = raw_input. In Python 2.7 the input function did something very different but the raw_input function behaves essentially the same.
ppannuto commented 9 years ago

On Tue, Sep 29, 2015 at 12:06 AM Michael Leonard notifications@github.com wrote:

Understandable, I wouldn't either if I didn't have to. With that said, it doesn't look like too difficult of a change to make. Would you be opposed to a pull request that converts the enums to dictionaries?

Don't feel strongly about this, but anything wrong with just adding a dependency on the enum34 package? Less work for you. http://stackoverflow.com/questions/36932/how-can-i-represent-an-enum-in-python

A few of the other changes I came across are:

  1. A try-except block for the bytes() function, in Python 2.7 this function doesn't have the format argument and I believe it defaults to UTF-8 anyways.

Sounds good

  1. In the demo function, do an initial check of the Python version, if it is less than 3 set input = raw_input. In Python 2.7 the input function did something very different but the raw_input function behaves essentially the same.

I've done that before w/out issue. Sounds good.

— Reply to this email directly or view it on GitHub https://github.com/ppannuto/python-saleae/issues/5#issuecomment-143938198 .

LeonardMH commented 9 years ago

Good find on enum34, I had installed enum which would explain why it isn't working at all. I'll check that out.

LeonardMH commented 8 years ago

ConnectionRefusedError is still undefined in Python 2.7.

Not exactly a showstopper, but it can be misleading to newbies.

Edit: It's not a huge issue right now, but is the kind of thing that could cause headaches later. Anytime you have a try-except block that even attempts to catch a ConnectionRefusedError this will raise a NameError instead and will mask whatever actually caused the ConnectionRefusedError to be raised.

I.e (in 2.7):

try:
    raise TypeError
except ConnectionRefusedError:
    raise ImportError
except TypeError:
    print("Caught it")
finally:
    print("Stop raising exceptions")

Gives:

Stop raising exceptions
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
NameError: name 'ConnectionRefusedError' is not defined