New submission from Eli Bendersky:
As part of original plan and since issue #18264 has been resolved, it's time to
dust off some old patches I have for the socket.* module. The socket.AF_* and
socket.SOCK_* constants are good candidates for IntEnum conversion.
I'm attaching an initial patch that handles socket.AF_* (as a proof-of-concept;
socket.SOCK_* should get identical treatment); it only touches Lib/socket.py
and all regrtest tests pass without changes. Result:
>>> import socket
>>> socket.AF_INET
<AddressFamily.AF_INET: 2>
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.family
<AddressFamily.AF_INET: 2>
>>> '{}'.format(s.family)
'AddressFamily.AF_INET'
The code in the patch is pretty well commented, and I also want to point out a
couple of decision points that came up:
1. The underlying socketmodule.c has no idea of IntEnums, and neither IMHO it
should. These constants are essentially one-way, going from Python into C. They
are only exposed back through read-only accessors (e.g. s.family above), at
which point the Python code can wrap them back into the enum. The alternative,
making socketmodule.c use enums is probably way more complicated than really
necessary.
2. As a followup to (1), the constants are actually wrapped into an IntEnum at
the Python level and exposed back to the user. My hacking of globals() there
may be a bit rough - suggestions for a better way are welcome.
3. A bunch of AF_* constants exported by Python built on my x64 Ubuntu are not
documented in socket.rst; I'm still wrapping them all in enums; I basically
went over all PyModule_AddIntMacro(m, AF_*) in PyInit__socket.
PTAL
----------
assignee: eli.bendersky
components: Library (Lib)
files: socket-intenum-af.1.patch
keywords: patch
messages: 195018
nosy: barry, eli.bendersky, ethan.furman, gvanrossum, ncoghlan, pitrou
priority: normal
severity: normal
stage: patch review
status: open
title: Switch suitable constants in the socket module to IntEnum
type: enhancement
versions: Python 3.4
Added file: http://bugs.python.org/file31261/socket-intenum-af.1.patch
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue18720>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com