Ethan Furman
a02cb474f9
bpo-38659: [Enum] add _simple_enum decorator (GH-25497)
...
add:
* `_simple_enum` decorator to transform a normal class into an enum
* `_test_simple_enum` function to compare
* `_old_convert_` to enable checking `_convert_` generated enums
`_simple_enum` takes a normal class and converts it into an enum:
@simple_enum(Enum)
class Color:
RED = 1
GREEN = 2
BLUE = 3
`_old_convert_` works much like` _convert_` does, using the original logic:
# in a test file
import socket, enum
CheckedAddressFamily = enum._old_convert_(
enum.IntEnum, 'AddressFamily', 'socket',
lambda C: C.isupper() and C.startswith('AF_'),
source=_socket,
)
`_test_simple_enum` takes a traditional enum and a simple enum and
compares the two:
# in the REPL or the same module as Color
class CheckedColor(Enum):
RED = 1
GREEN = 2
BLUE = 3
_test_simple_enum(CheckedColor, Color)
_test_simple_enum(CheckedAddressFamily, socket.AddressFamily)
Any important differences will raise a TypeError
2021-04-21 10:20:44 -07:00
..
2021-04-17 10:07:19 +02:00
2020-12-25 17:03:37 +02:00
2020-10-07 16:43:44 -07:00
2021-04-16 14:33:10 +02:00
2021-03-23 01:40:31 +01:00
2021-04-19 07:27:10 +02:00
2021-04-05 12:30:12 +09:00
2021-04-07 01:02:07 +01:00
2021-04-07 01:02:07 +01:00
2021-04-06 11:18:41 +09:00
2021-04-10 22:56:28 +02:00
2020-11-10 01:50:45 +03:00
2021-04-02 08:57:05 +09:00
2020-08-13 22:38:30 -04:00
2019-05-02 22:11:04 +02:00
2019-09-10 09:14:11 -07:00
2020-12-15 17:12:02 +01:00
2020-12-15 16:08:16 +01:00
2020-11-10 13:21:52 +01:00
2021-04-04 09:01:23 +09:00
2021-04-17 10:07:19 +02:00
2019-11-21 17:24:58 +00:00
2020-06-30 15:46:06 +02:00
2021-03-10 00:53:57 +00:00
2020-03-31 17:25:56 +02:00
2020-06-30 09:03:15 +03:00
2021-04-21 12:41:19 +01:00
2021-04-21 12:41:19 +01:00
2021-04-21 12:41:19 +01:00
2021-04-21 12:41:19 +01:00
2021-04-21 12:41:19 +01:00
2021-03-03 08:58:57 -08:00
2021-03-29 12:28:14 +09:00
2018-08-14 12:54:19 +02:00
2020-05-28 00:10:27 +02:00
2021-04-17 10:07:19 +02:00
2020-04-18 21:49:32 +05:30
2020-12-04 18:45:38 +02:00
2021-04-17 10:07:19 +02:00
2021-04-17 10:07:19 +02:00
2021-04-17 10:07:19 +02:00
2019-09-25 08:55:02 -07:00
2018-08-30 07:25:49 +02:00
2021-04-17 10:07:19 +02:00
2020-06-21 11:11:17 +03:00
2020-05-28 00:10:27 +02:00
2021-04-17 10:07:19 +02:00
2019-06-06 03:13:08 -07:00
2021-01-02 02:20:25 +09:00
2021-04-04 09:01:23 +09:00
2021-04-17 10:07:19 +02:00
2021-01-02 19:32:47 +02:00
2021-04-17 10:07:19 +02:00
2021-04-17 10:07:19 +02:00
2021-04-19 07:27:10 +02:00
2019-09-11 17:02:34 +01:00
2020-07-15 13:51:00 +02:00
2019-07-14 19:31:12 +02:00
2021-04-17 10:07:19 +02:00
2019-05-08 09:35:09 -07:00
2019-08-04 14:12:48 +03:00
2019-12-11 11:30:03 +01:00
2020-02-03 08:47:20 -08:00
2018-08-30 07:25:49 +02:00
2019-09-25 08:55:02 -07:00
2018-08-30 07:25:49 +02:00
2020-04-25 10:06:29 +03:00
2021-02-28 12:20:50 -06:00
2019-01-15 14:47:42 -08:00
2020-08-13 19:20:28 +02:00
2020-10-20 12:39:52 +01:00
2020-08-03 18:41:24 +02:00
2020-08-10 23:24:02 +02:00
2021-04-02 12:53:46 +09:00
2020-10-06 10:40:50 -07:00
2020-06-30 15:46:06 +02:00
2021-04-02 12:53:46 +09:00
2021-04-03 00:28:35 +09:00
2021-04-10 22:56:28 +02:00
2021-04-21 10:20:44 -07:00
2021-04-11 05:51:35 +01:00
2020-05-28 00:10:27 +02:00
2020-11-20 00:26:07 -08:00
2020-12-15 17:12:02 +01:00
2021-03-10 00:53:57 +00:00
2020-08-10 07:48:20 -07:00
2021-04-02 12:53:46 +09:00
2021-04-02 09:15:21 -07:00
2019-09-09 08:20:40 -07:00
2018-12-20 09:34:51 +02:00
2020-08-03 18:41:24 +02:00
2020-11-01 01:08:48 -08:00
2020-10-19 22:04:01 -07:00
2021-04-02 12:53:46 +09:00
2020-06-25 19:17:57 +02:00
2020-07-06 11:12:49 +02:00
2021-04-02 12:53:46 +09:00
2021-01-13 18:16:40 +02:00
2021-04-04 09:01:23 +09:00
2020-09-04 17:47:40 +09:00
2020-08-17 07:20:40 +02:00
2020-05-22 13:40:17 -07:00
2021-01-27 16:39:16 +00:00
2021-02-14 14:41:57 -08:00
2020-07-06 11:15:08 +02:00
2020-10-16 10:34:15 +02:00
2019-10-18 19:00:04 -07:00
2019-11-19 21:34:03 +00:00
2020-11-18 15:36:27 +01:00
2021-04-04 09:01:23 +09:00
2021-04-12 16:59:30 +01:00
2021-04-14 13:45:22 +02:00
2020-08-03 18:47:42 +02:00
2020-11-12 09:43:29 +00:00
2019-07-01 18:28:25 +02:00
2020-10-17 23:38:21 +03:00
2021-04-12 16:59:30 +01:00
2021-04-14 13:45:22 +02:00
2019-08-08 08:43:18 +03:00
2021-04-15 14:28:56 +01:00
2021-04-02 09:01:57 +09:00
2020-10-09 14:14:37 +03:00
2021-02-08 03:15:51 +00:00
2021-04-04 09:01:23 +09:00
2019-08-08 08:43:18 +03:00
2020-04-14 16:14:15 -07:00
2020-11-09 14:34:07 +02:00
2021-04-04 09:01:23 +09:00
2020-05-28 10:33:45 +03:00
2021-04-21 12:41:19 +01:00
2019-07-01 18:28:25 +02:00
2020-06-20 11:10:31 +03:00
2020-01-09 09:00:29 -08:00
2021-04-04 09:01:23 +09:00
2020-07-06 11:15:08 +02:00
2021-04-05 16:50:24 +03:00
2021-04-21 12:41:19 +01:00
2020-08-03 18:41:24 +02:00
2021-04-04 09:01:23 +09:00
2020-08-06 13:51:29 +02:00
2020-08-08 13:05:24 +02:00
2020-07-06 11:15:08 +02:00
2021-04-04 09:01:23 +09:00
2021-04-12 00:21:22 +02:00
2020-06-21 11:11:17 +03:00
2020-06-21 11:11:17 +03:00
2021-04-09 17:51:22 +02:00
2020-04-07 09:50:06 -07:00
2019-09-11 14:42:04 +01:00
2020-06-30 15:46:31 +02:00
2020-12-04 19:45:57 -08:00
2020-05-15 02:04:52 +01:00
2019-10-13 14:49:05 +03:00
2021-04-04 09:01:23 +09:00
2021-04-21 12:41:19 +01:00
2021-04-16 11:26:40 +02:00
2021-04-02 12:53:46 +09:00
2019-09-27 21:59:37 +02:00
2020-12-15 17:12:02 +01:00
2021-03-29 12:28:14 +09:00
2021-01-20 17:07:21 +01:00
2021-04-21 10:20:44 -07:00
2020-12-04 19:45:57 -08:00
2021-03-28 23:48:05 +01:00
2020-12-16 11:16:25 +01:00
2020-11-20 00:26:07 -08:00
2021-04-21 15:28:21 +01:00
2020-06-01 10:42:42 +01:00
2021-01-25 23:12:50 +01:00
2020-10-20 17:37:20 -07:00
2021-04-01 11:23:03 +09:00
2021-04-01 11:23:03 +09:00
2021-04-05 12:32:35 +09:00
2021-04-14 14:12:58 +09:00
2020-07-06 11:12:49 +02:00
2020-10-14 18:44:07 -07:00
2021-04-04 17:01:10 +09:00
2020-06-11 17:30:46 +01:00
2020-05-11 21:19:20 -05:00
2020-03-31 21:46:40 +02:00
2020-11-30 17:39:12 +09:00
2021-03-21 21:30:55 -05:00
2021-01-05 12:04:10 +00:00
2018-11-16 17:32:58 +02:00
2021-04-12 16:59:30 +01:00
2021-04-19 07:27:10 +02:00
2021-02-20 15:17:18 +01:00
2021-04-21 12:41:19 +01:00
2018-12-12 18:38:34 +01:00
2020-06-30 15:46:06 +02:00
2021-04-04 17:01:10 +09:00
2020-12-04 16:23:56 +01:00
2021-04-12 16:59:30 +01:00
2020-12-23 20:33:48 -08:00
2019-04-22 11:51:06 -07:00
2020-08-03 18:49:18 +02:00
2021-04-15 21:38:45 +01:00
2021-02-22 22:11:48 +09:00
2020-06-25 14:15:40 +02:00
2020-08-17 07:20:40 +02:00
2020-07-09 15:25:10 +02:00
2020-06-25 12:38:51 +02:00
2021-04-21 12:41:19 +01:00
2020-06-01 00:41:14 +01:00
2020-08-06 13:51:29 +02:00
2021-04-04 17:01:10 +09:00
2021-04-19 07:27:10 +02:00
2020-07-06 11:12:49 +02:00
2021-03-27 06:55:03 -07:00
2021-02-01 21:32:50 +01:00
2020-10-23 15:48:55 -07:00
2018-04-23 02:48:11 +03:00
2021-04-21 10:20:44 -07:00
2020-12-05 05:26:24 -08:00
2020-12-19 12:17:08 +02:00
2021-04-19 07:27:10 +02:00
2020-08-03 18:49:18 +02:00
2021-04-05 13:11:23 +09:00
2019-06-02 00:05:48 +03:00
2021-04-21 12:41:19 +01:00
2020-05-26 18:43:38 +03:00
2021-04-06 11:18:41 +09:00
2021-04-14 03:24:33 +02:00
2020-06-25 12:38:51 +02:00
2020-06-29 13:39:29 -04:00
2020-10-05 00:55:57 +03:00
2021-04-06 11:18:41 +09:00
2020-12-04 19:45:57 -08:00
2019-03-25 22:01:12 +00:00
2020-05-22 13:40:17 -07:00
2019-04-09 00:34:02 +02:00
2020-08-03 18:47:42 +02:00
2020-10-08 06:24:28 -07:00
2021-04-06 11:18:41 +09:00
2020-01-27 09:04:25 -08:00
2020-02-12 12:18:59 +02:00
2021-04-06 11:18:41 +09:00
2021-04-12 14:17:40 +02:00
2021-04-16 14:32:01 +02:00
2020-10-07 16:43:44 -07:00
2021-04-06 13:02:22 +09:00
2021-04-06 13:02:22 +09:00
2020-11-28 13:49:47 -08:00
2020-07-06 14:29:49 +02:00
2021-04-04 09:01:23 +09:00
2020-06-30 15:46:31 +02:00
2020-04-03 20:37:13 +01:00
2021-04-06 13:02:22 +09:00
2020-02-29 09:22:19 +01:00
2020-08-03 18:41:24 +02:00
2020-02-03 15:17:15 +01:00
2020-06-20 00:06:07 +03:00
2020-07-06 11:15:08 +02:00
2021-01-08 00:15:22 +01:00
2018-12-11 11:31:16 +00:00
2018-12-11 11:31:16 +00:00
2020-07-09 15:25:10 +02:00
2021-01-31 22:52:56 +00:00
2020-12-01 21:34:42 +01:00
2020-07-06 11:12:49 +02:00
2021-04-19 07:27:10 +02:00
2021-04-07 23:50:13 +01:00
2020-10-07 16:43:44 -07:00
2020-11-05 09:23:15 +00:00
2021-04-21 12:41:19 +01:00
2020-08-03 18:49:18 +02:00
2020-08-17 07:20:40 +02:00
2020-12-04 19:45:57 -08:00
2021-01-20 15:05:51 +01:00
2020-08-07 17:18:38 +02:00
2020-07-09 15:25:10 +02:00
2021-04-07 23:50:13 +01:00
2021-04-05 19:17:08 -07:00
2021-04-04 16:04:53 +01:00
2020-12-15 11:07:50 +00:00
2021-03-29 12:28:14 +09:00
2020-07-06 11:15:08 +02:00
2020-08-17 07:20:40 +02:00
2020-11-28 14:04:50 -08:00
2018-09-12 17:58:40 -07:00
2021-04-03 15:31:15 -07:00
2020-12-31 14:08:03 -05:00
2020-11-02 23:01:40 +02:00
2020-06-30 15:46:06 +02:00
2020-12-15 22:20:07 +01:00
2021-04-19 07:27:10 +02:00
2021-04-21 12:41:19 +01:00
2021-04-06 13:02:22 +09:00
2020-12-15 22:24:00 +01:00
2019-06-02 10:24:06 +01:00
2021-04-13 19:59:24 -04:00
2021-04-04 09:01:23 +09:00
2020-12-30 01:51:24 -08:00
2021-04-21 10:20:44 -07:00
2021-01-19 14:03:12 +01:00
2018-09-23 00:50:25 -07:00
2020-06-25 12:38:51 +02:00
2020-08-07 17:18:38 +02:00
2021-02-01 12:38:44 -05:00
2021-04-21 12:41:19 +01:00
2019-09-01 12:11:43 +03:00
2020-08-03 18:49:18 +02:00
2019-06-03 03:51:43 +02:00
2021-01-25 23:02:04 +02:00
2020-05-28 10:33:45 +03:00
2021-01-25 14:26:19 -08:00
2021-02-12 12:04:46 -08:00
2021-04-16 14:33:10 +02:00
2020-06-10 18:49:23 +02:00
2021-04-09 17:51:22 +02:00
2020-08-03 18:47:42 +02:00
2020-06-30 22:48:15 +09:00
2020-05-28 00:10:27 +02:00
2020-09-22 08:53:03 -07:00
2020-08-09 12:50:53 +02:00
2020-10-19 10:33:43 +03:00
2018-07-04 12:10:15 +02:00
2020-12-15 22:20:07 +01:00
2020-08-10 23:24:02 +02:00
2020-07-06 14:29:49 +02:00
2020-02-12 12:18:59 +02:00
2020-10-29 02:44:35 -07:00
2020-04-01 09:58:55 -04:00
2021-04-05 13:11:23 +09:00
2021-04-21 10:20:44 -07:00
2021-04-07 01:02:07 +01:00
2020-08-17 07:20:40 +02:00
2021-03-12 15:25:49 -08:00
2020-06-25 19:17:57 +02:00
2021-04-21 10:20:44 -07:00
2021-04-16 14:33:10 +02:00
2019-03-25 00:25:37 -07:00
2021-03-28 23:48:05 +01:00
2020-08-03 18:49:18 +02:00
2020-07-06 11:12:49 +02:00
2021-04-21 10:20:44 -07:00
2020-08-07 17:18:38 +02:00
2020-12-01 09:20:50 +01:00
2020-12-23 19:52:09 -08:00
2020-06-11 17:30:46 +01:00
2019-07-18 15:56:59 +02:00
2020-05-25 10:55:09 +03:00
2020-06-25 19:17:57 +02:00
2021-03-04 00:03:44 +00:00
2020-12-24 20:57:21 -08:00
2019-06-18 00:00:24 +02:00
2021-01-09 00:35:01 +01:00
2018-05-20 08:48:12 +03:00
2021-04-02 12:53:46 +09:00
2020-10-03 20:45:55 +01:00
2021-04-21 15:28:21 +01:00
2019-05-22 22:05:02 +12:00
2021-01-15 13:52:00 +00:00
2021-03-29 23:38:51 +01:00
2020-12-20 23:27:42 +01:00
2020-08-03 18:47:42 +02:00
2020-08-06 13:51:29 +02:00
2020-11-25 10:23:17 +01:00
2020-12-29 12:55:55 +02:00
2021-04-12 13:12:36 +02:00
2021-03-14 11:06:56 -07:00
2020-10-18 20:01:15 +03:00
2020-05-28 00:10:27 +02:00
2020-05-28 00:10:27 +02:00
2020-05-28 00:10:27 +02:00
2021-04-16 14:33:10 +02:00
2020-05-28 00:10:27 +02:00
2020-11-08 10:05:27 +01:00
2020-09-22 16:16:46 +03:00
2020-11-20 00:26:07 -08:00
2020-06-25 12:38:51 +02:00
2020-07-06 11:15:08 +02:00
2020-08-03 18:49:18 +02:00
2020-08-03 18:41:24 +02:00
2021-02-23 09:43:04 -08:00
2020-12-16 22:38:32 +01:00
2020-07-09 15:25:10 +02:00
2020-08-03 18:47:42 +02:00
2019-02-19 13:49:09 +02:00
2020-09-07 18:55:22 +03:00
2020-05-03 22:08:14 -07:00
2021-04-21 12:41:19 +01:00
2021-04-21 12:41:19 +01:00
2020-10-06 16:21:56 +02:00
2020-08-03 18:47:42 +02:00
2020-06-30 15:46:06 +02:00
2020-05-12 12:42:04 +03:00
2021-04-21 10:20:44 -07:00
2021-02-26 12:24:32 +09:00
2020-07-06 11:12:49 +02:00
2021-04-12 16:59:30 +01:00
2021-03-18 10:36:06 -07:00
2020-08-04 17:51:43 +02:00
2020-12-29 04:18:42 -08:00
2020-11-20 00:26:07 -08:00
2019-09-13 12:40:07 +01:00
2020-06-30 15:46:06 +02:00
2020-08-06 13:51:29 +02:00
2021-04-11 06:26:09 -07:00
2019-06-05 18:22:31 +03:00
2019-05-07 17:41:06 -04:00
2019-08-27 21:38:09 -07:00
2020-11-04 11:20:10 +01:00
2020-06-25 17:56:31 +03:00
2021-04-21 10:20:44 -07:00
2020-12-04 15:39:21 -08:00
2020-04-01 18:49:29 +02:00
2020-04-01 18:49:29 +02:00
2020-08-17 07:20:40 +02:00
2020-05-05 22:58:19 +01:00
2019-11-10 20:12:04 -08:00
2020-08-06 13:51:29 +02:00
2020-08-07 17:18:38 +02:00
2020-06-25 12:38:51 +02:00
2020-08-06 13:51:29 +02:00
2020-10-09 10:56:48 +01:00
2020-07-06 11:15:08 +02:00
2020-08-03 18:41:24 +02:00
2021-03-31 00:11:29 +03:00
2021-03-29 22:39:31 +09:00
2020-12-08 08:36:53 -08:00
2020-07-09 15:25:10 +02:00
2020-07-17 11:44:23 +01:00
2020-05-19 00:02:57 +02:00
2020-08-08 13:05:24 +02:00
2020-12-15 18:12:54 -08:00
2020-06-30 15:46:06 +02:00
2021-03-08 12:06:02 -08:00
2020-07-06 11:15:08 +02:00
2018-12-17 11:30:34 +01:00