click-extended 1.0.2__tar.gz → 1.0.4__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 (157) hide show
  1. {click_extended-1.0.2/click_extended.egg-info → click_extended-1.0.4}/PKG-INFO +2 -1
  2. {click_extended-1.0.2 → click_extended-1.0.4}/README.md +1 -0
  3. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/__init__.py +2 -0
  4. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/other/__init__.py +2 -0
  5. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/other/_tree.py +10 -1
  6. click_extended-1.0.4/click_extended/core/other/get_context.py +105 -0
  7. {click_extended-1.0.2 → click_extended-1.0.4/click_extended.egg-info}/PKG-INFO +2 -1
  8. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended.egg-info/SOURCES.txt +1 -0
  9. {click_extended-1.0.2 → click_extended-1.0.4}/pyproject.toml +1 -1
  10. {click_extended-1.0.2 → click_extended-1.0.4}/AUTHORS.md +0 -0
  11. {click_extended-1.0.2 → click_extended-1.0.4}/LICENSE +0 -0
  12. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/classes.py +0 -0
  13. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/__init__.py +0 -0
  14. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/__init__.py +0 -0
  15. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/argument.py +0 -0
  16. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/command.py +0 -0
  17. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/context.py +0 -0
  18. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/env.py +0 -0
  19. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/group.py +0 -0
  20. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/option.py +0 -0
  21. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/prompt.py +0 -0
  22. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/selection.py +0 -0
  23. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/decorators/tag.py +0 -0
  24. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/nodes/__init__.py +0 -0
  25. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/nodes/_root_node.py +0 -0
  26. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/nodes/argument_node.py +0 -0
  27. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/nodes/child_node.py +0 -0
  28. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/nodes/child_validation_node.py +0 -0
  29. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/nodes/node.py +0 -0
  30. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/nodes/option_node.py +0 -0
  31. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/nodes/parent_node.py +0 -0
  32. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/nodes/validation_node.py +0 -0
  33. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/other/_click_command.py +0 -0
  34. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/other/_click_group.py +0 -0
  35. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/core/other/context.py +0 -0
  36. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/__init__.py +0 -0
  37. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/__init__.py +0 -0
  38. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/conflicts.py +0 -0
  39. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/contains.py +0 -0
  40. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/dependencies.py +0 -0
  41. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/divisible_by.py +0 -0
  42. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/ends_with.py +0 -0
  43. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/exclusive.py +0 -0
  44. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/falsy.py +0 -0
  45. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_email.py +0 -0
  46. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_hex_color.py +0 -0
  47. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_hostname.py +0 -0
  48. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_ipv4.py +0 -0
  49. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_ipv6.py +0 -0
  50. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_json.py +0 -0
  51. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_mac_address.py +0 -0
  52. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_negative.py +0 -0
  53. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_non_zero.py +0 -0
  54. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_port.py +0 -0
  55. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_positive.py +0 -0
  56. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_url.py +0 -0
  57. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/is_uuid.py +0 -0
  58. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/length.py +0 -0
  59. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/not_empty.py +0 -0
  60. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/regex.py +0 -0
  61. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/requires.py +0 -0
  62. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/starts_with.py +0 -0
  63. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/check/truthy.py +0 -0
  64. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/compare/__init__.py +0 -0
  65. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/compare/at_least.py +0 -0
  66. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/compare/at_most.py +0 -0
  67. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/compare/between.py +0 -0
  68. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/compare/greater_than.py +0 -0
  69. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/compare/less_than.py +0 -0
  70. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/__init__.py +0 -0
  71. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_angle.py +0 -0
  72. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_area.py +0 -0
  73. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_bits.py +0 -0
  74. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_distance.py +0 -0
  75. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_energy.py +0 -0
  76. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_power.py +0 -0
  77. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_pressure.py +0 -0
  78. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_speed.py +0 -0
  79. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_temperature.py +0 -0
  80. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_time.py +0 -0
  81. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_volume.py +0 -0
  82. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/convert/convert_weight.py +0 -0
  83. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/load/__init__.py +0 -0
  84. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/load/load_csv.py +0 -0
  85. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/load/load_json.py +0 -0
  86. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/load/load_toml.py +0 -0
  87. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/load/load_yaml.py +0 -0
  88. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/__init__.py +0 -0
  89. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/absolute.py +0 -0
  90. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/add.py +0 -0
  91. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/ceil.py +0 -0
  92. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/clamp.py +0 -0
  93. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/divide.py +0 -0
  94. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/floor.py +0 -0
  95. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/maximum.py +0 -0
  96. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/minimum.py +0 -0
  97. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/modulo.py +0 -0
  98. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/multiply.py +0 -0
  99. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/normalize.py +0 -0
  100. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/power.py +0 -0
  101. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/rounded.py +0 -0
  102. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/sqrt.py +0 -0
  103. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/subtract.py +0 -0
  104. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/math/to_percent.py +0 -0
  105. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/misc/__init__.py +0 -0
  106. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/misc/choice.py +0 -0
  107. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/misc/confirm_if.py +0 -0
  108. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/misc/default.py +0 -0
  109. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/misc/deprecated.py +0 -0
  110. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/misc/experimental.py +0 -0
  111. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/misc/now.py +0 -0
  112. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/random/__init__.py +0 -0
  113. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/random/random_bool.py +0 -0
  114. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/random/random_choice.py +0 -0
  115. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/random/random_datetime.py +0 -0
  116. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/random/random_float.py +0 -0
  117. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/random/random_integer.py +0 -0
  118. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/random/random_prime.py +0 -0
  119. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/random/random_string.py +0 -0
  120. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/random/random_uuid.py +0 -0
  121. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/__init__.py +0 -0
  122. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/add_prefix.py +0 -0
  123. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/add_suffix.py +0 -0
  124. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/apply.py +0 -0
  125. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/basename.py +0 -0
  126. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/dirname.py +0 -0
  127. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/expand_vars.py +0 -0
  128. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/remove_prefix.py +0 -0
  129. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/remove_suffix.py +0 -0
  130. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/replace.py +0 -0
  131. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/slugify.py +0 -0
  132. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/split.py +0 -0
  133. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/strip.py +0 -0
  134. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/to_case.py +0 -0
  135. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/to_date.py +0 -0
  136. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/to_datetime.py +0 -0
  137. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/to_path.py +0 -0
  138. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/to_time.py +0 -0
  139. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/to_timestamp.py +0 -0
  140. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/decorators/transform/truncate.py +0 -0
  141. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/errors.py +0 -0
  142. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/types.py +0 -0
  143. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/__init__.py +0 -0
  144. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/casing.py +0 -0
  145. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/checks.py +0 -0
  146. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/dispatch.py +0 -0
  147. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/format.py +0 -0
  148. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/humanize.py +0 -0
  149. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/naming.py +0 -0
  150. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/process.py +0 -0
  151. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/selection.py +0 -0
  152. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended/utils/time.py +0 -0
  153. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended.egg-info/dependency_links.txt +0 -0
  154. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended.egg-info/requires.txt +0 -0
  155. {click_extended-1.0.2 → click_extended-1.0.4}/click_extended.egg-info/top_level.txt +0 -0
  156. {click_extended-1.0.2 → click_extended-1.0.4}/setup.cfg +0 -0
  157. {click_extended-1.0.2 → click_extended-1.0.4}/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.2
