wry 0.2.4.dev2__tar.gz → 0.3.1__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 (140) hide show
  1. {wry-0.2.4.dev2 → wry-0.3.1}/.gitignore +3 -0
  2. {wry-0.2.4.dev2 → wry-0.3.1}/CHANGELOG.md +7 -0
  3. {wry-0.2.4.dev2/wry.egg-info → wry-0.3.1}/PKG-INFO +1 -1
  4. {wry-0.2.4.dev2 → wry-0.3.1}/pyproject.toml +5 -6
  5. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_init_edge_cases.py +2 -2
  6. {wry-0.2.4.dev2 → wry-0.3.1}/wry/__init__.py +21 -4
  7. {wry-0.2.4.dev2 → wry-0.3.1}/wry/_version.py +3 -3
  8. {wry-0.2.4.dev2 → wry-0.3.1/wry.egg-info}/PKG-INFO +1 -1
  9. {wry-0.2.4.dev2 → wry-0.3.1}/.github/workflows/ci-cd.yml +0 -0
  10. {wry-0.2.4.dev2 → wry-0.3.1}/.markdownlint.json +0 -0
  11. {wry-0.2.4.dev2 → wry-0.3.1}/.pre-commit-config.yaml +0 -0
  12. {wry-0.2.4.dev2 → wry-0.3.1}/AI_KNOWLEDGE_BASE.md +0 -0
  13. {wry-0.2.4.dev2 → wry-0.3.1}/LICENSE +0 -0
  14. {wry-0.2.4.dev2 → wry-0.3.1}/README.md +0 -0
  15. {wry-0.2.4.dev2 → wry-0.3.1}/RELEASE_PROCESS.md +0 -0
  16. {wry-0.2.4.dev2 → wry-0.3.1}/TODO.md +0 -0
  17. {wry-0.2.4.dev2 → wry-0.3.1}/check.sh +0 -0
  18. {wry-0.2.4.dev2 → wry-0.3.1}/examples/argument_help_injection.py +0 -0
  19. {wry-0.2.4.dev2 → wry-0.3.1}/examples/auto_instantiate_edge_cases.py +0 -0
  20. {wry-0.2.4.dev2 → wry-0.3.1}/examples/auto_instantiate_poc.py +0 -0
  21. {wry-0.2.4.dev2 → wry-0.3.1}/examples/auto_model_example.py +0 -0
  22. {wry-0.2.4.dev2 → wry-0.3.1}/examples/config.json +0 -0
  23. {wry-0.2.4.dev2 → wry-0.3.1}/examples/explicit_argument_help.py +0 -0
  24. {wry-0.2.4.dev2 → wry-0.3.1}/examples/field_exclusion.py +0 -0
  25. {wry-0.2.4.dev2 → wry-0.3.1}/examples/field_exclusion_example.py +0 -0
  26. {wry-0.2.4.dev2 → wry-0.3.1}/examples/intermediate_example.py +0 -0
  27. {wry-0.2.4.dev2 → wry-0.3.1}/examples/multi_model_example.py +0 -0
  28. {wry-0.2.4.dev2 → wry-0.3.1}/examples/sample_config.json +0 -0
  29. {wry-0.2.4.dev2 → wry-0.3.1}/examples/simple_cli.py +0 -0
  30. {wry-0.2.4.dev2 → wry-0.3.1}/examples/source_tracking_comprehensive.py +0 -0
  31. {wry-0.2.4.dev2 → wry-0.3.1}/examples/source_tracking_example.py +0 -0
  32. {wry-0.2.4.dev2 → wry-0.3.1}/scripts/README.md +0 -0
  33. {wry-0.2.4.dev2 → wry-0.3.1}/scripts/extract_release_notes.py +0 -0
  34. {wry-0.2.4.dev2 → wry-0.3.1}/scripts/test_all_versions.sh +0 -0
  35. {wry-0.2.4.dev2 → wry-0.3.1}/scripts/test_ci_locally.sh +0 -0
  36. {wry-0.2.4.dev2 → wry-0.3.1}/scripts/test_with_act.sh +0 -0
  37. {wry-0.2.4.dev2 → wry-0.3.1}/scripts/update-dependencies.sh +0 -0
  38. {wry-0.2.4.dev2 → wry-0.3.1}/setup.cfg +0 -0
  39. {wry-0.2.4.dev2 → wry-0.3.1}/tests/README.md +0 -0
  40. {wry-0.2.4.dev2 → wry-0.3.1}/tests/__init__.py +0 -0
  41. {wry-0.2.4.dev2 → wry-0.3.1}/tests/features/__init__.py +0 -0
  42. {wry-0.2.4.dev2 → wry-0.3.1}/tests/features/test_auto_model.py +0 -0
  43. {wry-0.2.4.dev2 → wry-0.3.1}/tests/features/test_multi_model.py +0 -0
  44. {wry-0.2.4.dev2 → wry-0.3.1}/tests/features/test_source_precedence.py +0 -0
  45. {wry-0.2.4.dev2 → wry-0.3.1}/tests/integration/__init__.py +0 -0
  46. {wry-0.2.4.dev2 → wry-0.3.1}/tests/integration/test_click_edge_cases.py +0 -0
  47. {wry-0.2.4.dev2 → wry-0.3.1}/tests/integration/test_click_integration.py +0 -0
  48. {wry-0.2.4.dev2 → wry-0.3.1}/tests/integration/test_click_integration_extended.py +0 -0
  49. {wry-0.2.4.dev2 → wry-0.3.1}/tests/integration/test_context_handling.py +0 -0
  50. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/__init__.py +0 -0
  51. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/auto_model/__init__.py +0 -0
  52. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/auto_model/test_auto_model_annotation_inference.py +0 -0
  53. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/auto_model/test_auto_model_edge_cases.py +0 -0
  54. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/auto_model/test_auto_model_field_processing.py +0 -0
  55. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/auto_model/test_field_annotation_handling.py +0 -0
  56. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/auto_model/test_field_annotations.py +0 -0
  57. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/auto_model/test_type_inference.py +0 -0
  58. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/README_TESTING_STRATEGY.md +0 -0
  59. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/__init__.py +0 -0
  60. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_argument_types.py +0 -0
  61. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_bool_flag_handling.py +0 -0
  62. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_click_config_building.py +0 -0
  63. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_click_constraint_formatting.py +0 -0
  64. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_click_decorator_edge_cases.py +0 -0
  65. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_click_interval_constraints.py +0 -0
  66. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_click_lambda_parsing.py +0 -0
  67. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_click_length_constraints.py +0 -0
  68. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_click_parameter_generation.py +0 -0
  69. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_click_predicate_handling.py +0 -0
  70. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_closure_extraction_errors.py +0 -0
  71. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_closure_handling.py +0 -0
  72. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_constraint_behavior.py +0 -0
  73. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_constraint_edge_cases.py +0 -0
  74. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_env_vars_option.py +0 -0
  75. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_explicit_argument_help_injection.py +0 -0
  76. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_format_constraint_text.py +0 -0
  77. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_json_config_loading.py +0 -0
  78. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_lambda_behavior.py +0 -0
  79. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_lambda_error_handling.py +0 -0
  80. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_predicate_source_errors.py +0 -0
  81. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_strict_mode_errors.py +0 -0
  82. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/click/test_type_handling.py +0 -0
  83. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/__init__.py +0 -0
  84. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_accessors.py +0 -0
  85. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_advanced_features.py +0 -0
  86. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_core.py +0 -0
  87. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_edge_cases.py +0 -0
  88. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_env_utils.py +0 -0
  89. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_field_constraint_extraction.py +0 -0
  90. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_field_utils.py +0 -0
  91. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_field_utils_edge_cases.py +0 -0
  92. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_sources.py +0 -0
  93. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/core/test_type_checking_blocks.py +0 -0
  94. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/__init__.py +0 -0
  95. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_accessor_caching.py +0 -0
  96. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_extract_edge_cases.py +0 -0
  97. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_extract_subset_edge_cases.py +0 -0
  98. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_model_click_context_handling.py +0 -0
  99. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_model_data_extraction.py +0 -0
  100. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_model_default_handling.py +0 -0
  101. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_model_edge_cases.py +0 -0
  102. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_model_environment_integration.py +0 -0
  103. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_model_extract_subset_edge_cases.py +0 -0
  104. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_model_extraction_methods.py +0 -0
  105. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_model_field_errors.py +0 -0
  106. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_model_object_extraction.py +0 -0
  107. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_non_dict_object_extraction.py +0 -0
  108. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/model/test_object_attribute_extraction.py +0 -0
  109. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/multi_model/__init__.py +0 -0
  110. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/multi_model/test_multi_model.py +0 -0
  111. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/multi_model/test_type_checking.py +0 -0
  112. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_argument_help_injection.py +0 -0
  113. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_auto_model_field_processing.py +0 -0
  114. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_comprehensive_imports.py +0 -0
  115. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_exclude_enum.py +0 -0
  116. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_generate_click_classmethod.py +0 -0
  117. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_help_system.py +0 -0
  118. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_init.py +0 -0
  119. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_init_version_edge_cases.py +0 -0
  120. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_model_extraction_methods.py +0 -0
  121. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_multiple_option_bug.py +0 -0
  122. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_type_checking_imports.py +0 -0
  123. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_variadic_argument_bug.py +0 -0
  124. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_version_fallback.py +0 -0
  125. {wry-0.2.4.dev2 → wry-0.3.1}/tests/unit/test_version_parsing.py +0 -0
  126. {wry-0.2.4.dev2 → wry-0.3.1}/wry/auto_model.py +0 -0
  127. {wry-0.2.4.dev2 → wry-0.3.1}/wry/click_integration.py +0 -0
  128. {wry-0.2.4.dev2 → wry-0.3.1}/wry/core/__init__.py +0 -0
  129. {wry-0.2.4.dev2 → wry-0.3.1}/wry/core/accessors.py +0 -0
  130. {wry-0.2.4.dev2 → wry-0.3.1}/wry/core/env_utils.py +0 -0
  131. {wry-0.2.4.dev2 → wry-0.3.1}/wry/core/field_utils.py +0 -0
  132. {wry-0.2.4.dev2 → wry-0.3.1}/wry/core/model.py +0 -0
  133. {wry-0.2.4.dev2 → wry-0.3.1}/wry/core/sources.py +0 -0
  134. {wry-0.2.4.dev2 → wry-0.3.1}/wry/help_system.py +0 -0
  135. {wry-0.2.4.dev2 → wry-0.3.1}/wry/multi_model.py +0 -0
  136. {wry-0.2.4.dev2 → wry-0.3.1}/wry/py.typed +0 -0
  137. {wry-0.2.4.dev2 → wry-0.3.1}/wry.egg-info/SOURCES.txt +0 -0
  138. {wry-0.2.4.dev2 → wry-0.3.1}/wry.egg-info/dependency_links.txt +0 -0
  139. {wry-0.2.4.dev2 → wry-0.3.1}/wry.egg-info/requires.txt +0 -0
  140. {wry-0.2.4.dev2 → wry-0.3.1}/wry.egg-info/top_level.txt +0 -0
