wexample-wex-addon-package 0.0.2__py3-none-any.whl

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.
File without changes
File without changes
@@ -0,0 +1,28 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_addon_app.middleware.package_suite_middleware import (
6
+ PackageSuiteMiddleware,
7
+ )
8
+ from wexample_wex_addon_app.workdir.framework_packages_suite_workdir import (
9
+ FrameworkPackageSuiteWorkdir,
10
+ )
11
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
12
+ from wexample_wex_core.decorator.command import command
13
+ from wexample_wex_core.decorator.middleware import middleware
14
+
15
+ if TYPE_CHECKING:
16
+ from wexample_wex_core.context.execution_context import ExecutionContext
17
+
18
+
19
+ @middleware(middleware=PackageSuiteMiddleware)
20
+ @command(
21
+ type=COMMAND_TYPE_ADDON,
22
+ description="Validate internal dependencies and propagate versions across all packages in the suite.",
23
+ )
24
+ def package__dependency__check(
25
+ context: ExecutionContext,
26
+ app_workdir: FrameworkPackageSuiteWorkdir,
27
+ ) -> None:
28
+ app_workdir.packages_validate_internal_dependencies_declarations()
File without changes
@@ -0,0 +1,26 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_addon_app.middleware.app_middleware import AppMiddleware
6
+ from wexample_wex_addon_app.workdir.managed_workdir import ManagedWorkdir
7
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
8
+ from wexample_wex_core.decorator.command import command
9
+ from wexample_wex_core.decorator.middleware import middleware
10
+
11
+ if TYPE_CHECKING:
12
+ from wexample_wex_core.context.execution_context import ExecutionContext
13
+
14
+
15
+ @middleware(middleware=AppMiddleware)
16
+ @command(
17
+ type=COMMAND_TYPE_ADDON,
18
+ description="Show package addon info (POC: validates app_workdir injection)",
19
+ )
20
+ def package__info__show(
21
+ context: ExecutionContext,
22
+ app_workdir: ManagedWorkdir,
23
+ ) -> None:
24
+ context.io.log(f"addon : package")
25
+ context.io.log(f"app : {app_workdir.get_path()}")
26
+ context.io.log("app_workdir injection via AppMiddleware : OK")
File without changes
@@ -0,0 +1,36 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_app.response.dict_response import DictResponse
6
+ from wexample_wex_addon_app.middleware.package_suite_middleware import (
7
+ PackageSuiteMiddleware,
8
+ )
9
+ from wexample_wex_addon_app.workdir.framework_packages_suite_workdir import (
10
+ FrameworkPackageSuiteWorkdir,
11
+ )
12
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
13
+ from wexample_wex_core.decorator.command import command
14
+ from wexample_wex_core.decorator.middleware import middleware
15
+
16
+ if TYPE_CHECKING:
17
+ from wexample_wex_core.context.execution_context import ExecutionContext
18
+
19
+
20
+ @middleware(middleware=PackageSuiteMiddleware)
21
+ @command(
22
+ type=COMMAND_TYPE_ADDON,
23
+ description="List all packages in the suite with their paths and versions.",
24
+ )
25
+ def package__suite__packages(
26
+ context: ExecutionContext,
27
+ app_workdir: FrameworkPackageSuiteWorkdir,
28
+ ) -> None:
29
+ output = {}
30
+ for package in app_workdir.get_ordered_packages():
31
+ output[package.get_project_name()] = {
32
+ "path": str(package.get_path()),
33
+ "version": package.get_project_version(),
34
+ }
35
+
36
+ return DictResponse(kernel=context.kernel, content=output)
@@ -0,0 +1,94 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_addon_app.middleware.package_suite_middleware import (
6
+ PackageSuiteMiddleware,
7
+ )
8
+ from wexample_wex_addon_app.workdir.framework_packages_suite_workdir import (
9
+ FrameworkPackageSuiteWorkdir,
10
+ )
11
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
12
+ from wexample_wex_core.decorator.command import command
13
+ from wexample_wex_core.decorator.middleware import middleware
14
+ from wexample_wex_core.decorator.option import option
15
+
16
+ if TYPE_CHECKING:
17
+ from wexample_wex_core.context.execution_context import ExecutionContext
18
+
19
+
20
+ @option(name="yes", type=bool, default=False, is_flag=True)
21
+ @option(name="force", type=bool, default=False, is_flag=True)
22
+ @option(name="ignore_dependencies", type=bool, default=False, is_flag=True)
23
+ @middleware(middleware=PackageSuiteMiddleware)
24
+ @command(
25
+ type=COMMAND_TYPE_ADDON,
26
+ description="Publish all packages in the suite to package manager (npm, PyPI, packagist, etc.).",
27
+ )
28
+ def package__suite__publish(
29
+ context: ExecutionContext,
30
+ app_workdir: FrameworkPackageSuiteWorkdir,
31
+ yes: bool = False,
32
+ force: bool = False,
33
+ ignore_dependencies: bool = False,
34
+ ) -> None:
35
+ from wexample_prompt.enums.terminal_color import TerminalColor
36
+
37
+ from wexample_wex_addon_package.commands.suite.status import package__suite__status
38
+
39
+ context.io.title("Suite publication status")
40
+ app_workdir.manager_run_command(command=package__suite__status)
41
+
42
+ packages_with_changes: set[str] | None = None
43
+ if not force:
44
+ packages_with_changes = {
45
+ p.get_package_name() for p in app_workdir.compute_packages_to_publish()
46
+ }
47
+ if not packages_with_changes:
48
+ context.io.log("No packages have changes. Nothing to publish.")
49
+ return
50
+
51
+ if not ignore_dependencies:
52
+ app_workdir.packages_validate_internal_dependencies_declarations()
53
+
54
+ packages = app_workdir.get_ordered_packages()
55
+
56
+ if not force:
57
+ to_publish = [
58
+ p.get_package_name()
59
+ for p in packages
60
+ if p.get_package_name() in packages_with_changes
61
+ ]
62
+ to_skip = [
63
+ p.get_package_name()
64
+ for p in packages
65
+ if p.get_package_name() not in packages_with_changes
66
+ ]
67
+ if to_publish:
68
+ context.io.log(f"Packages to publish ({len(to_publish)}):")
69
+ context.io.list(to_publish)
70
+ if to_skip:
71
+ context.io.log(f"Packages with no changes, skipped ({len(to_skip)}):")
72
+ context.io.list(to_skip)
73
+
74
+ context.io.log("Starting deployment...")
75
+ context.io.indentation_up()
76
+ progress = context.io.progress(
77
+ total=len(packages),
78
+ print_response=False,
79
+ color=TerminalColor.CYAN,
80
+ ).get_handle()
81
+
82
+ for package in packages:
83
+ progress.advance(label=f"Publishing {package.get_project_name()}", step=1)
84
+ has_changes = (
85
+ None if force else package.get_package_name() in packages_with_changes
86
+ )
87
+ package.release(force=force, interactive=not yes, has_changes=has_changes)
88
+
89
+ if packages_with_changes is not None:
90
+ for package in packages:
91
+ if package.get_package_name() not in packages_with_changes:
92
+ package.commit_propagated_dependency_updates()
93
+
94
+ progress.finish(label="All packages published successfully")
@@ -0,0 +1,59 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_helpers.validator.regex_validator import RegexValidator
6
+ from wexample_wex_addon_app.middleware.package_suite_middleware import (
7
+ PackageSuiteMiddleware,
8
+ )
9
+ from wexample_wex_addon_app.workdir.framework_packages_suite_workdir import (
10
+ FrameworkPackageSuiteWorkdir,
11
+ )
12
+ from wexample_wex_core.const.globals import COMMAND_PATTERNS, COMMAND_TYPE_ADDON
13
+ from wexample_wex_core.decorator.command import command
14
+ from wexample_wex_core.decorator.middleware import middleware
15
+ from wexample_wex_core.decorator.option import option
16
+
17
+ if TYPE_CHECKING:
18
+ from wexample_wex_core.context.execution_context import ExecutionContext
19
+
20
+
21
+ @option(
22
+ name="command",
23
+ short_name="c",
24
+ type=str,
25
+ required=True,
26
+ description="The full command to execute, e.g. app::info/show",
27
+ validators=[RegexValidator(pattern=COMMAND_PATTERNS)],
28
+ )
29
+ @option(
30
+ name="arguments",
31
+ type=str,
32
+ description='The arguments string, e.g. "-a arg -v --yes"',
33
+ )
34
+ @option(
35
+ name="continue_on_error",
36
+ short_name="coe",
37
+ is_flag=True,
38
+ type=bool,
39
+ description="Continue execution on all packages even if one fails. Reports failures at the end.",
40
+ )
41
+ @middleware(middleware=PackageSuiteMiddleware)
42
+ @command(
43
+ type=COMMAND_TYPE_ADDON,
44
+ description="Execute a command on all packages of the suite.",
45
+ )
46
+ def package__suite__run(
47
+ context: ExecutionContext,
48
+ command: str,
49
+ app_workdir: FrameworkPackageSuiteWorkdir,
50
+ arguments: str = None,
51
+ continue_on_error: bool = False,
52
+ ) -> None:
53
+ from wexample_helpers.helpers.shell import shell_split_cmd
54
+
55
+ app_workdir.packages_execute_manager(
56
+ command=command,
57
+ arguments=shell_split_cmd(arguments) if arguments else None,
58
+ fail_fast=not continue_on_error,
59
+ )
@@ -0,0 +1,38 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_addon_app.middleware.package_suite_middleware import (
6
+ PackageSuiteMiddleware,
7
+ )
8
+ from wexample_wex_addon_app.workdir.framework_packages_suite_workdir import (
9
+ FrameworkPackageSuiteWorkdir,
10
+ )
11
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
12
+ from wexample_wex_core.decorator.command import command
13
+ from wexample_wex_core.decorator.middleware import middleware
14
+ from wexample_wex_core.decorator.option import option
15
+
16
+ if TYPE_CHECKING:
17
+ from wexample_wex_core.context.execution_context import ExecutionContext
18
+
19
+
20
+ @option(
21
+ name="command",
22
+ type=str,
23
+ required=True,
24
+ description='The full shell command to execute, e.g. "ls -la"',
25
+ )
26
+ @middleware(middleware=PackageSuiteMiddleware)
27
+ @command(
28
+ type=COMMAND_TYPE_ADDON,
29
+ description="Execute a shell command on all packages of the suite.",
30
+ )
31
+ def package__suite__shell(
32
+ context: ExecutionContext,
33
+ command: str,
34
+ app_workdir: FrameworkPackageSuiteWorkdir,
35
+ ) -> None:
36
+ from wexample_helpers.helpers.shell import shell_split_cmd
37
+
38
+ app_workdir.packages_execute_shell(cmd=shell_split_cmd(command))
@@ -0,0 +1,59 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_addon_app.middleware.package_suite_middleware import (
6
+ PackageSuiteMiddleware,
7
+ )
8
+ from wexample_wex_addon_app.workdir.framework_packages_suite_workdir import (
9
+ FrameworkPackageSuiteWorkdir,
10
+ )
11
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
12
+ from wexample_wex_core.decorator.command import command
13
+ from wexample_wex_core.decorator.middleware import middleware
14
+
15
+ if TYPE_CHECKING:
16
+ from wexample_wex_core.context.execution_context import ExecutionContext
17
+
18
+ _BUMP_STYLE: dict[str, tuple[str, str]] = {
19
+ "major": ("major", "@red{major}"),
20
+ "intermediate": ("minor", "@yellow{minor}"),
21
+ "minor": ("patch", "@cyan{patch}"),
22
+ }
23
+
24
+
25
+ @middleware(middleware=PackageSuiteMiddleware)
26
+ @command(
27
+ type=COMMAND_TYPE_ADDON,
28
+ description="Show the publication status of each package in the suite: whether it needs a bump and what version type.",
29
+ )
30
+ def package__suite__status(
31
+ context: ExecutionContext,
32
+ app_workdir: FrameworkPackageSuiteWorkdir,
33
+ ) -> None:
34
+ packages = app_workdir.get_ordered_packages()
35
+
36
+ rows = []
37
+ for package in packages:
38
+ has_changes = package.has_changes_since_last_publication_tag()
39
+ if has_changes:
40
+ bump_type = package.classify_version_bump()
41
+ _, bump_colored = _BUMP_STYLE.get(bump_type, (bump_type, bump_type))
42
+ status = f"@yellow{{to publish}}"
43
+ else:
44
+ bump_colored = "-"
45
+ status = "@green{up to date}"
46
+
47
+ rows.append(
48
+ [
49
+ package.get_package_name(),
50
+ package.get_project_version(),
51
+ bump_colored,
52
+ status,
53
+ ]
54
+ )
55
+
56
+ context.io.table(
57
+ data=rows,
58
+ headers=["Package", "Version", "Bump", "Status"],
59
+ )
@@ -0,0 +1,48 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_addon_app.middleware.suite_or_each_package_middleware import (
6
+ SuiteOrEachPackageMiddleware,
7
+ )
8
+ from wexample_wex_addon_app.workdir.repo_workdir import RepoWorkdir
9
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
10
+ from wexample_wex_core.decorator.command import command
11
+ from wexample_wex_core.decorator.middleware import middleware
12
+ from wexample_wex_core.decorator.option import option
13
+
14
+ if TYPE_CHECKING:
15
+ from wexample_app.response.boolean_response import BooleanResponse
16
+ from wexample_wex_core.context.execution_context import ExecutionContext
17
+
18
+
19
+ @option(
20
+ name="force",
21
+ type=bool,
22
+ default=False,
23
+ is_flag=True,
24
+ description="Force bump even if package has no new content",
25
+ )
26
+ @option(name="yes", type=bool, default=False, is_flag=True)
27
+ @middleware(middleware=SuiteOrEachPackageMiddleware)
28
+ @command(
29
+ type=COMMAND_TYPE_ADDON,
30
+ description="Bump version only if package has new content (HEAD not tagged). Use --force to bump regardless of changes. Use --all-packages to bump all packages in suite.",
31
+ )
32
+ def package__version__bump(
33
+ context: ExecutionContext,
34
+ app_workdir: RepoWorkdir,
35
+ yes: bool = False,
36
+ force: bool = False,
37
+ ) -> BooleanResponse:
38
+ from wexample_app.response.boolean_response import BooleanResponse
39
+
40
+ package_name = app_workdir.get_package_name()
41
+ bumped = app_workdir.bump(interactive=not yes, force=force)
42
+
43
+ if bumped:
44
+ context.io.success(f"Successfully bumped {package_name}.")
45
+ else:
46
+ context.io.log(f"Bump aborted for {package_name}.")
47
+
48
+ return BooleanResponse(kernel=context.kernel, content=bumped)
@@ -0,0 +1,29 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_addon_app.middleware.suite_or_each_package_middleware import (
6
+ SuiteOrEachPackageMiddleware,
7
+ )
8
+ from wexample_wex_addon_app.workdir.repo_workdir import RepoWorkdir
9
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
10
+ from wexample_wex_core.decorator.command import command
11
+ from wexample_wex_core.decorator.middleware import middleware
12
+ from wexample_wex_core.decorator.option import option
13
+
14
+ if TYPE_CHECKING:
15
+ from wexample_wex_core.context.execution_context import ExecutionContext
16
+
17
+
18
+ @option(name="force", type=bool, default=False, is_flag=True)
19
+ @middleware(middleware=SuiteOrEachPackageMiddleware)
20
+ @command(
21
+ type=COMMAND_TYPE_ADDON,
22
+ description="Publish package to PyPI. Use --all-packages to publish all packages in suite.",
23
+ )
24
+ def package__version__publish(
25
+ context: ExecutionContext,
26
+ app_workdir: RepoWorkdir,
27
+ force: bool = False,
28
+ ) -> None:
29
+ app_workdir.publish(force=force)
@@ -0,0 +1,31 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_addon_app.middleware.suite_or_each_package_middleware import (
6
+ SuiteOrEachPackageMiddleware,
7
+ )
8
+ from wexample_wex_addon_app.workdir.code_base_workdir import CodeBaseWorkdir
9
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
10
+ from wexample_wex_core.decorator.command import command
11
+ from wexample_wex_core.decorator.middleware import middleware
12
+
13
+ if TYPE_CHECKING:
14
+ from wexample_wex_core.context.execution_context import ExecutionContext
15
+
16
+
17
+ @middleware(middleware=SuiteOrEachPackageMiddleware)
18
+ @command(
19
+ type=COMMAND_TYPE_ADDON,
20
+ description="Commit and push changes for a package. Use --all-packages to apply to all packages in suite.",
21
+ )
22
+ def package__version__push(
23
+ context: ExecutionContext,
24
+ app_workdir: CodeBaseWorkdir,
25
+ ) -> None:
26
+ from wexample_helpers_git.const.common import GIT_BRANCH_MAIN
27
+
28
+ package_name = app_workdir.get_package_name()
29
+ app_workdir.commit_changes()
30
+ app_workdir.push_to_deployment_remote(branch_name=GIT_BRANCH_MAIN)
31
+ context.io.success(f"Pushed {package_name}.")
@@ -0,0 +1,34 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+
5
+ from wexample_wex_addon_app.middleware.suite_or_each_package_middleware import (
6
+ SuiteOrEachPackageMiddleware,
7
+ )
8
+ from wexample_wex_addon_app.workdir.code_base_workdir import CodeBaseWorkdir
9
+ from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
10
+ from wexample_wex_core.decorator.command import command
11
+ from wexample_wex_core.decorator.middleware import middleware
12
+ from wexample_wex_core.decorator.option import option
13
+
14
+ if TYPE_CHECKING:
15
+ from wexample_wex_core.context.execution_context import ExecutionContext
16
+
17
+
18
+ @middleware(middleware=SuiteOrEachPackageMiddleware)
19
+ @option(name="yes", type=bool, default=False, is_flag=True)
20
+ @option(name="force", type=bool, default=False, is_flag=True)
21
+ @command(
22
+ type=COMMAND_TYPE_ADDON,
23
+ description="Publish package to package manager (npm, PyPI, packagist, etc.). Use --all-packages to publish all packages in suite.",
24
+ )
25
+ def package__version__release(
26
+ context: ExecutionContext,
27
+ app_workdir: CodeBaseWorkdir,
28
+ yes: bool = False,
29
+ force: bool = False,
30
+ ) -> None:
31
+ app_workdir.release(
32
+ interactive=not yes,
33
+ force=force,
34
+ )
@@ -0,0 +1,15 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Any
4
+
5
+ from wexample_helpers.decorator.base_class import base_class
6
+ from wexample_wex_addon_app.app_addon_manager import AppAddonManager
7
+
8
+
9
+ @base_class
10
+ class PackageAddonManager(AppAddonManager):
11
+ @classmethod
12
+ def get_package_module(cls) -> Any:
13
+ import wexample_wex_addon_package
14
+
15
+ return wexample_wex_addon_package
File without changes
File without changes
@@ -0,0 +1,165 @@
1
+ Metadata-Version: 2.1
2
+ Name: wexample-wex-addon-package
3
+ Version: 0.0.2
4
+ Summary: Package management addon for wex
5
+ Author-Email: weeger <contact@wexample.com>
6
+ License: MIT
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Operating System :: OS Independent
10
+ Requires-Python: >=3.10
11
+ Requires-Dist: wexample-wex-addon-app>=10.0.0
12
+ Provides-Extra: dev
13
+ Requires-Dist: pytest; extra == "dev"
14
+ Requires-Dist: pytest-cov; extra == "dev"
15
+ Description-Content-Type: text/markdown
16
+
17
+ # wex_addon_package
18
+
19
+ Version: 0.0.2
20
+
21
+ Package management addon for wex
22
+
23
+ ## Table of Contents
24
+
25
+ - [Tests](#tests)
26
+ - [Suite Integration](#suite-integration)
27
+ - [Dependencies](#dependencies)
28
+ - [Versioning](#versioning)
29
+ - [License](#license)
30
+ - [Suite Integration](#suite-integration)
31
+ - [Suite Signature](#suite-signature)
32
+ - [Introduction](#introduction)
33
+ - [Roadmap](#roadmap)
34
+ - [Status Compatibility](#status-compatibility)
35
+ - [Useful Links](#useful-links)
36
+ - [Migration Notes](#migration-notes)
37
+
38
+ ## Tests
39
+
40
+ This project uses `pytest` for testing and `pytest-cov` for code coverage analysis.
41
+
42
+ ### Installation
43
+
44
+ First, install the required testing dependencies:
45
+ ```bash
46
+ .venv/bin/python -m pip install pytest pytest-cov
47
+ ```
48
+
49
+ ### Basic Usage
50
+
51
+ Run all tests with coverage:
52
+ ```bash
53
+ .venv/bin/python -m pytest --cov --cov-report=html
54
+ ```
55
+
56
+ ### Common Commands
57
+ ```bash
58
+ # Run tests with coverage for a specific module
59
+ .venv/bin/python -m pytest --cov=your_module
60
+
61
+ # Show which lines are not covered
62
+ .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing
63
+
64
+ # Generate an HTML coverage report
65
+ .venv/bin/python -m pytest --cov=your_module --cov-report=html
66
+
67
+ # Combine terminal and HTML reports
68
+ .venv/bin/python -m pytest --cov=your_module --cov-report=term-missing --cov-report=html
69
+
70
+ # Run specific test file with coverage
71
+ .venv/bin/python -m pytest tests/test_file.py --cov=your_module --cov-report=term-missing
72
+ ```
73
+
74
+ ### Viewing HTML Reports
75
+
76
+ After generating an HTML report, open `htmlcov/index.html` in your browser to view detailed line-by-line coverage information.
77
+
78
+ ### Coverage Threshold
79
+
80
+ To enforce a minimum coverage percentage:
81
+ ```bash
82
+ .venv/bin/python -m pytest --cov=your_module --cov-fail-under=80
83
+ ```
84
+
85
+ This will cause the test suite to fail if coverage drops below 80%.
86
+
87
+ ## Integration in the Suite
88
+
89
+ This package is part of the Wexample Suite — a collection of high-quality, modular tools designed to work seamlessly together across multiple languages and environments.
90
+
91
+ ### Related Packages
92
+
93
+ The suite includes packages for configuration management, file handling, prompts, and more. Each package can be used independently or as part of the integrated suite.
94
+
95
+ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the complete package ecosystem.
96
+
97
+ ## Dependencies
98
+
99
+ - wexample-wex-addon-app: >=10.0.0
100
+
101
+ ## Versioning & Compatibility Policy
102
+
103
+ Wexample packages follow **Semantic Versioning** (SemVer):
104
+
105
+ - **MAJOR**: Breaking changes
106
+ - **MINOR**: New features, backward compatible
107
+ - **PATCH**: Bug fixes, backward compatible
108
+
109
+ We maintain backward compatibility within major versions and provide clear migration guides for breaking changes.
110
+
111
+ ## License
112
+
113
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
114
+
115
+ Free to use in both personal and commercial projects.
116
+
117
+ ## Integration in the Suite
118
+
119
+ This package is part of the Wexample Suite — a collection of high-quality, modular tools designed to work seamlessly together across multiple languages and environments.
120
+
121
+ ### Related Packages
122
+
123
+ The suite includes packages for configuration management, file handling, prompts, and more. Each package can be used independently or as part of the integrated suite.
124
+
125
+ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the complete package ecosystem.
126
+
127
+ # About us
128
+
129
+ [Wexample](https://wexample.com) stands as a cornerstone of the digital ecosystem — a collective of seasoned engineers, researchers, and creators driven by a relentless pursuit of technological excellence. More than a media platform, it has grown into a vibrant community where innovation meets craftsmanship, and where every line of code reflects a commitment to clarity, durability, and shared intelligence.
130
+
131
+ This packages suite embodies this spirit. Trusted by professionals and enthusiasts alike, it delivers a consistent, high-quality foundation for modern development — open, elegant, and battle-tested. Its reputation is built on years of collaboration, refinement, and rigorous attention to detail, making it a natural choice for those who demand both robustness and beauty in their tools.
132
+
133
+ Wexample cultivates a culture of mastery. Each package, each contribution carries the mark of a community that values precision, ethics, and innovation — a community proud to shape the future of digital craftsmanship.
134
+
135
+ A Python toolkit providing wex addon capabilities for packages management.
136
+
137
+ ## Known Limitations & Roadmap
138
+
139
+ Current limitations and planned features are tracked in the GitHub issues.
140
+
141
+ See the [project roadmap](https://github.com/wexample/python-wex_addon_package/issues) for upcoming features and improvements.
142
+
143
+ ## Status & Compatibility
144
+
145
+ **Maturity**: Production-ready
146
+
147
+ **Python Support**: >=3.10
148
+
149
+ **OS Support**: Linux, macOS, Windows
150
+
151
+ **Status**: Actively maintained
152
+
153
+ ## Useful Links
154
+
155
+ - **Homepage**: https://github.com/wexample/python-wex-addon-package
156
+ - **Documentation**: [docs.wexample.com](https://docs.wexample.com)
157
+ - **Issue Tracker**: https://github.com/wexample/python-wex-addon-package/issues
158
+ - **Discussions**: https://github.com/wexample/python-wex-addon-package/discussions
159
+ - **PyPI**: [pypi.org/project/wex_addon_package](https://pypi.org/project/wex_addon_package/)
160
+
161
+ ## Migration Notes
162
+
163
+ When upgrading between major versions, refer to the migration guides in the documentation.
164
+
165
+ Breaking changes are clearly documented with upgrade paths and examples.
@@ -0,0 +1,24 @@
1
+ wexample_wex_addon_package-0.0.2.dist-info/METADATA,sha256=mUs0fr4SpxK3Tubf8j2qX4XUUYzID-LyUpYD97rlYLo,5955
2
+ wexample_wex_addon_package-0.0.2.dist-info/WHEEL,sha256=Z36eTX6lG3PITRleSd5hAZHCcz52yg3c0JQVxKBbLW0,90
3
+ wexample_wex_addon_package-0.0.2.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
+ wexample_wex_addon_package/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ wexample_wex_addon_package/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
+ wexample_wex_addon_package/commands/dependency/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ wexample_wex_addon_package/commands/dependency/check.py,sha256=_F8XzJHRvFFvBNbPH2t-hKc8AkIWGC9gvPBILn2bsUM,953
8
+ wexample_wex_addon_package/commands/info/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
+ wexample_wex_addon_package/commands/info/show.py,sha256=YyUWPqeudC_L8rb8pu4FYdgcATRmGKOZNKKCh6A4HaY,921
10
+ wexample_wex_addon_package/commands/suite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ wexample_wex_addon_package/commands/suite/packages.py,sha256=JaMkDorlw39dvSKTSbBVovw-8e9FG0mzo-DnM_vQ_6A,1206
12
+ wexample_wex_addon_package/commands/suite/publish.py,sha256=5on3X19BWny3wY4HLwHzcImGHtzQEDNPnxpDa_nY1n0,3401
13
+ wexample_wex_addon_package/commands/suite/run.py,sha256=HHahidXs8QtgeBUV5I2LTyEtxvPZ-2910tyZyvr7lRE,1826
14
+ wexample_wex_addon_package/commands/suite/shell.py,sha256=Al3kD5THZe57D99SMJWASX-9aQQVTHGVQQmXjywfIEA,1180
15
+ wexample_wex_addon_package/commands/suite/status.py,sha256=WssBqhftdrfwd_cc-iISnTZu0lW50Zf9wkNCU750dFw,1840
16
+ wexample_wex_addon_package/commands/version/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ wexample_wex_addon_package/commands/version/bump.py,sha256=IvizvXb_466Mlp48THUWaswPLhi8rjRDgKjNjcICRlo,1700
18
+ wexample_wex_addon_package/commands/version/publish.py,sha256=oiCRjQvIR9zaBEMQhibXr9TMo79lpN9CHuuUmc6bHIM,1006
19
+ wexample_wex_addon_package/commands/version/push.py,sha256=7tivGwtIpPp0Y_73fvXjwodgXjobO8xhJcgKor0tf-o,1124
20
+ wexample_wex_addon_package/commands/version/release.py,sha256=e2LyvS1B0x3wzsStxtStYGW_BmDWQVDxE_UijnHlhRM,1186
21
+ wexample_wex_addon_package/package_addon_manager.py,sha256=_JCsGLzSdulmF4zjzgxwr69u29fQFSU7IuXT4L4L1mE,390
22
+ wexample_wex_addon_package/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ wexample_wex_addon_package/workdir/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
+ wexample_wex_addon_package-0.0.2.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: pdm-backend (2.4.8)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+
3
+ [gui_scripts]
4
+