3
+ Version: 1.0.4
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
@@ -96,6 +96,7 @@ An extension of the [Click](https://github.com/pallets/click) library with addit
96
96
  - **Full Type Support**: Built with type-hinting from the ground up, meaning everything is fully typed.
97
97
  - **Improved Errors**: Improved error output like tips, debugging, and more.
98
98
  - **Short Flag Concatenation**: Automatically support concatenating short hand flags where `-r -f` is the same as `-rf`.
99
+ - **Global state**: Access global state through the context's `data` property.
99
100
 
100
101
  ## Installation
101
102
 
@@ -26,6 +26,7 @@ An extension of the [Click](https://github.com/pallets/click) library with addit
26
26
  - **Full Type Support**: Built with type-hinting from the ground up, meaning everything is fully typed.
27
27
  - **Improved Errors**: Improved error output like tips, debugging, and more.
28
28
  - **Short Flag Concatenation**: Automatically support concatenating short hand flags where `-r -f` is the same as `-rf`.
29
+ - **Global state**: Access global state through the context's `data` property.
29
30
 
30
31
  ## Installation
31
32
 
@@ -9,12 +9,14 @@ from click_extended.core.decorators.option import option
9
9
  from click_extended.core.decorators.prompt import prompt
10
10
  from click_extended.core.decorators.selection import selection
11
11
  from click_extended.core.decorators.tag import tag
12
+ from click_extended.core.other.get_context import get_context
12
13
 
13
14
  __all__ = [
14
15
  "argument",
15
16
  "command",
16
17
  "context",
17
18
  "env",
19
+ "get_context",
18
20
  "group",
19
21
  "option",
20
22
  "prompt",
@@ -1,7 +1,9 @@
1
1
  """Initialization file for the `click_extended.core.other` module."""
2
2
 
3
3
  from click_extended.core.other.context import Context
4
+ from click_extended.core.other.get_context import get_context
4
5
 
5
6
  __all__ = [
6
7
  "Context",
8
+ "get_context",
7
9
  ]
@@ -220,6 +220,15 @@ class Tree:
220
220
  "yes",
221
221
  )
222
222
 
223
+ parent_data: dict[str, Any] | None = None
224
+ if context.parent is not None:
225
+ parent_meta = context.parent.meta.get("click_extended", {})
226
+ parent_data = parent_meta.get("data")
227
+
228
+ data: dict[str, Any] = (
229
+ parent_data if isinstance(parent_data, dict) else {}
230
+ )
231
+
223
232
  context.meta["click_extended"] = {
224
233
  "current_scope": "root",
225
234
  "root_node": root_node,
@@ -228,7 +237,7 @@ class Tree:
228
237
  "parents": parents_dict,
229
238
  "tags": root_node.tree.tags,
230
239
  "children": children_dict,
231
- "data": {},
240
+ "data": data,
232
241
  "debug": debug,
233
242
  }
234
243
 
@@ -0,0 +1,105 @@
1
+ """Function to get the active context."""
2
+
3
+ # pylint: disable=too-many-branches
4
+ # pylint: disable=used-before-assignment
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import TYPE_CHECKING, Any, cast
9
+
10
+ import click
11
+
12
+ from click_extended.core.other.context import Context
13
+
14
+ if TYPE_CHECKING:
15
+ from click_extended.core.decorators.tag import Tag
16
+ from click_extended.core.nodes._root_node import RootNode
17
+ from click_extended.core.nodes.child_node import ChildNode
18
+ from click_extended.core.nodes.node import Node
19
+ from click_extended.core.nodes.parent_node import ParentNode
20
+
21
+
22
+ def get_context() -> Context:
23
+ """
24
+ Get the active context.
25
+
26
+ Returns:
27
+ Context:
28
+ The active context.
29
+
30
+ Raises:
31
+ RuntimeError:
32
+ If called outside a Click command or before initialization.
33
+ """
34
+ click_context = click.get_current_context(silent=True)
35
+ if click_context is None:
36
+ raise RuntimeError("No active Click context is available.")
37
+
38
+ meta_raw = click_context.meta.get("click_extended")
39
+ if not isinstance(meta_raw, dict) or not meta_raw:
40
+ raise RuntimeError(
41
+ "click-extended context has not been initialized yet."
42
+ )
43
+
44
+ meta: dict[str, Any] = cast(dict[str, Any], meta_raw)
45
+
46
+ root_node = meta.get("root_node")
47
+ if root_node is None:
48
+ raise RuntimeError(
49
+ "click-extended root node is not available in context."
50
+ )
51
+
52
+ parents: dict[str, Any] = meta.get("parents", {})
53
+ tags: dict[str, Any] = meta.get("tags", {})
54
+ children: dict[str, Any] = meta.get("children", {})
55
+ globals_nodes: dict[str, Any] = meta.get("globals", {})
56
+
57
+ if not isinstance(parents, dict):
58
+ parents = {}
59
+ if not isinstance(tags, dict):
60
+ tags = {}
61
+ if not isinstance(children, dict):
62
+ children = {}
63
+ if not isinstance(globals_nodes, dict):
64
+ globals_nodes = {}
65
+
66
+ all_nodes: dict[str, Any] = {}
67
+ if isinstance(parents, dict):
68
+ all_nodes.update(parents)
69
+ if isinstance(tags, dict):
70
+ all_nodes.update(tags)
71
+ if isinstance(children, dict):
72
+ all_nodes.update(children)
73
+ if isinstance(globals_nodes, dict):
74
+ all_nodes.update(globals_nodes)
75
+ if root_node is not None:
76
+ all_nodes[root_node.name] = root_node
77
+
78
+ current_scope = meta.get("current_scope", "root")
79
+ if current_scope not in ("root", "parent", "child"):
80
+ current_scope = "root"
81
+ parent_node = meta.get("parent_node")
82
+ child_node = meta.get("child_node")
83
+
84
+ current = None
85
+ parent = None
86
+ if current_scope == "root":
87
+ current = root_node
88
+ elif current_scope == "parent":
89
+ current = parent_node
90
+ elif current_scope == "child":
91
+ current = child_node
92
+ parent = parent_node
93
+
94
+ return Context(
95
+ root=cast(RootNode, root_node),
96
+ current=cast(Node | None, current),
97
+ parent=cast(ParentNode | Tag | None, parent),
98
+ click_context=click_context,
99
+ nodes=cast(dict[str, Node], all_nodes),
100
+ parents=cast(dict[str, ParentNode], parents),
101
+ tags=cast(dict[str, Tag], tags),
102
+ children=cast(dict[str, ChildNode], children),
103
+ data=meta.get("data", {}),
104
+ debug=bool(meta.get("debug", False)),
105
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: click_extended
3
- Version: 1.0.2
3
+ Version: 1.0.4
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
@@ -96,6 +96,7 @@ An extension of the [Click](https://github.com/pallets/click) library with addit
96
96
  - **Full Type Support**: Built with type-hinting from the ground up, meaning everything is fully typed.
97
97
  - **Improved Errors**: Improved error output like tips, debugging, and more.
98
98
  - **Short Flag Concatenation**: Automatically support concatenating short hand flags where `-r -f` is the same as `-rf`.
99
+ - **Global state**: Access global state through the context's `data` property.
99
100
 
100
101
  ## Installation
101
102
 
@@ -36,6 +36,7 @@ click_extended/core/other/_click_command.py
36
36
  click_extended/core/other/_click_group.py
37
37
  click_extended/core/other/_tree.py
38
38
  click_extended/core/other/context.py
39
+ click_extended/core/other/get_context.py
39
40
  click_extended/decorators/__init__.py
40
41
  click_extended/decorators/check/__init__.py
41
42
  click_extended/decorators/check/conflicts.py
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "click_extended"
3
- version = "1.0.2"
3
+ version = "1.0.4"
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