bpo-40799: Add _pydatetime module (Python datetime impl) by vstinner · Pull Request #20472 · python/cpython
This PR reduce names exposed in dir(datetime).
I just updated my PR to remove datetime.sys when the pure Python implementation is used.
The C implementation exposes datetime.datetime_CAPI capsule. Maybe it can be removed, but it should be done in a separated change.
Before:
C:
dir 19 ['MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__',
'__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__',
'date', 'datetime', 'datetime_CAPI', 'sys', 'time', 'timedelta',
'timezone', 'tzinfo']
Pure Python:
dir 56 ['MAXYEAR', 'MINYEAR', '_DAYNAMES', '_DAYS_BEFORE_MONTH',
'_DAYS_IN_MONTH', '_DI100Y', '_DI400Y', '_DI4Y', '_EPOCH',
'_IsoCalendarDate', '_MAXORDINAL', '_MONTHNAMES', '__all__',
'__builtins__', '__cached__', '__doc__', '__file__', '__loader__',
'__name__', '__package__', '__spec__', '_build_struct_time',
'_check_date_fields', '_check_time_fields', '_check_tzinfo_arg',
'_check_tzname', '_check_utc_offset', '_cmp', '_cmperror',
'_date_class', '_days_before_month', '_days_before_year',
'_days_in_month', '_divide_and_round', '_format_offset',
'_format_time', '_index', '_is_leap', '_isoweek1monday', '_math',
'_ord2ymd', '_parse_hh_mm_ss_ff', '_parse_isoformat_date',
'_parse_isoformat_time', '_time', '_time_class', '_tzinfo_class',
'_wrap_strftime', '_ymd2ord', 'date', 'datetime', 'sys', 'time',
'timedelta', 'timezone', 'tzinfo']
After:
C:
dir 18 ['MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__',
'__doc__', '__file__', '__loader__', '__name__', '__package__',
'__spec__', 'date', 'datetime', 'datetime_CAPI', 'time',
'timedelta', 'timezone', 'tzinfo']
Pure Python:
dir 17 ['MAXYEAR', 'MINYEAR', '__all__', '__builtins__', '__cached__',
'__doc__', '__file__', '__loader__', '__name__', '__package__',
'__spec__', 'date', 'datetime', 'time', 'timedelta',
'timezone', 'tzinfo']
datetime.__all__ is not changed by this PR, it remains a list of 8 names for C and Python implementations:
('date', 'datetime', 'time', 'timedelta', 'timezone', 'tzinfo', 'MINYEAR', 'MAXYEAR')