@@ -137,3 +137,6 @@ dmypy.json
137
137
 
138
138
  # macOS
139
139
  .DS_Store
140
+
141
+ # Auto-generated version file (generated by setuptools-scm at build time)
142
+ wry/_version.py
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.1] - 2025-10-02
11
+
12
+ ### Fixed
13
+
14
+ - CI/CD build configuration for setuptools-scm
15
+ - Version generation now works correctly with git tags
16
+
10
17
  ## [0.3.0] - 2025-10-02
11
18
 
12
19
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wry
3
- Version: 0.2.4.dev2
3
+ Version: 0.3.1
4
4
  Summary: Why Repeat Yourself? - Define your CLI once with Pydantic models
5
5
  Author-email: Tyler House <26489166+tahouse@users.noreply.github.com>
6
6
  License: MIT
@@ -61,14 +61,13 @@ wry = ["py.typed"]
61
61
 
62
62
  [tool.setuptools_scm]
63
63
  # Get version from git tags
64
- version_file = "wry/_version.py"
64
+ write_to = "wry/_version.py"
65
+ fallback_version = "0.0.1.dev0"
66
+ # Configure version string that includes git info in metadata
67
+ # Use "guess-next-dev" to generate next patch .devN versions between releases
68
+ # These show as pre-releases on PyPI (unlike .postN versions)
65
69
  version_scheme = "guess-next-dev"
