Merge branch 'master' of github.com:mongodb/mongo-python-driver

This commit is contained in:
Steven Silvester 2025-03-18 07:35:44 -05:00
commit a573ba0396
No known key found for this signature in database
GPG Key ID: B1BF5EC3A8B32F91
129 changed files with 297 additions and 301 deletions

View File

@ -304,17 +304,6 @@ functions:
args:
- ${DRIVERS_TOOLS}/.evergreen/atlas/teardown-atlas-cluster.sh
"run perf tests":
- command: subprocess.exec
type: test
params:
working_dir: "src"
binary: bash
include_expansions_in_env: [SUB_TEST_NAME]
args:
- .evergreen/scripts/run-with-env.sh
- .evergreen/scripts/run-perf-tests.sh
"attach benchmark test results":
- command: attach.results
params:
@ -461,84 +450,6 @@ tasks:
commands:
- func: "download and merge coverage"
- name: "perf-6.0-standalone"
tags: ["perf"]
commands:
- func: "run server"
vars:
VERSION: "v6.0-perf"
- func: "run perf tests"
vars:
SUB_TEST_NAME: "sync"
- func: "attach benchmark test results"
- func: "send dashboard data"
- name: "perf-6.0-standalone-ssl"
tags: ["perf"]
commands:
- func: "run server"
vars:
VERSION: "v6.0-perf"
SSL: "ssl"
- func: "run perf tests"
vars:
SUB_TEST_NAME: "sync"
- func: "attach benchmark test results"
- func: "send dashboard data"
- name: "perf-8.0-standalone"
tags: ["perf"]
commands:
- func: "run server"
vars:
VERSION: "8.0"
- func: "run perf tests"
vars:
SUB_TEST_NAME: "sync"
- func: "attach benchmark test results"
- func: "send dashboard data"
- name: "perf-6.0-standalone-async"
tags: [ "perf" ]
commands:
- func: "run server"
vars:
VERSION: "v6.0-perf"
TOPOLOGY: "server"
- func: "run perf tests"
vars:
SUB_TEST_NAME: "async"
- func: "attach benchmark test results"
- func: "send dashboard data"
- name: "perf-6.0-standalone-ssl-async"
tags: [ "perf" ]
commands:
- func: "run server"
vars:
VERSION: "v6.0-perf"
TOPOLOGY: "server"
SSL: "ssl"
- func: "run perf tests"
vars:
SUB_TEST_NAME: "async"
- func: "attach benchmark test results"
- func: "send dashboard data"
- name: "perf-8.0-standalone-async"
tags: [ "perf" ]
commands:
- func: "run server"
vars:
VERSION: "8.0"
TOPOLOGY: "server"
- func: "run perf tests"
vars:
SUB_TEST_NAME: "async"
- func: "attach benchmark test results"
- func: "send dashboard data"
- name: "check-import-time"
tags: ["pr"]
commands:
@ -610,15 +521,3 @@ buildvariants:
- rhel8.7-small
tasks:
- name: "backport-pr"
- name: "perf-tests"
display_name: "Performance Benchmarks"
batchtime: 10080 # 7 days
run_on: rhel90-dbx-perf-large
tasks:
- name: "perf-6.0-standalone"
- name: "perf-6.0-standalone-ssl"
- name: "perf-8.0-standalone"
- name: "perf-6.0-standalone-async"
- name: "perf-6.0-standalone-ssl-async"
- name: "perf-8.0-standalone-async"

View File

@ -1151,6 +1151,60 @@ tasks:
SUB_TEST_NAME: gke
tags: [auth_oidc, auth_oidc_remote]
# Perf tests
- name: perf-8.0-standalone-ssl
commands:
- func: run server
vars:
VERSION: v8.0-perf
SSL: ssl
- func: run tests
vars:
TEST_NAME: perf
SUB_TEST_NAME: sync
- func: attach benchmark test results
- func: send dashboard data
tags: [perf]
- name: perf-8.0-standalone-ssl-async
commands:
- func: run server
vars:
VERSION: v8.0-perf
SSL: ssl
- func: run tests
vars:
TEST_NAME: perf
SUB_TEST_NAME: async
- func: attach benchmark test results
- func: send dashboard data
tags: [perf]
- name: perf-8.0-standalone
commands:
- func: run server
vars:
VERSION: v8.0-perf
SSL: nossl
- func: run tests
vars:
TEST_NAME: perf
SUB_TEST_NAME: sync
- func: attach benchmark test results
- func: send dashboard data
tags: [perf]
- name: perf-8.0-standalone-async
commands:
- func: run server
vars:
VERSION: v8.0-perf
SSL: nossl
- func: run tests
vars:
TEST_NAME: perf
SUB_TEST_NAME: async
- func: attach benchmark test results
- func: send dashboard data
tags: [perf]
# Server tests
- name: test-4.0-standalone-auth-ssl-sync
commands:

