# See https://help.github.com/articles/about-codeowners/
# for more info about CODEOWNERS file

# It uses the same pattern rule for gitignore file
# https://git-scm.com/docs/gitignore#_pattern_format

# asyncio
**/*asyncio*                  @1st1 @asvetlov

# Core
**/*context*                  @1st1
**/*genobject*                @1st1
**/*hamt*                     @1st1

# Hashing
**/*hashlib*                  @python/crypto-team
**/*pyhash*                   @python/crypto-team

# Import (including importlib).
# Ignoring importlib.h so as to not get flagged on
# all pull requests that change the the emitted
# bytecode.
**/*import*.c                 @python/import-team
**/*import*.py                @python/import-team


# SSL
**/*ssl*                      @python/crypto-team

# CSPRNG
Python/bootstrap_hash.c       @python/crypto-team

# Email and related
**/*mail*                     @python/email-team
**/*smtp*                     @python/email-team
**/*mime*                     @python/email-team
**/*imap*                     @python/email-team
**/*poplib*                   @python/email-team

# subprocess
**/*subprocess*               @gpshead

# Windows
/PC/                          @python/windows-team
/PCbuild/                     @python/windows-team

# Windows installer packages
/Tools/msi/                   @python/windows-team
/Tools/nuget/                 @python/windows-team

**/*itertools*                @rhettinger
**/*collections*              @rhettinger
**/*random*                   @rhettinger
**/*queue*                    @rhettinger
**/*bisect*                   @rhettinger
**/*heapq*                    @rhettinger
**/*functools*                @ncoghlan @rhettinger
**/*decimal*                  @rhettinger @skrah

**/*dataclasses*              @ericvsmith

**/*idlelib*                  @terryjreedy

**/*typing*                   @gvanrossum @ilevkivskyi