66
70
  local_scheme = "no-local-version"
67
- write_to_template = """# File generated by setuptools-scm
68
- __version__ = "{version}"
69
- __version_tuple__ = version_tuple = {version_tuple}
70
- __commit_id__ = "{scm_version.node}"
71
- """
72
71
 
73
72
  [tool.ruff]
74
73
  target-version = "py310"
@@ -28,7 +28,7 @@ class TestVersionParsingEdgeCases:
28
28
  # Should fall back to default version
29
29
  assert hasattr(wry, "__version__")
30
30
  # With setuptools-scm, falls back to placeholder
31
- assert wry.__version__ == "0.0.0"
31
+ assert wry.__version__ == "0.0.1-dev"
32
32
  assert hasattr(wry, "__commit_id__")
33
33
  assert wry.__commit_id__ is None
34
34
 
@@ -48,7 +48,7 @@ class TestVersionParsingEdgeCases:
48
48
  import wry
49
49
 
50
50
  # Should use fallback version
51
- assert wry.__version__ == "0.0.0"
51
+ assert wry.__version__ == "0.0.1-dev"
52
52
  assert hasattr(wry, "__commit_id__")
53
53
  assert wry.__commit_id__ is None
54
54
 
@@ -55,10 +55,27 @@ try:
55
55
  if __commit_id__:
