├── .all-contributorsrc
├── .copier-answers.yml
├── .editorconfig
├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── 1-bug_report.md
│ └── 2-feature-request.md
├── dependabot.yml
├── labels.toml
└── workflows
│ ├── ci-cd.yml
│ └── issue-manager.yml
├── .gitignore
├── .gitpod.yml
├── .idea
├── aiohappyeyeballs.iml
├── watcherTasks.xml
└── workspace.xml
├── .pre-commit-config.yaml
├── .readthedocs.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── commitlint.config.mjs
├── docs
├── Makefile
├── _static
│ └── .gitkeep
├── api_reference.rst
├── changelog.md
├── conf.py
├── contributing.md
├── index.md
├── installation.md
├── make.bat
└── usage.md
├── poetry.lock
├── pyproject.toml
├── renovate.json
├── setup.py
├── src
└── aiohappyeyeballs
│ ├── __init__.py
│ ├── _staggered.py
│ ├── impl.py
│ ├── py.typed
│ ├── types.py
│ └── utils.py
├── templates
└── CHANGELOG.md.j2
└── tests
├── __init__.py
├── conftest.py
├── test_impl.py
├── test_init.py
├── test_staggered.py
├── test_staggered_cpython.py
├── test_staggered_cpython_eager_task_factory.py
├── test_types.py
└── test_utils.py
/.all-contributorsrc:
--------------------------------------------------------------------------------
1 | {
2 | "projectName": "aiohappyeyeballs",
3 | "projectOwner": "aio-libs",
4 | "repoType": "github",
5 | "repoHost": "https://github.com",
6 | "files": [
7 | "README.md"
8 | ],
9 | "imageSize": 80,
10 | "commit": true,
11 | "commitConvention": "angular",
12 | "contributors": [],
13 | "contributorsPerLine": 7,
14 | "skipCi": true
15 | }
16 |
--------------------------------------------------------------------------------
/.copier-answers.yml:
--------------------------------------------------------------------------------
1 | # Changes here will be overwritten by Copier
2 | _commit: b09ed7d
3 | _src_path: gh:browniebroke/pypackage-template
4 | add_me_as_contributor: false
5 | copyright_year: '2023'
6 | documentation: true
7 | email: nick@koston.org
8 | full_name: J. Nick Koston
9 | github_username: aio-libs
10 | has_cli: false
11 | initial_commit: true
12 | open_source_license: PSF-2.0
13 | package_name: aiohappyeyeballs
14 | project_name: aiohappyeyeballs
15 | project_short_description: Happy Eyeballs
16 | project_slug: aiohappyeyeballs
17 | run_poetry_install: true
18 | setup_github: true
19 | setup_pre_commit: true
20 |
21 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 |
3 | root = true
4 |
5 | [*]
6 | indent_style = space
7 | indent_size = 4
8 | trim_trailing_whitespace = true
9 | insert_final_newline = true
10 | charset = utf-8
11 | end_of_line = lf
12 |
13 | [*.bat]
14 | indent_style = tab
15 | end_of_line = crlf
16 |
17 | [LICENSE]
18 | insert_final_newline = false
19 |
20 | [Makefile]
21 | indent_style = tab
22 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | ---
2 | # These are supported funding model platforms
3 |
4 | github:
5 | - webknjaz
6 | - Dreamsorcerer
7 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/1-bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | labels: bug
5 | ---
6 |
7 | **Describe the bug**
8 | A clear and concise description of what the bug is.
9 |
10 | **To Reproduce**
11 | Steps to reproduce the behavior:
12 |
13 | **Additional context**
14 | Add any other context about the problem here.
15 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/2-feature-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | labels: enhancement
5 | ---
6 |
7 | **Is your feature request related to a problem? Please describe.**
8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
9 |
10 | **Describe the solution you'd like**
11 | A clear and concise description of what you want to happen.
12 |
13 | **Additional context**
14 | Add any other context or screenshots about the feature request here.
15 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # To get started with Dependabot version updates, you'll need to specify which
2 | # package ecosystems to update and where the package manifests are located.
3 | # Please see the documentation for all configuration options:
4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5 |
6 | version: 2
7 | updates:
8 | - package-ecosystem: "github-actions"
9 | directory: "/"
10 | schedule:
11 | interval: "monthly"
12 | commit-message:
13 | prefix: "chore(deps-ci): "
14 | groups:
15 | github-actions:
16 | patterns:
17 | - "*"
18 | - package-ecosystem: "pip" # See documentation for possible values
19 | directory: "/" # Location of package manifests
20 | schedule:
21 | interval: "weekly"
22 |
--------------------------------------------------------------------------------
/.github/labels.toml:
--------------------------------------------------------------------------------
1 | [breaking]
2 | color = "ffcc00"
3 | name = "breaking"
4 | description = "Breaking change."
5 |
6 | [bug]
7 | color = "d73a4a"
8 | name = "bug"
9 | description = "Something isn't working"
10 |
11 | [dependencies]
12 | color = "0366d6"
13 | name = "dependencies"
14 | description = "Pull requests that update a dependency file"
15 |
16 | [github_actions]
17 | color = "000000"
18 | name = "github_actions"
19 | description = "Update of github actions"
20 |
21 | [documentation]
22 | color = "1bc4a5"
23 | name = "documentation"
24 | description = "Improvements or additions to documentation"
25 |
26 | [duplicate]
27 | color = "cfd3d7"
28 | name = "duplicate"
29 | description = "This issue or pull request already exists"
30 |
31 | [enhancement]
32 | color = "a2eeef"
33 | name = "enhancement"
34 | description = "New feature or request"
35 |
36 | ["good first issue"]
37 | color = "7057ff"
38 | name = "good first issue"
39 | description = "Good for newcomers"
40 |
41 | ["help wanted"]
42 | color = "008672"
43 | name = "help wanted"
44 | description = "Extra attention is needed"
45 |
46 | [invalid]
47 | color = "e4e669"
48 | name = "invalid"
49 | description = "This doesn't seem right"
50 |
51 | [nochangelog]
52 | color = "555555"
53 | name = "nochangelog"
54 | description = "Exclude pull requests from changelog"
55 |
56 | [question]
57 | color = "d876e3"
58 | name = "question"
59 | description = "Further information is requested"
60 |
61 | [removed]
62 | color = "e99695"
63 | name = "removed"
64 | description = "Removed piece of functionalities."
65 |
66 | [tests]
67 | color = "bfd4f2"
68 | name = "tests"
69 | description = "CI, CD and testing related changes"
70 |
71 | [wontfix]
72 | color = "ffffff"
73 | name = "wontfix"
74 | description = "This will not be worked on"
75 |
76 | [discussion]
77 | color = "c2e0c6"
78 | name = "discussion"
79 | description = "Some discussion around the project"
80 |
81 | [hacktoberfest]
82 | color = "ffa663"
83 | name = "hacktoberfest"
84 | description = "Good issues for Hacktoberfest"
85 |
86 | [answered]
87 | color = "0ee2b6"
88 | name = "answered"
89 | description = "Automatically closes as answered after a delay"
90 |
91 | [waiting]
92 | color = "5f7972"
93 | name = "waiting"
94 | description = "Automatically closes if no answer after a delay"
95 |
--------------------------------------------------------------------------------
/.github/workflows/ci-cd.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 |
9 | concurrency:
10 | group: ${{ github.head_ref || github.run_id }}
11 | cancel-in-progress: true
12 |
13 | jobs:
14 | lint:
15 | runs-on: ubuntu-latest
16 | steps:
17 | - uses: actions/checkout@v4
18 | - uses: actions/setup-python@v5
19 | with:
20 | python-version: 3.x
21 | - uses: pre-commit/action@v3.0.1
22 |
23 | # Make sure commit messages follow the conventional commits convention:
24 | # https://www.conventionalcommits.org
25 | commitlint:
26 | name: Lint Commit Messages
27 | runs-on: ubuntu-latest
28 | steps:
29 | - uses: actions/checkout@v4
30 | with:
31 | fetch-depth: 0
32 | - uses: wagoid/commitlint-github-action@v6.2.1
33 |
34 | test:
35 | strategy:
36 | fail-fast: false
37 | matrix:
38 | python-version:
39 | - "3.9"
40 | - "3.10"
41 | - "3.11"
42 | - "3.12"
43 | - "3.13"
44 | os:
45 | - ubuntu-latest
46 | - windows-latest
47 | - macOS-latest
48 | runs-on: ${{ matrix.os }}
49 | steps:
50 | - uses: actions/checkout@v4
51 | - name: Set up Python
52 | uses: actions/setup-python@v5
53 | with:
54 | python-version: ${{ matrix.python-version }}
55 | allow-prereleases: true
56 | - uses: snok/install-poetry@v1.4.1
57 | - name: Install Dependencies
58 | run: poetry install
59 | shell: bash
60 | - name: Test with Pytest
61 | run: poetry run pytest --cov-report=xml
62 | shell: bash
63 | - name: Upload coverage to Codecov
64 | uses: codecov/codecov-action@v5.4.2
65 | with:
66 | token: ${{ secrets.CODECOV_TOKEN }}
67 |
68 | test_release:
69 | needs:
70 | - test
71 | - lint
72 | - commitlint
73 |
74 | runs-on: ubuntu-latest
75 | environment: test_release
76 | concurrency: release
77 | if: github.ref_name != 'main'
78 |
79 | steps:
80 | - uses: actions/checkout@v4
81 | with:
82 | fetch-depth: 0
83 | ref: ${{ github.head_ref || github.ref_name }}
84 |
85 | # Dry run of PSR to build the distribution
86 | - name: Test release
87 | uses: python-semantic-release/python-semantic-release@v9.21.0
88 | with:
89 | root_options: --noop
90 |
91 | - uses: snok/install-poetry@v1.4.1
92 | - name: Install Dependencies
93 | run: poetry install --only main,test_build
94 | shell: bash
95 |
96 | - name: Test build of distribution packages
97 | shell: bash
98 | run: |
99 | poetry build
100 | poetry run python -Im twine check --strict dist/*
101 |
102 | build_release:
103 | needs:
104 | - test
105 | - lint
106 | - commitlint
107 |
108 | if: github.ref_name == 'main' && !startsWith(github.event.pull_request.title,'chore') && !startsWith(github.event.head_commit.message,'chore')
109 |
110 | runs-on: ubuntu-latest
111 | outputs:
112 | released: ${{ steps.release.outputs.released }}
113 |
114 | concurrency: release
115 | permissions:
116 | id-token: write
117 | contents: write
118 |
119 | steps:
120 | - uses: actions/checkout@v4
121 | with:
122 | fetch-depth: 0
123 | ref: ${{ github.head_ref || github.ref_name }}
124 |
125 | # On main branch: Call PSR to build the distribution
126 | - name: Release
127 | uses: python-semantic-release/python-semantic-release@v9.21.0
128 | id: release
129 |
130 | with:
131 | github_token: ${{ secrets.GITHUB_TOKEN }}
132 |
133 | - name: Store the distribution packages
134 | uses: actions/upload-artifact@v4
135 | with:
136 | name: python-package-distributions
137 | path: dist/
138 |
139 | release:
140 | needs:
141 | - build_release
142 |
143 | if: needs.build_release.outputs.released == 'true'
144 | runs-on: ubuntu-latest
145 | environment: pypi
146 | concurrency: release
147 | permissions:
148 | id-token: write
149 | contents: write
150 |
151 | steps:
152 | - name: Download all the dists
153 | uses: actions/download-artifact@v4
154 | with:
155 | name: python-package-distributions
156 | path: dist/
157 |
158 | - name: Publish package distributions to PyPI
159 | uses: pypa/gh-action-pypi-publish@release/v1
160 |
161 | - uses: actions/checkout@v4
162 | with:
163 | fetch-depth: 0
164 | ref: ${{ github.head_ref || github.ref_name }}
165 |
166 | - name: Publish package distributions to GitHub Releases
167 | uses: python-semantic-release/upload-to-gh-release@v9.8.9
168 | with:
169 | github_token: ${{ secrets.GITHUB_TOKEN }}
170 |
--------------------------------------------------------------------------------
/.github/workflows/issue-manager.yml:
--------------------------------------------------------------------------------
1 | name: Issue Manager
2 |
3 | on:
4 | schedule:
5 | - cron: "0 0 * * *"
6 | issue_comment:
7 | types:
8 | - created
9 | issues:
10 | types:
11 | - labeled
12 | pull_request_target:
13 | types:
14 | - labeled
15 | workflow_dispatch:
16 |
17 | jobs:
18 | issue-manager:
19 | runs-on: ubuntu-latest
20 | steps:
21 | - uses: tiangolo/issue-manager@0.5.1
22 | with:
23 | token: ${{ secrets.GITHUB_TOKEN }}
24 | config: >
25 | {
26 | "answered": {
27 | "message": "Assuming the original issue was solved, it will be automatically closed now."
28 | },
29 | "waiting": {
30 | "message": "Automatically closing. To re-open, please provide the additional information requested."
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by .ignore support plugin (hsz.mobi)
2 | ### Python template
3 | # Byte-compiled / optimized / DLL files
4 | __pycache__/
5 | *.py[cod]
6 | *$py.class
7 |
8 | # C extensions
9 | *.so
10 |
11 | # Distribution / packaging
12 | .Python
13 | build/
14 | develop-eggs/
15 | dist/
16 | downloads/
17 | eggs/
18 | .eggs/
19 | lib/
20 | lib64/
21 | parts/
22 | sdist/
23 | var/
24 | wheels/
25 | share/python-wheels/
26 | *.egg-info/
27 | .installed.cfg
28 | *.egg
29 | MANIFEST
30 |
31 | # PyInstaller
32 | # Usually these files are written by a python script from a template
33 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
34 | *.manifest
35 | *.spec
36 |
37 | # Installer logs
38 | pip-log.txt
39 | pip-delete-this-directory.txt
40 |
41 | # Unit test / coverage reports
42 | htmlcov/
43 | .tox/
44 | .nox/
45 | .coverage
46 | .coverage.*
47 | .cache
48 | nosetests.xml
49 | coverage.xml
50 | *.cover
51 | *.py,cover
52 | .hypothesis/
53 | .pytest_cache/
54 | cover/
55 |
56 | # Translations
57 | *.mo
58 | *.pot
59 |
60 | # Django stuff:
61 | *.log
62 | local_settings.py
63 | db.sqlite3
64 | db.sqlite3-journal
65 |
66 | # Flask stuff:
67 | instance/
68 | .webassets-cache
69 |
70 | # Scrapy stuff:
71 | .scrapy
72 |
73 | # Sphinx documentation
74 | docs/_build/
75 |
76 | # PyBuilder
77 | .pybuilder/
78 | target/
79 |
80 | # Jupyter Notebook
81 | .ipynb_checkpoints
82 |
83 | # IPython
84 | profile_default/
85 | ipython_config.py
86 |
87 | # pyenv
88 | # For a library or package, you might want to ignore these files since the code is
89 | # intended to run in multiple environments; otherwise, check them in:
90 | # .python-version
91 |
92 | # pipenv
93 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
94 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
95 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
96 | # install all needed dependencies.
97 | #Pipfile.lock
98 |
99 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
100 | __pypackages__/
101 |
102 | # Celery stuff
103 | celerybeat-schedule
104 | celerybeat.pid
105 |
106 | # SageMath parsed files
107 | *.sage.py
108 |
109 | # Environments
110 | .env
111 | .venv
112 | env/
113 | venv/
114 | ENV/
115 | env.bak/
116 | venv.bak/
117 |
118 | # Spyder {{package_name}} settings
119 | .spyderproject
120 | .spyproject
121 |
122 | # Rope {{package_name}} settings
123 | .ropeproject
124 |
125 | # mkdocs documentation
126 | /site
127 |
128 | # mypy
129 | .mypy_cache/
130 | .dmypy.json
131 | dmypy.json
132 |
133 | # Pyre type checker
134 | .pyre/
135 |
136 | # pytype static type analyzer
137 | .pytype/
138 |
139 | # Cython debug symbols
140 | cython_debug/
141 |
--------------------------------------------------------------------------------
/.gitpod.yml:
--------------------------------------------------------------------------------
1 | tasks:
2 | - command: |
3 | pip install poetry
4 | PIP_USER=false poetry install
5 | - command: |
6 | pip install pre-commit
7 | pre-commit install
8 | PIP_USER=false pre-commit install-hooks
9 |
--------------------------------------------------------------------------------
/.idea/aiohappyeyeballs.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/watcherTasks.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/.idea/workspace.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/.pre-commit-config.yaml:
--------------------------------------------------------------------------------
1 | # See https://pre-commit.com for more information
2 | # See https://pre-commit.com/hooks.html for more hooks
3 | exclude: "CHANGELOG.md|.copier-answers.yml|.all-contributorsrc"
4 | default_stages: [pre-commit]
5 |
6 | ci:
7 | autofix_commit_msg: "chore(pre-commit.ci): auto fixes"
8 | autoupdate_commit_msg: "chore(pre-commit.ci): pre-commit autoupdate"
9 |
10 | repos:
11 | - repo: https://github.com/commitizen-tools/commitizen
12 | rev: v4.8.2
13 | hooks:
14 | - id: commitizen
15 | stages: [commit-msg]
16 | - repo: https://github.com/pre-commit/pre-commit-hooks
17 | rev: v5.0.0
18 | hooks:
19 | - id: debug-statements
20 | - id: check-builtin-literals
21 | - id: check-case-conflict
22 | - id: check-docstring-first
23 | - id: check-json
24 | - id: check-toml
25 | - id: check-xml
26 | - id: check-yaml
27 | - id: detect-private-key
28 | - id: end-of-file-fixer
29 | - id: trailing-whitespace
30 | - repo: https://github.com/python-poetry/poetry
31 | rev: 2.1.3
32 | hooks:
33 | - id: poetry-check
34 | - repo: https://github.com/pre-commit/mirrors-prettier
35 | rev: v4.0.0-alpha.8
36 | hooks:
37 | - id: prettier
38 | args: ["--tab-width", "2"]
39 | - repo: https://github.com/astral-sh/ruff-pre-commit
40 | rev: v0.11.11
41 | hooks:
42 | - id: ruff
43 | args: [--fix, --exit-non-zero-on-fix]
44 | # Run the formatter.
45 | - id: ruff-format
46 | - repo: https://github.com/codespell-project/codespell
47 | rev: v2.4.1
48 | hooks:
49 | - id: codespell
50 | - repo: https://github.com/pre-commit/mirrors-mypy
51 | rev: v1.15.0
52 | hooks:
53 | - id: mypy
54 | additional_dependencies: []
55 |
--------------------------------------------------------------------------------
/.readthedocs.yml:
--------------------------------------------------------------------------------
1 | # Read the Docs configuration file
2 | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
3 |
4 | # Required
5 | version: 2
6 |
7 | # Set the version of Python and other tools you might need
8 | build:
9 | os: ubuntu-20.04
10 | tools:
11 | python: "3.12"
12 | jobs:
13 | post_create_environment:
14 | # Install poetry
15 | - pip install poetry
16 | post_install:
17 | # Install dependencies, reusing RTD virtualenv
18 | - VIRTUAL_ENV=$READTHEDOCS_VIRTUALENV_PATH poetry install --with docs
19 |
20 | # Build documentation in the docs directory with Sphinx
21 | sphinx:
22 | configuration: docs/conf.py
23 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ## v2.6.1 (2025-03-12)
4 |
5 | ### Bug fixes
6 |
7 | - Resolve typeerror on import for python < 3.9.2 (#151) ([`2042c82`](https://github.com/aio-libs/aiohappyeyeballs/commit/2042c82f9978f41c31b58aa4e3d8fc3b9c3ec2ec))
8 |
9 | ## v2.6.0 (2025-03-11)
10 |
11 | ### Features
12 |
13 | - Publish documentation (#149) ([`4235273`](https://github.com/aio-libs/aiohappyeyeballs/commit/42352736d12c60d500c63b9598ffab05ef5e8829))
14 |
15 | ## v2.5.0 (2025-03-06)
16 |
17 | ### Features
18 |
19 | - Add callback for users to customize socket creation (#147) ([`8e1bc6a`](https://github.com/aio-libs/aiohappyeyeballs/commit/8e1bc6a4bc6282ccf29db441c33dd8d806003ffd))
20 |
21 | ## v2.4.8 (2025-03-04)
22 |
23 | ### Bug fixes
24 |
25 | - Close runner up sockets in the event there are multiple winners (#143) ([`476a05b`](https://github.com/aio-libs/aiohappyeyeballs/commit/476a05b956627700baa84eb6aac28c395da92a9f))
26 |
27 | ## v2.4.7 (2025-03-04)
28 |
29 | ### Bug fixes
30 |
31 | - Resolve warnings when running tests (#144) ([`e96264a`](https://github.com/aio-libs/aiohappyeyeballs/commit/e96264aec89b9bd34d37413f610d039c56393a48))
32 |
33 | ## v2.4.6 (2025-02-07)
34 |
35 | ### Bug fixes
36 |
37 | - Ensure all timers are cancelled when after staggered race finishes (#136) ([`f75891d`](https://github.com/aio-libs/aiohappyeyeballs/commit/f75891d8974693b24af9789a8981ed7f6bc55c5c))
38 |
39 | ## v2.4.5 (2025-02-07)
40 |
41 | ### Bug fixes
42 |
43 | - Keep classifiers in project to avoid automatic enrichment (#134) ([`99edb20`](https://github.com/aio-libs/aiohappyeyeballs/commit/99edb20e9d3e53ead65b55cb3e93c22c03d06599))
44 | - Move classifiers to prevent recalculation by poetry (#131) ([`66e1c90`](https://github.com/aio-libs/aiohappyeyeballs/commit/66e1c90ae81f71c7039cd62c60417a96202d906c))
45 |
46 | ## v2.4.4 (2024-11-30)
47 |
48 | ### Bug fixes
49 |
50 | - Handle oserror on failure to close socket instead of raising indexerror (#114) ([`c542f68`](https://github.com/aio-libs/aiohappyeyeballs/commit/c542f684d329fed04093caa2b31d8f7f6e0e0949))
51 |
52 | ## v2.4.3 (2024-09-30)
53 |
54 | ### Bug fixes
55 |
56 | - Rewrite staggered_race to be race safe (#101) ([`9db617a`](https://github.com/aio-libs/aiohappyeyeballs/commit/9db617a982ee27994bf13c805f9c4f054f05de47))
57 | - Re-raise runtimeerror when uvloop raises runtimeerror during connect (#105) ([`c8f1fa9`](https://github.com/aio-libs/aiohappyeyeballs/commit/c8f1fa93d698f216f84de7074a6282777fbf0439))
58 |
59 | ## v2.4.2 (2024-09-27)
60 |
61 | ### Bug fixes
62 |
63 | - Copy staggered from standard lib for python 3.12+ (#95) ([`c5a4023`](https://github.com/aio-libs/aiohappyeyeballs/commit/c5a4023d904b3e72f30b8a9f56913894dda4c9d0))
64 |
65 | ## v2.4.1 (2024-09-26)
66 |
67 | ### Bug fixes
68 |
69 | - Avoid passing loop to staggered.staggered_race (#94) ([`5f80b79`](https://github.com/aio-libs/aiohappyeyeballs/commit/5f80b7951f32d727039d9db776a17a6eba8877cd))
70 |
71 | ## v2.4.0 (2024-08-19)
72 |
73 | ### Features
74 |
75 | - Add support for python 3.13 (#86) ([`4f2152f`](https://github.com/aio-libs/aiohappyeyeballs/commit/4f2152fbb6b1d915c2fd68219339d998c47a71f9))
76 |
77 | ### Documentation
78 |
79 | - Fix a trivial typo in readme.md (#84) ([`f5ae7d4`](https://github.com/aio-libs/aiohappyeyeballs/commit/f5ae7d4bce04ee0645257ac828745a3b989ef149))
80 |
81 | ## v2.3.7 (2024-08-17)
82 |
83 | ### Bug fixes
84 |
85 | - Correct classifier for license python-2.0.1 (#83) ([`186be05`](https://github.com/aio-libs/aiohappyeyeballs/commit/186be056ea441bb3fa7620864f46c6f8431f3a34))
86 |
87 | ## v2.3.6 (2024-08-16)
88 |
89 | ### Bug fixes
90 |
91 | - Adjust license to python-2.0.1 (#82) ([`30a2dc5`](https://github.com/aio-libs/aiohappyeyeballs/commit/30a2dc57c49d1000ebdafa8c81ecf4f79e35c9f3))
92 |
93 | ## v2.3.5 (2024-08-07)
94 |
95 | ### Bug fixes
96 |
97 | - Remove upper bound on python requirement (#74) ([`0de1e53`](https://github.com/aio-libs/aiohappyeyeballs/commit/0de1e534fc5b7526e11bf203ab09b95b13f3070b))
98 | - Preserve errno if all exceptions have the same errno (#77) ([`7bbb2bf`](https://github.com/aio-libs/aiohappyeyeballs/commit/7bbb2bf0feb3994953a52a1d606e682acad49cb8))
99 | - Adjust license classifier to better reflect license terms (#78) ([`56e7ba6`](https://github.com/aio-libs/aiohappyeyeballs/commit/56e7ba612c5029364bb960b07022a2b720f0a967))
100 |
101 | ### Documentation
102 |
103 | - Add link to happy eyeballs explanation (#73) ([`077710c`](https://github.com/aio-libs/aiohappyeyeballs/commit/077710c150b6c762ffe408e0ad418c506a2d6f31))
104 |
105 | ## v2.3.4 (2024-07-31)
106 |
107 | ### Bug fixes
108 |
109 | - Add missing asyncio to fix truncated package description (#67) ([`2644df1`](https://github.com/aio-libs/aiohappyeyeballs/commit/2644df179e21e4513da857f2aea2aa64a3fb6316))
110 |
111 | ## v2.3.3 (2024-07-31)
112 |
113 | ### Bug fixes
114 |
115 | - Add missing python version classifiers (#65) ([`489016f`](https://github.com/aio-libs/aiohappyeyeballs/commit/489016feb53d4fd5f9880f27dc40a5198d5b0be2))
116 | - Update classifiers to include license (#60) ([`a746c29`](https://github.com/aio-libs/aiohappyeyeballs/commit/a746c296b324407efef272f422a990587b9d6057))
117 | - Workaround broken `asyncio.staggered` on python < 3.8.2 (#61) ([`b16f107`](https://github.com/aio-libs/aiohappyeyeballs/commit/b16f107d9493817247c27ab83522901f086a13b5))
118 | - Include tests in the source distribution package (#62) ([`53053b6`](https://github.com/aio-libs/aiohappyeyeballs/commit/53053b6a38ef868e0170940ced5e0611ebd1be4c))
119 |
120 | ## v2.3.2 (2024-01-06)
121 |
122 | ### Bug fixes
123 |
124 | - Update urls for the new home for this library (#43) ([`c6d4358`](https://github.com/aio-libs/aiohappyeyeballs/commit/c6d43586d5ca56472892767d4a47d28348158544))
125 |
126 | ## v2.3.1 (2023-12-14)
127 |
128 | ### Bug fixes
129 |
130 | - Remove test import from tests (#31) ([`c529b15`](https://github.com/aio-libs/aiohappyeyeballs/commit/c529b15fbead0aa5cde9dd5c460ff5abd15fc355))
131 |
132 | ## v2.3.0 (2023-12-12)
133 |
134 | ### Features
135 |
136 | - Avoid _interleave_addrinfos when there is only a single addr_info (#29) ([`305f6f1`](https://github.com/aio-libs/aiohappyeyeballs/commit/305f6f13d028ab3ead7923870601175102c5970c))
137 |
138 | ## v2.2.0 (2023-12-11)
139 |
140 | ### Features
141 |
142 | - Make interleave with pop_addr_infos_interleave optional to match cpython (#28) ([`adbc8ad`](https://github.com/aio-libs/aiohappyeyeballs/commit/adbc8adfaa44349ca83966787400413668f0b4b6))
143 |
144 | ## v2.1.0 (2023-12-11)
145 |
146 | ### Features
147 |
148 | - Add addr_to_addr_info util for converting addr to addr_infos (#27) ([`2e25a98`](https://github.com/aio-libs/aiohappyeyeballs/commit/2e25a98f2339d84bc7951ad17f0b38c104a97a71))
149 |
150 | ## v2.0.0 (2023-12-10)
151 |
152 | ### Features
153 |
154 | - Require the full address tuple for the remove_addr_infos util (#26) ([`d7e5df1`](https://github.com/aio-libs/aiohappyeyeballs/commit/d7e5df12a01838e81729af4c49938e98b3407e03))
155 |
156 | ## v1.8.1 (2023-12-10)
157 |
158 | ### Bug fixes
159 |
160 | - Move types into a single file (#24) ([`8d4cfee`](https://github.com/aio-libs/aiohappyeyeballs/commit/8d4cfeeaa7862e028e941c49f8c84dcee0b9b1ac))
161 |
162 | ## v1.8.0 (2023-12-10)
163 |
164 | ### Features
165 |
166 | - Add utils (#23) ([`d89311d`](https://github.com/aio-libs/aiohappyeyeballs/commit/d89311d1a433dde75863019a08717a531f68befa))
167 |
168 | ## v1.7.0 (2023-12-09)
169 |
170 | ### Bug fixes
171 |
172 | - License should be psf-2.0 (#22) ([`ca9c1fc`](https://github.com/aio-libs/aiohappyeyeballs/commit/ca9c1fca4d63c54855fbe582132b5dcb229c7591))
173 |
174 | ### Features
175 |
176 | - Add some more examples to the docs (#21) ([`6cd0b5d`](https://github.com/aio-libs/aiohappyeyeballs/commit/6cd0b5d10357a9d20fc5ee1c96db18c6994cd8fc))
177 |
178 | ## v1.6.0 (2023-12-09)
179 |
180 | ### Features
181 |
182 | - Add coverage for multiple and same exceptions (#20) ([`2781b87`](https://github.com/aio-libs/aiohappyeyeballs/commit/2781b87c56aa1c08345d91dce5c1642f2b3e396d))
183 |
184 | ## v1.5.0 (2023-12-09)
185 |
186 | ### Features
187 |
188 | - Add coverage for setblocking failing (#19) ([`f759a08`](https://github.com/aio-libs/aiohappyeyeballs/commit/f759a08180f0237cb68d353090f7ba0efe625074))
189 | - Add cover for passing the loop (#18) ([`2d26911`](https://github.com/aio-libs/aiohappyeyeballs/commit/2d26911e9237691c168a705b2d6be2a68fa8b7ac))
190 |
191 | ## v1.4.1 (2023-12-09)
192 |
193 | ### Bug fixes
194 |
195 | - Ensure exception error is stringified (#17) ([`747cf1d`](https://github.com/aio-libs/aiohappyeyeballs/commit/747cf1d231dc427b79ff1f8128779413a50be5d8))
196 |
197 | ## v1.4.0 (2023-12-09)
198 |
199 | ### Features
200 |
201 | - Add coverage for unexpected exception (#16) ([`bad4874`](https://github.com/aio-libs/aiohappyeyeballs/commit/bad48745d3621fcbbe559d55180dc5f5856dc0fa))
202 |
203 | ## v1.3.0 (2023-12-09)
204 |
205 | ### Features
206 |
207 | - Add coverage for bind failure with local addresses (#15) ([`f71ec23`](https://github.com/aio-libs/aiohappyeyeballs/commit/f71ec23228d4dad4bc2c3a6630e6e4361b54df44))
208 |
209 | ## v1.2.0 (2023-12-09)
210 |
211 | ### Features
212 |
213 | - Add coverage for passing local addresses (#14) ([`72a92e3`](https://github.com/aio-libs/aiohappyeyeballs/commit/72a92e3a599cde082856354e806a793f2b9eff62))
214 |
215 | ## v1.1.0 (2023-12-09)
216 |
217 | ### Features
218 |
219 | - Add example usage (#13) ([`707fddc`](https://github.com/aio-libs/aiohappyeyeballs/commit/707fddcd8e8aff27af2180af6271898003ca1782))
220 |
221 | ## v1.0.0 (2023-12-09)
222 |
223 | ### Features
224 |
225 | - Rename create_connection to start_connection (#12) ([`f8b6038`](https://github.com/aio-libs/aiohappyeyeballs/commit/f8b60383d9b9f013baf421ad4e4e183559b7a705))
226 |
227 | ## v0.9.0 (2023-12-09)
228 |
229 | ### Features
230 |
231 | - Add coverage for interleave (#11) ([`62817f1`](https://github.com/aio-libs/aiohappyeyeballs/commit/62817f1473bb5702f8fa9edc6f6b24139990cd01))
232 |
233 | ## v0.8.0 (2023-12-09)
234 |
235 | ### Features
236 |
237 | - Add coverage for multi ipv6 (#10) ([`6dc8f89`](https://github.com/aio-libs/aiohappyeyeballs/commit/6dc8f89ff99a38c8ecaf8045c9afbe683d6f2c6e))
238 |
239 | ## v0.7.0 (2023-12-09)
240 |
241 | ### Features
242 |
243 | - Add coverage for ipv6 failure (#9) ([`7aee8f6`](https://github.com/aio-libs/aiohappyeyeballs/commit/7aee8f64064cfc8d79f385c4dfee45036aacd6fd))
244 |
245 | ## v0.6.0 (2023-12-09)
246 |
247 | ### Features
248 |
249 | - Improve test coverage (#8) ([`afcfe5a`](https://github.com/aio-libs/aiohappyeyeballs/commit/afcfe5a350acc50a098009617511cd9d21b22f47))
250 |
251 | ## v0.5.0 (2023-12-09)
252 |
253 | ### Features
254 |
255 | - Improve doc strings (#7) ([`3d5f7fd`](https://github.com/aio-libs/aiohappyeyeballs/commit/3d5f7fde55c4bdd4f5e6cff589ae9b47b279d663))
256 |
257 | ## v0.4.0 (2023-12-09)
258 |
259 | ### Features
260 |
261 | - Add more tests (#6) ([`4428c07`](https://github.com/aio-libs/aiohappyeyeballs/commit/4428c0714e3e100605f940eb6adee2e86788b4db))
262 |
263 | ## v0.3.0 (2023-12-09)
264 |
265 | ### Features
266 |
267 | - Optimize for single case (#5) ([`c7d72f3`](https://github.com/aio-libs/aiohappyeyeballs/commit/c7d72f3cdd13149319fc9e4848146d23bddc619b))
268 |
269 | ## v0.2.0 (2023-12-09)
270 |
271 | ### Features
272 |
273 | - Optimize for single case (#4) ([`d371c46`](https://github.com/aio-libs/aiohappyeyeballs/commit/d371c4687d3b3861a4f0287ac5229853f895807b))
274 |
275 | ## v0.1.0 (2023-12-09)
276 |
277 | ### Features
278 |
279 | - Init (#2) ([`c9a9099`](https://github.com/aio-libs/aiohappyeyeballs/commit/c9a90994a40d5f49cb37d3e2708db4b4278649ef))
280 |
281 | ## v0.0.1 (2023-12-09)
282 |
283 | ### Bug fixes
284 |
285 | - Reserve name on pypi (#1) ([`2207f8d`](https://github.com/aio-libs/aiohappyeyeballs/commit/2207f8d361af4ec0b853b07fb743eb957a0b368a))
286 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | Contributions are welcome, and they are greatly appreciated! Every little helps, and credit will always be given.
4 |
5 | You can contribute in many ways:
6 |
7 | ## Types of Contributions
8 |
9 | ### Report Bugs
10 |
11 | Report bugs to [our issue page][gh-issues]. If you are reporting a bug, please include:
12 |
13 | - Your operating system name and version.
14 | - Any details about your local setup that might be helpful in troubleshooting.
15 | - Detailed steps to reproduce the bug.
16 |
17 | ### Fix Bugs
18 |
19 | Look through the GitHub issues for bugs. Anything tagged with "bug" and "help wanted" is open to whoever wants to implement it.
20 |
21 | ### Implement Features
22 |
23 | Look through the GitHub issues for features. Anything tagged with "enhancement" and "help wanted" is open to whoever wants to implement it.
24 |
25 | ### Write Documentation
26 |
27 | aiohappyeyeballs could always use more documentation, whether as part of the official aiohappyeyeballs docs, in docstrings, or even on the web in blog posts, articles, and such.
28 |
29 | ### Submit Feedback
30 |
31 | The best way to send feedback [our issue page][gh-issues] on GitHub. If you are proposing a feature:
32 |
33 | - Explain in detail how it would work.
34 | - Keep the scope as narrow as possible, to make it easier to implement.
35 | - Remember that this is a volunteer-driven project, and that contributions are welcome 😊
36 |
37 | ## Get Started!
38 |
39 | Ready to contribute? Here's how to set yourself up for local development.
40 |
41 | 1. Fork the repo on GitHub.
42 |
43 | 2. Clone your fork locally:
44 |
45 | ```shell
46 | $ git clone git@github.com:your_name_here/aiohappyeyeballs.git
47 | ```
48 |
49 | 3. Install the project dependencies with [Poetry](https://python-poetry.org):
50 |
51 | ```shell
52 | $ poetry install
53 | ```
54 |
55 | 4. Create a branch for local development:
56 |
57 | ```shell
58 | $ git checkout -b name-of-your-bugfix-or-feature
59 | ```
60 |
61 | Now you can make your changes locally.
62 |
63 | 5. When you're done making changes, check that your changes pass our tests:
64 |
65 | ```shell
66 | $ poetry run pytest
67 | ```
68 |
69 | 6. Linting is done through [pre-commit](https://pre-commit.com). Provided you have the tool installed globally, you can run them all as one-off:
70 |
71 | ```shell
72 | $ pre-commit run -a
73 | ```
74 |
75 | Or better, install the hooks once and have them run automatically each time you commit:
76 |
77 | ```shell
78 | $ pre-commit install
79 | ```
80 |
81 | 7. Commit your changes and push your branch to GitHub:
82 |
83 | ```shell
84 | $ git add .
85 | $ git commit -m "feat(something): your detailed description of your changes"
86 | $ git push origin name-of-your-bugfix-or-feature
87 | ```
88 |
89 | Note: the commit message should follow [the conventional commits](https://www.conventionalcommits.org). We run [`commitlint` on CI](https://github.com/marketplace/actions/commit-linter) to validate it, and if you've installed pre-commit hooks at the previous step, the message will be checked at commit time.
90 |
91 | 8. Submit a pull request through the GitHub website or using the GitHub CLI (if you have it installed):
92 |
93 | ```shell
94 | $ gh pr create --fill
95 | ```
96 |
97 | ## Pull Request Guidelines
98 |
99 | We like to have the pull request open as soon as possible, that's a great place to discuss any piece of work, even unfinished. You can use draft pull request if it's still a work in progress. Here are a few guidelines to follow:
100 |
101 | 1. Include tests for feature or bug fixes.
102 | 2. Update the documentation for significant features.
103 | 3. Ensure tests are passing on CI.
104 |
105 | ## Tips
106 |
107 | To run a subset of tests:
108 |
109 | ```shell
110 | $ pytest tests
111 | ```
112 |
113 | ## Making a new release
114 |
115 | The deployment should be automated and can be triggered from the Semantic Release workflow in GitHub. The next version will be based on [the commit logs](https://python-semantic-release.readthedocs.io/en/latest/commit-log-parsing.html#commit-log-parsing). This is done by [python-semantic-release](https://python-semantic-release.readthedocs.io/en/latest/index.html) via a GitHub action.
116 |
117 | [gh-issues]: https://github.com/aio-libs/aiohappyeyeballs/issues
118 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | A. HISTORY OF THE SOFTWARE
2 | ==========================
3 |
4 | Python was created in the early 1990s by Guido van Rossum at Stichting
5 | Mathematisch Centrum (CWI, see https://www.cwi.nl) in the Netherlands
6 | as a successor of a language called ABC. Guido remains Python's
7 | principal author, although it includes many contributions from others.
8 |
9 | In 1995, Guido continued his work on Python at the Corporation for
10 | National Research Initiatives (CNRI, see https://www.cnri.reston.va.us)
11 | in Reston, Virginia where he released several versions of the
12 | software.
13 |
14 | In May 2000, Guido and the Python core development team moved to
15 | BeOpen.com to form the BeOpen PythonLabs team. In October of the same
16 | year, the PythonLabs team moved to Digital Creations, which became
17 | Zope Corporation. In 2001, the Python Software Foundation (PSF, see
18 | https://www.python.org/psf/) was formed, a non-profit organization
19 | created specifically to own Python-related Intellectual Property.
20 | Zope Corporation was a sponsoring member of the PSF.
21 |
22 | All Python releases are Open Source (see https://opensource.org for
23 | the Open Source Definition). Historically, most, but not all, Python
24 | releases have also been GPL-compatible; the table below summarizes
25 | the various releases.
26 |
27 | Release Derived Year Owner GPL-
28 | from compatible? (1)
29 |
30 | 0.9.0 thru 1.2 1991-1995 CWI yes
31 | 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
32 | 1.6 1.5.2 2000 CNRI no
33 | 2.0 1.6 2000 BeOpen.com no
34 | 1.6.1 1.6 2001 CNRI yes (2)
35 | 2.1 2.0+1.6.1 2001 PSF no
36 | 2.0.1 2.0+1.6.1 2001 PSF yes
37 | 2.1.1 2.1+2.0.1 2001 PSF yes
38 | 2.1.2 2.1.1 2002 PSF yes
39 | 2.1.3 2.1.2 2002 PSF yes
40 | 2.2 and above 2.1.1 2001-now PSF yes
41 |
42 | Footnotes:
43 |
44 | (1) GPL-compatible doesn't mean that we're distributing Python under
45 | the GPL. All Python licenses, unlike the GPL, let you distribute
46 | a modified version without making your changes open source. The
47 | GPL-compatible licenses make it possible to combine Python with
48 | other software that is released under the GPL; the others don't.
49 |
50 | (2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
51 | because its license has a choice of law clause. According to
52 | CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
53 | is "not incompatible" with the GPL.
54 |
55 | Thanks to the many outside volunteers who have worked under Guido's
56 | direction to make these releases possible.
57 |
58 |
59 | B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
60 | ===============================================================
61 |
62 | Python software and documentation are licensed under the
63 | Python Software Foundation License Version 2.
64 |
65 | Starting with Python 3.8.6, examples, recipes, and other code in
66 | the documentation are dual licensed under the PSF License Version 2
67 | and the Zero-Clause BSD license.
68 |
69 | Some software incorporated into Python is under different licenses.
70 | The licenses are listed with code falling under that license.
71 |
72 |
73 | PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
74 | --------------------------------------------
75 |
76 | 1. This LICENSE AGREEMENT is between the Python Software Foundation
77 | ("PSF"), and the Individual or Organization ("Licensee") accessing and
78 | otherwise using this software ("Python") in source or binary form and
79 | its associated documentation.
80 |
81 | 2. Subject to the terms and conditions of this License Agreement, PSF hereby
82 | grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
83 | analyze, test, perform and/or display publicly, prepare derivative works,
84 | distribute, and otherwise use Python alone or in any derivative version,
85 | provided, however, that PSF's License Agreement and PSF's notice of copyright,
86 | i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
87 | 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Python Software Foundation;
88 | All Rights Reserved" are retained in Python alone or in any derivative version
89 | prepared by Licensee.
90 |
91 | 3. In the event Licensee prepares a derivative work that is based on
92 | or incorporates Python or any part thereof, and wants to make
93 | the derivative work available to others as provided herein, then
94 | Licensee hereby agrees to include in any such work a brief summary of
95 | the changes made to Python.
96 |
97 | 4. PSF is making Python available to Licensee on an "AS IS"
98 | basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
99 | IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
100 | DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
101 | FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
102 | INFRINGE ANY THIRD PARTY RIGHTS.
103 |
104 | 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
105 | FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
106 | A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
107 | OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
108 |
109 | 6. This License Agreement will automatically terminate upon a material
110 | breach of its terms and conditions.
111 |
112 | 7. Nothing in this License Agreement shall be deemed to create any
113 | relationship of agency, partnership, or joint venture between PSF and
114 | Licensee. This License Agreement does not grant permission to use PSF
115 | trademarks or trade name in a trademark sense to endorse or promote
116 | products or services of Licensee, or any third party.
117 |
118 | 8. By copying, installing or otherwise using Python, Licensee
119 | agrees to be bound by the terms and conditions of this License
120 | Agreement.
121 |
122 |
123 | BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
124 | -------------------------------------------
125 |
126 | BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
127 |
128 | 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
129 | office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
130 | Individual or Organization ("Licensee") accessing and otherwise using
131 | this software in source or binary form and its associated
132 | documentation ("the Software").
133 |
134 | 2. Subject to the terms and conditions of this BeOpen Python License
135 | Agreement, BeOpen hereby grants Licensee a non-exclusive,
136 | royalty-free, world-wide license to reproduce, analyze, test, perform
137 | and/or display publicly, prepare derivative works, distribute, and
138 | otherwise use the Software alone or in any derivative version,
139 | provided, however, that the BeOpen Python License is retained in the
140 | Software, alone or in any derivative version prepared by Licensee.
141 |
142 | 3. BeOpen is making the Software available to Licensee on an "AS IS"
143 | basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
144 | IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
145 | DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
146 | FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
147 | INFRINGE ANY THIRD PARTY RIGHTS.
148 |
149 | 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
150 | SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
151 | AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
152 | DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
153 |
154 | 5. This License Agreement will automatically terminate upon a material
155 | breach of its terms and conditions.
156 |
157 | 6. This License Agreement shall be governed by and interpreted in all
158 | respects by the law of the State of California, excluding conflict of
159 | law provisions. Nothing in this License Agreement shall be deemed to
160 | create any relationship of agency, partnership, or joint venture
161 | between BeOpen and Licensee. This License Agreement does not grant
162 | permission to use BeOpen trademarks or trade names in a trademark
163 | sense to endorse or promote products or services of Licensee, or any
164 | third party. As an exception, the "BeOpen Python" logos available at
165 | http://www.pythonlabs.com/logos.html may be used according to the
166 | permissions granted on that web page.
167 |
168 | 7. By copying, installing or otherwise using the software, Licensee
169 | agrees to be bound by the terms and conditions of this License
170 | Agreement.
171 |
172 |
173 | CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
174 | ---------------------------------------
175 |
176 | 1. This LICENSE AGREEMENT is between the Corporation for National
177 | Research Initiatives, having an office at 1895 Preston White Drive,
178 | Reston, VA 20191 ("CNRI"), and the Individual or Organization
179 | ("Licensee") accessing and otherwise using Python 1.6.1 software in
180 | source or binary form and its associated documentation.
181 |
182 | 2. Subject to the terms and conditions of this License Agreement, CNRI
183 | hereby grants Licensee a nonexclusive, royalty-free, world-wide
184 | license to reproduce, analyze, test, perform and/or display publicly,
185 | prepare derivative works, distribute, and otherwise use Python 1.6.1
186 | alone or in any derivative version, provided, however, that CNRI's
187 | License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
188 | 1995-2001 Corporation for National Research Initiatives; All Rights
189 | Reserved" are retained in Python 1.6.1 alone or in any derivative
190 | version prepared by Licensee. Alternately, in lieu of CNRI's License
191 | Agreement, Licensee may substitute the following text (omitting the
192 | quotes): "Python 1.6.1 is made available subject to the terms and
193 | conditions in CNRI's License Agreement. This Agreement together with
194 | Python 1.6.1 may be located on the internet using the following
195 | unique, persistent identifier (known as a handle): 1895.22/1013. This
196 | Agreement may also be obtained from a proxy server on the internet
197 | using the following URL: http://hdl.handle.net/1895.22/1013".
198 |
199 | 3. In the event Licensee prepares a derivative work that is based on
200 | or incorporates Python 1.6.1 or any part thereof, and wants to make
201 | the derivative work available to others as provided herein, then
202 | Licensee hereby agrees to include in any such work a brief summary of
203 | the changes made to Python 1.6.1.
204 |
205 | 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
206 | basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
207 | IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
208 | DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
209 | FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
210 | INFRINGE ANY THIRD PARTY RIGHTS.
211 |
212 | 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
213 | 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
214 | A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
215 | OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
216 |
217 | 6. This License Agreement will automatically terminate upon a material
218 | breach of its terms and conditions.
219 |
220 | 7. This License Agreement shall be governed by the federal
221 | intellectual property law of the United States, including without
222 | limitation the federal copyright law, and, to the extent such
223 | U.S. federal law does not apply, by the law of the Commonwealth of
224 | Virginia, excluding Virginia's conflict of law provisions.
225 | Notwithstanding the foregoing, with regard to derivative works based
226 | on Python 1.6.1 that incorporate non-separable material that was
227 | previously distributed under the GNU General Public License (GPL), the
228 | law of the Commonwealth of Virginia shall govern this License
229 | Agreement only as to issues arising under or with respect to
230 | Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
231 | License Agreement shall be deemed to create any relationship of
232 | agency, partnership, or joint venture between CNRI and Licensee. This
233 | License Agreement does not grant permission to use CNRI trademarks or
234 | trade name in a trademark sense to endorse or promote products or
235 | services of Licensee, or any third party.
236 |
237 | 8. By clicking on the "ACCEPT" button where indicated, or by copying,
238 | installing or otherwise using Python 1.6.1, Licensee agrees to be
239 | bound by the terms and conditions of this License Agreement.
240 |
241 | ACCEPT
242 |
243 |
244 | CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
245 | --------------------------------------------------
246 |
247 | Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
248 | The Netherlands. All rights reserved.
249 |
250 | Permission to use, copy, modify, and distribute this software and its
251 | documentation for any purpose and without fee is hereby granted,
252 | provided that the above copyright notice appear in all copies and that
253 | both that copyright notice and this permission notice appear in
254 | supporting documentation, and that the name of Stichting Mathematisch
255 | Centrum or CWI not be used in advertising or publicity pertaining to
256 | distribution of the software without specific, written prior
257 | permission.
258 |
259 | STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
260 | THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
261 | FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
262 | FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
263 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
264 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
265 | OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
266 |
267 | ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION
268 | ----------------------------------------------------------------------
269 |
270 | Permission to use, copy, modify, and/or distribute this software for any
271 | purpose with or without fee is hereby granted.
272 |
273 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
274 | REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
275 | AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
276 | INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
277 | LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
278 | OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
279 | PERFORMANCE OF THIS SOFTWARE.
280 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # aiohappyeyeballs
2 |
3 |