DinoTools / python-overpy

Python Wrapper to access the Overpass API
https://python-overpy.readthedocs.io/
MIT License
243 stars 58 forks source link

Replace sentinel value with an enumerator. #102

Open noenandre opened 2 years ago

noenandre commented 2 years ago
Issue type
Summary

Replace XML_PARSER_DOM and XML_PARSER_SAX with an enumerator. If this is not a perfect use case for a enum class, I don't what is.

phibos commented 2 years ago

Looks like this would break backward compatibility. Are there any advantages besides the improved code completion?

noenandre commented 2 years ago

Better type hints than just integer was really what I was trying to achieved here. Of course that can be achieved with a literal type (Literal[1, 2]), but a enum makes a better connection between the sentinel value and their function, and gives better auto code completion, as you said. I went specifically with enum.IntEnum in an attempt to not brake anything. XMLParser.DOM==1 and XMLParser.SAX==2 will evaluate to true, so you can still pass a literal 1 or 2 too the methods, as opposed to a enum.Enum class. I can of course reintroduce the constants XML_PARSER_DOM and XML_PARSER_SAX as both as 1 and 2 or as XMLParser.DOM and XMLParser.SAX respectably.