Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bpo-40503: Add tests and implementation for ZoneInfo #19909

Merged
merged 1 commit into from May 16, 2020

Commits on May 15, 2020

  1. PEP 615: Tests and implementation for zoneinfo

    This is the initial implementation of PEP 615, the zoneinfo module,
    ported from the standalone reference implementation (see
    https://www.python.org/dev/peps/pep-0615/#reference-implementation for a
    link, which has a more detailed commit history).
    
    This includes (hopefully) all functional elements described in the PEP,
    but documentation is found in a separate PR. This includes:
    
    1. A pure python implementation of the ZoneInfo class
    2. A C accelerated implementation of the ZoneInfo class
    3. Tests with 100% branch coverage for the Python code (though C code
       coverage is less than 100%).
    4. A compile-time configuration option on Linux (though not on Windows)
    
    Differences from the reference implementation:
    
    - The module is arranged slightly differently: the accelerated module is
      `_zoneinfo` rather than `zoneinfo._czoneinfo`, which also necessitates
      some changes in the test support function. (Suggested by Victor
      Stinner and Steve Dower.)
    - The tests are arranged slightly differently and do not include the
      property tests. The tests live at test/test_zoneinfo/test_zoneinfo.py
      rather than test/test_zoneinfo.py or test/test_zoneinfo/__init__.py
      because we may do some refactoring in the future that would likely
      require this separation anyway; we may:
            - include the property tests
            - automatically run all the tests against both pure Python and C,
              rather than manually constructing C and Python test classes (similar
              to the way this works with test_datetime.py, which generates C
              and Python test cases from datetimetester.py).
    - This includes a compile-time configuration option on Linux (though not
      on Windows); added with much help from Thomas Wouters.
    - Integration into the CPython build system is obviously different from
      building a standalone zoneinfo module wheel.
    - This includes configuration to install the tzdata package as part of
      CI, though only on the coverage jobs. Introducing a PyPI dependency as
      part of the CI build was controversial, and this is seen as less of a
      major change, since the coverage jobs already depend on pip and PyPI.
    
    Additional changes that were introduced as part of this PR, most / all of
    which were backported to the reference implementation:
    
    - Fixed reference and memory leaks
    
        With much debugging help from Pablo Galindo
    
    - Added smoke tests ensuring that the C and Python modules are built
    
        The import machinery can be somewhat fragile, and the "seamlessly falls
        back to pure Python" nature of this module makes it so that a problem
        building the C extension or a failure to import the pure Python version
        might easily go unnoticed.
    
    - Adjustments to zoneinfo.__dir__
    
        Suggested by Petr Viktorin.
    
    - Slight refactorings as suggested by Steve Dower.
    
    - Removed unnecessary if check on std_abbr
    
        Discovered this because of a missing line in branch coverage.
    pganssle committed May 15, 2020
    Copy the full SHA
    ac56fcc View commit details
    Browse the repository at this point in the history