56
56
  __version_full__ += f"+{__commit_id__}"
57
57
  except ImportError:
58
- # Fallback for development when _version.py is not generated
59
- __version__ = "0.0.0"
60
- __version_full__ = __version__
61
- __commit_id__ = None
58
+ # Fallback for development/editable installs
59
+ try:
60
+ # Try to get version dynamically for editable installs
61
+ from setuptools_scm import get_version
62
+
63
+ __version__ = get_version(root="../..", relative_to=__file__)
64
+ # Extract commit hash from version if present
65
+ if "+" in __version__ and "g" in __version__:
66
+ # Version like "0.0.2+g1234567" or "0.0.2.dev1+g1234567"
67
+ __commit_id__ = __version__.split("+")[-1].split(".")[0]
68
+ __version_full__ = __version__
69
+ else:
70
+ __commit_id__ = None
71
+ __version_full__ = __version__
72
+ # Clean version for consistency
73
+ __version__ = __version__.split("+")[0]
74
+ except Exception:
75
+ # Ultimate fallback
76
+ __version__ = "0.0.1-dev"
77
+ __version_full__ = __version__
78
+ __commit_id__ = None
62
79
 
63
80
  __author__ = "Tyler House"
64
81
  __email__ = "26489166+tahouse@users.noreply.github.com"
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.2.4.dev2'
32
- __version_tuple__ = version_tuple = (0, 2, 4, 'dev2')
31
+ __version__ = version = '0.3.1'
32
+ __version_tuple__ = version_tuple = (0, 3, 1)
33
33
 
34
- __commit_id__ = commit_id = 'g455c4af4b'
34
+ __commit_id__ = commit_id = 'gebefb4a69'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wry
3
- Version: 0.2.4.dev2
3
+ Version: 0.3.1
4
4
  Summary: Why Repeat Yourself? - Define your CLI once with Pydantic models
5
5
  Author-email: Tyler House <26489166+tahouse@users.noreply.github.com>
6
6
  License: MIT
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
File without changes
File without changes
File without changes
File without changes
File without changes