diff --git a/CHANGELOG.md b/CHANGELOG.md index 7820b89f68..96b86707d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,11 @@ A brief description of the categories of changes: `data`. Note, that the `@pypi_foo//:pkg` labels are still present for backwards compatibility. +* (pip_parse) The parameter `requirement_cycles` may be provided a map of names + to lists of requirements which form a dependency cycle. `pip_parse` will break + the cycle for you transparently. This behavior is also available under bzlmod + as `pip.parse(requirement_cycles={})`. + * (gazelle) The flag `use_pip_repository_aliases` is now set to `True` by default, which will cause `gazelle` to change third-party dependency labels from `@pip_foo//:pkg` to `@pip//foo` by default. diff --git a/docs/sphinx/pypi-dependencies.md b/docs/sphinx/pypi-dependencies.md index ee19fbe90c..9838f29deb 100644 --- a/docs/sphinx/pypi-dependencies.md +++ b/docs/sphinx/pypi-dependencies.md @@ -130,6 +130,86 @@ Any 'extras' specified in the requirements lock file will be automatically added as transitive dependencies of the package. In the example above, you'd just put `requirement("useful_dep")`. +### Packaging cycles + +Sometimes PyPi packages contain dependency cycles -- for instance `sphinx` +depends on `sphinxcontrib-serializinghtml`. When using them as `requirement()`s, +ala + +``` +py_binary( + name = "doctool", + ... + deps = [ + requirement("sphinx"), + ] +) +``` + +Bazel will protest because it doesn't support cycles in the build graph -- + +``` +ERROR: .../external/pypi_sphinxcontrib_serializinghtml/BUILD.bazel:44:6: in alias rule @pypi_sphinxcontrib_serializinghtml//:pkg: cycle in dependency graph: + //:doctool (...) + @pypi//sphinxcontrib_serializinghtml:pkg (...) +.-> @pypi_sphinxcontrib_serializinghtml//:pkg (...) +| @pypi_sphinxcontrib_serializinghtml//:_pkg (...) +| @pypi_sphinx//:pkg (...) +| @pypi_sphinx//:_pkg (...) +`-- @pypi_sphinxcontrib_serializinghtml//:pkg (...) +``` + +The `requirement_cycles` argument allows you to work around these issues by +specifying groups of packages which form cycles. `pip_parse` will transparently +fix the cycles for you and provide the cyclic dependencies simultaneously. + +``` +pip_parse( + ... + requirement_cycles = { + "sphinx": [ + "sphinx", + "sphinxcontrib-serializinghtml", + ] + }, +) +``` + +`pip_parse` supports fixing multiple cycles simultaneously, however cycles must +be distinct. `apache-airflow` for instance has dependency cycles with a number +of its optional dependencies, which means those optional dependencies must all +be a part of the `airflow` cycle. For instance -- + +``` +pip_parse( + ... + requirement_cycles = { + "airflow": [ + "apache-airflow", + "apache-airflow-providers-common-sql", + "apache-airflow-providers-postgres", + "apache-airflow-providers-sqlite", + ] + } +) +``` + +Alternatively, one could resolve the cycle by removing one leg of it. + +For example while `apache-airflow-providers-sqlite` is "baked into" the Airflow +package, `apache-airflow-providers-postgres` is not and is an optional feature. +Rather than listing `apache-airflow[postgres]` in your `requirements.txt` which +would expose a cycle via the extra, one could either _manually_ depend on +`apache-airflow` and `apache-airflow-providers-postgres` separately as +requirements. Bazel rules which need only `apache-airflow` can take it as a +dependency, and rules which explicitly want to mix in +`apache-airflow-providers-postgres` now can. + +Alternatively, one could use `rules_python`'s patching features to remove one +leg of the dependency manually. For instance by making +`apache-airflow-providers-postgres` not explicitly depend on `apache-airflow` or +perhaps `apache-airflow-providers-common-sql`. + ## Consuming Wheel Dists Directly If you need to depend on the wheel dists themselves, for instance, to pass them diff --git a/examples/build_file_generation/BUILD.bazel b/examples/build_file_generation/BUILD.bazel index 7b9766eb1a..4d270dd850 100644 --- a/examples/build_file_generation/BUILD.bazel +++ b/examples/build_file_generation/BUILD.bazel @@ -65,6 +65,7 @@ py_library( deps = [ "//random_number_generator", "@pip//flask", + "@pip//sphinx", ], ) diff --git a/examples/build_file_generation/WORKSPACE b/examples/build_file_generation/WORKSPACE index c656d5b352..e283260ea2 100644 --- a/examples/build_file_generation/WORKSPACE +++ b/examples/build_file_generation/WORKSPACE @@ -94,6 +94,19 @@ load("@rules_python//python:pip.bzl", "pip_parse") # You can instead check this `requirements.bzl` file into your repo. pip_parse( name = "pip", + + # Requirement groups allow Bazel to tolerate PyPi cycles by putting dependencies + # which are known to form cycles into groups together. + experimental_requirement_cycles = { + "sphinx": [ + "sphinx", + "sphinxcontrib-qthelp", + "sphinxcontrib-htmlhelp", + "sphinxcontrib-devhelp", + "sphinxcontrib-applehelp", + "sphinxcontrib-serializinghtml", + ], + }, # (Optional) You can provide a python_interpreter (path) or a python_interpreter_target (a Bazel target, that # acts as an executable). The latter can be anything that could be used as Python interpreter. E.g.: # 1. Python interpreter that you compile in the build file. diff --git a/examples/build_file_generation/__init__.py b/examples/build_file_generation/__init__.py index add73dafcc..37dea1b0de 100644 --- a/examples/build_file_generation/__init__.py +++ b/examples/build_file_generation/__init__.py @@ -14,6 +14,7 @@ from flask import Flask, jsonify from random_number_generator import generate_random_number +import sphinx # noqa app = Flask(__name__) diff --git a/examples/build_file_generation/gazelle_python.yaml b/examples/build_file_generation/gazelle_python.yaml index b3757a3126..6761b8dacf 100644 --- a/examples/build_file_generation/gazelle_python.yaml +++ b/examples/build_file_generation/gazelle_python.yaml @@ -5,6 +5,42 @@ manifest: modules_mapping: + alabaster: alabaster + alabaster.support: alabaster + babel: Babel + babel.core: Babel + babel.dates: Babel + babel.languages: Babel + babel.lists: Babel + babel.localedata: Babel + babel.localtime: Babel + babel.messages: Babel + babel.messages.catalog: Babel + babel.messages.checkers: Babel + babel.messages.extract: Babel + babel.messages.frontend: Babel + babel.messages.jslexer: Babel + babel.messages.mofile: Babel + babel.messages.plurals: Babel + babel.messages.pofile: Babel + babel.numbers: Babel + babel.plural: Babel + babel.support: Babel + babel.units: Babel + babel.util: Babel + certifi: certifi + certifi.core: certifi + charset_normalizer: charset_normalizer + charset_normalizer.api: charset_normalizer + charset_normalizer.cd: charset_normalizer + charset_normalizer.cli: charset_normalizer + charset_normalizer.constant: charset_normalizer + charset_normalizer.legacy: charset_normalizer + charset_normalizer.md: charset_normalizer + charset_normalizer.md__mypyc: charset_normalizer + charset_normalizer.models: charset_normalizer + charset_normalizer.utils: charset_normalizer + charset_normalizer.version: charset_normalizer click: click click.core: click click.decorators: click @@ -17,6 +53,128 @@ manifest: click.testing: click click.types: click click.utils: click + docutils: docutils + docutils.core: docutils + docutils.examples: docutils + docutils.frontend: docutils + docutils.io: docutils + docutils.languages: docutils + docutils.languages.af: docutils + docutils.languages.ar: docutils + docutils.languages.ca: docutils + docutils.languages.cs: docutils + docutils.languages.da: docutils + docutils.languages.de: docutils + docutils.languages.en: docutils + docutils.languages.eo: docutils + docutils.languages.es: docutils + docutils.languages.fa: docutils + docutils.languages.fi: docutils + docutils.languages.fr: docutils + docutils.languages.gl: docutils + docutils.languages.he: docutils + docutils.languages.it: docutils + docutils.languages.ja: docutils + docutils.languages.ko: docutils + docutils.languages.lt: docutils + docutils.languages.lv: docutils + docutils.languages.nl: docutils + docutils.languages.pl: docutils + docutils.languages.pt_br: docutils + docutils.languages.ru: docutils + docutils.languages.sk: docutils + docutils.languages.sv: docutils + docutils.languages.uk: docutils + docutils.languages.zh_cn: docutils + docutils.languages.zh_tw: docutils + docutils.nodes: docutils + docutils.parsers: docutils + docutils.parsers.commonmark_wrapper: docutils + docutils.parsers.null: docutils + docutils.parsers.recommonmark_wrapper: docutils + docutils.parsers.rst: docutils + docutils.parsers.rst.directives: docutils + docutils.parsers.rst.directives.admonitions: docutils + docutils.parsers.rst.directives.body: docutils + docutils.parsers.rst.directives.html: docutils + docutils.parsers.rst.directives.images: docutils + docutils.parsers.rst.directives.misc: docutils + docutils.parsers.rst.directives.parts: docutils + docutils.parsers.rst.directives.references: docutils + docutils.parsers.rst.directives.tables: docutils + docutils.parsers.rst.languages: docutils + docutils.parsers.rst.languages.af: docutils + docutils.parsers.rst.languages.ar: docutils + docutils.parsers.rst.languages.ca: docutils + docutils.parsers.rst.languages.cs: docutils + docutils.parsers.rst.languages.da: docutils + docutils.parsers.rst.languages.de: docutils + docutils.parsers.rst.languages.en: docutils + docutils.parsers.rst.languages.eo: docutils + docutils.parsers.rst.languages.es: docutils + docutils.parsers.rst.languages.fa: docutils + docutils.parsers.rst.languages.fi: docutils + docutils.parsers.rst.languages.fr: docutils + docutils.parsers.rst.languages.gl: docutils + docutils.parsers.rst.languages.he: docutils + docutils.parsers.rst.languages.it: docutils + docutils.parsers.rst.languages.ja: docutils + docutils.parsers.rst.languages.ko: docutils + docutils.parsers.rst.languages.lt: docutils + docutils.parsers.rst.languages.lv: docutils + docutils.parsers.rst.languages.nl: docutils + docutils.parsers.rst.languages.pl: docutils + docutils.parsers.rst.languages.pt_br: docutils + docutils.parsers.rst.languages.ru: docutils + docutils.parsers.rst.languages.sk: docutils + docutils.parsers.rst.languages.sv: docutils + docutils.parsers.rst.languages.uk: docutils + docutils.parsers.rst.languages.zh_cn: docutils + docutils.parsers.rst.languages.zh_tw: docutils + docutils.parsers.rst.roles: docutils + docutils.parsers.rst.states: docutils + docutils.parsers.rst.tableparser: docutils + docutils.readers: docutils + docutils.readers.doctree: docutils + docutils.readers.pep: docutils + docutils.readers.standalone: docutils + docutils.statemachine: docutils + docutils.transforms: docutils + docutils.transforms.components: docutils + docutils.transforms.frontmatter: docutils + docutils.transforms.misc: docutils + docutils.transforms.parts: docutils + docutils.transforms.peps: docutils + docutils.transforms.references: docutils + docutils.transforms.universal: docutils + docutils.transforms.writer_aux: docutils + docutils.utils: docutils + docutils.utils.code_analyzer: docutils + docutils.utils.error_reporting: docutils + docutils.utils.math: docutils + docutils.utils.math.latex2mathml: docutils + docutils.utils.math.math2html: docutils + docutils.utils.math.tex2mathml_extern: docutils + docutils.utils.math.tex2unichar: docutils + docutils.utils.math.unichar2tex: docutils + docutils.utils.punctuation_chars: docutils + docutils.utils.roman: docutils + docutils.utils.smartquotes: docutils + docutils.utils.urischemes: docutils + docutils.writers: docutils + docutils.writers.docutils_xml: docutils + docutils.writers.html4css1: docutils + docutils.writers.html5_polyglot: docutils + docutils.writers.latex2e: docutils + docutils.writers.manpage: docutils + docutils.writers.null: docutils + docutils.writers.odf_odt: docutils + docutils.writers.odf_odt.prepstyles: docutils + docutils.writers.odf_odt.pygmentsformatter: docutils + docutils.writers.pep_html: docutils + docutils.writers.pseudoxml: docutils + docutils.writers.s5_html: docutils + docutils.writers.xetex: docutils flask: Flask flask.app: Flask flask.blueprints: Flask @@ -38,6 +196,16 @@ manifest: flask.typing: Flask flask.views: Flask flask.wrappers: Flask + idna: idna + idna.codec: idna + idna.compat: idna + idna.core: idna + idna.idnadata: idna + idna.intranges: idna + idna.package_data: idna + idna.uts46data: idna + imagesize: imagesize + imagesize.imagesize: imagesize importlib_metadata: importlib_metadata itsdangerous: itsdangerous itsdangerous.encoding: itsdangerous @@ -70,6 +238,548 @@ manifest: jinja2.utils: Jinja2 jinja2.visitor: Jinja2 markupsafe: MarkupSafe + packaging: packaging + packaging.markers: packaging + packaging.metadata: packaging + packaging.requirements: packaging + packaging.specifiers: packaging + packaging.tags: packaging + packaging.utils: packaging + packaging.version: packaging + pygments: Pygments + pygments.cmdline: Pygments + pygments.console: Pygments + pygments.filter: Pygments + pygments.filters: Pygments + pygments.formatter: Pygments + pygments.formatters: Pygments + pygments.formatters.bbcode: Pygments + pygments.formatters.groff: Pygments + pygments.formatters.html: Pygments + pygments.formatters.img: Pygments + pygments.formatters.irc: Pygments + pygments.formatters.latex: Pygments + pygments.formatters.other: Pygments + pygments.formatters.pangomarkup: Pygments + pygments.formatters.rtf: Pygments + pygments.formatters.svg: Pygments + pygments.formatters.terminal: Pygments + pygments.formatters.terminal256: Pygments + pygments.lexer: Pygments + pygments.lexers: Pygments + pygments.lexers.actionscript: Pygments + pygments.lexers.ada: Pygments + pygments.lexers.agile: Pygments + pygments.lexers.algebra: Pygments + pygments.lexers.ambient: Pygments + pygments.lexers.amdgpu: Pygments + pygments.lexers.ampl: Pygments + pygments.lexers.apdlexer: Pygments + pygments.lexers.apl: Pygments + pygments.lexers.archetype: Pygments + pygments.lexers.arrow: Pygments + pygments.lexers.arturo: Pygments + pygments.lexers.asc: Pygments + pygments.lexers.asm: Pygments + pygments.lexers.asn1: Pygments + pygments.lexers.automation: Pygments + pygments.lexers.bare: Pygments + pygments.lexers.basic: Pygments + pygments.lexers.bdd: Pygments + pygments.lexers.berry: Pygments + pygments.lexers.bibtex: Pygments + pygments.lexers.blueprint: Pygments + pygments.lexers.boa: Pygments + pygments.lexers.bqn: Pygments + pygments.lexers.business: Pygments + pygments.lexers.c_cpp: Pygments + pygments.lexers.c_like: Pygments + pygments.lexers.capnproto: Pygments + pygments.lexers.carbon: Pygments + pygments.lexers.cddl: Pygments + pygments.lexers.chapel: Pygments + pygments.lexers.clean: Pygments + pygments.lexers.comal: Pygments + pygments.lexers.compiled: Pygments + pygments.lexers.configs: Pygments + pygments.lexers.console: Pygments + pygments.lexers.cplint: Pygments + pygments.lexers.crystal: Pygments + pygments.lexers.csound: Pygments + pygments.lexers.css: Pygments + pygments.lexers.d: Pygments + pygments.lexers.dalvik: Pygments + pygments.lexers.data: Pygments + pygments.lexers.dax: Pygments + pygments.lexers.devicetree: Pygments + pygments.lexers.diff: Pygments + pygments.lexers.dns: Pygments + pygments.lexers.dotnet: Pygments + pygments.lexers.dsls: Pygments + pygments.lexers.dylan: Pygments + pygments.lexers.ecl: Pygments + pygments.lexers.eiffel: Pygments + pygments.lexers.elm: Pygments + pygments.lexers.elpi: Pygments + pygments.lexers.email: Pygments + pygments.lexers.erlang: Pygments + pygments.lexers.esoteric: Pygments + pygments.lexers.ezhil: Pygments + pygments.lexers.factor: Pygments + pygments.lexers.fantom: Pygments + pygments.lexers.felix: Pygments + pygments.lexers.fift: Pygments + pygments.lexers.floscript: Pygments + pygments.lexers.forth: Pygments + pygments.lexers.fortran: Pygments + pygments.lexers.foxpro: Pygments + pygments.lexers.freefem: Pygments + pygments.lexers.func: Pygments + pygments.lexers.functional: Pygments + pygments.lexers.futhark: Pygments + pygments.lexers.gcodelexer: Pygments + pygments.lexers.gdscript: Pygments + pygments.lexers.go: Pygments + pygments.lexers.grammar_notation: Pygments + pygments.lexers.graph: Pygments + pygments.lexers.graphics: Pygments + pygments.lexers.graphql: Pygments + pygments.lexers.graphviz: Pygments + pygments.lexers.gsql: Pygments + pygments.lexers.haskell: Pygments + pygments.lexers.haxe: Pygments + pygments.lexers.hdl: Pygments + pygments.lexers.hexdump: Pygments + pygments.lexers.html: Pygments + pygments.lexers.idl: Pygments + pygments.lexers.igor: Pygments + pygments.lexers.inferno: Pygments + pygments.lexers.installers: Pygments + pygments.lexers.int_fiction: Pygments + pygments.lexers.iolang: Pygments + pygments.lexers.j: Pygments + pygments.lexers.javascript: Pygments + pygments.lexers.jmespath: Pygments + pygments.lexers.jslt: Pygments + pygments.lexers.jsonnet: Pygments + pygments.lexers.julia: Pygments + pygments.lexers.jvm: Pygments + pygments.lexers.kuin: Pygments + pygments.lexers.lilypond: Pygments + pygments.lexers.lisp: Pygments + pygments.lexers.macaulay2: Pygments + pygments.lexers.make: Pygments + pygments.lexers.markup: Pygments + pygments.lexers.math: Pygments + pygments.lexers.matlab: Pygments + pygments.lexers.maxima: Pygments + pygments.lexers.meson: Pygments + pygments.lexers.mime: Pygments + pygments.lexers.minecraft: Pygments + pygments.lexers.mips: Pygments + pygments.lexers.ml: Pygments + pygments.lexers.modeling: Pygments + pygments.lexers.modula2: Pygments + pygments.lexers.monte: Pygments + pygments.lexers.mosel: Pygments + pygments.lexers.ncl: Pygments + pygments.lexers.nimrod: Pygments + pygments.lexers.nit: Pygments + pygments.lexers.nix: Pygments + pygments.lexers.oberon: Pygments + pygments.lexers.objective: Pygments + pygments.lexers.ooc: Pygments + pygments.lexers.openscad: Pygments + pygments.lexers.other: Pygments + pygments.lexers.parasail: Pygments + pygments.lexers.parsers: Pygments + pygments.lexers.pascal: Pygments + pygments.lexers.pawn: Pygments + pygments.lexers.perl: Pygments + pygments.lexers.phix: Pygments + pygments.lexers.php: Pygments + pygments.lexers.pointless: Pygments + pygments.lexers.pony: Pygments + pygments.lexers.praat: Pygments + pygments.lexers.procfile: Pygments + pygments.lexers.prolog: Pygments + pygments.lexers.promql: Pygments + pygments.lexers.ptx: Pygments + pygments.lexers.python: Pygments + pygments.lexers.q: Pygments + pygments.lexers.qlik: Pygments + pygments.lexers.qvt: Pygments + pygments.lexers.r: Pygments + pygments.lexers.rdf: Pygments + pygments.lexers.rebol: Pygments + pygments.lexers.resource: Pygments + pygments.lexers.ride: Pygments + pygments.lexers.rita: Pygments + pygments.lexers.rnc: Pygments + pygments.lexers.roboconf: Pygments + pygments.lexers.robotframework: Pygments + pygments.lexers.ruby: Pygments + pygments.lexers.rust: Pygments + pygments.lexers.sas: Pygments + pygments.lexers.savi: Pygments + pygments.lexers.scdoc: Pygments + pygments.lexers.scripting: Pygments + pygments.lexers.sgf: Pygments + pygments.lexers.shell: Pygments + pygments.lexers.sieve: Pygments + pygments.lexers.slash: Pygments + pygments.lexers.smalltalk: Pygments + pygments.lexers.smithy: Pygments + pygments.lexers.smv: Pygments + pygments.lexers.snobol: Pygments + pygments.lexers.solidity: Pygments + pygments.lexers.sophia: Pygments + pygments.lexers.special: Pygments + pygments.lexers.spice: Pygments + pygments.lexers.sql: Pygments + pygments.lexers.srcinfo: Pygments + pygments.lexers.stata: Pygments + pygments.lexers.supercollider: Pygments + pygments.lexers.tal: Pygments + pygments.lexers.tcl: Pygments + pygments.lexers.teal: Pygments + pygments.lexers.templates: Pygments + pygments.lexers.teraterm: Pygments + pygments.lexers.testing: Pygments + pygments.lexers.text: Pygments + pygments.lexers.textedit: Pygments + pygments.lexers.textfmts: Pygments + pygments.lexers.theorem: Pygments + pygments.lexers.thingsdb: Pygments + pygments.lexers.tlb: Pygments + pygments.lexers.tls: Pygments + pygments.lexers.tnt: Pygments + pygments.lexers.trafficscript: Pygments + pygments.lexers.typoscript: Pygments + pygments.lexers.ul4: Pygments + pygments.lexers.unicon: Pygments + pygments.lexers.urbi: Pygments + pygments.lexers.usd: Pygments + pygments.lexers.varnish: Pygments + pygments.lexers.verification: Pygments + pygments.lexers.verifpal: Pygments + pygments.lexers.web: Pygments + pygments.lexers.webassembly: Pygments + pygments.lexers.webidl: Pygments + pygments.lexers.webmisc: Pygments + pygments.lexers.wgsl: Pygments + pygments.lexers.whiley: Pygments + pygments.lexers.wowtoc: Pygments + pygments.lexers.wren: Pygments + pygments.lexers.x10: Pygments + pygments.lexers.xorg: Pygments + pygments.lexers.yang: Pygments + pygments.lexers.yara: Pygments + pygments.lexers.zig: Pygments + pygments.modeline: Pygments + pygments.plugin: Pygments + pygments.regexopt: Pygments + pygments.scanner: Pygments + pygments.sphinxext: Pygments + pygments.style: Pygments + pygments.styles: Pygments + pygments.styles.abap: Pygments + pygments.styles.algol: Pygments + pygments.styles.algol_nu: Pygments + pygments.styles.arduino: Pygments + pygments.styles.autumn: Pygments + pygments.styles.borland: Pygments + pygments.styles.bw: Pygments + pygments.styles.colorful: Pygments + pygments.styles.default: Pygments + pygments.styles.dracula: Pygments + pygments.styles.emacs: Pygments + pygments.styles.friendly: Pygments + pygments.styles.friendly_grayscale: Pygments + pygments.styles.fruity: Pygments + pygments.styles.gh_dark: Pygments + pygments.styles.gruvbox: Pygments + pygments.styles.igor: Pygments + pygments.styles.inkpot: Pygments + pygments.styles.lightbulb: Pygments + pygments.styles.lilypond: Pygments + pygments.styles.lovelace: Pygments + pygments.styles.manni: Pygments + pygments.styles.material: Pygments + pygments.styles.monokai: Pygments + pygments.styles.murphy: Pygments + pygments.styles.native: Pygments + pygments.styles.nord: Pygments + pygments.styles.onedark: Pygments + pygments.styles.paraiso_dark: Pygments + pygments.styles.paraiso_light: Pygments + pygments.styles.pastie: Pygments + pygments.styles.perldoc: Pygments + pygments.styles.rainbow_dash: Pygments + pygments.styles.rrt: Pygments + pygments.styles.sas: Pygments + pygments.styles.solarized: Pygments + pygments.styles.staroffice: Pygments + pygments.styles.stata_dark: Pygments + pygments.styles.stata_light: Pygments + pygments.styles.tango: Pygments + pygments.styles.trac: Pygments + pygments.styles.vim: Pygments + pygments.styles.vs: Pygments + pygments.styles.xcode: Pygments + pygments.styles.zenburn: Pygments + pygments.token: Pygments + pygments.unistring: Pygments + pygments.util: Pygments + requests: requests + requests.adapters: requests + requests.api: requests + requests.auth: requests + requests.certs: requests + requests.compat: requests + requests.cookies: requests + requests.exceptions: requests + requests.help: requests + requests.hooks: requests + requests.models: requests + requests.packages: requests + requests.sessions: requests + requests.status_codes: requests + requests.structures: requests + requests.utils: requests + snowballstemmer: snowballstemmer + snowballstemmer.among: snowballstemmer + snowballstemmer.arabic_stemmer: snowballstemmer + snowballstemmer.armenian_stemmer: snowballstemmer + snowballstemmer.basestemmer: snowballstemmer + snowballstemmer.basque_stemmer: snowballstemmer + snowballstemmer.catalan_stemmer: snowballstemmer + snowballstemmer.danish_stemmer: snowballstemmer + snowballstemmer.dutch_stemmer: snowballstemmer + snowballstemmer.english_stemmer: snowballstemmer + snowballstemmer.finnish_stemmer: snowballstemmer + snowballstemmer.french_stemmer: snowballstemmer + snowballstemmer.german_stemmer: snowballstemmer + snowballstemmer.greek_stemmer: snowballstemmer + snowballstemmer.hindi_stemmer: snowballstemmer + snowballstemmer.hungarian_stemmer: snowballstemmer + snowballstemmer.indonesian_stemmer: snowballstemmer + snowballstemmer.irish_stemmer: snowballstemmer + snowballstemmer.italian_stemmer: snowballstemmer + snowballstemmer.lithuanian_stemmer: snowballstemmer + snowballstemmer.nepali_stemmer: snowballstemmer + snowballstemmer.norwegian_stemmer: snowballstemmer + snowballstemmer.porter_stemmer: snowballstemmer + snowballstemmer.portuguese_stemmer: snowballstemmer + snowballstemmer.romanian_stemmer: snowballstemmer + snowballstemmer.russian_stemmer: snowballstemmer + snowballstemmer.serbian_stemmer: snowballstemmer + snowballstemmer.spanish_stemmer: snowballstemmer + snowballstemmer.swedish_stemmer: snowballstemmer + snowballstemmer.tamil_stemmer: snowballstemmer + snowballstemmer.turkish_stemmer: snowballstemmer + snowballstemmer.yiddish_stemmer: snowballstemmer + sphinx: sphinx + sphinx.addnodes: sphinx + sphinx.application: sphinx + sphinx.builders: sphinx + sphinx.builders.changes: sphinx + sphinx.builders.dirhtml: sphinx + sphinx.builders.dummy: sphinx + sphinx.builders.epub3: sphinx + sphinx.builders.gettext: sphinx + sphinx.builders.html: sphinx + sphinx.builders.html.transforms: sphinx + sphinx.builders.latex: sphinx + sphinx.builders.latex.constants: sphinx + sphinx.builders.latex.nodes: sphinx + sphinx.builders.latex.theming: sphinx + sphinx.builders.latex.transforms: sphinx + sphinx.builders.latex.util: sphinx + sphinx.builders.linkcheck: sphinx + sphinx.builders.manpage: sphinx + sphinx.builders.singlehtml: sphinx + sphinx.builders.texinfo: sphinx + sphinx.builders.text: sphinx + sphinx.builders.xml: sphinx + sphinx.cmd: sphinx + sphinx.cmd.build: sphinx + sphinx.cmd.make_mode: sphinx + sphinx.cmd.quickstart: sphinx + sphinx.config: sphinx + sphinx.deprecation: sphinx + sphinx.directives: sphinx + sphinx.directives.code: sphinx + sphinx.directives.other: sphinx + sphinx.directives.patches: sphinx + sphinx.domains: sphinx + sphinx.domains.c: sphinx + sphinx.domains.changeset: sphinx + sphinx.domains.citation: sphinx + sphinx.domains.cpp: sphinx + sphinx.domains.index: sphinx + sphinx.domains.javascript: sphinx + sphinx.domains.math: sphinx + sphinx.domains.python: sphinx + sphinx.domains.rst: sphinx + sphinx.domains.std: sphinx + sphinx.environment: sphinx + sphinx.environment.adapters: sphinx + sphinx.environment.adapters.asset: sphinx + sphinx.environment.adapters.indexentries: sphinx + sphinx.environment.adapters.toctree: sphinx + sphinx.environment.collectors: sphinx + sphinx.environment.collectors.asset: sphinx + sphinx.environment.collectors.dependencies: sphinx + sphinx.environment.collectors.metadata: sphinx + sphinx.environment.collectors.title: sphinx + sphinx.environment.collectors.toctree: sphinx + sphinx.errors: sphinx + sphinx.events: sphinx + sphinx.ext: sphinx + sphinx.ext.apidoc: sphinx + sphinx.ext.autodoc: sphinx + sphinx.ext.autodoc.directive: sphinx + sphinx.ext.autodoc.importer: sphinx + sphinx.ext.autodoc.mock: sphinx + sphinx.ext.autodoc.preserve_defaults: sphinx + sphinx.ext.autodoc.type_comment: sphinx + sphinx.ext.autodoc.typehints: sphinx + sphinx.ext.autosectionlabel: sphinx + sphinx.ext.autosummary: sphinx + sphinx.ext.autosummary.generate: sphinx + sphinx.ext.coverage: sphinx + sphinx.ext.doctest: sphinx + sphinx.ext.duration: sphinx + sphinx.ext.extlinks: sphinx + sphinx.ext.githubpages: sphinx + sphinx.ext.graphviz: sphinx + sphinx.ext.ifconfig: sphinx + sphinx.ext.imgconverter: sphinx + sphinx.ext.imgmath: sphinx + sphinx.ext.inheritance_diagram: sphinx + sphinx.ext.intersphinx: sphinx + sphinx.ext.linkcode: sphinx + sphinx.ext.mathjax: sphinx + sphinx.ext.napoleon: sphinx + sphinx.ext.napoleon.docstring: sphinx + sphinx.ext.todo: sphinx + sphinx.ext.viewcode: sphinx + sphinx.extension: sphinx + sphinx.highlighting: sphinx + sphinx.io: sphinx + sphinx.jinja2glue: sphinx + sphinx.locale: sphinx + sphinx.parsers: sphinx + sphinx.project: sphinx + sphinx.pycode: sphinx + sphinx.pycode.ast: sphinx + sphinx.pycode.parser: sphinx + sphinx.pygments_styles: sphinx + sphinx.registry: sphinx + sphinx.roles: sphinx + sphinx.search: sphinx + sphinx.search.da: sphinx + sphinx.search.de: sphinx + sphinx.search.en: sphinx + sphinx.search.es: sphinx + sphinx.search.fi: sphinx + sphinx.search.fr: sphinx + sphinx.search.hu: sphinx + sphinx.search.it: sphinx + sphinx.search.ja: sphinx + sphinx.search.nl: sphinx + sphinx.search.no: sphinx + sphinx.search.pt: sphinx + sphinx.search.ro: sphinx + sphinx.search.ru: sphinx + sphinx.search.sv: sphinx + sphinx.search.tr: sphinx + sphinx.search.zh: sphinx + sphinx.testing: sphinx + sphinx.testing.fixtures: sphinx + sphinx.testing.path: sphinx + sphinx.testing.restructuredtext: sphinx + sphinx.testing.util: sphinx + sphinx.theming: sphinx + sphinx.transforms: sphinx + sphinx.transforms.compact_bullet_list: sphinx + sphinx.transforms.i18n: sphinx + sphinx.transforms.post_transforms: sphinx + sphinx.transforms.post_transforms.code: sphinx + sphinx.transforms.post_transforms.images: sphinx + sphinx.transforms.references: sphinx + sphinx.util: sphinx + sphinx.util.build_phase: sphinx + sphinx.util.cfamily: sphinx + sphinx.util.console: sphinx + sphinx.util.display: sphinx + sphinx.util.docfields: sphinx + sphinx.util.docstrings: sphinx + sphinx.util.docutils: sphinx + sphinx.util.exceptions: sphinx + sphinx.util.fileutil: sphinx + sphinx.util.http_date: sphinx + sphinx.util.i18n: sphinx + sphinx.util.images: sphinx + sphinx.util.index_entries: sphinx + sphinx.util.inspect: sphinx + sphinx.util.inventory: sphinx + sphinx.util.logging: sphinx + sphinx.util.matching: sphinx + sphinx.util.math: sphinx + sphinx.util.nodes: sphinx + sphinx.util.osutil: sphinx + sphinx.util.parallel: sphinx + sphinx.util.png: sphinx + sphinx.util.requests: sphinx + sphinx.util.rst: sphinx + sphinx.util.tags: sphinx + sphinx.util.template: sphinx + sphinx.util.texescape: sphinx + sphinx.util.typing: sphinx + sphinx.versioning: sphinx + sphinx.writers: sphinx + sphinx.writers.html: sphinx + sphinx.writers.html5: sphinx + sphinx.writers.latex: sphinx + sphinx.writers.manpage: sphinx + sphinx.writers.texinfo: sphinx + sphinx.writers.text: sphinx + sphinx.writers.xml: sphinx + sphinxcontrib.applehelp: sphinxcontrib_applehelp + sphinxcontrib.devhelp: sphinxcontrib_devhelp + sphinxcontrib.htmlhelp: sphinxcontrib_htmlhelp + sphinxcontrib.jsmath: sphinxcontrib_jsmath + sphinxcontrib.jsmath.version: sphinxcontrib_jsmath + sphinxcontrib.qthelp: sphinxcontrib_qthelp + sphinxcontrib.serializinghtml: sphinxcontrib_serializinghtml + sphinxcontrib.serializinghtml.jsonimpl: sphinxcontrib_serializinghtml + urllib3: urllib3 + urllib3.connection: urllib3 + urllib3.connectionpool: urllib3 + urllib3.contrib: urllib3 + urllib3.contrib.pyopenssl: urllib3 + urllib3.contrib.securetransport: urllib3 + urllib3.contrib.socks: urllib3 + urllib3.exceptions: urllib3 + urllib3.fields: urllib3 + urllib3.filepost: urllib3 + urllib3.poolmanager: urllib3 + urllib3.response: urllib3 + urllib3.util: urllib3 + urllib3.util.connection: urllib3 + urllib3.util.proxy: urllib3 + urllib3.util.request: urllib3 + urllib3.util.response: urllib3 + urllib3.util.retry: urllib3 + urllib3.util.ssl_: urllib3 + urllib3.util.ssl_match_hostname: urllib3 + urllib3.util.ssltransport: urllib3 + urllib3.util.timeout: urllib3 + urllib3.util.url: urllib3 + urllib3.util.util: urllib3 + urllib3.util.wait: urllib3 werkzeug: Werkzeug werkzeug.datastructures: Werkzeug werkzeug.debug: Werkzeug @@ -114,4 +824,4 @@ manifest: zipp.py310compat: zipp pip_repository: name: pip -integrity: a88d99bf5ea018bdb052ccda8ea5c98b6bae81312a338f909532285b76026fe1 +integrity: 4658c69530ba1ee117da0c963c9c671041e1c470d938c31cdbbfccc21dd259cb diff --git a/examples/build_file_generation/requirements.in b/examples/build_file_generation/requirements.in index 7e1060246f..d1380fa948 100644 --- a/examples/build_file_generation/requirements.in +++ b/examples/build_file_generation/requirements.in @@ -1 +1,3 @@ flask +sphinx +sphinxcontrib-serializinghtml diff --git a/examples/build_file_generation/requirements_lock.txt b/examples/build_file_generation/requirements_lock.txt index 443db71ddc..995a56a28e 100644 --- a/examples/build_file_generation/requirements_lock.txt +++ b/examples/build_file_generation/requirements_lock.txt @@ -4,18 +4,136 @@ # # bazel run //:requirements.update # +alabaster==0.7.13 \ + --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ + --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 + # via sphinx +babel==2.13.1 \ + --hash=sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900 \ + --hash=sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed + # via sphinx +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 + # via requests +charset-normalizer==3.3.1 \ + --hash=sha256:06cf46bdff72f58645434d467bf5228080801298fbba19fe268a01b4534467f5 \ + --hash=sha256:0c8c61fb505c7dad1d251c284e712d4e0372cef3b067f7ddf82a7fa82e1e9a93 \ + --hash=sha256:10b8dd31e10f32410751b3430996f9807fc4d1587ca69772e2aa940a82ab571a \ + --hash=sha256:1171ef1fc5ab4693c5d151ae0fdad7f7349920eabbaca6271f95969fa0756c2d \ + --hash=sha256:17a866d61259c7de1bdadef418a37755050ddb4b922df8b356503234fff7932c \ + --hash=sha256:1d6bfc32a68bc0933819cfdfe45f9abc3cae3877e1d90aac7259d57e6e0f85b1 \ + --hash=sha256:1ec937546cad86d0dce5396748bf392bb7b62a9eeb8c66efac60e947697f0e58 \ + --hash=sha256:223b4d54561c01048f657fa6ce41461d5ad8ff128b9678cfe8b2ecd951e3f8a2 \ + --hash=sha256:2465aa50c9299d615d757c1c888bc6fef384b7c4aec81c05a0172b4400f98557 \ + --hash=sha256:28f512b9a33235545fbbdac6a330a510b63be278a50071a336afc1b78781b147 \ + --hash=sha256:2c092be3885a1b7899cd85ce24acedc1034199d6fca1483fa2c3a35c86e43041 \ + --hash=sha256:2c4c99f98fc3a1835af8179dcc9013f93594d0670e2fa80c83aa36346ee763d2 \ + --hash=sha256:31445f38053476a0c4e6d12b047b08ced81e2c7c712e5a1ad97bc913256f91b2 \ + --hash=sha256:31bbaba7218904d2eabecf4feec0d07469284e952a27400f23b6628439439fa7 \ + --hash=sha256:34d95638ff3613849f473afc33f65c401a89f3b9528d0d213c7037c398a51296 \ + --hash=sha256:352a88c3df0d1fa886562384b86f9a9e27563d4704ee0e9d56ec6fcd270ea690 \ + --hash=sha256:39b70a6f88eebe239fa775190796d55a33cfb6d36b9ffdd37843f7c4c1b5dc67 \ + --hash=sha256:3c66df3f41abee950d6638adc7eac4730a306b022570f71dd0bd6ba53503ab57 \ + --hash=sha256:3f70fd716855cd3b855316b226a1ac8bdb3caf4f7ea96edcccc6f484217c9597 \ + --hash=sha256:3f9bc2ce123637a60ebe819f9fccc614da1bcc05798bbbaf2dd4ec91f3e08846 \ + --hash=sha256:3fb765362688821404ad6cf86772fc54993ec11577cd5a92ac44b4c2ba52155b \ + --hash=sha256:45f053a0ece92c734d874861ffe6e3cc92150e32136dd59ab1fb070575189c97 \ + --hash=sha256:46fb9970aa5eeca547d7aa0de5d4b124a288b42eaefac677bde805013c95725c \ + --hash=sha256:4cb50a0335382aac15c31b61d8531bc9bb657cfd848b1d7158009472189f3d62 \ + --hash=sha256:4e12f8ee80aa35e746230a2af83e81bd6b52daa92a8afaef4fea4a2ce9b9f4fa \ + --hash=sha256:4f3100d86dcd03c03f7e9c3fdb23d92e32abbca07e7c13ebd7ddfbcb06f5991f \ + --hash=sha256:4f6e2a839f83a6a76854d12dbebde50e4b1afa63e27761549d006fa53e9aa80e \ + --hash=sha256:4f861d94c2a450b974b86093c6c027888627b8082f1299dfd5a4bae8e2292821 \ + --hash=sha256:501adc5eb6cd5f40a6f77fbd90e5ab915c8fd6e8c614af2db5561e16c600d6f3 \ + --hash=sha256:520b7a142d2524f999447b3a0cf95115df81c4f33003c51a6ab637cbda9d0bf4 \ + --hash=sha256:548eefad783ed787b38cb6f9a574bd8664468cc76d1538215d510a3cd41406cb \ + --hash=sha256:555fe186da0068d3354cdf4bbcbc609b0ecae4d04c921cc13e209eece7720727 \ + --hash=sha256:55602981b2dbf8184c098bc10287e8c245e351cd4fdcad050bd7199d5a8bf514 \ + --hash=sha256:58e875eb7016fd014c0eea46c6fa92b87b62c0cb31b9feae25cbbe62c919f54d \ + --hash=sha256:5a3580a4fdc4ac05f9e53c57f965e3594b2f99796231380adb2baaab96e22761 \ + --hash=sha256:5b70bab78accbc672f50e878a5b73ca692f45f5b5e25c8066d748c09405e6a55 \ + --hash=sha256:5ceca5876032362ae73b83347be8b5dbd2d1faf3358deb38c9c88776779b2e2f \ + --hash=sha256:61f1e3fb621f5420523abb71f5771a204b33c21d31e7d9d86881b2cffe92c47c \ + --hash=sha256:633968254f8d421e70f91c6ebe71ed0ab140220469cf87a9857e21c16687c034 \ + --hash=sha256:63a6f59e2d01310f754c270e4a257426fe5a591dc487f1983b3bbe793cf6bac6 \ + --hash=sha256:63accd11149c0f9a99e3bc095bbdb5a464862d77a7e309ad5938fbc8721235ae \ + --hash=sha256:6db3cfb9b4fcecb4390db154e75b49578c87a3b9979b40cdf90d7e4b945656e1 \ + --hash=sha256:71ef3b9be10070360f289aea4838c784f8b851be3ba58cf796262b57775c2f14 \ + --hash=sha256:7ae8e5142dcc7a49168f4055255dbcced01dc1714a90a21f87448dc8d90617d1 \ + --hash=sha256:7b6cefa579e1237ce198619b76eaa148b71894fb0d6bcf9024460f9bf30fd228 \ + --hash=sha256:800561453acdecedaac137bf09cd719c7a440b6800ec182f077bb8e7025fb708 \ + --hash=sha256:82ca51ff0fc5b641a2d4e1cc8c5ff108699b7a56d7f3ad6f6da9dbb6f0145b48 \ + --hash=sha256:851cf693fb3aaef71031237cd68699dded198657ec1e76a76eb8be58c03a5d1f \ + --hash=sha256:854cc74367180beb327ab9d00f964f6d91da06450b0855cbbb09187bcdb02de5 \ + --hash=sha256:87071618d3d8ec8b186d53cb6e66955ef2a0e4fa63ccd3709c0c90ac5a43520f \ + --hash=sha256:871d045d6ccc181fd863a3cd66ee8e395523ebfbc57f85f91f035f50cee8e3d4 \ + --hash=sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8 \ + --hash=sha256:8af5a8917b8af42295e86b64903156b4f110a30dca5f3b5aedea123fbd638bff \ + --hash=sha256:8ec8ef42c6cd5856a7613dcd1eaf21e5573b2185263d87d27c8edcae33b62a61 \ + --hash=sha256:91e43805ccafa0a91831f9cd5443aa34528c0c3f2cc48c4cb3d9a7721053874b \ + --hash=sha256:9505dc359edb6a330efcd2be825fdb73ee3e628d9010597aa1aee5aa63442e97 \ + --hash=sha256:985c7965f62f6f32bf432e2681173db41336a9c2611693247069288bcb0c7f8b \ + --hash=sha256:9a74041ba0bfa9bc9b9bb2cd3238a6ab3b7618e759b41bd15b5f6ad958d17605 \ + --hash=sha256:9edbe6a5bf8b56a4a84533ba2b2f489d0046e755c29616ef8830f9e7d9cf5728 \ + --hash=sha256:a15c1fe6d26e83fd2e5972425a772cca158eae58b05d4a25a4e474c221053e2d \ + --hash=sha256:a66bcdf19c1a523e41b8e9d53d0cedbfbac2e93c649a2e9502cb26c014d0980c \ + --hash=sha256:ae4070f741f8d809075ef697877fd350ecf0b7c5837ed68738607ee0a2c572cf \ + --hash=sha256:ae55d592b02c4349525b6ed8f74c692509e5adffa842e582c0f861751701a673 \ + --hash=sha256:b578cbe580e3b41ad17b1c428f382c814b32a6ce90f2d8e39e2e635d49e498d1 \ + --hash=sha256:b891a2f68e09c5ef989007fac11476ed33c5c9994449a4e2c3386529d703dc8b \ + --hash=sha256:baec8148d6b8bd5cee1ae138ba658c71f5b03e0d69d5907703e3e1df96db5e41 \ + --hash=sha256:bb06098d019766ca16fc915ecaa455c1f1cd594204e7f840cd6258237b5079a8 \ + --hash=sha256:bc791ec3fd0c4309a753f95bb6c749ef0d8ea3aea91f07ee1cf06b7b02118f2f \ + --hash=sha256:bd28b31730f0e982ace8663d108e01199098432a30a4c410d06fe08fdb9e93f4 \ + --hash=sha256:be4d9c2770044a59715eb57c1144dedea7c5d5ae80c68fb9959515037cde2008 \ + --hash=sha256:c0c72d34e7de5604df0fde3644cc079feee5e55464967d10b24b1de268deceb9 \ + --hash=sha256:c0e842112fe3f1a4ffcf64b06dc4c61a88441c2f02f373367f7b4c1aa9be2ad5 \ + --hash=sha256:c15070ebf11b8b7fd1bfff7217e9324963c82dbdf6182ff7050519e350e7ad9f \ + --hash=sha256:c2000c54c395d9e5e44c99dc7c20a64dc371f777faf8bae4919ad3e99ce5253e \ + --hash=sha256:c30187840d36d0ba2893bc3271a36a517a717f9fd383a98e2697ee890a37c273 \ + --hash=sha256:cb7cd68814308aade9d0c93c5bd2ade9f9441666f8ba5aa9c2d4b389cb5e2a45 \ + --hash=sha256:cd805513198304026bd379d1d516afbf6c3c13f4382134a2c526b8b854da1c2e \ + --hash=sha256:d0bf89afcbcf4d1bb2652f6580e5e55a840fdf87384f6063c4a4f0c95e378656 \ + --hash=sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e \ + --hash=sha256:dbd95e300367aa0827496fe75a1766d198d34385a58f97683fe6e07f89ca3e3c \ + --hash=sha256:dced27917823df984fe0c80a5c4ad75cf58df0fbfae890bc08004cd3888922a2 \ + --hash=sha256:de0b4caa1c8a21394e8ce971997614a17648f94e1cd0640fbd6b4d14cab13a72 \ + --hash=sha256:debb633f3f7856f95ad957d9b9c781f8e2c6303ef21724ec94bea2ce2fcbd056 \ + --hash=sha256:e372d7dfd154009142631de2d316adad3cc1c36c32a38b16a4751ba78da2a397 \ + --hash=sha256:ecd26be9f112c4f96718290c10f4caea6cc798459a3a76636b817a0ed7874e42 \ + --hash=sha256:edc0202099ea1d82844316604e17d2b175044f9bcb6b398aab781eba957224bd \ + --hash=sha256:f194cce575e59ffe442c10a360182a986535fd90b57f7debfaa5c845c409ecc3 \ + --hash=sha256:f5fb672c396d826ca16a022ac04c9dce74e00a1c344f6ad1a0fdc1ba1f332213 \ + --hash=sha256:f6a02a3c7950cafaadcd46a226ad9e12fc9744652cc69f9e5534f98b47f3bbcf \ + --hash=sha256:fe81b35c33772e56f4b6cf62cf4aedc1762ef7162a31e6ac7fe5e40d0149eb67 + # via requests click==8.1.3 \ --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 # via flask +docutils==0.20.1 \ + --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ + --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b + # via sphinx flask==2.2.2 \ --hash=sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b \ --hash=sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526 # via -r requirements.in +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + # via requests +imagesize==1.4.1 \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a + # via sphinx importlib-metadata==5.2.0 \ --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd - # via flask + # via + # flask + # sphinx itsdangerous==2.1.2 \ --hash=sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44 \ --hash=sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a @@ -23,7 +141,9 @@ itsdangerous==2.1.2 \ jinja2==3.1.2 \ --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 - # via flask + # via + # flask + # sphinx markupsafe==2.1.1 \ --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ @@ -68,6 +188,62 @@ markupsafe==2.1.1 \ # via # jinja2 # werkzeug +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 + # via sphinx +pygments==2.16.1 \ + --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ + --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 + # via sphinx +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 + # via sphinx +snowballstemmer==2.2.0 \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a + # via sphinx +sphinx==7.2.6 \ + --hash=sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560 \ + --hash=sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5 + # via + # -r requirements.in + # sphinxcontrib-applehelp + # sphinxcontrib-devhelp + # sphinxcontrib-htmlhelp + # sphinxcontrib-qthelp + # sphinxcontrib-serializinghtml +sphinxcontrib-applehelp==1.0.7 \ + --hash=sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d \ + --hash=sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa + # via sphinx +sphinxcontrib-devhelp==1.0.5 \ + --hash=sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212 \ + --hash=sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f + # via sphinx +sphinxcontrib-htmlhelp==2.0.4 \ + --hash=sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a \ + --hash=sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9 + # via sphinx +sphinxcontrib-jsmath==1.0.1 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 + # via sphinx +sphinxcontrib-qthelp==1.0.6 \ + --hash=sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d \ + --hash=sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4 + # via sphinx +sphinxcontrib-serializinghtml==1.1.9 \ + --hash=sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54 \ + --hash=sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1 + # via + # -r requirements.in + # sphinx +urllib3==2.0.7 \ + --hash=sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 \ + --hash=sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e + # via requests werkzeug==2.2.2 \ --hash=sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f \ --hash=sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5 diff --git a/examples/build_file_generation/requirements_windows.txt b/examples/build_file_generation/requirements_windows.txt index bdd536fdcf..19709690ea 100644 --- a/examples/build_file_generation/requirements_windows.txt +++ b/examples/build_file_generation/requirements_windows.txt @@ -1,82 +1,260 @@ -# -# This file is autogenerated by pip-compile with Python 3.9 -# by the following command: -# -# bazel run //:requirements.update -# -click==8.1.3 \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 - # via flask -colorama==0.4.6 \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via click -flask==2.2.2 \ - --hash=sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b \ - --hash=sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526 - # via -r requirements.in -importlib-metadata==5.2.0 \ - --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ - --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd - # via flask -itsdangerous==2.1.2 \ - --hash=sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44 \ - --hash=sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a - # via flask -jinja2==3.1.2 \ - --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ - --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 - # via flask -markupsafe==2.1.1 \ - --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ - --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ - --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ - --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ - --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ - --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ - --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ - --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ - --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ - --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ - --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ - --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ - --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ - --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ - --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ - --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ - --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ - --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ - --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ - --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ - --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ - --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ - --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ - --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ - --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ - --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ - --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ - --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ - --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ - --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ - --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ - --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ - --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ - --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ - --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ - --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ - --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ - --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ - --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ - --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 - # via - # jinja2 - # werkzeug -werkzeug==2.2.2 \ - --hash=sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f \ - --hash=sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5 - # via flask -zipp==3.11.0 \ - --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ - --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 - # via importlib-metadata +# +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: +# +# bazel run //:requirements.update +# +alabaster==0.7.13 \ + --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ + --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 + # via sphinx +babel==2.13.1 \ + --hash=sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900 \ + --hash=sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed + # via sphinx +certifi==2023.7.22 \ + --hash=sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082 \ + --hash=sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9 + # via requests +charset-normalizer==3.3.1 \ + --hash=sha256:06cf46bdff72f58645434d467bf5228080801298fbba19fe268a01b4534467f5 \ + --hash=sha256:0c8c61fb505c7dad1d251c284e712d4e0372cef3b067f7ddf82a7fa82e1e9a93 \ + --hash=sha256:10b8dd31e10f32410751b3430996f9807fc4d1587ca69772e2aa940a82ab571a \ + --hash=sha256:1171ef1fc5ab4693c5d151ae0fdad7f7349920eabbaca6271f95969fa0756c2d \ + --hash=sha256:17a866d61259c7de1bdadef418a37755050ddb4b922df8b356503234fff7932c \ + --hash=sha256:1d6bfc32a68bc0933819cfdfe45f9abc3cae3877e1d90aac7259d57e6e0f85b1 \ + --hash=sha256:1ec937546cad86d0dce5396748bf392bb7b62a9eeb8c66efac60e947697f0e58 \ + --hash=sha256:223b4d54561c01048f657fa6ce41461d5ad8ff128b9678cfe8b2ecd951e3f8a2 \ + --hash=sha256:2465aa50c9299d615d757c1c888bc6fef384b7c4aec81c05a0172b4400f98557 \ + --hash=sha256:28f512b9a33235545fbbdac6a330a510b63be278a50071a336afc1b78781b147 \ + --hash=sha256:2c092be3885a1b7899cd85ce24acedc1034199d6fca1483fa2c3a35c86e43041 \ + --hash=sha256:2c4c99f98fc3a1835af8179dcc9013f93594d0670e2fa80c83aa36346ee763d2 \ + --hash=sha256:31445f38053476a0c4e6d12b047b08ced81e2c7c712e5a1ad97bc913256f91b2 \ + --hash=sha256:31bbaba7218904d2eabecf4feec0d07469284e952a27400f23b6628439439fa7 \ + --hash=sha256:34d95638ff3613849f473afc33f65c401a89f3b9528d0d213c7037c398a51296 \ + --hash=sha256:352a88c3df0d1fa886562384b86f9a9e27563d4704ee0e9d56ec6fcd270ea690 \ + --hash=sha256:39b70a6f88eebe239fa775190796d55a33cfb6d36b9ffdd37843f7c4c1b5dc67 \ + --hash=sha256:3c66df3f41abee950d6638adc7eac4730a306b022570f71dd0bd6ba53503ab57 \ + --hash=sha256:3f70fd716855cd3b855316b226a1ac8bdb3caf4f7ea96edcccc6f484217c9597 \ + --hash=sha256:3f9bc2ce123637a60ebe819f9fccc614da1bcc05798bbbaf2dd4ec91f3e08846 \ + --hash=sha256:3fb765362688821404ad6cf86772fc54993ec11577cd5a92ac44b4c2ba52155b \ + --hash=sha256:45f053a0ece92c734d874861ffe6e3cc92150e32136dd59ab1fb070575189c97 \ + --hash=sha256:46fb9970aa5eeca547d7aa0de5d4b124a288b42eaefac677bde805013c95725c \ + --hash=sha256:4cb50a0335382aac15c31b61d8531bc9bb657cfd848b1d7158009472189f3d62 \ + --hash=sha256:4e12f8ee80aa35e746230a2af83e81bd6b52daa92a8afaef4fea4a2ce9b9f4fa \ + --hash=sha256:4f3100d86dcd03c03f7e9c3fdb23d92e32abbca07e7c13ebd7ddfbcb06f5991f \ + --hash=sha256:4f6e2a839f83a6a76854d12dbebde50e4b1afa63e27761549d006fa53e9aa80e \ + --hash=sha256:4f861d94c2a450b974b86093c6c027888627b8082f1299dfd5a4bae8e2292821 \ + --hash=sha256:501adc5eb6cd5f40a6f77fbd90e5ab915c8fd6e8c614af2db5561e16c600d6f3 \ + --hash=sha256:520b7a142d2524f999447b3a0cf95115df81c4f33003c51a6ab637cbda9d0bf4 \ + --hash=sha256:548eefad783ed787b38cb6f9a574bd8664468cc76d1538215d510a3cd41406cb \ + --hash=sha256:555fe186da0068d3354cdf4bbcbc609b0ecae4d04c921cc13e209eece7720727 \ + --hash=sha256:55602981b2dbf8184c098bc10287e8c245e351cd4fdcad050bd7199d5a8bf514 \ + --hash=sha256:58e875eb7016fd014c0eea46c6fa92b87b62c0cb31b9feae25cbbe62c919f54d \ + --hash=sha256:5a3580a4fdc4ac05f9e53c57f965e3594b2f99796231380adb2baaab96e22761 \ + --hash=sha256:5b70bab78accbc672f50e878a5b73ca692f45f5b5e25c8066d748c09405e6a55 \ + --hash=sha256:5ceca5876032362ae73b83347be8b5dbd2d1faf3358deb38c9c88776779b2e2f \ + --hash=sha256:61f1e3fb621f5420523abb71f5771a204b33c21d31e7d9d86881b2cffe92c47c \ + --hash=sha256:633968254f8d421e70f91c6ebe71ed0ab140220469cf87a9857e21c16687c034 \ + --hash=sha256:63a6f59e2d01310f754c270e4a257426fe5a591dc487f1983b3bbe793cf6bac6 \ + --hash=sha256:63accd11149c0f9a99e3bc095bbdb5a464862d77a7e309ad5938fbc8721235ae \ + --hash=sha256:6db3cfb9b4fcecb4390db154e75b49578c87a3b9979b40cdf90d7e4b945656e1 \ + --hash=sha256:71ef3b9be10070360f289aea4838c784f8b851be3ba58cf796262b57775c2f14 \ + --hash=sha256:7ae8e5142dcc7a49168f4055255dbcced01dc1714a90a21f87448dc8d90617d1 \ + --hash=sha256:7b6cefa579e1237ce198619b76eaa148b71894fb0d6bcf9024460f9bf30fd228 \ + --hash=sha256:800561453acdecedaac137bf09cd719c7a440b6800ec182f077bb8e7025fb708 \ + --hash=sha256:82ca51ff0fc5b641a2d4e1cc8c5ff108699b7a56d7f3ad6f6da9dbb6f0145b48 \ + --hash=sha256:851cf693fb3aaef71031237cd68699dded198657ec1e76a76eb8be58c03a5d1f \ + --hash=sha256:854cc74367180beb327ab9d00f964f6d91da06450b0855cbbb09187bcdb02de5 \ + --hash=sha256:87071618d3d8ec8b186d53cb6e66955ef2a0e4fa63ccd3709c0c90ac5a43520f \ + --hash=sha256:871d045d6ccc181fd863a3cd66ee8e395523ebfbc57f85f91f035f50cee8e3d4 \ + --hash=sha256:8aee051c89e13565c6bd366813c386939f8e928af93c29fda4af86d25b73d8f8 \ + --hash=sha256:8af5a8917b8af42295e86b64903156b4f110a30dca5f3b5aedea123fbd638bff \ + --hash=sha256:8ec8ef42c6cd5856a7613dcd1eaf21e5573b2185263d87d27c8edcae33b62a61 \ + --hash=sha256:91e43805ccafa0a91831f9cd5443aa34528c0c3f2cc48c4cb3d9a7721053874b \ + --hash=sha256:9505dc359edb6a330efcd2be825fdb73ee3e628d9010597aa1aee5aa63442e97 \ + --hash=sha256:985c7965f62f6f32bf432e2681173db41336a9c2611693247069288bcb0c7f8b \ + --hash=sha256:9a74041ba0bfa9bc9b9bb2cd3238a6ab3b7618e759b41bd15b5f6ad958d17605 \ + --hash=sha256:9edbe6a5bf8b56a4a84533ba2b2f489d0046e755c29616ef8830f9e7d9cf5728 \ + --hash=sha256:a15c1fe6d26e83fd2e5972425a772cca158eae58b05d4a25a4e474c221053e2d \ + --hash=sha256:a66bcdf19c1a523e41b8e9d53d0cedbfbac2e93c649a2e9502cb26c014d0980c \ + --hash=sha256:ae4070f741f8d809075ef697877fd350ecf0b7c5837ed68738607ee0a2c572cf \ + --hash=sha256:ae55d592b02c4349525b6ed8f74c692509e5adffa842e582c0f861751701a673 \ + --hash=sha256:b578cbe580e3b41ad17b1c428f382c814b32a6ce90f2d8e39e2e635d49e498d1 \ + --hash=sha256:b891a2f68e09c5ef989007fac11476ed33c5c9994449a4e2c3386529d703dc8b \ + --hash=sha256:baec8148d6b8bd5cee1ae138ba658c71f5b03e0d69d5907703e3e1df96db5e41 \ + --hash=sha256:bb06098d019766ca16fc915ecaa455c1f1cd594204e7f840cd6258237b5079a8 \ + --hash=sha256:bc791ec3fd0c4309a753f95bb6c749ef0d8ea3aea91f07ee1cf06b7b02118f2f \ + --hash=sha256:bd28b31730f0e982ace8663d108e01199098432a30a4c410d06fe08fdb9e93f4 \ + --hash=sha256:be4d9c2770044a59715eb57c1144dedea7c5d5ae80c68fb9959515037cde2008 \ + --hash=sha256:c0c72d34e7de5604df0fde3644cc079feee5e55464967d10b24b1de268deceb9 \ + --hash=sha256:c0e842112fe3f1a4ffcf64b06dc4c61a88441c2f02f373367f7b4c1aa9be2ad5 \ + --hash=sha256:c15070ebf11b8b7fd1bfff7217e9324963c82dbdf6182ff7050519e350e7ad9f \ + --hash=sha256:c2000c54c395d9e5e44c99dc7c20a64dc371f777faf8bae4919ad3e99ce5253e \ + --hash=sha256:c30187840d36d0ba2893bc3271a36a517a717f9fd383a98e2697ee890a37c273 \ + --hash=sha256:cb7cd68814308aade9d0c93c5bd2ade9f9441666f8ba5aa9c2d4b389cb5e2a45 \ + --hash=sha256:cd805513198304026bd379d1d516afbf6c3c13f4382134a2c526b8b854da1c2e \ + --hash=sha256:d0bf89afcbcf4d1bb2652f6580e5e55a840fdf87384f6063c4a4f0c95e378656 \ + --hash=sha256:d9137a876020661972ca6eec0766d81aef8a5627df628b664b234b73396e727e \ + --hash=sha256:dbd95e300367aa0827496fe75a1766d198d34385a58f97683fe6e07f89ca3e3c \ + --hash=sha256:dced27917823df984fe0c80a5c4ad75cf58df0fbfae890bc08004cd3888922a2 \ + --hash=sha256:de0b4caa1c8a21394e8ce971997614a17648f94e1cd0640fbd6b4d14cab13a72 \ + --hash=sha256:debb633f3f7856f95ad957d9b9c781f8e2c6303ef21724ec94bea2ce2fcbd056 \ + --hash=sha256:e372d7dfd154009142631de2d316adad3cc1c36c32a38b16a4751ba78da2a397 \ + --hash=sha256:ecd26be9f112c4f96718290c10f4caea6cc798459a3a76636b817a0ed7874e42 \ + --hash=sha256:edc0202099ea1d82844316604e17d2b175044f9bcb6b398aab781eba957224bd \ + --hash=sha256:f194cce575e59ffe442c10a360182a986535fd90b57f7debfaa5c845c409ecc3 \ + --hash=sha256:f5fb672c396d826ca16a022ac04c9dce74e00a1c344f6ad1a0fdc1ba1f332213 \ + --hash=sha256:f6a02a3c7950cafaadcd46a226ad9e12fc9744652cc69f9e5534f98b47f3bbcf \ + --hash=sha256:fe81b35c33772e56f4b6cf62cf4aedc1762ef7162a31e6ac7fe5e40d0149eb67 + # via requests +click==8.1.3 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 + # via flask +colorama==0.4.6 \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + # via + # click + # sphinx +docutils==0.20.1 \ + --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ + --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b + # via sphinx +flask==2.2.2 \ + --hash=sha256:642c450d19c4ad482f96729bd2a8f6d32554aa1e231f4f6b4e7e5264b16cca2b \ + --hash=sha256:b9c46cc36662a7949f34b52d8ec7bb59c0d74ba08ba6cb9ce9adc1d8676d9526 + # via -r requirements.in +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + # via requests +imagesize==1.4.1 \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a + # via sphinx +importlib-metadata==5.2.0 \ + --hash=sha256:0eafa39ba42bf225fc00e67f701d71f85aead9f878569caf13c3724f704b970f \ + --hash=sha256:404d48d62bba0b7a77ff9d405efd91501bef2e67ff4ace0bed40a0cf28c3c7cd + # via + # flask + # sphinx +itsdangerous==2.1.2 \ + --hash=sha256:2c2349112351b88699d8d4b6b075022c0808887cb7ad10069318a8b0bc88db44 \ + --hash=sha256:5dbbc68b317e5e42f327f9021763545dc3fc3bfe22e6deb96aaf1fc38874156a + # via flask +jinja2==3.1.2 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 + # via + # flask + # sphinx +markupsafe==2.1.1 \ + --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ + --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ + --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ + --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ + --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ + --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ + --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ + --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ + --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ + --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ + --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ + --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ + --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ + --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ + --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ + --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ + --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ + --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ + --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ + --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ + --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ + --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ + --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ + --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ + --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ + --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ + --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ + --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ + --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ + --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ + --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ + --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ + --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ + --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ + --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ + --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ + --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ + --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ + --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ + --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 + # via + # jinja2 + # werkzeug +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 + # via sphinx +pygments==2.16.1 \ + --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ + --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 + # via sphinx +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 + # via sphinx +snowballstemmer==2.2.0 \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a + # via sphinx +sphinx==7.2.6 \ + --hash=sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560 \ + --hash=sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5 + # via + # -r requirements.in + # sphinxcontrib-applehelp + # sphinxcontrib-devhelp + # sphinxcontrib-htmlhelp + # sphinxcontrib-qthelp + # sphinxcontrib-serializinghtml +sphinxcontrib-applehelp==1.0.7 \ + --hash=sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d \ + --hash=sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa + # via sphinx +sphinxcontrib-devhelp==1.0.5 \ + --hash=sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212 \ + --hash=sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f + # via sphinx +sphinxcontrib-htmlhelp==2.0.4 \ + --hash=sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a \ + --hash=sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9 + # via sphinx +sphinxcontrib-jsmath==1.0.1 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 + # via sphinx +sphinxcontrib-qthelp==1.0.6 \ + --hash=sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d \ + --hash=sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4 + # via sphinx +sphinxcontrib-serializinghtml==1.1.9 \ + --hash=sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54 \ + --hash=sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1 + # via + # -r requirements.in + # sphinx +urllib3==2.0.7 \ + --hash=sha256:c97dfde1f7bd43a71c8d2a58e369e9b2bf692d1334ea9f9cae55add7d0dd0f84 \ + --hash=sha256:fdb6d215c776278489906c2f8916e6e7d4f5a9b602ccbcfdf7f016fc8da0596e + # via requests +werkzeug==2.2.2 \ + --hash=sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f \ + --hash=sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5 + # via flask +zipp==3.11.0 \ + --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ + --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 + # via importlib-metadata diff --git a/examples/bzlmod/BUILD.bazel b/examples/bzlmod/BUILD.bazel index 5e2509af28..6a4fdb8c4f 100644 --- a/examples/bzlmod/BUILD.bazel +++ b/examples/bzlmod/BUILD.bazel @@ -39,6 +39,7 @@ py_library( name = "lib", srcs = ["lib.py"], deps = [ + requirement("sphinx"), requirement("pylint"), requirement("tabulate"), requirement("python-dateutil"), diff --git a/examples/bzlmod/MODULE.bazel b/examples/bzlmod/MODULE.bazel index 5824280ed1..44d686e3dc 100644 --- a/examples/bzlmod/MODULE.bazel +++ b/examples/bzlmod/MODULE.bazel @@ -88,6 +88,16 @@ use_repo(pip, "whl_mods_hub") # Alternatively, `python_interpreter_target` can be used to directly specify # the Python interpreter to run to resolve dependencies. pip.parse( + experimental_requirement_cycles = { + "sphinx": [ + "sphinx", + "sphinxcontrib-qthelp", + "sphinxcontrib-htmlhelp", + "sphinxcontrib-devhelp", + "sphinxcontrib-applehelp", + "sphinxcontrib-serializinghtml", + ], + }, hub_name = "pip", python_version = "3.9", requirements_lock = "//:requirements_lock_3_9.txt", @@ -101,6 +111,16 @@ pip.parse( }, ) pip.parse( + experimental_requirement_cycles = { + "sphinx": [ + "sphinx", + "sphinxcontrib-qthelp", + "sphinxcontrib-htmlhelp", + "sphinxcontrib-devhelp", + "sphinxcontrib-applehelp", + "sphinxcontrib-serializinghtml", + ], + }, hub_name = "pip", python_version = "3.10", requirements_lock = "//:requirements_lock_3_10.txt", diff --git a/examples/bzlmod/lib.py b/examples/bzlmod/lib.py index 646c6e890f..5f0167f4e7 100644 --- a/examples/bzlmod/lib.py +++ b/examples/bzlmod/lib.py @@ -13,7 +13,7 @@ # limitations under the License. from tabulate import tabulate - +import sphinx # noqa def main(table): return tabulate(table) diff --git a/examples/bzlmod/requirements.in b/examples/bzlmod/requirements.in index 702e15103d..ed177755ab 100644 --- a/examples/bzlmod/requirements.in +++ b/examples/bzlmod/requirements.in @@ -9,3 +9,6 @@ tabulate~=0.9.0 pylint~=2.15.5 pylint-print python-dateutil>=2.8.2 +sphinx +sphinxcontrib-serializinghtml +colorama diff --git a/examples/bzlmod/requirements_lock_3_10.txt b/examples/bzlmod/requirements_lock_3_10.txt index c9e659ea2e..a10d02e589 100644 --- a/examples/bzlmod/requirements_lock_3_10.txt +++ b/examples/bzlmod/requirements_lock_3_10.txt @@ -6,10 +6,18 @@ # --extra-index-url https://pypi.python.org/simple/ +alabaster==0.7.13 \ + --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ + --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 + # via sphinx astroid==2.13.5 \ --hash=sha256:6891f444625b6edb2ac798829b689e95297e100ddf89dbed5a8c610e34901501 \ --hash=sha256:df164d5ac811b9f44105a72b8f9d5edfb7b5b2d7e979b04ea377a77b3229114a # via pylint +babel==2.13.1 \ + --hash=sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900 \ + --hash=sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed + # via sphinx certifi==2023.5.7 \ --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 @@ -18,18 +26,34 @@ chardet==4.0.0 \ --hash=sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa \ --hash=sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5 # via requests +colorama==0.4.6 \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + # via -r requirements.in dill==0.3.6 \ --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 # via pylint +docutils==0.20.1 \ + --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ + --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b + # via sphinx idna==2.10 \ --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 # via requests +imagesize==1.4.1 \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a + # via sphinx isort==5.12.0 \ --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 # via pylint +jinja2==3.1.2 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 + # via sphinx lazy-object-proxy==1.9.0 \ --hash=sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382 \ --hash=sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82 \ @@ -68,10 +92,76 @@ lazy-object-proxy==1.9.0 \ --hash=sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb \ --hash=sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59 # via astroid +markupsafe==2.1.3 \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 + # via jinja2 mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via pylint +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 + # via sphinx pathspec==0.11.1 \ --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 @@ -80,6 +170,10 @@ platformdirs==3.5.1 \ --hash=sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f \ --hash=sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5 # via pylint +pygments==2.16.1 \ + --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ + --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 + # via sphinx pylint==2.15.10 \ --hash=sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e \ --hash=sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5 @@ -145,7 +239,9 @@ pyyaml==6.0 \ requests==2.25.1 \ --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 \ --hash=sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e - # via -r requirements.in + # via + # -r requirements.in + # sphinx s3cmd==2.1.0 \ --hash=sha256:49cd23d516b17974b22b611a95ce4d93fe326feaa07320bd1d234fed68cbccfa \ --hash=sha256:966b0a494a916fc3b4324de38f089c86c70ee90e8e1cae6d59102103a4c0cc03 @@ -154,6 +250,46 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via python-dateutil +snowballstemmer==2.2.0 \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a + # via sphinx +sphinx==7.2.6 \ + --hash=sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560 \ + --hash=sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5 + # via + # -r requirements.in + # sphinxcontrib-applehelp + # sphinxcontrib-devhelp + # sphinxcontrib-htmlhelp + # sphinxcontrib-qthelp + # sphinxcontrib-serializinghtml +sphinxcontrib-applehelp==1.0.7 \ + --hash=sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d \ + --hash=sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa + # via sphinx +sphinxcontrib-devhelp==1.0.5 \ + --hash=sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212 \ + --hash=sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f + # via sphinx +sphinxcontrib-htmlhelp==2.0.4 \ + --hash=sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a \ + --hash=sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9 + # via sphinx +sphinxcontrib-jsmath==1.0.1 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 + # via sphinx +sphinxcontrib-qthelp==1.0.6 \ + --hash=sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d \ + --hash=sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4 + # via sphinx +sphinxcontrib-serializinghtml==1.1.9 \ + --hash=sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54 \ + --hash=sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1 + # via + # -r requirements.in + # sphinx tabulate==0.9.0 \ --hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \ --hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f diff --git a/examples/bzlmod/requirements_lock_3_9.txt b/examples/bzlmod/requirements_lock_3_9.txt index c63555d0ab..6fb57e11ca 100644 --- a/examples/bzlmod/requirements_lock_3_9.txt +++ b/examples/bzlmod/requirements_lock_3_9.txt @@ -6,10 +6,18 @@ # --extra-index-url https://pypi.python.org/simple/ +alabaster==0.7.13 \ + --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ + --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 + # via sphinx astroid==2.12.13 \ --hash=sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907 \ --hash=sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7 # via pylint +babel==2.13.1 \ + --hash=sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900 \ + --hash=sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed + # via sphinx certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 @@ -18,18 +26,38 @@ chardet==4.0.0 \ --hash=sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa \ --hash=sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5 # via requests +colorama==0.4.6 \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 + # via -r requirements.in dill==0.3.6 \ --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 # via pylint +docutils==0.20.1 \ + --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ + --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b + # via sphinx idna==2.10 \ --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 # via requests +imagesize==1.4.1 \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a + # via sphinx +importlib-metadata==6.8.0 \ + --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ + --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 + # via sphinx isort==5.11.4 \ --hash=sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6 \ --hash=sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b # via pylint +jinja2==3.1.2 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 + # via sphinx lazy-object-proxy==1.8.0 \ --hash=sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada \ --hash=sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d \ @@ -51,10 +79,76 @@ lazy-object-proxy==1.8.0 \ --hash=sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0 \ --hash=sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b # via astroid +markupsafe==2.1.3 \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 + # via jinja2 mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via pylint +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 + # via sphinx pathspec==0.10.3 \ --hash=sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6 \ --hash=sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6 @@ -63,6 +157,10 @@ platformdirs==2.6.0 \ --hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \ --hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e # via pylint +pygments==2.16.1 \ + --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ + --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 + # via sphinx pylint==2.15.9 \ --hash=sha256:18783cca3cfee5b83c6c5d10b3cdb66c6594520ffae61890858fe8d932e1c6b4 \ --hash=sha256:349c8cd36aede4d50a0754a8c0218b43323d13d5d88f4b2952ddfe3e169681eb @@ -128,7 +226,9 @@ pyyaml==6.0 \ requests==2.25.1 \ --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 \ --hash=sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e - # via -r requirements.in + # via + # -r requirements.in + # sphinx s3cmd==2.1.0 \ --hash=sha256:49cd23d516b17974b22b611a95ce4d93fe326feaa07320bd1d234fed68cbccfa \ --hash=sha256:966b0a494a916fc3b4324de38f089c86c70ee90e8e1cae6d59102103a4c0cc03 @@ -137,6 +237,46 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via python-dateutil +snowballstemmer==2.2.0 \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a + # via sphinx +sphinx==7.2.6 \ + --hash=sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560 \ + --hash=sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5 + # via + # -r requirements.in + # sphinxcontrib-applehelp + # sphinxcontrib-devhelp + # sphinxcontrib-htmlhelp + # sphinxcontrib-qthelp + # sphinxcontrib-serializinghtml +sphinxcontrib-applehelp==1.0.7 \ + --hash=sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d \ + --hash=sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa + # via sphinx +sphinxcontrib-devhelp==1.0.5 \ + --hash=sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212 \ + --hash=sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f + # via sphinx +sphinxcontrib-htmlhelp==2.0.4 \ + --hash=sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a \ + --hash=sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9 + # via sphinx +sphinxcontrib-jsmath==1.0.1 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 + # via sphinx +sphinxcontrib-qthelp==1.0.6 \ + --hash=sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d \ + --hash=sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4 + # via sphinx +sphinxcontrib-serializinghtml==1.1.9 \ + --hash=sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54 \ + --hash=sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1 + # via + # -r requirements.in + # sphinx tabulate==0.9.0 \ --hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \ --hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f @@ -305,6 +445,10 @@ yamllint==1.28.0 \ --hash=sha256:89bb5b5ac33b1ade059743cf227de73daa34d5e5a474b06a5e17fc16583b0cf2 \ --hash=sha256:9e3d8ddd16d0583214c5fdffe806c9344086721f107435f68bad990e5a88826b # via -r requirements.in +zipp==3.17.0 \ + --hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \ + --hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: setuptools==65.6.3 \ diff --git a/examples/bzlmod/requirements_windows_3_10.txt b/examples/bzlmod/requirements_windows_3_10.txt index 11592479a0..60d4980ed7 100644 --- a/examples/bzlmod/requirements_windows_3_10.txt +++ b/examples/bzlmod/requirements_windows_3_10.txt @@ -6,10 +6,18 @@ # --extra-index-url https://pypi.python.org/simple/ +alabaster==0.7.13 \ + --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ + --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 + # via sphinx astroid==2.13.5 \ --hash=sha256:6891f444625b6edb2ac798829b689e95297e100ddf89dbed5a8c610e34901501 \ --hash=sha256:df164d5ac811b9f44105a72b8f9d5edfb7b5b2d7e979b04ea377a77b3229114a # via pylint +babel==2.13.1 \ + --hash=sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900 \ + --hash=sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed + # via sphinx certifi==2023.5.7 \ --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 @@ -21,19 +29,34 @@ chardet==4.0.0 \ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via pylint + # via + # -r requirements.in + # pylint + # sphinx dill==0.3.6 \ --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 # via pylint +docutils==0.20.1 \ + --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ + --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b + # via sphinx idna==2.10 \ --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 # via requests +imagesize==1.4.1 \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a + # via sphinx isort==5.12.0 \ --hash=sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504 \ --hash=sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6 # via pylint +jinja2==3.1.2 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 + # via sphinx lazy-object-proxy==1.9.0 \ --hash=sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382 \ --hash=sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82 \ @@ -72,10 +95,76 @@ lazy-object-proxy==1.9.0 \ --hash=sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb \ --hash=sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59 # via astroid +markupsafe==2.1.3 \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 + # via jinja2 mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via pylint +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 + # via sphinx pathspec==0.11.1 \ --hash=sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687 \ --hash=sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293 @@ -84,6 +173,10 @@ platformdirs==3.5.1 \ --hash=sha256:412dae91f52a6f84830f39a8078cecd0e866cb72294a5c66808e74d5e88d251f \ --hash=sha256:e2378146f1964972c03c085bb5662ae80b2b8c06226c54b2ff4aa9483e8a13a5 # via pylint +pygments==2.16.1 \ + --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ + --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 + # via sphinx pylint==2.15.10 \ --hash=sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e \ --hash=sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5 @@ -149,7 +242,9 @@ pyyaml==6.0 \ requests==2.25.1 \ --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 \ --hash=sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e - # via -r requirements.in + # via + # -r requirements.in + # sphinx s3cmd==2.1.0 \ --hash=sha256:49cd23d516b17974b22b611a95ce4d93fe326feaa07320bd1d234fed68cbccfa \ --hash=sha256:966b0a494a916fc3b4324de38f089c86c70ee90e8e1cae6d59102103a4c0cc03 @@ -158,6 +253,46 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via python-dateutil +snowballstemmer==2.2.0 \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a + # via sphinx +sphinx==7.2.6 \ + --hash=sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560 \ + --hash=sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5 + # via + # -r requirements.in + # sphinxcontrib-applehelp + # sphinxcontrib-devhelp + # sphinxcontrib-htmlhelp + # sphinxcontrib-qthelp + # sphinxcontrib-serializinghtml +sphinxcontrib-applehelp==1.0.7 \ + --hash=sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d \ + --hash=sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa + # via sphinx +sphinxcontrib-devhelp==1.0.5 \ + --hash=sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212 \ + --hash=sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f + # via sphinx +sphinxcontrib-htmlhelp==2.0.4 \ + --hash=sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a \ + --hash=sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9 + # via sphinx +sphinxcontrib-jsmath==1.0.1 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 + # via sphinx +sphinxcontrib-qthelp==1.0.6 \ + --hash=sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d \ + --hash=sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4 + # via sphinx +sphinxcontrib-serializinghtml==1.1.9 \ + --hash=sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54 \ + --hash=sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1 + # via + # -r requirements.in + # sphinx tabulate==0.9.0 \ --hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \ --hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f diff --git a/examples/bzlmod/requirements_windows_3_9.txt b/examples/bzlmod/requirements_windows_3_9.txt index e990003bc8..4d5c31e46e 100644 --- a/examples/bzlmod/requirements_windows_3_9.txt +++ b/examples/bzlmod/requirements_windows_3_9.txt @@ -6,10 +6,18 @@ # --extra-index-url https://pypi.python.org/simple/ +alabaster==0.7.13 \ + --hash=sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 \ + --hash=sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2 + # via sphinx astroid==2.12.13 \ --hash=sha256:10e0ad5f7b79c435179d0d0f0df69998c4eef4597534aae44910db060baeb907 \ --hash=sha256:1493fe8bd3dfd73dc35bd53c9d5b6e49ead98497c47b2307662556a5692d29d7 # via pylint +babel==2.13.1 \ + --hash=sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900 \ + --hash=sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed + # via sphinx certifi==2022.12.7 \ --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 @@ -21,19 +29,38 @@ chardet==4.0.0 \ colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 - # via pylint + # via + # -r requirements.in + # pylint + # sphinx dill==0.3.6 \ --hash=sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0 \ --hash=sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373 # via pylint +docutils==0.20.1 \ + --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ + --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b + # via sphinx idna==2.10 \ --hash=sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6 \ --hash=sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0 # via requests +imagesize==1.4.1 \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a + # via sphinx +importlib-metadata==6.8.0 \ + --hash=sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb \ + --hash=sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743 + # via sphinx isort==5.11.4 \ --hash=sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6 \ --hash=sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b # via pylint +jinja2==3.1.2 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 + # via sphinx lazy-object-proxy==1.8.0 \ --hash=sha256:0c1c7c0433154bb7c54185714c6929acc0ba04ee1b167314a779b9025517eada \ --hash=sha256:14010b49a2f56ec4943b6cf925f597b534ee2fe1f0738c84b3bce0c1a11ff10d \ @@ -55,10 +82,76 @@ lazy-object-proxy==1.8.0 \ --hash=sha256:eac3a9a5ef13b332c059772fd40b4b1c3d45a3a2b05e33a361dee48e54a4dad0 \ --hash=sha256:eb329f8d8145379bf5dbe722182410fe8863d186e51bf034d2075eb8d85ee25b # via astroid +markupsafe==2.1.3 \ + --hash=sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e \ + --hash=sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e \ + --hash=sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431 \ + --hash=sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686 \ + --hash=sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c \ + --hash=sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559 \ + --hash=sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc \ + --hash=sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb \ + --hash=sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939 \ + --hash=sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c \ + --hash=sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0 \ + --hash=sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4 \ + --hash=sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9 \ + --hash=sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575 \ + --hash=sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba \ + --hash=sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d \ + --hash=sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd \ + --hash=sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3 \ + --hash=sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00 \ + --hash=sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155 \ + --hash=sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac \ + --hash=sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52 \ + --hash=sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f \ + --hash=sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8 \ + --hash=sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b \ + --hash=sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007 \ + --hash=sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24 \ + --hash=sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea \ + --hash=sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198 \ + --hash=sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0 \ + --hash=sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee \ + --hash=sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be \ + --hash=sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2 \ + --hash=sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1 \ + --hash=sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707 \ + --hash=sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6 \ + --hash=sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c \ + --hash=sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58 \ + --hash=sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823 \ + --hash=sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779 \ + --hash=sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636 \ + --hash=sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c \ + --hash=sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad \ + --hash=sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee \ + --hash=sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc \ + --hash=sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 \ + --hash=sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48 \ + --hash=sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7 \ + --hash=sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e \ + --hash=sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b \ + --hash=sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa \ + --hash=sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5 \ + --hash=sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e \ + --hash=sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb \ + --hash=sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9 \ + --hash=sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57 \ + --hash=sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc \ + --hash=sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc \ + --hash=sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2 \ + --hash=sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11 + # via jinja2 mccabe==0.7.0 \ --hash=sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325 \ --hash=sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e # via pylint +packaging==23.2 \ + --hash=sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5 \ + --hash=sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 + # via sphinx pathspec==0.10.3 \ --hash=sha256:3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6 \ --hash=sha256:56200de4077d9d0791465aa9095a01d421861e405b5096955051deefd697d6f6 @@ -67,6 +160,10 @@ platformdirs==2.6.0 \ --hash=sha256:1a89a12377800c81983db6be069ec068eee989748799b946cce2a6e80dcc54ca \ --hash=sha256:b46ffafa316e6b83b47489d240ce17173f123a9b9c83282141c3daf26ad9ac2e # via pylint +pygments==2.16.1 \ + --hash=sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692 \ + --hash=sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29 + # via sphinx pylint==2.15.9 \ --hash=sha256:18783cca3cfee5b83c6c5d10b3cdb66c6594520ffae61890858fe8d932e1c6b4 \ --hash=sha256:349c8cd36aede4d50a0754a8c0218b43323d13d5d88f4b2952ddfe3e169681eb @@ -132,7 +229,9 @@ pyyaml==6.0 \ requests==2.25.1 \ --hash=sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804 \ --hash=sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e - # via -r requirements.in + # via + # -r requirements.in + # sphinx s3cmd==2.1.0 \ --hash=sha256:49cd23d516b17974b22b611a95ce4d93fe326feaa07320bd1d234fed68cbccfa \ --hash=sha256:966b0a494a916fc3b4324de38f089c86c70ee90e8e1cae6d59102103a4c0cc03 @@ -141,6 +240,46 @@ six==1.16.0 \ --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via python-dateutil +snowballstemmer==2.2.0 \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a + # via sphinx +sphinx==7.2.6 \ + --hash=sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560 \ + --hash=sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5 + # via + # -r requirements.in + # sphinxcontrib-applehelp + # sphinxcontrib-devhelp + # sphinxcontrib-htmlhelp + # sphinxcontrib-qthelp + # sphinxcontrib-serializinghtml +sphinxcontrib-applehelp==1.0.7 \ + --hash=sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d \ + --hash=sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa + # via sphinx +sphinxcontrib-devhelp==1.0.5 \ + --hash=sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212 \ + --hash=sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f + # via sphinx +sphinxcontrib-htmlhelp==2.0.4 \ + --hash=sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a \ + --hash=sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9 + # via sphinx +sphinxcontrib-jsmath==1.0.1 \ + --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ + --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 + # via sphinx +sphinxcontrib-qthelp==1.0.6 \ + --hash=sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d \ + --hash=sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4 + # via sphinx +sphinxcontrib-serializinghtml==1.1.9 \ + --hash=sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54 \ + --hash=sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1 + # via + # -r requirements.in + # sphinx tabulate==0.9.0 \ --hash=sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c \ --hash=sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f @@ -309,6 +448,10 @@ yamllint==1.28.0 \ --hash=sha256:89bb5b5ac33b1ade059743cf227de73daa34d5e5a474b06a5e17fc16583b0cf2 \ --hash=sha256:9e3d8ddd16d0583214c5fdffe806c9344086721f107435f68bad990e5a88826b # via -r requirements.in +zipp==3.17.0 \ + --hash=sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 \ + --hash=sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0 + # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: setuptools==65.6.3 \ diff --git a/examples/pip_parse/BUILD.bazel b/examples/pip_parse/BUILD.bazel index c2cc9a3276..367a795728 100644 --- a/examples/pip_parse/BUILD.bazel +++ b/examples/pip_parse/BUILD.bazel @@ -33,6 +33,8 @@ py_binary( srcs = ["main.py"], deps = [ "@pypi//requests:pkg", + "@pypi//sphinx:pkg", + "@pypi//sphinxcontrib_serializinghtml:pkg", ], ) @@ -55,6 +57,7 @@ compile_pip_requirements( name = "requirements", src = "requirements.in", requirements_txt = "requirements_lock.txt", + requirements_windows = "requirements_windows.txt", ) # Test the use of all pip_parse utilities in a single py_test diff --git a/examples/pip_parse/WORKSPACE b/examples/pip_parse/WORKSPACE index 79aca14b8c..415d064ed6 100644 --- a/examples/pip_parse/WORKSPACE +++ b/examples/pip_parse/WORKSPACE @@ -24,6 +24,19 @@ pip_parse( # can be passed # environment = {"HTTPS_PROXY": "http://my.proxy.fun/"}, name = "pypi", + + # Requirement groups allow Bazel to tolerate PyPi cycles by putting dependencies + # which are known to form cycles into groups together. + experimental_requirement_cycles = { + "sphinx": [ + "sphinx", + "sphinxcontrib-qthelp", + "sphinxcontrib-htmlhelp", + "sphinxcontrib-devhelp", + "sphinxcontrib-applehelp", + "sphinxcontrib-serializinghtml", + ], + }, # (Optional) You can provide extra parameters to pip. # Here, make pip output verbose (this is usable with `quiet = False`). # extra_pip_args = ["-v"], @@ -44,6 +57,7 @@ pip_parse( # (Optional) You can set quiet to False if you want to see pip output. #quiet = False, requirements_lock = "//:requirements_lock.txt", + requirements_windows = "//:requirements_windows.txt", ) load("@pypi//:requirements.bzl", "install_deps") diff --git a/examples/pip_parse/report.txt b/examples/pip_parse/report.txt new file mode 100644 index 0000000000..26c0f857a1 --- /dev/null +++ b/examples/pip_parse/report.txt @@ -0,0 +1,9681 @@ +Collecting alembic==1.12.0 (from -r requirements_lock.txt (line 7)) + Using cached alembic-1.12.0-py3-none-any.whl (226 kB) +Collecting annotated-types==0.6.0 (from -r requirements_lock.txt (line 11)) + Using cached annotated_types-0.6.0-py3-none-any.whl (12 kB) +Collecting anyio==4.0.0 (from -r requirements_lock.txt (line 15)) + Using cached anyio-4.0.0-py3-none-any.whl (83 kB) +Collecting apache-airflow==2.7.2 (from -r requirements_lock.txt (line 19)) + Using cached apache_airflow-2.7.2-py3-none-any.whl (12.9 MB) +Collecting apache-airflow-providers-common-sql==1.8.0 (from -r requirements_lock.txt (line 29)) + Using cached apache_airflow_providers_common_sql-1.8.0-py3-none-any.whl (31 kB) +Collecting apache-airflow-providers-ftp==3.6.0 (from -r requirements_lock.txt (line 35)) + Using cached apache_airflow_providers_ftp-3.6.0-py3-none-any.whl (18 kB) +Collecting apache-airflow-providers-http==2.0.0 (from -r requirements_lock.txt (line 39)) + Using cached apache_airflow_providers_http-2.0.0-py3-none-any.whl (20 kB) +Collecting apache-airflow-providers-imap==3.4.0 (from -r requirements_lock.txt (line 43)) + Using cached apache_airflow_providers_imap-3.4.0-py3-none-any.whl (17 kB) +Collecting apache-airflow-providers-sqlite==3.5.0 (from -r requirements_lock.txt (line 47)) + Using cached apache_airflow_providers_sqlite-3.5.0-py3-none-any.whl (13 kB) +Collecting apispec==6.3.0 (from apispec[yaml]==6.3.0->-r requirements_lock.txt (line 53)) + Using cached apispec-6.3.0-py3-none-any.whl (29 kB) +Collecting argcomplete==3.1.2 (from -r requirements_lock.txt (line 57)) + Using cached argcomplete-3.1.2-py3-none-any.whl (41 kB) +Collecting asgiref==3.7.2 (from -r requirements_lock.txt (line 61)) + Using cached asgiref-3.7.2-py3-none-any.whl (24 kB) +Collecting attrs==23.1.0 (from -r requirements_lock.txt (line 65)) + Using cached attrs-23.1.0-py3-none-any.whl (61 kB) +Collecting babel==2.13.1 (from -r requirements_lock.txt (line 73)) + Using cached Babel-2.13.1-py3-none-any.whl (10.1 MB) +Collecting backoff==2.2.1 (from -r requirements_lock.txt (line 77)) + Using cached backoff-2.2.1-py3-none-any.whl (15 kB) +Collecting blinker==1.6.3 (from -r requirements_lock.txt (line 84)) + Using cached blinker-1.6.3-py3-none-any.whl (13 kB) +Collecting cachelib==0.9.0 (from -r requirements_lock.txt (line 88)) + Using cached cachelib-0.9.0-py3-none-any.whl (15 kB) +Collecting cattrs==23.1.2 (from -r requirements_lock.txt (line 94)) + Using cached cattrs-23.1.2-py3-none-any.whl (50 kB) +Collecting certifi==2022.12.7 (from -r requirements_lock.txt (line 98)) + Using cached certifi-2022.12.7-py3-none-any.whl (155 kB) +Collecting cffi==1.16.0 (from -r requirements_lock.txt (line 105)) + Using cached cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (464 kB) +Collecting chardet==4.0.0 (from -r requirements_lock.txt (line 159)) + Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB) +Collecting click==8.1.7 (from -r requirements_lock.txt (line 163)) + Using cached click-8.1.7-py3-none-any.whl (97 kB) +Collecting clickclick==20.10.2 (from -r requirements_lock.txt (line 170)) + Using cached clickclick-20.10.2-py2.py3-none-any.whl (7.4 kB) +Collecting colorama==0.4.6 (from -r requirements_lock.txt (line 174)) + Using cached colorama-0.4.6-py2.py3-none-any.whl (25 kB) +Collecting colorlog==4.8.0 (from -r requirements_lock.txt (line 178)) + Using cached colorlog-4.8.0-py2.py3-none-any.whl (10 kB) +Collecting configupdater==3.1.1 (from -r requirements_lock.txt (line 182)) + Using cached ConfigUpdater-3.1.1-py2.py3-none-any.whl (34 kB) +Collecting connexion==2.14.2 (from connexion[flask]==2.14.2->-r requirements_lock.txt (line 186)) + Using cached connexion-2.14.2-py2.py3-none-any.whl (95 kB) +Collecting cron-descriptor==1.4.0 (from -r requirements_lock.txt (line 190)) + Using cached cron_descriptor-1.4.0.tar.gz (29 kB) + Preparing metadata (setup.py): started + Preparing metadata (setup.py): finished with status 'done' +Collecting croniter==2.0.1 (from -r requirements_lock.txt (line 193)) + Using cached croniter-2.0.1-py2.py3-none-any.whl (19 kB) +Collecting cryptography==41.0.4 (from -r requirements_lock.txt (line 197)) + Using cached cryptography-41.0.4-cp37-abi3-manylinux_2_28_x86_64.whl (4.4 MB) +Collecting deprecated==1.2.14 (from -r requirements_lock.txt (line 222)) + Using cached Deprecated-1.2.14-py2.py3-none-any.whl (9.6 kB) +Collecting dill==0.3.7 (from -r requirements_lock.txt (line 231)) + Using cached dill-0.3.7-py3-none-any.whl (115 kB) +Collecting dnspython==2.4.2 (from -r requirements_lock.txt (line 235)) + Using cached dnspython-2.4.2-py3-none-any.whl (300 kB) +Collecting docutils==0.20.1 (from -r requirements_lock.txt (line 239)) + Using cached docutils-0.20.1-py3-none-any.whl (572 kB) +Collecting email-validator==1.3.1 (from -r requirements_lock.txt (line 243)) + Using cached email_validator-1.3.1-py2.py3-none-any.whl (22 kB) +Collecting exceptiongroup==1.1.3 (from -r requirements_lock.txt (line 247)) + Using cached exceptiongroup-1.1.3-py3-none-any.whl (14 kB) +Collecting flask==2.2.5 (from -r requirements_lock.txt (line 253)) + Using cached Flask-2.2.5-py3-none-any.whl (101 kB) +Collecting flask-appbuilder==4.3.6 (from -r requirements_lock.txt (line 268)) + Using cached Flask_AppBuilder-4.3.6-py3-none-any.whl (1.7 MB) +Collecting flask-babel==2.0.0 (from -r requirements_lock.txt (line 272)) + Using cached Flask_Babel-2.0.0-py3-none-any.whl (9.3 kB) +Collecting flask-caching==2.1.0 (from -r requirements_lock.txt (line 276)) + Using cached Flask_Caching-2.1.0-py3-none-any.whl (28 kB) +Collecting flask-jwt-extended==4.5.3 (from -r requirements_lock.txt (line 280)) + Using cached Flask_JWT_Extended-4.5.3-py2.py3-none-any.whl (22 kB) +Collecting flask-limiter==3.5.0 (from -r requirements_lock.txt (line 284)) + Using cached Flask_Limiter-3.5.0-py3-none-any.whl (28 kB) +Collecting flask-login==0.6.2 (from -r requirements_lock.txt (line 288)) + Using cached Flask_Login-0.6.2-py3-none-any.whl (17 kB) +Collecting flask-session==0.5.0 (from -r requirements_lock.txt (line 294)) + Using cached flask_session-0.5.0-py3-none-any.whl (7.2 kB) +Collecting flask-sqlalchemy==2.5.1 (from -r requirements_lock.txt (line 298)) + Using cached Flask_SQLAlchemy-2.5.1-py2.py3-none-any.whl (17 kB) +Collecting flask-wtf==1.2.1 (from -r requirements_lock.txt (line 302)) + Using cached flask_wtf-1.2.1-py3-none-any.whl (12 kB) +Collecting google-re2==1.1 (from -r requirements_lock.txt (line 308)) + Using cached google_re2-1.1-2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (513 kB) +Collecting googleapis-common-protos==1.61.0 (from -r requirements_lock.txt (line 407)) + Using cached googleapis_common_protos-1.61.0-py2.py3-none-any.whl (230 kB) +Collecting graphviz==0.20.1 (from -r requirements_lock.txt (line 413)) + Using cached graphviz-0.20.1-py3-none-any.whl (47 kB) +Collecting greenlet==3.0.0 (from -r requirements_lock.txt (line 417)) + Using cached greenlet-3.0.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (616 kB) +Collecting grpcio==1.59.0 (from -r requirements_lock.txt (line 481)) + Using cached grpcio-1.59.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.3 MB) +Collecting gunicorn==21.2.0 (from -r requirements_lock.txt (line 537)) + Using cached gunicorn-21.2.0-py3-none-any.whl (80 kB) +Collecting h11==0.14.0 (from -r requirements_lock.txt (line 541)) + Using cached h11-0.14.0-py3-none-any.whl (58 kB) +Collecting httpcore==0.18.0 (from -r requirements_lock.txt (line 545)) + Using cached httpcore-0.18.0-py3-none-any.whl (76 kB) +Collecting httpx==0.25.0 (from -r requirements_lock.txt (line 549)) + Using cached httpx-0.25.0-py3-none-any.whl (75 kB) +Collecting idna==2.10 (from -r requirements_lock.txt (line 553)) + Using cached idna-2.10-py2.py3-none-any.whl (58 kB) +Collecting importlib-metadata==6.8.0 (from -r requirements_lock.txt (line 561)) + Using cached importlib_metadata-6.8.0-py3-none-any.whl (22 kB) +Collecting importlib-resources==6.1.0 (from -r requirements_lock.txt (line 568)) + Using cached importlib_resources-6.1.0-py3-none-any.whl (33 kB) +Collecting inflection==0.5.1 (from -r requirements_lock.txt (line 572)) + Using cached inflection-0.5.1-py2.py3-none-any.whl (9.5 kB) +Collecting itsdangerous==2.1.2 (from -r requirements_lock.txt (line 576)) + Using cached itsdangerous-2.1.2-py3-none-any.whl (15 kB) +Collecting jinja2==3.1.2 (from -r requirements_lock.txt (line 584)) + Using cached Jinja2-3.1.2-py3-none-any.whl (133 kB) +Collecting jsonschema==4.19.1 (from -r requirements_lock.txt (line 592)) + Using cached jsonschema-4.19.1-py3-none-any.whl (83 kB) +Collecting jsonschema-specifications==2023.7.1 (from -r requirements_lock.txt (line 599)) + Using cached jsonschema_specifications-2023.7.1-py3-none-any.whl (17 kB) +Collecting lazy-object-proxy==1.9.0 (from -r requirements_lock.txt (line 603)) + Using cached lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (64 kB) +Collecting limits==3.6.0 (from -r requirements_lock.txt (line 641)) + Using cached limits-3.6.0-py3-none-any.whl (42 kB) +Collecting linkify-it-py==2.0.2 (from -r requirements_lock.txt (line 645)) + Using cached linkify_it_py-2.0.2-py3-none-any.whl (19 kB) +Collecting lockfile==0.12.2 (from -r requirements_lock.txt (line 649)) + Using cached lockfile-0.12.2-py2.py3-none-any.whl (13 kB) +Collecting mako==1.2.4 (from -r requirements_lock.txt (line 655)) + Using cached Mako-1.2.4-py3-none-any.whl (78 kB) +Collecting markdown==3.5 (from -r requirements_lock.txt (line 659)) + Using cached Markdown-3.5-py3-none-any.whl (101 kB) +Collecting markdown-it-py==3.0.0 (from -r requirements_lock.txt (line 663)) + Using cached markdown_it_py-3.0.0-py3-none-any.whl (87 kB) +Collecting markupsafe==2.1.3 (from -r requirements_lock.txt (line 670)) + Using cached MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (28 kB) +Collecting marshmallow==3.20.1 (from -r requirements_lock.txt (line 737)) + Using cached marshmallow-3.20.1-py3-none-any.whl (49 kB) +Collecting marshmallow-oneofschema==3.0.1 (from -r requirements_lock.txt (line 744)) + Using cached marshmallow_oneofschema-3.0.1-py2.py3-none-any.whl (5.8 kB) +Collecting marshmallow-sqlalchemy==0.26.1 (from -r requirements_lock.txt (line 748)) + Using cached marshmallow_sqlalchemy-0.26.1-py2.py3-none-any.whl (15 kB) +Collecting mdit-py-plugins==0.4.0 (from -r requirements_lock.txt (line 752)) + Using cached mdit_py_plugins-0.4.0-py3-none-any.whl (54 kB) +Collecting mdurl==0.1.2 (from -r requirements_lock.txt (line 756)) + Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB) +Collecting opentelemetry-api==1.20.0 (from -r requirements_lock.txt (line 760)) + Using cached opentelemetry_api-1.20.0-py3-none-any.whl (57 kB) +Collecting opentelemetry-exporter-otlp==1.20.0 (from -r requirements_lock.txt (line 768)) + Using cached opentelemetry_exporter_otlp-1.20.0-py3-none-any.whl (7.0 kB) +Collecting opentelemetry-exporter-otlp-proto-common==1.20.0 (from -r requirements_lock.txt (line 772)) + Using cached opentelemetry_exporter_otlp_proto_common-1.20.0-py3-none-any.whl (17 kB) +Collecting opentelemetry-exporter-otlp-proto-grpc==1.20.0 (from -r requirements_lock.txt (line 778)) + Using cached opentelemetry_exporter_otlp_proto_grpc-1.20.0-py3-none-any.whl (18 kB) +Collecting opentelemetry-exporter-otlp-proto-http==1.20.0 (from -r requirements_lock.txt (line 782)) + Using cached opentelemetry_exporter_otlp_proto_http-1.20.0-py3-none-any.whl (16 kB) +Collecting opentelemetry-proto==1.20.0 (from -r requirements_lock.txt (line 786)) + Using cached opentelemetry_proto-1.20.0-py3-none-any.whl (50 kB) +Collecting opentelemetry-sdk==1.20.0 (from -r requirements_lock.txt (line 793)) + Using cached opentelemetry_sdk-1.20.0-py3-none-any.whl (103 kB) +Collecting opentelemetry-semantic-conventions==0.41b0 (from -r requirements_lock.txt (line 799)) + Using cached opentelemetry_semantic_conventions-0.41b0-py3-none-any.whl (26 kB) +Collecting ordered-set==4.1.0 (from -r requirements_lock.txt (line 803)) + Using cached ordered_set-4.1.0-py3-none-any.whl (7.6 kB) +Collecting packaging==23.2 (from -r requirements_lock.txt (line 807)) + Using cached packaging-23.2-py3-none-any.whl (53 kB) +Collecting pathspec==0.10.3 (from -r requirements_lock.txt (line 817)) + Using cached pathspec-0.10.3-py3-none-any.whl (29 kB) +Collecting pendulum==2.1.2 (from -r requirements_lock.txt (line 823)) + Using cached pendulum-2.1.2.tar.gz (81 kB) + Installing build dependencies: started + Installing build dependencies: finished with status 'done' + Getting requirements to build wheel: started + Getting requirements to build wheel: finished with status 'done' + Preparing metadata (pyproject.toml): started + Preparing metadata (pyproject.toml): finished with status 'done' +Collecting pluggy==1.3.0 (from -r requirements_lock.txt (line 846)) + Using cached pluggy-1.3.0-py3-none-any.whl (18 kB) +Collecting prison==0.2.1 (from -r requirements_lock.txt (line 850)) + Using cached prison-0.2.1-py2.py3-none-any.whl (5.8 kB) +Collecting protobuf==4.24.4 (from -r requirements_lock.txt (line 854)) + Using cached protobuf-4.24.4-cp37-abi3-manylinux2014_x86_64.whl (311 kB) +Collecting psutil==5.9.6 (from -r requirements_lock.txt (line 871)) + Using cached psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (283 kB) +Collecting pycparser==2.21 (from -r requirements_lock.txt (line 889)) + Using cached pycparser-2.21-py2.py3-none-any.whl (118 kB) +Collecting pydantic==2.4.2 (from -r requirements_lock.txt (line 893)) + Using cached pydantic-2.4.2-py3-none-any.whl (395 kB) +Collecting pydantic-core==2.10.1 (from -r requirements_lock.txt (line 897)) + Using cached pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.0 MB) +Collecting pygments==2.16.1 (from -r requirements_lock.txt (line 1005)) + Using cached Pygments-2.16.1-py3-none-any.whl (1.2 MB) +Collecting pyjwt==2.8.0 (from -r requirements_lock.txt (line 1011)) + Using cached PyJWT-2.8.0-py3-none-any.whl (22 kB) +Collecting python-daemon==3.0.1 (from -r requirements_lock.txt (line 1018)) + Using cached python_daemon-3.0.1-py3-none-any.whl (31 kB) +Collecting python-dateutil==2.8.2 (from -r requirements_lock.txt (line 1022)) + Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB) +Collecting python-magic==0.4.27 (from -r requirements_lock.txt (line 1031)) + Using cached python_magic-0.4.27-py2.py3-none-any.whl (13 kB) +Collecting python-nvd3==0.15.0 (from -r requirements_lock.txt (line 1035)) + Using cached python-nvd3-0.15.0.tar.gz (31 kB) + Preparing metadata (setup.py): started + Preparing metadata (setup.py): finished with status 'done' +Collecting python-slugify==8.0.1 (from -r requirements_lock.txt (line 1038)) + Using cached python_slugify-8.0.1-py2.py3-none-any.whl (9.7 kB) +Collecting pytz==2023.3.post1 (from -r requirements_lock.txt (line 1044)) + Using cached pytz-2023.3.post1-py2.py3-none-any.whl (502 kB) +Collecting pytzdata==2020.1 (from -r requirements_lock.txt (line 1050)) + Using cached pytzdata-2020.1-py2.py3-none-any.whl (489 kB) +Collecting pyyaml==6.0 (from -r requirements_lock.txt (line 1054)) + Using cached PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (757 kB) +Collecting referencing==0.30.2 (from -r requirements_lock.txt (line 1100)) + Using cached referencing-0.30.2-py3-none-any.whl (25 kB) +Collecting requests==2.25.1 (from -r requirements_lock.txt (line 1106)) + Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB) +Collecting rfc3339-validator==0.1.4 (from -r requirements_lock.txt (line 1114)) + Using cached rfc3339_validator-0.1.4-py2.py3-none-any.whl (3.5 kB) +Collecting rich==13.6.0 (from -r requirements_lock.txt (line 1118)) + Using cached rich-13.6.0-py3-none-any.whl (239 kB) +Collecting rich-argparse==1.4.0 (from -r requirements_lock.txt (line 1125)) + Using cached rich_argparse-1.4.0-py3-none-any.whl (19 kB) +Collecting rpds-py==0.10.6 (from -r requirements_lock.txt (line 1129)) + Using cached rpds_py-0.10.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB) +Collecting s3cmd==2.1.0 (from -r requirements_lock.txt (line 1232)) + Using cached s3cmd-2.1.0-py2.py3-none-any.whl (145 kB) +Collecting setproctitle==1.3.3 (from -r requirements_lock.txt (line 1236)) + Using cached setproctitle-1.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (31 kB) +Collecting six==1.16.0 (from -r requirements_lock.txt (line 1326)) + Using cached six-1.16.0-py2.py3-none-any.whl (11 kB) +Collecting sniffio==1.3.0 (from -r requirements_lock.txt (line 1333)) + Using cached sniffio-1.3.0-py3-none-any.whl (10 kB) +Collecting sqlalchemy==1.4.49 (from -r requirements_lock.txt (line 1340)) + Using cached SQLAlchemy-1.4.49-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB) +Collecting sqlalchemy-jsonfield==1.0.1.post0 (from -r requirements_lock.txt (line 1397)) + Using cached SQLAlchemy_JSONField-1.0.1.post0-py3-none-any.whl (10 kB) +Collecting sqlalchemy-utils==0.41.1 (from -r requirements_lock.txt (line 1401)) + Using cached SQLAlchemy_Utils-0.41.1-py3-none-any.whl (92 kB) +Collecting sqlparse==0.4.4 (from -r requirements_lock.txt (line 1405)) + Using cached sqlparse-0.4.4-py3-none-any.whl (41 kB) +Collecting tabulate==0.9.0 (from -r requirements_lock.txt (line 1409)) + Using cached tabulate-0.9.0-py3-none-any.whl (35 kB) +Collecting tenacity==8.2.3 (from -r requirements_lock.txt (line 1413)) + Using cached tenacity-8.2.3-py3-none-any.whl (24 kB) +Collecting termcolor==2.3.0 (from -r requirements_lock.txt (line 1417)) + Using cached termcolor-2.3.0-py3-none-any.whl (6.9 kB) +Collecting text-unidecode==1.3 (from -r requirements_lock.txt (line 1421)) + Using cached text_unidecode-1.3-py2.py3-none-any.whl (78 kB) +Collecting typing-extensions==4.8.0 (from -r requirements_lock.txt (line 1425)) + Using cached typing_extensions-4.8.0-py3-none-any.whl (31 kB) +Collecting uc-micro-py==1.0.2 (from -r requirements_lock.txt (line 1438)) + Using cached uc_micro_py-1.0.2-py3-none-any.whl (6.2 kB) +Collecting unicodecsv==0.14.1 (from -r requirements_lock.txt (line 1442)) + Using cached unicodecsv-0.14.1.tar.gz (10 kB) + Preparing metadata (setup.py): started + Preparing metadata (setup.py): finished with status 'done' +Collecting urllib3==1.26.18 (from -r requirements_lock.txt (line 1445)) + Using cached urllib3-1.26.18-py2.py3-none-any.whl (143 kB) +Collecting werkzeug==2.2.3 (from -r requirements_lock.txt (line 1449)) + Using cached Werkzeug-2.2.3-py3-none-any.whl (233 kB) +Collecting wrapt==1.15.0 (from -r requirements_lock.txt (line 1458)) + Using cached wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (78 kB) +Collecting wtforms==3.1.0 (from -r requirements_lock.txt (line 1535)) + Using cached wtforms-3.1.0-py3-none-any.whl (145 kB) +Collecting yamllint==1.28.0 (from -r requirements_lock.txt (line 1541)) + Using cached yamllint-1.28.0-py2.py3-none-any.whl (62 kB) +Collecting zipp==3.17.0 (from -r requirements_lock.txt (line 1545)) + Using cached zipp-3.17.0-py3-none-any.whl (7.4 kB) +Collecting setuptools==65.6.3 (from -r requirements_lock.txt (line 1553)) + Using cached setuptools-65.6.3-py3-none-any.whl (1.2 MB) +{ + "version": "1", + "pip_version": "23.3.1", + "install": [ + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/a2/8b/46919127496036c8e990b2b236454a0d8655fd46e1df2fd35610a9cbc842/alembic-1.12.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=03226222f1cf943deee6c85d9464261a6c710cd19b4fe867a3ad1f25afda610f", + "hashes": { + "sha256": "03226222f1cf943deee6c85d9464261a6c710cd19b4fe867a3ad1f25afda610f" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "alembic", + "version": "1.12.0", + "summary": "A database migration tool for SQLAlchemy.", + "description": "Alembic is a database migrations tool written by the author\nof `SQLAlchemy `_. A migrations tool\noffers the following functionality:\n\n* Can emit ALTER statements to a database in order to change\n the structure of tables and other constructs\n* Provides a system whereby \"migration scripts\" may be constructed;\n each script indicates a particular series of steps that can \"upgrade\" a\n target database to a new version, and optionally a series of steps that can\n \"downgrade\" similarly, doing the same steps in reverse.\n* Allows the scripts to execute in some sequential manner.\n\nThe goals of Alembic are:\n\n* Very open ended and transparent configuration and operation. A new\n Alembic environment is generated from a set of templates which is selected\n among a set of options when setup first occurs. The templates then deposit a\n series of scripts that define fully how database connectivity is established\n and how migration scripts are invoked; the migration scripts themselves are\n generated from a template within that series of scripts. The scripts can\n then be further customized to define exactly how databases will be\n interacted with and what structure new migration files should take.\n* Full support for transactional DDL. The default scripts ensure that all\n migrations occur within a transaction - for those databases which support\n this (Postgresql, Microsoft SQL Server), migrations can be tested with no\n need to manually undo changes upon failure.\n* Minimalist script construction. Basic operations like renaming\n tables/columns, adding/removing columns, changing column attributes can be\n performed through one line commands like alter_column(), rename_table(),\n add_constraint(). There is no need to recreate full SQLAlchemy Table\n structures for simple operations like these - the functions themselves\n generate minimalist schema structures behind the scenes to achieve the given\n DDL sequence.\n* \"auto generation\" of migrations. While real world migrations are far more\n complex than what can be automatically determined, Alembic can still\n eliminate the initial grunt work in generating new migration directives\n from an altered schema. The ``--autogenerate`` feature will inspect the\n current status of a database using SQLAlchemy's schema inspection\n capabilities, compare it to the current state of the database model as\n specified in Python, and generate a series of \"candidate\" migrations,\n rendering them into a new migration script as Python directives. The\n developer then edits the new file, adding additional directives and data\n migrations as needed, to produce a finished migration. Table and column\n level changes can be detected, with constraints and indexes to follow as\n well.\n* Full support for migrations generated as SQL scripts. Those of us who\n work in corporate environments know that direct access to DDL commands on a\n production database is a rare privilege, and DBAs want textual SQL scripts.\n Alembic's usage model and commands are oriented towards being able to run a\n series of migrations into a textual output file as easily as it runs them\n directly to a database. Care must be taken in this mode to not invoke other\n operations that rely upon in-memory SELECTs of rows - Alembic tries to\n provide helper constructs like bulk_insert() to help with data-oriented\n operations that are compatible with script-based DDL.\n* Non-linear, dependency-graph versioning. Scripts are given UUID\n identifiers similarly to a DVCS, and the linkage of one script to the next\n is achieved via human-editable markers within the scripts themselves.\n The structure of a set of migration files is considered as a\n directed-acyclic graph, meaning any migration file can be dependent\n on any other arbitrary set of migration files, or none at\n all. Through this open-ended system, migration files can be organized\n into branches, multiple roots, and mergepoints, without restriction.\n Commands are provided to produce new branches, roots, and merges of\n branches automatically.\n* Provide a library of ALTER constructs that can be used by any SQLAlchemy\n application. The DDL constructs build upon SQLAlchemy's own DDLElement base\n and can be used standalone by any application or script.\n* At long last, bring SQLite and its inablity to ALTER things into the fold,\n but in such a way that SQLite's very special workflow needs are accommodated\n in an explicit way that makes the most of a bad situation, through the\n concept of a \"batch\" migration, where multiple changes to a table can\n be batched together to form a series of instructions for a single, subsequent\n \"move-and-copy\" workflow. You can even use \"move-and-copy\" workflow for\n other databases, if you want to recreate a table in the background\n on a busy system.\n\nDocumentation and status of Alembic is at https://alembic.sqlalchemy.org/\n\nThe SQLAlchemy Project\n======================\n\nAlembic is part of the `SQLAlchemy Project `_ and\nadheres to the same standards and conventions as the core project.\n\nDevelopment / Bug reporting / Pull requests\n___________________________________________\n\nPlease refer to the\n`SQLAlchemy Community Guide `_ for\nguidelines on coding and participating in this project.\n\nCode of Conduct\n_______________\n\nAbove all, SQLAlchemy places great emphasis on polite, thoughtful, and\nconstructive communication between users and developers.\nPlease see our current Code of Conduct at\n`Code of Conduct `_.\n\nLicense\n=======\n\nAlembic is distributed under the `MIT license\n`_.\n", + "description_content_type": "text/x-rst", + "home_page": "https://alembic.sqlalchemy.org", + "author": "Mike Bayer", + "author_email": "mike_mp@zzzcomputing.com", + "license": "MIT", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Environment :: Console", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Database :: Front-Ends" + ], + "requires_dist": [ + "SQLAlchemy >=1.3.0", + "Mako", + "typing-extensions >=4", + "importlib-metadata ; python_version < \"3.9\"", + "importlib-resources ; python_version < \"3.9\"", + "python-dateutil ; extra == 'tz'" + ], + "requires_python": ">=3.7", + "project_url": [ + "Source, https://github.com/sqlalchemy/alembic/", + "Documentation, https://alembic.sqlalchemy.org/en/latest/", + "Issue Tracker, https://github.com/sqlalchemy/alembic/issues/" + ], + "provides_extra": [ + "tz" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/28/78/d31230046e58c207284c6b2c4e8d96e6d3cb4e52354721b944d3e1ee4aa5/annotated_types-0.6.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43", + "hashes": { + "sha256": "0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "annotated-types", + "version": "0.6.0", + "summary": "Reusable constraint types to use with typing.Annotated", + "description": "# annotated-types\n\n[![CI](https://github.com/annotated-types/annotated-types/workflows/CI/badge.svg?event=push)](https://github.com/annotated-types/annotated-types/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![pypi](https://img.shields.io/pypi/v/annotated-types.svg)](https://pypi.python.org/pypi/annotated-types)\n[![versions](https://img.shields.io/pypi/pyversions/annotated-types.svg)](https://github.com/annotated-types/annotated-types)\n[![license](https://img.shields.io/github/license/annotated-types/annotated-types.svg)](https://github.com/annotated-types/annotated-types/blob/main/LICENSE)\n\n[PEP-593](https://peps.python.org/pep-0593/) added `typing.Annotated` as a way of\nadding context-specific metadata to existing types, and specifies that\n`Annotated[T, x]` _should_ be treated as `T` by any tool or library without special\nlogic for `x`.\n\nThis package provides metadata objects which can be used to represent common\nconstraints such as upper and lower bounds on scalar values and collection sizes,\na `Predicate` marker for runtime checks, and\ndescriptions of how we intend these metadata to be interpreted. In some cases,\nwe also note alternative representations which do not require this package.\n\n## Install\n\n```bash\npip install annotated-types\n```\n\n## Examples\n\n```python\nfrom typing import Annotated\nfrom annotated_types import Gt, Len, Predicate\n\nclass MyClass:\n age: Annotated[int, Gt(18)] # Valid: 19, 20, ...\n # Invalid: 17, 18, \"19\", 19.0, ...\n factors: list[Annotated[int, Predicate(is_prime)]] # Valid: 2, 3, 5, 7, 11, ...\n # Invalid: 4, 8, -2, 5.0, \"prime\", ...\n\n my_list: Annotated[list[int], Len(0, 10)] # Valid: [], [10, 20, 30, 40, 50]\n # Invalid: (1, 2), [\"abc\"], [0] * 20\n```\n\n## Documentation\n\n_While `annotated-types` avoids runtime checks for performance, users should not\nconstruct invalid combinations such as `MultipleOf(\"non-numeric\")` or `Annotated[int, Len(3)]`.\nDownstream implementors may choose to raise an error, emit a warning, silently ignore\na metadata item, etc., if the metadata objects described below are used with an\nincompatible type - or for any other reason!_\n\n### Gt, Ge, Lt, Le\n\nExpress inclusive and/or exclusive bounds on orderable values - which may be numbers,\ndates, times, strings, sets, etc. Note that the boundary value need not be of the\nsame type that was annotated, so long as they can be compared: `Annotated[int, Gt(1.5)]`\nis fine, for example, and implies that the value is an integer x such that `x > 1.5`.\n\nWe suggest that implementors may also interpret `functools.partial(operator.le, 1.5)`\nas being equivalent to `Gt(1.5)`, for users who wish to avoid a runtime dependency on\nthe `annotated-types` package.\n\nTo be explicit, these types have the following meanings:\n\n* `Gt(x)` - value must be \"Greater Than\" `x` - equivalent to exclusive minimum\n* `Ge(x)` - value must be \"Greater than or Equal\" to `x` - equivalent to inclusive minimum\n* `Lt(x)` - value must be \"Less Than\" `x` - equivalent to exclusive maximum\n* `Le(x)` - value must be \"Less than or Equal\" to `x` - equivalent to inclusive maximum\n\n### Interval\n\n`Interval(gt, ge, lt, le)` allows you to specify an upper and lower bound with a single\nmetadata object. `None` attributes should be ignored, and non-`None` attributes\ntreated as per the single bounds above.\n\n### MultipleOf\n\n`MultipleOf(multiple_of=x)` might be interpreted in two ways:\n\n1. Python semantics, implying `value % multiple_of == 0`, or\n2. [JSONschema semantics](https://json-schema.org/draft/2020-12/json-schema-validation.html#rfc.section.6.2.1),\n where `int(value / multiple_of) == value / multiple_of`.\n\nWe encourage users to be aware of these two common interpretations and their\ndistinct behaviours, especially since very large or non-integer numbers make\nit easy to cause silent data corruption due to floating-point imprecision.\n\nWe encourage libraries to carefully document which interpretation they implement.\n\n### MinLen, MaxLen, Len\n\n`Len()` implies that `min_length <= len(value) <= max_length` - lower and upper bounds are inclusive.\n\nAs well as `Len()` which can optionally include upper and lower bounds, we also\nprovide `MinLen(x)` and `MaxLen(y)` which are equivalent to `Len(min_length=x)`\nand `Len(max_length=y)` respectively.\n\n`Len`, `MinLen`, and `MaxLen` may be used with any type which supports `len(value)`.\n\nExamples of usage:\n\n* `Annotated[list, MaxLen(10)]` (or `Annotated[list, Len(max_length=10))`) - list must have a length of 10 or less\n* `Annotated[str, MaxLen(10)]` - string must have a length of 10 or less\n* `Annotated[list, MinLen(3))` (or `Annotated[list, Len(min_length=3))`) - list must have a length of 3 or more\n* `Annotated[list, Len(4, 6)]` - list must have a length of 4, 5, or 6\n* `Annotated[list, Len(8, 8)]` - list must have a length of exactly 8\n\n#### Changed in v0.4.0\n\n* `min_inclusive` has been renamed to `min_length`, no change in meaning\n* `max_exclusive` has been renamed to `max_length`, upper bound is now **inclusive** instead of **exclusive**\n* The recommendation that slices are interpreted as `Len` has been removed due to ambiguity and different semantic\n meaning of the upper bound in slices vs. `Len`\n\nSee [issue #23](https://github.com/annotated-types/annotated-types/issues/23) for discussion.\n\n### Timezone\n\n`Timezone` can be used with a `datetime` or a `time` to express which timezones\nare allowed. `Annotated[datetime, Timezone(None)]` must be a naive datetime.\n`Timezone[...]` ([literal ellipsis](https://docs.python.org/3/library/constants.html#Ellipsis))\nexpresses that any timezone-aware datetime is allowed. You may also pass a specific\ntimezone string or `timezone` object such as `Timezone(timezone.utc)` or\n`Timezone(\"Africa/Abidjan\")` to express that you only allow a specific timezone,\nthough we note that this is often a symptom of fragile design.\n\n### Predicate\n\n`Predicate(func: Callable)` expresses that `func(value)` is truthy for valid values.\nUsers should prefer the statically inspectable metadata above, but if you need\nthe full power and flexibility of arbitrary runtime predicates... here it is.\n\nWe provide a few predefined predicates for common string constraints:\n\n* `IsLower = Predicate(str.islower)`\n* `IsUpper = Predicate(str.isupper)`\n* `IsDigit = Predicate(str.isdigit)`\n* `IsFinite = Predicate(math.isfinite)`\n* `IsNotFinite = Predicate(Not(math.isfinite))`\n* `IsNan = Predicate(math.isnan)`\n* `IsNotNan = Predicate(Not(math.isnan))`\n* `IsInfinite = Predicate(math.isinf)`\n* `IsNotInfinite = Predicate(Not(math.isinf))`\n\nSome libraries might have special logic to handle known or understandable predicates,\nfor example by checking for `str.isdigit` and using its presence to both call custom\nlogic to enforce digit-only strings, and customise some generated external schema.\nUsers are therefore encouraged to avoid indirection like `lambda s: s.lower()`, in\nfavor of introspectable methods such as `str.lower` or `re.compile(\"pattern\").search`.\n\nTo enable basic negation of commonly used predicates like `math.isnan` without introducing introspection that makes it impossible for implementers to introspect the predicate we provide a `Not` wrapper that simply negates the predicate in an introspectable manner. Several of the predicates listed above are created in this manner.\n\nWe do not specify what behaviour should be expected for predicates that raise\nan exception. For example `Annotated[int, Predicate(str.isdigit)]` might silently\nskip invalid constraints, or statically raise an error; or it might try calling it\nand then propogate or discard the resulting\n`TypeError: descriptor 'isdigit' for 'str' objects doesn't apply to a 'int' object`\nexception. We encourage libraries to document the behaviour they choose.\n\n### Doc\n\n`doc()` can be used to add documentation information in `Annotated`, for function and method parameters, variables, class attributes, return types, and any place where `Annotated` can be used.\n\nIt expects a value that can be statically analyzed, as the main use case is for static analysis, editors, documentation generators, and similar tools.\n\nIt returns a `DocInfo` class with a single attribute `documentation` containing the value passed to `doc()`.\n\nThis is the early adopter's alternative form of the [`typing-doc` proposal](https://github.com/tiangolo/fastapi/blob/typing-doc/typing_doc.md).\n\n### Integrating downstream types with `GroupedMetadata`\n\nImplementers may choose to provide a convenience wrapper that groups multiple pieces of metadata.\nThis can help reduce verbosity and cognitive overhead for users.\nFor example, an implementer like Pydantic might provide a `Field` or `Meta` type that accepts keyword arguments and transforms these into low-level metadata:\n\n```python\nfrom dataclasses import dataclass\nfrom typing import Iterator\nfrom annotated_types import GroupedMetadata, Ge\n\n@dataclass\nclass Field(GroupedMetadata):\n ge: int | None = None\n description: str | None = None\n\n def __iter__(self) -> Iterator[object]:\n # Iterating over a GroupedMetadata object should yield annotated-types\n # constraint metadata objects which describe it as fully as possible,\n # and may include other unknown objects too.\n if self.ge is not None:\n yield Ge(self.ge)\n if self.description is not None:\n yield Description(self.description)\n```\n\nLibraries consuming annotated-types constraints should check for `GroupedMetadata` and unpack it by iterating over the object and treating the results as if they had been \"unpacked\" in the `Annotated` type. The same logic should be applied to the [PEP 646 `Unpack` type](https://peps.python.org/pep-0646/), so that `Annotated[T, Field(...)]`, `Annotated[T, Unpack[Field(...)]]` and `Annotated[T, *Field(...)]` are all treated consistently.\n\nLibraries consuming annotated-types should also ignore any metadata they do not recongize that came from unpacking a `GroupedMetadata`, just like they ignore unrecognized metadata in `Annotated` itself.\n\nOur own `annotated_types.Interval` class is a `GroupedMetadata` which unpacks itself into `Gt`, `Lt`, etc., so this is not an abstract concern. Similarly, `annotated_types.Len` is a `GroupedMetadata` which unpacks itself into `MinLen` (optionally) and `MaxLen`.\n\n### Consuming metadata\n\nWe intend to not be prescriptive as to _how_ the metadata and constraints are used, but as an example of how one might parse constraints from types annotations see our [implementation in `test_main.py`](https://github.com/annotated-types/annotated-types/blob/f59cf6d1b5255a0fe359b93896759a180bec30ae/tests/test_main.py#L94-L103).\n\nIt is up to the implementer to determine how this metadata is used.\nYou could use the metadata for runtime type checking, for generating schemas or to generate example data, amongst other use cases.\n\n## Design & History\n\nThis package was designed at the PyCon 2022 sprints by the maintainers of Pydantic\nand Hypothesis, with the goal of making it as easy as possible for end-users to\nprovide more informative annotations for use by runtime libraries.\n\nIt is deliberately minimal, and following PEP-593 allows considerable downstream\ndiscretion in what (if anything!) they choose to support. Nonetheless, we expect\nthat staying simple and covering _only_ the most common use-cases will give users\nand maintainers the best experience we can. If you'd like more constraints for your\ntypes - follow our lead, by defining them and documenting them downstream!\n", + "description_content_type": "text/markdown", + "author_email": "Samuel Colvin , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Zac Hatfield-Dodds ", + "classifier": [ + "Development Status :: 4 - Beta", + "Environment :: Console", + "Environment :: MacOS X", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions>=4.0.0; python_version < '3.9'" + ], + "requires_python": ">=3.8" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/36/55/ad4de788d84a630656ece71059665e01ca793c04294c463fd84132f40fe6/anyio-4.0.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f", + "hashes": { + "sha256": "cfdb2b588b9fc25ede96d8db56ed50848b0b649dca3dd1df0b11f683bb9e0b5f" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "anyio", + "version": "4.0.0", + "summary": "High level compatibility layer for multiple asynchronous event loop implementations", + "description": ".. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg\n :target: https://github.com/agronholm/anyio/actions/workflows/test.yml\n :alt: Build Status\n.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master\n :target: https://coveralls.io/github/agronholm/anyio?branch=master\n :alt: Code Coverage\n.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest\n :target: https://anyio.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation\n.. image:: https://badges.gitter.im/gitterHQ/gitter.svg\n :target: https://gitter.im/python-trio/AnyIO\n :alt: Gitter chat\n\nAnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or\ntrio_. It implements trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony\nwith the native SC of trio itself.\n\nApplications and libraries written against AnyIO's API will run unmodified on either asyncio_ or\ntrio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full\nrefactoring necessary. It will blend in with the native libraries of your chosen backend.\n\nDocumentation\n-------------\n\nView full documentation at: https://anyio.readthedocs.io/\n\nFeatures\n--------\n\nAnyIO offers the following functionality:\n\n* Task groups (nurseries_ in trio terminology)\n* High-level networking (TCP, UDP and UNIX sockets)\n\n * `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python\n 3.8)\n * async/await style UDP sockets (unlike asyncio where you still have to use Transports and\n Protocols)\n\n* A versatile API for byte streams and object streams\n* Inter-task synchronization and communication (locks, conditions, events, semaphores, object\n streams)\n* Worker threads\n* Subprocesses\n* Asynchronous file I/O (using worker threads)\n* Signal handling\n\nAnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.\nIt even works with the popular Hypothesis_ library.\n\n.. _asyncio: https://docs.python.org/3/library/asyncio.html\n.. _trio: https://github.com/python-trio/trio\n.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency\n.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning\n.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs\n.. _pytest: https://docs.pytest.org/en/latest/\n.. _Hypothesis: https://hypothesis.works/\n", + "description_content_type": "text/x-rst", + "author_email": "Alex Grönholm ", + "license": "MIT", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Framework :: AnyIO", + "Typing :: Typed", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12" + ], + "requires_dist": [ + "idna >=2.8", + "sniffio >=1.1", + "exceptiongroup >=1.0.2 ; python_version < \"3.11\"", + "packaging ; extra == 'doc'", + "Sphinx >=7 ; extra == 'doc'", + "sphinx-autodoc-typehints >=1.2.0 ; extra == 'doc'", + "anyio[trio] ; extra == 'test'", + "coverage[toml] >=7 ; extra == 'test'", + "hypothesis >=4.0 ; extra == 'test'", + "psutil >=5.9 ; extra == 'test'", + "pytest >=7.0 ; extra == 'test'", + "pytest-mock >=3.6.1 ; extra == 'test'", + "trustme ; extra == 'test'", + "uvloop >=0.17 ; (python_version < \"3.12\" and platform_python_implementation == \"CPython\" and platform_system != \"Windows\") and extra == 'test'", + "trio >=0.22 ; extra == 'trio'" + ], + "requires_python": ">=3.8", + "project_url": [ + "Documentation, https://anyio.readthedocs.io/en/latest/", + "Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html", + "Source code, https://github.com/agronholm/anyio", + "Issue tracker, https://github.com/agronholm/anyio/issues" + ], + "provides_extra": [ + "doc", + "test", + "trio" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/4e/7b/498a6d2f8a95b35b979763fe27a1e6a162f4d4de5e79e30655f21b8e0458/apache_airflow-2.7.2-py3-none-any.whl", + "archive_info": { + "hash": "sha256=1bc2c022bcae24b911e49fafd5fb619b49efba87ed7bc8561a2065810d8fe899", + "hashes": { + "sha256": "1bc2c022bcae24b911e49fafd5fb619b49efba87ed7bc8561a2065810d8fe899" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "apache-airflow", + "version": "2.7.2", + "summary": "Programmatically author, schedule and monitor data pipelines", + "description": "\n\n\n\n# Apache Airflow\n\n[![PyPI version](https://badge.fury.io/py/apache-airflow.svg)](https://badge.fury.io/py/apache-airflow)\n[![GitHub Build](https://github.com/apache/airflow/workflows/CI%20Build/badge.svg)](https://github.com/apache/airflow/actions)\n[![Coverage Status](https://codecov.io/github/apache/airflow/coverage.svg?branch=main)](https://app.codecov.io/gh/apache/airflow/branch/main)\n[![License](https://img.shields.io/:license-Apache%202-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0.txt)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/apache-airflow.svg)](https://pypi.org/project/apache-airflow/)\n[![Docker Pulls](https://img.shields.io/docker/pulls/apache/airflow.svg)](https://hub.docker.com/r/apache/airflow)\n[![Docker Stars](https://img.shields.io/docker/stars/apache/airflow.svg)](https://hub.docker.com/r/apache/airflow)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/apache-airflow)](https://pypi.org/project/apache-airflow/)\n[![Artifact HUB](https://img.shields.io/endpoint?url=https://artifacthub.io/badge/repository/apache-airflow)](https://artifacthub.io/packages/search?repo=apache-airflow)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Twitter Follow](https://img.shields.io/twitter/follow/ApacheAirflow.svg?style=social&label=Follow)](https://twitter.com/ApacheAirflow)\n[![Slack Status](https://img.shields.io/badge/slack-join_chat-white.svg?logo=slack&style=social)](https://s.apache.org/airflow-slack)\n[![Contributors](https://img.shields.io/github/contributors/apache/airflow)](https://github.com/apache/airflow/graphs/contributors)\n[![OSSRank](https://shields.io/endpoint?url=https://ossrank.com/shield/6)](https://ossrank.com/p/6)\n\n[Apache Airflow](https://airflow.apache.org/docs/apache-airflow/stable/) (or simply Airflow) is a platform to programmatically author, schedule, and monitor workflows.\n\nWhen workflows are defined as code, they become more maintainable, versionable, testable, and collaborative.\n\nUse Airflow to author workflows as directed acyclic graphs (DAGs) of tasks. The Airflow scheduler executes your tasks on an array of workers while following the specified dependencies. Rich command line utilities make performing complex surgeries on DAGs a snap. The rich user interface makes it easy to visualize pipelines running in production, monitor progress, and troubleshoot issues when needed.\n\n## Requirements\n\nApache Airflow is tested with:\n\n| | Main version (dev) | Stable version (2.7.2) |\n|-------------|------------------------------|------------------------|\n| Python | 3.8, 3.9, 3.10, 3.11 | 3.8, 3.9, 3.10, 3.11 |\n| Platform | AMD64/ARM64(\\*) | AMD64/ARM64(\\*) |\n| Kubernetes | 1.24, 1.25, 1.26, 1.27, 1.28 | 1.24, 1.25, 1.26, 1.27 |\n| PostgreSQL | 11, 12, 13, 14, 15 | 11, 12, 13, 14, 15 |\n| MySQL | 5.7, 8.0, 8.1 | 5.7, 8.0 |\n| SQLite | 3.15.0+ | 3.15.0+ |\n| MSSQL | 2017(\\*\\*), 2019(\\*\\*) | 2017(\\*), 2019(\\*) |\n\n\\* Experimental\n\n\\*\\* **Discontinued soon**, not recommended for the new installation\n\n**Note**: MySQL 5.x versions are unable to or have limitations with\nrunning multiple schedulers -- please see the [Scheduler docs](https://airflow.apache.org/docs/apache-airflow/stable/scheduler.html).\nMariaDB is not tested/recommended.\n\n**Note**: SQLite is used in Airflow tests. Do not use it in production. We recommend\nusing the latest stable version of SQLite for local development.\n\n**Note**: Airflow currently can be run on POSIX-compliant Operating Systems. For development, it is regularly\ntested on fairly modern Linux Distros and recent versions of macOS.\nOn Windows you can run it via WSL2 (Windows Subsystem for Linux 2) or via Linux Containers.\nThe work to add Windows support is tracked via [#10388](https://github.com/apache/airflow/issues/10388), but\nit is not a high priority. You should only use Linux-based distros as \"Production\" execution environment\nas this is the only environment that is supported. The only distro that is used in our CI tests and that\nis used in the [Community managed DockerHub image](https://hub.docker.com/p/apache/airflow) is\n`Debian Bullseye`.\n\n## Getting started\n\nVisit the official Airflow website documentation (latest **stable** release) for help with\n[installing Airflow](https://airflow.apache.org/docs/apache-airflow/stable/installation.html),\n[getting started](https://airflow.apache.org/docs/apache-airflow/stable/start.html), or walking\nthrough a more complete [tutorial](https://airflow.apache.org/docs/apache-airflow/stable/tutorial.html).\n\n> Note: If you're looking for documentation for the main branch (latest development branch): you can find it on [s.apache.org/airflow-docs](https://s.apache.org/airflow-docs/).\n\nFor more information on Airflow Improvement Proposals (AIPs), visit\nthe [Airflow Wiki](https://cwiki.apache.org/confluence/display/AIRFLOW/Airflow+Improvement+Proposals).\n\nDocumentation for dependent projects like provider packages, Docker image, Helm Chart, you'll find it in [the documentation index](https://airflow.apache.org/docs/).\n\n## Installing from PyPI\n\nWe publish Apache Airflow as `apache-airflow` package in PyPI. Installing it however might be sometimes tricky\nbecause Airflow is a bit of both a library and application. Libraries usually keep their dependencies open, and\napplications usually pin them, but we should do neither and both simultaneously. We decided to keep\nour dependencies as open as possible (in `setup.py`) so users can install different versions of libraries\nif needed. This means that `pip install apache-airflow` will not work from time to time or will\nproduce unusable Airflow installation.\n\nTo have repeatable installation, however, we keep a set of \"known-to-be-working\" constraint\nfiles in the orphan `constraints-main` and `constraints-2-0` branches. We keep those \"known-to-be-working\"\nconstraints files separately per major/minor Python version.\nYou can use them as constraint files when installing Airflow from PyPI. Note that you have to specify\ncorrect Airflow tag/version/branch and Python versions in the URL.\n\n\n1. Installing just Airflow:\n\n> Note: Only `pip` installation is currently officially supported.\n\nWhile it is possible to install Airflow with tools like [Poetry](https://python-poetry.org) or\n[pip-tools](https://pypi.org/project/pip-tools), they do not share the same workflow as\n`pip` - especially when it comes to constraint vs. requirements management.\nInstalling via `Poetry` or `pip-tools` is not currently supported.\n\nThere are known issues with ``bazel`` that might lead to circular dependencies when using it to install\nAirflow. Please switch to ``pip`` if you encounter such problems. ``Bazel`` community works on fixing\nthe problem in `this PR `_ so it might be that\nnewer versions of ``bazel`` will handle it.\n\nIf you wish to install Airflow using those tools, you should use the constraint files and convert\nthem to the appropriate format and workflow that your tool requires.\n\n\n```bash\npip install 'apache-airflow==2.7.2' \\\n --constraint \"https://raw.githubusercontent.com/apache/airflow/constraints-2.7.2/constraints-3.8.txt\"\n```\n\n2. Installing with extras (i.e., postgres, google)\n\n```bash\npip install 'apache-airflow[postgres,google]==2.7.2' \\\n --constraint \"https://raw.githubusercontent.com/apache/airflow/constraints-2.7.2/constraints-3.8.txt\"\n```\n\nFor information on installing provider packages, check\n[providers](http://airflow.apache.org/docs/apache-airflow-providers/index.html).\n\n## Official source code\n\nApache Airflow is an [Apache Software Foundation](https://www.apache.org) (ASF) project,\nand our official source code releases:\n\n- Follow the [ASF Release Policy](https://www.apache.org/legal/release-policy.html)\n- Can be downloaded from [the ASF Distribution Directory](https://downloads.apache.org/airflow)\n- Are cryptographically signed by the release manager\n- Are officially voted on by the PMC members during the\n [Release Approval Process](https://www.apache.org/legal/release-policy.html#release-approval)\n\nFollowing the ASF rules, the source packages released must be sufficient for a user to build and test the\nrelease provided they have access to the appropriate platform and tools.\n\n## Contributing\n\nWant to help build Apache Airflow? Check out our [contributing documentation](https://github.com/apache/airflow/blob/main/CONTRIBUTING.rst).\n\nOfficial Docker (container) images for Apache Airflow are described in [IMAGES.rst](https://github.com/apache/airflow/blob/main/IMAGES.rst).\n\n## Who uses Apache Airflow?\n\nMore than 400 organizations are using Apache Airflow\n[in the wild](https://github.com/apache/airflow/blob/main/INTHEWILD.md).\n\n## Who maintains Apache Airflow?\n\nAirflow is the work of the [community](https://github.com/apache/airflow/graphs/contributors),\nbut the [core committers/maintainers](https://people.apache.org/committers-by-project.html#airflow)\nare responsible for reviewing and merging PRs as well as steering conversations around new feature requests.\nIf you would like to become a maintainer, please review the Apache Airflow\n[committer requirements](https://github.com/apache/airflow/blob/main/COMMITTERS.rst#guidelines-to-become-an-airflow-committer).\n", + "description_content_type": "text/markdown", + "home_page": "https://airflow.apache.org/", + "author": "Apache Software Foundation", + "author_email": "dev@airflow.apache.org", + "license": "Apache License 2.0", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: System :: Monitoring", + "Framework :: Apache Airflow" + ], + "requires_dist": [ + "alembic (<2.0,>=1.6.3)", + "argcomplete (>=1.10)", + "asgiref", + "attrs (>=22.1.0)", + "blinker", + "cattrs (>=22.1.0)", + "colorlog (<5.0,>=4.0.2)", + "configupdater (>=3.1.1)", + "connexion[flask] (>=2.10.0)", + "cron-descriptor (>=1.2.24)", + "croniter (>=0.3.17)", + "cryptography (>=0.9.3)", + "deprecated (>=1.2.13)", + "dill (>=0.2.2)", + "flask (<2.3,>=2.2)", + "flask-appbuilder (==4.3.6)", + "flask-caching (>=1.5.0)", + "flask-login (>=0.6.2)", + "flask-session (>=0.4.0)", + "flask-wtf (>=0.15)", + "google-re2 (>=1.0)", + "graphviz (>=0.12)", + "gunicorn (>=20.1.0)", + "httpx", + "itsdangerous (>=2.0)", + "jinja2 (>=3.0.0)", + "jsonschema (>=4.18.0)", + "lazy-object-proxy", + "linkify-it-py (>=2.0.0)", + "lockfile (>=0.12.2)", + "markdown (>=3.0)", + "markdown-it-py (>=2.1.0)", + "markupsafe (>=1.1.1)", + "marshmallow-oneofschema (>=2.0.1)", + "mdit-py-plugins (>=0.3.0)", + "opentelemetry-api (>=1.15.0)", + "opentelemetry-exporter-otlp", + "packaging (>=14.0)", + "pathspec (>=0.9.0)", + "pendulum (>=2.0)", + "pluggy (>=1.0)", + "psutil (>=4.2.0)", + "pydantic (>=1.10.0)", + "pygments (>=2.0.1)", + "pyjwt (>=2.0.0)", + "python-daemon (>=3.0.0)", + "python-dateutil (>=2.3)", + "python-nvd3 (>=0.15.0)", + "python-slugify (>=5.0)", + "rfc3339-validator (>=0.1.4)", + "rich (>=12.4.4)", + "rich-argparse (>=1.0.0)", + "setproctitle (>=1.1.8)", + "sqlalchemy (<2.0,>=1.4.28)", + "sqlalchemy-jsonfield (>=1.0)", + "tabulate (>=0.7.5)", + "tenacity (!=8.2.0,>=6.2.0)", + "termcolor (>=1.1.0)", + "typing-extensions (>=4.0.0)", + "unicodecsv (>=0.14.1)", + "werkzeug (>=2.0)", + "apache-airflow-providers-common-sql", + "apache-airflow-providers-ftp", + "apache-airflow-providers-http", + "apache-airflow-providers-imap", + "apache-airflow-providers-sqlite", + "importlib-metadata (>=1.7) ; python_version < \"3.9\"", + "importlib-resources (>=5.2) ; python_version < \"3.9\"", + "aiobotocore (>=2.1.1) ; extra == 'aiobotocore'", + "apache-airflow-providers-airbyte ; extra == 'airbyte'", + "apache-airflow-providers-alibaba ; extra == 'alibaba'", + "PyGithub (!=1.58) ; extra == 'all'", + "PyOpenSSL ; extra == 'all'", + "adal (>=1.2.7) ; extra == 'all'", + "aiobotocore (>=2.1.1) ; extra == 'all'", + "aiohttp ; extra == 'all'", + "aiohttp (<4,>=3.6.3) ; extra == 'all'", + "alibabacloud-adb20211201 (>=1.0.0) ; extra == 'all'", + "alibabacloud-tea-openapi (>=0.3.7) ; extra == 'all'", + "amqp ; extra == 'all'", + "analytics-python (>=1.2.9) ; extra == 'all'", + "apache-airflow (>=2.4.0) ; extra == 'all'", + "apache-airflow (>=2.7.0) ; extra == 'all'", + "apache-beam (>=2.47.0) ; extra == 'all'", + "apprise ; extra == 'all'", + "arrow (>=0.16.0) ; extra == 'all'", + "asana (<4.0.0,>=0.10) ; extra == 'all'", + "asgiref ; extra == 'all'", + "asgiref (>=3.5.2) ; extra == 'all'", + "atlasclient (>=0.1.2) ; extra == 'all'", + "atlassian-python-api (>=1.14.2) ; extra == 'all'", + "attrs (>=22.2) ; extra == 'all'", + "authlib (>=1.0.0) ; extra == 'all'", + "azure-batch (>=8.0.0) ; extra == 'all'", + "azure-cosmos (>=4.0.0) ; extra == 'all'", + "azure-datalake-store (>=0.0.45) ; extra == 'all'", + "azure-identity (>=1.3.1) ; extra == 'all'", + "azure-keyvault-secrets (>=4.1.0) ; extra == 'all'", + "azure-kusto-data (<0.1,>=0.0.43) ; extra == 'all'", + "azure-mgmt-containerinstance (<2.0,>=1.5.0) ; extra == 'all'", + "azure-mgmt-datafactory (<2.0,>=1.0.0) ; extra == 'all'", + "azure-mgmt-datalake-store (>=0.5.0) ; extra == 'all'", + "azure-mgmt-resource (>=2.2.0) ; extra == 'all'", + "azure-servicebus (>=7.6.1) ; extra == 'all'", + "azure-storage-blob (>=12.14.0) ; extra == 'all'", + "azure-storage-common (>=2.1.0) ; extra == 'all'", + "azure-storage-file-datalake (>=12.9.1) ; extra == 'all'", + "azure-storage-file (>=2.1.0) ; extra == 'all'", + "azure-synapse-spark ; extra == 'all'", + "bcrypt (>=2.0.0) ; extra == 'all'", + "blinker (>=1.1) ; extra == 'all'", + "boto3 (>=1.28.0) ; extra == 'all'", + "botocore (>=1.31.0) ; extra == 'all'", + "cassandra-driver (>=3.13.0) ; extra == 'all'", + "celery (!=5.3.2,!=5.3.3,<6,>=5.3.0) ; extra == 'all'", + "cgroupspy (>=0.2.2) ; extra == 'all'", + "cloudant (>=2.0) ; extra == 'all'", + "cloudpickle (>=1.4.1) ; extra == 'all'", + "confluent-kafka (>=1.8.2) ; extra == 'all'", + "cryptography (>=2.0.0) ; extra == 'all'", + "dask (!=2022.10.1,!=2023.5.0,>=2.9.0) ; extra == 'all'", + "databricks-sql-connector (<3.0.0,>=2.0.0) ; extra == 'all'", + "datadog (>=0.14.0) ; extra == 'all'", + "distributed (!=2023.5.0,>=2.11.1) ; extra == 'all'", + "dnspython (>=1.13.0) ; extra == 'all'", + "docker (>=5.0.3) ; extra == 'all'", + "elasticsearch (<9,>8) ; extra == 'all'", + "eventlet (>=0.33.3) ; extra == 'all'", + "facebook-business (>=6.0.2) ; extra == 'all'", + "flask-appbuilder[oauth] (==4.3.6) ; extra == 'all'", + "flask-bcrypt (>=0.7.1) ; extra == 'all'", + "flower (>=1.0.0) ; extra == 'all'", + "gcloud-aio-auth (<5.0.0,>=4.0.0) ; extra == 'all'", + "gcloud-aio-bigquery (>=6.1.2) ; extra == 'all'", + "gcloud-aio-storage ; extra == 'all'", + "gevent (>=0.13) ; extra == 'all'", + "google-ads (>=21.2.0) ; extra == 'all'", + "google-api-core (>=2.11.0) ; extra == 'all'", + "google-api-python-client (>=1.6.0) ; extra == 'all'", + "google-auth-httplib2 (>=0.0.1) ; extra == 'all'", + "google-auth (>=1.0.0) ; extra == 'all'", + "google-auth (<3.0.0,>=1.0.0) ; extra == 'all'", + "google-cloud-aiplatform (>=1.22.1) ; extra == 'all'", + "google-cloud-automl (>=2.11.0) ; extra == 'all'", + "google-cloud-bigquery-datatransfer (>=3.11.0) ; extra == 'all'", + "google-cloud-bigtable (>=2.17.0) ; extra == 'all'", + "google-cloud-build (>=3.13.0) ; extra == 'all'", + "google-cloud-compute (>=1.10.0) ; extra == 'all'", + "google-cloud-container (>=2.17.4) ; extra == 'all'", + "google-cloud-datacatalog (>=3.11.1) ; extra == 'all'", + "google-cloud-dataflow-client (>=0.8.2) ; extra == 'all'", + "google-cloud-dataform (>=0.5.0) ; extra == 'all'", + "google-cloud-dataplex (>=1.4.2) ; extra == 'all'", + "google-cloud-dataproc-metastore (>=1.12.0) ; extra == 'all'", + "google-cloud-dataproc (>=5.4.0) ; extra == 'all'", + "google-cloud-dlp (>=3.12.0) ; extra == 'all'", + "google-cloud-kms (>=2.15.0) ; extra == 'all'", + "google-cloud-language (>=2.9.0) ; extra == 'all'", + "google-cloud-logging (>=3.5.0) ; extra == 'all'", + "google-cloud-memcache (>=1.7.0) ; extra == 'all'", + "google-cloud-monitoring (>=2.14.1) ; extra == 'all'", + "google-cloud-orchestration-airflow (>=1.7.0) ; extra == 'all'", + "google-cloud-os-login (>=2.9.1) ; extra == 'all'", + "google-cloud-pubsub (>=2.15.0) ; extra == 'all'", + "google-cloud-redis (>=2.12.0) ; extra == 'all'", + "google-cloud-secret-manager (>=2.16.0) ; extra == 'all'", + "google-cloud-spanner (>=3.11.1) ; extra == 'all'", + "google-cloud-speech (>=2.18.0) ; extra == 'all'", + "google-cloud-storage-transfer (>=1.4.1) ; extra == 'all'", + "google-cloud-storage (>=2.7.0) ; extra == 'all'", + "google-cloud-tasks (>=2.13.0) ; extra == 'all'", + "google-cloud-texttospeech (>=2.14.1) ; extra == 'all'", + "google-cloud-translate (>=3.11.0) ; extra == 'all'", + "google-cloud-videointelligence (>=2.11.0) ; extra == 'all'", + "google-cloud-vision (>=3.4.0) ; extra == 'all'", + "google-cloud-workflows (>=1.10.0) ; extra == 'all'", + "greenlet (>=0.4.9) ; extra == 'all'", + "grpcio-gcp (>=0.2.2) ; extra == 'all'", + "grpcio (>=1.15.0) ; extra == 'all'", + "hdfs[avro,dataframe,kerberos] (>=2.0.4) ; extra == 'all'", + "hmsclient (>=0.1.0) ; extra == 'all'", + "httpx ; extra == 'all'", + "hvac (>=0.10) ; extra == 'all'", + "impyla (<1.0,>=0.18.0) ; extra == 'all'", + "influxdb-client (>=1.19.0) ; extra == 'all'", + "jaydebeapi (>=1.1.1) ; extra == 'all'", + "json-merge-patch (>=0.2) ; extra == 'all'", + "jsonpath-ng (>=1.5.3) ; extra == 'all'", + "kubernetes (<24,>=21.7.0) ; extra == 'all'", + "kubernetes-asyncio (<25,>=18.20.1) ; extra == 'all'", + "kylinpy (>=2.6) ; extra == 'all'", + "ldap3 (>=2.5.1) ; extra == 'all'", + "looker-sdk (>=22.2.0) ; extra == 'all'", + "mysqlclient (>=1.3.6) ; extra == 'all'", + "neo4j (>=4.2.1) ; extra == 'all'", + "openlineage-integration-common (>=0.28.0) ; extra == 'all'", + "openlineage-python (>=0.28.0) ; extra == 'all'", + "opentelemetry-exporter-prometheus ; extra == 'all'", + "opsgenie-sdk (>=2.1.5) ; extra == 'all'", + "oracledb (>=1.0.0) ; extra == 'all'", + "oss2 (>=2.14.0) ; extra == 'all'", + "pandas-gbq ; extra == 'all'", + "pandas (>=0.17.1) ; extra == 'all'", + "papermill[all] (>=1.2.1) ; extra == 'all'", + "paramiko (>=2.6.0) ; extra == 'all'", + "pdpyras (>=4.1.2) ; extra == 'all'", + "pinotdb (>0.4.7) ; extra == 'all'", + "plyvel ; extra == 'all'", + "presto-python-client (>=0.8.2) ; extra == 'all'", + "proto-plus (>=1.19.6) ; extra == 'all'", + "psycopg2-binary (>=2.8.0) ; extra == 'all'", + "pyarrow (>=9.0.0) ; extra == 'all'", + "pydruid (>=0.4.1) ; extra == 'all'", + "pyexasol (>=0.5.1) ; extra == 'all'", + "pyhive[hive_pure_sasl] (>=0.7.0) ; extra == 'all'", + "pykerberos (>=1.1.13) ; extra == 'all'", + "pymongo (>=3.6.0) ; extra == 'all'", + "pymssql (>=2.1.5) ; extra == 'all'", + "pyodbc ; extra == 'all'", + "pypsrp (>=0.8.0) ; extra == 'all'", + "pyspark ; extra == 'all'", + "python-arango (>=7.3.2) ; extra == 'all'", + "python-dotenv (>=0.21.0) ; extra == 'all'", + "python-jenkins (>=1.0.0) ; extra == 'all'", + "python-ldap ; extra == 'all'", + "python-telegram-bot (>=20.0.0) ; extra == 'all'", + "pywinrm (>=0.4) ; extra == 'all'", + "redis (!=4.5.5,<5.0.0,>=4.5.2) ; extra == 'all'", + "redshift-connector (>=2.0.888) ; extra == 'all'", + "requests (>=2.26.0) ; extra == 'all'", + "requests (<3,>=2.27) ; extra == 'all'", + "requests-kerberos (>=0.10.0) ; extra == 'all'", + "requests-toolbelt ; extra == 'all'", + "scrapbook[all] ; extra == 'all'", + "sendgrid (>=6.0.0) ; extra == 'all'", + "sentry-sdk (>=0.8.0) ; extra == 'all'", + "simple-salesforce (>=1.0.0) ; extra == 'all'", + "slack-sdk (>=3.0.0) ; extra == 'all'", + "smbprotocol (>=1.5.0) ; extra == 'all'", + "snowflake-connector-python (>=2.4.1) ; extra == 'all'", + "snowflake-sqlalchemy (>=1.1.0) ; extra == 'all'", + "spython (>=0.0.56) ; extra == 'all'", + "sqlalchemy-bigquery (>=1.2.1) ; extra == 'all'", + "sqlalchemy-drill (>=1.1.0) ; extra == 'all'", + "sqlalchemy-spanner (>=1.6.2) ; extra == 'all'", + "sqlalchemy-redshift (>=0.8.6) ; extra == 'all'", + "sqlparse (>=0.4.2) ; extra == 'all'", + "sshtunnel (>=0.3.2) ; extra == 'all'", + "statsd (>=3.3.0) ; extra == 'all'", + "tableauserverclient ; extra == 'all'", + "thrift (>=0.9.2) ; extra == 'all'", + "thrift-sasl (>=0.2.0) ; extra == 'all'", + "trino (>=0.318.0) ; extra == 'all'", + "vertica-python (>=0.5.1) ; extra == 'all'", + "virtualenv ; extra == 'all'", + "watchtower (~=2.0.1) ; extra == 'all'", + "zenpy (>=2.0.24) ; extra == 'all'", + "apache-airflow-providers-airbyte ; extra == 'all'", + "apache-airflow-providers-alibaba ; extra == 'all'", + "apache-airflow-providers-amazon ; extra == 'all'", + "apache-airflow-providers-apache-beam ; extra == 'all'", + "apache-airflow-providers-apache-cassandra ; extra == 'all'", + "apache-airflow-providers-apache-drill ; extra == 'all'", + "apache-airflow-providers-apache-druid ; extra == 'all'", + "apache-airflow-providers-apache-flink ; extra == 'all'", + "apache-airflow-providers-apache-hdfs ; extra == 'all'", + "apache-airflow-providers-apache-hive ; extra == 'all'", + "apache-airflow-providers-apache-impala ; extra == 'all'", + "apache-airflow-providers-apache-kafka ; extra == 'all'", + "apache-airflow-providers-apache-kylin ; extra == 'all'", + "apache-airflow-providers-apache-livy ; extra == 'all'", + "apache-airflow-providers-apache-pig ; extra == 'all'", + "apache-airflow-providers-apache-pinot ; extra == 'all'", + "apache-airflow-providers-apache-spark ; extra == 'all'", + "apache-airflow-providers-apache-sqoop ; extra == 'all'", + "apache-airflow-providers-apprise ; extra == 'all'", + "apache-airflow-providers-arangodb ; extra == 'all'", + "apache-airflow-providers-asana ; extra == 'all'", + "apache-airflow-providers-atlassian-jira ; extra == 'all'", + "apache-airflow-providers-celery ; extra == 'all'", + "apache-airflow-providers-cloudant ; extra == 'all'", + "apache-airflow-providers-cncf-kubernetes ; extra == 'all'", + "apache-airflow-providers-common-sql ; extra == 'all'", + "apache-airflow-providers-daskexecutor ; extra == 'all'", + "apache-airflow-providers-databricks ; extra == 'all'", + "apache-airflow-providers-datadog ; extra == 'all'", + "apache-airflow-providers-dbt-cloud ; extra == 'all'", + "apache-airflow-providers-dingding ; extra == 'all'", + "apache-airflow-providers-discord ; extra == 'all'", + "apache-airflow-providers-docker ; extra == 'all'", + "apache-airflow-providers-elasticsearch ; extra == 'all'", + "apache-airflow-providers-exasol ; extra == 'all'", + "apache-airflow-providers-facebook ; extra == 'all'", + "apache-airflow-providers-ftp ; extra == 'all'", + "apache-airflow-providers-github ; extra == 'all'", + "apache-airflow-providers-google ; extra == 'all'", + "apache-airflow-providers-grpc ; extra == 'all'", + "apache-airflow-providers-hashicorp ; extra == 'all'", + "apache-airflow-providers-http ; extra == 'all'", + "apache-airflow-providers-imap ; extra == 'all'", + "apache-airflow-providers-influxdb ; extra == 'all'", + "apache-airflow-providers-jdbc ; extra == 'all'", + "apache-airflow-providers-jenkins ; extra == 'all'", + "apache-airflow-providers-microsoft-azure ; extra == 'all'", + "apache-airflow-providers-microsoft-mssql ; extra == 'all'", + "apache-airflow-providers-microsoft-psrp ; extra == 'all'", + "apache-airflow-providers-microsoft-winrm ; extra == 'all'", + "apache-airflow-providers-mongo ; extra == 'all'", + "apache-airflow-providers-mysql ; extra == 'all'", + "apache-airflow-providers-neo4j ; extra == 'all'", + "apache-airflow-providers-odbc ; extra == 'all'", + "apache-airflow-providers-openfaas ; extra == 'all'", + "apache-airflow-providers-openlineage ; extra == 'all'", + "apache-airflow-providers-opsgenie ; extra == 'all'", + "apache-airflow-providers-oracle ; extra == 'all'", + "apache-airflow-providers-pagerduty ; extra == 'all'", + "apache-airflow-providers-papermill ; extra == 'all'", + "apache-airflow-providers-plexus ; extra == 'all'", + "apache-airflow-providers-postgres ; extra == 'all'", + "apache-airflow-providers-presto ; extra == 'all'", + "apache-airflow-providers-redis ; extra == 'all'", + "apache-airflow-providers-salesforce ; extra == 'all'", + "apache-airflow-providers-samba ; extra == 'all'", + "apache-airflow-providers-segment ; extra == 'all'", + "apache-airflow-providers-sendgrid ; extra == 'all'", + "apache-airflow-providers-sftp ; extra == 'all'", + "apache-airflow-providers-singularity ; extra == 'all'", + "apache-airflow-providers-slack ; extra == 'all'", + "apache-airflow-providers-smtp ; extra == 'all'", + "apache-airflow-providers-snowflake ; extra == 'all'", + "apache-airflow-providers-sqlite ; extra == 'all'", + "apache-airflow-providers-ssh ; extra == 'all'", + "apache-airflow-providers-tableau ; extra == 'all'", + "apache-airflow-providers-tabular ; extra == 'all'", + "apache-airflow-providers-telegram ; extra == 'all'", + "apache-airflow-providers-trino ; extra == 'all'", + "apache-airflow-providers-vertica ; extra == 'all'", + "apache-airflow-providers-zendesk ; extra == 'all'", + "aiohttp (<4,>=3.6.3) ; extra == 'all_dbs'", + "apache-airflow-providers-common-sql (>=1.3.1) ; extra == 'all_dbs'", + "apache-airflow-providers-common-sql (>=1.5.0) ; extra == 'all_dbs'", + "apache-airflow (>=2.4.0) ; extra == 'all_dbs'", + "cassandra-driver (>=3.13.0) ; extra == 'all_dbs'", + "cloudant (>=2.0) ; extra == 'all_dbs'", + "databricks-sql-connector (<3.0.0,>=2.0.0) ; extra == 'all_dbs'", + "dnspython (>=1.13.0) ; extra == 'all_dbs'", + "hdfs[avro,dataframe,kerberos] (>=2.0.4) ; extra == 'all_dbs'", + "hmsclient (>=0.1.0) ; extra == 'all_dbs'", + "impyla (<1.0,>=0.18.0) ; extra == 'all_dbs'", + "influxdb-client (>=1.19.0) ; extra == 'all_dbs'", + "mysqlclient (>=1.3.6) ; extra == 'all_dbs'", + "neo4j (>=4.2.1) ; extra == 'all_dbs'", + "pandas (>=0.17.1) ; extra == 'all_dbs'", + "pinotdb (>0.4.7) ; extra == 'all_dbs'", + "presto-python-client (>=0.8.2) ; extra == 'all_dbs'", + "psycopg2-binary (>=2.8.0) ; extra == 'all_dbs'", + "pydruid (>=0.4.1) ; extra == 'all_dbs'", + "pyexasol (>=0.5.1) ; extra == 'all_dbs'", + "pyhive[hive_pure_sasl] (>=0.7.0) ; extra == 'all_dbs'", + "pymongo (>=3.6.0) ; extra == 'all_dbs'", + "pymssql (>=2.1.5) ; extra == 'all_dbs'", + "python-arango (>=7.3.2) ; extra == 'all_dbs'", + "requests (>=2.26.0) ; extra == 'all_dbs'", + "requests (<3,>=2.27) ; extra == 'all_dbs'", + "sqlalchemy-drill (>=1.1.0) ; extra == 'all_dbs'", + "thrift (>=0.9.2) ; extra == 'all_dbs'", + "trino (>=0.318.0) ; extra == 'all_dbs'", + "vertica-python (>=0.5.1) ; extra == 'all_dbs'", + "apache-airflow-providers-apache-cassandra ; extra == 'all_dbs'", + "apache-airflow-providers-apache-drill ; extra == 'all_dbs'", + "apache-airflow-providers-apache-druid ; extra == 'all_dbs'", + "apache-airflow-providers-apache-hdfs ; extra == 'all_dbs'", + "apache-airflow-providers-apache-hive ; extra == 'all_dbs'", + "apache-airflow-providers-apache-impala ; extra == 'all_dbs'", + "apache-airflow-providers-apache-pinot ; extra == 'all_dbs'", + "apache-airflow-providers-arangodb ; extra == 'all_dbs'", + "apache-airflow-providers-cloudant ; extra == 'all_dbs'", + "apache-airflow-providers-databricks ; extra == 'all_dbs'", + "apache-airflow-providers-exasol ; extra == 'all_dbs'", + "apache-airflow-providers-influxdb ; extra == 'all_dbs'", + "apache-airflow-providers-microsoft-mssql ; extra == 'all_dbs'", + "apache-airflow-providers-mongo ; extra == 'all_dbs'", + "apache-airflow-providers-mysql ; extra == 'all_dbs'", + "apache-airflow-providers-neo4j ; extra == 'all_dbs'", + "apache-airflow-providers-postgres ; extra == 'all_dbs'", + "apache-airflow-providers-presto ; extra == 'all_dbs'", + "apache-airflow-providers-trino ; extra == 'all_dbs'", + "apache-airflow-providers-vertica ; extra == 'all_dbs'", + "apache-airflow-providers-amazon ; extra == 'amazon'", + "atlasclient (>=0.1.2) ; extra == 'apache.atlas'", + "apache-airflow-providers-apache-beam ; extra == 'apache.beam'", + "apache-airflow-providers-apache-cassandra ; extra == 'apache.cassandra'", + "apache-airflow-providers-apache-drill ; extra == 'apache.drill'", + "apache-airflow-providers-apache-druid ; extra == 'apache.druid'", + "apache-airflow-providers-apache-flink ; extra == 'apache.flink'", + "apache-airflow-providers-apache-hdfs ; extra == 'apache.hdfs'", + "apache-airflow-providers-apache-hive (>=5.1.0) ; extra == 'apache.hive'", + "apache-airflow-providers-apache-impala ; extra == 'apache.impala'", + "apache-airflow-providers-apache-kafka ; extra == 'apache.kafka'", + "apache-airflow-providers-apache-kylin ; extra == 'apache.kylin'", + "apache-airflow-providers-apache-livy ; extra == 'apache.livy'", + "apache-airflow-providers-apache-pig ; extra == 'apache.pig'", + "apache-airflow-providers-apache-pinot ; extra == 'apache.pinot'", + "apache-airflow-providers-apache-spark ; extra == 'apache.spark'", + "apache-airflow-providers-apache-sqoop ; extra == 'apache.sqoop'", + "hdfs[avro,dataframe,kerberos] (>=2.0.4) ; extra == 'apache.webhdfs'", + "apache-airflow-providers-apprise ; extra == 'apprise'", + "apache-airflow-providers-arangodb ; extra == 'arangodb'", + "apache-airflow-providers-asana ; extra == 'asana'", + "eventlet (>=0.33.3) ; extra == 'async'", + "gevent (>=0.13) ; extra == 'async'", + "greenlet (>=0.4.9) ; extra == 'async'", + "apache-airflow-providers-apache-atlas ; extra == 'atlas'", + "apache-airflow-providers-atlassian-jira ; extra == 'atlassian.jira'", + "apache-airflow-providers-amazon ; extra == 'aws'", + "apache-airflow-providers-microsoft-azure ; extra == 'azure'", + "apache-airflow-providers-apache-cassandra ; extra == 'cassandra'", + "apache-airflow (>=2.4.0) ; extra == 'celery'", + "celery (!=5.3.2,!=5.3.3,<6,>=5.3.0) ; extra == 'celery'", + "flower (>=1.0.0) ; extra == 'celery'", + "apache-airflow-providers-celery ; extra == 'celery'", + "cgroupspy (>=0.2.2) ; extra == 'cgroups'", + "apache-airflow-providers-cloudant ; extra == 'cloudant'", + "apache-airflow (>=2.4.0) ; extra == 'cncf.kubernetes'", + "asgiref (>=3.5.2) ; extra == 'cncf.kubernetes'", + "cryptography (>=2.0.0) ; extra == 'cncf.kubernetes'", + "kubernetes (<24,>=21.7.0) ; extra == 'cncf.kubernetes'", + "kubernetes-asyncio (<25,>=18.20.1) ; extra == 'cncf.kubernetes'", + "apache-airflow-providers-cncf-kubernetes ; extra == 'cncf.kubernetes'", + "apache-airflow-providers-common-sql ; extra == 'common.sql'", + "apache-airflow (>=2.4.0) ; extra == 'dask'", + "cloudpickle (>=1.4.1) ; extra == 'dask'", + "dask (!=2022.10.1,!=2023.5.0,>=2.9.0) ; extra == 'dask'", + "distributed (!=2023.5.0,>=2.11.1) ; extra == 'dask'", + "apache-airflow-providers-daskexecutor ; extra == 'dask'", + "apache-airflow (>=2.4.0) ; extra == 'daskexecutor'", + "cloudpickle (>=1.4.1) ; extra == 'daskexecutor'", + "dask (!=2022.10.1,!=2023.5.0,>=2.9.0) ; extra == 'daskexecutor'", + "distributed (!=2023.5.0,>=2.11.1) ; extra == 'daskexecutor'", + "apache-airflow-providers-daskexecutor ; extra == 'daskexecutor'", + "apache-airflow-providers-databricks ; extra == 'databricks'", + "apache-airflow-providers-datadog ; extra == 'datadog'", + "apache-airflow-providers-dbt-cloud ; extra == 'dbt.cloud'", + "requests (>=2.26.0) ; extra == 'deprecated_api'", + "aiobotocore (>=2.1.1) ; extra == 'devel'", + "aioresponses ; extra == 'devel'", + "apache-airflow-providers-common-sql ; extra == 'devel'", + "apache-airflow (>=2.4.0) ; extra == 'devel'", + "astroid (<3.0,>=2.12.3) ; extra == 'devel'", + "aws-xray-sdk ; extra == 'devel'", + "bcrypt (>=2.0.0) ; extra == 'devel'", + "beautifulsoup4 (>=4.7.1) ; extra == 'devel'", + "black ; extra == 'devel'", + "blinker ; extra == 'devel'", + "cgroupspy (>=0.2.2) ; extra == 'devel'", + "checksumdir ; extra == 'devel'", + "click (>=8.0) ; extra == 'devel'", + "click (!=8.1.4,!=8.1.5,>=8.0) ; extra == 'devel'", + "coverage (>=7.2) ; extra == 'devel'", + "cryptography (>=2.0.0) ; extra == 'devel'", + "docutils (<0.17.0) ; extra == 'devel'", + "eralchemy2 ; extra == 'devel'", + "filelock ; extra == 'devel'", + "flask-bcrypt (>=0.7.1) ; extra == 'devel'", + "gitpython ; extra == 'devel'", + "ipdb ; extra == 'devel'", + "jsonschema (>=3.0) ; extra == 'devel'", + "kubernetes (<24,>=21.7.0) ; extra == 'devel'", + "mongomock ; extra == 'devel'", + "moto[glue] (>=4.0) ; extra == 'devel'", + "mypy-boto3-appflow (>=1.28.0) ; extra == 'devel'", + "mypy-boto3-rds (>=1.28.0) ; extra == 'devel'", + "mypy-boto3-redshift-data (>=1.28.0) ; extra == 'devel'", + "mypy-boto3-s3 (>=1.28.0) ; extra == 'devel'", + "mypy (==1.2.0) ; extra == 'devel'", + "mysqlclient (>=1.3.6) ; extra == 'devel'", + "openapi-spec-validator (>=0.2.8) ; extra == 'devel'", + "pandas (>=0.17.1) ; extra == 'devel'", + "pipdeptree ; extra == 'devel'", + "pre-commit ; extra == 'devel'", + "pyarrow (>=9.0.0) ; extra == 'devel'", + "pygithub ; extra == 'devel'", + "pytest ; extra == 'devel'", + "pytest-asyncio ; extra == 'devel'", + "pytest-capture-warnings ; extra == 'devel'", + "pytest-cov ; extra == 'devel'", + "pytest-httpx ; extra == 'devel'", + "pytest-instafail ; extra == 'devel'", + "pytest-mock ; extra == 'devel'", + "pytest-rerunfailures ; extra == 'devel'", + "pytest-timeouts ; extra == 'devel'", + "pytest-xdist ; extra == 'devel'", + "pywinrm ; extra == 'devel'", + "requests-mock ; extra == 'devel'", + "rich-click (>=1.5) ; extra == 'devel'", + "ruff (>=0.0.219) ; extra == 'devel'", + "semver ; extra == 'devel'", + "sphinx-airflow-theme ; extra == 'devel'", + "sphinx-argparse (>=0.1.13) ; extra == 'devel'", + "sphinx-autoapi (>=2.0.0) ; extra == 'devel'", + "sphinx-copybutton ; extra == 'devel'", + "sphinx-jinja (>=2.0) ; extra == 'devel'", + "sphinx-rtd-theme (>=0.1.6) ; extra == 'devel'", + "sphinx (>=5.2.0) ; extra == 'devel'", + "sphinxcontrib-httpdomain (>=1.7.0) ; extra == 'devel'", + "sphinxcontrib-redoc (>=1.6.0) ; extra == 'devel'", + "sphinxcontrib-spelling (>=7.3) ; extra == 'devel'", + "time-machine ; extra == 'devel'", + "towncrier ; extra == 'devel'", + "twine ; extra == 'devel'", + "types-Deprecated ; extra == 'devel'", + "types-Markdown ; extra == 'devel'", + "types-PyMySQL ; extra == 'devel'", + "types-PyYAML ; extra == 'devel'", + "types-certifi ; extra == 'devel'", + "types-croniter ; extra == 'devel'", + "types-docutils ; extra == 'devel'", + "types-paramiko ; extra == 'devel'", + "types-protobuf ; extra == 'devel'", + "types-python-dateutil ; extra == 'devel'", + "types-python-slugify ; extra == 'devel'", + "types-pytz ; extra == 'devel'", + "types-redis ; extra == 'devel'", + "types-requests ; extra == 'devel'", + "types-setuptools ; extra == 'devel'", + "types-tabulate ; extra == 'devel'", + "types-termcolor ; extra == 'devel'", + "types-toml ; extra == 'devel'", + "wheel ; extra == 'devel'", + "yamllint ; extra == 'devel'", + "backports.zoneinfo (>=0.2.1) ; (python_version < \"3.9\") and extra == 'devel'", + "PyGithub (!=1.58) ; extra == 'devel_all'", + "PyOpenSSL ; extra == 'devel_all'", + "adal (>=1.2.7) ; extra == 'devel_all'", + "aiobotocore (>=2.1.1) ; extra == 'devel_all'", + "aiohttp ; extra == 'devel_all'", + "aiohttp (<4,>=3.6.3) ; extra == 'devel_all'", + "aioresponses ; extra == 'devel_all'", + "alibabacloud-adb20211201 (>=1.0.0) ; extra == 'devel_all'", + "alibabacloud-tea-openapi (>=0.3.7) ; extra == 'devel_all'", + "amqp ; extra == 'devel_all'", + "analytics-python (>=1.2.9) ; extra == 'devel_all'", + "apache-airflow-providers-common-sql ; extra == 'devel_all'", + "apache-airflow (>=2.4.0) ; extra == 'devel_all'", + "apache-airflow (>=2.7.0) ; extra == 'devel_all'", + "apache-beam (>=2.47.0) ; extra == 'devel_all'", + "apprise ; extra == 'devel_all'", + "arrow (>=0.16.0) ; extra == 'devel_all'", + "asana (<4.0.0,>=0.10) ; extra == 'devel_all'", + "asgiref ; extra == 'devel_all'", + "asgiref (>=3.5.2) ; extra == 'devel_all'", + "astroid (<3.0,>=2.12.3) ; extra == 'devel_all'", + "atlasclient (>=0.1.2) ; extra == 'devel_all'", + "atlassian-python-api (>=1.14.2) ; extra == 'devel_all'", + "attrs (>=22.2) ; extra == 'devel_all'", + "authlib (>=1.0.0) ; extra == 'devel_all'", + "aws-xray-sdk ; extra == 'devel_all'", + "azure-batch (>=8.0.0) ; extra == 'devel_all'", + "azure-cosmos (>=4.0.0) ; extra == 'devel_all'", + "azure-datalake-store (>=0.0.45) ; extra == 'devel_all'", + "azure-identity (>=1.3.1) ; extra == 'devel_all'", + "azure-keyvault-secrets (>=4.1.0) ; extra == 'devel_all'", + "azure-kusto-data (<0.1,>=0.0.43) ; extra == 'devel_all'", + "azure-mgmt-containerinstance (<2.0,>=1.5.0) ; extra == 'devel_all'", + "azure-mgmt-datafactory (<2.0,>=1.0.0) ; extra == 'devel_all'", + "azure-mgmt-datalake-store (>=0.5.0) ; extra == 'devel_all'", + "azure-mgmt-resource (>=2.2.0) ; extra == 'devel_all'", + "azure-servicebus (>=7.6.1) ; extra == 'devel_all'", + "azure-storage-blob (>=12.14.0) ; extra == 'devel_all'", + "azure-storage-common (>=2.1.0) ; extra == 'devel_all'", + "azure-storage-file-datalake (>=12.9.1) ; extra == 'devel_all'", + "azure-storage-file (>=2.1.0) ; extra == 'devel_all'", + "azure-synapse-spark ; extra == 'devel_all'", + "bcrypt (>=2.0.0) ; extra == 'devel_all'", + "beautifulsoup4 (>=4.7.1) ; extra == 'devel_all'", + "black ; extra == 'devel_all'", + "blinker ; extra == 'devel_all'", + "blinker (>=1.1) ; extra == 'devel_all'", + "boto3 (>=1.28.0) ; extra == 'devel_all'", + "botocore (>=1.31.0) ; extra == 'devel_all'", + "cassandra-driver (>=3.13.0) ; extra == 'devel_all'", + "celery (!=5.3.2,!=5.3.3,<6,>=5.3.0) ; extra == 'devel_all'", + "cgroupspy (>=0.2.2) ; extra == 'devel_all'", + "checksumdir ; extra == 'devel_all'", + "click (>=8.0) ; extra == 'devel_all'", + "click (!=8.1.4,!=8.1.5,>=8.0) ; extra == 'devel_all'", + "cloudant (>=2.0) ; extra == 'devel_all'", + "cloudpickle (>=1.4.1) ; extra == 'devel_all'", + "confluent-kafka (>=1.8.2) ; extra == 'devel_all'", + "coverage (>=7.2) ; extra == 'devel_all'", + "cryptography (>=2.0.0) ; extra == 'devel_all'", + "dask (!=2022.10.1,!=2023.5.0,>=2.9.0) ; extra == 'devel_all'", + "databricks-sql-connector (<3.0.0,>=2.0.0) ; extra == 'devel_all'", + "datadog (>=0.14.0) ; extra == 'devel_all'", + "distributed (!=2023.5.0,>=2.11.1) ; extra == 'devel_all'", + "dnspython (>=1.13.0) ; extra == 'devel_all'", + "docker (>=5.0.3) ; extra == 'devel_all'", + "docutils (<0.17.0) ; extra == 'devel_all'", + "elasticsearch (<9,>8) ; extra == 'devel_all'", + "eralchemy2 ; extra == 'devel_all'", + "eventlet (>=0.33.3) ; extra == 'devel_all'", + "facebook-business (>=6.0.2) ; extra == 'devel_all'", + "filelock ; extra == 'devel_all'", + "flask-appbuilder[oauth] (==4.3.6) ; extra == 'devel_all'", + "flask-bcrypt (>=0.7.1) ; extra == 'devel_all'", + "flower (>=1.0.0) ; extra == 'devel_all'", + "gcloud-aio-auth (<5.0.0,>=4.0.0) ; extra == 'devel_all'", + "gcloud-aio-bigquery (>=6.1.2) ; extra == 'devel_all'", + "gcloud-aio-storage ; extra == 'devel_all'", + "gevent (>=0.13) ; extra == 'devel_all'", + "gitpython ; extra == 'devel_all'", + "google-ads (>=21.2.0) ; extra == 'devel_all'", + "google-api-core (>=2.11.0) ; extra == 'devel_all'", + "google-api-python-client (>=1.6.0) ; extra == 'devel_all'", + "google-auth-httplib2 (>=0.0.1) ; extra == 'devel_all'", + "google-auth (>=1.0.0) ; extra == 'devel_all'", + "google-auth (<3.0.0,>=1.0.0) ; extra == 'devel_all'", + "google-cloud-aiplatform (>=1.22.1) ; extra == 'devel_all'", + "google-cloud-automl (>=2.11.0) ; extra == 'devel_all'", + "google-cloud-bigquery-datatransfer (>=3.11.0) ; extra == 'devel_all'", + "google-cloud-bigtable (>=2.17.0) ; extra == 'devel_all'", + "google-cloud-build (>=3.13.0) ; extra == 'devel_all'", + "google-cloud-compute (>=1.10.0) ; extra == 'devel_all'", + "google-cloud-container (>=2.17.4) ; extra == 'devel_all'", + "google-cloud-datacatalog (>=3.11.1) ; extra == 'devel_all'", + "google-cloud-dataflow-client (>=0.8.2) ; extra == 'devel_all'", + "google-cloud-dataform (>=0.5.0) ; extra == 'devel_all'", + "google-cloud-dataplex (>=1.4.2) ; extra == 'devel_all'", + "google-cloud-dataproc-metastore (>=1.12.0) ; extra == 'devel_all'", + "google-cloud-dataproc (>=5.4.0) ; extra == 'devel_all'", + "google-cloud-dlp (>=3.12.0) ; extra == 'devel_all'", + "google-cloud-kms (>=2.15.0) ; extra == 'devel_all'", + "google-cloud-language (>=2.9.0) ; extra == 'devel_all'", + "google-cloud-logging (>=3.5.0) ; extra == 'devel_all'", + "google-cloud-memcache (>=1.7.0) ; extra == 'devel_all'", + "google-cloud-monitoring (>=2.14.1) ; extra == 'devel_all'", + "google-cloud-orchestration-airflow (>=1.7.0) ; extra == 'devel_all'", + "google-cloud-os-login (>=2.9.1) ; extra == 'devel_all'", + "google-cloud-pubsub (>=2.15.0) ; extra == 'devel_all'", + "google-cloud-redis (>=2.12.0) ; extra == 'devel_all'", + "google-cloud-secret-manager (>=2.16.0) ; extra == 'devel_all'", + "google-cloud-spanner (>=3.11.1) ; extra == 'devel_all'", + "google-cloud-speech (>=2.18.0) ; extra == 'devel_all'", + "google-cloud-storage-transfer (>=1.4.1) ; extra == 'devel_all'", + "google-cloud-storage (>=2.7.0) ; extra == 'devel_all'", + "google-cloud-tasks (>=2.13.0) ; extra == 'devel_all'", + "google-cloud-texttospeech (>=2.14.1) ; extra == 'devel_all'", + "google-cloud-translate (>=3.11.0) ; extra == 'devel_all'", + "google-cloud-videointelligence (>=2.11.0) ; extra == 'devel_all'", + "google-cloud-vision (>=3.4.0) ; extra == 'devel_all'", + "google-cloud-workflows (>=1.10.0) ; extra == 'devel_all'", + "greenlet (>=0.4.9) ; extra == 'devel_all'", + "grpcio-gcp (>=0.2.2) ; extra == 'devel_all'", + "grpcio (>=1.15.0) ; extra == 'devel_all'", + "hdfs[avro,dataframe,kerberos] (>=2.0.4) ; extra == 'devel_all'", + "hmsclient (>=0.1.0) ; extra == 'devel_all'", + "httpx ; extra == 'devel_all'", + "hvac (>=0.10) ; extra == 'devel_all'", + "impyla (<1.0,>=0.18.0) ; extra == 'devel_all'", + "influxdb-client (>=1.19.0) ; extra == 'devel_all'", + "ipdb ; extra == 'devel_all'", + "jaydebeapi (>=1.1.1) ; extra == 'devel_all'", + "json-merge-patch (>=0.2) ; extra == 'devel_all'", + "jsonpath-ng (>=1.5.3) ; extra == 'devel_all'", + "jsonschema (>=3.0) ; extra == 'devel_all'", + "kubernetes (<24,>=21.7.0) ; extra == 'devel_all'", + "kubernetes-asyncio (<25,>=18.20.1) ; extra == 'devel_all'", + "kylinpy (>=2.6) ; extra == 'devel_all'", + "ldap3 (>=2.5.1) ; extra == 'devel_all'", + "looker-sdk (>=22.2.0) ; extra == 'devel_all'", + "mongomock ; extra == 'devel_all'", + "moto[glue] (>=4.0) ; extra == 'devel_all'", + "mypy-boto3-appflow (>=1.28.0) ; extra == 'devel_all'", + "mypy-boto3-rds (>=1.28.0) ; extra == 'devel_all'", + "mypy-boto3-redshift-data (>=1.28.0) ; extra == 'devel_all'", + "mypy-boto3-s3 (>=1.28.0) ; extra == 'devel_all'", + "mypy (==1.2.0) ; extra == 'devel_all'", + "mysqlclient (>=1.3.6) ; extra == 'devel_all'", + "neo4j (>=4.2.1) ; extra == 'devel_all'", + "openapi-spec-validator (>=0.2.8) ; extra == 'devel_all'", + "openlineage-integration-common (>=0.28.0) ; extra == 'devel_all'", + "openlineage-python (>=0.28.0) ; extra == 'devel_all'", + "opentelemetry-exporter-prometheus ; extra == 'devel_all'", + "opsgenie-sdk (>=2.1.5) ; extra == 'devel_all'", + "oracledb (>=1.0.0) ; extra == 'devel_all'", + "oss2 (>=2.14.0) ; extra == 'devel_all'", + "pandas-gbq ; extra == 'devel_all'", + "pandas (>=0.17.1) ; extra == 'devel_all'", + "papermill[all] (>=1.2.1) ; extra == 'devel_all'", + "paramiko (>=2.6.0) ; extra == 'devel_all'", + "pdpyras (>=4.1.2) ; extra == 'devel_all'", + "pinotdb (>0.4.7) ; extra == 'devel_all'", + "pipdeptree ; extra == 'devel_all'", + "plyvel ; extra == 'devel_all'", + "pre-commit ; extra == 'devel_all'", + "presto-python-client (>=0.8.2) ; extra == 'devel_all'", + "proto-plus (>=1.19.6) ; extra == 'devel_all'", + "psycopg2-binary (>=2.8.0) ; extra == 'devel_all'", + "pyarrow (>=9.0.0) ; extra == 'devel_all'", + "pydruid (>=0.4.1) ; extra == 'devel_all'", + "pyexasol (>=0.5.1) ; extra == 'devel_all'", + "pygithub ; extra == 'devel_all'", + "pyhive[hive_pure_sasl] (>=0.7.0) ; extra == 'devel_all'", + "pykerberos (>=1.1.13) ; extra == 'devel_all'", + "pymongo (>=3.6.0) ; extra == 'devel_all'", + "pymssql (>=2.1.5) ; extra == 'devel_all'", + "pyodbc ; extra == 'devel_all'", + "pypsrp (>=0.8.0) ; extra == 'devel_all'", + "pyspark ; extra == 'devel_all'", + "pytest ; extra == 'devel_all'", + "pytest-asyncio ; extra == 'devel_all'", + "pytest-capture-warnings ; extra == 'devel_all'", + "pytest-cov ; extra == 'devel_all'", + "pytest-httpx ; extra == 'devel_all'", + "pytest-instafail ; extra == 'devel_all'", + "pytest-mock ; extra == 'devel_all'", + "pytest-rerunfailures ; extra == 'devel_all'", + "pytest-timeouts ; extra == 'devel_all'", + "pytest-xdist ; extra == 'devel_all'", + "python-arango (>=7.3.2) ; extra == 'devel_all'", + "python-dotenv (>=0.21.0) ; extra == 'devel_all'", + "python-jenkins (>=1.0.0) ; extra == 'devel_all'", + "python-ldap ; extra == 'devel_all'", + "python-telegram-bot (>=20.0.0) ; extra == 'devel_all'", + "pywinrm ; extra == 'devel_all'", + "pywinrm (>=0.4) ; extra == 'devel_all'", + "redis (!=4.5.5,<5.0.0,>=4.5.2) ; extra == 'devel_all'", + "redshift-connector (>=2.0.888) ; extra == 'devel_all'", + "requests (>=2.26.0) ; extra == 'devel_all'", + "requests (<3,>=2.27) ; extra == 'devel_all'", + "requests-kerberos (>=0.10.0) ; extra == 'devel_all'", + "requests-mock ; extra == 'devel_all'", + "requests-toolbelt ; extra == 'devel_all'", + "rich-click (>=1.5) ; extra == 'devel_all'", + "ruff (>=0.0.219) ; extra == 'devel_all'", + "scrapbook[all] ; extra == 'devel_all'", + "semver ; extra == 'devel_all'", + "sendgrid (>=6.0.0) ; extra == 'devel_all'", + "sentry-sdk (>=0.8.0) ; extra == 'devel_all'", + "simple-salesforce (>=1.0.0) ; extra == 'devel_all'", + "slack-sdk (>=3.0.0) ; extra == 'devel_all'", + "smbprotocol (>=1.5.0) ; extra == 'devel_all'", + "snowflake-connector-python (>=2.4.1) ; extra == 'devel_all'", + "snowflake-sqlalchemy (>=1.1.0) ; extra == 'devel_all'", + "sphinx-airflow-theme ; extra == 'devel_all'", + "sphinx-argparse (>=0.1.13) ; extra == 'devel_all'", + "sphinx-autoapi (>=2.0.0) ; extra == 'devel_all'", + "sphinx-copybutton ; extra == 'devel_all'", + "sphinx-jinja (>=2.0) ; extra == 'devel_all'", + "sphinx-rtd-theme (>=0.1.6) ; extra == 'devel_all'", + "sphinx (>=5.2.0) ; extra == 'devel_all'", + "sphinxcontrib-httpdomain (>=1.7.0) ; extra == 'devel_all'", + "sphinxcontrib-redoc (>=1.6.0) ; extra == 'devel_all'", + "sphinxcontrib-spelling (>=7.3) ; extra == 'devel_all'", + "spython (>=0.0.56) ; extra == 'devel_all'", + "sqlalchemy-bigquery (>=1.2.1) ; extra == 'devel_all'", + "sqlalchemy-drill (>=1.1.0) ; extra == 'devel_all'", + "sqlalchemy-spanner (>=1.6.2) ; extra == 'devel_all'", + "sqlalchemy-redshift (>=0.8.6) ; extra == 'devel_all'", + "sqlparse (>=0.4.2) ; extra == 'devel_all'", + "sshtunnel (>=0.3.2) ; extra == 'devel_all'", + "statsd (>=3.3.0) ; extra == 'devel_all'", + "tableauserverclient ; extra == 'devel_all'", + "thrift (>=0.9.2) ; extra == 'devel_all'", + "thrift-sasl (>=0.2.0) ; extra == 'devel_all'", + "time-machine ; extra == 'devel_all'", + "towncrier ; extra == 'devel_all'", + "trino (>=0.318.0) ; extra == 'devel_all'", + "twine ; extra == 'devel_all'", + "types-Deprecated ; extra == 'devel_all'", + "types-Markdown ; extra == 'devel_all'", + "types-PyMySQL ; extra == 'devel_all'", + "types-PyYAML ; extra == 'devel_all'", + "types-certifi ; extra == 'devel_all'", + "types-croniter ; extra == 'devel_all'", + "types-docutils ; extra == 'devel_all'", + "types-paramiko ; extra == 'devel_all'", + "types-protobuf ; extra == 'devel_all'", + "types-python-dateutil ; extra == 'devel_all'", + "types-python-slugify ; extra == 'devel_all'", + "types-pytz ; extra == 'devel_all'", + "types-redis ; extra == 'devel_all'", + "types-requests ; extra == 'devel_all'", + "types-setuptools ; extra == 'devel_all'", + "types-tabulate ; extra == 'devel_all'", + "types-termcolor ; extra == 'devel_all'", + "types-toml ; extra == 'devel_all'", + "vertica-python (>=0.5.1) ; extra == 'devel_all'", + "virtualenv ; extra == 'devel_all'", + "watchtower (~=2.0.1) ; extra == 'devel_all'", + "wheel ; extra == 'devel_all'", + "yamllint ; extra == 'devel_all'", + "zenpy (>=2.0.24) ; extra == 'devel_all'", + "apache-airflow-providers-airbyte ; extra == 'devel_all'", + "apache-airflow-providers-alibaba ; extra == 'devel_all'", + "apache-airflow-providers-amazon ; extra == 'devel_all'", + "apache-airflow-providers-apache-beam ; extra == 'devel_all'", + "apache-airflow-providers-apache-cassandra ; extra == 'devel_all'", + "apache-airflow-providers-apache-drill ; extra == 'devel_all'", + "apache-airflow-providers-apache-druid ; extra == 'devel_all'", + "apache-airflow-providers-apache-flink ; extra == 'devel_all'", + "apache-airflow-providers-apache-hdfs ; extra == 'devel_all'", + "apache-airflow-providers-apache-hive ; extra == 'devel_all'", + "apache-airflow-providers-apache-impala ; extra == 'devel_all'", + "apache-airflow-providers-apache-kafka ; extra == 'devel_all'", + "apache-airflow-providers-apache-kylin ; extra == 'devel_all'", + "apache-airflow-providers-apache-livy ; extra == 'devel_all'", + "apache-airflow-providers-apache-pig ; extra == 'devel_all'", + "apache-airflow-providers-apache-pinot ; extra == 'devel_all'", + "apache-airflow-providers-apache-spark ; extra == 'devel_all'", + "apache-airflow-providers-apache-sqoop ; extra == 'devel_all'", + "apache-airflow-providers-apprise ; extra == 'devel_all'", + "apache-airflow-providers-arangodb ; extra == 'devel_all'", + "apache-airflow-providers-asana ; extra == 'devel_all'", + "apache-airflow-providers-atlassian-jira ; extra == 'devel_all'", + "apache-airflow-providers-celery ; extra == 'devel_all'", + "apache-airflow-providers-cloudant ; extra == 'devel_all'", + "apache-airflow-providers-cncf-kubernetes ; extra == 'devel_all'", + "apache-airflow-providers-daskexecutor ; extra == 'devel_all'", + "apache-airflow-providers-databricks ; extra == 'devel_all'", + "apache-airflow-providers-datadog ; extra == 'devel_all'", + "apache-airflow-providers-dbt-cloud ; extra == 'devel_all'", + "apache-airflow-providers-dingding ; extra == 'devel_all'", + "apache-airflow-providers-discord ; extra == 'devel_all'", + "apache-airflow-providers-docker ; extra == 'devel_all'", + "apache-airflow-providers-elasticsearch ; extra == 'devel_all'", + "apache-airflow-providers-exasol ; extra == 'devel_all'", + "apache-airflow-providers-facebook ; extra == 'devel_all'", + "apache-airflow-providers-ftp ; extra == 'devel_all'", + "apache-airflow-providers-github ; extra == 'devel_all'", + "apache-airflow-providers-google ; extra == 'devel_all'", + "apache-airflow-providers-grpc ; extra == 'devel_all'", + "apache-airflow-providers-hashicorp ; extra == 'devel_all'", + "apache-airflow-providers-http ; extra == 'devel_all'", + "apache-airflow-providers-imap ; extra == 'devel_all'", + "apache-airflow-providers-influxdb ; extra == 'devel_all'", + "apache-airflow-providers-jdbc ; extra == 'devel_all'", + "apache-airflow-providers-jenkins ; extra == 'devel_all'", + "apache-airflow-providers-microsoft-azure ; extra == 'devel_all'", + "apache-airflow-providers-microsoft-mssql ; extra == 'devel_all'", + "apache-airflow-providers-microsoft-psrp ; extra == 'devel_all'", + "apache-airflow-providers-microsoft-winrm ; extra == 'devel_all'", + "apache-airflow-providers-mongo ; extra == 'devel_all'", + "apache-airflow-providers-mysql ; extra == 'devel_all'", + "apache-airflow-providers-neo4j ; extra == 'devel_all'", + "apache-airflow-providers-odbc ; extra == 'devel_all'", + "apache-airflow-providers-openfaas ; extra == 'devel_all'", + "apache-airflow-providers-openlineage ; extra == 'devel_all'", + "apache-airflow-providers-opsgenie ; extra == 'devel_all'", + "apache-airflow-providers-oracle ; extra == 'devel_all'", + "apache-airflow-providers-pagerduty ; extra == 'devel_all'", + "apache-airflow-providers-papermill ; extra == 'devel_all'", + "apache-airflow-providers-plexus ; extra == 'devel_all'", + "apache-airflow-providers-postgres ; extra == 'devel_all'", + "apache-airflow-providers-presto ; extra == 'devel_all'", + "apache-airflow-providers-redis ; extra == 'devel_all'", + "apache-airflow-providers-salesforce ; extra == 'devel_all'", + "apache-airflow-providers-samba ; extra == 'devel_all'", + "apache-airflow-providers-segment ; extra == 'devel_all'", + "apache-airflow-providers-sendgrid ; extra == 'devel_all'", + "apache-airflow-providers-sftp ; extra == 'devel_all'", + "apache-airflow-providers-singularity ; extra == 'devel_all'", + "apache-airflow-providers-slack ; extra == 'devel_all'", + "apache-airflow-providers-smtp ; extra == 'devel_all'", + "apache-airflow-providers-snowflake ; extra == 'devel_all'", + "apache-airflow-providers-sqlite ; extra == 'devel_all'", + "apache-airflow-providers-ssh ; extra == 'devel_all'", + "apache-airflow-providers-tableau ; extra == 'devel_all'", + "apache-airflow-providers-tabular ; extra == 'devel_all'", + "apache-airflow-providers-telegram ; extra == 'devel_all'", + "apache-airflow-providers-trino ; extra == 'devel_all'", + "apache-airflow-providers-vertica ; extra == 'devel_all'", + "apache-airflow-providers-zendesk ; extra == 'devel_all'", + "backports.zoneinfo (>=0.2.1) ; (python_version < \"3.9\") and extra == 'devel_all'", + "PyGithub (!=1.58) ; extra == 'devel_ci'", + "PyOpenSSL ; extra == 'devel_ci'", + "adal (>=1.2.7) ; extra == 'devel_ci'", + "aiobotocore (>=2.1.1) ; extra == 'devel_ci'", + "aiohttp ; extra == 'devel_ci'", + "aiohttp (<4,>=3.6.3) ; extra == 'devel_ci'", + "aioresponses ; extra == 'devel_ci'", + "alibabacloud-adb20211201 (>=1.0.0) ; extra == 'devel_ci'", + "alibabacloud-tea-openapi (>=0.3.7) ; extra == 'devel_ci'", + "amqp ; extra == 'devel_ci'", + "analytics-python (>=1.2.9) ; extra == 'devel_ci'", + "apache-airflow-providers-common-sql ; extra == 'devel_ci'", + "apache-airflow (>=2.4.0) ; extra == 'devel_ci'", + "apache-airflow (>=2.7.0) ; extra == 'devel_ci'", + "apache-beam (>=2.47.0) ; extra == 'devel_ci'", + "apprise ; extra == 'devel_ci'", + "arrow (>=0.16.0) ; extra == 'devel_ci'", + "asana (<4.0.0,>=0.10) ; extra == 'devel_ci'", + "asgiref ; extra == 'devel_ci'", + "asgiref (>=3.5.2) ; extra == 'devel_ci'", + "astroid (<3.0,>=2.12.3) ; extra == 'devel_ci'", + "atlasclient (>=0.1.2) ; extra == 'devel_ci'", + "atlassian-python-api (>=1.14.2) ; extra == 'devel_ci'", + "attrs (>=22.2) ; extra == 'devel_ci'", + "authlib (>=1.0.0) ; extra == 'devel_ci'", + "aws-xray-sdk ; extra == 'devel_ci'", + "azure-batch (>=8.0.0) ; extra == 'devel_ci'", + "azure-cosmos (>=4.0.0) ; extra == 'devel_ci'", + "azure-datalake-store (>=0.0.45) ; extra == 'devel_ci'", + "azure-identity (>=1.3.1) ; extra == 'devel_ci'", + "azure-keyvault-secrets (>=4.1.0) ; extra == 'devel_ci'", + "azure-kusto-data (<0.1,>=0.0.43) ; extra == 'devel_ci'", + "azure-mgmt-containerinstance (<2.0,>=1.5.0) ; extra == 'devel_ci'", + "azure-mgmt-datafactory (<2.0,>=1.0.0) ; extra == 'devel_ci'", + "azure-mgmt-datalake-store (>=0.5.0) ; extra == 'devel_ci'", + "azure-mgmt-resource (>=2.2.0) ; extra == 'devel_ci'", + "azure-servicebus (>=7.6.1) ; extra == 'devel_ci'", + "azure-storage-blob (>=12.14.0) ; extra == 'devel_ci'", + "azure-storage-common (>=2.1.0) ; extra == 'devel_ci'", + "azure-storage-file-datalake (>=12.9.1) ; extra == 'devel_ci'", + "azure-storage-file (>=2.1.0) ; extra == 'devel_ci'", + "azure-synapse-spark ; extra == 'devel_ci'", + "bcrypt (>=2.0.0) ; extra == 'devel_ci'", + "beautifulsoup4 (>=4.7.1) ; extra == 'devel_ci'", + "black ; extra == 'devel_ci'", + "blinker ; extra == 'devel_ci'", + "blinker (>=1.1) ; extra == 'devel_ci'", + "boto3 (>=1.28.0) ; extra == 'devel_ci'", + "botocore (>=1.31.0) ; extra == 'devel_ci'", + "cassandra-driver (>=3.13.0) ; extra == 'devel_ci'", + "celery (!=5.3.2,!=5.3.3,<6,>=5.3.0) ; extra == 'devel_ci'", + "cgroupspy (>=0.2.2) ; extra == 'devel_ci'", + "checksumdir ; extra == 'devel_ci'", + "click (>=8.0) ; extra == 'devel_ci'", + "click (!=8.1.4,!=8.1.5,>=8.0) ; extra == 'devel_ci'", + "cloudant (>=2.0) ; extra == 'devel_ci'", + "cloudpickle (>=1.4.1) ; extra == 'devel_ci'", + "confluent-kafka (>=1.8.2) ; extra == 'devel_ci'", + "coverage (>=7.2) ; extra == 'devel_ci'", + "cryptography (>=2.0.0) ; extra == 'devel_ci'", + "dask (!=2022.10.1,!=2023.5.0,>=2.9.0) ; extra == 'devel_ci'", + "databricks-sql-connector (<3.0.0,>=2.0.0) ; extra == 'devel_ci'", + "datadog (>=0.14.0) ; extra == 'devel_ci'", + "distributed (!=2023.5.0,>=2.11.1) ; extra == 'devel_ci'", + "dnspython (>=1.13.0) ; extra == 'devel_ci'", + "docker (>=5.0.3) ; extra == 'devel_ci'", + "docutils (<0.17.0) ; extra == 'devel_ci'", + "elasticsearch (<9,>8) ; extra == 'devel_ci'", + "eralchemy2 ; extra == 'devel_ci'", + "eventlet (>=0.33.3) ; extra == 'devel_ci'", + "facebook-business (>=6.0.2) ; extra == 'devel_ci'", + "filelock ; extra == 'devel_ci'", + "flask-appbuilder[oauth] (==4.3.6) ; extra == 'devel_ci'", + "flask-bcrypt (>=0.7.1) ; extra == 'devel_ci'", + "flower (>=1.0.0) ; extra == 'devel_ci'", + "gcloud-aio-auth (<5.0.0,>=4.0.0) ; extra == 'devel_ci'", + "gcloud-aio-bigquery (>=6.1.2) ; extra == 'devel_ci'", + "gcloud-aio-storage ; extra == 'devel_ci'", + "gevent (>=0.13) ; extra == 'devel_ci'", + "gitpython ; extra == 'devel_ci'", + "google-ads (>=21.2.0) ; extra == 'devel_ci'", + "google-api-core (>=2.11.0) ; extra == 'devel_ci'", + "google-api-python-client (>=1.6.0) ; extra == 'devel_ci'", + "google-auth-httplib2 (>=0.0.1) ; extra == 'devel_ci'", + "google-auth (>=1.0.0) ; extra == 'devel_ci'", + "google-auth (<3.0.0,>=1.0.0) ; extra == 'devel_ci'", + "google-cloud-aiplatform (>=1.22.1) ; extra == 'devel_ci'", + "google-cloud-automl (>=2.11.0) ; extra == 'devel_ci'", + "google-cloud-bigquery-datatransfer (>=3.11.0) ; extra == 'devel_ci'", + "google-cloud-bigtable (>=2.17.0) ; extra == 'devel_ci'", + "google-cloud-build (>=3.13.0) ; extra == 'devel_ci'", + "google-cloud-compute (>=1.10.0) ; extra == 'devel_ci'", + "google-cloud-container (>=2.17.4) ; extra == 'devel_ci'", + "google-cloud-datacatalog (>=3.11.1) ; extra == 'devel_ci'", + "google-cloud-dataflow-client (>=0.8.2) ; extra == 'devel_ci'", + "google-cloud-dataform (>=0.5.0) ; extra == 'devel_ci'", + "google-cloud-dataplex (>=1.4.2) ; extra == 'devel_ci'", + "google-cloud-dataproc-metastore (>=1.12.0) ; extra == 'devel_ci'", + "google-cloud-dataproc (>=5.4.0) ; extra == 'devel_ci'", + "google-cloud-dlp (>=3.12.0) ; extra == 'devel_ci'", + "google-cloud-kms (>=2.15.0) ; extra == 'devel_ci'", + "google-cloud-language (>=2.9.0) ; extra == 'devel_ci'", + "google-cloud-logging (>=3.5.0) ; extra == 'devel_ci'", + "google-cloud-memcache (>=1.7.0) ; extra == 'devel_ci'", + "google-cloud-monitoring (>=2.14.1) ; extra == 'devel_ci'", + "google-cloud-orchestration-airflow (>=1.7.0) ; extra == 'devel_ci'", + "google-cloud-os-login (>=2.9.1) ; extra == 'devel_ci'", + "google-cloud-pubsub (>=2.15.0) ; extra == 'devel_ci'", + "google-cloud-redis (>=2.12.0) ; extra == 'devel_ci'", + "google-cloud-secret-manager (>=2.16.0) ; extra == 'devel_ci'", + "google-cloud-spanner (>=3.11.1) ; extra == 'devel_ci'", + "google-cloud-speech (>=2.18.0) ; extra == 'devel_ci'", + "google-cloud-storage-transfer (>=1.4.1) ; extra == 'devel_ci'", + "google-cloud-storage (>=2.7.0) ; extra == 'devel_ci'", + "google-cloud-tasks (>=2.13.0) ; extra == 'devel_ci'", + "google-cloud-texttospeech (>=2.14.1) ; extra == 'devel_ci'", + "google-cloud-translate (>=3.11.0) ; extra == 'devel_ci'", + "google-cloud-videointelligence (>=2.11.0) ; extra == 'devel_ci'", + "google-cloud-vision (>=3.4.0) ; extra == 'devel_ci'", + "google-cloud-workflows (>=1.10.0) ; extra == 'devel_ci'", + "greenlet (>=0.4.9) ; extra == 'devel_ci'", + "grpcio-gcp (>=0.2.2) ; extra == 'devel_ci'", + "grpcio (>=1.15.0) ; extra == 'devel_ci'", + "hdfs[avro,dataframe,kerberos] (>=2.0.4) ; extra == 'devel_ci'", + "hmsclient (>=0.1.0) ; extra == 'devel_ci'", + "httpx ; extra == 'devel_ci'", + "hvac (>=0.10) ; extra == 'devel_ci'", + "impyla (<1.0,>=0.18.0) ; extra == 'devel_ci'", + "influxdb-client (>=1.19.0) ; extra == 'devel_ci'", + "ipdb ; extra == 'devel_ci'", + "jaydebeapi (>=1.1.1) ; extra == 'devel_ci'", + "json-merge-patch (>=0.2) ; extra == 'devel_ci'", + "jsonpath-ng (>=1.5.3) ; extra == 'devel_ci'", + "jsonschema (>=3.0) ; extra == 'devel_ci'", + "kubernetes (<24,>=21.7.0) ; extra == 'devel_ci'", + "kubernetes-asyncio (<25,>=18.20.1) ; extra == 'devel_ci'", + "kylinpy (>=2.6) ; extra == 'devel_ci'", + "ldap3 (>=2.5.1) ; extra == 'devel_ci'", + "looker-sdk (>=22.2.0) ; extra == 'devel_ci'", + "mongomock ; extra == 'devel_ci'", + "moto[glue] (>=4.0) ; extra == 'devel_ci'", + "mypy-boto3-appflow (>=1.28.0) ; extra == 'devel_ci'", + "mypy-boto3-rds (>=1.28.0) ; extra == 'devel_ci'", + "mypy-boto3-redshift-data (>=1.28.0) ; extra == 'devel_ci'", + "mypy-boto3-s3 (>=1.28.0) ; extra == 'devel_ci'", + "mypy (==1.2.0) ; extra == 'devel_ci'", + "mysqlclient (>=1.3.6) ; extra == 'devel_ci'", + "neo4j (>=4.2.1) ; extra == 'devel_ci'", + "openapi-spec-validator (>=0.2.8) ; extra == 'devel_ci'", + "openlineage-integration-common (>=0.28.0) ; extra == 'devel_ci'", + "openlineage-python (>=0.28.0) ; extra == 'devel_ci'", + "opentelemetry-exporter-prometheus ; extra == 'devel_ci'", + "opsgenie-sdk (>=2.1.5) ; extra == 'devel_ci'", + "oracledb (>=1.0.0) ; extra == 'devel_ci'", + "oss2 (>=2.14.0) ; extra == 'devel_ci'", + "pandas-gbq ; extra == 'devel_ci'", + "pandas (>=0.17.1) ; extra == 'devel_ci'", + "papermill[all] (>=1.2.1) ; extra == 'devel_ci'", + "paramiko (>=2.6.0) ; extra == 'devel_ci'", + "pdpyras (>=4.1.2) ; extra == 'devel_ci'", + "pinotdb (>0.4.7) ; extra == 'devel_ci'", + "pipdeptree ; extra == 'devel_ci'", + "plyvel ; extra == 'devel_ci'", + "pre-commit ; extra == 'devel_ci'", + "presto-python-client (>=0.8.2) ; extra == 'devel_ci'", + "proto-plus (>=1.19.6) ; extra == 'devel_ci'", + "psycopg2-binary (>=2.8.0) ; extra == 'devel_ci'", + "pyarrow (>=9.0.0) ; extra == 'devel_ci'", + "pydruid (>=0.4.1) ; extra == 'devel_ci'", + "pyexasol (>=0.5.1) ; extra == 'devel_ci'", + "pygithub ; extra == 'devel_ci'", + "pyhive[hive_pure_sasl] (>=0.7.0) ; extra == 'devel_ci'", + "pykerberos (>=1.1.13) ; extra == 'devel_ci'", + "pymongo (>=3.6.0) ; extra == 'devel_ci'", + "pymssql (>=2.1.5) ; extra == 'devel_ci'", + "pyodbc ; extra == 'devel_ci'", + "pypsrp (>=0.8.0) ; extra == 'devel_ci'", + "pyspark ; extra == 'devel_ci'", + "pytest ; extra == 'devel_ci'", + "pytest-asyncio ; extra == 'devel_ci'", + "pytest-capture-warnings ; extra == 'devel_ci'", + "pytest-cov ; extra == 'devel_ci'", + "pytest-httpx ; extra == 'devel_ci'", + "pytest-instafail ; extra == 'devel_ci'", + "pytest-mock ; extra == 'devel_ci'", + "pytest-rerunfailures ; extra == 'devel_ci'", + "pytest-timeouts ; extra == 'devel_ci'", + "pytest-xdist ; extra == 'devel_ci'", + "python-arango (>=7.3.2) ; extra == 'devel_ci'", + "python-dotenv (>=0.21.0) ; extra == 'devel_ci'", + "python-jenkins (>=1.0.0) ; extra == 'devel_ci'", + "python-ldap ; extra == 'devel_ci'", + "python-telegram-bot (>=20.0.0) ; extra == 'devel_ci'", + "pywinrm ; extra == 'devel_ci'", + "pywinrm (>=0.4) ; extra == 'devel_ci'", + "redis (!=4.5.5,<5.0.0,>=4.5.2) ; extra == 'devel_ci'", + "redshift-connector (>=2.0.888) ; extra == 'devel_ci'", + "requests (>=2.26.0) ; extra == 'devel_ci'", + "requests (<3,>=2.27) ; extra == 'devel_ci'", + "requests-kerberos (>=0.10.0) ; extra == 'devel_ci'", + "requests-mock ; extra == 'devel_ci'", + "requests-toolbelt ; extra == 'devel_ci'", + "rich-click (>=1.5) ; extra == 'devel_ci'", + "ruff (>=0.0.219) ; extra == 'devel_ci'", + "scrapbook[all] ; extra == 'devel_ci'", + "semver ; extra == 'devel_ci'", + "sendgrid (>=6.0.0) ; extra == 'devel_ci'", + "sentry-sdk (>=0.8.0) ; extra == 'devel_ci'", + "simple-salesforce (>=1.0.0) ; extra == 'devel_ci'", + "slack-sdk (>=3.0.0) ; extra == 'devel_ci'", + "smbprotocol (>=1.5.0) ; extra == 'devel_ci'", + "snowflake-connector-python (>=2.4.1) ; extra == 'devel_ci'", + "snowflake-sqlalchemy (>=1.1.0) ; extra == 'devel_ci'", + "sphinx-airflow-theme ; extra == 'devel_ci'", + "sphinx-argparse (>=0.1.13) ; extra == 'devel_ci'", + "sphinx-autoapi (>=2.0.0) ; extra == 'devel_ci'", + "sphinx-copybutton ; extra == 'devel_ci'", + "sphinx-jinja (>=2.0) ; extra == 'devel_ci'", + "sphinx-rtd-theme (>=0.1.6) ; extra == 'devel_ci'", + "sphinx (>=5.2.0) ; extra == 'devel_ci'", + "sphinxcontrib-httpdomain (>=1.7.0) ; extra == 'devel_ci'", + "sphinxcontrib-redoc (>=1.6.0) ; extra == 'devel_ci'", + "sphinxcontrib-spelling (>=7.3) ; extra == 'devel_ci'", + "spython (>=0.0.56) ; extra == 'devel_ci'", + "sqlalchemy-bigquery (>=1.2.1) ; extra == 'devel_ci'", + "sqlalchemy-drill (>=1.1.0) ; extra == 'devel_ci'", + "sqlalchemy-spanner (>=1.6.2) ; extra == 'devel_ci'", + "sqlalchemy-redshift (>=0.8.6) ; extra == 'devel_ci'", + "sqlparse (>=0.4.2) ; extra == 'devel_ci'", + "sshtunnel (>=0.3.2) ; extra == 'devel_ci'", + "statsd (>=3.3.0) ; extra == 'devel_ci'", + "tableauserverclient ; extra == 'devel_ci'", + "thrift (>=0.9.2) ; extra == 'devel_ci'", + "thrift-sasl (>=0.2.0) ; extra == 'devel_ci'", + "time-machine ; extra == 'devel_ci'", + "towncrier ; extra == 'devel_ci'", + "trino (>=0.318.0) ; extra == 'devel_ci'", + "twine ; extra == 'devel_ci'", + "types-Deprecated ; extra == 'devel_ci'", + "types-Markdown ; extra == 'devel_ci'", + "types-PyMySQL ; extra == 'devel_ci'", + "types-PyYAML ; extra == 'devel_ci'", + "types-certifi ; extra == 'devel_ci'", + "types-croniter ; extra == 'devel_ci'", + "types-docutils ; extra == 'devel_ci'", + "types-paramiko ; extra == 'devel_ci'", + "types-protobuf ; extra == 'devel_ci'", + "types-python-dateutil ; extra == 'devel_ci'", + "types-python-slugify ; extra == 'devel_ci'", + "types-pytz ; extra == 'devel_ci'", + "types-redis ; extra == 'devel_ci'", + "types-requests ; extra == 'devel_ci'", + "types-setuptools ; extra == 'devel_ci'", + "types-tabulate ; extra == 'devel_ci'", + "types-termcolor ; extra == 'devel_ci'", + "types-toml ; extra == 'devel_ci'", + "vertica-python (>=0.5.1) ; extra == 'devel_ci'", + "virtualenv ; extra == 'devel_ci'", + "watchtower (~=2.0.1) ; extra == 'devel_ci'", + "wheel ; extra == 'devel_ci'", + "yamllint ; extra == 'devel_ci'", + "zenpy (>=2.0.24) ; extra == 'devel_ci'", + "apache-airflow-providers-airbyte ; extra == 'devel_ci'", + "apache-airflow-providers-alibaba ; extra == 'devel_ci'", + "apache-airflow-providers-amazon ; extra == 'devel_ci'", + "apache-airflow-providers-apache-beam ; extra == 'devel_ci'", + "apache-airflow-providers-apache-cassandra ; extra == 'devel_ci'", + "apache-airflow-providers-apache-drill ; extra == 'devel_ci'", + "apache-airflow-providers-apache-druid ; extra == 'devel_ci'", + "apache-airflow-providers-apache-flink ; extra == 'devel_ci'", + "apache-airflow-providers-apache-hdfs ; extra == 'devel_ci'", + "apache-airflow-providers-apache-hive ; extra == 'devel_ci'", + "apache-airflow-providers-apache-impala ; extra == 'devel_ci'", + "apache-airflow-providers-apache-kafka ; extra == 'devel_ci'", + "apache-airflow-providers-apache-kylin ; extra == 'devel_ci'", + "apache-airflow-providers-apache-livy ; extra == 'devel_ci'", + "apache-airflow-providers-apache-pig ; extra == 'devel_ci'", + "apache-airflow-providers-apache-pinot ; extra == 'devel_ci'", + "apache-airflow-providers-apache-spark ; extra == 'devel_ci'", + "apache-airflow-providers-apache-sqoop ; extra == 'devel_ci'", + "apache-airflow-providers-apprise ; extra == 'devel_ci'", + "apache-airflow-providers-arangodb ; extra == 'devel_ci'", + "apache-airflow-providers-asana ; extra == 'devel_ci'", + "apache-airflow-providers-atlassian-jira ; extra == 'devel_ci'", + "apache-airflow-providers-celery ; extra == 'devel_ci'", + "apache-airflow-providers-cloudant ; extra == 'devel_ci'", + "apache-airflow-providers-cncf-kubernetes ; extra == 'devel_ci'", + "apache-airflow-providers-daskexecutor ; extra == 'devel_ci'", + "apache-airflow-providers-databricks ; extra == 'devel_ci'", + "apache-airflow-providers-datadog ; extra == 'devel_ci'", + "apache-airflow-providers-dbt-cloud ; extra == 'devel_ci'", + "apache-airflow-providers-dingding ; extra == 'devel_ci'", + "apache-airflow-providers-discord ; extra == 'devel_ci'", + "apache-airflow-providers-docker ; extra == 'devel_ci'", + "apache-airflow-providers-elasticsearch ; extra == 'devel_ci'", + "apache-airflow-providers-exasol ; extra == 'devel_ci'", + "apache-airflow-providers-facebook ; extra == 'devel_ci'", + "apache-airflow-providers-ftp ; extra == 'devel_ci'", + "apache-airflow-providers-github ; extra == 'devel_ci'", + "apache-airflow-providers-google ; extra == 'devel_ci'", + "apache-airflow-providers-grpc ; extra == 'devel_ci'", + "apache-airflow-providers-hashicorp ; extra == 'devel_ci'", + "apache-airflow-providers-http ; extra == 'devel_ci'", + "apache-airflow-providers-imap ; extra == 'devel_ci'", + "apache-airflow-providers-influxdb ; extra == 'devel_ci'", + "apache-airflow-providers-jdbc ; extra == 'devel_ci'", + "apache-airflow-providers-jenkins ; extra == 'devel_ci'", + "apache-airflow-providers-microsoft-azure ; extra == 'devel_ci'", + "apache-airflow-providers-microsoft-mssql ; extra == 'devel_ci'", + "apache-airflow-providers-microsoft-psrp ; extra == 'devel_ci'", + "apache-airflow-providers-microsoft-winrm ; extra == 'devel_ci'", + "apache-airflow-providers-mongo ; extra == 'devel_ci'", + "apache-airflow-providers-mysql ; extra == 'devel_ci'", + "apache-airflow-providers-neo4j ; extra == 'devel_ci'", + "apache-airflow-providers-odbc ; extra == 'devel_ci'", + "apache-airflow-providers-openfaas ; extra == 'devel_ci'", + "apache-airflow-providers-openlineage ; extra == 'devel_ci'", + "apache-airflow-providers-opsgenie ; extra == 'devel_ci'", + "apache-airflow-providers-oracle ; extra == 'devel_ci'", + "apache-airflow-providers-pagerduty ; extra == 'devel_ci'", + "apache-airflow-providers-papermill ; extra == 'devel_ci'", + "apache-airflow-providers-plexus ; extra == 'devel_ci'", + "apache-airflow-providers-postgres ; extra == 'devel_ci'", + "apache-airflow-providers-presto ; extra == 'devel_ci'", + "apache-airflow-providers-redis ; extra == 'devel_ci'", + "apache-airflow-providers-salesforce ; extra == 'devel_ci'", + "apache-airflow-providers-samba ; extra == 'devel_ci'", + "apache-airflow-providers-segment ; extra == 'devel_ci'", + "apache-airflow-providers-sendgrid ; extra == 'devel_ci'", + "apache-airflow-providers-sftp ; extra == 'devel_ci'", + "apache-airflow-providers-singularity ; extra == 'devel_ci'", + "apache-airflow-providers-slack ; extra == 'devel_ci'", + "apache-airflow-providers-smtp ; extra == 'devel_ci'", + "apache-airflow-providers-snowflake ; extra == 'devel_ci'", + "apache-airflow-providers-sqlite ; extra == 'devel_ci'", + "apache-airflow-providers-ssh ; extra == 'devel_ci'", + "apache-airflow-providers-tableau ; extra == 'devel_ci'", + "apache-airflow-providers-tabular ; extra == 'devel_ci'", + "apache-airflow-providers-telegram ; extra == 'devel_ci'", + "apache-airflow-providers-trino ; extra == 'devel_ci'", + "apache-airflow-providers-vertica ; extra == 'devel_ci'", + "apache-airflow-providers-zendesk ; extra == 'devel_ci'", + "backports.zoneinfo (>=0.2.1) ; (python_version < \"3.9\") and extra == 'devel_ci'", + "aiobotocore (>=2.1.1) ; extra == 'devel_hadoop'", + "aioresponses ; extra == 'devel_hadoop'", + "apache-airflow-providers-common-sql ; extra == 'devel_hadoop'", + "apache-airflow (>=2.4.0) ; extra == 'devel_hadoop'", + "astroid (<3.0,>=2.12.3) ; extra == 'devel_hadoop'", + "aws-xray-sdk ; extra == 'devel_hadoop'", + "bcrypt (>=2.0.0) ; extra == 'devel_hadoop'", + "beautifulsoup4 (>=4.7.1) ; extra == 'devel_hadoop'", + "black ; extra == 'devel_hadoop'", + "blinker ; extra == 'devel_hadoop'", + "cgroupspy (>=0.2.2) ; extra == 'devel_hadoop'", + "checksumdir ; extra == 'devel_hadoop'", + "click (>=8.0) ; extra == 'devel_hadoop'", + "click (!=8.1.4,!=8.1.5,>=8.0) ; extra == 'devel_hadoop'", + "coverage (>=7.2) ; extra == 'devel_hadoop'", + "cryptography (>=2.0.0) ; extra == 'devel_hadoop'", + "docutils (<0.17.0) ; extra == 'devel_hadoop'", + "eralchemy2 ; extra == 'devel_hadoop'", + "filelock ; extra == 'devel_hadoop'", + "flask-bcrypt (>=0.7.1) ; extra == 'devel_hadoop'", + "gitpython ; extra == 'devel_hadoop'", + "hdfs[avro,dataframe,kerberos] (>=2.0.4) ; extra == 'devel_hadoop'", + "hmsclient (>=0.1.0) ; extra == 'devel_hadoop'", + "impyla (<1.0,>=0.18.0) ; extra == 'devel_hadoop'", + "ipdb ; extra == 'devel_hadoop'", + "jsonschema (>=3.0) ; extra == 'devel_hadoop'", + "kubernetes (<24,>=21.7.0) ; extra == 'devel_hadoop'", + "mongomock ; extra == 'devel_hadoop'", + "moto[glue] (>=4.0) ; extra == 'devel_hadoop'", + "mypy-boto3-appflow (>=1.28.0) ; extra == 'devel_hadoop'", + "mypy-boto3-rds (>=1.28.0) ; extra == 'devel_hadoop'", + "mypy-boto3-redshift-data (>=1.28.0) ; extra == 'devel_hadoop'", + "mypy-boto3-s3 (>=1.28.0) ; extra == 'devel_hadoop'", + "mypy (==1.2.0) ; extra == 'devel_hadoop'", + "mysqlclient (>=1.3.6) ; extra == 'devel_hadoop'", + "openapi-spec-validator (>=0.2.8) ; extra == 'devel_hadoop'", + "pandas (>=0.17.1) ; extra == 'devel_hadoop'", + "pipdeptree ; extra == 'devel_hadoop'", + "pre-commit ; extra == 'devel_hadoop'", + "presto-python-client (>=0.8.2) ; extra == 'devel_hadoop'", + "pyarrow (>=9.0.0) ; extra == 'devel_hadoop'", + "pygithub ; extra == 'devel_hadoop'", + "pyhive[hive_pure_sasl] (>=0.7.0) ; extra == 'devel_hadoop'", + "pykerberos (>=1.1.13) ; extra == 'devel_hadoop'", + "pytest ; extra == 'devel_hadoop'", + "pytest-asyncio ; extra == 'devel_hadoop'", + "pytest-capture-warnings ; extra == 'devel_hadoop'", + "pytest-cov ; extra == 'devel_hadoop'", + "pytest-httpx ; extra == 'devel_hadoop'", + "pytest-instafail ; extra == 'devel_hadoop'", + "pytest-mock ; extra == 'devel_hadoop'", + "pytest-rerunfailures ; extra == 'devel_hadoop'", + "pytest-timeouts ; extra == 'devel_hadoop'", + "pytest-xdist ; extra == 'devel_hadoop'", + "pywinrm ; extra == 'devel_hadoop'", + "requests-kerberos (>=0.10.0) ; extra == 'devel_hadoop'", + "requests-mock ; extra == 'devel_hadoop'", + "rich-click (>=1.5) ; extra == 'devel_hadoop'", + "ruff (>=0.0.219) ; extra == 'devel_hadoop'", + "semver ; extra == 'devel_hadoop'", + "sphinx-airflow-theme ; extra == 'devel_hadoop'", + "sphinx-argparse (>=0.1.13) ; extra == 'devel_hadoop'", + "sphinx-autoapi (>=2.0.0) ; extra == 'devel_hadoop'", + "sphinx-copybutton ; extra == 'devel_hadoop'", + "sphinx-jinja (>=2.0) ; extra == 'devel_hadoop'", + "sphinx-rtd-theme (>=0.1.6) ; extra == 'devel_hadoop'", + "sphinx (>=5.2.0) ; extra == 'devel_hadoop'", + "sphinxcontrib-httpdomain (>=1.7.0) ; extra == 'devel_hadoop'", + "sphinxcontrib-redoc (>=1.6.0) ; extra == 'devel_hadoop'", + "sphinxcontrib-spelling (>=7.3) ; extra == 'devel_hadoop'", + "thrift (>=0.9.2) ; extra == 'devel_hadoop'", + "thrift-sasl (>=0.2.0) ; extra == 'devel_hadoop'", + "time-machine ; extra == 'devel_hadoop'", + "towncrier ; extra == 'devel_hadoop'", + "twine ; extra == 'devel_hadoop'", + "types-Deprecated ; extra == 'devel_hadoop'", + "types-Markdown ; extra == 'devel_hadoop'", + "types-PyMySQL ; extra == 'devel_hadoop'", + "types-PyYAML ; extra == 'devel_hadoop'", + "types-certifi ; extra == 'devel_hadoop'", + "types-croniter ; extra == 'devel_hadoop'", + "types-docutils ; extra == 'devel_hadoop'", + "types-paramiko ; extra == 'devel_hadoop'", + "types-protobuf ; extra == 'devel_hadoop'", + "types-python-dateutil ; extra == 'devel_hadoop'", + "types-python-slugify ; extra == 'devel_hadoop'", + "types-pytz ; extra == 'devel_hadoop'", + "types-redis ; extra == 'devel_hadoop'", + "types-requests ; extra == 'devel_hadoop'", + "types-setuptools ; extra == 'devel_hadoop'", + "types-tabulate ; extra == 'devel_hadoop'", + "types-termcolor ; extra == 'devel_hadoop'", + "types-toml ; extra == 'devel_hadoop'", + "wheel ; extra == 'devel_hadoop'", + "yamllint ; extra == 'devel_hadoop'", + "apache-airflow-providers-apache-hdfs ; extra == 'devel_hadoop'", + "apache-airflow-providers-apache-hive ; extra == 'devel_hadoop'", + "apache-airflow-providers-presto ; extra == 'devel_hadoop'", + "apache-airflow-providers-trino ; extra == 'devel_hadoop'", + "backports.zoneinfo (>=0.2.1) ; (python_version < \"3.9\") and extra == 'devel_hadoop'", + "apache-airflow-providers-dingding ; extra == 'dingding'", + "apache-airflow-providers-discord ; extra == 'discord'", + "astroid (<3.0,>=2.12.3) ; extra == 'doc'", + "checksumdir ; extra == 'doc'", + "click (!=8.1.4,!=8.1.5,>=8.0) ; extra == 'doc'", + "docutils (<0.17.0) ; extra == 'doc'", + "eralchemy2 ; extra == 'doc'", + "sphinx-airflow-theme ; extra == 'doc'", + "sphinx-argparse (>=0.1.13) ; extra == 'doc'", + "sphinx-autoapi (>=2.0.0) ; extra == 'doc'", + "sphinx-copybutton ; extra == 'doc'", + "sphinx-jinja (>=2.0) ; extra == 'doc'", + "sphinx-rtd-theme (>=0.1.6) ; extra == 'doc'", + "sphinx (>=5.2.0) ; extra == 'doc'", + "sphinxcontrib-httpdomain (>=1.7.0) ; extra == 'doc'", + "sphinxcontrib-redoc (>=1.6.0) ; extra == 'doc'", + "sphinxcontrib-spelling (>=7.3) ; extra == 'doc'", + "eralchemy2 ; extra == 'doc_gen'", + "apache-airflow-providers-docker ; extra == 'docker'", + "apache-airflow-providers-apache-druid ; extra == 'druid'", + "apache-airflow-providers-elasticsearch ; extra == 'elasticsearch'", + "apache-airflow-providers-exasol ; extra == 'exasol'", + "apache-airflow-providers-facebook ; extra == 'facebook'", + "apache-airflow-providers-ftp ; extra == 'ftp'", + "apache-airflow-providers-google ; extra == 'gcp'", + "apache-airflow-providers-google ; extra == 'gcp_api'", + "apache-airflow-providers-github ; extra == 'github'", + "authlib (>=1.0.0) ; extra == 'github_enterprise'", + "flask-appbuilder[oauth] (==4.3.6) ; extra == 'github_enterprise'", + "apache-airflow-providers-google ; extra == 'google'", + "authlib (>=1.0.0) ; extra == 'google_auth'", + "flask-appbuilder[oauth] (==4.3.6) ; extra == 'google_auth'", + "apache-airflow-providers-grpc ; extra == 'grpc'", + "apache-airflow-providers-hashicorp ; extra == 'hashicorp'", + "apache-airflow-providers-apache-hdfs ; extra == 'hdfs'", + "apache-airflow-providers-apache-hive ; extra == 'hive'", + "apache-airflow-providers-http ; extra == 'http'", + "apache-airflow-providers-imap ; extra == 'imap'", + "apache-airflow-providers-influxdb ; extra == 'influxdb'", + "apache-airflow-providers-jdbc ; extra == 'jdbc'", + "apache-airflow-providers-jenkins ; extra == 'jenkins'", + "pykerberos (>=1.1.13) ; extra == 'kerberos'", + "requests-kerberos (>=0.10.0) ; extra == 'kerberos'", + "thrift-sasl (>=0.2.0) ; extra == 'kerberos'", + "apache-airflow (>=2.4.0) ; extra == 'kubernetes'", + "asgiref (>=3.5.2) ; extra == 'kubernetes'", + "cryptography (>=2.0.0) ; extra == 'kubernetes'", + "kubernetes (<24,>=21.7.0) ; extra == 'kubernetes'", + "kubernetes-asyncio (<25,>=18.20.1) ; extra == 'kubernetes'", + "apache-airflow-providers-cncf-kubernetes ; extra == 'kubernetes'", + "ldap3 (>=2.5.1) ; extra == 'ldap'", + "python-ldap ; extra == 'ldap'", + "plyvel ; extra == 'leveldb'", + "apache-airflow-providers-microsoft-azure ; extra == 'microsoft.azure'", + "apache-airflow-providers-microsoft-mssql ; extra == 'microsoft.mssql'", + "apache-airflow-providers-microsoft-psrp ; extra == 'microsoft.psrp'", + "apache-airflow-providers-microsoft-winrm ; extra == 'microsoft.winrm'", + "apache-airflow-providers-mongo ; extra == 'mongo'", + "apache-airflow-providers-microsoft-mssql ; extra == 'mssql'", + "apache-airflow-providers-mysql ; extra == 'mysql'", + "apache-airflow-providers-neo4j ; extra == 'neo4j'", + "apache-airflow-providers-odbc ; extra == 'odbc'", + "apache-airflow-providers-openfaas ; extra == 'openfaas'", + "apache-airflow-providers-openlineage ; extra == 'openlineage'", + "apache-airflow-providers-opsgenie ; extra == 'opsgenie'", + "apache-airflow-providers-oracle ; extra == 'oracle'", + "opentelemetry-exporter-prometheus ; extra == 'otel'", + "apache-airflow-providers-pagerduty ; extra == 'pagerduty'", + "pandas (>=0.17.1) ; extra == 'pandas'", + "pyarrow (>=9.0.0) ; extra == 'pandas'", + "apache-airflow-providers-papermill ; extra == 'papermill'", + "bcrypt (>=2.0.0) ; extra == 'password'", + "flask-bcrypt (>=0.7.1) ; extra == 'password'", + "apache-airflow-providers-apache-pinot ; extra == 'pinot'", + "apache-airflow-providers-plexus ; extra == 'plexus'", + "apache-airflow-providers-postgres ; extra == 'postgres'", + "apache-airflow-providers-presto ; extra == 'presto'", + "apache-airflow-providers-qubole ; extra == 'qds'", + "amqp ; extra == 'rabbitmq'", + "apache-airflow-providers-redis ; extra == 'redis'", + "apache-airflow-providers-amazon ; extra == 's3'", + "apache-airflow-providers-salesforce ; extra == 'salesforce'", + "apache-airflow-providers-samba ; extra == 'samba'", + "apache-airflow-providers-segment ; extra == 'segment'", + "apache-airflow-providers-sendgrid ; extra == 'sendgrid'", + "blinker (>=1.1) ; extra == 'sentry'", + "sentry-sdk (>=0.8.0) ; extra == 'sentry'", + "apache-airflow-providers-sftp ; extra == 'sftp'", + "apache-airflow-providers-singularity ; extra == 'singularity'", + "apache-airflow-providers-slack ; extra == 'slack'", + "apache-airflow-providers-smtp ; extra == 'smtp'", + "apache-airflow-providers-snowflake ; extra == 'snowflake'", + "apache-airflow-providers-apache-spark ; extra == 'spark'", + "apache-airflow-providers-sqlite ; extra == 'sqlite'", + "apache-airflow-providers-ssh ; extra == 'ssh'", + "statsd (>=3.3.0) ; extra == 'statsd'", + "apache-airflow-providers-tableau ; extra == 'tableau'", + "apache-airflow-providers-tabular ; extra == 'tabular'", + "apache-airflow-providers-telegram ; extra == 'telegram'", + "apache-airflow-providers-trino ; extra == 'trino'", + "apache-airflow-providers-vertica ; extra == 'vertica'", + "virtualenv ; extra == 'virtualenv'", + "hdfs[avro,dataframe,kerberos] (>=2.0.4) ; extra == 'webhdfs'", + "apache-airflow-providers-microsoft-winrm ; extra == 'winrm'", + "apache-airflow-providers-zendesk ; extra == 'zendesk'" + ], + "requires_python": "~=3.8", + "project_url": [ + "Bug Tracker, https://github.com/apache/airflow/issues", + "Documentation, https://airflow.apache.org/docs/", + "Downloads, https://archive.apache.org/dist/airflow/", + "Release Notes, https://airflow.apache.org/docs/apache-airflow/stable/release_notes.html", + "Slack Chat, https://s.apache.org/airflow-slack", + "Source Code, https://github.com/apache/airflow", + "Twitter, https://twitter.com/ApacheAirflow", + "YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/" + ], + "provides_extra": [ + "aiobotocore", + "airbyte", + "alibaba", + "all", + "all_dbs", + "amazon", + "apache.atlas", + "apache.beam", + "apache.cassandra", + "apache.drill", + "apache.druid", + "apache.flink", + "apache.hdfs", + "apache.hive", + "apache.impala", + "apache.kafka", + "apache.kylin", + "apache.livy", + "apache.pig", + "apache.pinot", + "apache.spark", + "apache.sqoop", + "apache.webhdfs", + "apprise", + "arangodb", + "asana", + "async", + "atlas", + "atlassian.jira", + "aws", + "azure", + "cassandra", + "celery", + "cgroups", + "cloudant", + "cncf.kubernetes", + "common.sql", + "crypto", + "dask", + "daskexecutor", + "databricks", + "datadog", + "dbt.cloud", + "deprecated_api", + "devel", + "devel_all", + "devel_ci", + "devel_hadoop", + "dingding", + "discord", + "doc", + "doc_gen", + "docker", + "druid", + "elasticsearch", + "exasol", + "facebook", + "ftp", + "gcp", + "gcp_api", + "github", + "github_enterprise", + "google", + "google_auth", + "grpc", + "hashicorp", + "hdfs", + "hive", + "http", + "imap", + "influxdb", + "jdbc", + "jenkins", + "kerberos", + "kubernetes", + "ldap", + "leveldb", + "microsoft.azure", + "microsoft.mssql", + "microsoft.psrp", + "microsoft.winrm", + "mongo", + "mssql", + "mysql", + "neo4j", + "odbc", + "openfaas", + "openlineage", + "opsgenie", + "oracle", + "otel", + "pagerduty", + "pandas", + "papermill", + "password", + "pinot", + "plexus", + "postgres", + "presto", + "qds", + "rabbitmq", + "redis", + "s3", + "salesforce", + "samba", + "segment", + "sendgrid", + "sentry", + "sftp", + "singularity", + "slack", + "smtp", + "snowflake", + "spark", + "sqlite", + "ssh", + "statsd", + "tableau", + "tabular", + "telegram", + "trino", + "vertica", + "virtualenv", + "webhdfs", + "winrm", + "zendesk" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/4c/9e/4de9a1399d4d3e1ec939a93734b5cf7ae4a72f335fe3a97b04fa1a39ec47/apache_airflow_providers_common_sql-1.8.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=45117fa38f5a2e83cdb9a8d3bdfdbd602bfdc7a894d087b26e6ebb94df79ec32", + "hashes": { + "sha256": "45117fa38f5a2e83cdb9a8d3bdfdbd602bfdc7a894d087b26e6ebb94df79ec32" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "apache-airflow-providers-common-sql", + "version": "1.8.0", + "summary": "Provider for Apache Airflow. Implements apache-airflow-providers-common-sql package", + "description": "\n.. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n.. http://www.apache.org/licenses/LICENSE-2.0\n\n.. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n .. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n .. http://www.apache.org/licenses/LICENSE-2.0\n\n .. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n\nPackage ``apache-airflow-providers-common-sql``\n\nRelease: ``1.8.0``\n\n\n`Common SQL Provider `__\n\n\nProvider package\n----------------\n\nThis is a provider package for ``common.sql`` provider. All classes for this provider package\nare in ``airflow.providers.common.sql`` python package.\n\nYou can find package information and changelog for the provider\nin the `documentation `_.\n\n\nInstallation\n------------\n\nYou can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below\nfor the minimum Airflow version supported) via\n``pip install apache-airflow-providers-common-sql``\n\nThe package supports the following python versions: 3.8,3.9,3.10,3.11\n\nRequirements\n------------\n\n================== ==================\nPIP package Version required\n================== ==================\n``apache-airflow`` ``>=2.5.0``\n``sqlparse`` ``>=0.4.2``\n================== ==================\n\nCross provider package dependencies\n-----------------------------------\n\nThose are dependencies that might be needed in order to use all the features of the package.\nYou need to install the specified provider packages in order to use them.\n\nYou can install such cross-provider dependencies when installing from PyPI. For example:\n\n.. code-block:: bash\n\n pip install apache-airflow-providers-common-sql[openlineage]\n\n\n============================================================================================================== ===============\nDependent package Extra\n============================================================================================================== ===============\n`apache-airflow-providers-openlineage `_ ``openlineage``\n============================================================================================================== ===============\n\nThe changelog for the provider package can be found in the\n`changelog `_.\n", + "description_content_type": "text/x-rst", + "home_page": "https://airflow.apache.org/", + "download_url": "https://archive.apache.org/dist/airflow/providers", + "author": "Apache Software Foundation", + "author_email": "dev@airflow.apache.org", + "license": "Apache License 2.0", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Framework :: Apache Airflow", + "Framework :: Apache Airflow :: Provider", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: System :: Monitoring" + ], + "requires_dist": [ + "apache-airflow >=2.5.0", + "sqlparse >=0.4.2", + "apache-airflow-providers-openlineage ; extra == 'openlineage'", + "pandas >=0.17.1 ; extra == 'pandas'" + ], + "requires_python": "~=3.8", + "project_url": [ + "Documentation, https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.8.0/", + "Changelog, https://airflow.apache.org/docs/apache-airflow-providers-common-sql/1.8.0/changelog.html", + "Bug Tracker, https://github.com/apache/airflow/issues", + "Source Code, https://github.com/apache/airflow", + "Slack Chat, https://s.apache.org/airflow-slack", + "Twitter, https://twitter.com/ApacheAirflow", + "YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/" + ], + "provides_extra": [ + "openlineage", + "pandas" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/9b/85/61bb5bc0275c957162d11e71c568fa553f54c13b2d1b0c65565a9227561b/apache_airflow_providers_ftp-3.6.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=03264207293710c3821f5ccd548c5e89a3c5ca7562bc4ff629e6f73d112a71a4", + "hashes": { + "sha256": "03264207293710c3821f5ccd548c5e89a3c5ca7562bc4ff629e6f73d112a71a4" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "apache-airflow-providers-ftp", + "version": "3.6.0", + "summary": "Provider for Apache Airflow. Implements apache-airflow-providers-ftp package", + "description": "\n.. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n.. http://www.apache.org/licenses/LICENSE-2.0\n\n.. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n .. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n .. http://www.apache.org/licenses/LICENSE-2.0\n\n .. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n\nPackage ``apache-airflow-providers-ftp``\n\nRelease: ``3.6.0``\n\n\n`File Transfer Protocol (FTP) `__\n\n\nProvider package\n----------------\n\nThis is a provider package for ``ftp`` provider. All classes for this provider package\nare in ``airflow.providers.ftp`` python package.\n\nYou can find package information and changelog for the provider\nin the `documentation `_.\n\n\nInstallation\n------------\n\nYou can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below\nfor the minimum Airflow version supported) via\n``pip install apache-airflow-providers-ftp``\n\nThe package supports the following python versions: 3.8,3.9,3.10,3.11\n\nRequirements\n------------\n\n================== ==================\nPIP package Version required\n================== ==================\n``apache-airflow`` ``>=2.5.0``\n================== ==================\n\nCross provider package dependencies\n-----------------------------------\n\nThose are dependencies that might be needed in order to use all the features of the package.\nYou need to install the specified provider packages in order to use them.\n\nYou can install such cross-provider dependencies when installing from PyPI. For example:\n\n.. code-block:: bash\n\n pip install apache-airflow-providers-ftp[openlineage]\n\n\n============================================================================================================== ===============\nDependent package Extra\n============================================================================================================== ===============\n`apache-airflow-providers-openlineage `_ ``openlineage``\n============================================================================================================== ===============\n\nThe changelog for the provider package can be found in the\n`changelog `_.\n", + "description_content_type": "text/x-rst", + "home_page": "https://airflow.apache.org/", + "download_url": "https://archive.apache.org/dist/airflow/providers", + "author": "Apache Software Foundation", + "author_email": "dev@airflow.apache.org", + "license": "Apache License 2.0", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Framework :: Apache Airflow", + "Framework :: Apache Airflow :: Provider", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: System :: Monitoring" + ], + "requires_dist": [ + "apache-airflow >=2.5.0", + "apache-airflow-providers-openlineage ; extra == 'openlineage'" + ], + "requires_python": "~=3.8", + "project_url": [ + "Documentation, https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.6.0/", + "Changelog, https://airflow.apache.org/docs/apache-airflow-providers-ftp/3.6.0/changelog.html", + "Bug Tracker, https://github.com/apache/airflow/issues", + "Source Code, https://github.com/apache/airflow", + "Slack Chat, https://s.apache.org/airflow-slack", + "Twitter, https://twitter.com/ApacheAirflow", + "YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/" + ], + "provides_extra": [ + "openlineage" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/44/3a/f2ec761a5717ca6653df481e5d9bf415a2f1df8a4781987cb37b933786a9/apache_airflow_providers_http-2.0.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=5fa98bd07b58680806434652aaad045e7e15b632627a54d8cf8270d134a2d8ad", + "hashes": { + "sha256": "5fa98bd07b58680806434652aaad045e7e15b632627a54d8cf8270d134a2d8ad" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "apache-airflow-providers-http", + "version": "2.0.0", + "platform": [ + "UNKNOWN" + ], + "summary": "Provider package apache-airflow-providers-http for Apache Airflow", + "description": "\n.. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n.. http://www.apache.org/licenses/LICENSE-2.0\n\n.. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n\nPackage ``apache-airflow-providers-http``\n\nRelease: ``2.0.0``\n\n\n`Hypertext Transfer Protocol (HTTP) `__\n\n\nProvider package\n----------------\n\nThis is a provider package for ``http`` provider. All classes for this provider package\nare in ``airflow.providers.http`` python package.\n\nYou can find package information and changelog for the provider\nin the `documentation `_.\n\n\nInstallation\n------------\n\nYou can install this package on top of an existing airflow 2.1+ installation via\n``pip install apache-airflow-providers-http``\n\nPIP requirements\n----------------\n\n================== ==================\nPIP package Version required\n================== ==================\n``apache-airflow`` ``>=2.1.0``\n``requests`` ``>=2.20.0``\n================== ==================\n\n .. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n .. http://www.apache.org/licenses/LICENSE-2.0\n\n .. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n\nChangelog\n---------\n\n2.0.0\n.....\n\nBreaking changes\n~~~~~~~~~~~~~~~~\n\n* ``Auto-apply apply_default decorator (#15667)``\n\n.. warning:: Due to apply_default decorator removal, this version of the provider requires Airflow 2.1.0+.\n If your Airflow version is < 2.1.0, and you want to install this provider version, first upgrade\n Airflow to at least version 2.1.0. Otherwise your Airflow package version will be upgraded\n automatically and you will have to manually run ``airflow upgrade db`` to complete the migration.\n\nFeatures\n~~~~~~~~\n\n* ``Update 'SimpleHttpOperator' to take auth object (#15605)``\n* ``HttpHook: Use request factory and respect defaults (#14701)``\n\n.. Below changes are excluded from the changelog. Move them to\n appropriate section above if needed. Do not delete the lines(!):\n * ``Check synctatic correctness for code-snippets (#16005)``\n * ``Prepares provider release after PIP 21 compatibility (#15576)``\n * ``Remove Backport Providers (#14886)``\n * ``Updated documentation for June 2021 provider release (#16294)``\n * ``Add documentation for the HTTP connection (#15379)``\n * ``More documentation update for June providers release (#16405)``\n * ``Synchronizes updated changelog after buggfix release (#16464)``\n\n1.1.1\n.....\n\nBug fixes\n~~~~~~~~~\n\n* ``Corrections in docs and tools after releasing provider RCs (#14082)``\n\n\n1.1.0\n.....\n\nUpdated documentation and readme files.\n\nFeatures\n~~~~~~~~\n\n* ``Add a new argument for HttpSensor to accept a list of http status code``\n\n1.0.0\n.....\n\nInitial version of the provider.\n\n\n", + "description_content_type": "text/x-rst", + "home_page": "https://airflow.apache.org/", + "download_url": "https://archive.apache.org/dist/airflow/providers", + "author": "Apache Software Foundation", + "author_email": "dev@airflow.apache.org", + "license": "Apache License 2.0", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Topic :: System :: Monitoring" + ], + "requires_dist": [ + "apache-airflow (>=2.1.0)", + "requests (>=2.20.0)" + ], + "requires_python": "~=3.6", + "project_url": [ + "Documentation, https://airflow.apache.org/docs/apache-airflow-providers-http/2.0.0/", + "Bug Tracker, https://github.com/apache/airflow/issues", + "Source Code, https://github.com/apache/airflow" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/81/f1/fd276f800b5790ec046b0fdeadc758055e4ba58474e6f1c9877ddeb08f75/apache_airflow_providers_imap-3.4.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=4972793b0dbb25d5372fe1bf174329958075985c0beca013459ec89fcbbca620", + "hashes": { + "sha256": "4972793b0dbb25d5372fe1bf174329958075985c0beca013459ec89fcbbca620" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "apache-airflow-providers-imap", + "version": "3.4.0", + "summary": "Provider for Apache Airflow. Implements apache-airflow-providers-imap package", + "description": "\n.. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n.. http://www.apache.org/licenses/LICENSE-2.0\n\n.. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n .. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n .. http://www.apache.org/licenses/LICENSE-2.0\n\n .. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n\nPackage ``apache-airflow-providers-imap``\n\nRelease: ``3.4.0``\n\n\n`Internet Message Access Protocol (IMAP) `__\n\n\nProvider package\n----------------\n\nThis is a provider package for ``imap`` provider. All classes for this provider package\nare in ``airflow.providers.imap`` python package.\n\nYou can find package information and changelog for the provider\nin the `documentation `_.\n\n\nInstallation\n------------\n\nYou can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below\nfor the minimum Airflow version supported) via\n``pip install apache-airflow-providers-imap``\n\nThe package supports the following python versions: 3.8,3.9,3.10,3.11\n\nRequirements\n------------\n\n================== ==================\nPIP package Version required\n================== ==================\n``apache-airflow`` ``>=2.5.0``\n================== ==================\n\nThe changelog for the provider package can be found in the\n`changelog `_.\n", + "description_content_type": "text/x-rst", + "home_page": "https://airflow.apache.org/", + "download_url": "https://archive.apache.org/dist/airflow/providers", + "author": "Apache Software Foundation", + "author_email": "dev@airflow.apache.org", + "license": "Apache License 2.0", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Framework :: Apache Airflow", + "Framework :: Apache Airflow :: Provider", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: System :: Monitoring" + ], + "requires_dist": [ + "apache-airflow >=2.5.0" + ], + "requires_python": "~=3.8", + "project_url": [ + "Documentation, https://airflow.apache.org/docs/apache-airflow-providers-imap/3.4.0/", + "Changelog, https://airflow.apache.org/docs/apache-airflow-providers-imap/3.4.0/changelog.html", + "Bug Tracker, https://github.com/apache/airflow/issues", + "Source Code, https://github.com/apache/airflow", + "Slack Chat, https://s.apache.org/airflow-slack", + "Twitter, https://twitter.com/ApacheAirflow", + "YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/e1/30/95f0c4a6b3ba7f1a2a6a9f0f3f6e0cb0de812851ffd1765981eec3d305b6/apache_airflow_providers_sqlite-3.5.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=7baba67c9ddf75b31d8197e22ca491c2e1cf9e4c6306c1788c150b5457c3a182", + "hashes": { + "sha256": "7baba67c9ddf75b31d8197e22ca491c2e1cf9e4c6306c1788c150b5457c3a182" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "apache-airflow-providers-sqlite", + "version": "3.5.0", + "summary": "Provider for Apache Airflow. Implements apache-airflow-providers-sqlite package", + "description": "\n.. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n.. http://www.apache.org/licenses/LICENSE-2.0\n\n.. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n .. Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n\n .. http://www.apache.org/licenses/LICENSE-2.0\n\n .. Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n\nPackage ``apache-airflow-providers-sqlite``\n\nRelease: ``3.5.0``\n\n\n`SQLite `__\n\n\nProvider package\n----------------\n\nThis is a provider package for ``sqlite`` provider. All classes for this provider package\nare in ``airflow.providers.sqlite`` python package.\n\nYou can find package information and changelog for the provider\nin the `documentation `_.\n\n\nInstallation\n------------\n\nYou can install this package on top of an existing Airflow 2 installation (see ``Requirements`` below\nfor the minimum Airflow version supported) via\n``pip install apache-airflow-providers-sqlite``\n\nThe package supports the following python versions: 3.8,3.9,3.10,3.11\n\nRequirements\n------------\n\n======================================= ==================\nPIP package Version required\n======================================= ==================\n``apache-airflow`` ``>=2.5.0``\n``apache-airflow-providers-common-sql`` ``>=1.3.1``\n======================================= ==================\n\nCross provider package dependencies\n-----------------------------------\n\nThose are dependencies that might be needed in order to use all the features of the package.\nYou need to install the specified provider packages in order to use them.\n\nYou can install such cross-provider dependencies when installing from PyPI. For example:\n\n.. code-block:: bash\n\n pip install apache-airflow-providers-sqlite[common.sql]\n\n\n============================================================================================================ ==============\nDependent package Extra\n============================================================================================================ ==============\n`apache-airflow-providers-common-sql `_ ``common.sql``\n============================================================================================================ ==============\n\nThe changelog for the provider package can be found in the\n`changelog `_.\n", + "description_content_type": "text/x-rst", + "home_page": "https://airflow.apache.org/", + "download_url": "https://archive.apache.org/dist/airflow/providers", + "author": "Apache Software Foundation", + "author_email": "dev@airflow.apache.org", + "license": "Apache License 2.0", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "Intended Audience :: System Administrators", + "Framework :: Apache Airflow", + "Framework :: Apache Airflow :: Provider", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: System :: Monitoring" + ], + "requires_dist": [ + "apache-airflow-providers-common-sql >=1.3.1", + "apache-airflow >=2.5.0", + "apache-airflow-providers-common-sql ; extra == 'common.sql'" + ], + "requires_python": "~=3.8", + "project_url": [ + "Documentation, https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.5.0/", + "Changelog, https://airflow.apache.org/docs/apache-airflow-providers-sqlite/3.5.0/changelog.html", + "Bug Tracker, https://github.com/apache/airflow/issues", + "Source Code, https://github.com/apache/airflow", + "Slack Chat, https://s.apache.org/airflow-slack", + "Twitter, https://twitter.com/ApacheAirflow", + "YouTube, https://www.youtube.com/channel/UCSXwxpWZQ7XZ1WL3wqevChA/" + ], + "provides_extra": [ + "common.sql" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/8c/fb/5b32dc208c0adadd1b9f08f0982c1a39c0bcc7a0f6206802a0c9086c4756/apispec-6.3.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=95a0b9355785df998bb0e9b939237a30ee4c7428fd6ef97305eae3da06b9b339", + "hashes": { + "sha256": "95a0b9355785df998bb0e9b939237a30ee4c7428fd6ef97305eae3da06b9b339" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "apispec", + "version": "6.3.0", + "summary": "A pluggable API specification generator. Currently supports the OpenAPI Specification (f.k.a. the Swagger specification).", + "description": "*******\napispec\n*******\n\n.. image:: https://badgen.net/pypi/v/apispec\n :target: https://pypi.org/project/apispec/\n :alt: PyPI version\n\n.. image:: https://dev.azure.com/sloria/sloria/_apis/build/status/marshmallow-code.apispec?branchName=dev\n :target: https://dev.azure.com/sloria/sloria/_build/latest?definitionId=8&branchName=dev\n :alt: Build status\n\n.. image:: https://readthedocs.org/projects/apispec/badge/\n :target: https://apispec.readthedocs.io/\n :alt: Documentation\n\n.. image:: https://badgen.net/badge/marshmallow/3?list=1\n :target: https://marshmallow.readthedocs.io/en/latest/upgrading.html\n :alt: marshmallow 3 only\n\n.. image:: https://badgen.net/badge/OAS/2,3?list=1&color=cyan\n :target: https://github.com/OAI/OpenAPI-Specification\n :alt: OpenAPI Specification 2/3 compatible\n\n.. image:: https://badgen.net/badge/code%20style/black/000\n :target: https://github.com/ambv/black\n :alt: code style: black\n\nA pluggable API specification generator. Currently supports the `OpenAPI Specification `_ (f.k.a. the Swagger specification).\n\nFeatures\n========\n\n- Supports the OpenAPI Specification (versions 2 and 3)\n- Framework-agnostic\n- Built-in support for `marshmallow `_\n- Utilities for parsing docstrings\n\nInstallation\n============\n\n::\n\n $ pip install -U apispec\n\nWhen using the marshmallow plugin, ensure a compatible marshmallow version is used: ::\n\n $ pip install -U apispec[marshmallow]\n\nExample Application\n===================\n\n.. code-block:: python\n\n from apispec import APISpec\n from apispec.ext.marshmallow import MarshmallowPlugin\n from apispec_webframeworks.flask import FlaskPlugin\n from flask import Flask\n from marshmallow import Schema, fields\n\n\n # Create an APISpec\n spec = APISpec(\n title=\"Swagger Petstore\",\n version=\"1.0.0\",\n openapi_version=\"3.0.2\",\n plugins=[FlaskPlugin(), MarshmallowPlugin()],\n )\n\n # Optional marshmallow support\n class CategorySchema(Schema):\n id = fields.Int()\n name = fields.Str(required=True)\n\n\n class PetSchema(Schema):\n category = fields.List(fields.Nested(CategorySchema))\n name = fields.Str()\n\n\n # Optional security scheme support\n api_key_scheme = {\"type\": \"apiKey\", \"in\": \"header\", \"name\": \"X-API-Key\"}\n spec.components.security_scheme(\"ApiKeyAuth\", api_key_scheme)\n\n\n # Optional Flask support\n app = Flask(__name__)\n\n\n @app.route(\"/random\")\n def random_pet():\n \"\"\"A cute furry animal endpoint.\n ---\n get:\n description: Get a random pet\n security:\n - ApiKeyAuth: []\n responses:\n 200:\n content:\n application/json:\n schema: PetSchema\n \"\"\"\n pet = get_random_pet()\n return PetSchema().dump(pet)\n\n\n # Register the path and the entities within it\n with app.test_request_context():\n spec.path(view=random_pet)\n\n\nGenerated OpenAPI Spec\n----------------------\n\n.. code-block:: python\n\n import json\n\n print(json.dumps(spec.to_dict(), indent=2))\n # {\n # \"paths\": {\n # \"/random\": {\n # \"get\": {\n # \"description\": \"Get a random pet\",\n # \"security\": [\n # {\n # \"ApiKeyAuth\": []\n # }\n # ],\n # \"responses\": {\n # \"200\": {\n # \"content\": {\n # \"application/json\": {\n # \"schema\": {\n # \"$ref\": \"#/components/schemas/Pet\"\n # }\n # }\n # }\n # }\n # }\n # }\n # }\n # },\n # \"tags\": [],\n # \"info\": {\n # \"title\": \"Swagger Petstore\",\n # \"version\": \"1.0.0\"\n # },\n # \"openapi\": \"3.0.2\",\n # \"components\": {\n # \"parameters\": {},\n # \"responses\": {},\n # \"schemas\": {\n # \"Category\": {\n # \"type\": \"object\",\n # \"properties\": {\n # \"name\": {\n # \"type\": \"string\"\n # },\n # \"id\": {\n # \"type\": \"integer\",\n # \"format\": \"int32\"\n # }\n # },\n # \"required\": [\n # \"name\"\n # ]\n # },\n # \"Pet\": {\n # \"type\": \"object\",\n # \"properties\": {\n # \"name\": {\n # \"type\": \"string\"\n # },\n # \"category\": {\n # \"type\": \"array\",\n # \"items\": {\n # \"$ref\": \"#/components/schemas/Category\"\n # }\n # }\n # }\n # }\n # \"securitySchemes\": {\n # \"ApiKeyAuth\": {\n # \"type\": \"apiKey\",\n # \"in\": \"header\",\n # \"name\": \"X-API-Key\"\n # }\n # }\n # }\n # }\n # }\n\n print(spec.to_yaml())\n # components:\n # parameters: {}\n # responses: {}\n # schemas:\n # Category:\n # properties:\n # id: {format: int32, type: integer}\n # name: {type: string}\n # required: [name]\n # type: object\n # Pet:\n # properties:\n # category:\n # items: {$ref: '#/components/schemas/Category'}\n # type: array\n # name: {type: string}\n # type: object\n # securitySchemes:\n # ApiKeyAuth:\n # in: header\n # name: X-API-KEY\n # type: apiKey\n # info: {title: Swagger Petstore, version: 1.0.0}\n # openapi: 3.0.2\n # paths:\n # /random:\n # get:\n # description: Get a random pet\n # responses:\n # 200:\n # content:\n # application/json:\n # schema: {$ref: '#/components/schemas/Pet'}\n # security:\n # - ApiKeyAuth: []\n # tags: []\n\n\nDocumentation\n=============\n\nDocumentation is available at https://apispec.readthedocs.io/ .\n\nEcosystem\n=========\n\nA list of apispec-related libraries can be found at the GitHub wiki here:\n\nhttps://github.com/marshmallow-code/apispec/wiki/Ecosystem\n\nSupport apispec\n===============\n\napispec is maintained by a group of\n`volunteers `_.\nIf you'd like to support the future of the project, please consider\ncontributing to our Open Collective:\n\n.. image:: https://opencollective.com/marshmallow/donate/button.png\n :target: https://opencollective.com/marshmallow\n :width: 200\n :alt: Donate to our collective\n\nProfessional Support\n====================\n\nProfessionally-supported apispec is available through the\n`Tidelift Subscription `_.\n\nTidelift gives software development teams a single source for purchasing and maintaining their software,\nwith professional-grade assurances from the experts who know it best,\nwhile seamlessly integrating with existing tools. [`Get professional support`_]\n\n.. _`Get professional support`: https://tidelift.com/subscription/pkg/pypi-apispec?utm_source=pypi-apispec&utm_medium=referral&utm_campaign=readme\n\n.. image:: https://user-images.githubusercontent.com/2379650/45126032-50b69880-b13f-11e8-9c2c-abd16c433495.png\n :target: https://tidelift.com/subscription/pkg/pypi-apispec?utm_source=pypi-apispec&utm_medium=referral&utm_campaign=readme\n :alt: Get supported apispec with Tidelift\n\nSecurity Contact Information\n============================\n\nTo report a security vulnerability, please use the\n`Tidelift security contact `_.\nTidelift will coordinate the fix and disclosure.\n\nProject Links\n=============\n\n- Docs: https://apispec.readthedocs.io/\n- Changelog: https://apispec.readthedocs.io/en/latest/changelog.html\n- Contributing Guidelines: https://apispec.readthedocs.io/en/latest/contributing.html\n- PyPI: https://pypi.python.org/pypi/apispec\n- Issues: https://github.com/marshmallow-code/apispec/issues\n\n\nLicense\n=======\n\nMIT licensed. See the bundled `LICENSE `_ file for more details.\n", + "keywords": [ + "apispec", + "swagger", + "openapi", + "specification", + "oas", + "documentation", + "spec", + "rest", + "api" + ], + "home_page": "https://github.com/marshmallow-code/apispec", + "author": "Steven Loria", + "author_email": "sloria1@gmail.com", + "license": "MIT", + "classifier": [ + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3 :: Only" + ], + "requires_dist": [ + "packaging (>=21.3)", + "PyYAML (>=3.10) ; extra == 'dev'", + "prance[osv] (>=0.11) ; extra == 'dev'", + "openapi-spec-validator (<0.5) ; extra == 'dev'", + "marshmallow (>=3.13.0) ; extra == 'dev'", + "pytest ; extra == 'dev'", + "flake8 (==5.0.4) ; extra == 'dev'", + "flake8-bugbear (==22.9.23) ; extra == 'dev'", + "pre-commit (~=2.4) ; extra == 'dev'", + "mypy (==0.982) ; extra == 'dev'", + "types-PyYAML ; extra == 'dev'", + "tox ; extra == 'dev'", + "marshmallow (>=3.13.0) ; extra == 'docs'", + "pyyaml (==6.0) ; extra == 'docs'", + "sphinx (==5.2.3) ; extra == 'docs'", + "sphinx-issues (==3.0.1) ; extra == 'docs'", + "sphinx-rtd-theme (==1.0.0) ; extra == 'docs'", + "flake8 (==5.0.4) ; extra == 'lint'", + "flake8-bugbear (==22.9.23) ; extra == 'lint'", + "pre-commit (~=2.4) ; extra == 'lint'", + "mypy (==0.982) ; extra == 'lint'", + "types-PyYAML ; extra == 'lint'", + "marshmallow (>=3.18.0) ; extra == 'marshmallow'", + "PyYAML (>=3.10) ; extra == 'tests'", + "prance[osv] (>=0.11) ; extra == 'tests'", + "openapi-spec-validator (<0.5) ; extra == 'tests'", + "marshmallow (>=3.13.0) ; extra == 'tests'", + "pytest ; extra == 'tests'", + "prance[osv] (>=0.11) ; extra == 'validation'", + "openapi-spec-validator (<0.5) ; extra == 'validation'", + "PyYAML (>=3.10) ; extra == 'yaml'" + ], + "requires_python": ">=3.7", + "project_url": [ + "Funding, https://opencollective.com/marshmallow", + "Issues, https://github.com/marshmallow-code/apispec/issues", + "Tidelift, https://tidelift.com/subscription/pkg/pypi-apispec?utm_source=pypi-apispec&utm_medium=pypi" + ], + "provides_extra": [ + "dev", + "docs", + "lint", + "marshmallow", + "tests", + "validation", + "yaml" + ] + }, + "requested_extras": [ + "yaml" + ] + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/1e/05/223116a4a5905d6b26bff334ffc7b74474fafe23fcb10532caf0ef86ca69/argcomplete-3.1.2-py3-none-any.whl", + "archive_info": { + "hash": "sha256=d97c036d12a752d1079f190bc1521c545b941fda89ad85d15afa909b4d1b9a99", + "hashes": { + "sha256": "d97c036d12a752d1079f190bc1521c545b941fda89ad85d15afa909b4d1b9a99" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "argcomplete", + "version": "3.1.2", + "platform": [ + "MacOS X", + "Posix" + ], + "summary": "Bash tab completion for argparse", + "description": "argcomplete - Bash/zsh tab completion for argparse\n==================================================\n*Tab complete all the things!*\n\nArgcomplete provides easy, extensible command line tab completion of arguments for your Python application.\n\nIt makes two assumptions:\n\n* You're using bash or zsh as your shell\n* You're using `argparse `_ to manage your command line arguments/options\n\nArgcomplete is particularly useful if your program has lots of options or subparsers, and if your program can\ndynamically suggest completions for your argument/option values (for example, if the user is browsing resources over\nthe network).\n\nInstallation\n------------\n::\n\n pip install argcomplete\n activate-global-python-argcomplete\n\nSee `Activating global completion`_ below for details about the second step.\n\nRefresh your shell environment (start a new shell).\n\nSynopsis\n--------\nAdd the ``PYTHON_ARGCOMPLETE_OK`` marker and a call to ``argcomplete.autocomplete()`` to your Python application as\nfollows:\n\n.. code-block:: python\n\n #!/usr/bin/env python\n # PYTHON_ARGCOMPLETE_OK\n import argcomplete, argparse\n parser = argparse.ArgumentParser()\n ...\n argcomplete.autocomplete(parser)\n args = parser.parse_args()\n ...\n\nRegister your Python application with your shell's completion framework by running ``register-python-argcomplete``::\n\n eval \"$(register-python-argcomplete my-python-app)\"\n\nQuotes are significant; the registration will fail without them. See `Global completion`_ below for a way to enable\nargcomplete generally without registering each application individually.\n\nargcomplete.autocomplete(*parser*)\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThis method is the entry point to the module. It must be called **after** ArgumentParser construction is complete, but\n**before** the ``ArgumentParser.parse_args()`` method is called. The method looks for an environment variable that the\ncompletion hook shellcode sets, and if it's there, collects completions, prints them to the output stream (fd 8 by\ndefault), and exits. Otherwise, it returns to the caller immediately.\n\n.. admonition:: Side effects\n\n Argcomplete gets completions by running your program. It intercepts the execution flow at the moment\n ``argcomplete.autocomplete()`` is called. After sending completions, it exits using ``exit_method`` (``os._exit``\n by default). This means if your program has any side effects that happen before ``argcomplete`` is called, those\n side effects will happen every time the user presses ```` (although anything your program prints to stdout or\n stderr will be suppressed). For this reason it's best to construct the argument parser and call\n ``argcomplete.autocomplete()`` as early as possible in your execution flow.\n\n.. admonition:: Performance\n\n If the program takes a long time to get to the point where ``argcomplete.autocomplete()`` is called, the tab completion\n process will feel sluggish, and the user may lose confidence in it. So it's also important to minimize the startup time\n of the program up to that point (for example, by deferring initialization or importing of large modules until after\n parsing options).\n\nSpecifying completers\n---------------------\nYou can specify custom completion functions for your options and arguments. Two styles are supported: callable and\nreadline-style. Callable completers are simpler. They are called with the following keyword arguments:\n\n* ``prefix``: The prefix text of the last word before the cursor on the command line.\n For dynamic completers, this can be used to reduce the work required to generate possible completions.\n* ``action``: The ``argparse.Action`` instance that this completer was called for.\n* ``parser``: The ``argparse.ArgumentParser`` instance that the action was taken by.\n* ``parsed_args``: The result of argument parsing so far (the ``argparse.Namespace`` args object normally returned by\n ``ArgumentParser.parse_args()``).\n\nCompleters can return their completions as an iterable of strings or a mapping (dict) of strings to their\ndescriptions (zsh will display the descriptions as context help alongside completions). An example completer for names\nof environment variables might look like this:\n\n.. code-block:: python\n\n def EnvironCompleter(**kwargs):\n return os.environ\n\nTo specify a completer for an argument or option, set the ``completer`` attribute of its associated action. An easy\nway to do this at definition time is:\n\n.. code-block:: python\n\n from argcomplete.completers import EnvironCompleter\n\n parser = argparse.ArgumentParser()\n parser.add_argument(\"--env-var1\").completer = EnvironCompleter\n parser.add_argument(\"--env-var2\").completer = EnvironCompleter\n argcomplete.autocomplete(parser)\n\nIf you specify the ``choices`` keyword for an argparse option or argument (and don't specify a completer), it will be\nused for completions.\n\nA completer that is initialized with a set of all possible choices of values for its action might look like this:\n\n.. code-block:: python\n\n class ChoicesCompleter(object):\n def __init__(self, choices):\n self.choices = choices\n\n def __call__(self, **kwargs):\n return self.choices\n\nThe following two ways to specify a static set of choices are equivalent for completion purposes:\n\n.. code-block:: python\n\n from argcomplete.completers import ChoicesCompleter\n\n parser.add_argument(\"--protocol\", choices=('http', 'https', 'ssh', 'rsync', 'wss'))\n parser.add_argument(\"--proto\").completer=ChoicesCompleter(('http', 'https', 'ssh', 'rsync', 'wss'))\n\nNote that if you use the ``choices=`` option, argparse will show\nall these choices in the ``--help`` output by default. To prevent this, set\n``metavar`` (like ``parser.add_argument(\"--protocol\", metavar=\"PROTOCOL\",\nchoices=('http', 'https', 'ssh', 'rsync', 'wss'))``).\n\nThe following `script `_ uses\n``parsed_args`` and `Requests `_ to query GitHub for publicly known members of an\norganization and complete their names, then prints the member description:\n\n.. code-block:: python\n\n #!/usr/bin/env python\n # PYTHON_ARGCOMPLETE_OK\n import argcomplete, argparse, requests, pprint\n\n def github_org_members(prefix, parsed_args, **kwargs):\n resource = \"https://api.github.com/orgs/{org}/members\".format(org=parsed_args.organization)\n return (member['login'] for member in requests.get(resource).json() if member['login'].startswith(prefix))\n\n parser = argparse.ArgumentParser()\n parser.add_argument(\"--organization\", help=\"GitHub organization\")\n parser.add_argument(\"--member\", help=\"GitHub member\").completer = github_org_members\n\n argcomplete.autocomplete(parser)\n args = parser.parse_args()\n\n pprint.pprint(requests.get(\"https://api.github.com/users/{m}\".format(m=args.member)).json())\n\n`Try it `_ like this::\n\n ./describe_github_user.py --organization heroku --member \n\nIf you have a useful completer to add to the `completer library\n`_, send a pull request!\n\nReadline-style completers\n~~~~~~~~~~~~~~~~~~~~~~~~~\nThe readline_ module defines a completer protocol in rlcompleter_. Readline-style completers are also supported by\nargcomplete, so you can use the same completer object both in an interactive readline-powered shell and on the command\nline. For example, you can use the readline-style completer provided by IPython_ to get introspective completions like\nyou would get in the IPython shell:\n\n.. _readline: http://docs.python.org/3/library/readline.html\n.. _rlcompleter: http://docs.python.org/3/library/rlcompleter.html#completer-objects\n.. _IPython: http://ipython.org/\n\n.. code-block:: python\n\n import IPython\n parser.add_argument(\"--python-name\").completer = IPython.core.completer.Completer()\n\n``argcomplete.CompletionFinder.rl_complete`` can also be used to plug in an argparse parser as a readline completer.\n\nPrinting warnings in completers\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nNormal stdout/stderr output is suspended when argcomplete runs. Sometimes, though, when the user presses ````, it's\nappropriate to print information about why completions generation failed. To do this, use ``warn``:\n\n.. code-block:: python\n\n from argcomplete import warn\n\n def AwesomeWebServiceCompleter(prefix, **kwargs):\n if login_failed:\n warn(\"Please log in to Awesome Web Service to use autocompletion\")\n return completions\n\nUsing a custom completion validator\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nBy default, argcomplete validates your completions by checking if they start with the prefix given to the completer. You\ncan override this validation check by supplying the ``validator`` keyword to ``argcomplete.autocomplete()``:\n\n.. code-block:: python\n\n def my_validator(completion_candidate, current_input):\n \"\"\"Complete non-prefix substring matches.\"\"\"\n return current_input in completion_candidate\n\n argcomplete.autocomplete(parser, validator=my_validator)\n\nGlobal completion\n-----------------\nIn global completion mode, you don't have to register each argcomplete-capable executable separately. Instead, the shell\nwill look for the string **PYTHON_ARGCOMPLETE_OK** in the first 1024 bytes of any executable that it's running\ncompletion for, and if it's found, follow the rest of the argcomplete protocol as described above.\n\nAdditionally, completion is activated for scripts run as ``python \")\n Markup('<script>alert(document.cookie);</script>')\n\n >>> # wrap in Markup to mark text \"safe\" and prevent escaping\n >>> Markup(\"Hello\")\n Markup('hello')\n\n >>> escape(Markup(\"Hello\"))\n Markup('hello')\n\n >>> # Markup is a str subclass\n >>> # methods and operators escape their arguments\n >>> template = Markup(\"Hello {name}\")\n >>> template.format(name='\"World\"')\n Markup('Hello "World"')\n\n\nDonate\n------\n\nThe Pallets organization develops and supports MarkupSafe and other\npopular packages. In order to grow the community of contributors and\nusers, and allow the maintainers to devote more time to the projects,\n`please donate today`_.\n\n.. _please donate today: https://palletsprojects.com/donate\n\n\nLinks\n-----\n\n- Documentation: https://markupsafe.palletsprojects.com/\n- Changes: https://markupsafe.palletsprojects.com/changes/\n- PyPI Releases: https://pypi.org/project/MarkupSafe/\n- Source Code: https://github.com/pallets/markupsafe/\n- Issue Tracker: https://github.com/pallets/markupsafe/issues/\n- Chat: https://discord.gg/pallets\n", + "description_content_type": "text/x-rst", + "home_page": "https://palletsprojects.com/p/markupsafe/", + "maintainer": "Pallets", + "maintainer_email": "contact@palletsprojects.com", + "license": "BSD-3-Clause", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Web Environment", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + "Topic :: Text Processing :: Markup :: HTML" + ], + "requires_python": ">=3.7", + "project_url": [ + "Donate, https://palletsprojects.com/donate", + "Documentation, https://markupsafe.palletsprojects.com/", + "Changes, https://markupsafe.palletsprojects.com/changes/", + "Source Code, https://github.com/pallets/markupsafe/", + "Issue Tracker, https://github.com/pallets/markupsafe/issues/", + "Chat, https://discord.gg/pallets" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/ed/3c/cebfdcad015240014ff08b883d1c0c427f2ba45ae8c6572851b6ef136cad/marshmallow-3.20.1-py3-none-any.whl", + "archive_info": { + "hash": "sha256=684939db93e80ad3561392f47be0230743131560a41c5110684c16e21ade0a5c", + "hashes": { + "sha256": "684939db93e80ad3561392f47be0230743131560a41c5110684c16e21ade0a5c" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "marshmallow", + "version": "3.20.1", + "summary": "A lightweight library for converting complex datatypes to and from native Python datatypes.", + "description": "********************************************\nmarshmallow: simplified object serialization\n********************************************\n\n.. image:: https://badgen.net/pypi/v/marshmallow\n :target: https://pypi.org/project/marshmallow/\n :alt: Latest version\n\n.. image:: https://github.com/marshmallow-code/marshmallow/actions/workflows/build-release.yml/badge.svg\n :target: https://github.com/marshmallow-code/marshmallow/actions/workflows/build-release.yml\n :alt: Build status\n\n.. image:: https://results.pre-commit.ci/badge/github/marshmallow-code/marshmallow/dev.svg\n :target: https://results.pre-commit.ci/latest/github/marshmallow-code/marshmallow/dev\n :alt: pre-commit.ci status\n\n.. image:: https://readthedocs.org/projects/marshmallow/badge/\n :target: https://marshmallow.readthedocs.io/\n :alt: Documentation\n \n.. image:: https://badgen.net/badge/code%20style/black/000\n :target: https://github.com/ambv/black\n :alt: code style: black\n\n\n**marshmallow** is an ORM/ODM/framework-agnostic library for converting complex datatypes, such as objects, to and from native Python datatypes.\n\n.. code-block:: python\n\n from datetime import date\n from pprint import pprint\n\n from marshmallow import Schema, fields\n\n\n class ArtistSchema(Schema):\n name = fields.Str()\n\n\n class AlbumSchema(Schema):\n title = fields.Str()\n release_date = fields.Date()\n artist = fields.Nested(ArtistSchema())\n\n\n bowie = dict(name=\"David Bowie\")\n album = dict(artist=bowie, title=\"Hunky Dory\", release_date=date(1971, 12, 17))\n\n schema = AlbumSchema()\n result = schema.dump(album)\n pprint(result, indent=2)\n # { 'artist': {'name': 'David Bowie'},\n # 'release_date': '1971-12-17',\n # 'title': 'Hunky Dory'}\n\n\nIn short, marshmallow schemas can be used to:\n\n- **Validate** input data.\n- **Deserialize** input data to app-level objects.\n- **Serialize** app-level objects to primitive Python types. The serialized objects can then be rendered to standard formats such as JSON for use in an HTTP API.\n\nGet It Now\n==========\n\n::\n\n $ pip install -U marshmallow\n\n\nDocumentation\n=============\n\nFull documentation is available at https://marshmallow.readthedocs.io/ .\n\nRequirements\n============\n\n- Python >= 3.8\n\nEcosystem\n=========\n\nA list of marshmallow-related libraries can be found at the GitHub wiki here:\n\nhttps://github.com/marshmallow-code/marshmallow/wiki/Ecosystem\n\nCredits\n=======\n\nContributors\n------------\n\nThis project exists thanks to all the people who contribute.\n\n**You're highly encouraged to participate in marshmallow's development.**\nCheck out the `Contributing Guidelines `_ to see how you can help.\n\nThank you to all who have already contributed to marshmallow!\n\n.. image:: https://opencollective.com/marshmallow/contributors.svg?width=890&button=false\n :target: https://marshmallow.readthedocs.io/en/latest/authors.html\n :alt: Contributors\n\nBackers\n-------\n\nIf you find marshmallow useful, please consider supporting the team with\na donation. Your donation helps move marshmallow forward.\n\nThank you to all our backers! [`Become a backer`_]\n\n.. _`Become a backer`: https://opencollective.com/marshmallow#backer\n\n.. image:: https://opencollective.com/marshmallow/backers.svg?width=890\n :target: https://opencollective.com/marshmallow#backers\n :alt: Backers\n\nSponsors\n--------\n\nSupport this project by becoming a sponsor (or ask your company to support this project by becoming a sponsor).\nYour logo will show up here with a link to your website. [`Become a sponsor`_]\n\n.. _`Become a sponsor`: https://opencollective.com/marshmallow#sponsor\n\n.. image:: https://opencollective.com/marshmallow/sponsor/0/avatar.svg\n :target: https://opencollective.com/marshmallow/sponsor/0/website\n :alt: Sponsors\n\n.. image:: https://opencollective.com/static/images/become_sponsor.svg\n :target: https://opencollective.com/marshmallow#sponsor\n :alt: Become a sponsor\n\n\nProfessional Support\n====================\n\nProfessionally-supported marshmallow is now available through the\n`Tidelift Subscription `_.\n\nTidelift gives software development teams a single source for purchasing and maintaining their software,\nwith professional-grade assurances from the experts who know it best,\nwhile seamlessly integrating with existing tools. [`Get professional support`_]\n\n.. _`Get professional support`: https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=marshmallow&utm_medium=referral&utm_campaign=github\n\n.. image:: https://user-images.githubusercontent.com/2379650/45126032-50b69880-b13f-11e8-9c2c-abd16c433495.png\n :target: https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=readme\n :alt: Get supported marshmallow with Tidelift\n\n\nProject Links\n=============\n\n- Docs: https://marshmallow.readthedocs.io/\n- Changelog: https://marshmallow.readthedocs.io/en/latest/changelog.html\n- Contributing Guidelines: https://marshmallow.readthedocs.io/en/latest/contributing.html\n- PyPI: https://pypi.python.org/pypi/marshmallow\n- Issues: https://github.com/marshmallow-code/marshmallow/issues\n- Donate: https://opencollective.com/marshmallow\n\nLicense\n=======\n\nMIT licensed. See the bundled `LICENSE `_ file for more details.\n", + "keywords": [ + "serialization", + "rest", + "json", + "api", + "marshal", + "marshalling", + "deserialization", + "validation", + "schema" + ], + "home_page": "https://github.com/marshmallow-code/marshmallow", + "author": "Steven Loria", + "author_email": "sloria1@gmail.com", + "license": "MIT", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11" + ], + "requires_dist": [ + "packaging (>=17.0)", + "pytest ; extra == 'dev'", + "pytz ; extra == 'dev'", + "simplejson ; extra == 'dev'", + "mypy (==1.4.1) ; extra == 'dev'", + "flake8 (==6.0.0) ; extra == 'dev'", + "flake8-bugbear (==23.7.10) ; extra == 'dev'", + "pre-commit (<4.0,>=2.4) ; extra == 'dev'", + "tox ; extra == 'dev'", + "sphinx (==7.0.1) ; extra == 'docs'", + "sphinx-issues (==3.0.1) ; extra == 'docs'", + "alabaster (==0.7.13) ; extra == 'docs'", + "sphinx-version-warning (==1.1.2) ; extra == 'docs'", + "autodocsumm (==0.2.11) ; extra == 'docs'", + "mypy (==1.4.1) ; extra == 'lint'", + "flake8 (==6.0.0) ; extra == 'lint'", + "flake8-bugbear (==23.7.10) ; extra == 'lint'", + "pre-commit (<4.0,>=2.4) ; extra == 'lint'", + "pytest ; extra == 'tests'", + "pytz ; extra == 'tests'", + "simplejson ; extra == 'tests'" + ], + "requires_python": ">=3.8", + "project_url": [ + "Changelog, https://marshmallow.readthedocs.io/en/latest/changelog.html", + "Issues, https://github.com/marshmallow-code/marshmallow/issues", + "Funding, https://opencollective.com/marshmallow", + "Tidelift, https://tidelift.com/subscription/pkg/pypi-marshmallow?utm_source=pypi-marshmallow&utm_medium=pypi" + ], + "provides_extra": [ + "dev", + "docs", + "lint", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/ca/eb/3f6d90ba82b2dd319c7d3534a90ba3f4bdf2e332e89c2399fdc818051589/marshmallow_oneofschema-3.0.1-py2.py3-none-any.whl", + "archive_info": { + "hash": "sha256=bd29410a9f2f7457a2b428286e2a80ef76b8ddc3701527dc1f935a88914b02f2", + "hashes": { + "sha256": "bd29410a9f2f7457a2b428286e2a80ef76b8ddc3701527dc1f935a88914b02f2" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "marshmallow-oneofschema", + "version": "3.0.1", + "platform": [ + "UNKNOWN" + ], + "summary": "marshmallow multiplexing schema", + "description": "=======================\nmarshmallow-oneofschema\n=======================\n\n.. image:: https://dev.azure.com/sloria/sloria/_apis/build/status/marshmallow-code.marshmallow-oneofschema?branchName=master\n :target: https://dev.azure.com/sloria/sloria/_build/latest?definitionId=13&branchName=master\n :alt: Build Status\n\n.. image:: https://badgen.net/badge/marshmallow/3\n :target: https://marshmallow.readthedocs.io/en/latest/upgrading.html\n :alt: marshmallow 3 compatible\n\nAn extension to marshmallow to support schema (de)multiplexing.\n\nmarshmallow is a fantastic library for serialization and deserialization of data.\nFor more on that project see its `GitHub `_\npage or its `Documentation `_.\n\nThis library adds a special kind of schema that actually multiplexes other schemas\nbased on object type. When serializing values, it uses get_obj_type() method\nto get object type name. Then it uses ``type_schemas`` name-to-Schema mapping\nto get schema for that particular object type, serializes object using that\nschema and adds an extra field with name of object type. Deserialization is reverse.\n\nInstalling\n----------\n\n::\n\n $ pip install marshmallow-oneofschema\n\nExample\n-------\n\nThe code below demonstrates how to set up a polymorphic schema. For the full context check out the tests.\nOnce setup the schema should act like any other schema. If it does not then please file an Issue.\n\n.. code:: python\n\n import marshmallow\n import marshmallow.fields\n from marshmallow_oneofschema import OneOfSchema\n\n\n class Foo:\n def __init__(self, foo):\n self.foo = foo\n\n\n class Bar:\n def __init__(self, bar):\n self.bar = bar\n\n\n class FooSchema(marshmallow.Schema):\n foo = marshmallow.fields.String(required=True)\n\n @marshmallow.post_load\n def make_foo(self, data, **kwargs):\n return Foo(**data)\n\n\n class BarSchema(marshmallow.Schema):\n bar = marshmallow.fields.Integer(required=True)\n\n @marshmallow.post_load\n def make_bar(self, data, **kwargs):\n return Bar(**data)\n\n\n class MyUberSchema(OneOfSchema):\n type_schemas = {\"foo\": FooSchema, \"bar\": BarSchema}\n\n def get_obj_type(self, obj):\n if isinstance(obj, Foo):\n return \"foo\"\n elif isinstance(obj, Bar):\n return \"bar\"\n else:\n raise Exception(\"Unknown object type: {}\".format(obj.__class__.__name__))\n\n\n MyUberSchema().dump([Foo(foo=\"hello\"), Bar(bar=123)], many=True)\n # => [{'type': 'foo', 'foo': 'hello'}, {'type': 'bar', 'bar': 123}]\n\n MyUberSchema().load(\n [{\"type\": \"foo\", \"foo\": \"hello\"}, {\"type\": \"bar\", \"bar\": 123}], many=True\n )\n # => [Foo('hello'), Bar(123)]\n\nBy default get_obj_type() returns obj.__class__.__name__, so you can just reuse that\nto save some typing:\n\n.. code:: python\n\n class MyUberSchema(OneOfSchema):\n type_schemas = {\"Foo\": FooSchema, \"Bar\": BarSchema}\n\nYou can customize type field with `type_field` class property:\n\n.. code:: python\n\n class MyUberSchema(OneOfSchema):\n type_field = \"object_type\"\n type_schemas = {\"Foo\": FooSchema, \"Bar\": BarSchema}\n\n\n MyUberSchema().dump([Foo(foo=\"hello\"), Bar(bar=123)], many=True)\n # => [{'object_type': 'Foo', 'foo': 'hello'}, {'object_type': 'Bar', 'bar': 123}]\n\nYou can use resulting schema everywhere marshmallow.Schema can be used, e.g.\n\n.. code:: python\n\n import marshmallow as m\n import marshmallow.fields as f\n\n\n class MyOtherSchema(m.Schema):\n items = f.List(f.Nested(MyUberSchema))\n\nLicense\n-------\n\nMIT licensed. See the bundled `LICENSE `_ file for more details.\n\n\n", + "keywords": [ + "serialization", + "deserialization", + "json", + "marshal", + "marshalling", + "schema", + "validation", + "multiplexing", + "demultiplexing", + "polymorphic" + ], + "home_page": "https://github.com/marshmallow-code/marshmallow-oneofschema", + "author": "Maxim Kulkin", + "author_email": "maxim.kulkin@gmail.com", + "maintainer": "Steven Loria", + "maintainer_email": "sloria1@gmail.com", + "license": "MIT", + "classifier": [ + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9" + ], + "requires_dist": [ + "marshmallow (<4.0.0,>=3.0.0)", + "pytest ; extra == 'dev'", + "mock ; extra == 'dev'", + "flake8 (==3.9.2) ; extra == 'dev'", + "flake8-bugbear (==21.4.3) ; extra == 'dev'", + "pre-commit (~=2.7) ; extra == 'dev'", + "tox ; extra == 'dev'", + "flake8 (==3.9.2) ; extra == 'lint'", + "flake8-bugbear (==21.4.3) ; extra == 'lint'", + "pre-commit (~=2.7) ; extra == 'lint'", + "pytest ; extra == 'tests'", + "mock ; extra == 'tests'" + ], + "requires_python": ">=3.6", + "provides_extra": [ + "dev", + "lint", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/d1/84/1f4d7393d04f2ae0d4098791d1901a713f45ba70ff6f3c35ff2f7fd81f7b/marshmallow_sqlalchemy-0.26.1-py2.py3-none-any.whl", + "archive_info": { + "hash": "sha256=ba7493eeb8669a3bf00d8f906b657feaa87a740ae9e4ecf829cfd6ddf763d276", + "hashes": { + "sha256": "ba7493eeb8669a3bf00d8f906b657feaa87a740ae9e4ecf829cfd6ddf763d276" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "marshmallow-sqlalchemy", + "version": "0.26.1", + "platform": [ + "UNKNOWN" + ], + "summary": "SQLAlchemy integration with the marshmallow (de)serialization library", + "description": "**********************\nmarshmallow-sqlalchemy\n**********************\n\n|pypi-package| |build-status| |docs| |marshmallow3| |black|\n\nHomepage: https://marshmallow-sqlalchemy.readthedocs.io/\n\n`SQLAlchemy `_ integration with the `marshmallow `_ (de)serialization library.\n\nDeclare your models\n===================\n\n.. code-block:: python\n\n import sqlalchemy as sa\n from sqlalchemy.ext.declarative import declarative_base\n from sqlalchemy.orm import scoped_session, sessionmaker, relationship, backref\n\n engine = sa.create_engine(\"sqlite:///:memory:\")\n session = scoped_session(sessionmaker(bind=engine))\n Base = declarative_base()\n\n\n class Author(Base):\n __tablename__ = \"authors\"\n id = sa.Column(sa.Integer, primary_key=True)\n name = sa.Column(sa.String, nullable=False)\n\n def __repr__(self):\n return \"\".format(self=self)\n\n\n class Book(Base):\n __tablename__ = \"books\"\n id = sa.Column(sa.Integer, primary_key=True)\n title = sa.Column(sa.String)\n author_id = sa.Column(sa.Integer, sa.ForeignKey(\"authors.id\"))\n author = relationship(\"Author\", backref=backref(\"books\"))\n\n\n Base.metadata.create_all(engine)\n\nGenerate marshmallow schemas\n============================\n\n.. code-block:: python\n\n from marshmallow_sqlalchemy import SQLAlchemySchema, auto_field\n\n\n class AuthorSchema(SQLAlchemySchema):\n class Meta:\n model = Author\n load_instance = True # Optional: deserialize to model instances\n\n id = auto_field()\n name = auto_field()\n books = auto_field()\n\n\n class BookSchema(SQLAlchemySchema):\n class Meta:\n model = Book\n load_instance = True\n\n id = auto_field()\n title = auto_field()\n author_id = auto_field()\n\nYou can automatically generate fields for a model's columns using `SQLAlchemyAutoSchema`.\nThe following schema classes are equivalent to the above.\n\n.. code-block:: python\n\n from marshmallow_sqlalchemy import SQLAlchemyAutoSchema\n\n\n class AuthorSchema(SQLAlchemyAutoSchema):\n class Meta:\n model = Author\n include_relationships = True\n load_instance = True\n\n\n class BookSchema(SQLAlchemyAutoSchema):\n class Meta:\n model = Book\n include_fk = True\n load_instance = True\n\n\nMake sure to declare `Models` before instantiating `Schemas`. Otherwise `sqlalchemy.orm.configure_mappers() `_ will run too soon and fail.\n\n(De)serialize your data\n=======================\n\n.. code-block:: python\n\n author = Author(name=\"Chuck Paluhniuk\")\n author_schema = AuthorSchema()\n book = Book(title=\"Fight Club\", author=author)\n session.add(author)\n session.add(book)\n session.commit()\n\n dump_data = author_schema.dump(author)\n print(dump_data)\n # {'id': 1, 'name': 'Chuck Paluhniuk', 'books': [1]}\n\n load_data = author_schema.load(dump_data, session=session)\n print(load_data)\n # \n\nGet it now\n==========\n::\n\n pip install -U marshmallow-sqlalchemy\n\n\nRequires Python >= 3.6, marshmallow >= 3.0.0, and SQLAlchemy >= 1.2.0.\n\nDocumentation\n=============\n\nDocumentation is available at https://marshmallow-sqlalchemy.readthedocs.io/ .\n\nProject Links\n=============\n\n- Docs: https://marshmallow-sqlalchemy.readthedocs.io/\n- Changelog: https://marshmallow-sqlalchemy.readthedocs.io/en/latest/changelog.html\n- Contributing Guidelines: https://marshmallow-sqlalchemy.readthedocs.io/en/latest/contributing.html\n- PyPI: https://pypi.python.org/pypi/marshmallow-sqlalchemy\n- Issues: https://github.com/marshmallow-code/marshmallow-sqlalchemy/issues\n\nLicense\n=======\n\nMIT licensed. See the bundled `LICENSE `_ file for more details.\n\n\n.. |pypi-package| image:: https://badgen.net/pypi/v/marshmallow-sqlalchemy\n :target: https://pypi.org/project/marshmallow-sqlalchemy/\n :alt: Latest version\n.. |build-status| image:: https://dev.azure.com/sloria/sloria/_apis/build/status/marshmallow-code.marshmallow-sqlalchemy?branchName=dev\n :target: https://dev.azure.com/sloria/sloria/_build/latest?definitionId=10&branchName=dev\n :alt: Build status\n.. |docs| image:: https://readthedocs.org/projects/marshmallow-sqlalchemy/badge/\n :target: http://marshmallow-sqlalchemy.readthedocs.io/\n :alt: Documentation\n.. |marshmallow3| image:: https://badgen.net/badge/marshmallow/3\n :target: https://marshmallow.readthedocs.io/en/latest/upgrading.html\n :alt: marshmallow 3 compatible\n.. |black| image:: https://badgen.net/badge/code%20style/black/000\n :target: https://github.com/ambv/black\n :alt: code style: black\n\n\n", + "keywords": [ + "sqlalchemy", + "marshmallow" + ], + "home_page": "https://github.com/marshmallow-code/marshmallow-sqlalchemy", + "author": "Steven Loria", + "author_email": "sloria1@gmail.com", + "license": "MIT", + "classifier": [ + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Natural Language :: English", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9" + ], + "requires_dist": [ + "marshmallow (>=3.0.0)", + "SQLAlchemy (>=1.2.0)", + "pytest ; extra == 'dev'", + "pytest-lazy-fixture ; extra == 'dev'", + "flake8 (==3.9.2) ; extra == 'dev'", + "flake8-bugbear (==21.4.3) ; extra == 'dev'", + "pre-commit (~=2.0) ; extra == 'dev'", + "tox ; extra == 'dev'", + "sphinx (==4.0.2) ; extra == 'docs'", + "alabaster (==0.7.12) ; extra == 'docs'", + "sphinx-issues (==1.2.0) ; extra == 'docs'", + "flake8 (==3.9.2) ; extra == 'lint'", + "flake8-bugbear (==21.4.3) ; extra == 'lint'", + "pre-commit (~=2.0) ; extra == 'lint'", + "pytest ; extra == 'tests'", + "pytest-lazy-fixture ; extra == 'tests'" + ], + "requires_python": ">=3.6", + "project_url": [ + "Changelog, https://marshmallow-sqlalchemy.readthedocs.io/en/latest/changelog.html", + "Issues, https://github.com/marshmallow-code/marshmallow-sqlalchemy/issues", + "Funding, https://opencollective.com/marshmallow" + ], + "provides_extra": [ + "dev", + "docs", + "lint", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/e5/3c/fe85f19699a7b40c8f9ce8ecee7e269b9b3c94099306df6f9891bdefeedd/mdit_py_plugins-0.4.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9", + "hashes": { + "sha256": "b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "mdit-py-plugins", + "version": "0.4.0", + "summary": "Collection of plugins for markdown-it-py", + "description": "# mdit-py-plugins\n\n[![Github-CI][github-ci]][github-link]\n[![Coverage Status][codecov-badge]][codecov-link]\n[![PyPI][pypi-badge]][pypi-link]\n[![Conda][conda-badge]][conda-link]\n[![Code style: black][black-badge]][black-link]\n\nCollection of core plugins for [markdown-it-py](https://github.com/executablebooks/markdown-it-py).\n\n[github-ci]: https://github.com/executablebooks/mdit-py-plugins/workflows/continuous-integration/badge.svg\n[github-link]: https://github.com/executablebooks/mdit-py-plugins\n[pypi-badge]: https://img.shields.io/pypi/v/mdit-py-plugins.svg\n[pypi-link]: https://pypi.org/project/mdit-py-plugins\n[conda-badge]: https://anaconda.org/conda-forge/mdit-py-plugins/badges/version.svg\n[conda-link]: https://anaconda.org/conda-forge/mdit-py-plugins\n[codecov-badge]: https://codecov.io/gh/executablebooks/mdit-py-plugins/branch/master/graph/badge.svg\n[codecov-link]: https://codecov.io/gh/executablebooks/mdit-py-plugins\n[black-badge]: https://img.shields.io/badge/code%20style-black-000000.svg\n[black-link]: https://github.com/ambv/black\n[install-badge]: https://img.shields.io/pypi/dw/mdit-py-plugins?label=pypi%20installs\n[install-link]: https://pypistats.org/packages/mdit-py-plugins\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "markdown", + "markdown-it", + "lexer", + "parser", + "development" + ], + "author_email": "Chris Sewell ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Text Processing :: Markup" + ], + "requires_dist": [ + "markdown-it-py>=1.0.0,<4.0.0", + "pre-commit ; extra == \"code_style\"", + "myst-parser ; extra == \"rtd\"", + "sphinx-book-theme ; extra == \"rtd\"", + "coverage ; extra == \"testing\"", + "pytest ; extra == \"testing\"", + "pytest-cov ; extra == \"testing\"", + "pytest-regressions ; extra == \"testing\"" + ], + "requires_python": ">=3.8", + "project_url": [ + "Documentation, https://mdit-py-plugins.readthedocs.io", + "Homepage, https://github.com/executablebooks/mdit-py-plugins" + ], + "provides_extra": [ + "code_style", + "rtd", + "testing" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", + "archive_info": { + "hash": "sha256=84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", + "hashes": { + "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "mdurl", + "version": "0.1.2", + "summary": "Markdown URL utilities", + "description": "# mdurl\n\n[![Build Status](https://github.com/executablebooks/mdurl/workflows/Tests/badge.svg?branch=master)](https://github.com/executablebooks/mdurl/actions?query=workflow%3ATests+branch%3Amaster+event%3Apush)\n[![codecov.io](https://codecov.io/gh/executablebooks/mdurl/branch/master/graph/badge.svg)](https://codecov.io/gh/executablebooks/mdurl)\n[![PyPI version](https://img.shields.io/pypi/v/mdurl)](https://pypi.org/project/mdurl)\n\nThis is a Python port of the JavaScript [mdurl](https://www.npmjs.com/package/mdurl) package.\nSee the [upstream README.md file](https://github.com/markdown-it/mdurl/blob/master/README.md) for API documentation.\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "markdown", + "commonmark" + ], + "author_email": "Taneli Hukkinen ", + "classifier": [ + "License :: OSI Approved :: MIT License", + "Operating System :: MacOS", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Software Development :: Libraries :: Python Modules", + "Typing :: Typed" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/executablebooks/mdurl" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/41/01/85c059d495679bb9ae50be223d6bd56d94bd050f51b25deffde2e6437463/opentelemetry_api-1.20.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=982b76036fec0fdaf490ae3dfd9f28c81442a33414f737abc687a32758cdcba5", + "hashes": { + "sha256": "982b76036fec0fdaf490ae3dfd9f28c81442a33414f737abc687a32758cdcba5" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "opentelemetry-api", + "version": "1.20.0", + "summary": "OpenTelemetry Python API", + "description": "OpenTelemetry Python API\n============================================================================\n\n|pypi|\n\n.. |pypi| image:: https://badge.fury.io/py/opentelemetry-api.svg\n :target: https://pypi.org/project/opentelemetry-api/\n\nInstallation\n------------\n\n::\n\n pip install opentelemetry-api\n\nReferences\n----------\n\n* `OpenTelemetry Project `_\n", + "description_content_type": "text/x-rst", + "author_email": "OpenTelemetry Authors ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Typing :: Typed" + ], + "requires_dist": [ + "deprecated>=1.2.6", + "importlib-metadata<7.0,>=6.0" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/open-telemetry/opentelemetry-python/tree/main/opentelemetry-api" + ], + "provides_extra": [ + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/04/ba/4e22b13ff0ebaa30ea6e1b568463dc3fa53ed7076b2fc3de263682b69a5d/opentelemetry_exporter_otlp-1.20.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=3b4d47726da83fef84467bdf96da4f8f3d1a61b35db3c16354c391ce8e9decf6", + "hashes": { + "sha256": "3b4d47726da83fef84467bdf96da4f8f3d1a61b35db3c16354c391ce8e9decf6" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "opentelemetry-exporter-otlp", + "version": "1.20.0", + "summary": "OpenTelemetry Collector Exporters", + "description": "OpenTelemetry Collector Exporters\n=================================\n\n|pypi|\n\n.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-otlp.svg\n :target: https://pypi.org/project/opentelemetry-exporter-otlp/\n\nThis library is provided as a convenience to install all supported OpenTelemetry Collector Exporters. Currently it installs:\n\n* opentelemetry-exporter-otlp-proto-grpc\n* opentelemetry-exporter-otlp-proto-http\n\nIn the future, additional packages will be available:\n* opentelemetry-exporter-otlp-json-http\n\nTo avoid unnecessary dependencies, users should install the specific package once they've determined their\npreferred serialization and protocol method.\n\nInstallation\n------------\n\n::\n\n pip install opentelemetry-exporter-otlp\n\n\nReferences\n----------\n\n* `OpenTelemetry Collector Exporter `_\n* `OpenTelemetry Collector `_\n* `OpenTelemetry `_\n* `OpenTelemetry Protocol Specification `_\n", + "description_content_type": "text/x-rst", + "author_email": "OpenTelemetry Authors ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Typing :: Typed" + ], + "requires_dist": [ + "opentelemetry-exporter-otlp-proto-grpc==1.20.0", + "opentelemetry-exporter-otlp-proto-http==1.20.0" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/open-telemetry/opentelemetry-python/tree/main/exporter/opentelemetry-exporter-otlp" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/89/13/1c6f7f1d81839ecfd4b61f8648c3d1843362e9c927a9b4e59fe4c29cec14/opentelemetry_exporter_otlp_proto_common-1.20.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=dd63209b40702636ab6ae76a06b401b646ad7b008a906ecb41222d4af24fbdef", + "hashes": { + "sha256": "dd63209b40702636ab6ae76a06b401b646ad7b008a906ecb41222d4af24fbdef" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "opentelemetry-exporter-otlp-proto-common", + "version": "1.20.0", + "summary": "OpenTelemetry Protobuf encoding", + "description": "OpenTelemetry Protobuf Encoding\n===============================\n\n|pypi|\n\n.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-otlp-proto-common.svg\n :target: https://pypi.org/project/opentelemetry-exporter-otlp-proto-common/\n\nThis library is provided as a convenience to encode to Protobuf. Currently used by:\n\n* opentelemetry-exporter-otlp-proto-grpc\n* opentelemetry-exporter-otlp-proto-http\n\n\nInstallation\n------------\n\n::\n\n pip install opentelemetry-exporter-otlp-proto-common\n\n\nReferences\n----------\n\n* `OpenTelemetry `_\n* `OpenTelemetry Protocol Specification `_\n", + "description_content_type": "text/x-rst", + "author_email": "OpenTelemetry Authors ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11" + ], + "requires_dist": [ + "backoff<2.0.0,>=1.10.0; python_version < '3.7'", + "backoff<3.0.0,>=1.10.0; python_version >= '3.7'", + "opentelemetry-proto==1.20.0" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/open-telemetry/opentelemetry-python/tree/main/exporter/opentelemetry-exporter-otlp-proto-common" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/9e/a7/ce3ba7618887c08835c2f9c2fcfc4fcc46d9af7b62e2d2c9ea80d6604cf7/opentelemetry_exporter_otlp_proto_grpc-1.20.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=7c3f066065891b56348ba2c7f9df6ec635a712841cae0a36f2f6a81642ae7dec", + "hashes": { + "sha256": "7c3f066065891b56348ba2c7f9df6ec635a712841cae0a36f2f6a81642ae7dec" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "opentelemetry-exporter-otlp-proto-grpc", + "version": "1.20.0", + "summary": "OpenTelemetry Collector Protobuf over gRPC Exporter", + "description": "OpenTelemetry Collector Protobuf over gRPC Exporter\n===================================================\n\n|pypi|\n\n.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-otlp-proto-grpc.svg\n :target: https://pypi.org/project/opentelemetry-exporter-otlp-proto-grpc/\n\nThis library allows to export data to the OpenTelemetry Collector using the OpenTelemetry Protocol using Protobuf over gRPC.\n\nInstallation\n------------\n\n::\n\n pip install opentelemetry-exporter-otlp-proto-grpc\n\n\nReferences\n----------\n\n* `OpenTelemetry Collector Exporter `_\n* `OpenTelemetry Collector `_\n* `OpenTelemetry `_\n* `OpenTelemetry Protocol Specification `_\n", + "description_content_type": "text/x-rst", + "author_email": "OpenTelemetry Authors ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11" + ], + "requires_dist": [ + "backoff<2.0.0,>=1.10.0; python_version < '3.7'", + "backoff<3.0.0,>=1.10.0; python_version >= '3.7'", + "deprecated>=1.2.6", + "googleapis-common-protos~=1.52", + "grpcio<2.0.0,>=1.0.0", + "opentelemetry-api~=1.15", + "opentelemetry-exporter-otlp-proto-common==1.20.0", + "opentelemetry-proto==1.20.0", + "opentelemetry-sdk~=1.20.0", + "pytest-grpc; extra == 'test'" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/open-telemetry/opentelemetry-python/tree/main/exporter/opentelemetry-exporter-otlp-proto-grpc" + ], + "provides_extra": [ + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/d8/05/764b6ff9a70d9c5f749cea38072f830f577b0e01e144522522258924b626/opentelemetry_exporter_otlp_proto_http-1.20.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=03f6e768ad25f1c3a9586e8c695db4a4adf978f8546a1285fa962e16bfbb0bd6", + "hashes": { + "sha256": "03f6e768ad25f1c3a9586e8c695db4a4adf978f8546a1285fa962e16bfbb0bd6" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "opentelemetry-exporter-otlp-proto-http", + "version": "1.20.0", + "summary": "OpenTelemetry Collector Protobuf over HTTP Exporter", + "description": "OpenTelemetry Collector Protobuf over HTTP Exporter\n===================================================\n\n|pypi|\n\n.. |pypi| image:: https://badge.fury.io/py/opentelemetry-exporter-otlp-proto-http.svg\n :target: https://pypi.org/project/opentelemetry-exporter-otlp-proto-http/\n\nThis library allows to export data to the OpenTelemetry Collector using the OpenTelemetry Protocol using Protobuf over HTTP.\n\nInstallation\n------------\n\n::\n\n pip install opentelemetry-exporter-otlp-proto-http\n\n\nReferences\n----------\n\n* `OpenTelemetry Collector Exporter `_\n* `OpenTelemetry Collector `_\n* `OpenTelemetry `_\n* `OpenTelemetry Protocol Specification `_\n", + "description_content_type": "text/x-rst", + "author_email": "OpenTelemetry Authors ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11" + ], + "requires_dist": [ + "backoff<2.0.0,>=1.10.0; python_version < '3.7'", + "backoff<3.0.0,>=1.10.0; python_version >= '3.7'", + "deprecated>=1.2.6", + "googleapis-common-protos~=1.52", + "opentelemetry-api~=1.15", + "opentelemetry-exporter-otlp-proto-common==1.20.0", + "opentelemetry-proto==1.20.0", + "opentelemetry-sdk~=1.20.0", + "requests~=2.7", + "responses==0.22.0; extra == 'test'" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/open-telemetry/opentelemetry-python/tree/main/exporter/opentelemetry-exporter-otlp-proto-http" + ], + "provides_extra": [ + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/68/8b/90f0672651e80fca84eb4952ae48b6d5776b2329c6d7bf70d937535719d2/opentelemetry_proto-1.20.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=512c3d2c6864fb7547a69577c3907348e6c985b7a204533563cb4c4c5046203b", + "hashes": { + "sha256": "512c3d2c6864fb7547a69577c3907348e6c985b7a204533563cb4c4c5046203b" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "opentelemetry-proto", + "version": "1.20.0", + "summary": "OpenTelemetry Python Proto", + "description": "OpenTelemetry Python Proto\n==========================\n\n|pypi|\n\n.. |pypi| image:: https://badge.fury.io/py/opentelemetry-proto.svg\n :target: https://pypi.org/project/opentelemetry-proto/\n\nThis library contains the generated code for OpenTelemetry protobuf data model. The code in the current\npackage was generated using the v0.17.0 release_ of opentelemetry-proto.\n\n.. _release: https://github.com/open-telemetry/opentelemetry-proto/releases/tag/v0.17.0\n\nInstallation\n------------\n\n::\n\n pip install opentelemetry-proto\n\nCode Generation\n---------------\n\nThese files were generated automatically from code in opentelemetry-proto_.\nTo regenerate the code, run ``../scripts/proto_codegen.sh``.\n\nTo build against a new release or specific commit of opentelemetry-proto_,\nupdate the ``PROTO_REPO_BRANCH_OR_COMMIT`` variable in\n``../scripts/proto_codegen.sh``. Then run the script and commit the changes\nas well as any fixes needed in the OTLP exporter.\n\n.. _opentelemetry-proto: https://github.com/open-telemetry/opentelemetry-proto\n\n\nReferences\n----------\n\n* `OpenTelemetry Project `_\n* `OpenTelemetry Proto `_\n* `proto_codegen.sh script `_\n", + "description_content_type": "text/x-rst", + "author_email": "OpenTelemetry Authors ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11" + ], + "requires_dist": [ + "protobuf<5.0,>=3.19" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/open-telemetry/opentelemetry-python/tree/main/opentelemetry-proto" + ], + "provides_extra": [ + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/fa/0a/ffb64bc8177fef5fdb97e4e5dcce9924184090620b3fc97b9c656e06b2e8/opentelemetry_sdk-1.20.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=f2230c276ff4c63ea09b3cb2e2ac6b1265f90af64e8d16bbf275c81a9ce8e804", + "hashes": { + "sha256": "f2230c276ff4c63ea09b3cb2e2ac6b1265f90af64e8d16bbf275c81a9ce8e804" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "opentelemetry-sdk", + "version": "1.20.0", + "summary": "OpenTelemetry Python SDK", + "description": "OpenTelemetry Python SDK\n============================================================================\n\n|pypi|\n\n.. |pypi| image:: https://badge.fury.io/py/opentelemetry-sdk.svg\n :target: https://pypi.org/project/opentelemetry-sdk/\n\nInstallation\n------------\n\n::\n\n pip install opentelemetry-sdk\n\nReferences\n----------\n\n* `OpenTelemetry Project `_\n", + "description_content_type": "text/x-rst", + "author_email": "OpenTelemetry Authors ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Typing :: Typed" + ], + "requires_dist": [ + "opentelemetry-api==1.20.0", + "opentelemetry-semantic-conventions==0.41b0", + "typing-extensions>=3.7.4" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/open-telemetry/opentelemetry-python/tree/main/opentelemetry-sdk" + ], + "provides_extra": [ + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/aa/78/7a7508d16d32f92d6b206b2e367c5f044b3e652e7f385bbf17f49baad189/opentelemetry_semantic_conventions-0.41b0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=45404391ed9e50998183a4925ad1b497c01c143f06500c3b9c3d0013492bb0f2", + "hashes": { + "sha256": "45404391ed9e50998183a4925ad1b497c01c143f06500c3b9c3d0013492bb0f2" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "opentelemetry-semantic-conventions", + "version": "0.41b0", + "summary": "OpenTelemetry Semantic Conventions", + "description": "OpenTelemetry Semantic Conventions\n==================================\n\n|pypi|\n\n.. |pypi| image:: https://badge.fury.io/py/opentelemetry-semantic-conventions.svg\n :target: https://pypi.org/project/opentelemetry-semantic-conventions/\n\nThis library contains generated code for the semantic conventions defined by the OpenTelemetry specification.\n\nInstallation\n------------\n\n::\n\n pip install opentelemetry-semantic-conventions\n\nCode Generation\n---------------\n\nThese files were generated automatically from code in semconv_.\nTo regenerate the code, run ``../scripts/semconv/generate.sh``.\n\nTo build against a new release or specific commit of opentelemetry-specification_,\nupdate the ``SPEC_VERSION`` variable in\n``../scripts/semconv/generate.sh``. Then run the script and commit the changes.\n\n.. _opentelemetry-specification: https://github.com/open-telemetry/opentelemetry-specification\n.. _semconv: https://github.com/open-telemetry/opentelemetry-python/tree/main/scripts/semconv\n\n\nReferences\n----------\n\n* `OpenTelemetry Project `_\n* `OpenTelemetry Semantic Conventions YAML Definitions `_\n* `generate.sh script `_\n", + "description_content_type": "text/x-rst", + "author_email": "OpenTelemetry Authors ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/open-telemetry/opentelemetry-python/tree/main/opentelemetry-semantic-conventions" + ], + "provides_extra": [ + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/33/55/af02708f230eb77084a299d7b08175cff006dea4f2721074b92cdb0296c0/ordered_set-4.1.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562", + "hashes": { + "sha256": "046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "ordered-set", + "version": "4.1.0", + "summary": "An OrderedSet is a custom MutableSet that remembers its order, so that every", + "description": "[![Pypi](https://img.shields.io/pypi/v/ordered-set.svg)](https://pypi.python.org/pypi/ordered-set)\n\nAn OrderedSet is a mutable data structure that is a hybrid of a list and a set.\nIt remembers the order of its entries, and every entry has an index number that\ncan be looked up.\n\n## Installation\n\n`ordered_set` is available on PyPI and packaged as a wheel. You can list it\nas a dependency of your project, in whatever form that takes.\n\nTo install it into your current Python environment:\n\n pip install ordered-set\n\nTo install the code for development, after checking out the repository:\n\n pip install flit\n flit install\n\n## Usage examples\n\nAn OrderedSet is created and used like a set:\n\n >>> from ordered_set import OrderedSet\n\n >>> letters = OrderedSet('abracadabra')\n\n >>> letters\n OrderedSet(['a', 'b', 'r', 'c', 'd'])\n\n >>> 'r' in letters\n True\n\nIt is efficient to find the index of an entry in an OrderedSet, or find an\nentry by its index. To help with this use case, the `.add()` method returns\nthe index of the added item, whether it was already in the set or not.\n\n >>> letters.index('r')\n 2\n\n >>> letters[2]\n 'r'\n\n >>> letters.add('r')\n 2\n\n >>> letters.add('x')\n 5\n\nOrderedSets implement the union (`|`), intersection (`&`), and difference (`-`)\noperators like sets do.\n\n >>> letters |= OrderedSet('shazam')\n\n >>> letters\n OrderedSet(['a', 'b', 'r', 'c', 'd', 'x', 's', 'h', 'z', 'm'])\n\n >>> letters & set('aeiou')\n OrderedSet(['a'])\n\n >>> letters -= 'abcd'\n\n >>> letters\n OrderedSet(['r', 'x', 's', 'h', 'z', 'm'])\n\nThe `__getitem__()` and `index()` methods have been extended to accept any\niterable except a string, returning a list, to perform NumPy-like \"fancy\nindexing\".\n\n >>> letters = OrderedSet('abracadabra')\n\n >>> letters[[0, 2, 3]]\n ['a', 'r', 'c']\n\n >>> letters.index(['a', 'r', 'c'])\n [0, 2, 3]\n\nOrderedSet implements `__getstate__` and `__setstate__` so it can be pickled,\nand implements the abstract base classes `collections.MutableSet` and\n`collections.Sequence`.\n\nOrderedSet can be used as a generic collection type, similar to the collections\nin the `typing` module like List, Dict, and Set. For example, you can annotate\na variable as having the type `OrderedSet[str]` or `OrderedSet[Tuple[int,\nstr]]`.\n\n\n## OrderedSet in data science applications\n\nAn OrderedSet can be used as a bi-directional mapping between a sparse\nvocabulary and dense index numbers. As of version 3.1, it accepts NumPy arrays\nof index numbers as well as lists.\n\nThis combination of features makes OrderedSet a simple implementation of many\nof the things that `pandas.Index` is used for, and many of its operations are\nfaster than the equivalent pandas operations.\n\nFor further compatibility with pandas.Index, `get_loc` (the pandas method for\nlooking up a single index) and `get_indexer` (the pandas method for fancy\nindexing in reverse) are both aliases for `index` (which handles both cases\nin OrderedSet).\n\n\n## Authors\n\nOrderedSet was implemented by Elia Robyn Lake (maiden name: Robyn Speer).\nJon Crall contributed changes and tests to make it fit the Python set API.\nRoman Inflianskas added the original type annotations.\n\n\n## Comparisons\n\nThe original implementation of OrderedSet was a [recipe posted to ActiveState\nRecipes][recipe] by Raymond Hettiger, released under the MIT license.\n\n[recipe]: https://code.activestate.com/recipes/576694-orderedset/\n\nHettiger's implementation kept its content in a doubly-linked list referenced by a\ndict. As a result, looking up an item by its index was an O(N) operation, while\ndeletion was O(1).\n\nThis version makes different trade-offs for the sake of efficient lookups. Its\ncontent is a standard Python list instead of a doubly-linked list. This\nprovides O(1) lookups by index at the expense of O(N) deletion, as well as\nslightly faster iteration.\n\nIn Python 3.6 and later, the built-in `dict` type is inherently ordered. If you\nignore the dictionary values, that also gives you a simple ordered set, with\nfast O(1) insertion, deletion, iteration and membership testing. However, `dict`\ndoes not provide the list-like random access features of OrderedSet. You\nwould have to convert it to a list in O(N) to look up the index of an entry or\nlook up an entry by its index.\n\n", + "description_content_type": "text/markdown", + "author_email": "Elia Robyn Lake ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "pytest ; extra == \"dev\"", + "black ; extra == \"dev\"", + "mypy ; extra == \"dev\"" + ], + "requires_python": ">=3.7", + "project_url": [ + "Home, https://github.com/rspeer/ordered-set" + ], + "provides_extra": [ + "dev" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/ec/1a/610693ac4ee14fcdf2d9bf3c493370e4f2ef7ae2e19217d7a237ff42367d/packaging-23.2-py3-none-any.whl", + "archive_info": { + "hash": "sha256=8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7", + "hashes": { + "sha256": "8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "packaging", + "version": "23.2", + "summary": "Core utilities for Python packages", + "description": "packaging\n=========\n\n.. start-intro\n\nReusable core utilities for various Python Packaging\n`interoperability specifications `_.\n\nThis library provides utilities that implement the interoperability\nspecifications which have clearly one correct behaviour (eg: :pep:`440`)\nor benefit greatly from having a single shared implementation (eg: :pep:`425`).\n\n.. end-intro\n\nThe ``packaging`` project includes the following: version handling, specifiers,\nmarkers, requirements, tags, utilities.\n\nDocumentation\n-------------\n\nThe `documentation`_ provides information and the API for the following:\n\n- Version Handling\n- Specifiers\n- Markers\n- Requirements\n- Tags\n- Utilities\n\nInstallation\n------------\n\nUse ``pip`` to install these utilities::\n\n pip install packaging\n\nThe ``packaging`` library uses calendar-based versioning (``YY.N``).\n\nDiscussion\n----------\n\nIf you run into bugs, you can file them in our `issue tracker`_.\n\nYou can also join ``#pypa`` on Freenode to ask questions or get involved.\n\n\n.. _`documentation`: https://packaging.pypa.io/\n.. _`issue tracker`: https://github.com/pypa/packaging/issues\n\n\nCode of Conduct\n---------------\n\nEveryone interacting in the packaging project's codebases, issue trackers, chat\nrooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.\n\n.. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md\n\nContributing\n------------\n\nThe ``CONTRIBUTING.rst`` file outlines how to contribute to this project as\nwell as how to report a potential security issue. The documentation for this\nproject also covers information about `project development`_ and `security`_.\n\n.. _`project development`: https://packaging.pypa.io/en/latest/development/\n.. _`security`: https://packaging.pypa.io/en/latest/security/\n\nProject History\n---------------\n\nPlease review the ``CHANGELOG.rst`` file or the `Changelog documentation`_ for\nrecent changes and project history.\n\n.. _`Changelog documentation`: https://packaging.pypa.io/en/latest/changelog/\n\n", + "description_content_type": "text/x-rst", + "author_email": "Donald Stufft ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "License :: OSI Approved :: BSD License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Typing :: Typed" + ], + "requires_python": ">=3.7", + "project_url": [ + "Documentation, https://packaging.pypa.io/", + "Source, https://github.com/pypa/packaging" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/3c/29/c07c3a976dbe37c56e381e058c11e8738cb3a0416fc842a310461f8bb695/pathspec-0.10.3-py3-none-any.whl", + "archive_info": { + "hash": "sha256=3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6", + "hashes": { + "sha256": "3c95343af8b756205e2aba76e843ba9520a24dd84f68c22b9f93251507509dd6" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "pathspec", + "version": "0.10.3", + "summary": "Utility library for gitignore style pattern matching of file paths.", + "description": "\nPathSpec\n========\n\n*pathspec* is a utility library for pattern matching of file paths. So\nfar this only includes Git's wildmatch pattern matching which itself is\nderived from Rsync's wildmatch. Git uses wildmatch for its `gitignore`_\nfiles.\n\n.. _`gitignore`: http://git-scm.com/docs/gitignore\n\n\nTutorial\n--------\n\nSay you have a \"Projects\" directory and you want to back it up, but only\ncertain files, and ignore others depending on certain conditions::\n\n\t>>> import pathspec\n\t>>> # The gitignore-style patterns for files to select, but we're including\n\t>>> # instead of ignoring.\n\t>>> spec_text = \"\"\"\n\t...\n\t... # This is a comment because the line begins with a hash: \"#\"\n\t...\n\t... # Include several project directories (and all descendants) relative to\n\t... # the current directory. To reference a directory you must end with a\n\t... # slash: \"/\"\n\t... /project-a/\n\t... /project-b/\n\t... /project-c/\n\t...\n\t... # Patterns can be negated by prefixing with exclamation mark: \"!\"\n\t...\n\t... # Ignore temporary files beginning or ending with \"~\" and ending with\n\t... # \".swp\".\n\t... !~*\n\t... !*~\n\t... !*.swp\n\t...\n\t... # These are python projects so ignore compiled python files from\n\t... # testing.\n\t... !*.pyc\n\t...\n\t... # Ignore the build directories but only directly under the project\n\t... # directories.\n\t... !/*/build/\n\t...\n\t... \"\"\"\n\nWe want to use the ``GitWildMatchPattern`` class to compile our patterns. The\n``PathSpec`` class provides an interface around pattern implementations::\n\n\t>>> spec = pathspec.PathSpec.from_lines(pathspec.patterns.GitWildMatchPattern, spec_text.splitlines())\n\nThat may be a mouthful but it allows for additional patterns to be implemented\nin the future without them having to deal with anything but matching the paths\nsent to them. ``GitWildMatchPattern`` is the implementation of the actual\npattern which internally gets converted into a regular expression. ``PathSpec``\nis a simple wrapper around a list of compiled patterns.\n\nTo make things simpler, we can use the registered name for a pattern class\ninstead of always having to provide a reference to the class itself. The\n``GitWildMatchPattern`` class is registered as **gitwildmatch**::\n\n\t>>> spec = pathspec.PathSpec.from_lines('gitwildmatch', spec_text.splitlines())\n\nIf we wanted to manually compile the patterns we can just do the following::\n\n\t>>> patterns = map(pathspec.patterns.GitWildMatchPattern, spec_text.splitlines())\n\t>>> spec = PathSpec(patterns)\n\n``PathSpec.from_lines()`` is simply a class method which does just that.\n\nIf you want to load the patterns from file, you can pass the file instance\ndirectly as well::\n\n\t>>> with open('patterns.list', 'r') as fh:\n\t>>> spec = pathspec.PathSpec.from_lines('gitwildmatch', fh)\n\nYou can perform matching on a whole directory tree with::\n\n\t>>> matches = spec.match_tree('path/to/directory')\n\nOr you can perform matching on a specific set of file paths with::\n\n\t>>> matches = spec.match_files(file_paths)\n\nOr check to see if an individual file matches::\n\n\t>>> is_matched = spec.match_file(file_path)\n\nThere is a specialized class, ``pathspec.GitIgnoreSpec``, which more closely\nimplements the behavior of **gitignore**. This uses ``GitWildMatchPattern``\npattern by default and handles some edge cases differently from the generic\n``PathSpec`` class. ``GitIgnoreSpec`` can be used without specifying the pattern\nfactory::\n\n\t>>> spec = pathspec.GitIgnoreSpec.from_lines(spec_text.splitlines())\n\n\nLicense\n-------\n\n*pathspec* is licensed under the `Mozilla Public License Version 2.0`_. See\n`LICENSE`_ or the `FAQ`_ for more information.\n\nIn summary, you may use *pathspec* with any closed or open source project\nwithout affecting the license of the larger work so long as you:\n\n- give credit where credit is due,\n\n- and release any custom changes made to *pathspec*.\n\n.. _`Mozilla Public License Version 2.0`: http://www.mozilla.org/MPL/2.0\n.. _`LICENSE`: LICENSE\n.. _`FAQ`: http://www.mozilla.org/MPL/2.0/FAQ.html\n\n\nSource\n------\n\nThe source code for *pathspec* is available from the GitHub repo\n`cpburnz/python-pathspec`_.\n\n.. _`cpburnz/python-pathspec`: https://github.com/cpburnz/python-pathspec\n\n\nInstallation\n------------\n\n*pathspec* is available for install through `PyPI`_::\n\n\tpip install pathspec\n\n*pathspec* can also be built from source. The following packages will be\nrequired:\n\n- `build`_ (>=0.6.0)\n- `setuptools`_ (>=40.8.0)\n\n*pathspec* can then be built and installed with::\n\n\tpython -m build\n\tpip install dist/pathspec-*-py3-none-any.whl\n\n.. _`PyPI`: http://pypi.python.org/pypi/pathspec\n.. _`build`: https://pypi.org/project/build/\n.. _`setuptools`: https://pypi.org/project/setuptools/\n\n\nDocumentation\n-------------\n\nDocumentation for *pathspec* is available on `Read the Docs`_.\n\n.. _`Read the Docs`: https://python-path-specification.readthedocs.io\n\n\nOther Languages\n---------------\n\nThe related project `pathspec-ruby`_ (by *highb*) provides a similar library as\na `Ruby gem`_.\n\n.. _`pathspec-ruby`: https://github.com/highb/pathspec-ruby\n.. _`Ruby gem`: https://rubygems.org/gems/pathspec\n\n\n\nChange History\n==============\n\n\n0.10.3 (2022-12-09)\n-------------------\n\nNew features:\n\n- Added utility function `pathspec.util.append_dir_sep()` to aid in distinguishing between directories and files on the file-system. See `Issue #65`_.\n\nBug fixes:\n\n- `Issue #66`_/`Pull #67`_: Package not marked as py.typed.\n- `Issue #68`_: Exports are considered private.\n- `Issue #70`_/`Pull #71`_: 'Self' string literal type is Unknown in pyright.\n\nImprovements:\n\n- `Issue #65`_: Checking directories via match_file() does not work on Path objects.\n\n\n.. _`Issue #65`: https://github.com/cpburnz/python-pathspec/issues/65\n.. _`Issue #66`: https://github.com/cpburnz/python-pathspec/issues/66\n.. _`Pull #67`: https://github.com/cpburnz/python-pathspec/pull/67\n.. _`Issue #68`: https://github.com/cpburnz/python-pathspec/issues/68\n.. _`Issue #70`: https://github.com/cpburnz/python-pathspec/issues/70\n.. _`Pull #71`: https://github.com/cpburnz/python-pathspec/pull/71\n\n\n0.10.2 (2022-11-12)\n-------------------\n\nBug fixes:\n\n- Fix failing tests on Windows.\n- Type hint on *root* parameter on `pathspec.pathspec.PathSpec.match_tree_entries()`.\n- Type hint on *root* parameter on `pathspec.pathspec.PathSpec.match_tree_files()`.\n- Type hint on *root* parameter on `pathspec.util.iter_tree_entries()`.\n- Type hint on *root* parameter on `pathspec.util.iter_tree_files()`.\n- `Issue #64`_: IndexError with my .gitignore file when trying to build a Python package.\n\nImprovements:\n\n- `Pull #58`_: CI: add GitHub Actions test workflow.\n\n\n.. _`Pull #58`: https://github.com/cpburnz/python-pathspec/pull/58\n.. _`Issue #64`: https://github.com/cpburnz/python-pathspec/issues/64\n\n\n0.10.1 (2022-09-02)\n-------------------\n\nBug fixes:\n\n- Fix documentation on `pathspec.pattern.RegexPattern.match_file()`.\n- `Pull #60`_: Remove redundant wheel dep from pyproject.toml.\n- `Issue #61`_: Dist failure for Fedora, CentOS, EPEL.\n- `Issue #62`_: Since version 0.10.0 pure wildcard does not work in some cases.\n\nImprovements:\n\n- Restore support for legacy installations using `setup.py`. See `Issue #61`_.\n\n\n.. _`Pull #60`: https://github.com/cpburnz/python-pathspec/pull/60\n.. _`Issue #61`: https://github.com/cpburnz/python-pathspec/issues/61\n.. _`Issue #62`: https://github.com/cpburnz/python-pathspec/issues/62\n\n\n0.10.0 (2022-08-30)\n-------------------\n\nMajor changes:\n\n- Dropped support of EOL Python 2.7, 3.5, 3.6. See `Issue #47`_.\n- The *gitwildmatch* pattern `dir/*` is now handled the same as `dir/`. This means `dir/*` will now match all descendants rather than only direct children. See `Issue #19`_.\n- Added `pathspec.GitIgnoreSpec` class (see new features).\n- Changed build system to `pyproject.toml`_ and build backend to `setuptools.build_meta`_ which may have unforeseen consequences.\n- Renamed GitHub project from `python-path-specification`_ to `python-pathspec`_. See `Issue #35`_.\n\nAPI changes:\n\n- Deprecated: `pathspec.util.match_files()` is an old function no longer used.\n- Deprecated: `pathspec.match_files()` is an old function no longer used.\n- Deprecated: `pathspec.util.normalize_files()` is no longer used.\n- Deprecated: `pathspec.util.iter_tree()` is an alias for `pathspec.util.iter_tree_files()`.\n- Deprecated: `pathspec.iter_tree()` is an alias for `pathspec.util.iter_tree_files()`.\n-\tDeprecated: `pathspec.pattern.Pattern.match()` is no longer used. Use or implement\n\t`pathspec.pattern.Pattern.match_file()`.\n\nNew features:\n\n- Added class `pathspec.gitignore.GitIgnoreSpec` (with alias `pathspec.GitIgnoreSpec`) to implement *gitignore* behavior not possible with standard `PathSpec` class. The particular *gitignore* behavior implemented is prioritizing patterns matching the file directly over matching an ancestor directory.\n\nBug fixes:\n\n- `Issue #19`_: Files inside an ignored sub-directory are not matched.\n- `Issue #41`_: Incorrectly (?) matches files inside directories that do match.\n- `Pull #51`_: Refactor deprecated unittest aliases for Python 3.11 compatibility.\n- `Issue #53`_: Symlink pathspec_meta.py breaks Windows.\n- `Issue #54`_: test_util.py uses os.symlink which can fail on Windows.\n- `Issue #55`_: Backslashes at start of pattern not handled correctly.\n- `Pull #56`_: pyproject.toml: include subpackages in setuptools config\n- `Issue #57`_: `!` doesn't exclude files in directories if the pattern doesn't have a trailing slash.\n\nImprovements:\n\n- Support Python 3.10, 3.11.\n- Modernize code to Python 3.7.\n- `Issue #52`_: match_files() is not a pure generator function, and it impacts tree_*() gravely.\n\n\n.. _`python-path-specification`: https://github.com/cpburnz/python-path-specification\n.. _`python-pathspec`: https://github.com/cpburnz/python-pathspec\n.. _`pyproject.toml`: https://pip.pypa.io/en/stable/reference/build-system/pyproject-toml/\n.. _`setuptools.build_meta`: https://setuptools.pypa.io/en/latest/build_meta.html\n.. _`Issue #19`: https://github.com/cpburnz/python-pathspec/issues/19\n.. _`Issue #35`: https://github.com/cpburnz/python-pathspec/issues/35\n.. _`Issue #41`: https://github.com/cpburnz/python-pathspec/issues/41\n.. _`Issue #47`: https://github.com/cpburnz/python-pathspec/issues/47\n.. _`Pull #51`: https://github.com/cpburnz/python-pathspec/pull/51\n.. _`Issue #52`: https://github.com/cpburnz/python-pathspec/issues/52\n.. _`Issue #53`: https://github.com/cpburnz/python-pathspec/issues/53\n.. _`Issue #54`: https://github.com/cpburnz/python-pathspec/issues/54\n.. _`Issue #55`: https://github.com/cpburnz/python-pathspec/issues/55\n.. _`Pull #56`: https://github.com/cpburnz/python-pathspec/pull/56\n.. _`Issue #57`: https://github.com/cpburnz/python-pathspec/issues/57\n\n\n0.9.0 (2021-07-17)\n------------------\n\n- `Issue #44`_/`Pull #50`_: Raise `GitWildMatchPatternError` for invalid git patterns.\n- `Pull #45`_: Fix for duplicate leading double-asterisk, and edge cases.\n- `Issue #46`_: Fix matching absolute paths.\n- API change: `util.normalize_files()` now returns a `Dict[str, List[pathlike]]` instead of a `Dict[str, pathlike]`.\n- Added type hinting.\n\n.. _`Issue #44`: https://github.com/cpburnz/python-pathspec/issues/44\n.. _`Pull #45`: https://github.com/cpburnz/python-pathspec/pull/45\n.. _`Issue #46`: https://github.com/cpburnz/python-pathspec/issues/46\n.. _`Pull #50`: https://github.com/cpburnz/python-pathspec/pull/50\n\n\n0.8.1 (2020-11-07)\n------------------\n\n- `Pull #43`_: Add support for addition operator.\n\n.. _`Pull #43`: https://github.com/cpburnz/python-pathspec/pull/43\n\n\n0.8.0 (2020-04-09)\n------------------\n\n- `Issue #30`_: Expose what patterns matched paths. Added `util.detailed_match_files()`.\n- `Issue #31`_: `match_tree()` doesn't return symlinks.\n- `Issue #34`_: Support `pathlib.Path`\\ s.\n- Add `PathSpec.match_tree_entries` and `util.iter_tree_entries()` to support directories and symlinks.\n- API change: `match_tree()` has been renamed to `match_tree_files()`. The old name `match_tree()` is still available as an alias.\n- API change: `match_tree_files()` now returns symlinks. This is a bug fix but it will change the returned results.\n\n.. _`Issue #30`: https://github.com/cpburnz/python-pathspec/issues/30\n.. _`Issue #31`: https://github.com/cpburnz/python-pathspec/issues/31\n.. _`Issue #34`: https://github.com/cpburnz/python-pathspec/issues/34\n\n\n0.7.0 (2019-12-27)\n------------------\n\n- `Pull #28`_: Add support for Python 3.8, and drop Python 3.4.\n- `Pull #29`_: Publish bdist wheel.\n\n.. _`Pull #28`: https://github.com/cpburnz/python-pathspec/pull/28\n.. _`Pull #29`: https://github.com/cpburnz/python-pathspec/pull/29\n\n\n0.6.0 (2019-10-03)\n------------------\n\n- `Pull #24`_: Drop support for Python 2.6, 3.2, and 3.3.\n- `Pull #25`_: Update README.rst.\n- `Pull #26`_: Method to escape gitwildmatch.\n\n.. _`Pull #24`: https://github.com/cpburnz/python-pathspec/pull/24\n.. _`Pull #25`: https://github.com/cpburnz/python-pathspec/pull/25\n.. _`Pull #26`: https://github.com/cpburnz/python-pathspec/pull/26\n\n\n0.5.9 (2018-09-15)\n------------------\n\n- Fixed file system error handling.\n\n\n0.5.8 (2018-09-15)\n------------------\n\n- Improved type checking.\n- Created scripts to test Python 2.6 because Tox removed support for it.\n- Improved byte string handling in Python 3.\n- `Issue #22`_: Handle dangling symlinks.\n\n.. _`Issue #22`: https://github.com/cpburnz/python-pathspec/issues/22\n\n\n0.5.7 (2018-08-14)\n------------------\n\n- `Issue #21`_: Fix collections deprecation warning.\n\n.. _`Issue #21`: https://github.com/cpburnz/python-pathspec/issues/21\n\n\n0.5.6 (2018-04-06)\n------------------\n\n- Improved unit tests.\n- Improved type checking.\n- `Issue #20`_: Support current directory prefix.\n\n.. _`Issue #20`: https://github.com/cpburnz/python-pathspec/issues/20\n\n\n0.5.5 (2017-09-09)\n------------------\n\n- Add documentation link to README.\n\n\n0.5.4 (2017-09-09)\n------------------\n\n- `Pull #17`_: Add link to Ruby implementation of *pathspec*.\n- Add sphinx documentation.\n\n.. _`Pull #17`: https://github.com/cpburnz/python-pathspec/pull/17\n\n\n0.5.3 (2017-07-01)\n------------------\n\n- `Issue #14`_: Fix byte strings for Python 3.\n- `Pull #15`_: Include \"LICENSE\" in source package.\n- `Issue #16`_: Support Python 2.6.\n\n.. _`Issue #14`: https://github.com/cpburnz/python-pathspec/issues/14\n.. _`Pull #15`: https://github.com/cpburnz/python-pathspec/pull/15\n.. _`Issue #16`: https://github.com/cpburnz/python-pathspec/issues/16\n\n\n0.5.2 (2017-04-04)\n------------------\n\n- Fixed change log.\n\n\n0.5.1 (2017-04-04)\n------------------\n\n- `Pull #13`_: Add equality methods to `PathSpec` and `RegexPattern`.\n\n.. _`Pull #13`: https://github.com/cpburnz/python-pathspec/pull/13\n\n\n0.5.0 (2016-08-22)\n------------------\n\n- `Issue #12`_: Add `PathSpec.match_file()`.\n- Renamed `gitignore.GitIgnorePattern` to `patterns.gitwildmatch.GitWildMatchPattern`.\n- Deprecated `gitignore.GitIgnorePattern`.\n\n.. _`Issue #12`: https://github.com/cpburnz/python-pathspec/issues/12\n\n\n0.4.0 (2016-07-15)\n------------------\n\n- `Issue #11`_: Support converting patterns into regular expressions without compiling them.\n- API change: Subclasses of `RegexPattern` should implement `pattern_to_regex()`.\n\n.. _`Issue #11`: https://github.com/cpburnz/python-pathspec/issues/11\n\n\n0.3.4 (2015-08-24)\n------------------\n\n- `Pull #7`_: Fixed non-recursive links.\n- `Pull #8`_: Fixed edge cases in gitignore patterns.\n- `Pull #9`_: Fixed minor usage documentation.\n- Fixed recursion detection.\n- Fixed trivial incompatibility with Python 3.2.\n\n.. _`Pull #7`: https://github.com/cpburnz/python-pathspec/pull/7\n.. _`Pull #8`: https://github.com/cpburnz/python-pathspec/pull/8\n.. _`Pull #9`: https://github.com/cpburnz/python-pathspec/pull/9\n\n\n0.3.3 (2014-11-21)\n------------------\n\n- Improved documentation.\n\n\n0.3.2 (2014-11-08)\n------------------\n\n- `Pull #5`_: Use tox for testing.\n- `Issue #6`_: Fixed matching Windows paths.\n- Improved documentation.\n- API change: `spec.match_tree()` and `spec.match_files()` now return iterators instead of sets.\n\n.. _`Pull #5`: https://github.com/cpburnz/python-pathspec/pull/5\n.. _`Issue #6`: https://github.com/cpburnz/python-pathspec/issues/6\n\n\n0.3.1 (2014-09-17)\n------------------\n\n- Updated README.\n\n\n0.3.0 (2014-09-17)\n------------------\n\n- `Pull #3`_: Fixed trailing slash in gitignore patterns.\n- `Pull #4`_: Fixed test for trailing slash in gitignore patterns.\n- Added registered patterns.\n\n.. _`Pull #3`: https://github.com/cpburnz/python-pathspec/pull/3\n.. _`Pull #4`: https://github.com/cpburnz/python-pathspec/pull/4\n\n\n0.2.2 (2013-12-17)\n------------------\n\n- Fixed setup.py.\n\n\n0.2.1 (2013-12-17)\n------------------\n\n- Added tests.\n- Fixed comment gitignore patterns.\n- Fixed relative path gitignore patterns.\n\n\n0.2.0 (2013-12-07)\n------------------\n\n- Initial release.\n", + "description_content_type": "text/x-rst", + "home_page": "https://github.com/cpburnz/python-pathspec", + "author": "Caleb P. Burns", + "author_email": "\"Caleb P. Burns\" ", + "license": "MPL 2.0", + "classifier": [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities" + ], + "requires_python": ">=3.7", + "project_url": [ + "Source Code, https://github.com/cpburnz/python-pathspec", + "Documentation, https://python-path-specification.readthedocs.io/en/latest/index.html", + "Issue Tracker, https://github.com/cpburnz/python-pathspec/issues" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/db/15/6e89ae7cde7907118769ed3d2481566d05b5fd362724025198bb95faf599/pendulum-2.1.2.tar.gz", + "archive_info": { + "hash": "sha256=b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207", + "hashes": { + "sha256": "b06a0ca1bfe41c990bbf0c029f0b6501a7f2ec4e38bfec730712015e8860f207" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "pendulum", + "version": "2.1.2", + "summary": "Python datetimes made easy", + "description": "Pendulum\n########\n\n.. image:: https://img.shields.io/pypi/v/pendulum.svg\n :target: https://pypi.python.org/pypi/pendulum\n\n.. image:: https://img.shields.io/pypi/l/pendulum.svg\n :target: https://pypi.python.org/pypi/pendulum\n\n.. image:: https://img.shields.io/codecov/c/github/sdispater/pendulum/master.svg\n :target: https://codecov.io/gh/sdispater/pendulum/branch/master\n\n.. image:: https://travis-ci.org/sdispater/pendulum.svg\n :alt: Pendulum Build status\n :target: https://travis-ci.org/sdispater/pendulum\n\nPython datetimes made easy.\n\nSupports Python **2.7** and **3.4+**.\n\n\n.. code-block:: python\n\n >>> import pendulum\n\n >>> now_in_paris = pendulum.now('Europe/Paris')\n >>> now_in_paris\n '2016-07-04T00:49:58.502116+02:00'\n\n # Seamless timezone switching\n >>> now_in_paris.in_timezone('UTC')\n '2016-07-03T22:49:58.502116+00:00'\n\n >>> tomorrow = pendulum.now().add(days=1)\n >>> last_week = pendulum.now().subtract(weeks=1)\n\n >>> past = pendulum.now().subtract(minutes=2)\n >>> past.diff_for_humans()\n >>> '2 minutes ago'\n\n >>> delta = past - last_week\n >>> delta.hours\n 23\n >>> delta.in_words(locale='en')\n '6 days 23 hours 58 minutes'\n\n # Proper handling of datetime normalization\n >>> pendulum.datetime(2013, 3, 31, 2, 30, tz='Europe/Paris')\n '2013-03-31T03:30:00+02:00' # 2:30 does not exist (Skipped time)\n\n # Proper handling of dst transitions\n >>> just_before = pendulum.datetime(2013, 3, 31, 1, 59, 59, 999999, tz='Europe/Paris')\n '2013-03-31T01:59:59.999999+01:00'\n >>> just_before.add(microseconds=1)\n '2013-03-31T03:00:00+02:00'\n\n\nWhy Pendulum?\n=============\n\nNative ``datetime`` instances are enough for basic cases but when you face more complex use-cases\nthey often show limitations and are not so intuitive to work with.\n``Pendulum`` provides a cleaner and more easy to use API while still relying on the standard library.\nSo it's still ``datetime`` but better.\n\nUnlike other datetime libraries for Python, Pendulum is a drop-in replacement\nfor the standard ``datetime`` class (it inherits from it), so, basically, you can replace all your ``datetime``\ninstances by ``DateTime`` instances in you code (exceptions exist for libraries that check\nthe type of the objects by using the ``type`` function like ``sqlite3`` or ``PyMySQL`` for instance).\n\nIt also removes the notion of naive datetimes: each ``Pendulum`` instance is timezone-aware\nand by default in ``UTC`` for ease of use.\n\nPendulum also improves the standard ``timedelta`` class by providing more intuitive methods and properties.\n\n\nWhy not Arrow?\n==============\n\nArrow is the most popular datetime library for Python right now, however its behavior\nand API can be erratic and unpredictable. The ``get()`` method can receive pretty much anything\nand it will try its best to return something while silently failing to handle some cases:\n\n.. code-block:: python\n\n arrow.get('2016-1-17')\n # \n\n pendulum.parse('2016-1-17')\n # \n\n arrow.get('20160413')\n # \n\n pendulum.parse('20160413')\n # \n\n arrow.get('2016-W07-5')\n # \n\n pendulum.parse('2016-W07-5')\n # \n\n # Working with DST\n just_before = arrow.Arrow(2013, 3, 31, 1, 59, 59, 999999, 'Europe/Paris')\n just_after = just_before.replace(microseconds=1)\n '2013-03-31T02:00:00+02:00'\n # Should be 2013-03-31T03:00:00+02:00\n\n (just_after.to('utc') - just_before.to('utc')).total_seconds()\n -3599.999999\n # Should be 1e-06\n\n just_before = pendulum.datetime(2013, 3, 31, 1, 59, 59, 999999, 'Europe/Paris')\n just_after = just_before.add(microseconds=1)\n '2013-03-31T03:00:00+02:00'\n\n (just_after.in_timezone('utc') - just_before.in_timezone('utc')).total_seconds()\n 1e-06\n\nThose are a few examples showing that Arrow cannot always be trusted to have a consistent\nbehavior with the data you are passing to it.\n\n\nLimitations\n===========\n\nEven though the ``DateTime`` class is a subclass of ``datetime`` there are some rare cases where\nit can't replace the native class directly. Here is a list (non-exhaustive) of the reported cases with\na possible solution, if any:\n\n* ``sqlite3`` will use the ``type()`` function to determine the type of the object by default. To work around it you can register a new adapter:\n\n.. code-block:: python\n\n from pendulum import DateTime\n from sqlite3 import register_adapter\n\n register_adapter(DateTime, lambda val: val.isoformat(' '))\n\n* ``mysqlclient`` (former ``MySQLdb``) and ``PyMySQL`` will use the ``type()`` function to determine the type of the object by default. To work around it you can register a new adapter:\n\n.. code-block:: python\n\n import MySQLdb.converters\n import pymysql.converters\n\n from pendulum import DateTime\n\n MySQLdb.converters.conversions[DateTime] = MySQLdb.converters.DateTime2literal\n pymysql.converters.conversions[DateTime] = pymysql.converters.escape_datetime\n\n* ``django`` will use the ``isoformat()`` method to store datetimes in the database. However since ``pendulum`` is always timezone aware the offset information will always be returned by ``isoformat()`` raising an error, at least for MySQL databases. To work around it you can either create your own ``DateTimeField`` or use the previous workaround for ``MySQLdb``:\n\n.. code-block:: python\n\n from django.db.models import DateTimeField as BaseDateTimeField\n from pendulum import DateTime\n\n\n class DateTimeField(BaseDateTimeField):\n\n def value_to_string(self, obj):\n val = self.value_from_object(obj)\n\n if isinstance(value, DateTime):\n return value.to_datetime_string()\n\n return '' if val is None else val.isoformat()\n\n\nResources\n=========\n\n* `Official Website `_\n* `Documentation `_\n* `Issue Tracker `_\n\n\nContributing\n============\n\nContributions are welcome, especially with localization.\n\nGetting started\n---------------\n\nTo work on the Pendulum codebase, you'll want to clone the project locally\nand install the required depedendencies via `poetry `_.\n\n.. code-block:: bash\n\n $ git clone git@github.com:sdispater/pendulum.git\n $ poetry install\n\nLocalization\n------------\n\nIf you want to help with localization, there are two different cases: the locale already exists\nor not.\n\nIf the locale does not exist you will need to create it by using the ``clock`` utility:\n\n.. code-block:: bash\n\n ./clock locale create \n\nIt will generate a directory in ``pendulum/locales`` named after your locale, with the following\nstructure:\n\n.. code-block:: text\n\n /\n - custom.py\n - locale.py\n\nThe ``locale.py`` file must not be modified. It contains the translations provided by\nthe CLDR database.\n\nThe ``custom.py`` file is the one you want to modify. It contains the data needed\nby Pendulum that are not provided by the CLDR database. You can take the `en `_\ndata as a reference to see which data is needed.\n\nYou should also add tests for the created or modified locale.\n\n", + "description_content_type": "text/x-rst", + "keywords": [ + "datetime", + "date", + "time" + ], + "home_page": "https://pendulum.eustace.io", + "author": "Sébastien Eustace", + "author_email": "sebastien@eustace.io", + "license": "MIT", + "classifier": [ + "License :: OSI Approved :: MIT License", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11" + ], + "requires_dist": [ + "python-dateutil (>=2.6,<3.0)", + "pytzdata (>=2020.1)", + "typing (>=3.6,<4.0) ; python_version < \"3.5\"" + ], + "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*", + "project_url": [ + "Documentation, https://pendulum.eustace.io/docs", + "Repository, https://github.com/sdispater/pendulum" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/05/b8/42ed91898d4784546c5f06c60506400548db3f7a4b3fb441cba4e5c17952/pluggy-1.3.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7", + "hashes": { + "sha256": "d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "pluggy", + "version": "1.3.0", + "platform": [ + "unix", + "linux", + "osx", + "win32" + ], + "summary": "plugin and hook calling mechanisms for python", + "description": "====================================================\npluggy - A minimalist production ready plugin system\n====================================================\n\n|pypi| |conda-forge| |versions| |github-actions| |gitter| |black| |codecov|\n\nThis is the core framework used by the `pytest`_, `tox`_, and `devpi`_ projects.\n\nPlease `read the docs`_ to learn more!\n\nA definitive example\n====================\n.. code-block:: python\n\n import pluggy\n\n hookspec = pluggy.HookspecMarker(\"myproject\")\n hookimpl = pluggy.HookimplMarker(\"myproject\")\n\n\n class MySpec:\n \"\"\"A hook specification namespace.\"\"\"\n\n @hookspec\n def myhook(self, arg1, arg2):\n \"\"\"My special little hook that you can customize.\"\"\"\n\n\n class Plugin_1:\n \"\"\"A hook implementation namespace.\"\"\"\n\n @hookimpl\n def myhook(self, arg1, arg2):\n print(\"inside Plugin_1.myhook()\")\n return arg1 + arg2\n\n\n class Plugin_2:\n \"\"\"A 2nd hook implementation namespace.\"\"\"\n\n @hookimpl\n def myhook(self, arg1, arg2):\n print(\"inside Plugin_2.myhook()\")\n return arg1 - arg2\n\n\n # create a manager and add the spec\n pm = pluggy.PluginManager(\"myproject\")\n pm.add_hookspecs(MySpec)\n\n # register plugins\n pm.register(Plugin_1())\n pm.register(Plugin_2())\n\n # call our ``myhook`` hook\n results = pm.hook.myhook(arg1=1, arg2=2)\n print(results)\n\n\nRunning this directly gets us::\n\n $ python docs/examples/toy-example.py\n inside Plugin_2.myhook()\n inside Plugin_1.myhook()\n [-1, 3]\n\n\n.. badges\n\n.. |pypi| image:: https://img.shields.io/pypi/v/pluggy.svg\n :target: https://pypi.org/pypi/pluggy\n\n.. |versions| image:: https://img.shields.io/pypi/pyversions/pluggy.svg\n :target: https://pypi.org/pypi/pluggy\n\n.. |github-actions| image:: https://github.com/pytest-dev/pluggy/workflows/main/badge.svg\n :target: https://github.com/pytest-dev/pluggy/actions\n\n.. |conda-forge| image:: https://img.shields.io/conda/vn/conda-forge/pluggy.svg\n :target: https://anaconda.org/conda-forge/pytest\n\n.. |gitter| image:: https://badges.gitter.im/pytest-dev/pluggy.svg\n :alt: Join the chat at https://gitter.im/pytest-dev/pluggy\n :target: https://gitter.im/pytest-dev/pluggy?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge\n\n.. |black| image:: https://img.shields.io/badge/code%20style-black-000000.svg\n :target: https://github.com/ambv/black\n\n.. |codecov| image:: https://codecov.io/gh/pytest-dev/pluggy/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/pytest-dev/pluggy\n :alt: Code coverage Status\n\n.. links\n.. _pytest:\n http://pytest.org\n.. _tox:\n https://tox.readthedocs.org\n.. _devpi:\n http://doc.devpi.net\n.. _read the docs:\n https://pluggy.readthedocs.io/en/latest/\n", + "description_content_type": "text/x-rst", + "home_page": "https://github.com/pytest-dev/pluggy", + "author": "Holger Krekel", + "author_email": "holger@merlinux.eu", + "license": "MIT", + "classifier": [ + "Development Status :: 6 - Mature", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS :: MacOS X", + "Topic :: Software Development :: Testing", + "Topic :: Software Development :: Libraries", + "Topic :: Utilities", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11" + ], + "requires_dist": [ + "pre-commit ; extra == 'dev'", + "tox ; extra == 'dev'", + "pytest ; extra == 'testing'", + "pytest-benchmark ; extra == 'testing'" + ], + "requires_python": ">=3.8", + "provides_extra": [ + "dev", + "testing" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/f1/bd/e55e14cd213174100be0353824f2add41e8996c6f32081888897e8ec48b5/prison-0.2.1-py2.py3-none-any.whl", + "archive_info": { + "hash": "sha256=f90bab63fca497aa0819a852f64fb21a4e181ed9f6114deaa5dc04001a7555c5", + "hashes": { + "sha256": "f90bab63fca497aa0819a852f64fb21a4e181ed9f6114deaa5dc04001a7555c5" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "prison", + "version": "0.2.1", + "platform": [ + "UNKNOWN" + ], + "summary": "Rison encoder/decoder", + "description": "UNKNOWN\n\n\n", + "home_page": "https://github.com/betodealmeida/python-rison", + "author": "Beto Dealmeida", + "author_email": "beto@dealmeida.net", + "license": "MIT", + "classifier": [ + "License :: OSI Approved :: MIT License", + "Programming Language :: Python", + "Programming Language :: Python :: 2.6", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy" + ], + "requires_dist": [ + "six", + "nose ; extra == 'dev'", + "pipreqs ; extra == 'dev'", + "twine ; extra == 'dev'" + ], + "provides_extra": [ + "dev" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/c8/2c/03046cac73f46bfe98fc846ef629cf4f84c2f59258216aa2cc0d22bfca8f/protobuf-4.24.4-cp37-abi3-manylinux2014_x86_64.whl", + "archive_info": { + "hash": "sha256=b493cb590960ff863743b9ff1452c413c2ee12b782f48beca77c8da3e2ffe9d9", + "hashes": { + "sha256": "b493cb590960ff863743b9ff1452c413c2ee12b782f48beca77c8da3e2ffe9d9" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "protobuf", + "version": "4.24.4", + "description": "UNKNOWN\n", + "home_page": "https://developers.google.com/protocol-buffers/", + "author": "protobuf@googlegroups.com", + "author_email": "protobuf@googlegroups.com", + "license": "3-Clause BSD License", + "classifier": [ + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10" + ], + "requires_python": ">=3.7" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/19/06/4e3fa3c1b79271e933c5ddbad3a48aa2c3d5f592a0fb7c037f3e0f619f4d/psutil-5.9.6-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "archive_info": { + "hash": "sha256=748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4", + "hashes": { + "sha256": "748c9dd2583ed86347ed65d0035f45fa8c851e8d90354c122ab72319b5f366f4" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "psutil", + "version": "5.9.6", + "platform": [ + "Platform Independent" + ], + "summary": "Cross-platform lib for process and system monitoring in Python.", + "description": "| |downloads| |stars| |forks| |contributors| |coverage|\n| |version| |py-versions| |packages| |license|\n| |github-actions-wheels| |github-actions-bsd| |appveyor| |doc| |twitter| |tidelift|\n\n.. |downloads| image:: https://img.shields.io/pypi/dm/psutil.svg\n :target: https://pepy.tech/project/psutil\n :alt: Downloads\n\n.. |stars| image:: https://img.shields.io/github/stars/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/stargazers\n :alt: Github stars\n\n.. |forks| image:: https://img.shields.io/github/forks/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/network/members\n :alt: Github forks\n\n.. |contributors| image:: https://img.shields.io/github/contributors/giampaolo/psutil.svg\n :target: https://github.com/giampaolo/psutil/graphs/contributors\n :alt: Contributors\n\n.. |github-actions-wheels| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/build.yml?label=Linux%2C%20macOS%2C%20Windows\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Abuild\n :alt: Linux, macOS, Windows\n\n.. |github-actions-bsd| image:: https://img.shields.io/github/actions/workflow/status/giampaolo/psutil/.github/workflows/bsd.yml?label=FreeBSD,%20NetBSD,%20OpenBSD\n :target: https://github.com/giampaolo/psutil/actions?query=workflow%3Absd-tests\n :alt: FreeBSD, NetBSD, OpenBSD\n\n.. |appveyor| image:: https://img.shields.io/appveyor/build/giampaolo/psutil/master.svg?maxAge=3600&label=Windows%20(py2)\n :target: https://ci.appveyor.com/project/giampaolo/psutil\n :alt: Windows (Appveyor)\n\n.. |coverage| image:: https://coveralls.io/repos/github/giampaolo/psutil/badge.svg?branch=master\n :target: https://coveralls.io/github/giampaolo/psutil?branch=master\n :alt: Test coverage (coverall.io)\n\n.. |doc| image:: https://readthedocs.org/projects/psutil/badge/?version=latest\n :target: https://psutil.readthedocs.io/en/latest/\n :alt: Documentation Status\n\n.. |version| image:: https://img.shields.io/pypi/v/psutil.svg?label=pypi\n :target: https://pypi.org/project/psutil\n :alt: Latest version\n\n.. |py-versions| image:: https://img.shields.io/pypi/pyversions/psutil.svg\n :alt: Supported Python versions\n\n.. |packages| image:: https://repology.org/badge/tiny-repos/python:psutil.svg\n :target: https://repology.org/metapackage/python:psutil/versions\n :alt: Binary packages\n\n.. |license| image:: https://img.shields.io/pypi/l/psutil.svg\n :target: https://github.com/giampaolo/psutil/blob/master/LICENSE\n :alt: License\n\n.. |twitter| image:: https://img.shields.io/twitter/follow/grodola.svg?label=follow&style=flat&logo=twitter&logoColor=4FADFF\n :target: https://twitter.com/grodola\n :alt: Twitter Follow\n\n.. |tidelift| image:: https://tidelift.com/badges/github/giampaolo/psutil?style=flat\n :target: https://tidelift.com/subscription/pkg/pypi-psutil?utm_source=pypi-psutil&utm_medium=referral&utm_campaign=readme\n :alt: Tidelift\n\n-----\n\nQuick links\n===========\n\n- `Home page `_\n- `Install `_\n- `Documentation `_\n- `Download `_\n- `Forum `_\n- `StackOverflow `_\n- `Blog `_\n- `What's new `_\n\n\nSummary\n=======\n\npsutil (process and system utilities) is a cross-platform library for\nretrieving information on **running processes** and **system utilization**\n(CPU, memory, disks, network, sensors) in Python.\nIt is useful mainly for **system monitoring**, **profiling and limiting process\nresources** and **management of running processes**.\nIt implements many functionalities offered by classic UNIX command line tools\nsuch as *ps, top, iotop, lsof, netstat, ifconfig, free* and others.\npsutil currently supports the following platforms:\n\n- **Linux**\n- **Windows**\n- **macOS**\n- **FreeBSD, OpenBSD**, **NetBSD**\n- **Sun Solaris**\n- **AIX**\n\nSupported Python versions are **2.7**, **3.6+** and\n`PyPy `__.\n\nFunding\n=======\n\nWhile psutil is free software and will always be, the project would benefit\nimmensely from some funding.\nKeeping up with bug reports and maintenance has become hardly sustainable for\nme alone in terms of time.\nIf you're a company that's making significant use of psutil you can consider\nbecoming a sponsor via `GitHub Sponsors `__,\n`Open Collective `__ or\n`PayPal `__\nand have your logo displayed in here and psutil `doc `__.\n\nSponsors\n========\n\n.. image:: https://github.com/giampaolo/psutil/raw/master/docs/_static/tidelift-logo.png\n :width: 200\n :alt: Alternative text\n\n`Add your logo `__.\n\nExample usages\n==============\n\nThis represents pretty much the whole psutil API.\n\nCPU\n---\n\n.. code-block:: python\n\n >>> import psutil\n >>>\n >>> psutil.cpu_times()\n scputimes(user=3961.46, nice=169.729, system=2150.659, idle=16900.540, iowait=629.59, irq=0.0, softirq=19.42, steal=0.0, guest=0, nice=0.0)\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1)\n ...\n 4.0\n 5.9\n 3.8\n >>>\n >>> for x in range(3):\n ... psutil.cpu_percent(interval=1, percpu=True)\n ...\n [4.0, 6.9, 3.7, 9.2]\n [7.0, 8.5, 2.4, 2.1]\n [1.2, 9.0, 9.9, 7.2]\n >>>\n >>> for x in range(3):\n ... psutil.cpu_times_percent(interval=1, percpu=False)\n ...\n scputimes(user=1.5, nice=0.0, system=0.5, idle=96.5, iowait=1.5, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=1.0, nice=0.0, system=0.0, idle=99.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n scputimes(user=2.0, nice=0.0, system=0.0, idle=98.0, iowait=0.0, irq=0.0, softirq=0.0, steal=0.0, guest=0.0, guest_nice=0.0)\n >>>\n >>> psutil.cpu_count()\n 4\n >>> psutil.cpu_count(logical=False)\n 2\n >>>\n >>> psutil.cpu_stats()\n scpustats(ctx_switches=20455687, interrupts=6598984, soft_interrupts=2134212, syscalls=0)\n >>>\n >>> psutil.cpu_freq()\n scpufreq(current=931.42925, min=800.0, max=3500.0)\n >>>\n >>> psutil.getloadavg() # also on Windows (emulated)\n (3.14, 3.89, 4.67)\n\nMemory\n------\n\n.. code-block:: python\n\n >>> psutil.virtual_memory()\n svmem(total=10367352832, available=6472179712, percent=37.6, used=8186245120, free=2181107712, active=4748992512, inactive=2758115328, buffers=790724608, cached=3500347392, shared=787554304)\n >>> psutil.swap_memory()\n sswap(total=2097147904, used=296128512, free=1801019392, percent=14.1, sin=304193536, sout=677842944)\n >>>\n\nDisks\n-----\n\n.. code-block:: python\n\n >>> psutil.disk_partitions()\n [sdiskpart(device='/dev/sda1', mountpoint='/', fstype='ext4', opts='rw,nosuid', maxfile=255, maxpath=4096),\n sdiskpart(device='/dev/sda2', mountpoint='/home', fstype='ext', opts='rw', maxfile=255, maxpath=4096)]\n >>>\n >>> psutil.disk_usage('/')\n sdiskusage(total=21378641920, used=4809781248, free=15482871808, percent=22.5)\n >>>\n >>> psutil.disk_io_counters(perdisk=False)\n sdiskio(read_count=719566, write_count=1082197, read_bytes=18626220032, write_bytes=24081764352, read_time=5023392, write_time=63199568, read_merged_count=619166, write_merged_count=812396, busy_time=4523412)\n >>>\n\nNetwork\n-------\n\n.. code-block:: python\n\n >>> psutil.net_io_counters(pernic=True)\n {'eth0': netio(bytes_sent=485291293, bytes_recv=6004858642, packets_sent=3251564, packets_recv=4787798, errin=0, errout=0, dropin=0, dropout=0),\n 'lo': netio(bytes_sent=2838627, bytes_recv=2838627, packets_sent=30567, packets_recv=30567, errin=0, errout=0, dropin=0, dropout=0)}\n >>>\n >>> psutil.net_connections(kind='tcp')\n [sconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED', pid=1254),\n sconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING', pid=2987),\n ...]\n >>>\n >>> psutil.net_if_addrs()\n {'lo': [snicaddr(family=, address='127.0.0.1', netmask='255.0.0.0', broadcast='127.0.0.1', ptp=None),\n snicaddr(family=, address='::1', netmask='ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', broadcast=None, ptp=None),\n snicaddr(family=, address='00:00:00:00:00:00', netmask=None, broadcast='00:00:00:00:00:00', ptp=None)],\n 'wlan0': [snicaddr(family=, address='192.168.1.3', netmask='255.255.255.0', broadcast='192.168.1.255', ptp=None),\n snicaddr(family=, address='fe80::c685:8ff:fe45:641%wlan0', netmask='ffff:ffff:ffff:ffff::', broadcast=None, ptp=None),\n snicaddr(family=, address='c4:85:08:45:06:41', netmask=None, broadcast='ff:ff:ff:ff:ff:ff', ptp=None)]}\n >>>\n >>> psutil.net_if_stats()\n {'lo': snicstats(isup=True, duplex=, speed=0, mtu=65536, flags='up,loopback,running'),\n 'wlan0': snicstats(isup=True, duplex=, speed=100, mtu=1500, flags='up,broadcast,running,multicast')}\n >>>\n\nSensors\n-------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.sensors_temperatures()\n {'acpitz': [shwtemp(label='', current=47.0, high=103.0, critical=103.0)],\n 'asus': [shwtemp(label='', current=47.0, high=None, critical=None)],\n 'coretemp': [shwtemp(label='Physical id 0', current=52.0, high=100.0, critical=100.0),\n shwtemp(label='Core 0', current=45.0, high=100.0, critical=100.0)]}\n >>>\n >>> psutil.sensors_fans()\n {'asus': [sfan(label='cpu_fan', current=3200)]}\n >>>\n >>> psutil.sensors_battery()\n sbattery(percent=93, secsleft=16628, power_plugged=False)\n >>>\n\nOther system info\n-----------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.users()\n [suser(name='giampaolo', terminal='pts/2', host='localhost', started=1340737536.0, pid=1352),\n suser(name='giampaolo', terminal='pts/3', host='localhost', started=1340737792.0, pid=1788)]\n >>>\n >>> psutil.boot_time()\n 1365519115.0\n >>>\n\nProcess management\n------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> psutil.pids()\n [1, 2, 3, 4, 5, 6, 7, 46, 48, 50, 51, 178, 182, 222, 223, 224, 268, 1215,\n 1216, 1220, 1221, 1243, 1244, 1301, 1601, 2237, 2355, 2637, 2774, 3932,\n 4176, 4177, 4185, 4187, 4189, 4225, 4243, 4245, 4263, 4282, 4306, 4311,\n 4312, 4313, 4314, 4337, 4339, 4357, 4358, 4363, 4383, 4395, 4408, 4433,\n 4443, 4445, 4446, 5167, 5234, 5235, 5252, 5318, 5424, 5644, 6987, 7054,\n 7055, 7071]\n >>>\n >>> p = psutil.Process(7055)\n >>> p\n psutil.Process(pid=7055, name='python3', status='running', started='09:04:44')\n >>> p.pid\n 7055\n >>> p.name()\n 'python3'\n >>> p.exe()\n '/usr/bin/python3'\n >>> p.cwd()\n '/home/giampaolo'\n >>> p.cmdline()\n ['/usr/bin/python3', 'main.py']\n >>>\n >>> p.ppid()\n 7054\n >>> p.parent()\n psutil.Process(pid=4699, name='bash', status='sleeping', started='09:06:44')\n >>> p.parents()\n [psutil.Process(pid=4699, name='bash', started='09:06:44'),\n psutil.Process(pid=4689, name='gnome-terminal-server', status='sleeping', started='0:06:44'),\n psutil.Process(pid=1, name='systemd', status='sleeping', started='05:56:55')]\n >>> p.children(recursive=True)\n [psutil.Process(pid=29835, name='python3', status='sleeping', started='11:45:38'),\n psutil.Process(pid=29836, name='python3', status='waking', started='11:43:39')]\n >>>\n >>> p.status()\n 'running'\n >>> p.create_time()\n 1267551141.5019531\n >>> p.terminal()\n '/dev/pts/0'\n >>>\n >>> p.username()\n 'giampaolo'\n >>> p.uids()\n puids(real=1000, effective=1000, saved=1000)\n >>> p.gids()\n pgids(real=1000, effective=1000, saved=1000)\n >>>\n >>> p.cpu_times()\n pcputimes(user=1.02, system=0.31, children_user=0.32, children_system=0.1, iowait=0.0)\n >>> p.cpu_percent(interval=1.0)\n 12.1\n >>> p.cpu_affinity()\n [0, 1, 2, 3]\n >>> p.cpu_affinity([0, 1]) # set\n >>> p.cpu_num()\n 1\n >>>\n >>> p.memory_info()\n pmem(rss=10915840, vms=67608576, shared=3313664, text=2310144, lib=0, data=7262208, dirty=0)\n >>> p.memory_full_info() # \"real\" USS memory usage (Linux, macOS, Win only)\n pfullmem(rss=10199040, vms=52133888, shared=3887104, text=2867200, lib=0, data=5967872, dirty=0, uss=6545408, pss=6872064, swap=0)\n >>> p.memory_percent()\n 0.7823\n >>> p.memory_maps()\n [pmmap_grouped(path='/lib/x8664-linux-gnu/libutil-2.15.so', rss=32768, size=2125824, pss=32768, shared_clean=0, shared_dirty=0, private_clean=20480, private_dirty=12288, referenced=32768, anonymous=12288, swap=0),\n pmmap_grouped(path='/lib/x8664-linux-gnu/libc-2.15.so', rss=3821568, size=3842048, pss=3821568, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=3821568, referenced=3575808, anonymous=3821568, swap=0),\n pmmap_grouped(path='[heap]', rss=32768, size=139264, pss=32768, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=32768, referenced=32768, anonymous=32768, swap=0),\n pmmap_grouped(path='[stack]', rss=2465792, size=2494464, pss=2465792, shared_clean=0, shared_dirty=0, private_clean=0, private_dirty=2465792, referenced=2277376, anonymous=2465792, swap=0),\n ...]\n >>>\n >>> p.io_counters()\n pio(read_count=478001, write_count=59371, read_bytes=700416, write_bytes=69632, read_chars=456232, write_chars=517543)\n >>>\n >>> p.open_files()\n [popenfile(path='/home/giampaolo/monit.py', fd=3, position=0, mode='r', flags=32768),\n popenfile(path='/var/log/monit.log', fd=4, position=235542, mode='a', flags=33793)]\n >>>\n >>> p.connections(kind='tcp')\n [pconn(fd=115, family=, type=, laddr=addr(ip='10.0.0.1', port=48776), raddr=addr(ip='93.186.135.91', port=80), status='ESTABLISHED'),\n pconn(fd=117, family=, type=, laddr=addr(ip='10.0.0.1', port=43761), raddr=addr(ip='72.14.234.100', port=80), status='CLOSING')]\n >>>\n >>> p.threads()\n [pthread(id=5234, user_time=22.5, system_time=9.2891),\n pthread(id=5237, user_time=0.0707, system_time=1.1)]\n >>>\n >>> p.num_threads()\n 4\n >>> p.num_fds()\n 8\n >>> p.num_ctx_switches()\n pctxsw(voluntary=78, involuntary=19)\n >>>\n >>> p.nice()\n 0\n >>> p.nice(10) # set\n >>>\n >>> p.ionice(psutil.IOPRIO_CLASS_IDLE) # IO priority (Win and Linux only)\n >>> p.ionice()\n pionice(ioclass=, value=0)\n >>>\n >>> p.rlimit(psutil.RLIMIT_NOFILE, (5, 5)) # set resource limits (Linux only)\n >>> p.rlimit(psutil.RLIMIT_NOFILE)\n (5, 5)\n >>>\n >>> p.environ()\n {'LC_PAPER': 'it_IT.UTF-8', 'SHELL': '/bin/bash', 'GREP_OPTIONS': '--color=auto',\n 'XDG_CONFIG_DIRS': '/etc/xdg/xdg-ubuntu:/usr/share/upstart/xdg:/etc/xdg',\n ...}\n >>>\n >>> p.as_dict()\n {'status': 'running', 'num_ctx_switches': pctxsw(voluntary=63, involuntary=1), 'pid': 5457, ...}\n >>> p.is_running()\n True\n >>> p.suspend()\n >>> p.resume()\n >>>\n >>> p.terminate()\n >>> p.kill()\n >>> p.wait(timeout=3)\n \n >>>\n >>> psutil.test()\n USER PID %CPU %MEM VSZ RSS TTY START TIME COMMAND\n root 1 0.0 0.0 24584 2240 Jun17 00:00 init\n root 2 0.0 0.0 0 0 Jun17 00:00 kthreadd\n ...\n giampaolo 31475 0.0 0.0 20760 3024 /dev/pts/0 Jun19 00:00 python2.4\n giampaolo 31721 0.0 2.2 773060 181896 00:04 10:30 chrome\n root 31763 0.0 0.0 0 0 00:05 00:00 kworker/0:1\n >>>\n\nFurther process APIs\n--------------------\n\n.. code-block:: python\n\n >>> import psutil\n >>> for proc in psutil.process_iter(['pid', 'name']):\n ... print(proc.info)\n ...\n {'pid': 1, 'name': 'systemd'}\n {'pid': 2, 'name': 'kthreadd'}\n {'pid': 3, 'name': 'ksoftirqd/0'}\n ...\n >>>\n >>> psutil.pid_exists(3)\n True\n >>>\n >>> def on_terminate(proc):\n ... print(\"process {} terminated\".format(proc))\n ...\n >>> # waits for multiple processes to terminate\n >>> gone, alive = psutil.wait_procs(procs_list, timeout=3, callback=on_terminate)\n >>>\n\nWindows services\n----------------\n\n.. code-block:: python\n\n >>> list(psutil.win_service_iter())\n [,\n ,\n ,\n ,\n ...]\n >>> s = psutil.win_service_get('alg')\n >>> s.as_dict()\n {'binpath': 'C:\\\\Windows\\\\System32\\\\alg.exe',\n 'description': 'Provides support for 3rd party protocol plug-ins for Internet Connection Sharing',\n 'display_name': 'Application Layer Gateway Service',\n 'name': 'alg',\n 'pid': None,\n 'start_type': 'manual',\n 'status': 'stopped',\n 'username': 'NT AUTHORITY\\\\LocalService'}\n\nProjects using psutil\n=====================\n\nHere's some I find particularly interesting:\n\n- https://github.com/google/grr\n- https://github.com/facebook/osquery/\n- https://github.com/nicolargo/glances\n- https://github.com/aristocratos/bpytop\n- https://github.com/Jahaja/psdash\n- https://github.com/ajenti/ajenti\n- https://github.com/home-assistant/home-assistant/\n\nPortings\n========\n\n- Go: https://github.com/shirou/gopsutil\n- C: https://github.com/hamon-in/cpslib\n- Rust: https://github.com/rust-psutil/rust-psutil\n- Nim: https://github.com/johnscillieri/psutil-nim\n\n\n\n", + "description_content_type": "text/x-rst", + "keywords": [ + "ps", + "top", + "kill", + "free", + "lsof", + "netstat", + "nice", + "tty", + "ionice", + "uptime", + "taskmgr", + "process", + "df", + "iotop", + "iostat", + "ifconfig", + "taskset", + "who", + "pidof", + "pmap", + "smem", + "pstree", + "monitoring", + "ulimit", + "prlimit", + "smem", + "performance", + "metrics", + "agent", + "observability" + ], + "home_page": "https://github.com/giampaolo/psutil", + "author": "Giampaolo Rodola", + "author_email": "g.rodola@gmail.com", + "license": "BSD-3-Clause", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: Win32 (MS Windows)", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: BSD License", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows :: Windows 10", + "Operating System :: Microsoft :: Windows :: Windows 7", + "Operating System :: Microsoft :: Windows :: Windows 8", + "Operating System :: Microsoft :: Windows :: Windows 8.1", + "Operating System :: Microsoft :: Windows :: Windows Server 2003", + "Operating System :: Microsoft :: Windows :: Windows Server 2008", + "Operating System :: Microsoft :: Windows :: Windows Vista", + "Operating System :: Microsoft", + "Operating System :: OS Independent", + "Operating System :: POSIX :: AIX", + "Operating System :: POSIX :: BSD :: FreeBSD", + "Operating System :: POSIX :: BSD :: NetBSD", + "Operating System :: POSIX :: BSD :: OpenBSD", + "Operating System :: POSIX :: BSD", + "Operating System :: POSIX :: Linux", + "Operating System :: POSIX :: SunOS/Solaris", + "Operating System :: POSIX", + "Programming Language :: C", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Software Development :: Libraries", + "Topic :: System :: Benchmark", + "Topic :: System :: Hardware :: Hardware Drivers", + "Topic :: System :: Hardware", + "Topic :: System :: Monitoring", + "Topic :: System :: Networking :: Monitoring :: Hardware Watchdog", + "Topic :: System :: Networking :: Monitoring", + "Topic :: System :: Networking", + "Topic :: System :: Operating System", + "Topic :: System :: Systems Administration", + "Topic :: Utilities" + ], + "requires_dist": [ + "ipaddress ; (python_version < \"3.0\") and extra == 'test'", + "mock ; (python_version < \"3.0\") and extra == 'test'", + "enum34 ; (python_version <= \"3.4\") and extra == 'test'", + "pywin32 ; (sys_platform == \"win32\") and extra == 'test'", + "wmi ; (sys_platform == \"win32\") and extra == 'test'" + ], + "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*", + "provides_extra": [ + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/62/d5/5f610ebe421e85889f2e55e33b7f9a6795bd982198517d912eb1c76e1a53/pycparser-2.21-py2.py3-none-any.whl", + "archive_info": { + "hash": "sha256=8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "hashes": { + "sha256": "8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "pycparser", + "version": "2.21", + "platform": [ + "Cross Platform" + ], + "summary": "C parser in Python", + "description": "\npycparser is a complete parser of the C language, written in\npure Python using the PLY parsing library.\nIt parses C code into an AST and can serve as a front-end for\nC compilers or analysis tools.\n\n\n", + "home_page": "https://github.com/eliben/pycparser", + "author": "Eli Bendersky", + "author_email": "eliben@gmail.com", + "maintainer": "Eli Bendersky", + "license": "BSD", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "License :: OSI Approved :: BSD License", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10" + ], + "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/73/66/0a72c9fcde42e5650c8d8d5c5c1873b9a3893018020c77ca8eb62708b923/pydantic-2.4.2-py3-none-any.whl", + "archive_info": { + "hash": "sha256=bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1", + "hashes": { + "sha256": "bc3ddf669d234f4220e6e1c4d96b061abe0998185a8d7855c0126782b7abc8c1" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "pydantic", + "version": "2.4.2", + "summary": "Data validation using Python type hints", + "description": "# Pydantic\n\n[![CI](https://github.com/pydantic/pydantic/workflows/CI/badge.svg?event=push)](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amain+workflow%3ACI)\n[![Coverage](https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic.svg)](https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic)\n[![pypi](https://img.shields.io/pypi/v/pydantic.svg)](https://pypi.python.org/pypi/pydantic)\n[![CondaForge](https://img.shields.io/conda/v/conda-forge/pydantic.svg)](https://anaconda.org/conda-forge/pydantic)\n[![downloads](https://static.pepy.tech/badge/pydantic/month)](https://pepy.tech/project/pydantic)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic.svg)](https://github.com/pydantic/pydantic)\n[![license](https://img.shields.io/github/license/pydantic/pydantic.svg)](https://github.com/pydantic/pydantic/blob/main/LICENSE)\n[![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://docs.pydantic.dev/latest/contributing/#badges)\n\nData validation using Python type hints.\n\nFast and extensible, Pydantic plays nicely with your linters/IDE/brain.\nDefine how data should be in pure, canonical Python 3.7+; validate it with Pydantic.\n\n## Pydantic Company :rocket:\n\nWe've started a company based on the principles that I believe have led to Pydantic's success.\nLearning more from the [Company Announcement](https://pydantic.dev/announcement/).\n\n## Pydantic V1.10 vs. V2\n\nPydantic V2 is a ground-up rewrite that offers many new features, performance improvements, and some breaking changes compared to Pydantic V1.\n\nIf you're using Pydantic V1 you may want to look at the\n[pydantic V1.10 Documentation](https://docs.pydantic.dev/) or,\n[`1.10.X-fixes` git branch](https://github.com/pydantic/pydantic/tree/1.10.X-fixes). Pydantic V2 also ships with the latest version of Pydantic V1 built in so that you can incrementally upgrade your code base and projects: `from pydantic import v1 as pydantic_v1`.\n\n## Help\n\nSee [documentation](https://docs.pydantic.dev/) for more details.\n\n## Installation\n\nInstall using `pip install -U pydantic` or `conda install pydantic -c conda-forge`.\nFor more installation options to make Pydantic even faster,\nsee the [Install](https://docs.pydantic.dev/install/) section in the documentation.\n\n## A Simple Example\n\n```py\nfrom datetime import datetime\nfrom typing import List, Optional\nfrom pydantic import BaseModel\n\nclass User(BaseModel):\n id: int\n name: str = 'John Doe'\n signup_ts: Optional[datetime] = None\n friends: List[int] = []\n\nexternal_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}\nuser = User(**external_data)\nprint(user)\n#> User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]\nprint(user.id)\n#> 123\n```\n\n## Contributing\n\nFor guidance on setting up a development environment and how to make a\ncontribution to Pydantic, see\n[Contributing to Pydantic](https://docs.pydantic.dev/contributing/).\n\n## Reporting a Security Vulnerability\n\nSee our [security policy](https://github.com/pydantic/pydantic/security/policy).\n\n## Changelog\n\n## v2.4.2 (2023-09-27)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.4.2)\n\n### What's Changed\n\n#### Fixes\n\n* Fix bug with JSON schema for sequence of discriminated union by [@dmontagu](https://github.com/dmontagu) in [#7647](https://github.com/pydantic/pydantic/pull/7647)\n* Fix schema references in discriminated unions by [@adriangb](https://github.com/adriangb) in [#7646](https://github.com/pydantic/pydantic/pull/7646)\n* Fix json schema generation for recursive models by [@adriangb](https://github.com/adriangb) in [#7653](https://github.com/pydantic/pydantic/pull/7653)\n* Fix `models_json_schema` for generic models by [@adriangb](https://github.com/adriangb) in [#7654](https://github.com/pydantic/pydantic/pull/7654)\n* Fix xfailed test for generic model signatures by [@adriangb](https://github.com/adriangb) in [#7658](https://github.com/pydantic/pydantic/pull/7658)\n\n### New Contributors\n\n* [@austinorr](https://github.com/austinorr) made their first contribution in [#7657](https://github.com/pydantic/pydantic/pull/7657)\n* [@peterHoburg](https://github.com/peterHoburg) made their first contribution in [#7670](https://github.com/pydantic/pydantic/pull/7670)\n\n## v2.4.1 (2023-09-26)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.4.1)\n\n### What's Changed\n\n#### Packaging\n\n* Update pydantic-core to 2.10.1 by [@davidhewitt](https://github.com/davidhewitt) in [#7633](https://github.com/pydantic/pydantic/pull/7633)\n\n#### Fixes\n\n* Serialize unsubstituted type vars as `Any` by [@adriangb](https://github.com/adriangb) in [#7606](https://github.com/pydantic/pydantic/pull/7606)\n* Remove schema building caches by [@adriangb](https://github.com/adriangb) in [#7624](https://github.com/pydantic/pydantic/pull/7624)\n* Fix an issue where JSON schema extras weren't JSON encoded by [@dmontagu](https://github.com/dmontagu) in [#7625](https://github.com/pydantic/pydantic/pull/7625)\n\n## v2.4.0 (2023-09-22)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.4.0)\n\n### What's Changed\n\n#### Packaging\n\n* Update pydantic-core to 2.10.0 by [@samuelcolvin](https://github.com/samuelcolvin) in [#7542](https://github.com/pydantic/pydantic/pull/7542)\n\n#### New Features\n\n* Add `Base64Url` types by [@dmontagu](https://github.com/dmontagu) in [#7286](https://github.com/pydantic/pydantic/pull/7286)\n* Implement optional `number` to `str` coercion by [@lig](https://github.com/lig) in [#7508](https://github.com/pydantic/pydantic/pull/7508)\n* Allow access to `field_name` and `data` in all validators if there is data and a field name by [@samuelcolvin](https://github.com/samuelcolvin) in [#7542](https://github.com/pydantic/pydantic/pull/7542)\n* Add `BaseModel.model_validate_strings` and `TypeAdapter.validate_strings` by [@hramezani](https://github.com/hramezani) in [#7552](https://github.com/pydantic/pydantic/pull/7552)\n* Add Pydantic `plugins` experimental implementation by [@lig](https://github.com/lig) [@samuelcolvin](https://github.com/samuelcolvin) and [@Kludex](https://github.com/Kludex) in [#6820](https://github.com/pydantic/pydantic/pull/6820)\n\n#### Changes\n\n* Do not override `model_post_init` in subclass with private attrs by [@Viicos](https://github.com/Viicos) in [#7302](https://github.com/pydantic/pydantic/pull/7302)\n* Make fields with defaults not required in the serialization schema by default by [@dmontagu](https://github.com/dmontagu) in [#7275](https://github.com/pydantic/pydantic/pull/7275)\n* Mark `Extra` as deprecated by [@disrupted](https://github.com/disrupted) in [#7299](https://github.com/pydantic/pydantic/pull/7299)\n* Make `EncodedStr` a dataclass by [@Kludex](https://github.com/Kludex) in [#7396](https://github.com/pydantic/pydantic/pull/7396)\n* Move `annotated_handlers` to be public by [@samuelcolvin](https://github.com/samuelcolvin) in [#7569](https://github.com/pydantic/pydantic/pull/7569)\n\n#### Performance\n\n* Simplify flattening and inlining of `CoreSchema` by [@adriangb](https://github.com/adriangb) in [#7523](https://github.com/pydantic/pydantic/pull/7523)\n* Remove unused copies in `CoreSchema` walking by [@adriangb](https://github.com/adriangb) in [#7528](https://github.com/pydantic/pydantic/pull/7528)\n* Add caches for collecting definitions and invalid schemas from a CoreSchema by [@adriangb](https://github.com/adriangb) in [#7527](https://github.com/pydantic/pydantic/pull/7527)\n* Eagerly resolve discriminated unions and cache cases where we can't by [@adriangb](https://github.com/adriangb) in [#7529](https://github.com/pydantic/pydantic/pull/7529)\n* Replace `dict.get` and `dict.setdefault` with more verbose versions in `CoreSchema` building hot paths by [@adriangb](https://github.com/adriangb) in [#7536](https://github.com/pydantic/pydantic/pull/7536)\n* Cache invalid `CoreSchema` discovery by [@adriangb](https://github.com/adriangb) in [#7535](https://github.com/pydantic/pydantic/pull/7535)\n* Allow disabling `CoreSchema` validation for faster startup times by [@adriangb](https://github.com/adriangb) in [#7565](https://github.com/pydantic/pydantic/pull/7565)\n\n#### Fixes\n\n* Fix config detection for `TypedDict` from grandparent classes by [@dmontagu](https://github.com/dmontagu) in [#7272](https://github.com/pydantic/pydantic/pull/7272)\n* Fix hash function generation for frozen models with unusual MRO by [@dmontagu](https://github.com/dmontagu) in [#7274](https://github.com/pydantic/pydantic/pull/7274)\n* Make `strict` config overridable in field for Path by [@hramezani](https://github.com/hramezani) in [#7281](https://github.com/pydantic/pydantic/pull/7281)\n* Use `ser_json_` on default in `GenerateJsonSchema` by [@Kludex](https://github.com/Kludex) in [#7269](https://github.com/pydantic/pydantic/pull/7269)\n* Adding a check that alias is validated as an identifier for Python by [@andree0](https://github.com/andree0) in [#7319](https://github.com/pydantic/pydantic/pull/7319)\n* Raise an error when computed field overrides field by [@sydney-runkle](https://github.com/sydney-runkle) in [#7346](https://github.com/pydantic/pydantic/pull/7346)\n* Fix applying `SkipValidation` to referenced schemas by [@adriangb](https://github.com/adriangb) in [#7381](https://github.com/pydantic/pydantic/pull/7381)\n* Enforce behavior of private attributes having double leading underscore by [@lig](https://github.com/lig) in [#7265](https://github.com/pydantic/pydantic/pull/7265)\n* Standardize `__get_pydantic_core_schema__` signature by [@hramezani](https://github.com/hramezani) in [#7415](https://github.com/pydantic/pydantic/pull/7415)\n* Fix generic dataclass fields mutation bug (when using `TypeAdapter`) by [@sydney-runkle](https://github.com/sydney-runkle) in [#7435](https://github.com/pydantic/pydantic/pull/7435)\n* Fix `TypeError` on `model_validator` in `wrap` mode by [@pmmmwh](https://github.com/pmmmwh) in [#7496](https://github.com/pydantic/pydantic/pull/7496)\n* Improve enum error message by [@hramezani](https://github.com/hramezani) in [#7506](https://github.com/pydantic/pydantic/pull/7506)\n* Make `repr` work for instances that failed initialization when handling `ValidationError`s by [@dmontagu](https://github.com/dmontagu) in [#7439](https://github.com/pydantic/pydantic/pull/7439)\n* Fixed a regular expression denial of service issue by limiting whitespaces by [@prodigysml](https://github.com/prodigysml) in [#7360](https://github.com/pydantic/pydantic/pull/7360)\n* Fix handling of `UUID` values having `UUID.version=None` by [@lig](https://github.com/lig) in [#7566](https://github.com/pydantic/pydantic/pull/7566)\n* Fix `__iter__` returning private `cached_property` info by [@sydney-runkle](https://github.com/sydney-runkle) in [#7570](https://github.com/pydantic/pydantic/pull/7570)\n* Improvements to version info message by [@samuelcolvin](https://github.com/samuelcolvin) in [#7594](https://github.com/pydantic/pydantic/pull/7594)\n\n### New Contributors\n* [@15498th](https://github.com/15498th) made their first contribution in [#7238](https://github.com/pydantic/pydantic/pull/7238)\n* [@GabrielCappelli](https://github.com/GabrielCappelli) made their first contribution in [#7213](https://github.com/pydantic/pydantic/pull/7213)\n* [@tobni](https://github.com/tobni) made their first contribution in [#7184](https://github.com/pydantic/pydantic/pull/7184)\n* [@redruin1](https://github.com/redruin1) made their first contribution in [#7282](https://github.com/pydantic/pydantic/pull/7282)\n* [@FacerAin](https://github.com/FacerAin) made their first contribution in [#7288](https://github.com/pydantic/pydantic/pull/7288)\n* [@acdha](https://github.com/acdha) made their first contribution in [#7297](https://github.com/pydantic/pydantic/pull/7297)\n* [@andree0](https://github.com/andree0) made their first contribution in [#7319](https://github.com/pydantic/pydantic/pull/7319)\n* [@gordonhart](https://github.com/gordonhart) made their first contribution in [#7375](https://github.com/pydantic/pydantic/pull/7375)\n* [@pmmmwh](https://github.com/pmmmwh) made their first contribution in [#7496](https://github.com/pydantic/pydantic/pull/7496)\n* [@disrupted](https://github.com/disrupted) made their first contribution in [#7299](https://github.com/pydantic/pydantic/pull/7299)\n* [@prodigysml](https://github.com/prodigysml) made their first contribution in [#7360](https://github.com/pydantic/pydantic/pull/7360)\n\n## v2.3.0 (2023-08-23)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.3.0)\n\n* 🔥 Remove orphaned changes file from repo by [@lig](https://github.com/lig) in [#7168](https://github.com/pydantic/pydantic/pull/7168)\n* Add copy button on documentation by [@Kludex](https://github.com/Kludex) in [#7190](https://github.com/pydantic/pydantic/pull/7190)\n* Fix docs on JSON type by [@Kludex](https://github.com/Kludex) in [#7189](https://github.com/pydantic/pydantic/pull/7189)\n* Update mypy 1.5.0 to 1.5.1 in CI by [@hramezani](https://github.com/hramezani) in [#7191](https://github.com/pydantic/pydantic/pull/7191)\n* fix download links badge by [@samuelcolvin](https://github.com/samuelcolvin) in [#7200](https://github.com/pydantic/pydantic/pull/7200)\n* add 2.2.1 to changelog by [@samuelcolvin](https://github.com/samuelcolvin) in [#7212](https://github.com/pydantic/pydantic/pull/7212)\n* Make ModelWrapValidator protocols generic by [@dmontagu](https://github.com/dmontagu) in [#7154](https://github.com/pydantic/pydantic/pull/7154)\n* Correct `Field(..., exclude: bool)` docs by [@samuelcolvin](https://github.com/samuelcolvin) in [#7214](https://github.com/pydantic/pydantic/pull/7214)\n* Make shadowing attributes a warning instead of an error by [@adriangb](https://github.com/adriangb) in [#7193](https://github.com/pydantic/pydantic/pull/7193)\n* Document `Base64Str` and `Base64Bytes` by [@Kludex](https://github.com/Kludex) in [#7192](https://github.com/pydantic/pydantic/pull/7192)\n* Fix `config.defer_build` for serialization first cases by [@samuelcolvin](https://github.com/samuelcolvin) in [#7024](https://github.com/pydantic/pydantic/pull/7024)\n* clean Model docstrings in JSON Schema by [@samuelcolvin](https://github.com/samuelcolvin) in [#7210](https://github.com/pydantic/pydantic/pull/7210)\n* fix [#7228](https://github.com/pydantic/pydantic/pull/7228) (typo): docs in `validators.md` to correct `validate_default` kwarg by [@lmmx](https://github.com/lmmx) in [#7229](https://github.com/pydantic/pydantic/pull/7229)\n* ✅ Implement `tzinfo.fromutc` method for `TzInfo` in `pydantic-core` by [@lig](https://github.com/lig) in [#7019](https://github.com/pydantic/pydantic/pull/7019)\n* Support `__get_validators__` by [@hramezani](https://github.com/hramezani) in [#7197](https://github.com/pydantic/pydantic/pull/7197)\n\n## v2.2.1 (2023-08-18)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.2.1)\n\n* Make `xfail`ing test for root model extra stop `xfail`ing by [@dmontagu](https://github.com/dmontagu) in [#6937](https://github.com/pydantic/pydantic/pull/6937)\n* Optimize recursion detection by stopping on the second visit for the same object by [@mciucu](https://github.com/mciucu) in [#7160](https://github.com/pydantic/pydantic/pull/7160)\n* fix link in docs by [@tlambert03](https://github.com/tlambert03) in [#7166](https://github.com/pydantic/pydantic/pull/7166)\n* Replace MiMalloc w/ default allocator by [@adriangb](https://github.com/adriangb) in [pydantic/pydantic-core#900](https://github.com/pydantic/pydantic-core/pull/900)\n* Bump pydantic-core to 2.6.1 and prepare 2.2.1 release by [@adriangb](https://github.com/adriangb) in [#7176](https://github.com/pydantic/pydantic/pull/7176)\n\n## v2.2.0 (2023-08-17)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.2.0)\n\n* Split \"pipx install\" setup command into two commands on the documentation site by [@nomadmtb](https://github.com/nomadmtb) in [#6869](https://github.com/pydantic/pydantic/pull/6869)\n* Deprecate `Field.include` by [@hramezani](https://github.com/hramezani) in [#6852](https://github.com/pydantic/pydantic/pull/6852)\n* Fix typo in default factory error msg by [@hramezani](https://github.com/hramezani) in [#6880](https://github.com/pydantic/pydantic/pull/6880)\n* Simplify handling of typing.Annotated in GenerateSchema by [@dmontagu](https://github.com/dmontagu) in [#6887](https://github.com/pydantic/pydantic/pull/6887)\n* Re-enable fastapi tests in CI by [@dmontagu](https://github.com/dmontagu) in [#6883](https://github.com/pydantic/pydantic/pull/6883)\n* Make it harder to hit collisions with json schema defrefs by [@dmontagu](https://github.com/dmontagu) in [#6566](https://github.com/pydantic/pydantic/pull/6566)\n* Cleaner error for invalid input to `Path` fields by [@samuelcolvin](https://github.com/samuelcolvin) in [#6903](https://github.com/pydantic/pydantic/pull/6903)\n* :memo: support Coordinate Type by [@yezz123](https://github.com/yezz123) in [#6906](https://github.com/pydantic/pydantic/pull/6906)\n* Fix `ForwardRef` wrapper for py 3.10.0 (shim until bpo-45166) by [@randomir](https://github.com/randomir) in [#6919](https://github.com/pydantic/pydantic/pull/6919)\n* Fix misbehavior related to copying of RootModel by [@dmontagu](https://github.com/dmontagu) in [#6918](https://github.com/pydantic/pydantic/pull/6918)\n* Fix issue with recursion error caused by ParamSpec by [@dmontagu](https://github.com/dmontagu) in [#6923](https://github.com/pydantic/pydantic/pull/6923)\n* Add section about Constrained classes to the Migration Guide by [@Kludex](https://github.com/Kludex) in [#6924](https://github.com/pydantic/pydantic/pull/6924)\n* Use `main` branch for badge links by [@Viicos](https://github.com/Viicos) in [#6925](https://github.com/pydantic/pydantic/pull/6925)\n* Add test for v1/v2 Annotated discrepancy by [@carlbordum](https://github.com/carlbordum) in [#6926](https://github.com/pydantic/pydantic/pull/6926)\n* Make the v1 mypy plugin work with both v1 and v2 by [@dmontagu](https://github.com/dmontagu) in [#6921](https://github.com/pydantic/pydantic/pull/6921)\n* Fix issue where generic models couldn't be parametrized with BaseModel by [@dmontagu](https://github.com/dmontagu) in [#6933](https://github.com/pydantic/pydantic/pull/6933)\n* Remove xfail for discriminated union with alias by [@dmontagu](https://github.com/dmontagu) in [#6938](https://github.com/pydantic/pydantic/pull/6938)\n* add field_serializer to computed_field by [@andresliszt](https://github.com/andresliszt) in [#6965](https://github.com/pydantic/pydantic/pull/6965)\n* Use union_schema with Type[Union[...]] by [@JeanArhancet](https://github.com/JeanArhancet) in [#6952](https://github.com/pydantic/pydantic/pull/6952)\n* Fix inherited typeddict attributes / config by [@adriangb](https://github.com/adriangb) in [#6981](https://github.com/pydantic/pydantic/pull/6981)\n* fix dataclass annotated before validator called twice by [@davidhewitt](https://github.com/davidhewitt) in [#6998](https://github.com/pydantic/pydantic/pull/6998)\n* Update test-fastapi deselected tests by [@hramezani](https://github.com/hramezani) in [#7014](https://github.com/pydantic/pydantic/pull/7014)\n* Fix validator doc format by [@hramezani](https://github.com/hramezani) in [#7015](https://github.com/pydantic/pydantic/pull/7015)\n* Fix typo in docstring of model_json_schema by [@AdamVinch-Federated](https://github.com/AdamVinch-Federated) in [#7032](https://github.com/pydantic/pydantic/pull/7032)\n* remove unused \"type ignores\" with pyright by [@samuelcolvin](https://github.com/samuelcolvin) in [#7026](https://github.com/pydantic/pydantic/pull/7026)\n* Add benchmark representing FastAPI startup time by [@adriangb](https://github.com/adriangb) in [#7030](https://github.com/pydantic/pydantic/pull/7030)\n* Fix json_encoders for Enum subclasses by [@adriangb](https://github.com/adriangb) in [#7029](https://github.com/pydantic/pydantic/pull/7029)\n* Update docstring of `ser_json_bytes` regarding base64 encoding by [@Viicos](https://github.com/Viicos) in [#7052](https://github.com/pydantic/pydantic/pull/7052)\n* Allow `@validate_call` to work on async methods by [@adriangb](https://github.com/adriangb) in [#7046](https://github.com/pydantic/pydantic/pull/7046)\n* Fix: mypy error with `Settings` and `SettingsConfigDict` by [@JeanArhancet](https://github.com/JeanArhancet) in [#7002](https://github.com/pydantic/pydantic/pull/7002)\n* Fix some typos (repeated words and it's/its) by [@eumiro](https://github.com/eumiro) in [#7063](https://github.com/pydantic/pydantic/pull/7063)\n* Fix the typo in docstring by [@harunyasar](https://github.com/harunyasar) in [#7062](https://github.com/pydantic/pydantic/pull/7062)\n* Docs: Fix broken URL in the pydantic-settings package recommendation by [@swetjen](https://github.com/swetjen) in [#6995](https://github.com/pydantic/pydantic/pull/6995)\n* Handle constraints being applied to schemas that don't accept it by [@adriangb](https://github.com/adriangb) in [#6951](https://github.com/pydantic/pydantic/pull/6951)\n* Replace almost_equal_floats with math.isclose by [@eumiro](https://github.com/eumiro) in [#7082](https://github.com/pydantic/pydantic/pull/7082)\n* bump pydantic-core to 2.5.0 by [@davidhewitt](https://github.com/davidhewitt) in [#7077](https://github.com/pydantic/pydantic/pull/7077)\n* Add `short_version` and use it in links by [@hramezani](https://github.com/hramezani) in [#7115](https://github.com/pydantic/pydantic/pull/7115)\n* 📝 Add usage link to `RootModel` by [@Kludex](https://github.com/Kludex) in [#7113](https://github.com/pydantic/pydantic/pull/7113)\n* Revert \"Fix default port for mongosrv DSNs (#6827)\" by [@Kludex](https://github.com/Kludex) in [#7116](https://github.com/pydantic/pydantic/pull/7116)\n* Clarify validate_default and _Unset handling in usage docs and migration guide by [@benbenbang](https://github.com/benbenbang) in [#6950](https://github.com/pydantic/pydantic/pull/6950)\n* Tweak documentation of `Field.exclude` by [@Viicos](https://github.com/Viicos) in [#7086](https://github.com/pydantic/pydantic/pull/7086)\n* Do not require `validate_assignment` to use `Field.frozen` by [@Viicos](https://github.com/Viicos) in [#7103](https://github.com/pydantic/pydantic/pull/7103)\n* tweaks to `_core_utils` by [@samuelcolvin](https://github.com/samuelcolvin) in [#7040](https://github.com/pydantic/pydantic/pull/7040)\n* Make DefaultDict working with set by [@hramezani](https://github.com/hramezani) in [#7126](https://github.com/pydantic/pydantic/pull/7126)\n* Don't always require typing.Generic as a base for partially parametrized models by [@dmontagu](https://github.com/dmontagu) in [#7119](https://github.com/pydantic/pydantic/pull/7119)\n* Fix issue with JSON schema incorrectly using parent class core schema by [@dmontagu](https://github.com/dmontagu) in [#7020](https://github.com/pydantic/pydantic/pull/7020)\n* Fix xfailed test related to TypedDict and alias_generator by [@dmontagu](https://github.com/dmontagu) in [#6940](https://github.com/pydantic/pydantic/pull/6940)\n* Improve error message for NameEmail by [@dmontagu](https://github.com/dmontagu) in [#6939](https://github.com/pydantic/pydantic/pull/6939)\n* Fix generic computed fields by [@dmontagu](https://github.com/dmontagu) in [#6988](https://github.com/pydantic/pydantic/pull/6988)\n* Reflect namedtuple default values during validation by [@dmontagu](https://github.com/dmontagu) in [#7144](https://github.com/pydantic/pydantic/pull/7144)\n* Update dependencies, fix pydantic-core usage, fix CI issues by [@dmontagu](https://github.com/dmontagu) in [#7150](https://github.com/pydantic/pydantic/pull/7150)\n* Add mypy 1.5.0 by [@hramezani](https://github.com/hramezani) in [#7118](https://github.com/pydantic/pydantic/pull/7118)\n* Handle non-json native enum values by [@adriangb](https://github.com/adriangb) in [#7056](https://github.com/pydantic/pydantic/pull/7056)\n* document `round_trip` in Json type documentation by [@jc-louis](https://github.com/jc-louis) in [#7137](https://github.com/pydantic/pydantic/pull/7137)\n* Relax signature checks to better support builtins and C extension functions as validators by [@adriangb](https://github.com/adriangb) in [#7101](https://github.com/pydantic/pydantic/pull/7101)\n* add union_mode='left_to_right' by [@davidhewitt](https://github.com/davidhewitt) in [#7151](https://github.com/pydantic/pydantic/pull/7151)\n* Include an error message hint for inherited ordering by [@yvalencia91](https://github.com/yvalencia91) in [#7124](https://github.com/pydantic/pydantic/pull/7124)\n* Fix one docs link and resolve some warnings for two others by [@dmontagu](https://github.com/dmontagu) in [#7153](https://github.com/pydantic/pydantic/pull/7153)\n* Include Field extra keys name in warning by [@hramezani](https://github.com/hramezani) in [#7136](https://github.com/pydantic/pydantic/pull/7136)\n\n## v2.1.1 (2023-07-25)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.1.1)\n\n* Skip FieldInfo merging when unnecessary by [@dmontagu](https://github.com/dmontagu) in [#6862](https://github.com/pydantic/pydantic/pull/6862)\n\n## v2.1.0 (2023-07-25)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.1.0)\n\n* Add `StringConstraints` for use as Annotated metadata by [@adriangb](https://github.com/adriangb) in [#6605](https://github.com/pydantic/pydantic/pull/6605)\n* Try to fix intermittently failing CI by [@adriangb](https://github.com/adriangb) in [#6683](https://github.com/pydantic/pydantic/pull/6683)\n* Remove redundant example of optional vs default. by [@ehiggs-deliverect](https://github.com/ehiggs-deliverect) in [#6676](https://github.com/pydantic/pydantic/pull/6676)\n* Docs update by [@samuelcolvin](https://github.com/samuelcolvin) in [#6692](https://github.com/pydantic/pydantic/pull/6692)\n* Remove the Validate always section in validator docs by [@adriangb](https://github.com/adriangb) in [#6679](https://github.com/pydantic/pydantic/pull/6679)\n* Fix recursion error in json schema generation by [@adriangb](https://github.com/adriangb) in [#6720](https://github.com/pydantic/pydantic/pull/6720)\n* Fix incorrect subclass check for secretstr by [@AlexVndnblcke](https://github.com/AlexVndnblcke) in [#6730](https://github.com/pydantic/pydantic/pull/6730)\n* update pdm / pdm lockfile to 2.8.0 by [@davidhewitt](https://github.com/davidhewitt) in [#6714](https://github.com/pydantic/pydantic/pull/6714)\n* unpin pdm on more CI jobs by [@davidhewitt](https://github.com/davidhewitt) in [#6755](https://github.com/pydantic/pydantic/pull/6755)\n* improve source locations for auxiliary packages in docs by [@davidhewitt](https://github.com/davidhewitt) in [#6749](https://github.com/pydantic/pydantic/pull/6749)\n* Assume builtins don't accept an info argument by [@adriangb](https://github.com/adriangb) in [#6754](https://github.com/pydantic/pydantic/pull/6754)\n* Fix bug where calling `help(BaseModelSubclass)` raises errors by [@hramezani](https://github.com/hramezani) in [#6758](https://github.com/pydantic/pydantic/pull/6758)\n* Fix mypy plugin handling of `@model_validator(mode=\"after\")` by [@ljodal](https://github.com/ljodal) in [#6753](https://github.com/pydantic/pydantic/pull/6753)\n* update pydantic-core to 2.3.1 by [@davidhewitt](https://github.com/davidhewitt) in [#6756](https://github.com/pydantic/pydantic/pull/6756)\n* Mypy plugin for settings by [@hramezani](https://github.com/hramezani) in [#6760](https://github.com/pydantic/pydantic/pull/6760)\n* Use `contentSchema` keyword for JSON schema by [@dmontagu](https://github.com/dmontagu) in [#6715](https://github.com/pydantic/pydantic/pull/6715)\n* fast-path checking finite decimals by [@davidhewitt](https://github.com/davidhewitt) in [#6769](https://github.com/pydantic/pydantic/pull/6769)\n* Docs update by [@samuelcolvin](https://github.com/samuelcolvin) in [#6771](https://github.com/pydantic/pydantic/pull/6771)\n* Improve json schema doc by [@hramezani](https://github.com/hramezani) in [#6772](https://github.com/pydantic/pydantic/pull/6772)\n* Update validator docs by [@adriangb](https://github.com/adriangb) in [#6695](https://github.com/pydantic/pydantic/pull/6695)\n* Fix typehint for wrap validator by [@dmontagu](https://github.com/dmontagu) in [#6788](https://github.com/pydantic/pydantic/pull/6788)\n* 🐛 Fix validation warning for unions of Literal and other type by [@lig](https://github.com/lig) in [#6628](https://github.com/pydantic/pydantic/pull/6628)\n* Update documentation for generics support in V2 by [@tpdorsey](https://github.com/tpdorsey) in [#6685](https://github.com/pydantic/pydantic/pull/6685)\n* add pydantic-core build info to `version_info()` by [@samuelcolvin](https://github.com/samuelcolvin) in [#6785](https://github.com/pydantic/pydantic/pull/6785)\n* Fix pydantic dataclasses that use slots with default values by [@dmontagu](https://github.com/dmontagu) in [#6796](https://github.com/pydantic/pydantic/pull/6796)\n* Fix inheritance of hash function for frozen models by [@dmontagu](https://github.com/dmontagu) in [#6789](https://github.com/pydantic/pydantic/pull/6789)\n* ✨ Add `SkipJsonSchema` annotation by [@Kludex](https://github.com/Kludex) in [#6653](https://github.com/pydantic/pydantic/pull/6653)\n* Error if an invalid field name is used with Field by [@dmontagu](https://github.com/dmontagu) in [#6797](https://github.com/pydantic/pydantic/pull/6797)\n* Add `GenericModel` to `MOVED_IN_V2` by [@adriangb](https://github.com/adriangb) in [#6776](https://github.com/pydantic/pydantic/pull/6776)\n* Remove unused code from `docs/usage/types/custom.md` by [@hramezani](https://github.com/hramezani) in [#6803](https://github.com/pydantic/pydantic/pull/6803)\n* Fix `float` -> `Decimal` coercion precision loss by [@adriangb](https://github.com/adriangb) in [#6810](https://github.com/pydantic/pydantic/pull/6810)\n* remove email validation from the north star benchmark by [@davidhewitt](https://github.com/davidhewitt) in [#6816](https://github.com/pydantic/pydantic/pull/6816)\n* Fix link to mypy by [@progsmile](https://github.com/progsmile) in [#6824](https://github.com/pydantic/pydantic/pull/6824)\n* Improve initialization hooks example by [@hramezani](https://github.com/hramezani) in [#6822](https://github.com/pydantic/pydantic/pull/6822)\n* Fix default port for mongosrv DSNs by [@dmontagu](https://github.com/dmontagu) in [#6827](https://github.com/pydantic/pydantic/pull/6827)\n* Improve API documentation, in particular more links between usage and API docs by [@samuelcolvin](https://github.com/samuelcolvin) in [#6780](https://github.com/pydantic/pydantic/pull/6780)\n* update pydantic-core to 2.4.0 by [@davidhewitt](https://github.com/davidhewitt) in [#6831](https://github.com/pydantic/pydantic/pull/6831)\n* Fix `annotated_types.MaxLen` validator for custom sequence types by [@ImogenBits](https://github.com/ImogenBits) in [#6809](https://github.com/pydantic/pydantic/pull/6809)\n* Update V1 by [@hramezani](https://github.com/hramezani) in [#6833](https://github.com/pydantic/pydantic/pull/6833)\n* Make it so callable JSON schema extra works by [@dmontagu](https://github.com/dmontagu) in [#6798](https://github.com/pydantic/pydantic/pull/6798)\n* Fix serialization issue with `InstanceOf` by [@dmontagu](https://github.com/dmontagu) in [#6829](https://github.com/pydantic/pydantic/pull/6829)\n* Add back support for `json_encoders` by [@adriangb](https://github.com/adriangb) in [#6811](https://github.com/pydantic/pydantic/pull/6811)\n* Update field annotations when building the schema by [@dmontagu](https://github.com/dmontagu) in [#6838](https://github.com/pydantic/pydantic/pull/6838)\n* Use `WeakValueDictionary` to fix generic memory leak by [@dmontagu](https://github.com/dmontagu) in [#6681](https://github.com/pydantic/pydantic/pull/6681)\n* Add `config.defer_build` to optionally make model building lazy by [@samuelcolvin](https://github.com/samuelcolvin) in [#6823](https://github.com/pydantic/pydantic/pull/6823)\n* delegate `UUID` serialization to pydantic-core by [@davidhewitt](https://github.com/davidhewitt) in [#6850](https://github.com/pydantic/pydantic/pull/6850)\n* Update `json_encoders` docs by [@adriangb](https://github.com/adriangb) in [#6848](https://github.com/pydantic/pydantic/pull/6848)\n* Fix error message for `staticmethod`/`classmethod` order with validate_call by [@dmontagu](https://github.com/dmontagu) in [#6686](https://github.com/pydantic/pydantic/pull/6686)\n* Improve documentation for `Config` by [@samuelcolvin](https://github.com/samuelcolvin) in [#6847](https://github.com/pydantic/pydantic/pull/6847)\n* Update serialization doc to mention `Field.exclude` takes priority over call-time `include/exclude` by [@hramezani](https://github.com/hramezani) in [#6851](https://github.com/pydantic/pydantic/pull/6851)\n* Allow customizing core schema generation by making `GenerateSchema` public by [@adriangb](https://github.com/adriangb) in [#6737](https://github.com/pydantic/pydantic/pull/6737)\n\n## v2.0.3 (2023-07-05)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.0.3)\n\n* Mention PyObject (v1) moving to ImportString (v2) in migration doc by [@slafs](https://github.com/slafs) in [#6456](https://github.com/pydantic/pydantic/pull/6456)\n* Fix release-tweet CI by [@Kludex](https://github.com/Kludex) in [#6461](https://github.com/pydantic/pydantic/pull/6461)\n* Revise the section on required / optional / nullable fields. by [@ybressler](https://github.com/ybressler) in [#6468](https://github.com/pydantic/pydantic/pull/6468)\n* Warn if a type hint is not in fact a type by [@adriangb](https://github.com/adriangb) in [#6479](https://github.com/pydantic/pydantic/pull/6479)\n* Replace TransformSchema with GetPydanticSchema by [@dmontagu](https://github.com/dmontagu) in [#6484](https://github.com/pydantic/pydantic/pull/6484)\n* Fix the un-hashability of various annotation types, for use in caching generic containers by [@dmontagu](https://github.com/dmontagu) in [#6480](https://github.com/pydantic/pydantic/pull/6480)\n* PYD-164: Rework custom types docs by [@adriangb](https://github.com/adriangb) in [#6490](https://github.com/pydantic/pydantic/pull/6490)\n* Fix ci by [@adriangb](https://github.com/adriangb) in [#6507](https://github.com/pydantic/pydantic/pull/6507)\n* Fix forward ref in generic by [@adriangb](https://github.com/adriangb) in [#6511](https://github.com/pydantic/pydantic/pull/6511)\n* Fix generation of serialization JSON schemas for core_schema.ChainSchema by [@dmontagu](https://github.com/dmontagu) in [#6515](https://github.com/pydantic/pydantic/pull/6515)\n* Document the change in `Field.alias` behavior in Pydantic V2 by [@hramezani](https://github.com/hramezani) in [#6508](https://github.com/pydantic/pydantic/pull/6508)\n* Give better error message attempting to compute the json schema of a model with undefined fields by [@dmontagu](https://github.com/dmontagu) in [#6519](https://github.com/pydantic/pydantic/pull/6519)\n* Document `alias_priority` by [@tpdorsey](https://github.com/tpdorsey) in [#6520](https://github.com/pydantic/pydantic/pull/6520)\n* Add redirect for types documentation by [@tpdorsey](https://github.com/tpdorsey) in [#6513](https://github.com/pydantic/pydantic/pull/6513)\n* Allow updating docs without release by [@samuelcolvin](https://github.com/samuelcolvin) in [#6551](https://github.com/pydantic/pydantic/pull/6551)\n* Ensure docs tests always run in the right folder by [@dmontagu](https://github.com/dmontagu) in [#6487](https://github.com/pydantic/pydantic/pull/6487)\n* Defer evaluation of return type hints for serializer functions by [@dmontagu](https://github.com/dmontagu) in [#6516](https://github.com/pydantic/pydantic/pull/6516)\n* Disable E501 from Ruff and rely on just Black by [@adriangb](https://github.com/adriangb) in [#6552](https://github.com/pydantic/pydantic/pull/6552)\n* Update JSON Schema documentation for V2 by [@tpdorsey](https://github.com/tpdorsey) in [#6492](https://github.com/pydantic/pydantic/pull/6492)\n* Add documentation of cyclic reference handling by [@dmontagu](https://github.com/dmontagu) in [#6493](https://github.com/pydantic/pydantic/pull/6493)\n* Remove the need for change files by [@samuelcolvin](https://github.com/samuelcolvin) in [#6556](https://github.com/pydantic/pydantic/pull/6556)\n* add \"north star\" benchmark by [@davidhewitt](https://github.com/davidhewitt) in [#6547](https://github.com/pydantic/pydantic/pull/6547)\n* Update Dataclasses docs by [@tpdorsey](https://github.com/tpdorsey) in [#6470](https://github.com/pydantic/pydantic/pull/6470)\n* ♻️ Use different error message on v1 redirects by [@Kludex](https://github.com/Kludex) in [#6595](https://github.com/pydantic/pydantic/pull/6595)\n* ⬆ Upgrade `pydantic-core` to v2.2.0 by [@lig](https://github.com/lig) in [#6589](https://github.com/pydantic/pydantic/pull/6589)\n* Fix serialization for IPvAny by [@dmontagu](https://github.com/dmontagu) in [#6572](https://github.com/pydantic/pydantic/pull/6572)\n* Improve CI by using PDM instead of pip to install typing-extensions by [@adriangb](https://github.com/adriangb) in [#6602](https://github.com/pydantic/pydantic/pull/6602)\n* Add `enum` error type docs by [@lig](https://github.com/lig) in [#6603](https://github.com/pydantic/pydantic/pull/6603)\n* 🐛 Fix `max_length` for unicode strings by [@lig](https://github.com/lig) in [#6559](https://github.com/pydantic/pydantic/pull/6559)\n* Add documentation for accessing features via `pydantic.v1` by [@tpdorsey](https://github.com/tpdorsey) in [#6604](https://github.com/pydantic/pydantic/pull/6604)\n* Include extra when iterating over a model by [@adriangb](https://github.com/adriangb) in [#6562](https://github.com/pydantic/pydantic/pull/6562)\n* Fix typing of model_validator by [@adriangb](https://github.com/adriangb) in [#6514](https://github.com/pydantic/pydantic/pull/6514)\n* Touch up Decimal validator by [@adriangb](https://github.com/adriangb) in [#6327](https://github.com/pydantic/pydantic/pull/6327)\n* Fix various docstrings using fixed pytest-examples by [@dmontagu](https://github.com/dmontagu) in [#6607](https://github.com/pydantic/pydantic/pull/6607)\n* Handle function validators in a discriminated union by [@dmontagu](https://github.com/dmontagu) in [#6570](https://github.com/pydantic/pydantic/pull/6570)\n* Review json_schema.md by [@tpdorsey](https://github.com/tpdorsey) in [#6608](https://github.com/pydantic/pydantic/pull/6608)\n* Make validate_call work on basemodel methods by [@dmontagu](https://github.com/dmontagu) in [#6569](https://github.com/pydantic/pydantic/pull/6569)\n* add test for big int json serde by [@davidhewitt](https://github.com/davidhewitt) in [#6614](https://github.com/pydantic/pydantic/pull/6614)\n* Fix pydantic dataclass problem with dataclasses.field default_factory by [@hramezani](https://github.com/hramezani) in [#6616](https://github.com/pydantic/pydantic/pull/6616)\n* Fixed mypy type inference for TypeAdapter by [@zakstucke](https://github.com/zakstucke) in [#6617](https://github.com/pydantic/pydantic/pull/6617)\n* Make it work to use None as a generic parameter by [@dmontagu](https://github.com/dmontagu) in [#6609](https://github.com/pydantic/pydantic/pull/6609)\n* Make it work to use `$ref` as an alias by [@dmontagu](https://github.com/dmontagu) in [#6568](https://github.com/pydantic/pydantic/pull/6568)\n* add note to migration guide about changes to `AnyUrl` etc by [@davidhewitt](https://github.com/davidhewitt) in [#6618](https://github.com/pydantic/pydantic/pull/6618)\n* 🐛 Support defining `json_schema_extra` on `RootModel` using `Field` by [@lig](https://github.com/lig) in [#6622](https://github.com/pydantic/pydantic/pull/6622)\n* Update pre-commit to prevent commits to main branch on accident by [@dmontagu](https://github.com/dmontagu) in [#6636](https://github.com/pydantic/pydantic/pull/6636)\n* Fix PDM CI for python 3.7 on MacOS/windows by [@dmontagu](https://github.com/dmontagu) in [#6627](https://github.com/pydantic/pydantic/pull/6627)\n* Produce more accurate signatures for pydantic dataclasses by [@dmontagu](https://github.com/dmontagu) in [#6633](https://github.com/pydantic/pydantic/pull/6633)\n* Updates to Url types for Pydantic V2 by [@tpdorsey](https://github.com/tpdorsey) in [#6638](https://github.com/pydantic/pydantic/pull/6638)\n* Fix list markdown in `transform` docstring by [@StefanBRas](https://github.com/StefanBRas) in [#6649](https://github.com/pydantic/pydantic/pull/6649)\n* simplify slots_dataclass construction to appease mypy by [@davidhewitt](https://github.com/davidhewitt) in [#6639](https://github.com/pydantic/pydantic/pull/6639)\n* Update TypedDict schema generation docstring by [@adriangb](https://github.com/adriangb) in [#6651](https://github.com/pydantic/pydantic/pull/6651)\n* Detect and lint-error for prints by [@dmontagu](https://github.com/dmontagu) in [#6655](https://github.com/pydantic/pydantic/pull/6655)\n* Add xfailing test for pydantic-core PR 766 by [@dmontagu](https://github.com/dmontagu) in [#6641](https://github.com/pydantic/pydantic/pull/6641)\n* Ignore unrecognized fields from dataclasses metadata by [@dmontagu](https://github.com/dmontagu) in [#6634](https://github.com/pydantic/pydantic/pull/6634)\n* Make non-existent class getattr a mypy error by [@dmontagu](https://github.com/dmontagu) in [#6658](https://github.com/pydantic/pydantic/pull/6658)\n* Update pydantic-core to 2.3.0 by [@hramezani](https://github.com/hramezani) in [#6648](https://github.com/pydantic/pydantic/pull/6648)\n* Use OrderedDict from typing_extensions by [@dmontagu](https://github.com/dmontagu) in [#6664](https://github.com/pydantic/pydantic/pull/6664)\n* Fix typehint for JSON schema extra callable by [@dmontagu](https://github.com/dmontagu) in [#6659](https://github.com/pydantic/pydantic/pull/6659)\n\n## v2.0.2 (2023-07-05)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.0.2)\n\n* Fix bug where round-trip pickling/unpickling a `RootModel` would change the value of `__dict__`, [#6457](https://github.com/pydantic/pydantic/pull/6457) by [@dmontagu](https://github.com/dmontagu)\n* Allow single-item discriminated unions, [#6405](https://github.com/pydantic/pydantic/pull/6405) by [@dmontagu](https://github.com/dmontagu)\n* Fix issue with union parsing of enums, [#6440](https://github.com/pydantic/pydantic/pull/6440) by [@dmontagu](https://github.com/dmontagu)\n* Docs: Fixed `constr` documentation, renamed old `regex` to new `pattern`, [#6452](https://github.com/pydantic/pydantic/pull/6452) by [@miili](https://github.com/miili)\n* Change `GenerateJsonSchema.generate_definitions` signature, [#6436](https://github.com/pydantic/pydantic/pull/6436) by [@dmontagu](https://github.com/dmontagu)\n\nSee the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0.2)\n\n## v2.0.1 (2023-07-04)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.0.1)\n\nFirst patch release of Pydantic V2\n\n* Extra fields added via `setattr` (i.e. `m.some_extra_field = 'extra_value'`)\n are added to `.model_extra` if `model_config` `extra='allowed'`. Fixed [#6333](https://github.com/pydantic/pydantic/pull/6333), [#6365](https://github.com/pydantic/pydantic/pull/6365) by [@aaraney](https://github.com/aaraney)\n* Automatically unpack JSON schema '$ref' for custom types, [#6343](https://github.com/pydantic/pydantic/pull/6343) by [@adriangb](https://github.com/adriangb)\n* Fix tagged unions multiple processing in submodels, [#6340](https://github.com/pydantic/pydantic/pull/6340) by [@suharnikov](https://github.com/suharnikov)\n\nSee the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0.1)\n\n## v2.0 (2023-06-30)\n\n[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.0)\n\nPydantic V2 is here! :tada:\n\nSee [this post](https://docs.pydantic.dev/2.0/blog/pydantic-v2-final/) for more details.\n\n## v2.0b3 (2023-06-16)\n\nThird beta pre-release of Pydantic V2\n\nSee the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0b3)\n\n## v2.0b2 (2023-06-03)\n\nAdd `from_attributes` runtime flag to `TypeAdapter.validate_python` and `BaseModel.model_validate`.\n\nSee the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0b2)\n\n## v2.0b1 (2023-06-01)\n\nFirst beta pre-release of Pydantic V2\n\nSee the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0b1)\n\n## v2.0a4 (2023-05-05)\n\nFourth pre-release of Pydantic V2\n\nSee the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0a4)\n\n## v2.0a3 (2023-04-20)\n\nThird pre-release of Pydantic V2\n\nSee the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0a3)\n\n## v2.0a2 (2023-04-12)\n\nSecond pre-release of Pydantic V2\n\nSee the full changelog [here](https://github.com/pydantic/pydantic/releases/tag/v2.0a2)\n\n## v2.0a1 (2023-04-03)\n\nFirst pre-release of Pydantic V2!\n\nSee [this post](https://docs.pydantic.dev/blog/pydantic-v2-alpha/) for more details.\n\n## v1.10.13 (2023-09-27)\n\n* Fix: Add max length check to `pydantic.validate_email`, [#7673](https://github.com/pydantic/pydantic/issues/7673) by [@hramezani](https://github.com/hramezani)\n* Docs: Fix pip commands to install v1, [#6930](https://github.com/pydantic/pydantic/issues/6930) by [@chbndrhnns](https://github.com/chbndrhnns)\n\n## v1.10.12 (2023-07-24)\n\n* Fixes the `maxlen` property being dropped on `deque` validation. Happened only if the deque item has been typed. Changes the `_validate_sequence_like` func, [#6581](https://github.com/pydantic/pydantic/pull/6581) by [@maciekglowka](https://github.com/maciekglowka)\n\n## v1.10.11 (2023-07-04)\n\n* Importing create_model in tools.py through relative path instead of absolute path - so that it doesn't import V2 code when copied over to V2 branch, [#6361](https://github.com/pydantic/pydantic/pull/6361) by [@SharathHuddar](https://github.com/SharathHuddar)\n\n## v1.10.10 (2023-06-30)\n\n* Add Pydantic `Json` field support to settings management, [#6250](https://github.com/pydantic/pydantic/pull/6250) by [@hramezani](https://github.com/hramezani)\n* Fixed literal validator errors for unhashable values, [#6188](https://github.com/pydantic/pydantic/pull/6188) by [@markus1978](https://github.com/markus1978)\n* Fixed bug with generics receiving forward refs, [#6130](https://github.com/pydantic/pydantic/pull/6130) by [@mark-todd](https://github.com/mark-todd)\n* Update install method of FastAPI for internal tests in CI, [#6117](https://github.com/pydantic/pydantic/pull/6117) by [@Kludex](https://github.com/Kludex)\n\n## v1.10.9 (2023-06-07)\n\n* Fix trailing zeros not ignored in Decimal validation, [#5968](https://github.com/pydantic/pydantic/pull/5968) by [@hramezani](https://github.com/hramezani)\n* Fix mypy plugin for v1.4.0, [#5928](https://github.com/pydantic/pydantic/pull/5928) by [@cdce8p](https://github.com/cdce8p)\n* Add future and past date hypothesis strategies, [#5850](https://github.com/pydantic/pydantic/pull/5850) by [@bschoenmaeckers](https://github.com/bschoenmaeckers)\n* Discourage usage of Cython 3 with Pydantic 1.x, [#5845](https://github.com/pydantic/pydantic/pull/5845) by [@lig](https://github.com/lig)\n\n## v1.10.8 (2023-05-23)\n\n* Fix a bug in `Literal` usage with `typing-extension==4.6.0`, [#5826](https://github.com/pydantic/pydantic/pull/5826) by [@hramezani](https://github.com/hramezani)\n* This solves the (closed) issue [#3849](https://github.com/pydantic/pydantic/pull/3849) where aliased fields that use discriminated union fail to validate when the data contains the non-aliased field name, [#5736](https://github.com/pydantic/pydantic/pull/5736) by [@benwah](https://github.com/benwah)\n* Update email-validator dependency to >=2.0.0post2, [#5627](https://github.com/pydantic/pydantic/pull/5627) by [@adriangb](https://github.com/adriangb)\n* update `AnyClassMethod` for changes in [python/typeshed#9771](https://github.com/python/typeshed/issues/9771), [#5505](https://github.com/pydantic/pydantic/pull/5505) by [@ITProKyle](https://github.com/ITProKyle)\n\n## v1.10.7 (2023-03-22)\n\n* Fix creating schema from model using `ConstrainedStr` with `regex` as dict key, [#5223](https://github.com/pydantic/pydantic/pull/5223) by [@matejetz](https://github.com/matejetz)\n* Address bug in mypy plugin caused by explicit_package_bases=True, [#5191](https://github.com/pydantic/pydantic/pull/5191) by [@dmontagu](https://github.com/dmontagu)\n* Add implicit defaults in the mypy plugin for Field with no default argument, [#5190](https://github.com/pydantic/pydantic/pull/5190) by [@dmontagu](https://github.com/dmontagu)\n* Fix schema generated for Enum values used as Literals in discriminated unions, [#5188](https://github.com/pydantic/pydantic/pull/5188) by [@javibookline](https://github.com/javibookline)\n* Fix mypy failures caused by the pydantic mypy plugin when users define `from_orm` in their own classes, [#5187](https://github.com/pydantic/pydantic/pull/5187) by [@dmontagu](https://github.com/dmontagu)\n* Fix `InitVar` usage with pydantic dataclasses, mypy version `1.1.1` and the custom mypy plugin, [#5162](https://github.com/pydantic/pydantic/pull/5162) by [@cdce8p](https://github.com/cdce8p)\n\n## v1.10.6 (2023-03-08)\n\n* Implement logic to support creating validators from non standard callables by using defaults to identify them and unwrapping `functools.partial` and `functools.partialmethod` when checking the signature, [#5126](https://github.com/pydantic/pydantic/pull/5126) by [@JensHeinrich](https://github.com/JensHeinrich)\n* Fix mypy plugin for v1.1.1, and fix `dataclass_transform` decorator for pydantic dataclasses, [#5111](https://github.com/pydantic/pydantic/pull/5111) by [@cdce8p](https://github.com/cdce8p)\n* Raise `ValidationError`, not `ConfigError`, when a discriminator value is unhashable, [#4773](https://github.com/pydantic/pydantic/pull/4773) by [@kurtmckee](https://github.com/kurtmckee)\n\n## v1.10.5 (2023-02-15)\n\n* Fix broken parametrized bases handling with `GenericModel`s with complex sets of models, [#5052](https://github.com/pydantic/pydantic/pull/5052) by [@MarkusSintonen](https://github.com/MarkusSintonen)\n* Invalidate mypy cache if plugin config changes, [#5007](https://github.com/pydantic/pydantic/pull/5007) by [@cdce8p](https://github.com/cdce8p)\n* Fix `RecursionError` when deep-copying dataclass types wrapped by pydantic, [#4949](https://github.com/pydantic/pydantic/pull/4949) by [@mbillingr](https://github.com/mbillingr)\n* Fix `X | Y` union syntax breaking `GenericModel`, [#4146](https://github.com/pydantic/pydantic/pull/4146) by [@thenx](https://github.com/thenx)\n* Switch coverage badge to show coverage for this branch/release, [#5060](https://github.com/pydantic/pydantic/pull/5060) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n## v1.10.4 (2022-12-30)\n\n* Change dependency to `typing-extensions>=4.2.0`, [#4885](https://github.com/pydantic/pydantic/pull/4885) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n## v1.10.3 (2022-12-29)\n\n**NOTE: v1.10.3 was [\"yanked\"](https://pypi.org/help/#yanked) from PyPI due to [#4885](https://github.com/pydantic/pydantic/pull/4885) which is fixed in v1.10.4**\n\n* fix parsing of custom root models, [#4883](https://github.com/pydantic/pydantic/pull/4883) by [@gou177](https://github.com/gou177)\n* fix: use dataclass proxy for frozen or empty dataclasses, [#4878](https://github.com/pydantic/pydantic/pull/4878) by [@PrettyWood](https://github.com/PrettyWood)\n* Fix `schema` and `schema_json` on models where a model instance is a one of default values, [#4781](https://github.com/pydantic/pydantic/pull/4781) by [@Bobronium](https://github.com/Bobronium)\n* Add Jina AI to sponsors on docs index page, [#4767](https://github.com/pydantic/pydantic/pull/4767) by [@samuelcolvin](https://github.com/samuelcolvin)\n* fix: support assignment on `DataclassProxy`, [#4695](https://github.com/pydantic/pydantic/pull/4695) by [@PrettyWood](https://github.com/PrettyWood)\n* Add `postgresql+psycopg` as allowed scheme for `PostgreDsn` to make it usable with SQLAlchemy 2, [#4689](https://github.com/pydantic/pydantic/pull/4689) by [@morian](https://github.com/morian)\n* Allow dict schemas to have both `patternProperties` and `additionalProperties`, [#4641](https://github.com/pydantic/pydantic/pull/4641) by [@jparise](https://github.com/jparise)\n* Fixes error passing None for optional lists with `unique_items`, [#4568](https://github.com/pydantic/pydantic/pull/4568) by [@mfulgo](https://github.com/mfulgo)\n* Fix `GenericModel` with `Callable` param raising a `TypeError`, [#4551](https://github.com/pydantic/pydantic/pull/4551) by [@mfulgo](https://github.com/mfulgo)\n* Fix field regex with `StrictStr` type annotation, [#4538](https://github.com/pydantic/pydantic/pull/4538) by [@sisp](https://github.com/sisp)\n* Correct `dataclass_transform` keyword argument name from `field_descriptors` to `field_specifiers`, [#4500](https://github.com/pydantic/pydantic/pull/4500) by [@samuelcolvin](https://github.com/samuelcolvin)\n* fix: avoid multiple calls of `__post_init__` when dataclasses are inherited, [#4487](https://github.com/pydantic/pydantic/pull/4487) by [@PrettyWood](https://github.com/PrettyWood)\n* Reduce the size of binary wheels, [#2276](https://github.com/pydantic/pydantic/pull/2276) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n## v1.10.2 (2022-09-05)\n\n* **Revert Change:** Revert percent encoding of URL parts which was originally added in [#4224](https://github.com/pydantic/pydantic/pull/4224), [#4470](https://github.com/pydantic/pydantic/pull/4470) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Prevent long (length > `4_300`) strings/bytes as input to int fields, see\n [python/cpython#95778](https://github.com/python/cpython/issues/95778) and\n [CVE-2020-10735](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-10735), [#1477](https://github.com/pydantic/pydantic/pull/1477) by [@samuelcolvin](https://github.com/samuelcolvin)\n* fix: dataclass wrapper was not always called, [#4477](https://github.com/pydantic/pydantic/pull/4477) by [@PrettyWood](https://github.com/PrettyWood)\n* Use `tomllib` on Python 3.11 when parsing `mypy` configuration, [#4476](https://github.com/pydantic/pydantic/pull/4476) by [@hauntsaninja](https://github.com/hauntsaninja)\n* Basic fix of `GenericModel` cache to detect order of arguments in `Union` models, [#4474](https://github.com/pydantic/pydantic/pull/4474) by [@sveinugu](https://github.com/sveinugu)\n* Fix mypy plugin when using bare types like `list` and `dict` as `default_factory`, [#4457](https://github.com/pydantic/pydantic/pull/4457) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n## v1.10.1 (2022-08-31)\n\n* Add `__hash__` method to `pydancic.color.Color` class, [#4454](https://github.com/pydantic/pydantic/pull/4454) by [@czaki](https://github.com/czaki)\n\n## v1.10.0 (2022-08-30)\n\n* Refactor the whole _pydantic_ `dataclass` decorator to really act like its standard lib equivalent.\n It hence keeps `__eq__`, `__hash__`, ... and makes comparison with its non-validated version possible.\n It also fixes usage of `frozen` dataclasses in fields and usage of `default_factory` in nested dataclasses.\n The support of `Config.extra` has been added.\n Finally, config customization directly via a `dict` is now possible, [#2557](https://github.com/pydantic/pydantic/pull/2557) by [@PrettyWood](https://github.com/PrettyWood)\n

\n **BREAKING CHANGES:**\n - The `compiled` boolean (whether _pydantic_ is compiled with cython) has been moved from `main.py` to `version.py`\n - Now that `Config.extra` is supported, `dataclass` ignores by default extra arguments (like `BaseModel`)\n* Fix PEP487 `__set_name__` protocol in `BaseModel` for PrivateAttrs, [#4407](https://github.com/pydantic/pydantic/pull/4407) by [@tlambert03](https://github.com/tlambert03)\n* Allow for custom parsing of environment variables via `parse_env_var` in `Config`, [#4406](https://github.com/pydantic/pydantic/pull/4406) by [@acmiyaguchi](https://github.com/acmiyaguchi)\n* Rename `master` to `main`, [#4405](https://github.com/pydantic/pydantic/pull/4405) by [@hramezani](https://github.com/hramezani)\n* Fix `StrictStr` does not raise `ValidationError` when `max_length` is present in `Field`, [#4388](https://github.com/pydantic/pydantic/pull/4388) by [@hramezani](https://github.com/hramezani)\n* Make `SecretStr` and `SecretBytes` hashable, [#4387](https://github.com/pydantic/pydantic/pull/4387) by [@chbndrhnns](https://github.com/chbndrhnns)\n* Fix `StrictBytes` does not raise `ValidationError` when `max_length` is present in `Field`, [#4380](https://github.com/pydantic/pydantic/pull/4380) by [@JeanArhancet](https://github.com/JeanArhancet)\n* Add support for bare `type`, [#4375](https://github.com/pydantic/pydantic/pull/4375) by [@hramezani](https://github.com/hramezani)\n* Support Python 3.11, including binaries for 3.11 in PyPI, [#4374](https://github.com/pydantic/pydantic/pull/4374) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add support for `re.Pattern`, [#4366](https://github.com/pydantic/pydantic/pull/4366) by [@hramezani](https://github.com/hramezani)\n* Fix `__post_init_post_parse__` is incorrectly passed keyword arguments when no `__post_init__` is defined, [#4361](https://github.com/pydantic/pydantic/pull/4361) by [@hramezani](https://github.com/hramezani)\n* Fix implicitly importing `ForwardRef` and `Callable` from `pydantic.typing` instead of `typing` and also expose `MappingIntStrAny`, [#4358](https://github.com/pydantic/pydantic/pull/4358) by [@aminalaee](https://github.com/aminalaee)\n* remove `Any` types from the `dataclass` decorator so it can be used with the `disallow_any_expr` mypy option, [#4356](https://github.com/pydantic/pydantic/pull/4356) by [@DetachHead](https://github.com/DetachHead)\n* moved repo to `pydantic/pydantic`, [#4348](https://github.com/pydantic/pydantic/pull/4348) by [@yezz123](https://github.com/yezz123)\n* fix \"extra fields not permitted\" error when dataclass with `Extra.forbid` is validated multiple times, [#4343](https://github.com/pydantic/pydantic/pull/4343) by [@detachhead](https://github.com/detachhead)\n* Add Python 3.9 and 3.10 examples to docs, [#4339](https://github.com/pydantic/pydantic/pull/4339) by [@Bobronium](https://github.com/Bobronium)\n* Discriminated union models now use `oneOf` instead of `anyOf` when generating OpenAPI schema definitions, [#4335](https://github.com/pydantic/pydantic/pull/4335) by [@MaxwellPayne](https://github.com/MaxwellPayne)\n* Allow type checkers to infer inner type of `Json` type. `Json[list[str]]` will be now inferred as `list[str]`,\n `Json[Any]` should be used instead of plain `Json`.\n Runtime behaviour is not changed, [#4332](https://github.com/pydantic/pydantic/pull/4332) by [@Bobronium](https://github.com/Bobronium)\n* Allow empty string aliases by using a `alias is not None` check, rather than `bool(alias)`, [#4253](https://github.com/pydantic/pydantic/pull/4253) by [@sergeytsaplin](https://github.com/sergeytsaplin)\n* Update `ForwardRef`s in `Field.outer_type_`, [#4249](https://github.com/pydantic/pydantic/pull/4249) by [@JacobHayes](https://github.com/JacobHayes)\n* The use of `__dataclass_transform__` has been replaced by `typing_extensions.dataclass_transform`, which is the preferred way to mark pydantic models as a dataclass under [PEP 681](https://peps.python.org/pep-0681/), [#4241](https://github.com/pydantic/pydantic/pull/4241) by [@multimeric](https://github.com/multimeric)\n* Use parent model's `Config` when validating nested `NamedTuple` fields, [#4219](https://github.com/pydantic/pydantic/pull/4219) by [@synek](https://github.com/synek)\n* Update `BaseModel.construct` to work with aliased Fields, [#4192](https://github.com/pydantic/pydantic/pull/4192) by [@kylebamos](https://github.com/kylebamos)\n* Catch certain raised errors in `smart_deepcopy` and revert to `deepcopy` if so, [#4184](https://github.com/pydantic/pydantic/pull/4184) by [@coneybeare](https://github.com/coneybeare)\n* Add `Config.anystr_upper` and `to_upper` kwarg to constr and conbytes, [#4165](https://github.com/pydantic/pydantic/pull/4165) by [@satheler](https://github.com/satheler)\n* Fix JSON schema for `set` and `frozenset` when they include default values, [#4155](https://github.com/pydantic/pydantic/pull/4155) by [@aminalaee](https://github.com/aminalaee)\n* Teach the mypy plugin that methods decorated by `@validator` are classmethods, [#4102](https://github.com/pydantic/pydantic/pull/4102) by [@DMRobertson](https://github.com/DMRobertson)\n* Improve mypy plugin's ability to detect required fields, [#4086](https://github.com/pydantic/pydantic/pull/4086) by [@richardxia](https://github.com/richardxia)\n* Support fields of type `Type[]` in schema, [#4051](https://github.com/pydantic/pydantic/pull/4051) by [@aminalaee](https://github.com/aminalaee)\n* Add `default` value in JSON Schema when `const=True`, [#4031](https://github.com/pydantic/pydantic/pull/4031) by [@aminalaee](https://github.com/aminalaee)\n* Adds reserved word check to signature generation logic, [#4011](https://github.com/pydantic/pydantic/pull/4011) by [@strue36](https://github.com/strue36)\n* Fix Json strategy failure for the complex nested field, [#4005](https://github.com/pydantic/pydantic/pull/4005) by [@sergiosim](https://github.com/sergiosim)\n* Add JSON-compatible float constraint `allow_inf_nan`, [#3994](https://github.com/pydantic/pydantic/pull/3994) by [@tiangolo](https://github.com/tiangolo)\n* Remove undefined behaviour when `env_prefix` had characters in common with `env_nested_delimiter`, [#3975](https://github.com/pydantic/pydantic/pull/3975) by [@arsenron](https://github.com/arsenron)\n* Support generics model with `create_model`, [#3945](https://github.com/pydantic/pydantic/pull/3945) by [@hot123s](https://github.com/hot123s)\n* allow submodels to overwrite extra field info, [#3934](https://github.com/pydantic/pydantic/pull/3934) by [@PrettyWood](https://github.com/PrettyWood)\n* Document and test structural pattern matching ([PEP 636](https://peps.python.org/pep-0636/)) on `BaseModel`, [#3920](https://github.com/pydantic/pydantic/pull/3920) by [@irgolic](https://github.com/irgolic)\n* Fix incorrect deserialization of python timedelta object to ISO 8601 for negative time deltas.\n Minus was serialized in incorrect place (\"P-1DT23H59M59.888735S\" instead of correct \"-P1DT23H59M59.888735S\"), [#3899](https://github.com/pydantic/pydantic/pull/3899) by [@07pepa](https://github.com/07pepa)\n* Fix validation of discriminated union fields with an alias when passing a model instance, [#3846](https://github.com/pydantic/pydantic/pull/3846) by [@chornsby](https://github.com/chornsby)\n* Add a CockroachDsn type to validate CockroachDB connection strings. The type\n supports the following schemes: `cockroachdb`, `cockroachdb+psycopg2` and `cockroachdb+asyncpg`, [#3839](https://github.com/pydantic/pydantic/pull/3839) by [@blubber](https://github.com/blubber)\n* Fix MyPy plugin to not override pre-existing `__init__` method in models, [#3824](https://github.com/pydantic/pydantic/pull/3824) by [@patrick91](https://github.com/patrick91)\n* Fix mypy version checking, [#3783](https://github.com/pydantic/pydantic/pull/3783) by [@KotlinIsland](https://github.com/KotlinIsland)\n* support overwriting dunder attributes of `BaseModel` instances, [#3777](https://github.com/pydantic/pydantic/pull/3777) by [@PrettyWood](https://github.com/PrettyWood)\n* Added `ConstrainedDate` and `condate`, [#3740](https://github.com/pydantic/pydantic/pull/3740) by [@hottwaj](https://github.com/hottwaj)\n* Support `kw_only` in dataclasses, [#3670](https://github.com/pydantic/pydantic/pull/3670) by [@detachhead](https://github.com/detachhead)\n* Add comparison method for `Color` class, [#3646](https://github.com/pydantic/pydantic/pull/3646) by [@aminalaee](https://github.com/aminalaee)\n* Drop support for python3.6, associated cleanup, [#3605](https://github.com/pydantic/pydantic/pull/3605) by [@samuelcolvin](https://github.com/samuelcolvin)\n* created new function `to_lower_camel()` for \"non pascal case\" camel case, [#3463](https://github.com/pydantic/pydantic/pull/3463) by [@schlerp](https://github.com/schlerp)\n* Add checks to `default` and `default_factory` arguments in Mypy plugin, [#3430](https://github.com/pydantic/pydantic/pull/3430) by [@klaa97](https://github.com/klaa97)\n* fix mangling of `inspect.signature` for `BaseModel`, [#3413](https://github.com/pydantic/pydantic/pull/3413) by [@fix-inspect-signature](https://github.com/fix-inspect-signature)\n* Adds the `SecretField` abstract class so that all the current and future secret fields like `SecretStr` and `SecretBytes` will derive from it, [#3409](https://github.com/pydantic/pydantic/pull/3409) by [@expobrain](https://github.com/expobrain)\n* Support multi hosts validation in `PostgresDsn`, [#3337](https://github.com/pydantic/pydantic/pull/3337) by [@rglsk](https://github.com/rglsk)\n* Fix parsing of very small numeric timedelta values, [#3315](https://github.com/pydantic/pydantic/pull/3315) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Update `SecretsSettingsSource` to respect `config.case_sensitive`, [#3273](https://github.com/pydantic/pydantic/pull/3273) by [@JeanArhancet](https://github.com/JeanArhancet)\n* Add MongoDB network data source name (DSN) schema, [#3229](https://github.com/pydantic/pydantic/pull/3229) by [@snosratiershad](https://github.com/snosratiershad)\n* Add support for multiple dotenv files, [#3222](https://github.com/pydantic/pydantic/pull/3222) by [@rekyungmin](https://github.com/rekyungmin)\n* Raise an explicit `ConfigError` when multiple fields are incorrectly set for a single validator, [#3215](https://github.com/pydantic/pydantic/pull/3215) by [@SunsetOrange](https://github.com/SunsetOrange)\n* Allow ellipsis on `Field`s inside `Annotated` for `TypedDicts` required, [#3133](https://github.com/pydantic/pydantic/pull/3133) by [@ezegomez](https://github.com/ezegomez)\n* Catch overflow errors in `int_validator`, [#3112](https://github.com/pydantic/pydantic/pull/3112) by [@ojii](https://github.com/ojii)\n* Adds a `__rich_repr__` method to `Representation` class which enables pretty printing with [Rich](https://github.com/willmcgugan/rich), [#3099](https://github.com/pydantic/pydantic/pull/3099) by [@willmcgugan](https://github.com/willmcgugan)\n* Add percent encoding in `AnyUrl` and descendent types, [#3061](https://github.com/pydantic/pydantic/pull/3061) by [@FaresAhmedb](https://github.com/FaresAhmedb)\n* `validate_arguments` decorator now supports `alias`, [#3019](https://github.com/pydantic/pydantic/pull/3019) by [@MAD-py](https://github.com/MAD-py)\n* Avoid `__dict__` and `__weakref__` attributes in `AnyUrl` and IP address fields, [#2890](https://github.com/pydantic/pydantic/pull/2890) by [@nuno-andre](https://github.com/nuno-andre)\n* Add ability to use `Final` in a field type annotation, [#2766](https://github.com/pydantic/pydantic/pull/2766) by [@uriyyo](https://github.com/uriyyo)\n* Update requirement to `typing_extensions>=4.1.0` to guarantee `dataclass_transform` is available, [#4424](https://github.com/pydantic/pydantic/pull/4424) by [@commonism](https://github.com/commonism)\n* Add Explosion and AWS to main sponsors, [#4413](https://github.com/pydantic/pydantic/pull/4413) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Update documentation for `copy_on_model_validation` to reflect recent changes, [#4369](https://github.com/pydantic/pydantic/pull/4369) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Runtime warning if `__slots__` is passed to `create_model`, `__slots__` is then ignored, [#4432](https://github.com/pydantic/pydantic/pull/4432) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add type hints to `BaseSettings.Config` to avoid mypy errors, also correct mypy version compatibility notice in docs, [#4450](https://github.com/pydantic/pydantic/pull/4450) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n## v1.10.0b1 (2022-08-24)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v1.10.0b1) for details.\n\n## v1.10.0a2 (2022-08-24)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v1.10.0a2) for details.\n\n## v1.10.0a1 (2022-08-22)\n\nPre-release, see [the GitHub release](https://github.com/pydantic/pydantic/releases/tag/v1.10.0a1) for details.\n\n## v1.9.2 (2022-08-11)\n\n**Revert Breaking Change**: _v1.9.1_ introduced a breaking change where model fields were\ndeep copied by default, this release reverts the default behaviour to match _v1.9.0_ and before,\nwhile also allow deep-copy behaviour via `copy_on_model_validation = 'deep'`. See [#4092](https://github.com/pydantic/pydantic/pull/4092) for more information.\n\n* Allow for shallow copies of model fields, `Config.copy_on_model_validation` is now a str which must be\n `'none'`, `'deep'`, or `'shallow'` corresponding to not copying, deep copy & shallow copy; default `'shallow'`,\n [#4093](https://github.com/pydantic/pydantic/pull/4093) by [@timkpaine](https://github.com/timkpaine)\n\n## v1.9.1 (2022-05-19)\n\nThank you to pydantic's sponsors:\n[@tiangolo](https://github.com/tiangolo), [@stellargraph](https://github.com/stellargraph), [@JonasKs](https://github.com/JonasKs), [@grillazz](https://github.com/grillazz), [@Mazyod](https://github.com/Mazyod), [@kevinalh](https://github.com/kevinalh), [@chdsbd](https://github.com/chdsbd), [@povilasb](https://github.com/povilasb), [@povilasb](https://github.com/povilasb), [@jina-ai](https://github.com/jina-ai),\n[@mainframeindustries](https://github.com/mainframeindustries), [@robusta-dev](https://github.com/robusta-dev), [@SendCloud](https://github.com/SendCloud), [@rszamszur](https://github.com/rszamszur), [@jodal](https://github.com/jodal), [@hardbyte](https://github.com/hardbyte), [@corleyma](https://github.com/corleyma), [@daddycocoaman](https://github.com/daddycocoaman),\n[@Rehket](https://github.com/Rehket), [@jokull](https://github.com/jokull), [@reillysiemens](https://github.com/reillysiemens), [@westonsteimel](https://github.com/westonsteimel), [@primer-io](https://github.com/primer-io), [@koxudaxi](https://github.com/koxudaxi), [@browniebroke](https://github.com/browniebroke), [@stradivari96](https://github.com/stradivari96),\n[@adriangb](https://github.com/adriangb), [@kamalgill](https://github.com/kamalgill), [@jqueguiner](https://github.com/jqueguiner), [@dev-zero](https://github.com/dev-zero), [@datarootsio](https://github.com/datarootsio), [@RedCarpetUp](https://github.com/RedCarpetUp)\nfor their kind support.\n\n* Limit the size of `generics._generic_types_cache` and `generics._assigned_parameters`\n to avoid unlimited increase in memory usage, [#4083](https://github.com/pydantic/pydantic/pull/4083) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add Jupyverse and FPS as Jupyter projects using pydantic, [#4082](https://github.com/pydantic/pydantic/pull/4082) by [@davidbrochart](https://github.com/davidbrochart)\n* Speedup `__isinstancecheck__` on pydantic models when the type is not a model, may also avoid memory \"leaks\", [#4081](https://github.com/pydantic/pydantic/pull/4081) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix in-place modification of `FieldInfo` that caused problems with PEP 593 type aliases, [#4067](https://github.com/pydantic/pydantic/pull/4067) by [@adriangb](https://github.com/adriangb)\n* Add support for autocomplete in VS Code via `__dataclass_transform__` when using `pydantic.dataclasses.dataclass`, [#4006](https://github.com/pydantic/pydantic/pull/4006) by [@giuliano-oliveira](https://github.com/giuliano-oliveira)\n* Remove benchmarks from codebase and docs, [#3973](https://github.com/pydantic/pydantic/pull/3973) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Typing checking with pyright in CI, improve docs on vscode/pylance/pyright, [#3972](https://github.com/pydantic/pydantic/pull/3972) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix nested Python dataclass schema regression, [#3819](https://github.com/pydantic/pydantic/pull/3819) by [@himbeles](https://github.com/himbeles)\n* Update documentation about lazy evaluation of sources for Settings, [#3806](https://github.com/pydantic/pydantic/pull/3806) by [@garyd203](https://github.com/garyd203)\n* Prevent subclasses of bytes being converted to bytes, [#3706](https://github.com/pydantic/pydantic/pull/3706) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fixed \"error checking inheritance of\" when using PEP585 and PEP604 type hints, [#3681](https://github.com/pydantic/pydantic/pull/3681) by [@aleksul](https://github.com/aleksul)\n* Allow self referencing `ClassVar`s in models, [#3679](https://github.com/pydantic/pydantic/pull/3679) by [@samuelcolvin](https://github.com/samuelcolvin)\n* **Breaking Change, see [#4106](https://github.com/pydantic/pydantic/pull/4106)**: Fix issue with self-referencing dataclass, [#3675](https://github.com/pydantic/pydantic/pull/3675) by [@uriyyo](https://github.com/uriyyo)\n* Include non-standard port numbers in rendered URLs, [#3652](https://github.com/pydantic/pydantic/pull/3652) by [@dolfinus](https://github.com/dolfinus)\n* `Config.copy_on_model_validation` does a deep copy and not a shallow one, [#3641](https://github.com/pydantic/pydantic/pull/3641) by [@PrettyWood](https://github.com/PrettyWood)\n* fix: clarify that discriminated unions do not support singletons, [#3636](https://github.com/pydantic/pydantic/pull/3636) by [@tommilligan](https://github.com/tommilligan)\n* Add `read_text(encoding='utf-8')` for `setup.py`, [#3625](https://github.com/pydantic/pydantic/pull/3625) by [@hswong3i](https://github.com/hswong3i)\n* Fix JSON Schema generation for Discriminated Unions within lists, [#3608](https://github.com/pydantic/pydantic/pull/3608) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n## v1.9.0 (2021-12-31)\n\nThank you to pydantic's sponsors:\n[@sthagen](https://github.com/sthagen), [@timdrijvers](https://github.com/timdrijvers), [@toinbis](https://github.com/toinbis), [@koxudaxi](https://github.com/koxudaxi), [@ginomempin](https://github.com/ginomempin), [@primer-io](https://github.com/primer-io), [@and-semakin](https://github.com/and-semakin), [@westonsteimel](https://github.com/westonsteimel), [@reillysiemens](https://github.com/reillysiemens),\n[@es3n1n](https://github.com/es3n1n), [@jokull](https://github.com/jokull), [@JonasKs](https://github.com/JonasKs), [@Rehket](https://github.com/Rehket), [@corleyma](https://github.com/corleyma), [@daddycocoaman](https://github.com/daddycocoaman), [@hardbyte](https://github.com/hardbyte), [@datarootsio](https://github.com/datarootsio), [@jodal](https://github.com/jodal), [@aminalaee](https://github.com/aminalaee), [@rafsaf](https://github.com/rafsaf),\n[@jqueguiner](https://github.com/jqueguiner), [@chdsbd](https://github.com/chdsbd), [@kevinalh](https://github.com/kevinalh), [@Mazyod](https://github.com/Mazyod), [@grillazz](https://github.com/grillazz), [@JonasKs](https://github.com/JonasKs), [@simw](https://github.com/simw), [@leynier](https://github.com/leynier), [@xfenix](https://github.com/xfenix)\nfor their kind support.\n\n### Highlights\n\n* add Python 3.10 support, [#2885](https://github.com/pydantic/pydantic/pull/2885) by [@PrettyWood](https://github.com/PrettyWood)\n* [Discriminated unions](https://docs.pydantic.dev/usage/types/#discriminated-unions-aka-tagged-unions), [#619](https://github.com/pydantic/pydantic/pull/619) by [@PrettyWood](https://github.com/PrettyWood)\n* [`Config.smart_union` for better union logic](https://docs.pydantic.dev/usage/model_config/#smart-union), [#2092](https://github.com/pydantic/pydantic/pull/2092) by [@PrettyWood](https://github.com/PrettyWood)\n* Binaries for Macos M1 CPUs, [#3498](https://github.com/pydantic/pydantic/pull/3498) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Complex types can be set via [nested environment variables](https://docs.pydantic.dev/usage/settings/#parsing-environment-variable-values), e.g. `foo___bar`, [#3159](https://github.com/pydantic/pydantic/pull/3159) by [@Air-Mark](https://github.com/Air-Mark)\n* add a dark mode to _pydantic_ documentation, [#2913](https://github.com/pydantic/pydantic/pull/2913) by [@gbdlin](https://github.com/gbdlin)\n* Add support for autocomplete in VS Code via `__dataclass_transform__`, [#2721](https://github.com/pydantic/pydantic/pull/2721) by [@tiangolo](https://github.com/tiangolo)\n* Add \"exclude\" as a field parameter so that it can be configured using model config, [#660](https://github.com/pydantic/pydantic/pull/660) by [@daviskirk](https://github.com/daviskirk)\n\n### v1.9.0 (2021-12-31) Changes\n\n* Apply `update_forward_refs` to `Config.json_encodes` prevent name clashes in types defined via strings, [#3583](https://github.com/pydantic/pydantic/pull/3583) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Extend pydantic's mypy plugin to support mypy versions `0.910`, `0.920`, `0.921` & `0.930`, [#3573](https://github.com/pydantic/pydantic/pull/3573) & [#3594](https://github.com/pydantic/pydantic/pull/3594) by [@PrettyWood](https://github.com/PrettyWood), [@christianbundy](https://github.com/christianbundy), [@samuelcolvin](https://github.com/samuelcolvin)\n\n### v1.9.0a2 (2021-12-24) Changes\n\n* support generic models with discriminated union, [#3551](https://github.com/pydantic/pydantic/pull/3551) by [@PrettyWood](https://github.com/PrettyWood)\n* keep old behaviour of `json()` by default, [#3542](https://github.com/pydantic/pydantic/pull/3542) by [@PrettyWood](https://github.com/PrettyWood)\n* Removed typing-only `__root__` attribute from `BaseModel`, [#3540](https://github.com/pydantic/pydantic/pull/3540) by [@layday](https://github.com/layday)\n* Build Python 3.10 wheels, [#3539](https://github.com/pydantic/pydantic/pull/3539) by [@mbachry](https://github.com/mbachry)\n* Fix display of `extra` fields with model `__repr__`, [#3234](https://github.com/pydantic/pydantic/pull/3234) by [@cocolman](https://github.com/cocolman)\n* models copied via `Config.copy_on_model_validation` always have all fields, [#3201](https://github.com/pydantic/pydantic/pull/3201) by [@PrettyWood](https://github.com/PrettyWood)\n* nested ORM from nested dictionaries, [#3182](https://github.com/pydantic/pydantic/pull/3182) by [@PrettyWood](https://github.com/PrettyWood)\n* fix link to discriminated union section by [@PrettyWood](https://github.com/PrettyWood)\n\n### v1.9.0a1 (2021-12-18) Changes\n\n* Add support for `Decimal`-specific validation configurations in `Field()`, additionally to using `condecimal()`,\n to allow better support from editors and tooling, [#3507](https://github.com/pydantic/pydantic/pull/3507) by [@tiangolo](https://github.com/tiangolo)\n* Add `arm64` binaries suitable for MacOS with an M1 CPU to PyPI, [#3498](https://github.com/pydantic/pydantic/pull/3498) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix issue where `None` was considered invalid when using a `Union` type containing `Any` or `object`, [#3444](https://github.com/pydantic/pydantic/pull/3444) by [@tharradine](https://github.com/tharradine)\n* When generating field schema, pass optional `field` argument (of type\n `pydantic.fields.ModelField`) to `__modify_schema__()` if present, [#3434](https://github.com/pydantic/pydantic/pull/3434) by [@jasujm](https://github.com/jasujm)\n* Fix issue when pydantic fail to parse `typing.ClassVar` string type annotation, [#3401](https://github.com/pydantic/pydantic/pull/3401) by [@uriyyo](https://github.com/uriyyo)\n* Mention Python >= 3.9.2 as an alternative to `typing_extensions.TypedDict`, [#3374](https://github.com/pydantic/pydantic/pull/3374) by [@BvB93](https://github.com/BvB93)\n* Changed the validator method name in the [Custom Errors example](https://docs.pydantic.dev/usage/models/#custom-errors)\n to more accurately describe what the validator is doing; changed from `name_must_contain_space` to ` value_must_equal_bar`, [#3327](https://github.com/pydantic/pydantic/pull/3327) by [@michaelrios28](https://github.com/michaelrios28)\n* Add `AmqpDsn` class, [#3254](https://github.com/pydantic/pydantic/pull/3254) by [@kludex](https://github.com/kludex)\n* Always use `Enum` value as default in generated JSON schema, [#3190](https://github.com/pydantic/pydantic/pull/3190) by [@joaommartins](https://github.com/joaommartins)\n* Add support for Mypy 0.920, [#3175](https://github.com/pydantic/pydantic/pull/3175) by [@christianbundy](https://github.com/christianbundy)\n* `validate_arguments` now supports `extra` customization (used to always be `Extra.forbid`), [#3161](https://github.com/pydantic/pydantic/pull/3161) by [@PrettyWood](https://github.com/PrettyWood)\n* Complex types can be set by nested environment variables, [#3159](https://github.com/pydantic/pydantic/pull/3159) by [@Air-Mark](https://github.com/Air-Mark)\n* Fix mypy plugin to collect fields based on `pydantic.utils.is_valid_field` so that it ignores untyped private variables, [#3146](https://github.com/pydantic/pydantic/pull/3146) by [@hi-ogawa](https://github.com/hi-ogawa)\n* fix `validate_arguments` issue with `Config.validate_all`, [#3135](https://github.com/pydantic/pydantic/pull/3135) by [@PrettyWood](https://github.com/PrettyWood)\n* avoid dict coercion when using dict subclasses as field type, [#3122](https://github.com/pydantic/pydantic/pull/3122) by [@PrettyWood](https://github.com/PrettyWood)\n* add support for `object` type, [#3062](https://github.com/pydantic/pydantic/pull/3062) by [@PrettyWood](https://github.com/PrettyWood)\n* Updates pydantic dataclasses to keep `_special` properties on parent classes, [#3043](https://github.com/pydantic/pydantic/pull/3043) by [@zulrang](https://github.com/zulrang)\n* Add a `TypedDict` class for error objects, [#3038](https://github.com/pydantic/pydantic/pull/3038) by [@matthewhughes934](https://github.com/matthewhughes934)\n* Fix support for using a subclass of an annotation as a default, [#3018](https://github.com/pydantic/pydantic/pull/3018) by [@JacobHayes](https://github.com/JacobHayes)\n* make `create_model_from_typeddict` mypy compliant, [#3008](https://github.com/pydantic/pydantic/pull/3008) by [@PrettyWood](https://github.com/PrettyWood)\n* Make multiple inheritance work when using `PrivateAttr`, [#2989](https://github.com/pydantic/pydantic/pull/2989) by [@hmvp](https://github.com/hmvp)\n* Parse environment variables as JSON, if they have a `Union` type with a complex subfield, [#2936](https://github.com/pydantic/pydantic/pull/2936) by [@cbartz](https://github.com/cbartz)\n* Prevent `StrictStr` permitting `Enum` values where the enum inherits from `str`, [#2929](https://github.com/pydantic/pydantic/pull/2929) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Make `SecretsSettingsSource` parse values being assigned to fields of complex types when sourced from a secrets file,\n just as when sourced from environment variables, [#2917](https://github.com/pydantic/pydantic/pull/2917) by [@davidmreed](https://github.com/davidmreed)\n* add a dark mode to _pydantic_ documentation, [#2913](https://github.com/pydantic/pydantic/pull/2913) by [@gbdlin](https://github.com/gbdlin)\n* Make `pydantic-mypy` plugin compatible with `pyproject.toml` configuration, consistent with `mypy` changes.\n See the [doc](https://docs.pydantic.dev/mypy_plugin/#configuring-the-plugin) for more information, [#2908](https://github.com/pydantic/pydantic/pull/2908) by [@jrwalk](https://github.com/jrwalk)\n* add Python 3.10 support, [#2885](https://github.com/pydantic/pydantic/pull/2885) by [@PrettyWood](https://github.com/PrettyWood)\n* Correctly parse generic models with `Json[T]`, [#2860](https://github.com/pydantic/pydantic/pull/2860) by [@geekingfrog](https://github.com/geekingfrog)\n* Update contrib docs re: Python version to use for building docs, [#2856](https://github.com/pydantic/pydantic/pull/2856) by [@paxcodes](https://github.com/paxcodes)\n* Clarify documentation about _pydantic_'s support for custom validation and strict type checking,\n despite _pydantic_ being primarily a parsing library, [#2855](https://github.com/pydantic/pydantic/pull/2855) by [@paxcodes](https://github.com/paxcodes)\n* Fix schema generation for `Deque` fields, [#2810](https://github.com/pydantic/pydantic/pull/2810) by [@sergejkozin](https://github.com/sergejkozin)\n* fix an edge case when mixing constraints and `Literal`, [#2794](https://github.com/pydantic/pydantic/pull/2794) by [@PrettyWood](https://github.com/PrettyWood)\n* Fix postponed annotation resolution for `NamedTuple` and `TypedDict` when they're used directly as the type of fields\n within Pydantic models, [#2760](https://github.com/pydantic/pydantic/pull/2760) by [@jameysharp](https://github.com/jameysharp)\n* Fix bug when `mypy` plugin fails on `construct` method call for `BaseSettings` derived classes, [#2753](https://github.com/pydantic/pydantic/pull/2753) by [@uriyyo](https://github.com/uriyyo)\n* Add function overloading for a `pydantic.create_model` function, [#2748](https://github.com/pydantic/pydantic/pull/2748) by [@uriyyo](https://github.com/uriyyo)\n* Fix mypy plugin issue with self field declaration, [#2743](https://github.com/pydantic/pydantic/pull/2743) by [@uriyyo](https://github.com/uriyyo)\n* The colon at the end of the line \"The fields which were supplied when user was initialised:\" suggests that the code following it is related.\n Changed it to a period, [#2733](https://github.com/pydantic/pydantic/pull/2733) by [@krisaoe](https://github.com/krisaoe)\n* Renamed variable `schema` to `schema_` to avoid shadowing of global variable name, [#2724](https://github.com/pydantic/pydantic/pull/2724) by [@shahriyarr](https://github.com/shahriyarr)\n* Add support for autocomplete in VS Code via `__dataclass_transform__`, [#2721](https://github.com/pydantic/pydantic/pull/2721) by [@tiangolo](https://github.com/tiangolo)\n* add missing type annotations in `BaseConfig` and handle `max_length = 0`, [#2719](https://github.com/pydantic/pydantic/pull/2719) by [@PrettyWood](https://github.com/PrettyWood)\n* Change `orm_mode` checking to allow recursive ORM mode parsing with dicts, [#2718](https://github.com/pydantic/pydantic/pull/2718) by [@nuno-andre](https://github.com/nuno-andre)\n* Add episode 313 of the *Talk Python To Me* podcast, where Michael Kennedy and Samuel Colvin discuss Pydantic, to the docs, [#2712](https://github.com/pydantic/pydantic/pull/2712) by [@RatulMaharaj](https://github.com/RatulMaharaj)\n* fix JSON schema generation when a field is of type `NamedTuple` and has a default value, [#2707](https://github.com/pydantic/pydantic/pull/2707) by [@PrettyWood](https://github.com/PrettyWood)\n* `Enum` fields now properly support extra kwargs in schema generation, [#2697](https://github.com/pydantic/pydantic/pull/2697) by [@sammchardy](https://github.com/sammchardy)\n* **Breaking Change, see [#3780](https://github.com/pydantic/pydantic/pull/3780)**: Make serialization of referenced pydantic models possible, [#2650](https://github.com/pydantic/pydantic/pull/2650) by [@PrettyWood](https://github.com/PrettyWood)\n* Add `uniqueItems` option to `ConstrainedList`, [#2618](https://github.com/pydantic/pydantic/pull/2618) by [@nuno-andre](https://github.com/nuno-andre)\n* Try to evaluate forward refs automatically at model creation, [#2588](https://github.com/pydantic/pydantic/pull/2588) by [@uriyyo](https://github.com/uriyyo)\n* Switch docs preview and coverage display to use [smokeshow](https://smokeshow.helpmanual.io/), [#2580](https://github.com/pydantic/pydantic/pull/2580) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add `__version__` attribute to pydantic module, [#2572](https://github.com/pydantic/pydantic/pull/2572) by [@paxcodes](https://github.com/paxcodes)\n* Add `postgresql+asyncpg`, `postgresql+pg8000`, `postgresql+psycopg2`, `postgresql+psycopg2cffi`, `postgresql+py-postgresql`\n and `postgresql+pygresql` schemes for `PostgresDsn`, [#2567](https://github.com/pydantic/pydantic/pull/2567) by [@postgres-asyncpg](https://github.com/postgres-asyncpg)\n* Enable the Hypothesis plugin to generate a constrained decimal when the `decimal_places` argument is specified, [#2524](https://github.com/pydantic/pydantic/pull/2524) by [@cwe5590](https://github.com/cwe5590)\n* Allow `collections.abc.Callable` to be used as type in Python 3.9, [#2519](https://github.com/pydantic/pydantic/pull/2519) by [@daviskirk](https://github.com/daviskirk)\n* Documentation update how to custom compile pydantic when using pip install, small change in `setup.py`\n to allow for custom CFLAGS when compiling, [#2517](https://github.com/pydantic/pydantic/pull/2517) by [@peterroelants](https://github.com/peterroelants)\n* remove side effect of `default_factory` to run it only once even if `Config.validate_all` is set, [#2515](https://github.com/pydantic/pydantic/pull/2515) by [@PrettyWood](https://github.com/PrettyWood)\n* Add lookahead to ip regexes for `AnyUrl` hosts. This allows urls with DNS labels\n looking like IPs to validate as they are perfectly valid host names, [#2512](https://github.com/pydantic/pydantic/pull/2512) by [@sbv-csis](https://github.com/sbv-csis)\n* Set `minItems` and `maxItems` in generated JSON schema for fixed-length tuples, [#2497](https://github.com/pydantic/pydantic/pull/2497) by [@PrettyWood](https://github.com/PrettyWood)\n* Add `strict` argument to `conbytes`, [#2489](https://github.com/pydantic/pydantic/pull/2489) by [@koxudaxi](https://github.com/koxudaxi)\n* Support user defined generic field types in generic models, [#2465](https://github.com/pydantic/pydantic/pull/2465) by [@daviskirk](https://github.com/daviskirk)\n* Add an example and a short explanation of subclassing `GetterDict` to docs, [#2463](https://github.com/pydantic/pydantic/pull/2463) by [@nuno-andre](https://github.com/nuno-andre)\n* add `KafkaDsn` type, `HttpUrl` now has default port 80 for http and 443 for https, [#2447](https://github.com/pydantic/pydantic/pull/2447) by [@MihanixA](https://github.com/MihanixA)\n* Add `PastDate` and `FutureDate` types, [#2425](https://github.com/pydantic/pydantic/pull/2425) by [@Kludex](https://github.com/Kludex)\n* Support generating schema for `Generic` fields with subtypes, [#2375](https://github.com/pydantic/pydantic/pull/2375) by [@maximberg](https://github.com/maximberg)\n* fix(encoder): serialize `NameEmail` to str, [#2341](https://github.com/pydantic/pydantic/pull/2341) by [@alecgerona](https://github.com/alecgerona)\n* add `Config.smart_union` to prevent coercion in `Union` if possible, see\n [the doc](https://docs.pydantic.dev/usage/model_config/#smart-union) for more information, [#2092](https://github.com/pydantic/pydantic/pull/2092) by [@PrettyWood](https://github.com/PrettyWood)\n* Add ability to use `typing.Counter` as a model field type, [#2060](https://github.com/pydantic/pydantic/pull/2060) by [@uriyyo](https://github.com/uriyyo)\n* Add parameterised subclasses to `__bases__` when constructing new parameterised classes, so that `A <: B => A[int] <: B[int]`, [#2007](https://github.com/pydantic/pydantic/pull/2007) by [@diabolo-dan](https://github.com/diabolo-dan)\n* Create `FileUrl` type that allows URLs that conform to [RFC 8089](https://tools.ietf.org/html/rfc8089#section-2).\n Add `host_required` parameter, which is `True` by default (`AnyUrl` and subclasses), `False` in `RedisDsn`, `FileUrl`, [#1983](https://github.com/pydantic/pydantic/pull/1983) by [@vgerak](https://github.com/vgerak)\n* add `confrozenset()`, analogous to `conset()` and `conlist()`, [#1897](https://github.com/pydantic/pydantic/pull/1897) by [@PrettyWood](https://github.com/PrettyWood)\n* stop calling parent class `root_validator` if overridden, [#1895](https://github.com/pydantic/pydantic/pull/1895) by [@PrettyWood](https://github.com/PrettyWood)\n* Add `repr` (defaults to `True`) parameter to `Field`, to hide it from the default representation of the `BaseModel`, [#1831](https://github.com/pydantic/pydantic/pull/1831) by [@fnep](https://github.com/fnep)\n* Accept empty query/fragment URL parts, [#1807](https://github.com/pydantic/pydantic/pull/1807) by [@xavier](https://github.com/xavier)\n\n## v1.8.2 (2021-05-11)\n\n!!! warning\n A security vulnerability, level \"moderate\" is fixed in v1.8.2. Please upgrade **ASAP**.\n See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)\n\n* **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')`\n (or their negative values) does not cause an infinite loop,\n see security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)\n* fix schema generation with Enum by generating a valid name, [#2575](https://github.com/pydantic/pydantic/pull/2575) by [@PrettyWood](https://github.com/PrettyWood)\n* fix JSON schema generation with a `Literal` of an enum member, [#2536](https://github.com/pydantic/pydantic/pull/2536) by [@PrettyWood](https://github.com/PrettyWood)\n* Fix bug with configurations declarations that are passed as\n keyword arguments during class creation, [#2532](https://github.com/pydantic/pydantic/pull/2532) by [@uriyyo](https://github.com/uriyyo)\n* Allow passing `json_encoders` in class kwargs, [#2521](https://github.com/pydantic/pydantic/pull/2521) by [@layday](https://github.com/layday)\n* support arbitrary types with custom `__eq__`, [#2483](https://github.com/pydantic/pydantic/pull/2483) by [@PrettyWood](https://github.com/PrettyWood)\n* support `Annotated` in `validate_arguments` and in generic models with Python 3.9, [#2483](https://github.com/pydantic/pydantic/pull/2483) by [@PrettyWood](https://github.com/PrettyWood)\n\n## v1.8.1 (2021-03-03)\n\nBug fixes for regressions and new features from `v1.8`\n\n* allow elements of `Config.field` to update elements of a `Field`, [#2461](https://github.com/pydantic/pydantic/pull/2461) by [@samuelcolvin](https://github.com/samuelcolvin)\n* fix validation with a `BaseModel` field and a custom root type, [#2449](https://github.com/pydantic/pydantic/pull/2449) by [@PrettyWood](https://github.com/PrettyWood)\n* expose `Pattern` encoder to `fastapi`, [#2444](https://github.com/pydantic/pydantic/pull/2444) by [@PrettyWood](https://github.com/PrettyWood)\n* enable the Hypothesis plugin to generate a constrained float when the `multiple_of` argument is specified, [#2442](https://github.com/pydantic/pydantic/pull/2442) by [@tobi-lipede-oodle](https://github.com/tobi-lipede-oodle)\n* Avoid `RecursionError` when using some types like `Enum` or `Literal` with generic models, [#2436](https://github.com/pydantic/pydantic/pull/2436) by [@PrettyWood](https://github.com/PrettyWood)\n* do not overwrite declared `__hash__` in subclasses of a model, [#2422](https://github.com/pydantic/pydantic/pull/2422) by [@PrettyWood](https://github.com/PrettyWood)\n* fix `mypy` complaints on `Path` and `UUID` related custom types, [#2418](https://github.com/pydantic/pydantic/pull/2418) by [@PrettyWood](https://github.com/PrettyWood)\n* Support properly variable length tuples of compound types, [#2416](https://github.com/pydantic/pydantic/pull/2416) by [@PrettyWood](https://github.com/PrettyWood)\n\n## v1.8 (2021-02-26)\n\nThank you to pydantic's sponsors:\n[@jorgecarleitao](https://github.com/jorgecarleitao), [@BCarley](https://github.com/BCarley), [@chdsbd](https://github.com/chdsbd), [@tiangolo](https://github.com/tiangolo), [@matin](https://github.com/matin), [@linusg](https://github.com/linusg), [@kevinalh](https://github.com/kevinalh), [@koxudaxi](https://github.com/koxudaxi), [@timdrijvers](https://github.com/timdrijvers), [@mkeen](https://github.com/mkeen), [@meadsteve](https://github.com/meadsteve),\n[@ginomempin](https://github.com/ginomempin), [@primer-io](https://github.com/primer-io), [@and-semakin](https://github.com/and-semakin), [@tomthorogood](https://github.com/tomthorogood), [@AjitZK](https://github.com/AjitZK), [@westonsteimel](https://github.com/westonsteimel), [@Mazyod](https://github.com/Mazyod), [@christippett](https://github.com/christippett), [@CarlosDomingues](https://github.com/CarlosDomingues),\n[@Kludex](https://github.com/Kludex), [@r-m-n](https://github.com/r-m-n)\nfor their kind support.\n\n### Highlights\n\n* [Hypothesis plugin](https://docs.pydantic.dev/hypothesis_plugin/) for testing, [#2097](https://github.com/pydantic/pydantic/pull/2097) by [@Zac-HD](https://github.com/Zac-HD)\n* support for [`NamedTuple` and `TypedDict`](https://docs.pydantic.dev/usage/types/#annotated-types), [#2216](https://github.com/pydantic/pydantic/pull/2216) by [@PrettyWood](https://github.com/PrettyWood)\n* Support [`Annotated` hints on model fields](https://docs.pydantic.dev/usage/schema/#typingannotated-fields), [#2147](https://github.com/pydantic/pydantic/pull/2147) by [@JacobHayes](https://github.com/JacobHayes)\n* [`frozen` parameter on `Config`](https://docs.pydantic.dev/usage/model_config/) to allow models to be hashed, [#1880](https://github.com/pydantic/pydantic/pull/1880) by [@rhuille](https://github.com/rhuille)\n\n### Changes\n\n* **Breaking Change**, remove old deprecation aliases from v1, [#2415](https://github.com/pydantic/pydantic/pull/2415) by [@samuelcolvin](https://github.com/samuelcolvin):\n * remove notes on migrating to v1 in docs\n * remove `Schema` which was replaced by `Field`\n * remove `Config.case_insensitive` which was replaced by `Config.case_sensitive` (default `False`)\n * remove `Config.allow_population_by_alias` which was replaced by `Config.allow_population_by_field_name`\n * remove `model.fields` which was replaced by `model.__fields__`\n * remove `model.to_string()` which was replaced by `str(model)`\n * remove `model.__values__` which was replaced by `model.__dict__`\n* **Breaking Change:** always validate only first sublevel items with `each_item`.\n There were indeed some edge cases with some compound types where the validated items were the last sublevel ones, [#1933](https://github.com/pydantic/pydantic/pull/1933) by [@PrettyWood](https://github.com/PrettyWood)\n* Update docs extensions to fix local syntax highlighting, [#2400](https://github.com/pydantic/pydantic/pull/2400) by [@daviskirk](https://github.com/daviskirk)\n* fix: allow `utils.lenient_issubclass` to handle `typing.GenericAlias` objects like `list[str]` in Python >= 3.9, [#2399](https://github.com/pydantic/pydantic/pull/2399) by [@daviskirk](https://github.com/daviskirk)\n* Improve field declaration for _pydantic_ `dataclass` by allowing the usage of _pydantic_ `Field` or `'metadata'` kwarg of `dataclasses.field`, [#2384](https://github.com/pydantic/pydantic/pull/2384) by [@PrettyWood](https://github.com/PrettyWood)\n* Making `typing-extensions` a required dependency, [#2368](https://github.com/pydantic/pydantic/pull/2368) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Make `resolve_annotations` more lenient, allowing for missing modules, [#2363](https://github.com/pydantic/pydantic/pull/2363) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Allow configuring models through class kwargs, [#2356](https://github.com/pydantic/pydantic/pull/2356) by [@Bobronium](https://github.com/Bobronium)\n* Prevent `Mapping` subclasses from always being coerced to `dict`, [#2325](https://github.com/pydantic/pydantic/pull/2325) by [@ofek](https://github.com/ofek)\n* fix: allow `None` for type `Optional[conset / conlist]`, [#2320](https://github.com/pydantic/pydantic/pull/2320) by [@PrettyWood](https://github.com/PrettyWood)\n* Support empty tuple type, [#2318](https://github.com/pydantic/pydantic/pull/2318) by [@PrettyWood](https://github.com/PrettyWood)\n* fix: `python_requires` metadata to require >=3.6.1, [#2306](https://github.com/pydantic/pydantic/pull/2306) by [@hukkinj1](https://github.com/hukkinj1)\n* Properly encode `Decimal` with, or without any decimal places, [#2293](https://github.com/pydantic/pydantic/pull/2293) by [@hultner](https://github.com/hultner)\n* fix: update `__fields_set__` in `BaseModel.copy(update=…)`, [#2290](https://github.com/pydantic/pydantic/pull/2290) by [@PrettyWood](https://github.com/PrettyWood)\n* fix: keep order of fields with `BaseModel.construct()`, [#2281](https://github.com/pydantic/pydantic/pull/2281) by [@PrettyWood](https://github.com/PrettyWood)\n* Support generating schema for Generic fields, [#2262](https://github.com/pydantic/pydantic/pull/2262) by [@maximberg](https://github.com/maximberg)\n* Fix `validate_decorator` so `**kwargs` doesn't exclude values when the keyword\n has the same name as the `*args` or `**kwargs` names, [#2251](https://github.com/pydantic/pydantic/pull/2251) by [@cybojenix](https://github.com/cybojenix)\n* Prevent overriding positional arguments with keyword arguments in\n `validate_arguments`, as per behaviour with native functions, [#2249](https://github.com/pydantic/pydantic/pull/2249) by [@cybojenix](https://github.com/cybojenix)\n* add documentation for `con*` type functions, [#2242](https://github.com/pydantic/pydantic/pull/2242) by [@tayoogunbiyi](https://github.com/tayoogunbiyi)\n* Support custom root type (aka `__root__`) when using `parse_obj()` with nested models, [#2238](https://github.com/pydantic/pydantic/pull/2238) by [@PrettyWood](https://github.com/PrettyWood)\n* Support custom root type (aka `__root__`) with `from_orm()`, [#2237](https://github.com/pydantic/pydantic/pull/2237) by [@PrettyWood](https://github.com/PrettyWood)\n* ensure cythonized functions are left untouched when creating models, based on [#1944](https://github.com/pydantic/pydantic/pull/1944) by [@kollmats](https://github.com/kollmats), [#2228](https://github.com/pydantic/pydantic/pull/2228) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Resolve forward refs for stdlib dataclasses converted into _pydantic_ ones, [#2220](https://github.com/pydantic/pydantic/pull/2220) by [@PrettyWood](https://github.com/PrettyWood)\n* Add support for `NamedTuple` and `TypedDict` types.\n Those two types are now handled and validated when used inside `BaseModel` or _pydantic_ `dataclass`.\n Two utils are also added `create_model_from_namedtuple` and `create_model_from_typeddict`, [#2216](https://github.com/pydantic/pydantic/pull/2216) by [@PrettyWood](https://github.com/PrettyWood)\n* Do not ignore annotated fields when type is `Union[Type[...], ...]`, [#2213](https://github.com/pydantic/pydantic/pull/2213) by [@PrettyWood](https://github.com/PrettyWood)\n* Raise a user-friendly `TypeError` when a `root_validator` does not return a `dict` (e.g. `None`), [#2209](https://github.com/pydantic/pydantic/pull/2209) by [@masalim2](https://github.com/masalim2)\n* Add a `FrozenSet[str]` type annotation to the `allowed_schemes` argument on the `strict_url` field type, [#2198](https://github.com/pydantic/pydantic/pull/2198) by [@Midnighter](https://github.com/Midnighter)\n* add `allow_mutation` constraint to `Field`, [#2195](https://github.com/pydantic/pydantic/pull/2195) by [@sblack-usu](https://github.com/sblack-usu)\n* Allow `Field` with a `default_factory` to be used as an argument to a function\n decorated with `validate_arguments`, [#2176](https://github.com/pydantic/pydantic/pull/2176) by [@thomascobb](https://github.com/thomascobb)\n* Allow non-existent secrets directory by only issuing a warning, [#2175](https://github.com/pydantic/pydantic/pull/2175) by [@davidolrik](https://github.com/davidolrik)\n* fix URL regex to parse fragment without query string, [#2168](https://github.com/pydantic/pydantic/pull/2168) by [@andrewmwhite](https://github.com/andrewmwhite)\n* fix: ensure to always return one of the values in `Literal` field type, [#2166](https://github.com/pydantic/pydantic/pull/2166) by [@PrettyWood](https://github.com/PrettyWood)\n* Support `typing.Annotated` hints on model fields. A `Field` may now be set in the type hint with `Annotated[..., Field(...)`; all other annotations are ignored but still visible with `get_type_hints(..., include_extras=True)`, [#2147](https://github.com/pydantic/pydantic/pull/2147) by [@JacobHayes](https://github.com/JacobHayes)\n* Added `StrictBytes` type as well as `strict=False` option to `ConstrainedBytes`, [#2136](https://github.com/pydantic/pydantic/pull/2136) by [@rlizzo](https://github.com/rlizzo)\n* added `Config.anystr_lower` and `to_lower` kwarg to `constr` and `conbytes`, [#2134](https://github.com/pydantic/pydantic/pull/2134) by [@tayoogunbiyi](https://github.com/tayoogunbiyi)\n* Support plain `typing.Tuple` type, [#2132](https://github.com/pydantic/pydantic/pull/2132) by [@PrettyWood](https://github.com/PrettyWood)\n* Add a bound method `validate` to functions decorated with `validate_arguments`\n to validate parameters without actually calling the function, [#2127](https://github.com/pydantic/pydantic/pull/2127) by [@PrettyWood](https://github.com/PrettyWood)\n* Add the ability to customize settings sources (add / disable / change priority order), [#2107](https://github.com/pydantic/pydantic/pull/2107) by [@kozlek](https://github.com/kozlek)\n* Fix mypy complaints about most custom _pydantic_ types, [#2098](https://github.com/pydantic/pydantic/pull/2098) by [@PrettyWood](https://github.com/PrettyWood)\n* Add a [Hypothesis](https://hypothesis.readthedocs.io/) plugin for easier [property-based testing](https://increment.com/testing/in-praise-of-property-based-testing/) with Pydantic's custom types - [usage details here](https://docs.pydantic.dev/hypothesis_plugin/), [#2097](https://github.com/pydantic/pydantic/pull/2097) by [@Zac-HD](https://github.com/Zac-HD)\n* add validator for `None`, `NoneType` or `Literal[None]`, [#2095](https://github.com/pydantic/pydantic/pull/2095) by [@PrettyWood](https://github.com/PrettyWood)\n* Handle properly fields of type `Callable` with a default value, [#2094](https://github.com/pydantic/pydantic/pull/2094) by [@PrettyWood](https://github.com/PrettyWood)\n* Updated `create_model` return type annotation to return type which inherits from `__base__` argument, [#2071](https://github.com/pydantic/pydantic/pull/2071) by [@uriyyo](https://github.com/uriyyo)\n* Add merged `json_encoders` inheritance, [#2064](https://github.com/pydantic/pydantic/pull/2064) by [@art049](https://github.com/art049)\n* allow overwriting `ClassVar`s in sub-models without having to re-annotate them, [#2061](https://github.com/pydantic/pydantic/pull/2061) by [@layday](https://github.com/layday)\n* add default encoder for `Pattern` type, [#2045](https://github.com/pydantic/pydantic/pull/2045) by [@PrettyWood](https://github.com/PrettyWood)\n* Add `NonNegativeInt`, `NonPositiveInt`, `NonNegativeFloat`, `NonPositiveFloat`, [#1975](https://github.com/pydantic/pydantic/pull/1975) by [@mdavis-xyz](https://github.com/mdavis-xyz)\n* Use % for percentage in string format of colors, [#1960](https://github.com/pydantic/pydantic/pull/1960) by [@EdwardBetts](https://github.com/EdwardBetts)\n* Fixed issue causing `KeyError` to be raised when building schema from multiple `BaseModel` with the same names declared in separate classes, [#1912](https://github.com/pydantic/pydantic/pull/1912) by [@JSextonn](https://github.com/JSextonn)\n* Add `rediss` (Redis over SSL) protocol to `RedisDsn`\n Allow URLs without `user` part (e.g., `rediss://:pass@localhost`), [#1911](https://github.com/pydantic/pydantic/pull/1911) by [@TrDex](https://github.com/TrDex)\n* Add a new `frozen` boolean parameter to `Config` (default: `False`).\n Setting `frozen=True` does everything that `allow_mutation=False` does, and also generates a `__hash__()` method for the model. This makes instances of the model potentially hashable if all the attributes are hashable, [#1880](https://github.com/pydantic/pydantic/pull/1880) by [@rhuille](https://github.com/rhuille)\n* fix schema generation with multiple Enums having the same name, [#1857](https://github.com/pydantic/pydantic/pull/1857) by [@PrettyWood](https://github.com/PrettyWood)\n* Added support for 13/19 digits VISA credit cards in `PaymentCardNumber` type, [#1416](https://github.com/pydantic/pydantic/pull/1416) by [@AlexanderSov](https://github.com/AlexanderSov)\n* fix: prevent `RecursionError` while using recursive `GenericModel`s, [#1370](https://github.com/pydantic/pydantic/pull/1370) by [@xppt](https://github.com/xppt)\n* use `enum` for `typing.Literal` in JSON schema, [#1350](https://github.com/pydantic/pydantic/pull/1350) by [@PrettyWood](https://github.com/PrettyWood)\n* Fix: some recursive models did not require `update_forward_refs` and silently behaved incorrectly, [#1201](https://github.com/pydantic/pydantic/pull/1201) by [@PrettyWood](https://github.com/PrettyWood)\n* Fix bug where generic models with fields where the typevar is nested in another type `a: List[T]` are considered to be concrete. This allows these models to be subclassed and composed as expected, [#947](https://github.com/pydantic/pydantic/pull/947) by [@daviskirk](https://github.com/daviskirk)\n* Add `Config.copy_on_model_validation` flag. When set to `False`, _pydantic_ will keep models used as fields\n untouched on validation instead of reconstructing (copying) them, [#265](https://github.com/pydantic/pydantic/pull/265) by [@PrettyWood](https://github.com/PrettyWood)\n\n## v1.7.4 (2021-05-11)\n\n* **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')`\n (or their negative values) does not cause an infinite loop,\n See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)\n\n## v1.7.3 (2020-11-30)\n\nThank you to pydantic's sponsors:\n[@timdrijvers](https://github.com/timdrijvers), [@BCarley](https://github.com/BCarley), [@chdsbd](https://github.com/chdsbd), [@tiangolo](https://github.com/tiangolo), [@matin](https://github.com/matin), [@linusg](https://github.com/linusg), [@kevinalh](https://github.com/kevinalh), [@jorgecarleitao](https://github.com/jorgecarleitao), [@koxudaxi](https://github.com/koxudaxi), [@primer-api](https://github.com/primer-api),\n[@mkeen](https://github.com/mkeen), [@meadsteve](https://github.com/meadsteve) for their kind support.\n\n* fix: set right default value for required (optional) fields, [#2142](https://github.com/pydantic/pydantic/pull/2142) by [@PrettyWood](https://github.com/PrettyWood)\n* fix: support `underscore_attrs_are_private` with generic models, [#2138](https://github.com/pydantic/pydantic/pull/2138) by [@PrettyWood](https://github.com/PrettyWood)\n* fix: update all modified field values in `root_validator` when `validate_assignment` is on, [#2116](https://github.com/pydantic/pydantic/pull/2116) by [@PrettyWood](https://github.com/PrettyWood)\n* Allow pickling of `pydantic.dataclasses.dataclass` dynamically created from a built-in `dataclasses.dataclass`, [#2111](https://github.com/pydantic/pydantic/pull/2111) by [@aimestereo](https://github.com/aimestereo)\n* Fix a regression where Enum fields would not propagate keyword arguments to the schema, [#2109](https://github.com/pydantic/pydantic/pull/2109) by [@bm424](https://github.com/bm424)\n* Ignore `__doc__` as private attribute when `Config.underscore_attrs_are_private` is set, [#2090](https://github.com/pydantic/pydantic/pull/2090) by [@PrettyWood](https://github.com/PrettyWood)\n\n## v1.7.2 (2020-11-01)\n\n* fix slow `GenericModel` concrete model creation, allow `GenericModel` concrete name reusing in module, [#2078](https://github.com/pydantic/pydantic/pull/2078) by [@Bobronium](https://github.com/Bobronium)\n* keep the order of the fields when `validate_assignment` is set, [#2073](https://github.com/pydantic/pydantic/pull/2073) by [@PrettyWood](https://github.com/PrettyWood)\n* forward all the params of the stdlib `dataclass` when converted into _pydantic_ `dataclass`, [#2065](https://github.com/pydantic/pydantic/pull/2065) by [@PrettyWood](https://github.com/PrettyWood)\n\n## v1.7.1 (2020-10-28)\n\nThank you to pydantic's sponsors:\n[@timdrijvers](https://github.com/timdrijvers), [@BCarley](https://github.com/BCarley), [@chdsbd](https://github.com/chdsbd), [@tiangolo](https://github.com/tiangolo), [@matin](https://github.com/matin), [@linusg](https://github.com/linusg), [@kevinalh](https://github.com/kevinalh), [@jorgecarleitao](https://github.com/jorgecarleitao), [@koxudaxi](https://github.com/koxudaxi), [@primer-api](https://github.com/primer-api), [@mkeen](https://github.com/mkeen)\nfor their kind support.\n\n* fix annotation of `validate_arguments` when passing configuration as argument, [#2055](https://github.com/pydantic/pydantic/pull/2055) by [@layday](https://github.com/layday)\n* Fix mypy assignment error when using `PrivateAttr`, [#2048](https://github.com/pydantic/pydantic/pull/2048) by [@aphedges](https://github.com/aphedges)\n* fix `underscore_attrs_are_private` causing `TypeError` when overriding `__init__`, [#2047](https://github.com/pydantic/pydantic/pull/2047) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fixed regression introduced in v1.7 involving exception handling in field validators when `validate_assignment=True`, [#2044](https://github.com/pydantic/pydantic/pull/2044) by [@johnsabath](https://github.com/johnsabath)\n* fix: _pydantic_ `dataclass` can inherit from stdlib `dataclass`\n and `Config.arbitrary_types_allowed` is supported, [#2042](https://github.com/pydantic/pydantic/pull/2042) by [@PrettyWood](https://github.com/PrettyWood)\n\n## v1.7 (2020-10-26)\n\nThank you to pydantic's sponsors:\n[@timdrijvers](https://github.com/timdrijvers), [@BCarley](https://github.com/BCarley), [@chdsbd](https://github.com/chdsbd), [@tiangolo](https://github.com/tiangolo), [@matin](https://github.com/matin), [@linusg](https://github.com/linusg), [@kevinalh](https://github.com/kevinalh), [@jorgecarleitao](https://github.com/jorgecarleitao), [@koxudaxi](https://github.com/koxudaxi), [@primer-api](https://github.com/primer-api)\nfor their kind support.\n\n### Highlights\n\n* Python 3.9 support, thanks [@PrettyWood](https://github.com/PrettyWood)\n* [Private model attributes](https://docs.pydantic.dev/usage/models/#private-model-attributes), thanks [@Bobronium](https://github.com/Bobronium)\n* [\"secrets files\" support in `BaseSettings`](https://docs.pydantic.dev/usage/settings/#secret-support), thanks [@mdgilene](https://github.com/mdgilene)\n* [convert stdlib dataclasses to pydantic dataclasses and use stdlib dataclasses in models](https://docs.pydantic.dev/usage/dataclasses/#stdlib-dataclasses-and-pydantic-dataclasses), thanks [@PrettyWood](https://github.com/PrettyWood)\n\n### Changes\n\n* **Breaking Change:** remove `__field_defaults__`, add `default_factory` support with `BaseModel.construct`.\n Use `.get_default()` method on fields in `__fields__` attribute instead, [#1732](https://github.com/pydantic/pydantic/pull/1732) by [@PrettyWood](https://github.com/PrettyWood)\n* Rearrange CI to run linting as a separate job, split install recipes for different tasks, [#2020](https://github.com/pydantic/pydantic/pull/2020) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Allows subclasses of generic models to make some, or all, of the superclass's type parameters concrete, while\n also defining new type parameters in the subclass, [#2005](https://github.com/pydantic/pydantic/pull/2005) by [@choogeboom](https://github.com/choogeboom)\n* Call validator with the correct `values` parameter type in `BaseModel.__setattr__`,\n when `validate_assignment = True` in model config, [#1999](https://github.com/pydantic/pydantic/pull/1999) by [@me-ransh](https://github.com/me-ransh)\n* Force `fields.Undefined` to be a singleton object, fixing inherited generic model schemas, [#1981](https://github.com/pydantic/pydantic/pull/1981) by [@daviskirk](https://github.com/daviskirk)\n* Include tests in source distributions, [#1976](https://github.com/pydantic/pydantic/pull/1976) by [@sbraz](https://github.com/sbraz)\n* Add ability to use `min_length/max_length` constraints with secret types, [#1974](https://github.com/pydantic/pydantic/pull/1974) by [@uriyyo](https://github.com/uriyyo)\n* Also check `root_validators` when `validate_assignment` is on, [#1971](https://github.com/pydantic/pydantic/pull/1971) by [@PrettyWood](https://github.com/PrettyWood)\n* Fix const validators not running when custom validators are present, [#1957](https://github.com/pydantic/pydantic/pull/1957) by [@hmvp](https://github.com/hmvp)\n* add `deque` to field types, [#1935](https://github.com/pydantic/pydantic/pull/1935) by [@wozniakty](https://github.com/wozniakty)\n* add basic support for Python 3.9, [#1832](https://github.com/pydantic/pydantic/pull/1832) by [@PrettyWood](https://github.com/PrettyWood)\n* Fix typo in the anchor of exporting_models.md#modelcopy and incorrect description, [#1821](https://github.com/pydantic/pydantic/pull/1821) by [@KimMachineGun](https://github.com/KimMachineGun)\n* Added ability for `BaseSettings` to read \"secret files\", [#1820](https://github.com/pydantic/pydantic/pull/1820) by [@mdgilene](https://github.com/mdgilene)\n* add `parse_raw_as` utility function, [#1812](https://github.com/pydantic/pydantic/pull/1812) by [@PrettyWood](https://github.com/PrettyWood)\n* Support home directory relative paths for `dotenv` files (e.g. `~/.env`), [#1803](https://github.com/pydantic/pydantic/pull/1803) by [@PrettyWood](https://github.com/PrettyWood)\n* Clarify documentation for `parse_file` to show that the argument\n should be a file *path* not a file-like object, [#1794](https://github.com/pydantic/pydantic/pull/1794) by [@mdavis-xyz](https://github.com/mdavis-xyz)\n* Fix false positive from mypy plugin when a class nested within a `BaseModel` is named `Model`, [#1770](https://github.com/pydantic/pydantic/pull/1770) by [@selimb](https://github.com/selimb)\n* add basic support of Pattern type in schema generation, [#1767](https://github.com/pydantic/pydantic/pull/1767) by [@PrettyWood](https://github.com/PrettyWood)\n* Support custom title, description and default in schema of enums, [#1748](https://github.com/pydantic/pydantic/pull/1748) by [@PrettyWood](https://github.com/PrettyWood)\n* Properly represent `Literal` Enums when `use_enum_values` is True, [#1747](https://github.com/pydantic/pydantic/pull/1747) by [@noelevans](https://github.com/noelevans)\n* Allows timezone information to be added to strings to be formatted as time objects. Permitted formats are `Z` for UTC\n or an offset for absolute positive or negative time shifts. Or the timezone data can be omitted, [#1744](https://github.com/pydantic/pydantic/pull/1744) by [@noelevans](https://github.com/noelevans)\n* Add stub `__init__` with Python 3.6 signature for `ForwardRef`, [#1738](https://github.com/pydantic/pydantic/pull/1738) by [@sirtelemak](https://github.com/sirtelemak)\n* Fix behaviour with forward refs and optional fields in nested models, [#1736](https://github.com/pydantic/pydantic/pull/1736) by [@PrettyWood](https://github.com/PrettyWood)\n* add `Enum` and `IntEnum` as valid types for fields, [#1735](https://github.com/pydantic/pydantic/pull/1735) by [@PrettyWood](https://github.com/PrettyWood)\n* Change default value of `__module__` argument of `create_model` from `None` to `'pydantic.main'`.\n Set reference of created concrete model to it's module to allow pickling (not applied to models created in\n functions), [#1686](https://github.com/pydantic/pydantic/pull/1686) by [@Bobronium](https://github.com/Bobronium)\n* Add private attributes support, [#1679](https://github.com/pydantic/pydantic/pull/1679) by [@Bobronium](https://github.com/Bobronium)\n* add `config` to `@validate_arguments`, [#1663](https://github.com/pydantic/pydantic/pull/1663) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Allow descendant Settings models to override env variable names for the fields defined in parent Settings models with\n `env` in their `Config`. Previously only `env_prefix` configuration option was applicable, [#1561](https://github.com/pydantic/pydantic/pull/1561) by [@ojomio](https://github.com/ojomio)\n* Support `ref_template` when creating schema `$ref`s, [#1479](https://github.com/pydantic/pydantic/pull/1479) by [@kilo59](https://github.com/kilo59)\n* Add a `__call__` stub to `PyObject` so that mypy will know that it is callable, [#1352](https://github.com/pydantic/pydantic/pull/1352) by [@brianmaissy](https://github.com/brianmaissy)\n* `pydantic.dataclasses.dataclass` decorator now supports built-in `dataclasses.dataclass`.\n It is hence possible to convert an existing `dataclass` easily to add Pydantic validation.\n Moreover nested dataclasses are also supported, [#744](https://github.com/pydantic/pydantic/pull/744) by [@PrettyWood](https://github.com/PrettyWood)\n\n## v1.6.2 (2021-05-11)\n\n* **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')`\n (or their negative values) does not cause an infinite loop,\n See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)\n\n## v1.6.1 (2020-07-15)\n\n* fix validation and parsing of nested models with `default_factory`, [#1710](https://github.com/pydantic/pydantic/pull/1710) by [@PrettyWood](https://github.com/PrettyWood)\n\n## v1.6 (2020-07-11)\n\nThank you to pydantic's sponsors: [@matin](https://github.com/matin), [@tiangolo](https://github.com/tiangolo), [@chdsbd](https://github.com/chdsbd), [@jorgecarleitao](https://github.com/jorgecarleitao), and 1 anonymous sponsor for their kind support.\n\n* Modify validators for `conlist` and `conset` to not have `always=True`, [#1682](https://github.com/pydantic/pydantic/pull/1682) by [@samuelcolvin](https://github.com/samuelcolvin)\n* add port check to `AnyUrl` (can't exceed 65536) ports are 16 insigned bits: `0 <= port <= 2**16-1` src: [rfc793 header format](https://tools.ietf.org/html/rfc793#section-3.1), [#1654](https://github.com/pydantic/pydantic/pull/1654) by [@flapili](https://github.com/flapili)\n* Document default `regex` anchoring semantics, [#1648](https://github.com/pydantic/pydantic/pull/1648) by [@yurikhan](https://github.com/yurikhan)\n* Use `chain.from_iterable` in class_validators.py. This is a faster and more idiomatic way of using `itertools.chain`.\n Instead of computing all the items in the iterable and storing them in memory, they are computed one-by-one and never\n stored as a huge list. This can save on both runtime and memory space, [#1642](https://github.com/pydantic/pydantic/pull/1642) by [@cool-RR](https://github.com/cool-RR)\n* Add `conset()`, analogous to `conlist()`, [#1623](https://github.com/pydantic/pydantic/pull/1623) by [@patrickkwang](https://github.com/patrickkwang)\n* make Pydantic errors (un)pickable, [#1616](https://github.com/pydantic/pydantic/pull/1616) by [@PrettyWood](https://github.com/PrettyWood)\n* Allow custom encoding for `dotenv` files, [#1615](https://github.com/pydantic/pydantic/pull/1615) by [@PrettyWood](https://github.com/PrettyWood)\n* Ensure `SchemaExtraCallable` is always defined to get type hints on BaseConfig, [#1614](https://github.com/pydantic/pydantic/pull/1614) by [@PrettyWood](https://github.com/PrettyWood)\n* Update datetime parser to support negative timestamps, [#1600](https://github.com/pydantic/pydantic/pull/1600) by [@mlbiche](https://github.com/mlbiche)\n* Update mypy, remove `AnyType` alias for `Type[Any]`, [#1598](https://github.com/pydantic/pydantic/pull/1598) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Adjust handling of root validators so that errors are aggregated from _all_ failing root validators, instead of reporting on only the first root validator to fail, [#1586](https://github.com/pydantic/pydantic/pull/1586) by [@beezee](https://github.com/beezee)\n* Make `__modify_schema__` on Enums apply to the enum schema rather than fields that use the enum, [#1581](https://github.com/pydantic/pydantic/pull/1581) by [@therefromhere](https://github.com/therefromhere)\n* Fix behavior of `__all__` key when used in conjunction with index keys in advanced include/exclude of fields that are sequences, [#1579](https://github.com/pydantic/pydantic/pull/1579) by [@xspirus](https://github.com/xspirus)\n* Subclass validators do not run when referencing a `List` field defined in a parent class when `each_item=True`. Added an example to the docs illustrating this, [#1566](https://github.com/pydantic/pydantic/pull/1566) by [@samueldeklund](https://github.com/samueldeklund)\n* change `schema.field_class_to_schema` to support `frozenset` in schema, [#1557](https://github.com/pydantic/pydantic/pull/1557) by [@wangpeibao](https://github.com/wangpeibao)\n* Call `__modify_schema__` only for the field schema, [#1552](https://github.com/pydantic/pydantic/pull/1552) by [@PrettyWood](https://github.com/PrettyWood)\n* Move the assignment of `field.validate_always` in `fields.py` so the `always` parameter of validators work on inheritance, [#1545](https://github.com/pydantic/pydantic/pull/1545) by [@dcHHH](https://github.com/dcHHH)\n* Added support for UUID instantiation through 16 byte strings such as `b'\\x12\\x34\\x56\\x78' * 4`. This was done to support `BINARY(16)` columns in sqlalchemy, [#1541](https://github.com/pydantic/pydantic/pull/1541) by [@shawnwall](https://github.com/shawnwall)\n* Add a test assertion that `default_factory` can return a singleton, [#1523](https://github.com/pydantic/pydantic/pull/1523) by [@therefromhere](https://github.com/therefromhere)\n* Add `NameEmail.__eq__` so duplicate `NameEmail` instances are evaluated as equal, [#1514](https://github.com/pydantic/pydantic/pull/1514) by [@stephen-bunn](https://github.com/stephen-bunn)\n* Add datamodel-code-generator link in pydantic document site, [#1500](https://github.com/pydantic/pydantic/pull/1500) by [@koxudaxi](https://github.com/koxudaxi)\n* Added a \"Discussion of Pydantic\" section to the documentation, with a link to \"Pydantic Introduction\" video by Alexander Hultnér, [#1499](https://github.com/pydantic/pydantic/pull/1499) by [@hultner](https://github.com/hultner)\n* Avoid some side effects of `default_factory` by calling it only once\n if possible and by not setting a default value in the schema, [#1491](https://github.com/pydantic/pydantic/pull/1491) by [@PrettyWood](https://github.com/PrettyWood)\n* Added docs about dumping dataclasses to JSON, [#1487](https://github.com/pydantic/pydantic/pull/1487) by [@mikegrima](https://github.com/mikegrima)\n* Make `BaseModel.__signature__` class-only, so getting `__signature__` from model instance will raise `AttributeError`, [#1466](https://github.com/pydantic/pydantic/pull/1466) by [@Bobronium](https://github.com/Bobronium)\n* include `'format': 'password'` in the schema for secret types, [#1424](https://github.com/pydantic/pydantic/pull/1424) by [@atheuz](https://github.com/atheuz)\n* Modify schema constraints on `ConstrainedFloat` so that `exclusiveMinimum` and\n minimum are not included in the schema if they are equal to `-math.inf` and\n `exclusiveMaximum` and `maximum` are not included if they are equal to `math.inf`, [#1417](https://github.com/pydantic/pydantic/pull/1417) by [@vdwees](https://github.com/vdwees)\n* Squash internal `__root__` dicts in `.dict()` (and, by extension, in `.json()`), [#1414](https://github.com/pydantic/pydantic/pull/1414) by [@patrickkwang](https://github.com/patrickkwang)\n* Move `const` validator to post-validators so it validates the parsed value, [#1410](https://github.com/pydantic/pydantic/pull/1410) by [@selimb](https://github.com/selimb)\n* Fix model validation to handle nested literals, e.g. `Literal['foo', Literal['bar']]`, [#1364](https://github.com/pydantic/pydantic/pull/1364) by [@DBCerigo](https://github.com/DBCerigo)\n* Remove `user_required = True` from `RedisDsn`, neither user nor password are required, [#1275](https://github.com/pydantic/pydantic/pull/1275) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Remove extra `allOf` from schema for fields with `Union` and custom `Field`, [#1209](https://github.com/pydantic/pydantic/pull/1209) by [@mostaphaRoudsari](https://github.com/mostaphaRoudsari)\n* Updates OpenAPI schema generation to output all enums as separate models.\n Instead of inlining the enum values in the model schema, models now use a `$ref`\n property to point to the enum definition, [#1173](https://github.com/pydantic/pydantic/pull/1173) by [@calvinwyoung](https://github.com/calvinwyoung)\n\n## v1.5.1 (2020-04-23)\n\n* Signature generation with `extra: allow` never uses a field name, [#1418](https://github.com/pydantic/pydantic/pull/1418) by [@prettywood](https://github.com/prettywood)\n* Avoid mutating `Field` default value, [#1412](https://github.com/pydantic/pydantic/pull/1412) by [@prettywood](https://github.com/prettywood)\n\n## v1.5 (2020-04-18)\n\n* Make includes/excludes arguments for `.dict()`, `._iter()`, ..., immutable, [#1404](https://github.com/pydantic/pydantic/pull/1404) by [@AlexECX](https://github.com/AlexECX)\n* Always use a field's real name with includes/excludes in `model._iter()`, regardless of `by_alias`, [#1397](https://github.com/pydantic/pydantic/pull/1397) by [@AlexECX](https://github.com/AlexECX)\n* Update constr regex example to include start and end lines, [#1396](https://github.com/pydantic/pydantic/pull/1396) by [@lmcnearney](https://github.com/lmcnearney)\n* Confirm that shallow `model.copy()` does make a shallow copy of attributes, [#1383](https://github.com/pydantic/pydantic/pull/1383) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Renaming `model_name` argument of `main.create_model()` to `__model_name` to allow using `model_name` as a field name, [#1367](https://github.com/pydantic/pydantic/pull/1367) by [@kittipatv](https://github.com/kittipatv)\n* Replace raising of exception to silent passing for non-Var attributes in mypy plugin, [#1345](https://github.com/pydantic/pydantic/pull/1345) by [@b0g3r](https://github.com/b0g3r)\n* Remove `typing_extensions` dependency for Python 3.8, [#1342](https://github.com/pydantic/pydantic/pull/1342) by [@prettywood](https://github.com/prettywood)\n* Make `SecretStr` and `SecretBytes` initialization idempotent, [#1330](https://github.com/pydantic/pydantic/pull/1330) by [@atheuz](https://github.com/atheuz)\n* document making secret types dumpable using the json method, [#1328](https://github.com/pydantic/pydantic/pull/1328) by [@atheuz](https://github.com/atheuz)\n* Move all testing and build to github actions, add windows and macos binaries,\n thank you [@StephenBrown2](https://github.com/StephenBrown2) for much help, [#1326](https://github.com/pydantic/pydantic/pull/1326) by [@samuelcolvin](https://github.com/samuelcolvin)\n* fix card number length check in `PaymentCardNumber`, `PaymentCardBrand` now inherits from `str`, [#1317](https://github.com/pydantic/pydantic/pull/1317) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Have `BaseModel` inherit from `Representation` to make mypy happy when overriding `__str__`, [#1310](https://github.com/pydantic/pydantic/pull/1310) by [@FuegoFro](https://github.com/FuegoFro)\n* Allow `None` as input to all optional list fields, [#1307](https://github.com/pydantic/pydantic/pull/1307) by [@prettywood](https://github.com/prettywood)\n* Add `datetime` field to `default_factory` example, [#1301](https://github.com/pydantic/pydantic/pull/1301) by [@StephenBrown2](https://github.com/StephenBrown2)\n* Allow subclasses of known types to be encoded with superclass encoder, [#1291](https://github.com/pydantic/pydantic/pull/1291) by [@StephenBrown2](https://github.com/StephenBrown2)\n* Exclude exported fields from all elements of a list/tuple of submodels/dicts with `'__all__'`, [#1286](https://github.com/pydantic/pydantic/pull/1286) by [@masalim2](https://github.com/masalim2)\n* Add pydantic.color.Color objects as available input for Color fields, [#1258](https://github.com/pydantic/pydantic/pull/1258) by [@leosussan](https://github.com/leosussan)\n* In examples, type nullable fields as `Optional`, so that these are valid mypy annotations, [#1248](https://github.com/pydantic/pydantic/pull/1248) by [@kokes](https://github.com/kokes)\n* Make `pattern_validator()` accept pre-compiled `Pattern` objects. Fix `str_validator()` return type to `str`, [#1237](https://github.com/pydantic/pydantic/pull/1237) by [@adamgreg](https://github.com/adamgreg)\n* Document how to manage Generics and inheritance, [#1229](https://github.com/pydantic/pydantic/pull/1229) by [@esadruhn](https://github.com/esadruhn)\n* `update_forward_refs()` method of BaseModel now copies `__dict__` of class module instead of modyfying it, [#1228](https://github.com/pydantic/pydantic/pull/1228) by [@paul-ilyin](https://github.com/paul-ilyin)\n* Support instance methods and class methods with `@validate_arguments`, [#1222](https://github.com/pydantic/pydantic/pull/1222) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add `default_factory` argument to `Field` to create a dynamic default value by passing a zero-argument callable, [#1210](https://github.com/pydantic/pydantic/pull/1210) by [@prettywood](https://github.com/prettywood)\n* add support for `NewType` of `List`, `Optional`, etc, [#1207](https://github.com/pydantic/pydantic/pull/1207) by [@Kazy](https://github.com/Kazy)\n* fix mypy signature for `root_validator`, [#1192](https://github.com/pydantic/pydantic/pull/1192) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fixed parsing of nested 'custom root type' models, [#1190](https://github.com/pydantic/pydantic/pull/1190) by [@Shados](https://github.com/Shados)\n* Add `validate_arguments` function decorator which checks the arguments to a function matches type annotations, [#1179](https://github.com/pydantic/pydantic/pull/1179) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add `__signature__` to models, [#1034](https://github.com/pydantic/pydantic/pull/1034) by [@Bobronium](https://github.com/Bobronium)\n* Refactor `._iter()` method, 10x speed boost for `dict(model)`, [#1017](https://github.com/pydantic/pydantic/pull/1017) by [@Bobronium](https://github.com/Bobronium)\n\n## v1.4 (2020-01-24)\n\n* **Breaking Change:** alias precedence logic changed so aliases on a field always take priority over\n an alias from `alias_generator` to avoid buggy/unexpected behaviour,\n see [here](https://docs.pydantic.dev/usage/model_config/#alias-precedence) for details, [#1178](https://github.com/pydantic/pydantic/pull/1178) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add support for unicode and punycode in TLDs, [#1182](https://github.com/pydantic/pydantic/pull/1182) by [@jamescurtin](https://github.com/jamescurtin)\n* Fix `cls` argument in validators during assignment, [#1172](https://github.com/pydantic/pydantic/pull/1172) by [@samuelcolvin](https://github.com/samuelcolvin)\n* completing Luhn algorithm for `PaymentCardNumber`, [#1166](https://github.com/pydantic/pydantic/pull/1166) by [@cuencandres](https://github.com/cuencandres)\n* add support for generics that implement `__get_validators__` like a custom data type, [#1159](https://github.com/pydantic/pydantic/pull/1159) by [@tiangolo](https://github.com/tiangolo)\n* add support for infinite generators with `Iterable`, [#1152](https://github.com/pydantic/pydantic/pull/1152) by [@tiangolo](https://github.com/tiangolo)\n* fix `url_regex` to accept schemas with `+`, `-` and `.` after the first character, [#1142](https://github.com/pydantic/pydantic/pull/1142) by [@samuelcolvin](https://github.com/samuelcolvin)\n* move `version_info()` to `version.py`, suggest its use in issues, [#1138](https://github.com/pydantic/pydantic/pull/1138) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Improve pydantic import time by roughly 50% by deferring some module loading and regex compilation, [#1127](https://github.com/pydantic/pydantic/pull/1127) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix `EmailStr` and `NameEmail` to accept instances of themselves in cython, [#1126](https://github.com/pydantic/pydantic/pull/1126) by [@koxudaxi](https://github.com/koxudaxi)\n* Pass model class to the `Config.schema_extra` callable, [#1125](https://github.com/pydantic/pydantic/pull/1125) by [@therefromhere](https://github.com/therefromhere)\n* Fix regex for username and password in URLs, [#1115](https://github.com/pydantic/pydantic/pull/1115) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add support for nested generic models, [#1104](https://github.com/pydantic/pydantic/pull/1104) by [@dmontagu](https://github.com/dmontagu)\n* add `__all__` to `__init__.py` to prevent \"implicit reexport\" errors from mypy, [#1072](https://github.com/pydantic/pydantic/pull/1072) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add support for using \"dotenv\" files with `BaseSettings`, [#1011](https://github.com/pydantic/pydantic/pull/1011) by [@acnebs](https://github.com/acnebs)\n\n## v1.3 (2019-12-21)\n\n* Change `schema` and `schema_model` to handle dataclasses by using their `__pydantic_model__` feature, [#792](https://github.com/pydantic/pydantic/pull/792) by [@aviramha](https://github.com/aviramha)\n* Added option for `root_validator` to be skipped if values validation fails using keyword `skip_on_failure=True`, [#1049](https://github.com/pydantic/pydantic/pull/1049) by [@aviramha](https://github.com/aviramha)\n* Allow `Config.schema_extra` to be a callable so that the generated schema can be post-processed, [#1054](https://github.com/pydantic/pydantic/pull/1054) by [@selimb](https://github.com/selimb)\n* Update mypy to version 0.750, [#1057](https://github.com/pydantic/pydantic/pull/1057) by [@dmontagu](https://github.com/dmontagu)\n* Trick Cython into allowing str subclassing, [#1061](https://github.com/pydantic/pydantic/pull/1061) by [@skewty](https://github.com/skewty)\n* Prevent type attributes being added to schema unless the attribute `__schema_attributes__` is `True`, [#1064](https://github.com/pydantic/pydantic/pull/1064) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Change `BaseModel.parse_file` to use `Config.json_loads`, [#1067](https://github.com/pydantic/pydantic/pull/1067) by [@kierandarcy](https://github.com/kierandarcy)\n* Fix for optional `Json` fields, [#1073](https://github.com/pydantic/pydantic/pull/1073) by [@volker48](https://github.com/volker48)\n* Change the default number of threads used when compiling with cython to one,\n allow override via the `CYTHON_NTHREADS` environment variable, [#1074](https://github.com/pydantic/pydantic/pull/1074) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Run FastAPI tests during Pydantic's CI tests, [#1075](https://github.com/pydantic/pydantic/pull/1075) by [@tiangolo](https://github.com/tiangolo)\n* My mypy strictness constraints, and associated tweaks to type annotations, [#1077](https://github.com/pydantic/pydantic/pull/1077) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add `__eq__` to SecretStr and SecretBytes to allow \"value equals\", [#1079](https://github.com/pydantic/pydantic/pull/1079) by [@sbv-trueenergy](https://github.com/sbv-trueenergy)\n* Fix schema generation for nested None case, [#1088](https://github.com/pydantic/pydantic/pull/1088) by [@lutostag](https://github.com/lutostag)\n* Consistent checks for sequence like objects, [#1090](https://github.com/pydantic/pydantic/pull/1090) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix `Config` inheritance on `BaseSettings` when used with `env_prefix`, [#1091](https://github.com/pydantic/pydantic/pull/1091) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix for `__modify_schema__` when it conflicted with `field_class_to_schema*`, [#1102](https://github.com/pydantic/pydantic/pull/1102) by [@samuelcolvin](https://github.com/samuelcolvin)\n* docs: Fix explanation of case sensitive environment variable names when populating `BaseSettings` subclass attributes, [#1105](https://github.com/pydantic/pydantic/pull/1105) by [@tribals](https://github.com/tribals)\n* Rename django-rest-framework benchmark in documentation, [#1119](https://github.com/pydantic/pydantic/pull/1119) by [@frankie567](https://github.com/frankie567)\n\n## v1.2 (2019-11-28)\n\n* **Possible Breaking Change:** Add support for required `Optional` with `name: Optional[AnyType] = Field(...)`\n and refactor `ModelField` creation to preserve `required` parameter value, [#1031](https://github.com/pydantic/pydantic/pull/1031) by [@tiangolo](https://github.com/tiangolo);\n see [here](https://docs.pydantic.dev/usage/models/#required-optional-fields) for details\n* Add benchmarks for `cattrs`, [#513](https://github.com/pydantic/pydantic/pull/513) by [@sebastianmika](https://github.com/sebastianmika)\n* Add `exclude_none` option to `dict()` and friends, [#587](https://github.com/pydantic/pydantic/pull/587) by [@niknetniko](https://github.com/niknetniko)\n* Add benchmarks for `valideer`, [#670](https://github.com/pydantic/pydantic/pull/670) by [@gsakkis](https://github.com/gsakkis)\n* Add `parse_obj_as` and `parse_file_as` functions for ad-hoc parsing of data into arbitrary pydantic-compatible types, [#934](https://github.com/pydantic/pydantic/pull/934) by [@dmontagu](https://github.com/dmontagu)\n* Add `allow_reuse` argument to validators, thus allowing validator reuse, [#940](https://github.com/pydantic/pydantic/pull/940) by [@dmontagu](https://github.com/dmontagu)\n* Add support for mapping types for custom root models, [#958](https://github.com/pydantic/pydantic/pull/958) by [@dmontagu](https://github.com/dmontagu)\n* Mypy plugin support for dataclasses, [#966](https://github.com/pydantic/pydantic/pull/966) by [@koxudaxi](https://github.com/koxudaxi)\n* Add support for dataclasses default factory, [#968](https://github.com/pydantic/pydantic/pull/968) by [@ahirner](https://github.com/ahirner)\n* Add a `ByteSize` type for converting byte string (`1GB`) to plain bytes, [#977](https://github.com/pydantic/pydantic/pull/977) by [@dgasmith](https://github.com/dgasmith)\n* Fix mypy complaint about `@root_validator(pre=True)`, [#984](https://github.com/pydantic/pydantic/pull/984) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add manylinux binaries for Python 3.8 to pypi, also support manylinux2010, [#994](https://github.com/pydantic/pydantic/pull/994) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Adds ByteSize conversion to another unit, [#995](https://github.com/pydantic/pydantic/pull/995) by [@dgasmith](https://github.com/dgasmith)\n* Fix `__str__` and `__repr__` inheritance for models, [#1022](https://github.com/pydantic/pydantic/pull/1022) by [@samuelcolvin](https://github.com/samuelcolvin)\n* add testimonials section to docs, [#1025](https://github.com/pydantic/pydantic/pull/1025) by [@sullivancolin](https://github.com/sullivancolin)\n* Add support for `typing.Literal` for Python 3.8, [#1026](https://github.com/pydantic/pydantic/pull/1026) by [@dmontagu](https://github.com/dmontagu)\n\n## v1.1.1 (2019-11-20)\n\n* Fix bug where use of complex fields on sub-models could cause fields to be incorrectly configured, [#1015](https://github.com/pydantic/pydantic/pull/1015) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n## v1.1 (2019-11-07)\n\n* Add a mypy plugin for type checking `BaseModel.__init__` and more, [#722](https://github.com/pydantic/pydantic/pull/722) by [@dmontagu](https://github.com/dmontagu)\n* Change return type typehint for `GenericModel.__class_getitem__` to prevent PyCharm warnings, [#936](https://github.com/pydantic/pydantic/pull/936) by [@dmontagu](https://github.com/dmontagu)\n* Fix usage of `Any` to allow `None`, also support `TypeVar` thus allowing use of un-parameterised collection types\n e.g. `Dict` and `List`, [#962](https://github.com/pydantic/pydantic/pull/962) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Set `FieldInfo` on subfields to fix schema generation for complex nested types, [#965](https://github.com/pydantic/pydantic/pull/965) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n## v1.0 (2019-10-23)\n\n* **Breaking Change:** deprecate the `Model.fields` property, use `Model.__fields__` instead, [#883](https://github.com/pydantic/pydantic/pull/883) by [@samuelcolvin](https://github.com/samuelcolvin)\n* **Breaking Change:** Change the precedence of aliases so child model aliases override parent aliases,\n including using `alias_generator`, [#904](https://github.com/pydantic/pydantic/pull/904) by [@samuelcolvin](https://github.com/samuelcolvin)\n* **Breaking change:** Rename `skip_defaults` to `exclude_unset`, and add ability to exclude actual defaults, [#915](https://github.com/pydantic/pydantic/pull/915) by [@dmontagu](https://github.com/dmontagu)\n* Add `**kwargs` to `pydantic.main.ModelMetaclass.__new__` so `__init_subclass__` can take custom parameters on extended\n `BaseModel` classes, [#867](https://github.com/pydantic/pydantic/pull/867) by [@retnikt](https://github.com/retnikt)\n* Fix field of a type that has a default value, [#880](https://github.com/pydantic/pydantic/pull/880) by [@koxudaxi](https://github.com/koxudaxi)\n* Use `FutureWarning` instead of `DeprecationWarning` when `alias` instead of `env` is used for settings models, [#881](https://github.com/pydantic/pydantic/pull/881) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix issue with `BaseSettings` inheritance and `alias` getting set to `None`, [#882](https://github.com/pydantic/pydantic/pull/882) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Modify `__repr__` and `__str__` methods to be consistent across all public classes, add `__pretty__` to support\n python-devtools, [#884](https://github.com/pydantic/pydantic/pull/884) by [@samuelcolvin](https://github.com/samuelcolvin)\n* deprecation warning for `case_insensitive` on `BaseSettings` config, [#885](https://github.com/pydantic/pydantic/pull/885) by [@samuelcolvin](https://github.com/samuelcolvin)\n* For `BaseSettings` merge environment variables and in-code values recursively, as long as they create a valid object\n when merged together, to allow splitting init arguments, [#888](https://github.com/pydantic/pydantic/pull/888) by [@idmitrievsky](https://github.com/idmitrievsky)\n* change secret types example, [#890](https://github.com/pydantic/pydantic/pull/890) by [@ashears](https://github.com/ashears)\n* Change the signature of `Model.construct()` to be more user-friendly, document `construct()` usage, [#898](https://github.com/pydantic/pydantic/pull/898) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add example for the `construct()` method, [#907](https://github.com/pydantic/pydantic/pull/907) by [@ashears](https://github.com/ashears)\n* Improve use of `Field` constraints on complex types, raise an error if constraints are not enforceable,\n also support tuples with an ellipsis `Tuple[X, ...]`, `Sequence` and `FrozenSet` in schema, [#909](https://github.com/pydantic/pydantic/pull/909) by [@samuelcolvin](https://github.com/samuelcolvin)\n* update docs for bool missing valid value, [#911](https://github.com/pydantic/pydantic/pull/911) by [@trim21](https://github.com/trim21)\n* Better `str`/`repr` logic for `ModelField`, [#912](https://github.com/pydantic/pydantic/pull/912) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix `ConstrainedList`, update schema generation to reflect `min_items` and `max_items` `Field()` arguments, [#917](https://github.com/pydantic/pydantic/pull/917) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Allow abstracts sets (eg. dict keys) in the `include` and `exclude` arguments of `dict()`, [#921](https://github.com/pydantic/pydantic/pull/921) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix JSON serialization errors on `ValidationError.json()` by using `pydantic_encoder`, [#922](https://github.com/pydantic/pydantic/pull/922) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Clarify usage of `remove_untouched`, improve error message for types with no validators, [#926](https://github.com/pydantic/pydantic/pull/926) by [@retnikt](https://github.com/retnikt)\n\n## v1.0b2 (2019-10-07)\n\n* Mark `StrictBool` typecheck as `bool` to allow for default values without mypy errors, [#690](https://github.com/pydantic/pydantic/pull/690) by [@dmontagu](https://github.com/dmontagu)\n* Transfer the documentation build from sphinx to mkdocs, re-write much of the documentation, [#856](https://github.com/pydantic/pydantic/pull/856) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Add support for custom naming schemes for `GenericModel` subclasses, [#859](https://github.com/pydantic/pydantic/pull/859) by [@dmontagu](https://github.com/dmontagu)\n* Add `if TYPE_CHECKING:` to the excluded lines for test coverage, [#874](https://github.com/pydantic/pydantic/pull/874) by [@dmontagu](https://github.com/dmontagu)\n* Rename `allow_population_by_alias` to `allow_population_by_field_name`, remove unnecessary warning about it, [#875](https://github.com/pydantic/pydantic/pull/875) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n## v1.0b1 (2019-10-01)\n\n* **Breaking Change:** rename `Schema` to `Field`, make it a function to placate mypy, [#577](https://github.com/pydantic/pydantic/pull/577) by [@samuelcolvin](https://github.com/samuelcolvin)\n* **Breaking Change:** modify parsing behavior for `bool`, [#617](https://github.com/pydantic/pydantic/pull/617) by [@dmontagu](https://github.com/dmontagu)\n* **Breaking Change:** `get_validators` is no longer recognised, use `__get_validators__`.\n `Config.ignore_extra` and `Config.allow_extra` are no longer recognised, use `Config.extra`, [#720](https://github.com/pydantic/pydantic/pull/720) by [@samuelcolvin](https://github.com/samuelcolvin)\n* **Breaking Change:** modify default config settings for `BaseSettings`; `case_insensitive` renamed to `case_sensitive`,\n default changed to `case_sensitive = False`, `env_prefix` default changed to `''` - e.g. no prefix, [#721](https://github.com/pydantic/pydantic/pull/721) by [@dmontagu](https://github.com/dmontagu)\n* **Breaking change:** Implement `root_validator` and rename root errors from `__obj__` to `__root__`, [#729](https://github.com/pydantic/pydantic/pull/729) by [@samuelcolvin](https://github.com/samuelcolvin)\n* **Breaking Change:** alter the behaviour of `dict(model)` so that sub-models are nolonger\n converted to dictionaries, [#733](https://github.com/pydantic/pydantic/pull/733) by [@samuelcolvin](https://github.com/samuelcolvin)\n* **Breaking change:** Added `initvars` support to `post_init_post_parse`, [#748](https://github.com/pydantic/pydantic/pull/748) by [@Raphael-C-Almeida](https://github.com/Raphael-C-Almeida)\n* **Breaking Change:** Make `BaseModel.json()` only serialize the `__root__` key for models with custom root, [#752](https://github.com/pydantic/pydantic/pull/752) by [@dmontagu](https://github.com/dmontagu)\n* **Breaking Change:** complete rewrite of `URL` parsing logic, [#755](https://github.com/pydantic/pydantic/pull/755) by [@samuelcolvin](https://github.com/samuelcolvin)\n* **Breaking Change:** preserve superclass annotations for field-determination when not provided in subclass, [#757](https://github.com/pydantic/pydantic/pull/757) by [@dmontagu](https://github.com/dmontagu)\n* **Breaking Change:** `BaseSettings` now uses the special `env` settings to define which environment variables to\n read, not aliases, [#847](https://github.com/pydantic/pydantic/pull/847) by [@samuelcolvin](https://github.com/samuelcolvin)\n* add support for `assert` statements inside validators, [#653](https://github.com/pydantic/pydantic/pull/653) by [@abdusco](https://github.com/abdusco)\n* Update documentation to specify the use of `pydantic.dataclasses.dataclass` and subclassing `pydantic.BaseModel`, [#710](https://github.com/pydantic/pydantic/pull/710) by [@maddosaurus](https://github.com/maddosaurus)\n* Allow custom JSON decoding and encoding via `json_loads` and `json_dumps` `Config` properties, [#714](https://github.com/pydantic/pydantic/pull/714) by [@samuelcolvin](https://github.com/samuelcolvin)\n* make all annotated fields occur in the order declared, [#715](https://github.com/pydantic/pydantic/pull/715) by [@dmontagu](https://github.com/dmontagu)\n* use pytest to test `mypy` integration, [#735](https://github.com/pydantic/pydantic/pull/735) by [@dmontagu](https://github.com/dmontagu)\n* add `__repr__` method to `ErrorWrapper`, [#738](https://github.com/pydantic/pydantic/pull/738) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Added support for `FrozenSet` members in dataclasses, and a better error when attempting to use types from the `typing` module that are not supported by Pydantic, [#745](https://github.com/pydantic/pydantic/pull/745) by [@djpetti](https://github.com/djpetti)\n* add documentation for Pycharm Plugin, [#750](https://github.com/pydantic/pydantic/pull/750) by [@koxudaxi](https://github.com/koxudaxi)\n* fix broken examples in the docs, [#753](https://github.com/pydantic/pydantic/pull/753) by [@dmontagu](https://github.com/dmontagu)\n* moving typing related objects into `pydantic.typing`, [#761](https://github.com/pydantic/pydantic/pull/761) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Minor performance improvements to `ErrorWrapper`, `ValidationError` and datetime parsing, [#763](https://github.com/pydantic/pydantic/pull/763) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Improvements to `datetime`/`date`/`time`/`timedelta` types: more descriptive errors,\n change errors to `value_error` not `type_error`, support bytes, [#766](https://github.com/pydantic/pydantic/pull/766) by [@samuelcolvin](https://github.com/samuelcolvin)\n* fix error messages for `Literal` types with multiple allowed values, [#770](https://github.com/pydantic/pydantic/pull/770) by [@dmontagu](https://github.com/dmontagu)\n* Improved auto-generated `title` field in JSON schema by converting underscore to space, [#772](https://github.com/pydantic/pydantic/pull/772) by [@skewty](https://github.com/skewty)\n* support `mypy --no-implicit-reexport` for dataclasses, also respect `--no-implicit-reexport` in pydantic itself, [#783](https://github.com/pydantic/pydantic/pull/783) by [@samuelcolvin](https://github.com/samuelcolvin)\n* add the `PaymentCardNumber` type, [#790](https://github.com/pydantic/pydantic/pull/790) by [@matin](https://github.com/matin)\n* Fix const validations for lists, [#794](https://github.com/pydantic/pydantic/pull/794) by [@hmvp](https://github.com/hmvp)\n* Set `additionalProperties` to false in schema for models with extra fields disallowed, [#796](https://github.com/pydantic/pydantic/pull/796) by [@Code0x58](https://github.com/Code0x58)\n* `EmailStr` validation method now returns local part case-sensitive per RFC 5321, [#798](https://github.com/pydantic/pydantic/pull/798) by [@henriklindgren](https://github.com/henriklindgren)\n* Added ability to validate strictness to `ConstrainedFloat`, `ConstrainedInt` and `ConstrainedStr` and added\n `StrictFloat` and `StrictInt` classes, [#799](https://github.com/pydantic/pydantic/pull/799) by [@DerRidda](https://github.com/DerRidda)\n* Improve handling of `None` and `Optional`, replace `whole` with `each_item` (inverse meaning, default `False`)\n on validators, [#803](https://github.com/pydantic/pydantic/pull/803) by [@samuelcolvin](https://github.com/samuelcolvin)\n* add support for `Type[T]` type hints, [#807](https://github.com/pydantic/pydantic/pull/807) by [@timonbimon](https://github.com/timonbimon)\n* Performance improvements from removing `change_exceptions`, change how pydantic error are constructed, [#819](https://github.com/pydantic/pydantic/pull/819) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Fix the error message arising when a `BaseModel`-type model field causes a `ValidationError` during parsing, [#820](https://github.com/pydantic/pydantic/pull/820) by [@dmontagu](https://github.com/dmontagu)\n* allow `getter_dict` on `Config`, modify `GetterDict` to be more like a `Mapping` object and thus easier to work with, [#821](https://github.com/pydantic/pydantic/pull/821) by [@samuelcolvin](https://github.com/samuelcolvin)\n* Only check `TypeVar` param on base `GenericModel` class, [#842](https://github.com/pydantic/pydantic/pull/842) by [@zpencerq](https://github.com/zpencerq)\n* rename `Model._schema_cache` -> `Model.__schema_cache__`, `Model._json_encoder` -> `Model.__json_encoder__`,\n `Model._custom_root_type` -> `Model.__custom_root_type__`, [#851](https://github.com/pydantic/pydantic/pull/851) by [@samuelcolvin](https://github.com/samuelcolvin)\n\n\n... see [here](https://docs.pydantic.dev/changelog/#v0322-2019-08-17) for earlier changes.\n", + "description_content_type": "text/markdown", + "author_email": "Samuel Colvin , Eric Jolibois , Hasan Ramezani , Adrian Garcia Badaracco <1755071+adriangb@users.noreply.github.com>, Terrence Dorsey , David Montague ", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: MacOS X", + "Framework :: Hypothesis", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Unix", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Internet", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "requires_dist": [ + "annotated-types>=0.4.0", + "pydantic-core==2.10.1", + "typing-extensions>=4.6.1", + "email-validator>=2.0.0; extra == 'email'" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/pydantic/pydantic", + "Documentation, https://docs.pydantic.dev", + "Funding, https://github.com/sponsors/samuelcolvin", + "Source, https://github.com/pydantic/pydantic", + "Changelog, https://docs.pydantic.dev/latest/changelog/" + ], + "provides_extra": [ + "email" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/39/09/120c06a52ed4bb1022d060bec0a16e5deb4ce79a1c4c11ef9519bc32b59f/pydantic_core-2.10.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "archive_info": { + "hash": "sha256=caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8", + "hashes": { + "sha256": "caa48fc31fc7243e50188197b5f0c4228956f97b954f76da157aae7f67269ae8" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "pydantic_core", + "version": "2.10.1", + "description": "# pydantic-core\n\n[![CI](https://github.com/pydantic/pydantic-core/workflows/ci/badge.svg?event=push)](https://github.com/pydantic/pydantic-core/actions?query=event%3Apush+branch%3Amain+workflow%3Aci)\n[![Coverage](https://codecov.io/gh/pydantic/pydantic-core/branch/main/graph/badge.svg)](https://codecov.io/gh/pydantic/pydantic-core)\n[![pypi](https://img.shields.io/pypi/v/pydantic-core.svg)](https://pypi.python.org/pypi/pydantic-core)\n[![versions](https://img.shields.io/pypi/pyversions/pydantic-core.svg)](https://github.com/pydantic/pydantic-core)\n[![license](https://img.shields.io/github/license/pydantic/pydantic-core.svg)](https://github.com/pydantic/pydantic-core/blob/main/LICENSE)\n\nThis package provides the core functionality for [pydantic](https://docs.pydantic.dev) validation and serialization.\n\nPydantic-core is currently around 17x faster than pydantic V1.\nSee [`tests/benchmarks/`](./tests/benchmarks/) for details.\n\n## Example of direct usage\n\n_NOTE: You should not need to use pydantic-core directly; instead, use pydantic, which in turn uses pydantic-core._\n\n```py\nfrom pydantic_core import SchemaValidator, ValidationError\n\n\nv = SchemaValidator(\n {\n 'type': 'typed-dict',\n 'fields': {\n 'name': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'str',\n },\n },\n 'age': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'int',\n 'ge': 18,\n },\n },\n 'is_developer': {\n 'type': 'typed-dict-field',\n 'schema': {\n 'type': 'default',\n 'schema': {'type': 'bool'},\n 'default': True,\n },\n },\n },\n }\n)\n\nr1 = v.validate_python({'name': 'Samuel', 'age': 35})\nassert r1 == {'name': 'Samuel', 'age': 35, 'is_developer': True}\n\n# pydantic-core can also validate JSON directly\nr2 = v.validate_json('{\"name\": \"Samuel\", \"age\": 35}')\nassert r1 == r2\n\ntry:\n v.validate_python({'name': 'Samuel', 'age': 11})\nexcept ValidationError as e:\n print(e)\n \"\"\"\n 1 validation error for model\n age\n Input should be greater than or equal to 18\n [type=greater_than_equal, context={ge: 18}, input_value=11, input_type=int]\n \"\"\"\n```\n\n## Getting Started\n\nYou'll need rust stable [installed](https://rustup.rs/), or rust nightly if you want to generate accurate coverage.\n\nWith rust and python 3.7+ installed, compiling pydantic-core should be possible with roughly the following:\n\n```bash\n# clone this repo or your fork\ngit clone git@github.com:pydantic/pydantic-core.git\ncd pydantic-core\n# create a new virtual env\npython3 -m venv env\nsource env/bin/activate\n# install dependencies and install pydantic-core\nmake install\n```\n\nThat should be it, the example shown above should now run.\n\nYou might find it useful to look at [`python/pydantic_core/_pydantic_core.pyi`](./python/pydantic_core/_pydantic_core.pyi) and\n[`python/pydantic_core/core_schema.py`](./python/pydantic_core/core_schema.py) for more information on the python API,\nbeyond that, [`tests/`](./tests) provide a large number of examples of usage.\n\nIf you want to contribute to pydantic-core, you'll want to use some other make commands:\n* `make build-dev` to build the package during development\n* `make build-prod` to perform an optimised build for benchmarking\n* `make test` to run the tests\n* `make testcov` to run the tests and generate a coverage report\n* `make lint` to run the linter\n* `make format` to format python and rust code\n* `make` to run `format build-dev lint test`\n\n## Profiling\n\nIt's possible to profile the code using the [`flamegraph` utility from `flamegraph-rs`](https://github.com/flamegraph-rs/flamegraph). (Tested on Linux.) You can install this with `cargo install flamegraph`.\n\nRun `make build-profiling` to install a release build with debugging symbols included (needed for profiling).\n\nOnce that is built, you can profile pytest benchmarks with (e.g.):\n\n```bash\nflamegraph -- pytest tests/benchmarks/test_micro_benchmarks.py -k test_list_of_ints_core_py --benchmark-enable\n```\nThe `flamegraph` command will produce an interactive SVG at `flamegraph.svg`.\n\n## Releasing\n\n1. Bump package version locally. Do not just edit `Cargo.toml` on Github, you need both `Cargo.toml` and `Cargo.lock` to be updated.\n2. Make a PR for the version bump and merge it.\n3. Go to https://github.com/pydantic/pydantic-core/releases and click \"Draft a new release\"\n4. In the \"Choose a tag\" dropdown enter the new tag `v` and select \"Create new tag on publish\" when the option appears.\n5. Enter the release title in the form \"v \"\n6. Click Generate release notes button\n7. Click Publish release\n8. Go to https://github.com/pydantic/pydantic-core/actions and ensure that all build for release are done successfully.\n9. Go to https://pypi.org/project/pydantic-core/ and ensure that the latest release is published.\n10. Done 🎉\n\n", + "description_content_type": "text/markdown; charset=UTF-8; variant=GFM", + "home_page": "https://github.com/pydantic/pydantic-core", + "author_email": "Samuel Colvin ", + "license": "MIT", + "classifier": [ + "Development Status :: 3 - Alpha", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Rust", + "Framework :: Pydantic", + "Intended Audience :: Developers", + "Intended Audience :: Information Technology", + "License :: OSI Approved :: MIT License", + "Operating System :: POSIX :: Linux", + "Operating System :: Microsoft :: Windows", + "Operating System :: MacOS", + "Typing :: Typed" + ], + "requires_dist": [ + "typing-extensions >=4.6.0, !=4.7.0" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://github.com/pydantic/pydantic-core", + "Funding, https://github.com/sponsors/samuelcolvin", + "Source, https://github.com/pydantic/pydantic-core" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/43/88/29adf0b44ba6ac85045e63734ae0997d3c58d8b1a91c914d240828d0d73d/Pygments-2.16.1-py3-none-any.whl", + "archive_info": { + "hash": "sha256=13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692", + "hashes": { + "sha256": "13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "Pygments", + "version": "2.16.1", + "summary": "Pygments is a syntax highlighting package written in Python.", + "description": "Pygments\n~~~~~~~~\n\nPygments is a syntax highlighting package written in Python.\n\nIt is a generic syntax highlighter suitable for use in code hosting, forums,\nwikis or other applications that need to prettify source code. Highlights\nare:\n\n* a wide range of over 500 languages and other text formats is supported\n* special attention is paid to details, increasing quality by a fair amount\n* support for new languages and formats are added easily\n* a number of output formats, presently HTML, LaTeX, RTF, SVG, all image\n formats that PIL supports and ANSI sequences\n* it is usable as a command-line tool and as a library\n\nCopyright 2006-2023 by the Pygments team, see ``AUTHORS``.\nLicensed under the BSD, see ``LICENSE`` for details.\n", + "description_content_type": "text/x-rst", + "keywords": [ + "syntax", + "highlighting" + ], + "author_email": "Georg Brandl ", + "maintainer": "Matthäus G. Chajdas", + "maintainer_email": "Georg Brandl , Jean Abou Samra ", + "license": "BSD-2-Clause", + "classifier": [ + "Development Status :: 6 - Mature", + "Intended Audience :: Developers", + "Intended Audience :: End Users/Desktop", + "Intended Audience :: System Administrators", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Text Processing :: Filters", + "Topic :: Utilities" + ], + "requires_dist": [ + "importlib-metadata ; (python_version < \"3.8\") and extra == 'plugins'" + ], + "requires_python": ">=3.7", + "project_url": [ + "Homepage, https://pygments.org", + "Documentation, https://pygments.org/docs", + "Source, https://github.com/pygments/pygments", + "Bug Tracker, https://github.com/pygments/pygments/issues", + "Changelog, https://github.com/pygments/pygments/blob/master/CHANGES" + ], + "provides_extra": [ + "plugins" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/2b/4f/e04a8067c7c96c364cef7ef73906504e2f40d690811c021e1a1901473a19/PyJWT-2.8.0-py3-none-any.whl", + "archive_info": { + "hash": "sha256=59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320", + "hashes": { + "sha256": "59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "PyJWT", + "version": "2.8.0", + "summary": "JSON Web Token implementation in Python", + "description": "PyJWT\n=====\n\n.. image:: https://github.com/jpadilla/pyjwt/workflows/CI/badge.svg\n :target: https://github.com/jpadilla/pyjwt/actions?query=workflow%3ACI\n\n.. image:: https://img.shields.io/pypi/v/pyjwt.svg\n :target: https://pypi.python.org/pypi/pyjwt\n\n.. image:: https://codecov.io/gh/jpadilla/pyjwt/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/jpadilla/pyjwt\n\n.. image:: https://readthedocs.org/projects/pyjwt/badge/?version=stable\n :target: https://pyjwt.readthedocs.io/en/stable/\n\nA Python implementation of `RFC 7519 `_. Original implementation was written by `@progrium `_.\n\nSponsor\n-------\n\n+--------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n| |auth0-logo| | If you want to quickly add secure token-based authentication to Python projects, feel free to check Auth0's Python SDK and free plan at `auth0.com/developers `_. |\n+--------------+-----------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+\n\n.. |auth0-logo| image:: https://user-images.githubusercontent.com/83319/31722733-de95bbde-b3ea-11e7-96bf-4f4e8f915588.png\n\nInstalling\n----------\n\nInstall with **pip**:\n\n.. code-block:: console\n\n $ pip install PyJWT\n\n\nUsage\n-----\n\n.. code-block:: pycon\n\n >>> import jwt\n >>> encoded = jwt.encode({\"some\": \"payload\"}, \"secret\", algorithm=\"HS256\")\n >>> print(encoded)\n eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg\n >>> jwt.decode(encoded, \"secret\", algorithms=[\"HS256\"])\n {'some': 'payload'}\n\nDocumentation\n-------------\n\nView the full docs online at https://pyjwt.readthedocs.io/en/stable/\n\n\nTests\n-----\n\nYou can run tests from the project root after cloning with:\n\n.. code-block:: console\n\n $ tox\n", + "description_content_type": "text/x-rst", + "keywords": [ + "json", + "jwt", + "security", + "signing", + "token", + "web" + ], + "home_page": "https://github.com/jpadilla/pyjwt", + "author": "Jose Padilla", + "author_email": "hello@jpadilla.com", + "license": "MIT", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "Natural Language :: English", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: Utilities" + ], + "requires_dist": [ + "typing-extensions ; python_version <= \"3.7\"", + "cryptography (>=3.4.0) ; extra == 'crypto'", + "sphinx (<5.0.0,>=4.5.0) ; extra == 'dev'", + "sphinx-rtd-theme ; extra == 'dev'", + "zope.interface ; extra == 'dev'", + "cryptography (>=3.4.0) ; extra == 'dev'", + "pytest (<7.0.0,>=6.0.0) ; extra == 'dev'", + "coverage[toml] (==5.0.4) ; extra == 'dev'", + "pre-commit ; extra == 'dev'", + "sphinx (<5.0.0,>=4.5.0) ; extra == 'docs'", + "sphinx-rtd-theme ; extra == 'docs'", + "zope.interface ; extra == 'docs'", + "pytest (<7.0.0,>=6.0.0) ; extra == 'tests'", + "coverage[toml] (==5.0.4) ; extra == 'tests'" + ], + "requires_python": ">=3.7", + "provides_extra": [ + "crypto", + "dev", + "docs", + "tests" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/83/7f/feffd97af851e2a837b5ca9bfbe570002c45397734724e4abfd4c62fdd0d/python_daemon-3.0.1-py3-none-any.whl", + "archive_info": { + "hash": "sha256=42bb848a3260a027fa71ad47ecd959e471327cb34da5965962edd5926229f341", + "hashes": { + "sha256": "42bb848a3260a027fa71ad47ecd959e471327cb34da5965962edd5926229f341" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "python-daemon", + "version": "3.0.1", + "summary": "Library to implement a well-behaved Unix daemon process.", + "description": "This library implements the well-behaved daemon specification of\n:pep:`3143`, “Standard daemon process library”.\n\nA well-behaved Unix daemon process is tricky to get right, but the\nrequired steps are much the same for every daemon program. A\n`DaemonContext` instance holds the behaviour and configured\nprocess environment for the program; use the instance as a context\nmanager to enter a daemon state.\n\nSimple example of usage::\n\n import daemon\n\n from spam import do_main_program\n\n with daemon.DaemonContext():\n do_main_program()\n\nCustomisation of the steps to become a daemon is available by\nsetting options on the `DaemonContext` instance; see the\ndocumentation for that class for each option.\n", + "description_content_type": "text/x-rst", + "keywords": [ + "daemon", + "fork", + "unix" + ], + "home_page": "https://pagure.io/python-daemon/", + "author": "Ben Finney", + "author_email": "ben+python@benfinney.id.au", + "license": "Apache-2", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "License :: OSI Approved :: Apache Software License", + "Operating System :: POSIX", + "Programming Language :: Python :: 3", + "Intended Audience :: Developers", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + "requires_dist": [ + "docutils", + "lockfile (>=0.10)", + "setuptools (>=62.4.0)", + "coverage ; extra == 'devel'", + "docutils ; extra == 'devel'", + "isort ; extra == 'devel'", + "testscenarios (>=0.4) ; extra == 'devel'", + "testtools ; extra == 'devel'", + "twine ; extra == 'devel'", + "coverage ; extra == 'test'", + "docutils ; extra == 'test'", + "testscenarios (>=0.4) ; extra == 'test'", + "testtools ; extra == 'test'" + ], + "requires_python": ">=3", + "project_url": [ + "Change Log, https://pagure.io/python-daemon/blob/main/f/ChangeLog", + "Source, https://pagure.io/python-daemon/", + "Issue Tracker, https://pagure.io/python-daemon/issues" + ], + "provides_extra": [ + "devel", + "test" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl", + "archive_info": { + "hash": "sha256=961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9", + "hashes": { + "sha256": "961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "python-dateutil", + "version": "2.8.2", + "platform": [ + "UNKNOWN" + ], + "summary": "Extensions to the standard Python datetime module", + "description": "dateutil - powerful extensions to datetime\n==========================================\n\n|pypi| |support| |licence|\n\n|gitter| |readthedocs|\n\n|travis| |appveyor| |pipelines| |coverage|\n\n.. |pypi| image:: https://img.shields.io/pypi/v/python-dateutil.svg?style=flat-square\n :target: https://pypi.org/project/python-dateutil/\n :alt: pypi version\n\n.. |support| image:: https://img.shields.io/pypi/pyversions/python-dateutil.svg?style=flat-square\n :target: https://pypi.org/project/python-dateutil/\n :alt: supported Python version\n\n.. |travis| image:: https://img.shields.io/travis/dateutil/dateutil/master.svg?style=flat-square&label=Travis%20Build\n :target: https://travis-ci.org/dateutil/dateutil\n :alt: travis build status\n\n.. |appveyor| image:: https://img.shields.io/appveyor/ci/dateutil/dateutil/master.svg?style=flat-square&logo=appveyor\n :target: https://ci.appveyor.com/project/dateutil/dateutil\n :alt: appveyor build status\n\n.. |pipelines| image:: https://dev.azure.com/pythondateutilazure/dateutil/_apis/build/status/dateutil.dateutil?branchName=master\n :target: https://dev.azure.com/pythondateutilazure/dateutil/_build/latest?definitionId=1&branchName=master\n :alt: azure pipelines build status\n\n.. |coverage| image:: https://codecov.io/gh/dateutil/dateutil/branch/master/graphs/badge.svg?branch=master\n :target: https://codecov.io/gh/dateutil/dateutil?branch=master\n :alt: Code coverage\n\n.. |gitter| image:: https://badges.gitter.im/dateutil/dateutil.svg\n :alt: Join the chat at https://gitter.im/dateutil/dateutil\n :target: https://gitter.im/dateutil/dateutil\n\n.. |licence| image:: https://img.shields.io/pypi/l/python-dateutil.svg?style=flat-square\n :target: https://pypi.org/project/python-dateutil/\n :alt: licence\n\n.. |readthedocs| image:: https://img.shields.io/readthedocs/dateutil/latest.svg?style=flat-square&label=Read%20the%20Docs\n :alt: Read the documentation at https://dateutil.readthedocs.io/en/latest/\n :target: https://dateutil.readthedocs.io/en/latest/\n\nThe `dateutil` module provides powerful extensions to\nthe standard `datetime` module, available in Python.\n\nInstallation\n============\n`dateutil` can be installed from PyPI using `pip` (note that the package name is\ndifferent from the importable name)::\n\n pip install python-dateutil\n\nDownload\n========\ndateutil is available on PyPI\nhttps://pypi.org/project/python-dateutil/\n\nThe documentation is hosted at:\nhttps://dateutil.readthedocs.io/en/stable/\n\nCode\n====\nThe code and issue tracker are hosted on GitHub:\nhttps://github.com/dateutil/dateutil/\n\nFeatures\n========\n\n* Computing of relative deltas (next month, next year,\n next Monday, last week of month, etc);\n* Computing of relative deltas between two given\n date and/or datetime objects;\n* Computing of dates based on very flexible recurrence rules,\n using a superset of the `iCalendar `_\n specification. Parsing of RFC strings is supported as well.\n* Generic parsing of dates in almost any string format;\n* Timezone (tzinfo) implementations for tzfile(5) format\n files (/etc/localtime, /usr/share/zoneinfo, etc), TZ\n environment string (in all known formats), iCalendar\n format files, given ranges (with help from relative deltas),\n local machine timezone, fixed offset timezone, UTC timezone,\n and Windows registry-based time zones.\n* Internal up-to-date world timezone information based on\n Olson's database.\n* Computing of Easter Sunday dates for any given year,\n using Western, Orthodox or Julian algorithms;\n* A comprehensive test suite.\n\nQuick example\n=============\nHere's a snapshot, just to give an idea about the power of the\npackage. For more examples, look at the documentation.\n\nSuppose you want to know how much time is left, in\nyears/months/days/etc, before the next easter happening on a\nyear with a Friday 13th in August, and you want to get today's\ndate out of the \"date\" unix system command. Here is the code:\n\n.. code-block:: python3\n\n >>> from dateutil.relativedelta import *\n >>> from dateutil.easter import *\n >>> from dateutil.rrule import *\n >>> from dateutil.parser import *\n >>> from datetime import *\n >>> now = parse(\"Sat Oct 11 17:13:46 UTC 2003\")\n >>> today = now.date()\n >>> year = rrule(YEARLY,dtstart=now,bymonth=8,bymonthday=13,byweekday=FR)[0].year\n >>> rdelta = relativedelta(easter(year), today)\n >>> print(\"Today is: %s\" % today)\n Today is: 2003-10-11\n >>> print(\"Year with next Aug 13th on a Friday is: %s\" % year)\n Year with next Aug 13th on a Friday is: 2004\n >>> print(\"How far is the Easter of that year: %s\" % rdelta)\n How far is the Easter of that year: relativedelta(months=+6)\n >>> print(\"And the Easter of that year is: %s\" % (today+rdelta))\n And the Easter of that year is: 2004-04-11\n\nBeing exactly 6 months ahead was **really** a coincidence :)\n\nContributing\n============\n\nWe welcome many types of contributions - bug reports, pull requests (code, infrastructure or documentation fixes). For more information about how to contribute to the project, see the ``CONTRIBUTING.md`` file in the repository.\n\n\nAuthor\n======\nThe dateutil module was written by Gustavo Niemeyer \nin 2003.\n\nIt is maintained by:\n\n* Gustavo Niemeyer 2003-2011\n* Tomi Pieviläinen 2012-2014\n* Yaron de Leeuw 2014-2016\n* Paul Ganssle 2015-\n\nStarting with version 2.4.1 and running until 2.8.2, all source and binary\ndistributions will be signed by a PGP key that has, at the very least, been\nsigned by the key which made the previous release. A table of release signing\nkeys can be found below:\n\n=========== ============================\nReleases Signing key fingerprint\n=========== ============================\n2.4.1-2.8.2 `6B49 ACBA DCF6 BD1C A206 67AB CD54 FCE3 D964 BEFB`_ \n=========== ============================\n\nNew releases *may* have signed tags, but binary and source distributions\nuploaded to PyPI will no longer have GPG signatures attached.\n\nContact\n=======\nOur mailing list is available at `dateutil@python.org `_. As it is hosted by the PSF, it is subject to the `PSF code of\nconduct `_.\n\nLicense\n=======\n\nAll contributions after December 1, 2017 released under dual license - either `Apache 2.0 License `_ or the `BSD 3-Clause License `_. Contributions before December 1, 2017 - except those those explicitly relicensed - are released only under the BSD 3-Clause License.\n\n\n.. _6B49 ACBA DCF6 BD1C A206 67AB CD54 FCE3 D964 BEFB:\n https://pgp.mit.edu/pks/lookup?op=vindex&search=0xCD54FCE3D964BEFB\n\n\n", + "description_content_type": "text/x-rst", + "home_page": "https://github.com/dateutil/dateutil", + "author": "Gustavo Niemeyer", + "author_email": "gustavo@niemeyer.net", + "maintainer": "Paul Ganssle", + "maintainer_email": "dateutil@python.org", + "license": "Dual License", + "classifier": [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 2", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Topic :: Software Development :: Libraries" + ], + "requires_dist": [ + "six (>=1.5)" + ], + "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7", + "project_url": [ + "Documentation, https://dateutil.readthedocs.io/en/stable/", + "Source, https://github.com/dateutil/dateutil" + ] + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/6c/73/9f872cb81fc5c3bb48f7227872c28975f998f3e7c2b1c16e95e6432bbb90/python_magic-0.4.27-py2.py3-none-any.whl", + "archive_info": { + "hash": "sha256=c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3", + "hashes": { + "sha256": "c212960ad306f700aa0d01e5d7a325d20548ff97eb9920dcd29513174f0294d3" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "python-magic", + "version": "0.4.27", + "platform": [ + "UNKNOWN" + ], + "summary": "File type identification using libmagic", + "description": "# python-magic\n[![PyPI version](https://badge.fury.io/py/python-magic.svg)](https://badge.fury.io/py/python-magic)\n[![Build Status](https://travis-ci.org/ahupp/python-magic.svg?branch=master)](https://travis-ci.org/ahupp/python-magic) [![Join the chat at https://gitter.im/ahupp/python-magic](https://badges.gitter.im/ahupp/python-magic.svg)](https://gitter.im/ahupp/python-magic?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\npython-magic is a Python interface to the libmagic file type\nidentification library. libmagic identifies file types by checking\ntheir headers according to a predefined list of file types. This\nfunctionality is exposed to the command line by the Unix command\n`file`.\n\n## Usage\n\n```python\n>>> import magic\n>>> magic.from_file(\"testdata/test.pdf\")\n'PDF document, version 1.2'\n# recommend using at least the first 2048 bytes, as less can produce incorrect identification\n>>> magic.from_buffer(open(\"testdata/test.pdf\", \"rb\").read(2048))\n'PDF document, version 1.2'\n>>> magic.from_file(\"testdata/test.pdf\", mime=True)\n'application/pdf'\n```\n\nThere is also a `Magic` class that provides more direct control,\nincluding overriding the magic database file and turning on character\nencoding detection. This is not recommended for general use. In\nparticular, it's not safe for sharing across multiple threads and\nwill fail throw if this is attempted.\n\n```python\n>>> f = magic.Magic(uncompress=True)\n>>> f.from_file('testdata/test.gz')\n'ASCII text (gzip compressed data, was \"test\", last modified: Sat Jun 28\n21:32:52 2008, from Unix)'\n```\n\nYou can also combine the flag options:\n\n```python\n>>> f = magic.Magic(mime=True, uncompress=True)\n>>> f.from_file('testdata/test.gz')\n'text/plain'\n```\n\n## Installation\n\nThe current stable version of python-magic is available on PyPI and\ncan be installed by running `pip install python-magic`.\n\nOther sources:\n\n- PyPI: http://pypi.python.org/pypi/python-magic/\n- GitHub: https://github.com/ahupp/python-magic\n\nThis module is a simple wrapper around the libmagic C library, and\nthat must be installed as well:\n\n### Debian/Ubuntu\n\n```\nsudo apt-get install libmagic1\n```\n\n### Windows\n\nYou'll need DLLs for libmagic. @julian-r maintains a pypi package with the DLLs, you can fetch it with:\n\n```\npip install python-magic-bin\n```\n\n### OSX\n\n- When using Homebrew: `brew install libmagic`\n- When using macports: `port install file`\n\n### Troubleshooting\n\n- 'MagicException: could not find any magic files!': some\n installations of libmagic do not correctly point to their magic\n database file. Try specifying the path to the file explicitly in the\n constructor: `magic.Magic(magic_file=\"path_to_magic_file\")`.\n\n- 'WindowsError: [Error 193] %1 is not a valid Win32 application':\n Attempting to run the 32-bit libmagic DLL in a 64-bit build of\n python will fail with this error. Here are 64-bit builds of libmagic for windows: https://github.com/pidydx/libmagicwin64.\n Newer version can be found here: https://github.com/nscaife/file-windows.\n\n- 'WindowsError: exception: access violation writing 0x00000000 ' This may indicate you are mixing\n Windows Python and Cygwin Python. Make sure your libmagic and python builds are consistent.\n\n\n## Bug Reports\n\npython-magic is a thin layer over the libmagic C library.\nHistorically, most bugs that have been reported against python-magic\nare actually bugs in libmagic; libmagic bugs can be reported on their\ntracker here: https://bugs.astron.com/my_view_page.php. If you're not\nsure where the bug lies feel free to file an issue on GitHub and I can\ntriage it.\n\n## Running the tests\n\nTo run the tests across a variety of linux distributions (depends on Docker):\n\n```\n./test_docker.sh\n```\n\nTo run tests locally across all available python versions:\n\n```\n./test/run.py\n```\n\nTo run against a specific python version:\n\n```\nLC_ALL=en_US.UTF-8 python3 test/test.py\n```\n\n## libmagic python API compatibility\n\nThe python bindings shipped with libmagic use a module name that conflicts with this package. To work around this, python-magic includes a compatibility layer for the libmagic API. See [COMPAT.md](COMPAT.md) for a guide to libmagic / python-magic compatibility.\n\n## Versioning\n\nMinor version bumps should be backwards compatible. Major bumps are not.\n\n## Author\n\nWritten by Adam Hupp in 2001 for a project that never got off the\nground. It originally used SWIG for the C library bindings, but\nswitched to ctypes once that was part of the python standard library.\n\nYou can contact me via my [website](http://hupp.org/adam) or\n[GitHub](http://github.com/ahupp).\n\n## License\n\npython-magic is distributed under the MIT license. See the included\nLICENSE file for details.\n\nI am providing code in the repository to you under an open source license. Because this is my personal repository, the license you receive to my code is from me and not my employer (Facebook).\n\n\n", + "description_content_type": "text/markdown", + "keywords": [ + "mime", + "magic", + "file" + ], + "home_page": "http://github.com/ahupp/python-magic", + "author": "Adam Hupp", + "author_email": "adam@hupp.org", + "license": "MIT", + "classifier": [ + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: Implementation :: CPython" + ], + "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + } + }, + { + "download_info": { + "url": "https://files.pythonhosted.org/packages/0b/aa/97165daa6e319409c5c2582e62736a7353bda3c90d90fdcb0b11e116dd2d/python-nvd3-0.15.0.tar.gz", + "archive_info": { + "hash": "sha256=fbd75ff47e0ef255b4aa4f3a8b10dc8b4024aa5a9a7abed5b2406bd3cb817715", + "hashes": { + "sha256": "fbd75ff47e0ef255b4aa4f3a8b10dc8b4024aa5a9a7abed5b2406bd3cb817715" + } + } + }, + "is_direct": false, + "is_yanked": false, + "requested": true, + "metadata": { + "metadata_version": "2.1", + "name": "python-nvd3", + "version": "0.15.0", + "summary": "Python NVD3 - Chart Library for d3.js", + "description": "Python Wrapper for NVD3 - It's time for beautiful charts\n========================================================\n\n:Description: Python-nvd3 is a wrapper for NVD3 graph library\n:NVD3: NVD3 http://nvd3.org/\n:D3: Data-Driven Documents http://d3js.org/\n:Maintainers: Areski_ & Oz_\n:Contributors: `list of contributors `_\n\n.. _Areski: https://github.com/areski/\n.. _Oz: https://github.com/oz123/\n\n.. image:: https://api.travis-ci.org/areski/python-nvd3.png?branch=develop\n :target: https://travis-ci.org/areski/python-nvd3\n\n.. image:: https://coveralls.io/repos/areski/python-nvd3/badge.png?branch=develop\n :target: https://coveralls.io/r/areski/python-nvd3?branch=develop\n\n.. image:: https://img.shields.io/pypi/v/python-nvd3.svg\n :target: https://pypi.python.org/pypi/python-nvd3/\n :alt: Latest Version\n\n.. image:: https://img.shields.io/pypi/dm/python-nvd3.svg\n :target: https://pypi.python.org/pypi/python-nvd3/\n :alt: Downloads\n\n.. image:: https://img.shields.io/pypi/pyversions/python-nvd3.svg\n :target: https://pypi.python.org/pypi/python-nvd3/\n :alt: Supported Python versions\n\n.. image:: https://img.shields.io/pypi/l/python-nvd3.svg\n :target: https://pypi.python.org/pypi/python-nvd3/\n :alt: License\n\n.. image:: https://requires.io/github/areski/python-nvd3/requirements.svg?branch=develop\n :target: https://requires.io/github/areski/python-nvd3/requirements/?branch=develop\n :alt: Requirements Status\n\nNVD3 is an attempt to build re-usable charts and chart components\nfor d3.js without taking away the power that d3.js offers you.\n\nPython-NVD3 makes your life easy! You write Python and the library\nrenders JavaScript for you!\nThese graphs can be part of your web application:\n\n .. image:: https://raw.githubusercontent.com/areski/python-nvd3/develop/docs/showcase/multiple-charts.png\n\n\n\n\nWant to try it yourself? Install python-nvd3, enter your python shell and try this quick demo::\n\n >>> from nvd3 import pieChart\n >>> type = 'pieChart'\n >>> chart = pieChart(name=type, color_category='category20c', height=450, width=450)\n >>> xdata = [\"Orange\", \"Banana\", \"Pear\", \"Kiwi\", \"Apple\", \"Strawberry\", \"Pineapple\"]\n >>> ydata = [3, 4, 0, 1, 5, 7, 3]\n >>> extra_serie = {\"tooltip\": {\"y_start\": \"\", \"y_end\": \" cal\"}}\n >>> chart.add_serie(y=ydata, x=xdata, extra=extra_serie)\n >>> chart.buildcontent()\n >>> print chart.htmlcontent\n\n\nThis will output the following HTML to render a live chart. The HTML could be\nstored into a HTML file, used in a Web application, or even used via Ipython Notebook::\n\n
\n \n\n\nDocumentation\n-------------\n\nCheck out the documentation on `Read the Docs`_ for some live Chart examples!\n\n.. _Read the Docs: http://python-nvd3.readthedocs.org\n\nInstallation\n------------\n\nInstall, upgrade and uninstall python-nvd3 with these commands::\n\n $ pip install python-nvd3\n $ pip install --upgrade python-nvd3\n $ pip uninstall python-nvd3\n\n\nDependecies\n-----------\n\nD3 and NvD3 can be installed through bower (which itself can be installed through npm).\nSee http://bower.io/ and https://npmjs.org for further information.\nTo install bower globally execute::\n\n $ npm install -g bower\n\nNote : you might prefer to save your npm dependencies locally in a ``package.json`` file.\n\nThen in the directory where you will use python-nvd3, just execute the following commands::\n\n $ bower install d3#3.3.8\n $ bower install nvd3#1.1.12-beta\n\nThis will create a directory \"bower_components\" where d3 & nvd3 will be saved.\n\nNote : you might prefer to save your bower dependencies locally in a ``bower.json`` file.\nYou can also configure the directory where your bower dependencies will be\nsaved adding a ``.bowerrc`` file in your project root directory.\n\n\nDjango Wrapper\n--------------\n\nThere is also a django wrapper for nvd3 available:\nhttps://github.com/areski/django-nvd3\n\n\nIPython Notebooks\n-----------------\n\nPython-NVD3 works nicely within IPython Notebooks (thanks to @jdavidheiser)\n\nSee the examples directory for an Ipython notebook with python-nvd3.\n\n\nLicense\n-------\n\nPython-nvd3 is licensed under MIT, see `MIT-LICENSE.txt`.\n\n\n\n\nHistory\n-------\n\n\n0.14.0 - (2015-12-09)\n---------------------\n\n* update project structure\n* remove setuptools from requirements\n\n\n0.13.8 - (2015-04-12)\n---------------------\n\n* fix scatterChart\n\n\n0.13.7 - (2015-04-06)\n---------------------\n\n* set format on x2Axis for focus\n\n\n0.13.6 - (2015-04-06)\n---------------------\n\n* add support for focusEnable\n\n* remove linePlusBarWithFocusChart as this is replaced by linePlusBarChart with option FocusEnable():\n http://nvd3-community.github.io/nvd3/examples/documentation.html#linePlusBarChart\n\n* Sourcing JS assets over https when appropriate\n\n\n0.13.5 (2014-11-13)\n-------------------\n\n* Fix: color_list extra arguments is not mandatory on piechart\n\n\n0.13.0 (2014-08-04)\n-------------------\n\n* User Jinja2 to create the JS charts\n\n\n0.11.0 (2013-10-09)\n-------------------\n\n* allow chart_attr to be set as follow 'xAxis': '.rotateLabels(-25)'\n this will turn into calling chart.xAxis.rotateLabels(-25)\n\n\n0.11.0 (2013-10-09)\n-------------------\n\n* date setting is replaced by x_is_date\n* refactoring\n\n\n0.10.2 (2013-10-04)\n-------------------\n\n* discreteBarChart support date on xAxis\n\n\n0.10.1 (2013-10-03)\n-------------------\n\n* Remove $ sign in linePlusBarWithFocusChart\n\n\n0.10.0 (2013-10-02)\n------------------\n\n* Support new chart linePlusBarWithFocusChart\n\n\n0.9.0 (2013-09-30)\n------------------\n\n* Use Bower to install D3 and NVD3\n\n\n0.8.0 (2013-08-15)\n------------------\n\n* add NVD3Chart.buildcontent() by cmorgan (Chris Morgan)\n* Add show_labels parameter for Piechart by RaD (Ruslan Popov)\n\n\n0.7.0 (2013-07-09)\n------------------\n\n* Generalise the axis_formatting & add support for hiding the legend by nzjrs (John Stowers)\n* Fix #7 from DanMeakin, wrong str conversion of x-axis dates\n\n\n0.6.0 (2013-06-05)\n------------------\n\n* Add AM_PM function for x-axis on lineChart\n\n\n0.5.2 (2013-05-31)\n------------------\n\n* ScatterChat option to pass 'size': '10' as argument of the series\n* Fix in setup.py for python3\n\n\n0.5.1 (2013-05-30)\n------------------\n\n* Fix multiChart with date\n\n\n0.5.0 (2013-05-28)\n------------------\n\n* Add color_list option on piechart\n\n\n0.4.1 (2013-05-06)\n------------------\n\n* Fix removed forced sorted on x-axis\n\n\n0.4.0 (2013-04-28)\n------------------\n\n* Add support for Python3\n\n\n0.3.6 (2013-04-24)\n------------------\n\n* Add custom dateformat var for tooltip\n\n\n0.3.5 (2013-04-23)\n------------------\n\n* Fix style\n\n\n0.3.4 (2013-04-23)\n------------------\n\n* Support for px and % on height and width\n* Add tag_script_js property to disable tag