click-extended 1.0.8__tar.gz → 1.0.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {click_extended-1.0.8/click_extended.egg-info → click_extended-1.0.9}/PKG-INFO +1 -1
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/_root_node.py +27 -1
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/misc/catch.py +55 -12
- {click_extended-1.0.8 → click_extended-1.0.9/click_extended.egg-info}/PKG-INFO +1 -1
- {click_extended-1.0.8 → click_extended-1.0.9}/pyproject.toml +1 -1
- {click_extended-1.0.8 → click_extended-1.0.9}/AUTHORS.md +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/LICENSE +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/README.md +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/classes.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/argument.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/command.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/context.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/env.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/group.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/option.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/prompt.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/selection.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/decorators/tag.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/argument_node.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/child_node.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/child_validation_node.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/node.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/option_node.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/parent_node.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/validation_node.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/other/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/other/_click_command.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/other/_click_group.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/other/_tree.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/other/context.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/other/get_context.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/conflicts.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/contains.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/dependencies.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/divisible_by.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/ends_with.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/exclusive.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/falsy.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_email.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_hex_color.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_hostname.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_ipv4.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_ipv6.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_json.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_mac_address.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_negative.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_non_zero.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_port.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_positive.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_url.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_uuid.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/length.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/not_empty.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/regex.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/requires.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/starts_with.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/truthy.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/compare/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/compare/at_least.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/compare/at_most.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/compare/between.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/compare/greater_than.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/compare/less_than.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_angle.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_area.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_bits.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_distance.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_energy.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_power.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_pressure.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_speed.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_temperature.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_time.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_volume.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_weight.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/load/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/load/load_csv.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/load/load_json.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/load/load_toml.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/load/load_yaml.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/absolute.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/add.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/ceil.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/clamp.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/divide.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/floor.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/maximum.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/minimum.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/modulo.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/multiply.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/normalize.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/power.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/rounded.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/sqrt.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/subtract.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/math/to_percent.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/misc/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/misc/choice.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/misc/confirm_if.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/misc/default.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/misc/deprecated.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/misc/experimental.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/misc/now.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_bool.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_choice.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_datetime.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_float.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_integer.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_prime.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_string.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_uuid.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/add_prefix.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/add_suffix.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/apply.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/basename.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/dirname.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/expand_vars.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/remove_prefix.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/remove_suffix.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/replace.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/slugify.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/split.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/strip.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_case.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_date.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_datetime.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_path.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_time.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_timestamp.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/truncate.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/errors.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/types.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/__init__.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/casing.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/checks.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/dispatch.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/format.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/humanize.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/naming.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/process.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/selection.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended/utils/time.py +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended.egg-info/SOURCES.txt +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended.egg-info/dependency_links.txt +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended.egg-info/requires.txt +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/click_extended.egg-info/top_level.txt +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/setup.cfg +0 -0
- {click_extended-1.0.8 → click_extended-1.0.9}/tests/test_lifecycle.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: click_extended
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.9
|
|
4
4
|
Summary: An extension to Click with additional features like automatic async support, aliasing and a modular decorator system.
|
|
5
5
|
Author-email: Marcus Fredriksson <marcus@marcusfredriksson.com>
|
|
6
6
|
License: MIT License
|
|
@@ -664,7 +664,33 @@ class RootNode(Node):
|
|
|
664
664
|
context,
|
|
665
665
|
)
|
|
666
666
|
|
|
667
|
-
|
|
667
|
+
catch_nodes = [
|
|
668
|
+
v
|
|
669
|
+
for v in root.tree.validations
|
|
670
|
+
if v.__class__.__name__ == "Catch"
|
|
671
|
+
]
|
|
672
|
+
other_nodes = [
|
|
673
|
+
v
|
|
674
|
+
for v in root.tree.validations
|
|
675
|
+
if v.__class__.__name__ != "Catch"
|
|
676
|
+
]
|
|
677
|
+
root.tree.validations = catch_nodes + other_nodes
|
|
678
|
+
|
|
679
|
+
for i, validation_node in enumerate(root.tree.validations):
|
|
680
|
+
if validation_node.__class__.__name__ == "Catch":
|
|
681
|
+
if hasattr(
|
|
682
|
+
validation_node, "remaining_validations"
|
|
683
|
+
):
|
|
684
|
+
validation_node.remaining_validations = (
|
|
685
|
+
root.tree.validations[i + 1 :]
|
|
686
|
+
)
|
|
687
|
+
validation_node.on_finalize(
|
|
688
|
+
custom_context,
|
|
689
|
+
*validation_node.process_args,
|
|
690
|
+
**validation_node.process_kwargs,
|
|
691
|
+
)
|
|
692
|
+
break
|
|
693
|
+
|
|
668
694
|
validation_node.on_finalize(
|
|
669
695
|
custom_context,
|
|
670
696
|
*validation_node.process_args,
|
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
Validation node to catch and handle exceptions from command/group functions.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
+
# pylint: disable=wrong-import-position
|
|
6
|
+
# pylint: disable=wrong-import-order
|
|
7
|
+
# pylint: disable=ungrouped-imports
|
|
8
|
+
|
|
5
9
|
import asyncio
|
|
6
10
|
import inspect
|
|
7
11
|
from functools import wraps
|
|
@@ -23,11 +27,16 @@ _catch_handlers: WeakKeyDictionary[
|
|
|
23
27
|
|
|
24
28
|
class Catch(ValidationNode):
|
|
25
29
|
"""
|
|
26
|
-
Catch and handle exceptions from command/group functions
|
|
30
|
+
Catch and handle exceptions from command/group functions and
|
|
31
|
+
validators.
|
|
32
|
+
|
|
33
|
+
Wraps both the validation phase and function execution in a
|
|
34
|
+
try-except block. When an exception is caught, an optional handler
|
|
35
|
+
is invoked. Without a handler, exceptions are silently suppressed.
|
|
27
36
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
37
|
+
Catches exceptions from:
|
|
38
|
+
- Validation decorators (e.g., @exclusive, @requires)
|
|
39
|
+
- The command/group function itself
|
|
31
40
|
|
|
32
41
|
Handler signatures supported:
|
|
33
42
|
- `handler()` - No arguments, just execute code
|
|
@@ -36,15 +45,16 @@ class Catch(ValidationNode):
|
|
|
36
45
|
|
|
37
46
|
Examples:
|
|
38
47
|
```py
|
|
39
|
-
#
|
|
48
|
+
# Catch validation errors from @exclusive
|
|
40
49
|
@command()
|
|
41
|
-
@
|
|
42
|
-
|
|
43
|
-
|
|
50
|
+
@exclusive("--stock", "--query")
|
|
51
|
+
@catch(ValueError, handler=lambda e: print(f"Error: {e}"))
|
|
52
|
+
def search(stock, query):
|
|
53
|
+
pass
|
|
44
54
|
```
|
|
45
55
|
|
|
46
56
|
```py
|
|
47
|
-
#
|
|
57
|
+
# Catch errors from command function
|
|
48
58
|
@command()
|
|
49
59
|
@catch(ValueError, handler=lambda e: print(f"Error: {e}"))
|
|
50
60
|
def cmd():
|
|
@@ -73,19 +83,52 @@ class Catch(ValidationNode):
|
|
|
73
83
|
"""Initialize Catch validation node with function to wrap."""
|
|
74
84
|
super().__init__(name, process_args, process_kwargs, **kwargs)
|
|
75
85
|
self.wrapped_func: Callable[..., Any] | None = None
|
|
86
|
+
self.remaining_validations: list[ValidationNode] = []
|
|
76
87
|
|
|
77
88
|
def on_finalize(self, context: Context, *args: Any, **kwargs: Any) -> None:
|
|
78
89
|
"""
|
|
79
|
-
|
|
90
|
+
Execute remaining validations wrapped in exception handling.
|
|
80
91
|
|
|
81
|
-
|
|
82
|
-
|
|
92
|
+
This catches exceptions from all validators that run after @catch,
|
|
93
|
+
allowing it to catch validation errors like those from @exclusive.
|
|
83
94
|
|
|
84
95
|
Args:
|
|
85
96
|
context: The execution context
|
|
86
97
|
*args: Contains exception types tuple at index 0
|
|
87
98
|
**kwargs: Contains handler, reraise parameters
|
|
88
99
|
"""
|
|
100
|
+
exception_types: tuple[type[BaseException], ...] = args[0]
|
|
101
|
+
handler: Callable[..., Any] | None = kwargs.get("handler")
|
|
102
|
+
reraise: bool = kwargs.get("reraise", False)
|
|
103
|
+
|
|
104
|
+
for validation_node in self.remaining_validations:
|
|
105
|
+
try:
|
|
106
|
+
if asyncio.iscoroutinefunction(validation_node.on_finalize):
|
|
107
|
+
asyncio.run(
|
|
108
|
+
validation_node.on_finalize(
|
|
109
|
+
context,
|
|
110
|
+
*validation_node.process_args,
|
|
111
|
+
**validation_node.process_kwargs,
|
|
112
|
+
)
|
|
113
|
+
)
|
|
114
|
+
else:
|
|
115
|
+
validation_node.on_finalize(
|
|
116
|
+
context,
|
|
117
|
+
*validation_node.process_args,
|
|
118
|
+
**validation_node.process_kwargs,
|
|
119
|
+
)
|
|
120
|
+
except BaseException as exc:
|
|
121
|
+
if isinstance(exc, exception_types):
|
|
122
|
+
if handler is not None:
|
|
123
|
+
if asyncio.iscoroutinefunction(handler):
|
|
124
|
+
asyncio.run(_call_handler_async(handler, exc))
|
|
125
|
+
else:
|
|
126
|
+
_call_handler_sync(handler, exc)
|
|
127
|
+
|
|
128
|
+
if not reraise:
|
|
129
|
+
return
|
|
130
|
+
|
|
131
|
+
raise
|
|
89
132
|
|
|
90
133
|
|
|
91
134
|
def catch(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: click_extended
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.9
|
|
4
4
|
Summary: An extension to Click with additional features like automatic async support, aliasing and a modular decorator system.
|
|
5
5
|
Author-email: Marcus Fredriksson <marcus@marcusfredriksson.com>
|
|
6
6
|
License: MIT License
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "click_extended"
|
|
3
|
-
version = "1.0.
|
|
3
|
+
version = "1.0.9"
|
|
4
4
|
description = "An extension to Click with additional features like automatic async support, aliasing and a modular decorator system."
|
|
5
5
|
authors = [
|
|
6
6
|
{ name = "Marcus Fredriksson", email = "marcus@marcusfredriksson.com" },
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/core/nodes/child_validation_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/dependencies.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/divisible_by.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_hex_color.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_hostname.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_mac_address.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_negative.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_non_zero.py
RENAMED
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/is_positive.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/check/starts_with.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/compare/greater_than.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/compare/less_than.py
RENAMED
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_angle.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_area.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_bits.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_distance.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_energy.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_power.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_pressure.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_speed.py
RENAMED
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_time.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_volume.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/convert/convert_weight.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/misc/experimental.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_bool.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_choice.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_datetime.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_float.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_integer.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_prime.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_string.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/random/random_uuid.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/__init__.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/add_prefix.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/add_suffix.py
RENAMED
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/basename.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/dirname.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/expand_vars.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/remove_prefix.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/remove_suffix.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/replace.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/slugify.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_case.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_date.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_datetime.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_path.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_time.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/to_timestamp.py
RENAMED
|
File without changes
|
{click_extended-1.0.8 → click_extended-1.0.9}/click_extended/decorators/transform/truncate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|