click-extended 1.0.6__tar.gz → 1.0.7__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.
Files changed (158) hide show
  1. {click_extended-1.0.6/click_extended.egg-info → click_extended-1.0.7}/PKG-INFO +1 -1
  2. click_extended-1.0.7/click_extended/decorators/check/regex.py +65 -0
  3. {click_extended-1.0.6 → click_extended-1.0.7/click_extended.egg-info}/PKG-INFO +1 -1
  4. {click_extended-1.0.6 → click_extended-1.0.7}/pyproject.toml +1 -1
  5. click_extended-1.0.6/click_extended/decorators/check/regex.py +0 -47
  6. {click_extended-1.0.6 → click_extended-1.0.7}/AUTHORS.md +0 -0
  7. {click_extended-1.0.6 → click_extended-1.0.7}/LICENSE +0 -0
  8. {click_extended-1.0.6 → click_extended-1.0.7}/README.md +0 -0
  9. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/__init__.py +0 -0
  10. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/classes.py +0 -0
  11. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/__init__.py +0 -0
  12. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/__init__.py +0 -0
  13. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/argument.py +0 -0
  14. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/command.py +0 -0
  15. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/context.py +0 -0
  16. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/env.py +0 -0
  17. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/group.py +0 -0
  18. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/option.py +0 -0
  19. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/prompt.py +0 -0
  20. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/selection.py +0 -0
  21. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/decorators/tag.py +0 -0
  22. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/nodes/__init__.py +0 -0
  23. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/nodes/_root_node.py +0 -0
  24. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/nodes/argument_node.py +0 -0
  25. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/nodes/child_node.py +0 -0
  26. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/nodes/child_validation_node.py +0 -0
  27. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/nodes/node.py +0 -0
  28. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/nodes/option_node.py +0 -0
  29. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/nodes/parent_node.py +0 -0
  30. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/nodes/validation_node.py +0 -0
  31. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/other/__init__.py +0 -0
  32. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/other/_click_command.py +0 -0
  33. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/other/_click_group.py +0 -0
  34. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/other/_tree.py +0 -0
  35. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/other/context.py +0 -0
  36. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/core/other/get_context.py +0 -0
  37. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/__init__.py +0 -0
  38. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/__init__.py +0 -0
  39. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/conflicts.py +0 -0
  40. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/contains.py +0 -0
  41. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/dependencies.py +0 -0
  42. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/divisible_by.py +0 -0
  43. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/ends_with.py +0 -0
  44. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/exclusive.py +0 -0
  45. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/falsy.py +0 -0
  46. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_email.py +0 -0
  47. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_hex_color.py +0 -0
  48. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_hostname.py +0 -0
  49. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_ipv4.py +0 -0
  50. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_ipv6.py +0 -0
  51. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_json.py +0 -0
  52. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_mac_address.py +0 -0
  53. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_negative.py +0 -0
  54. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_non_zero.py +0 -0
  55. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_port.py +0 -0
  56. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_positive.py +0 -0
  57. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_url.py +0 -0
  58. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/is_uuid.py +0 -0
  59. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/length.py +0 -0
  60. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/not_empty.py +0 -0
  61. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/requires.py +0 -0
  62. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/starts_with.py +0 -0
  63. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/check/truthy.py +0 -0
  64. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/compare/__init__.py +0 -0
  65. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/compare/at_least.py +0 -0
  66. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/compare/at_most.py +0 -0
  67. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/compare/between.py +0 -0
  68. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/compare/greater_than.py +0 -0
  69. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/compare/less_than.py +0 -0
  70. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/__init__.py +0 -0
  71. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_angle.py +0 -0
  72. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_area.py +0 -0
  73. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_bits.py +0 -0
  74. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_distance.py +0 -0
  75. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_energy.py +0 -0
  76. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_power.py +0 -0
  77. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_pressure.py +0 -0
  78. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_speed.py +0 -0
  79. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_temperature.py +0 -0
  80. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_time.py +0 -0
  81. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_volume.py +0 -0
  82. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/convert/convert_weight.py +0 -0
  83. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/load/__init__.py +0 -0
  84. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/load/load_csv.py +0 -0
  85. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/load/load_json.py +0 -0
  86. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/load/load_toml.py +0 -0
  87. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/load/load_yaml.py +0 -0
  88. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/__init__.py +0 -0
  89. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/absolute.py +0 -0
  90. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/add.py +0 -0
  91. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/ceil.py +0 -0
  92. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/clamp.py +0 -0
  93. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/divide.py +0 -0
  94. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/floor.py +0 -0
  95. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/maximum.py +0 -0
  96. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/minimum.py +0 -0
  97. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/modulo.py +0 -0
  98. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/multiply.py +0 -0
  99. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/normalize.py +0 -0
  100. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/power.py +0 -0
  101. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/rounded.py +0 -0
  102. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/sqrt.py +0 -0
  103. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/subtract.py +0 -0
  104. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/math/to_percent.py +0 -0
  105. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/misc/__init__.py +0 -0
  106. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/misc/choice.py +0 -0
  107. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/misc/confirm_if.py +0 -0
  108. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/misc/default.py +0 -0
  109. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/misc/deprecated.py +0 -0
  110. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/misc/experimental.py +0 -0
  111. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/misc/now.py +0 -0
  112. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/random/__init__.py +0 -0
  113. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/random/random_bool.py +0 -0
  114. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/random/random_choice.py +0 -0
  115. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/random/random_datetime.py +0 -0
  116. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/random/random_float.py +0 -0
  117. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/random/random_integer.py +0 -0
  118. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/random/random_prime.py +0 -0
  119. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/random/random_string.py +0 -0
  120. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/random/random_uuid.py +0 -0
  121. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/__init__.py +0 -0
  122. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/add_prefix.py +0 -0
  123. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/add_suffix.py +0 -0
  124. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/apply.py +0 -0
  125. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/basename.py +0 -0
  126. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/dirname.py +0 -0
  127. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/expand_vars.py +0 -0
  128. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/remove_prefix.py +0 -0
  129. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/remove_suffix.py +0 -0
  130. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/replace.py +0 -0
  131. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/slugify.py +0 -0
  132. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/split.py +0 -0
  133. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/strip.py +0 -0
  134. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/to_case.py +0 -0
  135. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/to_date.py +0 -0
  136. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/to_datetime.py +0 -0
  137. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/to_path.py +0 -0
  138. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/to_time.py +0 -0
  139. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/to_timestamp.py +0 -0
  140. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/decorators/transform/truncate.py +0 -0
  141. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/errors.py +0 -0
  142. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/types.py +0 -0
  143. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/__init__.py +0 -0
  144. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/casing.py +0 -0
  145. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/checks.py +0 -0
  146. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/dispatch.py +0 -0
  147. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/format.py +0 -0
  148. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/humanize.py +0 -0
  149. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/naming.py +0 -0
  150. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/process.py +0 -0
  151. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/selection.py +0 -0
  152. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended/utils/time.py +0 -0
  153. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended.egg-info/SOURCES.txt +0 -0
  154. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended.egg-info/dependency_links.txt +0 -0
  155. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended.egg-info/requires.txt +0 -0
  156. {click_extended-1.0.6 → click_extended-1.0.7}/click_extended.egg-info/top_level.txt +0 -0
  157. {click_extended-1.0.6 → click_extended-1.0.7}/setup.cfg +0 -0
  158. {click_extended-1.0.6 → click_extended-1.0.7}/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.6