View File

@ -928,6 +928,15 @@ buildvariants:
- windows-64-vsMulti-small
batchtime: 10080
# Perf tests
- name: performance-benchmarks
tasks:
- name: .perf
display_name: Performance Benchmarks
run_on:
- rhel90-dbx-perf-large
batchtime: 10080
# Pyopenssl tests
- name: pyopenssl-macos-python3.9
tasks:

View File

@ -1,19 +0,0 @@
#!/bin/bash
set -o xtrace
set -o errexit
git clone --depth 1 https://github.com/mongodb/specifications.git
pushd specifications/source/benchmarking/data
tar xf extended_bson.tgz
tar xf parallel.tgz
tar xf single_and_multi_document.tgz
popd
export TEST_PATH="${PROJECT_DIRECTORY}/specifications/source/benchmarking/data"
export OUTPUT_FILE="${PROJECT_DIRECTORY}/results.json"
export PYTHON_BINARY=/opt/mongodbtoolchain/v4/bin/python3
bash ./.evergreen/just.sh setup-tests perf "${SUB_TEST_NAME}"
bash ./.evergreen/just.sh run-tests

View File

@ -31,9 +31,10 @@ if [ -f "./secrets-export.sh" ]; then
fi
# List the packages.
PIP_QUIET=0 uv run ${UV_ARGS} --with pip pip list
uv sync ${UV_ARGS} --reinstall
uv pip list
# Start the test runner.
uv run ${UV_ARGS} .evergreen/scripts/run_tests.py "$@"
uv run .evergreen/scripts/run_tests.py "$@"
popd

View File

