◐ Shell
clean mode source ↗

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')