3
+ Version: 1.0.7
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
@@ -0,0 +1,65 @@
1
+ """Check if a value matches a regex pattern."""
2
+
3
+ import re
4
+ from typing import Any, Union
5
+
6
+ from click_extended.core.nodes.child_node import ChildNode
7
+ from click_extended.core.other.context import Context
8
+ from click_extended.types import Decorator
9
+
10
+
11
+ class Regex(ChildNode):
12
+ """Check if a value matches a regex pattern."""
13
+
14
+ def handle_str(
15
+ self,
16
+ value: str,
17
+ context: Context,
18
+ *args: Any,
19
+ **kwargs: Any,
20
+ ) -> Any:
21
+ patterns: tuple[Union[str, re.Pattern[str]], ...] = kwargs["patterns"]
22
+ flags: int = kwargs.get("flags", 0)
23
+
24
+ for pattern in patterns:
25
+ compiled_pattern: re.Pattern[str]
26
+ if isinstance(pattern, re.Pattern):
27
+ compiled_pattern = pattern
28
+ else:
29
+ compiled_pattern = re.compile(pattern, flags)
30
+
31
+ if compiled_pattern.fullmatch(value):
32
+ return value
33
+
34
+ pattern_strs: list[str] = [
35
+ p.pattern if isinstance(p, re.Pattern) else p for p in patterns
36
+ ]
37
+ raise ValueError(
38
+ f"Value '{value}' does not match any "
39
+ + f"of the patterns: {pattern_strs}"
40
+ )
41
+
42
+
43
+ def regex(*patterns: Union[str, re.Pattern[str]], flags: int = 0) -> Decorator:
44
+ """
45
+ Check if a value matches a regex pattern.
46
+
47
+ Type: `ChildNode`
48
+
49
+ Supports: `str`
50
+
51
+ Args:
52
+ *patterns (Union[str, Pattern[str]]):
53
+ The regex patterns to check against. Can be strings or compiled
54
+ Pattern objects. If strings are provided, they will be compiled
55
+ with the specified flags.
56
+ flags (int):
57
+ Regex flags to use when compiling string patterns (e.g.,
58
+ re.IGNORECASE, re.MULTILINE). Ignored for pre-compiled patterns.
59
+ Default is 0 (no flags).
60
+
61
+ Returns:
62
+ Decorator:
63
+ The decorated function.
64
+ """
65
+ return Regex.as_decorator(patterns=patterns, flags=flags)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: click_extended
3
- Version: 1.0.6
3
+ Version: 1.0.7
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.6"
3
+ version = "1.0.7"
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" },
@@ -1,47 +0,0 @@
1
- """Check if a value matches a regex pattern."""
2
-
3
- import re
4
- from typing import Any
5
-
6
- from click_extended.core.nodes.child_node import ChildNode
7
- from click_extended.core.other.context import Context
8
- from click_extended.types import Decorator
9
-
10
-
11
- class Regex(ChildNode):
12
- """Check if a value matches a regex pattern."""
13
-
14
- def handle_str(
15
- self,
16
- value: str,
17
- context: Context,
18
- *args: Any,
19
- **kwargs: Any,
20
- ) -> Any:
21
- patterns = kwargs["patterns"]
22
- for pattern in patterns:
23
- if re.fullmatch(pattern, value):
24
- return value
25
-
26
- raise ValueError(
27
- f"Value '{value}' does not match any of the patterns: {patterns}"
28
- )
29
-
30
-
31
- def regex(*patterns: str) -> Decorator:
32
- """
33
- Check if a value matches a regex pattern.
34
-
35
- Type: `ChildNode`
36
-
37
- Supports: `str`
38
-
39
- Args:
40
- *patterns (str):
41
- The regex patterns to check against.
42
-
43
- Returns:
44
- Decorator:
45
- The decorated function.
46
- """
47
- return Regex.as_decorator(patterns=patterns)
File without changes
File without changes
File without changes