mirror of
https://github.com/kennethreitz/pydantic.git
synced 2026-06-05 23:00:18 +00:00
Update URLs after migrating to organization (#4348)
* update URLs * add a change file
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
blank_issues_enabled: true
|
||||
contact_links:
|
||||
- name: 🤔 Ask a Question
|
||||
url: 'https://github.com/samuelcolvin/pydantic/discussions/new?category=question'
|
||||
url: 'https://github.com/pydantic/pydantic/discussions/new?category=question'
|
||||
about: Ask a question about how to use pydantic using github discussions
|
||||
|
||||
@@ -18,5 +18,5 @@
|
||||
* [ ] Tests pass on CI and coverage remains at 100%
|
||||
* [ ] Documentation reflects the changes where applicable
|
||||
* [ ] `changes/<pull request or issue id>-<github username>.md` file added describing change
|
||||
(see [changes/README.md](https://github.com/samuelcolvin/pydantic/blob/master/changes/README.md) for details)
|
||||
(see [changes/README.md](https://github.com/pydantic/pydantic/blob/master/changes/README.md) for details)
|
||||
* [ ] My PR is ready to review, **please add a comment including the phrase "please review" to assign reviewers**
|
||||
|
||||
+4
-4
@@ -124,11 +124,11 @@ for their kind support.
|
||||
|
||||
!!! warning
|
||||
A security vulnerability, level "moderate" is fixed in v1.8.2. Please upgrade **ASAP**.
|
||||
See security advisory [CVE-2021-29510](https://github.com/samuelcolvin/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)
|
||||
See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)
|
||||
|
||||
* **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')`
|
||||
(or their negative values) does not cause an infinite loop,
|
||||
see security advisory [CVE-2021-29510](https://github.com/samuelcolvin/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)
|
||||
see security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)
|
||||
* fix schema generation with Enum by generating a valid name, #2575 by @PrettyWood
|
||||
* fix JSON schema generation with a `Literal` of an enum member, #2536 by @PrettyWood
|
||||
* Fix bug with configurations declarations that are passed as
|
||||
@@ -247,7 +247,7 @@ for their kind support.
|
||||
|
||||
* **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')`
|
||||
(or their negative values) does not cause an infinite loop,
|
||||
See security advisory [CVE-2021-29510](https://github.com/samuelcolvin/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)
|
||||
See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)
|
||||
|
||||
## v1.7.3 (2020-11-30)
|
||||
|
||||
@@ -342,7 +342,7 @@ for their kind support.
|
||||
|
||||
* **Security fix:** Fix `date` and `datetime` parsing so passing either `'infinity'` or `float('inf')`
|
||||
(or their negative values) does not cause an infinite loop,
|
||||
See security advisory [CVE-2021-29510](https://github.com/samuelcolvin/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)
|
||||
See security advisory [CVE-2021-29510](https://github.com/pydantic/pydantic/security/advisories/GHSA-5jqp-qgf6-3pvh)
|
||||
|
||||
## v1.6.1 (2020-07-15)
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
# pydantic
|
||||
|
||||
[](https://github.com/samuelcolvin/pydantic/actions?query=event%3Apush+branch%3Amaster+workflow%3ACI)
|
||||
[](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amaster+workflow%3ACI)
|
||||
[](https://coverage-badge.samuelcolvin.workers.dev/redirect/samuelcolvin/pydantic)
|
||||
[](https://pypi.python.org/pypi/pydantic)
|
||||
[](https://anaconda.org/conda-forge/pydantic)
|
||||
[](https://pepy.tech/project/pydantic)
|
||||
[](https://github.com/samuelcolvin/pydantic)
|
||||
[](https://github.com/samuelcolvin/pydantic/blob/master/LICENSE)
|
||||
[](https://github.com/pydantic/pydantic)
|
||||
[](https://github.com/pydantic/pydantic/blob/master/LICENSE)
|
||||
|
||||
Data validation and settings management using Python type hints.
|
||||
|
||||
@@ -52,4 +52,4 @@ contribution to *pydantic*, see
|
||||
|
||||
## Reporting a Security Vulnerability
|
||||
|
||||
See our [security policy](https://github.com/samuelcolvin/pydantic/security/policy).
|
||||
See our [security policy](https://github.com/pydantic/pydantic/security/policy).
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
moved repo to `pydantic/pydantic`
|
||||
Vendored
+1
-1
@@ -10,7 +10,7 @@ PROJECT_ROOT = THIS_DIR / '..' / '..'
|
||||
|
||||
def main():
|
||||
history = (PROJECT_ROOT / 'HISTORY.md').read_text()
|
||||
history = re.sub(r'#(\d+)', r'[#\1](https://github.com/samuelcolvin/pydantic/issues/\1)', history)
|
||||
history = re.sub(r'#(\d+)', r'[#\1](https://github.com/pydantic/pydantic/issues/\1)', history)
|
||||
history = re.sub(r'(\s)@([\w\-]+)', r'\1[@\2](https://github.com/\2)', history, flags=re.I)
|
||||
history = re.sub('@@', '@', history)
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@ We'd love you to contribute to *pydantic*!
|
||||
|
||||
## Issues
|
||||
|
||||
Questions, feature requests and bug reports are all welcome as [discussions or issues](https://github.com/samuelcolvin/pydantic/issues/new/choose). **However, to report a security
|
||||
vulnerability, please see our [security policy](https://github.com/samuelcolvin/pydantic/security/policy).**
|
||||
Questions, feature requests and bug reports are all welcome as [discussions or issues](https://github.com/pydantic/pydantic/issues/new/choose). **However, to report a security
|
||||
vulnerability, please see our [security policy](https://github.com/pydantic/pydantic/security/policy).**
|
||||
|
||||
To make it as simple as possible for us to help you, please include the output of the following call in your issue:
|
||||
|
||||
@@ -26,7 +26,7 @@ It should be extremely simple to get started and create a Pull Request.
|
||||
creating a pull request.
|
||||
|
||||
If you're looking for something to get your teeth into, check out the
|
||||
["help wanted"](https://github.com/samuelcolvin/pydantic/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)
|
||||
["help wanted"](https://github.com/pydantic/pydantic/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22)
|
||||
label on github.
|
||||
|
||||
To make contributing as easy and fast as possible, you'll want to run tests and linting locally. Luckily,
|
||||
|
||||
+5
-5
@@ -1,9 +1,9 @@
|
||||
[](https://github.com/samuelcolvin/pydantic/actions?query=event%3Apush+branch%3Amaster+workflow%3ACI)
|
||||
[](https://github.com/samuelcolvin/pydantic/actions?query=event%3Apush+branch%3Amaster+workflow%3ACI)
|
||||
[](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amaster+workflow%3ACI)
|
||||
[](https://github.com/pydantic/pydantic/actions?query=event%3Apush+branch%3Amaster+workflow%3ACI)
|
||||
[](https://pypi.python.org/pypi/pydantic)
|
||||
[](https://anaconda.org/conda-forge/pydantic)
|
||||
[](https://pepy.tech/project/pydantic)
|
||||
[](https://github.com/samuelcolvin/pydantic/blob/master/LICENSE)
|
||||
[](https://github.com/pydantic/pydantic/blob/master/LICENSE)
|
||||
|
||||
{!.version.md!}
|
||||
|
||||
@@ -137,7 +137,7 @@ Hundreds of organisations and packages are using *pydantic*, including:
|
||||
|
||||
[Project Jupyter](https://jupyter.org/)
|
||||
: developers of the Jupyter notebook are using *pydantic*
|
||||
[for subprojects](https://github.com/samuelcolvin/pydantic/issues/773), through the FastAPI-based Jupyter server
|
||||
[for subprojects](https://github.com/pydantic/pydantic/issues/773), through the FastAPI-based Jupyter server
|
||||
[Jupyverse](https://github.com/jupyter-server/jupyverse), and for [FPS](https://github.com/jupyter-server/fps)'s
|
||||
configuration management.
|
||||
|
||||
@@ -176,7 +176,7 @@ Hundreds of organisations and packages are using *pydantic*, including:
|
||||
*pydantic* models.
|
||||
|
||||
For a more comprehensive list of open-source projects using *pydantic* see the
|
||||
[list of dependents on github](https://github.com/samuelcolvin/pydantic/network/dependents).
|
||||
[list of dependents on github](https://github.com/pydantic/pydantic/network/dependents).
|
||||
|
||||
## Discussion of Pydantic
|
||||
|
||||
|
||||
+2
-2
@@ -74,7 +74,7 @@ Of course, you can also install these requirements manually with `pip install em
|
||||
|
||||
And if you prefer to install *pydantic* directly from the repository:
|
||||
```bash
|
||||
pip install git+git://github.com/samuelcolvin/pydantic@master#egg=pydantic
|
||||
pip install git+git://github.com/pydantic/pydantic@master#egg=pydantic
|
||||
# or with extras
|
||||
pip install git+git://github.com/samuelcolvin/pydantic@master#egg=pydantic[email,dotenv]
|
||||
pip install git+git://github.com/pydantic/pydantic@master#egg=pydantic[email,dotenv]
|
||||
```
|
||||
|
||||
@@ -12,7 +12,7 @@ _(This script is complete, it should run "as is")_
|
||||
`pydantic.BaseModel` is the better choice.
|
||||
|
||||
For more information and discussion see
|
||||
[samuelcolvin/pydantic#710](https://github.com/samuelcolvin/pydantic/issues/710).
|
||||
[samuelcolvin/pydantic#710](https://github.com/pydantic/pydantic/issues/710).
|
||||
|
||||
You can use all the standard _pydantic_ field types, and the resulting dataclass will be identical to the one
|
||||
created by the standard library `dataclass` decorator.
|
||||
|
||||
@@ -150,7 +150,7 @@ instead use the `to_lower_camel` function.
|
||||
!!! warning
|
||||
Alias priority logic changed in **v1.4** to resolve buggy and unexpected behaviour in previous versions.
|
||||
In some circumstances this may represent a **breaking change**,
|
||||
see [#1178](https://github.com/samuelcolvin/pydantic/issues/1178) and the precedence order below for details.
|
||||
see [#1178](https://github.com/pydantic/pydantic/issues/1178) and the precedence order below for details.
|
||||
|
||||
In the case where a field's alias may be defined in multiple places,
|
||||
the selected value is determined as follows (in descending order of priority):
|
||||
|
||||
@@ -167,7 +167,7 @@ _(This script is complete, it should run "as is")_
|
||||
### Data binding
|
||||
|
||||
Arbitrary classes are processed by *pydantic* using the `GetterDict` class (see
|
||||
[utils.py](https://github.com/samuelcolvin/pydantic/blob/master/pydantic/utils.py)), which attempts to
|
||||
[utils.py](https://github.com/pydantic/pydantic/blob/master/pydantic/utils.py)), which attempts to
|
||||
provide a dictionary-like interface to any class. You can customise how this works by setting your own
|
||||
sub-class of `GetterDict` as the value of `Config.getter_dict` (see [config](model_config.md)).
|
||||
|
||||
@@ -383,7 +383,7 @@ Here `StaticFoobarModel` and `DynamicFoobarModel` are identical.
|
||||
!!! warning
|
||||
See the note in [Required Optional Fields](#required-optional-fields) for the distinction between an ellipsis as a
|
||||
field default and annotation-only fields.
|
||||
See [samuelcolvin/pydantic#1047](https://github.com/samuelcolvin/pydantic/issues/1047) for more details.
|
||||
See [samuelcolvin/pydantic#1047](https://github.com/pydantic/pydantic/issues/1047) for more details.
|
||||
|
||||
Fields are defined by either a tuple of the form `(<type>, <default value>)` or just a default value. The
|
||||
special key word arguments `__config__` and `__base__` can be used to customise the new model. This includes
|
||||
@@ -542,7 +542,7 @@ To do this, you may want to use a `default_factory`.
|
||||
The `default_factory` argument is in **beta**, it has been added to *pydantic* in **v1.5** on a
|
||||
**provisional basis**. It may change significantly in future releases and its signature or behaviour will not
|
||||
be concrete until **v2**. Feedback from the community while it's still provisional would be extremely useful;
|
||||
either comment on [#866](https://github.com/samuelcolvin/pydantic/issues/866) or create a new issue.
|
||||
either comment on [#866](https://github.com/pydantic/pydantic/issues/866) or create a new issue.
|
||||
|
||||
Example of usage:
|
||||
|
||||
@@ -613,7 +613,7 @@ For example:
|
||||
_(This script is complete, it should run "as is")_
|
||||
|
||||
This is a deliberate decision of *pydantic*, and in general it's the most useful approach. See
|
||||
[here](https://github.com/samuelcolvin/pydantic/issues/578) for a longer discussion on the subject.
|
||||
[here](https://github.com/pydantic/pydantic/issues/578) for a longer discussion on the subject.
|
||||
|
||||
Nevertheless, [strict type checking](types.md#strict-types) is partially supported.
|
||||
|
||||
@@ -642,4 +642,4 @@ In addition, the `**data` argument will always be present in the signature if `C
|
||||
!!! note
|
||||
Types in the model signature are the same as declared in model annotations,
|
||||
not necessarily all the types that can actually be provided to that field.
|
||||
This may be fixed one day once [#1055](https://github.com/samuelcolvin/pydantic/issues/1055) is solved.
|
||||
This may be fixed one day once [#1055](https://github.com/pydantic/pydantic/issues/1055) is solved.
|
||||
|
||||
@@ -110,7 +110,7 @@ It has the following arguments:
|
||||
or explicitly allow an arbitrary prefix with `.*?`
|
||||
(e.g. `.*?foo` to match any string containing the substring `foo`).
|
||||
|
||||
See [#1631](https://github.com/samuelcolvin/pydantic/issues/1631)
|
||||
See [#1631](https://github.com/pydantic/pydantic/issues/1631)
|
||||
for a discussion of possible changes to *pydantic* behavior in **v2**.
|
||||
|
||||
* `repr`: a boolean which defaults to `True`. When False, the field shall be hidden from the object representation.
|
||||
|
||||
+1
-1
@@ -254,7 +254,7 @@ chose to match against the `int` type and disregarded the other types.
|
||||
when combined with matching based on the `Union` type order inside other type definitions, such as `List` and `Dict`
|
||||
types (because Python treats these definitions as singletons).
|
||||
For example, `Dict[str, Union[int, float]] == Dict[str, Union[float, int]]` with the order based on the first time it was defined.
|
||||
Please note that this can also be [affected by third party libraries](https://github.com/samuelcolvin/pydantic/issues/2835)
|
||||
Please note that this can also be [affected by third party libraries](https://github.com/pydantic/pydantic/issues/2835)
|
||||
and their internal type definitions and the import orders.
|
||||
|
||||
As such, it is recommended that, when defining `Union` annotations, the most specific type is included first and
|
||||
|
||||
@@ -7,7 +7,7 @@ boilerplate.
|
||||
The `validate_arguments` decorator is in **beta**, it has been added to *pydantic* in **v1.5** on a
|
||||
**provisional basis**. It may change significantly in future releases and its interface will not be concrete
|
||||
until **v2**. Feedback from the community while it's still provisional would be extremely useful; either comment
|
||||
on [#1205](https://github.com/samuelcolvin/pydantic/issues/1205) or create a new issue.
|
||||
on [#1205](https://github.com/pydantic/pydantic/issues/1205) or create a new issue.
|
||||
|
||||
Example of usage:
|
||||
|
||||
@@ -123,7 +123,7 @@ _(This script is complete, it should run "as is")_
|
||||
## Limitations
|
||||
|
||||
`validate_arguments` has been released on a provisional basis without all the bells and whistles, which may
|
||||
be added later, see [#1205](https://github.com/samuelcolvin/pydantic/issues/1205) for some more discussion of this.
|
||||
be added later, see [#1205](https://github.com/pydantic/pydantic/issues/1205) for some more discussion of this.
|
||||
|
||||
In particular:
|
||||
|
||||
@@ -143,7 +143,7 @@ exception by default, or both.
|
||||
*pydantic* currently leans on the side of trying to coerce types rather than raise an error if a type is wrong,
|
||||
see [model data conversion](models.md#data-conversion) and `validate_arguments` is no different.
|
||||
|
||||
See [#1098](https://github.com/samuelcolvin/pydantic/issues/1098) and other issues with the "strictness" label
|
||||
See [#1098](https://github.com/pydantic/pydantic/issues/1098) and other issues with the "strictness" label
|
||||
for a discussion of this. If *pydantic* gets a "strict" mode in future, `validate_arguments` will have an option
|
||||
to use this, it may even become the default for the decorator.
|
||||
|
||||
|
||||
@@ -264,7 +264,7 @@ configured via environment variables and therefore "required" fields do not have
|
||||
initialising a settings instance. However, pyright considers these fields as "required" and will therefore
|
||||
show an error when they're not set.
|
||||
|
||||
See [#3753](https://github.com/samuelcolvin/pydantic/issues/3753#issuecomment-1087417884) for an explanation of the
|
||||
See [#3753](https://github.com/pydantic/pydantic/issues/3753#issuecomment-1087417884) for an explanation of the
|
||||
reasons behind this, and why we can't avoid the problem.
|
||||
|
||||
There are two potential workarounds:
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ theme:
|
||||
favicon: 'favicon.png'
|
||||
|
||||
repo_name: samuelcolvin/pydantic
|
||||
repo_url: https://github.com/samuelcolvin/pydantic
|
||||
repo_url: https://github.com/pydantic/pydantic
|
||||
extra:
|
||||
analytics:
|
||||
provider: google
|
||||
|
||||
+1
-1
@@ -664,7 +664,7 @@ def error_required_dynamic_aliases(api: SemanticAnalyzerPluginInterface, context
|
||||
|
||||
def error_unexpected_behavior(detail: str, api: CheckerPluginInterface, context: Context) -> None: # pragma: no cover
|
||||
# Can't think of a good way to test this, but I confirmed it renders as desired by adding to a non-error path
|
||||
link = 'https://github.com/samuelcolvin/pydantic/issues/new/choose'
|
||||
link = 'https://github.com/pydantic/pydantic/issues/new/choose'
|
||||
full_message = f'The pydantic mypy plugin ran into unexpected behavior: {detail}\n'
|
||||
full_message += f'Please consider reporting this bug at {link} so we can try to fix it!'
|
||||
api.fail(full_message, context, code=ERROR_UNEXPECTED)
|
||||
|
||||
+1
-1
@@ -754,7 +754,7 @@ def field_singleton_sub_fields_schema(
|
||||
if schema_overrides and 'allOf' in sub_schema:
|
||||
# if the sub_field is a referenced schema we only need the referenced
|
||||
# object. Otherwise we will end up with several allOf inside anyOf.
|
||||
# See https://github.com/samuelcolvin/pydantic/issues/1209
|
||||
# See https://github.com/pydantic/pydantic/issues/1209
|
||||
sub_schema = sub_schema['allOf'][0]
|
||||
|
||||
if sub_schema.keys() == {'discriminator', 'anyOf'}:
|
||||
|
||||
+2
-2
@@ -95,7 +95,7 @@ else:
|
||||
We can't directly use `typing.get_origin` since we need a fallback to support
|
||||
custom generic classes like `ConstrainedList`
|
||||
It should be useless once https://github.com/cython/cython/issues/3537 is
|
||||
solved and https://github.com/samuelcolvin/pydantic/pull/1753 is merged.
|
||||
solved and https://github.com/pydantic/pydantic/pull/1753 is merged.
|
||||
"""
|
||||
if type(tp).__name__ in AnnotatedTypeNames:
|
||||
return cast(Type[Any], Annotated) # mypy complains about _SpecialForm
|
||||
@@ -370,7 +370,7 @@ def resolve_annotations(raw_annotations: Dict[str, Type[Any]], module_name: Opti
|
||||
try:
|
||||
module = sys.modules[module_name]
|
||||
except KeyError:
|
||||
# happens occasionally, see https://github.com/samuelcolvin/pydantic/issues/2363
|
||||
# happens occasionally, see https://github.com/pydantic/pydantic/issues/2363
|
||||
pass
|
||||
else:
|
||||
base_globals = module.__dict__
|
||||
|
||||
@@ -44,7 +44,7 @@ class ReplaceLinks:
|
||||
|
||||
def replace_issues(self, m):
|
||||
id = m.group(1)
|
||||
self.links.add(f'.. _#{id}: https://github.com/samuelcolvin/pydantic/issues/{id}')
|
||||
self.links.add(f'.. _#{id}: https://github.com/pydantic/pydantic/issues/{id}')
|
||||
return f'`#{id}`_'
|
||||
|
||||
def replace_users(self, m):
|
||||
@@ -60,7 +60,7 @@ description = 'Data validation and settings management using python type hints'
|
||||
THIS_DIR = Path(__file__).resolve().parent
|
||||
try:
|
||||
history = (THIS_DIR / 'HISTORY.md').read_text(encoding='utf-8')
|
||||
history = re.sub(r'#(\d+)', r'[#\1](https://github.com/samuelcolvin/pydantic/issues/\1)', history)
|
||||
history = re.sub(r'#(\d+)', r'[#\1](https://github.com/pydantic/pydantic/issues/\1)', history)
|
||||
history = re.sub(r'( +)@([\w\-]+)', r'\1[@\2](https://github.com/\2)', history, flags=re.I)
|
||||
history = re.sub('@@', '@', history)
|
||||
|
||||
@@ -122,7 +122,7 @@ setup(
|
||||
],
|
||||
author='Samuel Colvin',
|
||||
author_email='s@muelcolvin.com',
|
||||
url='https://github.com/samuelcolvin/pydantic',
|
||||
url='https://github.com/pydantic/pydantic',
|
||||
license='MIT',
|
||||
packages=['pydantic'],
|
||||
package_data={'pydantic': ['py.typed']},
|
||||
|
||||
@@ -137,7 +137,7 @@ def test_config_field_info():
|
||||
|
||||
|
||||
def test_annotated_alias() -> None:
|
||||
# https://github.com/samuelcolvin/pydantic/issues/2971
|
||||
# https://github.com/pydantic/pydantic/issues/2971
|
||||
|
||||
StrAlias = Annotated[str, Field(max_length=3)]
|
||||
IntAlias = Annotated[int, Field(default_factory=lambda: 2)]
|
||||
|
||||
@@ -131,7 +131,7 @@ def test_namedtuple_right_length():
|
||||
|
||||
def test_namedtuple_postponed_annotation():
|
||||
"""
|
||||
https://github.com/samuelcolvin/pydantic/issues/2760
|
||||
https://github.com/pydantic/pydantic/issues/2760
|
||||
"""
|
||||
|
||||
class Tup(NamedTuple):
|
||||
|
||||
@@ -1898,7 +1898,7 @@ return Model
|
||||
|
||||
|
||||
def test_resolve_annotations_module_missing(tmp_path):
|
||||
# see https://github.com/samuelcolvin/pydantic/issues/2363
|
||||
# see https://github.com/pydantic/pydantic/issues/2363
|
||||
file_path = tmp_path / 'module_to_load.py'
|
||||
# language=Python
|
||||
file_path.write_text(
|
||||
|
||||
@@ -509,7 +509,7 @@ def test_env_takes_precedence(env):
|
||||
|
||||
def test_config_file_settings_nornir(env):
|
||||
"""
|
||||
See https://github.com/samuelcolvin/pydantic/pull/341#issuecomment-450378771
|
||||
See https://github.com/pydantic/pydantic/pull/341#issuecomment-450378771
|
||||
"""
|
||||
|
||||
def nornir_settings_source(settings: BaseSettings) -> Dict[str, Any]:
|
||||
|
||||
Reference in New Issue
Block a user