@ -69,6 +69,7 @@ HOSTS["macos-arm64"] = Host("macos-arm64", "macos-14-arm64", "macOS Arm64", dict
HOSTS["ubuntu20"] = Host("ubuntu20", "ubuntu2004-small", "Ubuntu-20", dict())
HOSTS["ubuntu22"] = Host("ubuntu22", "ubuntu2204-small", "Ubuntu-22", dict())
HOSTS["rhel7"] = Host("rhel7", "rhel79-small", "RHEL7", dict())
HOSTS["perf"] = Host("perf", "rhel90-dbx-perf-large", "", dict())
DEFAULT_HOST = HOSTS["rhel8"]
# Other hosts
@ -722,6 +723,13 @@ def create_atlas_connect_variants():
]
def create_perf_variants():
host = HOSTS["perf"]
return [
create_variant([".perf"], "Performance Benchmarks", host=host, batchtime=BATCHTIME_WEEK)
]
def create_aws_auth_variants():
variants = []
@ -942,6 +950,26 @@ def create_enterprise_auth_tasks():
return [EvgTask(name=task_name, tags=tags, commands=[server_func, assume_func, test_func])]
def create_perf_tasks():
tasks = []
for version, ssl, sync in product(["8.0"], ["ssl", "nossl"], ["sync", "async"]):
vars = dict(VERSION=f"v{version}-perf", SSL=ssl)
server_func = FunctionCall(func="run server", vars=vars)
vars = dict(TEST_NAME="perf", SUB_TEST_NAME=sync)
test_func = FunctionCall(func="run tests", vars=vars)
attach_func = FunctionCall(func="attach benchmark test results")
send_func = FunctionCall(func="send dashboard data")
task_name = f"perf-{version}-standalone"
if ssl == "ssl":
task_name += "-ssl"
if sync == "async":
task_name += "-async"
tags = ["perf"]
commands = [server_func, test_func, attach_func, send_func]
tasks.append(EvgTask(name=task_name, tags=tags, commands=commands))
return tasks
def create_ocsp_tasks():
tasks = []
tests = [

View File

@ -1,4 +0,0 @@
#!/bin/bash
PROJECT_DIRECTORY=${PROJECT_DIRECTORY}
SUB_TEST_NAME=${SUB_TEST_NAME} bash "${PROJECT_DIRECTORY}"/.evergreen/run-perf-tests.sh

View File

@ -4,7 +4,6 @@ import json
import logging
import os
import platform
import shutil
import sys
from datetime import datetime
@ -142,10 +141,6 @@ def run() -> None:
if TEST_PERF:
handle_perf(start_time)
# Handle coverage post actions.
if os.environ.get("COVERAGE"):
shutil.rmtree(".pytest_cache", ignore_errors=True)
if __name__ == "__main__":
run()

View File

@ -43,6 +43,9 @@ EXTRAS_MAP = {
# Map the test name to test group.
GROUP_MAP = dict(mockupdb="mockupdb", perf="perf")
# The python version used for perf tests.
PERF_PYTHON_VERSION = "3.9.13"
def is_set(var: str) -> bool:
value = os.environ.get(var, "")
@ -362,6 +365,19 @@ def handle_test_env() -> None:
write_env("DISABLE_CONTEXT")
if test_name == "perf":
data_dir = ROOT / "specifications/source/benchmarking/data"
if not data_dir.exists():
run_command("git clone --depth 1 https://github.com/mongodb/specifications.git")
run_command("tar xf extended_bson.tgz", cwd=data_dir)
run_command("tar xf parallel.tgz", cwd=data_dir)
run_command("tar xf single_and_multi_document.tgz", cwd=data_dir)
write_env("TEST_PATH", str(data_dir))
write_env("OUTPUT_FILE", str(ROOT / "results.json"))
# Overwrite the UV_PYTHON from the env.sh file.
write_env("UV_PYTHON", "")
UV_ARGS.append(f"--python={PERF_PYTHON_VERSION}")
# PYTHON-4769 Run perf_test.py directly otherwise pytest's test collection negatively
# affects the benchmark results.
if sub_test_name == "sync":

View File

@ -1,9 +1,11 @@
from __future__ import annotations
import os
import shutil
import sys
from pathlib import Path
from utils import DRIVERS_TOOLS, LOGGER, run_command
from utils import DRIVERS_TOOLS, LOGGER, ROOT, run_command
TEST_NAME = os.environ.get("TEST_NAME", "unconfigured")
SUB_TEST_NAME = os.environ.get("SUB_TEST_NAME")
@ -44,10 +46,19 @@ elif TEST_NAME == "serverless":
elif TEST_NAME == "auth_aws" and sys.platform != "darwin":
run_command(f"bash {DRIVERS_TOOLS}/.evergreen/auth_aws/teardown.sh")
# Tear down perf if applicable.
elif TEST_NAME == "perf":
shutil.rmtree(ROOT / "specifications", ignore_errors=True)
Path(os.environ["OUTPUT_FILE"]).unlink(missing_ok=True)
# Tear down mog_wsgi if applicable.
elif TEST_NAME == "mod_wsgi":
from mod_wsgi_tester import teardown_mod_wsgi
teardown_mod_wsgi()
# Tear down coverage if applicable.
if os.environ.get("COVERAGE"):
shutil.rmtree(".pytest_cache", ignore_errors=True)
LOGGER.info(f"Tearing down tests of type '{TEST_NAME}'... done.")

View File

@ -50,7 +50,7 @@ TEST_SUITE_MAP = {
}
# Tests that require a sub test suite.
SUB_TEST_REQUIRED = ["auth_aws", "auth_oidc", "kms", "mod_wsgi"]
SUB_TEST_REQUIRED = ["auth_aws", "auth_oidc", "kms", "mod_wsgi", "perf"]
EXTRA_TESTS = ["mod_wsgi"]

View File

@ -23,7 +23,7 @@ jobs:
with:
persist-credentials: false
- name: Install just
uses: extractions/setup-just@v2
uses: extractions/setup-just@v3
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
@ -63,7 +63,7 @@ jobs:
with:
persist-credentials: false
- name: Install just
uses: extractions/setup-just@v2
uses: extractions/setup-just@v3
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
@ -86,7 +86,7 @@ jobs:
with:
persist-credentials: false
- name: Install just
uses: extractions/setup-just@v2
uses: extractions/setup-just@v3
- name: Install uv
uses: astral-sh/setup-uv@v5
with:
@ -114,7 +114,7 @@ jobs:
enable-cache: true
python-version: "3.9"
- name: Install just
uses: extractions/setup-just@v2
uses: extractions/setup-just@v3
- name: Install dependencies
run: just install
- name: Build docs
@ -133,7 +133,7 @@ jobs:
enable-cache: true
python-version: "3.9"
- name: Install just
uses: extractions/setup-just@v2
uses: extractions/setup-just@v3
- name: Install dependencies
run: just install
- name: Build docs
@ -155,7 +155,7 @@ jobs:
enable-cache: true
python-version: "${{matrix.python}}"
- name: Install just
uses: extractions/setup-just@v2
uses: extractions/setup-just@v3
- name: Install dependencies
run: |
just install

2
.gitignore vendored
View File

@ -27,6 +27,8 @@ expansion.yml
*expansions.yml
.evergreen/scripts/env.sh
.evergreen/scripts/test-env.sh
specifications/
results.json
# Lambda temp files
test/lambda/.aws-sam

View File

@ -297,6 +297,12 @@ The `mode` can be `standalone` or `embedded`. For the `replica_set` version of
If you are running one of the `no-responder` tests, omit the `run-server` step.
### Perf Tests
- Start the appropriate server, e.g. `just run-server --version=v8.0-perf --ssl`.
- Set up the tests with `sync` or `async`: `just setup-tests perf sync`.
- Run the tests: `just run-tests`.
## Enable Debug Logs
- Use `-o log_cli_level="DEBUG" -o log_cli=1` with `just test` or `pytest`.
- Add `log_cli_level = "DEBUG` and `log_cli = 1` to the `tool.pytest.ini_options` section in `pyproject.toml` for Evergreen patches or to enable debug logs by default on your machine.

View File

@ -3,7 +3,7 @@ API Documentation
The PyMongo distribution contains three top-level packages for
interacting with MongoDB. :mod:`bson` is an implementation of the
`BSON format <http://bsonspec.org>`_, :mod:`pymongo` is a
`BSON format <https://bsonspec.org>`_, :mod:`pymongo` is a
full-featured driver for MongoDB, and :mod:`gridfs` is a set of tools
for working with the `GridFS
<https://github.com/mongodb/specifications/blob/master/source/gridfs/gridfs-spec.md/>`_ storage

View File

@ -385,7 +385,7 @@ Indexing
Adding indexes can help accelerate certain queries and can also add additional
functionality to querying and storing documents. In this example, we'll
demonstrate how to create a `unique index
<http://mongodb.com/docs/manual/core/index-unique/>`_ on a key that rejects
<https://mongodb.com/docs/manual/core/index-unique/>`_ on a key that rejects
documents whose value for that key already exists in the index.
First, we'll need to create the index:

View File

@ -3067,7 +3067,7 @@ fixes. Highlights include:
:class:`~gridfs.grid_file.GridOutCursor`.
- Greatly improved :doc:`support for mod_wsgi </examples/mod_wsgi>` when using
PyMongo's C extensions. Read `Jesse's blog post
<http://emptysqua.re/blog/python-c-extensions-and-mod-wsgi/>`_ for details.
<https://emptysqua.re/blog/python-c-extensions-and-mod-wsgi/>`_ for details.
- Improved C extension support for ARM little endian.
Breaking changes
@ -3322,7 +3322,7 @@ Important New Features:
- Support for mongos failover.
- A new :meth:`~pymongo.collection.Collection.aggregate` method to support
MongoDB's new `aggregation framework
<http://mongodb.com/docs/manual/applications/aggregation/>`_.
<https://mongodb.com/docs/manual/applications/aggregation/>`_.
- Support for legacy Java and C# byte order when encoding and decoding UUIDs.
- Support for connecting directly to an arbiter.
@ -3686,7 +3686,7 @@ Changes in Version 1.9 (2010/09/28)
Version 1.9 adds a new package to the PyMongo distribution,
:mod:`bson`. :mod:`bson` contains all of the `BSON
<http://bsonspec.org>`_ encoding and decoding logic, and the BSON
<https://bsonspec.org>`_ encoding and decoding logic, and the BSON
types that were formerly in the :mod:`pymongo` package. The following
modules have been renamed:
@ -3819,7 +3819,7 @@ Changes in Version 1.7 (2010/06/17)
Version 1.7 is a recommended upgrade for all PyMongo users. The full
release notes are below, and some more in depth discussion of the
highlights is `here
<http://dirolf.com/2010/06/17/pymongo-1.7-released.html>`_.
<https://dirolf.com/2010/06/17/pymongo-1.7-released.html>`_.
- no longer attempt to build the C extension on big-endian systems.
- added :class:`~bson.min_key.MinKey` and
@ -3870,7 +3870,7 @@ The biggest change in version 1.6 is a complete re-implementation of
:mod:`gridfs` with a lot of improvements over the old
implementation. There are many details and examples of using the new
API in `this blog post
<http://dirolf.com/2010/03/29/new-gridfs-implementation-for-pymongo.html>`_. The
<https://dirolf.com/2010/03/29/new-gridfs-implementation-for-pymongo.html>`_. The
old API has been removed in this version, so existing code will need
to be modified before upgrading to 1.6.

View File

@ -52,7 +52,7 @@ deprecated PyMongo features.
.. seealso:: The Python documentation on `the warnings module`_,
and `the -W command line option`_.
.. _semantic versioning: http://semver.org/
.. _semantic versioning: https://semver.org/
.. _DeprecationWarning:
https://docs.python.org/3/library/exceptions.html#DeprecationWarning

View File

@ -88,7 +88,7 @@ linkcheck_ignore = [
"https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-monitoring.md#requesting-an-immediate-check",
"https://github.com/mongodb/libmongocrypt/blob/master/bindings/python/README.rst#installing-from-source",
r"https://wiki.centos.org/[\w/]*",
r"http://sourceforge.net/",
r"https://sourceforge.net/",
]
# -- Options for extensions ----------------------------------------------------

View File

@ -87,4 +87,4 @@ you can add computed fields, create new virtual sub-objects, and extract
sub-fields into the top-level of results.
.. seealso:: The full documentation for MongoDB's `aggregation framework
<http://mongodb.com/docs/manual/applications/aggregation>`_
<https://mongodb.com/docs/manual/applications/aggregation>`_

View File

@ -191,7 +191,7 @@ Two extra ``authMechanismProperties`` are supported on Windows platforms:
>>> uri = "mongodb://mongodbuser%40EXAMPLE.COM@example.com/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_REALM:otherrealm"
.. _kerberos: http://pypi.python.org/pypi/kerberos
.. _kerberos: https://pypi.python.org/pypi/kerberos
.. _pykerberos: https://pypi.python.org/pypi/pykerberos
.. _winkerberos: https://pypi.python.org/pypi/winkerberos/

View File

@ -67,7 +67,7 @@ Versions of PyMongo before 3.0 included a ``copy_database`` helper method,
but it has been removed.
.. _copyDatabase function in the mongo shell:
http://mongodb.com/docs/manual/reference/method/db.copyDatabase/
https://mongodb.com/docs/manual/reference/method/db.copyDatabase/
.. _Copy a Database:
https://www.mongodb.com/docs/database-tools/mongodump/mongodump-examples/#copy-and-clone-databases

View File

@ -1,7 +1,7 @@
Gevent
======
PyMongo supports `Gevent <http://www.gevent.org/>`_. Simply call Gevent's
PyMongo supports `Gevent <https://www.gevent.org/>`_. Simply call Gevent's
``monkey.patch_all()`` before loading any other modules:
.. code-block:: pycon

View File

@ -14,7 +14,7 @@ objects (e.g. files) in MongoDB.
.. seealso:: The API docs for :mod:`gridfs`.
.. seealso:: `This blog post
<http://dirolf.com/2010/03/29/new-gridfs-implementation-for-pymongo.html>`_
<https://dirolf.com/2010/03/29/new-gridfs-implementation-for-pymongo.html>`_
for some motivation behind this API.
Setup

View File

@ -2,7 +2,7 @@ High Availability and PyMongo
=============================
PyMongo makes it easy to write highly available applications whether
you use a `single replica set <http://dochub.mongodb.org/core/rs>`_
you use a `single replica set <https://dochub.mongodb.org/core/rs>`_
or a `large sharded cluster
<https://www.mongodb.com/docs/manual/sharding/>`_.
@ -10,17 +10,17 @@ Connecting to a Replica Set
---------------------------
PyMongo makes working with `replica sets
<http://dochub.mongodb.org/core/rs>`_ easy. Here we'll launch a new
<https://dochub.mongodb.org/core/rs>`_ easy. Here we'll launch a new
replica set and show how to handle both initialization and normal
connections with PyMongo.
.. seealso:: The MongoDB documentation on `replication <http://dochub.mongodb.org/core/rs>`_.
.. seealso:: The MongoDB documentation on `replication <https://dochub.mongodb.org/core/rs>`_.
Starting a Replica Set
~~~~~~~~~~~~~~~~~~~~~~
The main `replica set documentation
<http://dochub.mongodb.org/core/rs>`_ contains extensive information
<https://dochub.mongodb.org/core/rs>`_ contains extensive information
about setting up a new replica set or migrating an existing MongoDB
setup, be sure to check that out. Here, we'll just do the bare minimum
to get a three node replica set setup locally.

View File

@ -6,7 +6,7 @@ of how to accomplish specific tasks with MongoDB and PyMongo.
Unless otherwise noted, all examples assume that a MongoDB instance is
running on the default host and port. Assuming you have `downloaded
and installed <http://www.mongodb.org/display/DOCS/Getting+Started>`_
and installed <https://www.mongodb.org/display/DOCS/Getting+Started>`_
MongoDB, you can start it like so:
.. code-block:: bash

View File

@ -3,7 +3,7 @@ TLS/SSL and PyMongo
PyMongo supports connecting to MongoDB over TLS/SSL. This guide covers the
configuration options supported by PyMongo. See `the server documentation
<http://mongodb.com/docs/manual/tutorial/configure-ssl/>`_ to configure
<https://mongodb.com/docs/manual/tutorial/configure-ssl/>`_ to configure
MongoDB.
.. warning:: Industry best practices recommend, and some regulations require,

View File

@ -53,9 +53,9 @@ a non `async-signal-safe`_ function. For examples of deadlocks or crashes
that could occur see `PYTHON-3406`_.
For a long but interesting read about the problems of Python locks in
multithreaded contexts with ``fork()``, see http://bugs.python.org/issue6721.
multithreaded contexts with ``fork()``, see https://bugs.python.org/issue6721.
.. _not fork-safe: http://bugs.python.org/issue6721
.. _not fork-safe: https://bugs.python.org/issue6721
.. _OpenSSL: https://github.com/openssl/openssl/issues/19066
.. _fork(): https://man7.org/linux/man-pages/man2/fork.2.html
.. _signal-safety(7): https://man7.org/linux/man-pages/man7/signal-safety.7.html
@ -174,10 +174,10 @@ Does PyMongo support asynchronous frameworks like Gevent, asyncio, Tornado, or T
PyMongo fully supports :doc:`Gevent <examples/gevent>`.
To use MongoDB with `asyncio <https://docs.python.org/3/library/asyncio.html>`_
or `Tornado <http://www.tornadoweb.org/>`_, see the
or `Tornado <https://www.tornadoweb.org/>`_, see the
`Motor <https://github.com/mongodb/motor>`_ project.
For `Twisted <http://twistedmatrix.com/>`_, see `TxMongo
For `Twisted <https://twistedmatrix.com/>`_, see `TxMongo
<https://github.com/twisted/txmongo>`_. Its stated mission is to keep feature
parity with PyMongo.
@ -381,7 +381,7 @@ Can you add attribute style access for documents?
-------------------------------------------------
This request has come up a number of times but we've decided not to
implement anything like this. The relevant `jira case
<http://jira.mongodb.org/browse/PYTHON-35>`_ has some information
<https://jira.mongodb.org/browse/PYTHON-35>`_ has some information
about the decision, but here is a brief summary:
1. This will pollute the attribute namespace for documents, so could
@ -451,7 +451,7 @@ in Flask_ (other web frameworks are similar)::
How can I use PyMongo from Django?
----------------------------------
`Django <http://www.djangoproject.com/>`_ is a popular Python web
`Django <https://www.djangoproject.com/>`_ is a popular Python web
framework. Django includes an ORM, :mod:`django.db`. Currently,
there's no official MongoDB backend for Django.
@ -468,7 +468,7 @@ using just MongoDB, but most of what Django provides can still be
used.
One project which should make working with MongoDB and Django easier
is `mango <http://github.com/vpulim/mango>`_. Mango is a set of
is `mango <https://github.com/vpulim/mango>`_. Mango is a set of
MongoDB backends for Django sessions and authentication (bypassing
:mod:`django.db` entirely).

View File

@ -9,7 +9,7 @@ PyMongo |release| Documentation
Overview
--------
**PyMongo** is a Python distribution containing tools for working with
`MongoDB <http://www.mongodb.org>`_, and is the recommended way to
`MongoDB <https://www.mongodb.org>`_, and is the recommended way to
work with MongoDB from Python. This documentation attempts to explain
everything you need to know to use **PyMongo**.
@ -81,7 +81,7 @@ Issues
------
All issues should be reported (and can be tracked / voted for /
commented on) at the main `MongoDB JIRA bug tracker
<http://jira.mongodb.org/browse/PYTHON>`_, in the "Python Driver"
<https://jira.mongodb.org/browse/PYTHON>`_, in the "Python Driver"
project.
Feature Requests / Feedback
@ -94,7 +94,7 @@ Contributing
**PyMongo** has a large :doc:`community <contributors>` and
contributions are always encouraged. Contributions can be as simple as
minor tweaks to this documentation. To contribute, fork the project on
`GitHub <http://github.com/mongodb/mongo-python-driver/>`_ and send a
`GitHub <https://github.com/mongodb/mongo-python-driver/>`_ and send a
pull request.
Changes

View File

@ -3,7 +3,7 @@ Installing / Upgrading
.. highlight:: bash
**PyMongo** is in the `Python Package Index
<http://pypi.python.org/pypi/pymongo/>`_.
<https://pypi.python.org/pypi/pymongo/>`_.
.. warning:: **Do not install the "bson" package from pypi.** PyMongo comes
with its own bson package; doing "pip install bson"
@ -12,7 +12,7 @@ Installing / Upgrading
Installing with pip
-------------------
We recommend using `pip <http://pypi.python.org/pypi/pip>`_
We recommend using `pip <https://pypi.python.org/pypi/pip>`_
to install pymongo on all platforms::
$ python3 -m pip install pymongo
@ -136,7 +136,7 @@ is a workaround::
# For some Python builds from python.org
$ env ARCHFLAGS='-arch i386 -arch x86_64' python -m pip install pymongo
See `http://bugs.python.org/issue11623 <http://bugs.python.org/issue11623>`_
See `https://bugs.python.org/issue11623 <https://bugs.python.org/issue11623>`_
for a more detailed explanation.
**Lion (10.7) and newer** - PyMongo's C extensions can be built against

View File

@ -21,7 +21,7 @@ if errorlevel 9009 (
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.http://sphinx-doc.org/
echo.https://sphinx-doc.org/
exit /b 1
)

View File

@ -31,7 +31,7 @@ MongoEngine
layer on top of PyMongo. It allows you to define schemas for
documents and query collections using syntax inspired by the Django
ORM. The code is available on `GitHub
<http://github.com/mongoengine/mongoengine>`_; for more information, see
<https://github.com/mongoengine/mongoengine>`_; for more information, see
the `tutorial <https://docs.mongoengine.org/tutorial.html>`_.
MincePy
@ -47,17 +47,15 @@ Ming
`Ming <https://ming.readthedocs.io/en/latest/>`_ is a
library that allows you to enforce schemas on a MongoDB database in
your Python application. It was developed by `SourceForge
<http://sourceforge.net/>`_ in the course of their migration to
MongoDB. See the `introductory blog post
<http://blog.pythonisito.com/2009/12/ming-01-released-python-library-for.html>`_
for more details.
<https://sourceforge.net/>`_ in the course of their migration to
MongoDB.
MotorEngine
`MotorEngine <https://motorengine.readthedocs.io/>`_ is a port of
MongoEngine to Motor, for asynchronous access with Tornado.
It implements the same modeling APIs to be data-portable, meaning that a
model defined in MongoEngine can be read in MotorEngine. The source is
`available on GitHub <http://github.com/heynemann/motorengine>`_.
`available on GitHub <https://github.com/heynemann/motorengine>`_.
uMongo
`uMongo <https://umongo.readthedocs.io/>`_ is a Python MongoDB ODM.
@ -89,12 +87,12 @@ PyMODM
<https://pymodm.readthedocs.io/en/stable/>`_.
MongoKit
The `MongoKit <http://github.com/namlook/mongokit>`_ framework
The `MongoKit <https://github.com/namlook/mongokit>`_ framework
is an ORM-like layer on top of PyMongo. There is also a MongoKit
`google group <http://groups.google.com/group/mongokit>`_.
`google group <https://groups.google.com/group/mongokit>`_.
Minimongo
`minimongo <http://pypi.python.org/pypi/minimongo>`_ is a lightweight,
`minimongo <https://pypi.python.org/pypi/minimongo>`_ is a lightweight,
pythonic interface to MongoDB. It retains pymongo's query and update API,
and provides a number of additional features, including a simple
document-oriented interface, connection pooling, index management, and
@ -102,15 +100,15 @@ Minimongo
<https://github.com/MiniMongo/minimongo>`_.
Manga
`Manga <http://pypi.python.org/pypi/manga>`_ aims to be a simpler ORM-like
`Manga <https://pypi.python.org/pypi/manga>`_ aims to be a simpler ORM-like
layer on top of PyMongo. The syntax for defining schema is inspired by the
Django ORM, but Pymongo's query language is maintained. The source `is on
GitHub <http://github.com/wladston/manga>`_.
GitHub <https://github.com/wladston/manga>`_.
Humongolus
`Humongolus <https://github.com/entone/Humongolus>`_ is a lightweight ORM
framework for Python and MongoDB. The name comes from the combination of
MongoDB and `Homunculus <http://en.wikipedia.org/wiki/Homunculus>`_ (the
MongoDB and `Homunculus <https://en.wikipedia.org/wiki/Homunculus>`_ (the
concept of a miniature though fully formed human body). Humongolus allows
you to create models/schemas with robust validation. It attempts to be as
pythonic as possible and exposes the pymongo cursor objects whenever
@ -133,30 +131,30 @@ various Python frameworks and libraries.
database backend for Django that completely integrates with its ORM.
For more information `see the tutorial
<https://django-mongodb-engine.readthedocs.io/en/latest/tutorial.html>`_.
* `mango <http://github.com/vpulim/mango>`_ provides MongoDB backends for
* `mango <https://github.com/vpulim/mango>`_ provides MongoDB backends for
Django sessions and authentication (bypassing :mod:`django.db` entirely).
* `Django MongoEngine
<https://github.com/MongoEngine/django-mongoengine>`_ is a MongoDB backend for
Django, an `example:
<https://github.com/MongoEngine/django-mongoengine/tree/master/example/tumblelog>`_.
For more information see `<https://django-mongoengine.readthedocs.io/en/latest/>`_
* `mongodb_beaker <http://pypi.python.org/pypi/mongodb_beaker>`_ is a
* `mongodb_beaker <https://pypi.python.org/pypi/mongodb_beaker>`_ is a
project to enable using MongoDB as a backend for `beakers <https://beaker.readthedocs.io/en/latest/>`_ caching / session system.
`The source is on GitHub <http://github.com/bwmcadams/mongodb_beaker>`_.
`The source is on GitHub <https://github.com/bwmcadams/mongodb_beaker>`_.
* `Log4Mongo <https://github.com/log4mongo/log4mongo-python>`_ is a flexible
Python logging handler that can store logs in MongoDB using normal and capped
collections.
* `MongoLog <http://github.com/puentesarrin/mongodb-log/>`_ is a Python logging
* `MongoLog <https://github.com/puentesarrin/mongodb-log/>`_ is a Python logging
handler that stores logs in MongoDB using a capped collection.
* `rod.recipe.mongodb <http://pypi.python.org/pypi/rod.recipe.mongodb/>`_ is a
* `rod.recipe.mongodb <https://pypi.python.org/pypi/rod.recipe.mongodb/>`_ is a
ZC Buildout recipe for downloading and installing MongoDB.
* `mongobox <http://github.com/theorm/mongobox>`_ is a tool to run a sandboxed
* `mongobox <https://github.com/theorm/mongobox>`_ is a tool to run a sandboxed
MongoDB instance from within a python app.
* `Flask-MongoAlchemy <http://github.com/cobrateam/flask-mongoalchemy/>`_ Add
* `Flask-MongoAlchemy <https://github.com/cobrateam/flask-mongoalchemy/>`_ Add
Flask support for MongoDB using MongoAlchemy.
* `Flask-MongoKit <http://github.com/jarus/flask-mongokit/>`_ Flask extension
* `Flask-MongoKit <https://github.com/jarus/flask-mongokit/>`_ Flask extension
to better integrate MongoKit into Flask.
* `Flask-PyMongo <http://github.com/dcrosta/flask-pymongo/>`_ Flask-PyMongo
* `Flask-PyMongo <https://github.com/dcrosta/flask-pymongo/>`_ Flask-PyMongo
bridges Flask and PyMongo.
Alternative Drivers

View File

@ -375,7 +375,7 @@ Indexing
Adding indexes can help accelerate certain queries and can also add additional
functionality to querying and storing documents. In this example, we'll
demonstrate how to create a `unique index
<http://mongodb.com/docs/manual/core/index-unique/>`_ on a key that rejects
<https://mongodb.com/docs/manual/core/index-unique/>`_ on a key that rejects
documents whose value for that key already exists in the index.
First, we'll need to create the index:

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@ -55,7 +55,7 @@ DESCENDING = -1
GEO2D = "2d"
"""Index specifier for a 2-dimensional `geospatial index`_.
.. _geospatial index: http://mongodb.com/docs/manual/core/2d/
.. _geospatial index: https://mongodb.com/docs/manual/core/2d/
"""
GEOSPHERE = "2dsphere"
@ -63,7 +63,7 @@ GEOSPHERE = "2dsphere"
.. versionadded:: 2.5
.. _spherical geospatial index: http://mongodb.com/docs/manual/core/2dsphere/
.. _spherical geospatial index: https://mongodb.com/docs/manual/core/2dsphere/
"""
HASHED = "hashed"
@ -71,7 +71,7 @@ HASHED = "hashed"
.. versionadded:: 2.5
.. _hashed index: http://mongodb.com/docs/manual/core/index-hashed/
.. _hashed index: https://mongodb.com/docs/manual/core/index-hashed/
"""
TEXT = "text"
@ -83,7 +83,7 @@ TEXT = "text"
.. versionadded:: 2.7.1
.. _text index: http://mongodb.com/docs/manual/core/index-text/
.. _text index: https://mongodb.com/docs/manual/core/index-text/
"""
from pymongo import _csot

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@ -192,7 +192,7 @@ class AsyncMongoClient(common.BaseObject, Generic[_DocumentType]):
execute.
The `host` parameter can be a full `mongodb URI
<http://dochub.mongodb.org/core/connections>`_, in addition to
<https://dochub.mongodb.org/core/connections>`_, in addition to
a simple hostname. It can also be a list of hostnames but no more
than one URI. Any port specified in the host string(s) will override
the `port` parameter. For username and

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@ -964,7 +964,7 @@ class PoolState:
# Do *not* explicitly inherit from object or Jython won't call __del__
# http://bugs.jython.org/issue1057
# https://bugs.jython.org/issue1057
class Pool:
def __init__(
self,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
@ -160,7 +160,7 @@ def clean_node(node: str) -> tuple[str, int]:
host, port = partition_node(node)
# Normalize hostname to lowercase, since DNS is case-insensitive:
# http://tools.ietf.org/html/rfc4343
# https://tools.ietf.org/html/rfc4343
# This prevents useless rediscovery if "foo.com" is in the seed list but
# "FOO.com" is in the hello response.
return host.lower(), port

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# may not use this file except in compliance with the License. You
# may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

View File

@ -4,7 +4,7 @@
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,

Some files were not shown because too many files have changed in this diff Show More