first comit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
pip
|
||||
@@ -0,0 +1,282 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: traitlets
|
||||
Version: 5.14.1
|
||||
Summary: Traitlets Python configuration system
|
||||
Project-URL: Homepage, https://github.com/ipython/traitlets
|
||||
Project-URL: Documentation, https://traitlets.readthedocs.io
|
||||
Project-URL: Source, https://github.com/ipython/traitlets
|
||||
Project-URL: Funding, https://numfocus.org
|
||||
Project-URL: Tracker, https://github.com/ipython/traitlets/issues
|
||||
Author-email: IPython Development Team <ipython-dev@python.org>
|
||||
License: BSD 3-Clause License
|
||||
|
||||
- Copyright (c) 2001-, IPython Development Team
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
License-File: LICENSE
|
||||
Keywords: Interactive,Interpreter,Shell,Web
|
||||
Classifier: Framework :: IPython
|
||||
Classifier: Framework :: Jupyter
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: Intended Audience :: Science/Research
|
||||
Classifier: Intended Audience :: System Administrators
|
||||
Classifier: License :: OSI Approved :: BSD License
|
||||
Classifier: Programming Language :: Python
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Typing :: Typed
|
||||
Requires-Python: >=3.8
|
||||
Provides-Extra: docs
|
||||
Requires-Dist: myst-parser; extra == 'docs'
|
||||
Requires-Dist: pydata-sphinx-theme; extra == 'docs'
|
||||
Requires-Dist: sphinx; extra == 'docs'
|
||||
Provides-Extra: test
|
||||
Requires-Dist: argcomplete>=3.0.3; extra == 'test'
|
||||
Requires-Dist: mypy>=1.7.0; extra == 'test'
|
||||
Requires-Dist: pre-commit; extra == 'test'
|
||||
Requires-Dist: pytest-mock; extra == 'test'
|
||||
Requires-Dist: pytest-mypy-testing; extra == 'test'
|
||||
Requires-Dist: pytest<7.5,>=7.0; extra == 'test'
|
||||
Description-Content-Type: text/markdown
|
||||
|
||||
# Traitlets
|
||||
|
||||
[](https://github.com/ipython/traitlets/actions/workflows/tests.yml)
|
||||
[](https://traitlets.readthedocs.io/en/latest/?badge=latest)
|
||||
[](https://tidelift.com/badges/package/pypi/traitlets)
|
||||
|
||||
| | |
|
||||
| ------------- | ------------------------------------ |
|
||||
| **home** | https://github.com/ipython/traitlets |
|
||||
| **pypi-repo** | https://pypi.org/project/traitlets/ |
|
||||
| **docs** | https://traitlets.readthedocs.io/ |
|
||||
| **license** | Modified BSD License |
|
||||
|
||||
Traitlets is a pure Python library enabling:
|
||||
|
||||
- the enforcement of strong typing for attributes of Python objects
|
||||
(typed attributes are called _"traits"_);
|
||||
- dynamically calculated default values;
|
||||
- automatic validation and coercion of trait attributes when attempting a
|
||||
change;
|
||||
- registering for receiving notifications when trait values change;
|
||||
- reading configuring values from files or from command line
|
||||
arguments - a distinct layer on top of traitlets, so you may use
|
||||
traitlets without the configuration machinery.
|
||||
|
||||
Its implementation relies on the [descriptor](https://docs.python.org/howto/descriptor.html)
|
||||
pattern, and it is a lightweight pure-python alternative of the
|
||||
[_traits_ library](https://docs.enthought.com/traits/).
|
||||
|
||||
Traitlets powers the configuration system of IPython and Jupyter
|
||||
and the declarative API of IPython interactive widgets.
|
||||
|
||||
## Installation
|
||||
|
||||
For a local installation, make sure you have
|
||||
[pip installed](https://pip.pypa.io/en/stable/installing/) and run:
|
||||
|
||||
```bash
|
||||
pip install traitlets
|
||||
```
|
||||
|
||||
For a **development installation**, clone this repository, change into the
|
||||
`traitlets` root directory, and run pip:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/ipython/traitlets.git
|
||||
cd traitlets
|
||||
pip install -e .
|
||||
```
|
||||
|
||||
## Running the tests
|
||||
|
||||
```bash
|
||||
pip install "traitlets[test]"
|
||||
py.test traitlets
|
||||
```
|
||||
|
||||
## Code Styling
|
||||
|
||||
`traitlets` has adopted automatic code formatting so you shouldn't
|
||||
need to worry too much about your code style.
|
||||
As long as your code is valid,
|
||||
the pre-commit hook should take care of how it should look.
|
||||
|
||||
To install `pre-commit` locally, run the following::
|
||||
|
||||
```
|
||||
pip install pre-commit
|
||||
pre-commit install
|
||||
```
|
||||
|
||||
You can invoke the pre-commit hook by hand at any time with::
|
||||
|
||||
```
|
||||
pre-commit run
|
||||
```
|
||||
|
||||
which should run any autoformatting on your code
|
||||
and tell you about any errors it couldn't fix automatically.
|
||||
You may also install [black integration](https://github.com/psf/black#editor-integration)
|
||||
into your text editor to format code automatically.
|
||||
|
||||
If you have already committed files before setting up the pre-commit
|
||||
hook with `pre-commit install`, you can fix everything up using
|
||||
`pre-commit run --all-files`. You need to make the fixing commit
|
||||
yourself after that.
|
||||
|
||||
Some of the hooks only run on CI by default, but you can invoke them by
|
||||
running with the `--hook-stage manual` argument.
|
||||
|
||||
## Usage
|
||||
|
||||
Any class with trait attributes must inherit from `HasTraits`.
|
||||
For the list of available trait types and their properties, see the
|
||||
[Trait Types](https://traitlets.readthedocs.io/en/latest/trait_types.html)
|
||||
section of the documentation.
|
||||
|
||||
### Dynamic default values
|
||||
|
||||
To calculate a default value dynamically, decorate a method of your class with
|
||||
`@default({traitname})`. This method will be called on the instance, and
|
||||
should return the default value. In this example, the `_username_default`
|
||||
method is decorated with `@default('username')`:
|
||||
|
||||
```Python
|
||||
import getpass
|
||||
from traitlets import HasTraits, Unicode, default
|
||||
|
||||
class Identity(HasTraits):
|
||||
username = Unicode()
|
||||
|
||||
@default('username')
|
||||
def _username_default(self):
|
||||
return getpass.getuser()
|
||||
```
|
||||
|
||||
### Callbacks when a trait attribute changes
|
||||
|
||||
When a trait changes, an application can follow this trait change with
|
||||
additional actions.
|
||||
|
||||
To do something when a trait attribute is changed, decorate a method with
|
||||
[`traitlets.observe()`](https://traitlets.readthedocs.io/en/latest/api.html?highlight=observe#traitlets.observe).
|
||||
The method will be called with a single argument, a dictionary which contains
|
||||
an owner, new value, old value, name of the changed trait, and the event type.
|
||||
|
||||
In this example, the `_num_changed` method is decorated with `` @observe(`num`) ``:
|
||||
|
||||
```Python
|
||||
from traitlets import HasTraits, Integer, observe
|
||||
|
||||
class TraitletsExample(HasTraits):
|
||||
num = Integer(5, help="a number").tag(config=True)
|
||||
|
||||
@observe('num')
|
||||
def _num_changed(self, change):
|
||||
print("{name} changed from {old} to {new}".format(**change))
|
||||
```
|
||||
|
||||
and is passed the following dictionary when called:
|
||||
|
||||
```Python
|
||||
{
|
||||
'owner': object, # The HasTraits instance
|
||||
'new': 6, # The new value
|
||||
'old': 5, # The old value
|
||||
'name': "foo", # The name of the changed trait
|
||||
'type': 'change', # The event type of the notification, usually 'change'
|
||||
}
|
||||
```
|
||||
|
||||
### Validation and coercion
|
||||
|
||||
Each trait type (`Int`, `Unicode`, `Dict` etc.) may have its own validation or
|
||||
coercion logic. In addition, we can register custom cross-validators
|
||||
that may depend on the state of other attributes. For example:
|
||||
|
||||
```Python
|
||||
from traitlets import HasTraits, TraitError, Int, Bool, validate
|
||||
|
||||
class Parity(HasTraits):
|
||||
value = Int()
|
||||
parity = Int()
|
||||
|
||||
@validate('value')
|
||||
def _valid_value(self, proposal):
|
||||
if proposal['value'] % 2 != self.parity:
|
||||
raise TraitError('value and parity should be consistent')
|
||||
return proposal['value']
|
||||
|
||||
@validate('parity')
|
||||
def _valid_parity(self, proposal):
|
||||
parity = proposal['value']
|
||||
if parity not in [0, 1]:
|
||||
raise TraitError('parity should be 0 or 1')
|
||||
if self.value % 2 != parity:
|
||||
raise TraitError('value and parity should be consistent')
|
||||
return proposal['value']
|
||||
|
||||
parity_check = Parity(value=2)
|
||||
|
||||
# Changing required parity and value together while holding cross validation
|
||||
with parity_check.hold_trait_notifications():
|
||||
parity_check.value = 1
|
||||
parity_check.parity = 1
|
||||
```
|
||||
|
||||
However, we **recommend** that custom cross-validators don't modify the state
|
||||
of the HasTraits instance.
|
||||
|
||||
## About the IPython Development Team
|
||||
|
||||
The IPython Development Team is the set of all contributors to the IPython project.
|
||||
This includes all of the IPython subprojects.
|
||||
|
||||
The core team that coordinates development on GitHub can be found here:
|
||||
https://github.com/jupyter/.
|
||||
|
||||
## Our Copyright Policy
|
||||
|
||||
IPython uses a shared copyright model. Each contributor maintains copyright
|
||||
over their contributions to IPython. But, it is important to note that these
|
||||
contributions are typically only changes to the repositories. Thus, the IPython
|
||||
source code, in its entirety is not the copyright of any single person or
|
||||
institution. Instead, it is the collective copyright of the entire IPython
|
||||
Development Team. If individual contributors want to maintain a record of what
|
||||
changes/contributions they have specific copyright on, they should indicate
|
||||
their copyright in the commit message of the change, when they commit the
|
||||
change to one of the IPython repositories.
|
||||
|
||||
With this in mind, the following banner should be used in any source code file
|
||||
to indicate the copyright and license terms:
|
||||
|
||||
```
|
||||
# Copyright (c) IPython Development Team.
|
||||
# Distributed under the terms of the Modified BSD License.
|
||||
```
|
||||
@@ -0,0 +1,54 @@
|
||||
traitlets-5.14.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
traitlets-5.14.1.dist-info/METADATA,sha256=6_5xys5ivdTOWSGie5nYn_QUimUB9_4TQcApbJS6vns,10691
|
||||
traitlets-5.14.1.dist-info/RECORD,,
|
||||
traitlets-5.14.1.dist-info/WHEEL,sha256=mRYSEL3Ih6g5a_CVMIcwiF__0Ae4_gLYh01YFNwiq1k,87
|
||||
traitlets-5.14.1.dist-info/licenses/LICENSE,sha256=L1FyfZBjtUhWdzy1E4i9t58pNu5KG2ku9VPYxCATEas,1536
|
||||
traitlets/__init__.py,sha256=ogQL6bHHdDlghRJfnYA1_EUzlNl5A2jR2NVDwr9QXn4,938
|
||||
traitlets/__pycache__/__init__.cpython-310.pyc,,
|
||||
traitlets/__pycache__/_version.cpython-310.pyc,,
|
||||
traitlets/__pycache__/log.cpython-310.pyc,,
|
||||
traitlets/__pycache__/traitlets.cpython-310.pyc,,
|
||||
traitlets/_version.py,sha256=xQvnH9Ry1YLopbORhj3hjF9D1-47wB5yIh-AhdVB8Wg,557
|
||||
traitlets/config/__init__.py,sha256=rUNq_Pig7jyrhmREJqubumXFtwLsMCcaWgxyX_PDYw0,477
|
||||
traitlets/config/__pycache__/__init__.cpython-310.pyc,,
|
||||
traitlets/config/__pycache__/application.cpython-310.pyc,,
|
||||
traitlets/config/__pycache__/argcomplete_config.cpython-310.pyc,,
|
||||
traitlets/config/__pycache__/configurable.cpython-310.pyc,,
|
||||
traitlets/config/__pycache__/loader.cpython-310.pyc,,
|
||||
traitlets/config/__pycache__/manager.cpython-310.pyc,,
|
||||
traitlets/config/__pycache__/sphinxdoc.cpython-310.pyc,,
|
||||
traitlets/config/application.py,sha256=U6FRtFy_NOsviE-yYQlPFACP7xbHHC23mF6mSTzBxSY,42761
|
||||
traitlets/config/argcomplete_config.py,sha256=ECKvIqSOTLzw1OBhfVDVghiUPrBV_dkvQKRPs5OuhUw,10337
|
||||
traitlets/config/configurable.py,sha256=8kq24E9Py2iYk1vlh8k6RmA8pKsZnZ_6SIB1n2HCsis,22453
|
||||
traitlets/config/loader.py,sha256=L0VjQqIQkmS4KpFh86MGNzTTfz9TRkDMerhnJ8GpA6o,40101
|
||||
traitlets/config/manager.py,sha256=t30P4Ji_FbJBMoAh32o19NnlXgLqf_WmcPDCQXskuac,2470
|
||||
traitlets/config/sphinxdoc.py,sha256=7yK9ELMScWtmRITdUCB3bWqVpARHD8RMdyTD2wC7xO4,5252
|
||||
traitlets/log.py,sha256=iyzTKjfo1XTvwZbe0Q6-lgnXqxFa1pLW-t3SBDOuBzw,955
|
||||
traitlets/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
traitlets/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
||||
traitlets/tests/__pycache__/__init__.cpython-310.pyc,,
|
||||
traitlets/tests/__pycache__/test_traitlets.cpython-310.pyc,,
|
||||
traitlets/tests/__pycache__/utils.cpython-310.pyc,,
|
||||
traitlets/tests/test_traitlets.py,sha256=brCQ8Nz_r1neuIpd_AGqWQz75GDQ9Xt_Diu1xd5H75k,2103
|
||||
traitlets/tests/utils.py,sha256=PFDeY_2PJ8TSGZTn9pR5-FS2xFRmNb9sCo2zFZbF3RQ,1381
|
||||
traitlets/traitlets.py,sha256=8k_PFT1B2brT3YlzwmHh6EcJ3BQ5moPKYbuMrqIYFuM,151938
|
||||
traitlets/utils/__init__.py,sha256=Y53m1APot2AAtCfwpVUOvYRX6AMpKqOiKhroM0CdTWw,3144
|
||||
traitlets/utils/__pycache__/__init__.cpython-310.pyc,,
|
||||
traitlets/utils/__pycache__/bunch.cpython-310.pyc,,
|
||||
traitlets/utils/__pycache__/decorators.cpython-310.pyc,,
|
||||
traitlets/utils/__pycache__/descriptions.cpython-310.pyc,,
|
||||
traitlets/utils/__pycache__/getargspec.cpython-310.pyc,,
|
||||
traitlets/utils/__pycache__/importstring.cpython-310.pyc,,
|
||||
traitlets/utils/__pycache__/nested_update.cpython-310.pyc,,
|
||||
traitlets/utils/__pycache__/sentinel.cpython-310.pyc,,
|
||||
traitlets/utils/__pycache__/text.cpython-310.pyc,,
|
||||
traitlets/utils/__pycache__/warnings.cpython-310.pyc,,
|
||||
traitlets/utils/bunch.py,sha256=QVioeWqH5EZH-h_rqhPeymz6iGYHf7CeZMAQ0eN-b7s,784
|
||||
traitlets/utils/decorators.py,sha256=cMpUy3vlkez5iHWYD0zFGtz2icrel1CboTJdUJKNyCQ,3084
|
||||
traitlets/utils/descriptions.py,sha256=8DqdCJlcnuBxTUEFJe5SNxSQ6fuB7QdI5I02NTZ6igg,5571
|
||||
traitlets/utils/getargspec.py,sha256=4ff5ALw3S_Em36Olxe7A3t5VQzzuYq_YlsGqjcsgW1A,1643
|
||||
traitlets/utils/importstring.py,sha256=Tr-O3GO-pX4GgZKiwA3JBqasJEYQkggoGR5LBl86QlM,1210
|
||||
traitlets/utils/nested_update.py,sha256=RB_Aswp-ssZZHK26VTpEEHnNalcUNjvOX4E-y1b3B00,1114
|
||||
traitlets/utils/sentinel.py,sha256=b31f5z6soaZWlrdq2CRQPOt_1j31r2MsRf6GdO2WpAo,642
|
||||
traitlets/utils/text.py,sha256=nXjUcpvJGmoXhVDf_O-crBCmE1oHkbWb6bYojA2w9Q0,1139
|
||||
traitlets/utils/warnings.py,sha256=Z34ArRKUjcX7Bs8QvvvDi3W60Ia1iM_d-d5ttYWhJfQ,1964
|
||||
@@ -0,0 +1,4 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: hatchling 1.21.0
|
||||
Root-Is-Purelib: true
|
||||
Tag: py3-none-any
|
||||
@@ -0,0 +1,30 @@
|
||||
BSD 3-Clause License
|
||||
|
||||
- Copyright (c) 2001-, IPython Development Team
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
Reference in New Issue
Block a user