wexample-wex-addon-dev-python 8.8.2__py3-none-any.whl → 8.9.0__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.
@@ -6,12 +6,15 @@ from wexample_cli.const.middleware import (
6
6
  MIDDLEWARE_OPTION_VALUE_ALLWAYS,
7
7
  MIDDLEWARE_OPTION_VALUE_OPTIONAL,
8
8
  )
9
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
9
10
  from wexample_cli.decorator.command import command
10
11
  from wexample_cli.decorator.middleware import middleware
11
12
  from wexample_cli.decorator.option import option
12
13
  from wexample_cli.decorator.option_stop_on_failure import option_stop_on_failure
13
14
  from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
14
15
 
16
+ from wexample_wex_addon_dev_python.const.tags import DomainTag
17
+
15
18
  if TYPE_CHECKING:
16
19
  from wexample_cli.context.execution_context import ExecutionContext
17
20
 
@@ -36,6 +39,14 @@ if TYPE_CHECKING:
36
39
  type=COMMAND_TYPE_ADDON,
37
40
  description="Check python code on every file: "
38
41
  "python::code/check --file ../../pip/wex-core/wexample_wex_core/ -sof",
42
+ tags=[
43
+ DomainTag.LANGUAGE_PYTHON,
44
+ DomainTag.LINT,
45
+ EffectTag.READ_ONLY,
46
+ AudienceTag.AGENT_SAFE,
47
+ ScopeTag.LOCAL,
48
+ ScopeTag.PACKAGE,
49
+ ],
39
50
  )
40
51
  def python__code__check(
41
52
  context: ExecutionContext,
@@ -2,11 +2,14 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
5
6
  from wexample_cli.decorator.command import command
6
7
  from wexample_cli.decorator.middleware import middleware
7
8
  from wexample_cli.decorator.option import option
8
9
  from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
9
10
 
11
+ from wexample_wex_addon_dev_python.const.tags import DomainTag
12
+
10
13
  if TYPE_CHECKING:
11
14
  from wexample_wex_core.common.kernel import Kernel
12
15
 
@@ -27,7 +30,17 @@ if TYPE_CHECKING:
27
30
  @middleware(
28
31
  name="each_python_file", should_exist=True, expand_glob=True, recursive=True
29
32
  )
30
- @command(type=COMMAND_TYPE_ADDON)
33
+ @command(
34
+ type=COMMAND_TYPE_ADDON,
35
+ tags=[
36
+ DomainTag.FORMAT,
37
+ DomainTag.LANGUAGE_PYTHON,
38
+ EffectTag.WRITE,
39
+ AudienceTag.AGENT_SAFE,
40
+ ScopeTag.LOCAL,
41
+ ScopeTag.PACKAGE,
42
+ ],
43
+ )
31
44
  def python__code__format(
32
45
  kernel: Kernel,
33
46
  file: str,
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
5
6
  from wexample_cli.decorator.command import command
6
7
  from wexample_wex_core.const.globals import COMMAND_TYPE_ADDON
7
8
 
@@ -9,7 +10,16 @@ if TYPE_CHECKING:
9
10
  from wexample_cli.context.execution_context import ExecutionContext
10
11
 
11
12
 
12
- @command(type=COMMAND_TYPE_ADDON, description="Check python code on every file.")
13
+ @command(
14
+ type=COMMAND_TYPE_ADDON,
15
+ description="Check python code on every file.",
16
+ tags=[
17
+ EffectTag.READ_ONLY,
18
+ AudienceTag.AGENT_SAFE,
19
+ ScopeTag.LOCAL,
20
+ ScopeTag.PACKAGE,
21
+ ],
22
+ )
13
23
  def python__examples__validate(
14
24
  context: ExecutionContext,
15
25
  ) -> None:
File without changes
@@ -0,0 +1,52 @@
1
+ from __future__ import annotations
2
+
3
+ from wexample_api.common.abstract_gateway import AbstractGateway
4
+ from wexample_helpers.classes.field import public_field
5
+ from wexample_helpers.decorator.base_class import base_class
6
+
7
+
8
+ @base_class
9
+ class PypiRegistryGateway(AbstractGateway):
10
+ """Thin HTTP gateway over the PyPI Simple index (PEP 503).
11
+
12
+ Targets public PyPI (`https://pypi.org`) and private indexes that
13
+ expose the same `/simple/<package>/` layout (e.g. GitLab Package
14
+ Registry). Optional Basic auth is wired via `username` + `token`
15
+ (use `__token__` as username for token-based auth).
16
+ """
17
+
18
+ token: str | None = public_field(
19
+ default=None,
20
+ description="API token paired with `username` for Basic auth.",
21
+ )
22
+ username: str | None = public_field(
23
+ default=None,
24
+ description="Username for Basic auth. Use '__token__' for token-based auth.",
25
+ )
26
+
27
+ def __attrs_post_init__(self) -> None:
28
+ super().__attrs_post_init__()
29
+ if self.token:
30
+ import base64
31
+
32
+ credentials = base64.b64encode(
33
+ f"{self.username or '__token__'}:{self.token}".encode()
34
+ ).decode()
35
+ self.default_headers["Authorization"] = f"Basic {credentials}"
36
+
37
+ def has_version(self, package: str, version: str) -> bool:
38
+ """Return True iff `package==version` is published on this index.
39
+
40
+ Uses the PEP 503 Simple index and matches the version string against
41
+ the HTML body. Returns False on 404 (unknown package, or version not
42
+ yet propagated through the registry's CDN).
43
+ """
44
+ response = self.make_request(
45
+ endpoint=f"simple/{package}/",
46
+ expected_status_codes=[200, 404],
47
+ fatal_if_unexpected=False,
48
+ quiet=True,
49
+ )
50
+ if response is None or response.status_code != 200:
51
+ return False
52
+ return version in response.text
@@ -0,0 +1,12 @@
1
+ """Domain tags exposed by this addon — one entry per `domain:*` value its commands use."""
2
+
3
+ from __future__ import annotations
4
+
5
+
6
+ class DomainTag:
7
+ """Functional domain this addon's commands touch."""
8
+
9
+ FORMAT = "domain:format"
10
+ LANGUAGE_PYTHON = "domain:language-python"
11
+ LINT = "domain:lint"
12
+ SERVICE = "domain:service"
@@ -2,9 +2,12 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
5
6
  from wexample_cli.decorator.command import command
6
7
  from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
7
8
 
9
+ from wexample_wex_addon_dev_python.const.tags import DomainTag
10
+
8
11
  if TYPE_CHECKING:
9
12
  from wexample_cli.context.execution_context import ExecutionContext
10
13
  from wexample_wex_addon_app.service.app_service import AppService
@@ -13,6 +16,14 @@ if TYPE_CHECKING:
13
16
  @command(
14
17
  type=COMMAND_TYPE_SERVICE,
15
18
  description="Register docker image build config for the python service",
19
+ tags=[
20
+ DomainTag.LANGUAGE_PYTHON,
21
+ DomainTag.SERVICE,
22
+ EffectTag.WRITE,
23
+ AudienceTag.AGENT_SAFE,
24
+ ScopeTag.APP,
25
+ ScopeTag.LOCAL,
26
+ ],
16
27
  )
17
28
  def python__service__install(
18
29
  context: ExecutionContext,
@@ -2,9 +2,12 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from wexample_cli.const.tags import AudienceTag, EffectTag, ScopeTag
5
6
  from wexample_cli.decorator.command import command
6
7
  from wexample_wex_core.const.globals import COMMAND_TYPE_SERVICE
7
8
 
9
+ from wexample_wex_addon_dev_python.const.tags import DomainTag
10
+
8
11
  if TYPE_CHECKING:
9
12
  from wexample_cli.context.execution_context import ExecutionContext
10
13
  from wexample_wex_addon_app.service.app_service import AppService
@@ -13,6 +16,15 @@ if TYPE_CHECKING:
13
16
  @command(
14
17
  type=COMMAND_TYPE_SERVICE,
15
18
  description="Build python docker images if not already built (idempotent via lock)",
19
+ tags=[
20
+ DomainTag.LANGUAGE_PYTHON,
21
+ DomainTag.SERVICE,
22
+ EffectTag.SUBPROCESS_SPAWN,
23
+ EffectTag.WRITE,
24
+ AudienceTag.AGENT_SAFE,
25
+ ScopeTag.APP,
26
+ ScopeTag.LOCAL,
27
+ ],
16
28
  )
17
29
  def python__service__setup(
18
30
  context: ExecutionContext,
@@ -1,10 +1,12 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from wexample_helpers.decorator.base_class import base_class
3
4
  from wexample_wex_addon_app.workdir.mixin.abstract_profiling_workdir_mixin import (
4
5
  AbstractProfilingWorkdirMixin,
5
6
  )
6
7
 
7
8
 
9
+ @base_class
8
10
  class WithProfilingPythonWorkdirMixin(AbstractProfilingWorkdirMixin):
9
11
  """Mixin that adds pytest-benchmark profiling capability to a Python workdir.
10
12
 
@@ -4,6 +4,7 @@ from pathlib import Path
4
4
  from typing import TYPE_CHECKING
5
5
 
6
6
  from wexample_filestate.const.disk import DiskItemType
7
+ from wexample_helpers.decorator.base_class import base_class
7
8
  from wexample_wex_addon_app.helpers.python import (
8
9
  python_install_dependency_in_venv,
9
10
  python_is_package_installed_editable_in_venv,
@@ -22,6 +23,7 @@ if TYPE_CHECKING:
22
23
  )
23
24
 
24
25
 
26
+ @base_class
25
27
  class PythonPackageWorkdir(PythonWorkdir):
26
28
  _project_info_cache = None
27
29
 
@@ -454,20 +456,20 @@ class PythonPackageWorkdir(PythonWorkdir):
454
456
  shell_run(publish_cmd, inherit_stdio=True, cwd=self.get_path())
455
457
 
456
458
  def _wait_for_registry(self) -> None:
457
- import base64
458
- import urllib.error
459
- import urllib.request
460
-
461
459
  from wexample_helpers.helpers.polling_callback_manager import (
462
460
  PollingCallbackManager,
463
461
  )
464
462
 
465
- repository_url = self.search_app_or_suite_runtime_config(
466
- "pdm.repository.url", default=None
467
- ).get_str_or_none()
468
- if not repository_url:
469
- repository_url = "https://pypi.org"
463
+ from wexample_wex_addon_dev_python.common.pypi_registry_gateway import (
464
+ PypiRegistryGateway,
465
+ )
470
466
 
467
+ repository_url = (
468
+ self.search_app_or_suite_runtime_config(
469
+ "pdm.repository.url", default=None
470
+ ).get_str_or_none()
471
+ or "https://pypi.org"
472
+ )
471
473
  token = self.search_app_or_suite_runtime_config(
472
474
  "pdm.repository.token", default=None
473
475
  ).get_str_or_none()
@@ -480,25 +482,14 @@ class PythonPackageWorkdir(PythonWorkdir):
480
482
 
481
483
  package = self.get_package_name()
482
484
  version = self.get_setup_version()
483
- url = f"{repository_url.rstrip('/')}/simple/{package}/"
484
485
 
485
- def check_available() -> bool | None:
486
- try:
487
- req = urllib.request.Request(url)
488
- if token:
489
- credentials = base64.b64encode(
490
- f"{username}:{token}".encode()
491
- ).decode()
492
- req.add_header("Authorization", f"Basic {credentials}")
493
- with urllib.request.urlopen(req, timeout=10) as resp:
494
- if resp.status == 200 and version in resp.read().decode():
495
- return True
496
- except urllib.error.HTTPError as e:
497
- if e.code != 404:
498
- raise
499
- except Exception:
500
- pass
501
- return None
486
+ gateway = PypiRegistryGateway(
487
+ base_url=repository_url,
488
+ username=username,
489
+ token=token,
490
+ io=self.io,
491
+ timeout=10,
492
+ )
502
493
 
503
494
  max_attempts = 40
504
495
  delay_seconds = 30
@@ -511,7 +502,7 @@ class PythonPackageWorkdir(PythonWorkdir):
511
502
  )
512
503
 
513
504
  PollingCallbackManager(
514
- callback=check_available,
505
+ callback=lambda: True if gateway.has_version(package, version) else None,
515
506
  max_attempts=max_attempts,
516
507
  delay_seconds_callback=lambda _attempt: delay_seconds,
517
508
  on_retry_callback=on_retry,
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING
4
4
 
5
+ from wexample_helpers.decorator.base_class import base_class
5
6
  from wexample_wex_addon_app.workdir.framework_packages_suite_workdir import (
6
7
  FrameworkPackageSuiteWorkdir,
7
8
  )
@@ -18,6 +19,7 @@ if TYPE_CHECKING:
18
19
  )
19
20
 
20
21
 
22
+ @base_class
21
23
  class PythonPackagesSuiteWorkdir(FrameworkPackageSuiteWorkdir):
22
24
  def build_dependencies_stack(
23
25
  self,
@@ -15,6 +15,10 @@ from wexample_filestate_python.const.python_file import (
15
15
  PYTHON_FILE_EXTENSION,
16
16
  PYTHON_FILE_PYTEST_COVERAGE_JSON,
17
17
  )
18
+ from wexample_helpers.decorator.base_class import base_class
19
+ from wexample_wex_addon_ai.workdir.mixin.with_ai_workdir_mixin import (
20
+ WithAiWorkdirMixin,
21
+ )
18
22
  from wexample_wex_addon_app.workdir.code_base_workdir import (
19
23
  CodeBaseWorkdir,
20
24
  )
@@ -47,7 +51,10 @@ if TYPE_CHECKING:
47
51
  )
48
52
 
49
53
 
50
- class PythonWorkdir(WithProfilingPythonWorkdirMixin, CodeBaseWorkdir):
54
+ @base_class
55
+ class PythonWorkdir(
56
+ WithAiWorkdirMixin, WithProfilingPythonWorkdirMixin, CodeBaseWorkdir
57
+ ):
51
58
  def app_install(self, env: str | None = None, force: bool = False) -> Path:
52
59
  from wexample_wex_addon_app.helpers.python import (
53
60
  python_ensure_pip_or_fail,
@@ -169,6 +176,8 @@ class PythonWorkdir(WithProfilingPythonWorkdirMixin, CodeBaseWorkdir):
169
176
 
170
177
  raw_value = super().prepare_value(raw_value=raw_value)
171
178
 
179
+ self.append_agents(config=raw_value)
180
+
172
181
  children = raw_value["children"]
173
182
 
174
183
  # Add rules to .gitignore
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wexample-wex-addon-dev-python
3
- Version: 8.8.2
3
+ Version: 8.9.0
4
4
  Summary: Python dev addon for wex
5
5
  Author-Email: weeger <contact@wexample.com>
6
6
  License: MIT
@@ -15,8 +15,10 @@ Requires-Dist: griffe>=2.0.2
15
15
  Requires-Dist: networkx
16
16
  Requires-Dist: pylint
17
17
  Requires-Dist: pyright
18
+ Requires-Dist: wexample-api>=6.2.0
18
19
  Requires-Dist: wexample-filestate-python>=6.8.0
19
- Requires-Dist: wexample-wex-addon-app>=22.0.0
20
+ Requires-Dist: wexample-wex-addon-ai>=8.0.0
21
+ Requires-Dist: wexample-wex-addon-app>=23.0.0
20
22
  Provides-Extra: dev
21
23
  Requires-Dist: pytest; extra == "dev"
22
24
  Requires-Dist: pytest-cov; extra == "dev"
@@ -24,7 +26,7 @@ Description-Content-Type: text/markdown
24
26
 
25
27
  # wex_addon_dev_python
26
28
 
27
- Version: 8.8.2
29
+ Version: 8.9.0
28
30
 
29
31
  Python dev addon for wex
30
32
 
@@ -110,8 +112,10 @@ Visit the [Wexample Suite documentation](https://docs.wexample.com) for the comp
110
112
  - networkx:
111
113
  - pylint:
112
114
  - pyright:
115
+ - wexample-api: >=6.2.0
113
116
  - wexample-filestate-python: >=6.8.0
114
- - wexample-wex-addon-app: >=22.0.0
117
+ - wexample-wex-addon-ai: >=8.0.0
118
+ - wexample-wex-addon-app: >=23.0.0
115
119
 
116
120
  ## Versioning & Compatibility Policy
117
121
 
@@ -1,24 +1,26 @@
1
- wexample_wex_addon_dev_python-8.8.2.dist-info/METADATA,sha256=FEBMNjncwHaWnzmM2A_gbL8NrQmkHWcM-qPXfIEpdNk,17250
2
- wexample_wex_addon_dev_python-8.8.2.dist-info/WHEEL,sha256=Z36eTX6lG3PITRleSd5hAZHCcz52yg3c0JQVxKBbLW0,90
3
- wexample_wex_addon_dev_python-8.8.2.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
1
+ wexample_wex_addon_dev_python-8.9.0.dist-info/METADATA,sha256=owRuD7f3Kmh0Z6P08_hO37YW5V7LBP62flcdUR7qNhc,17386
2
+ wexample_wex_addon_dev_python-8.9.0.dist-info/WHEEL,sha256=VP-D4TPS230sME9Z3vb3INXvo1yt0924YRm5AOsk_dE,90
3
+ wexample_wex_addon_dev_python-8.9.0.dist-info/entry_points.txt,sha256=6OYgBcLyFCUgeqLgnvMyOJxPCWzgy7se4rLPKtNonMs,34
4
4
  wexample_wex_addon_dev_python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  wexample_wex_addon_dev_python/__pycache__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  wexample_wex_addon_dev_python/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  wexample_wex_addon_dev_python/commands/code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- wexample_wex_addon_dev_python/commands/code/check.py,sha256=JKBYO3mKvlNbCjlipRqaxOa5z-Z-KSOhv4y6ADMiSQQ,3374
8
+ wexample_wex_addon_dev_python/commands/code/check.py,sha256=qaxFt8dcbBl4_vtx82CKaT_tzcDl4e8zMxF29cePXrY,3695
9
9
  wexample_wex_addon_dev_python/commands/code/check/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  wexample_wex_addon_dev_python/commands/code/check/mypy.py,sha256=hZ1taOAofaFgqhtbHLXA14-4cFkVcw6QUi9PmpbEKuk,1401
11
11
  wexample_wex_addon_dev_python/commands/code/check/pylint.py,sha256=tmtpKWjn3h4auNybYVtiloHjHGlS0BiYjUo9GZTogpE,3323
12
12
  wexample_wex_addon_dev_python/commands/code/check/pyright.py,sha256=jCKZxQ5Ln2Vh1QlhKqz3i0djnQwWbNHzDcttu41jhsI,3619
13
- wexample_wex_addon_dev_python/commands/code/format.py,sha256=ufQzhrW05GH1OuBWxbsJKpvEQtu3yeJ0d9QsTqrlQcU,2515
13
+ wexample_wex_addon_dev_python/commands/code/format.py,sha256=NrrqZ5LhdDj41pB0xyxhK85-oGT0KN3FjpBaRdCr3c0,2841
14
14
  wexample_wex_addon_dev_python/commands/code/format/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
15
15
  wexample_wex_addon_dev_python/commands/code/format/black.py,sha256=wo3BEODFD6BUrmnfheESMyLppLPwtvcgkOVfvHWdAZs,1462
16
16
  wexample_wex_addon_dev_python/commands/code/format/isort.py,sha256=pRYYPZWFza6e_HgKYpYplzV5hwJvbM3NNJ_-A3x1yV8,1540
17
17
  wexample_wex_addon_dev_python/commands/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  wexample_wex_addon_dev_python/commands/examples/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  wexample_wex_addon_dev_python/commands/examples/utils/some_example_type.py,sha256=zusGlLOLkt2EpPFk38FIRA6d_5Q92Y7-TLj8ofHhQk0,121
20
- wexample_wex_addon_dev_python/commands/examples/validate.py,sha256=aMRqL3R7U-OLsdQUjg5WA9nrx7_Jf9V0NRf2inJy70w,742
20
+ wexample_wex_addon_dev_python/commands/examples/validate.py,sha256=ijU0bVifkZGPilirJZDdDJsOuRUwhRcA7DqGzw2Zcwg,951
21
21
  wexample_wex_addon_dev_python/commands/release/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ wexample_wex_addon_dev_python/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
+ wexample_wex_addon_dev_python/common/pypi_registry_gateway.py,sha256=esFDYTL4k0KfQVnWEuyrS5mdM362n8bgWkt-uB5rfQs,1934
22
24
  wexample_wex_addon_dev_python/config_value/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
25
  wexample_wex_addon_dev_python/config_value/__pycache__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
26
  wexample_wex_addon_dev_python/config_value/python_package_readme_config_value.py,sha256=9L67C6oGwebd8tMSqECmSSpah7nsDTkjEQMNMCWAyp0,1722
@@ -26,6 +28,7 @@ wexample_wex_addon_dev_python/const/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
26
28
  wexample_wex_addon_dev_python/const/__pycache__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
29
  wexample_wex_addon_dev_python/const/package.py,sha256=oRCPhaazJp5TujxF-35rrIYA4FJsqMqCns8lOFKOLeA,451
28
30
  wexample_wex_addon_dev_python/const/python.py,sha256=jxdPt5CnD0dcp4SmobEc_c7XcCkPFfX_lk3SVHsiVpM,203
31
+ wexample_wex_addon_dev_python/const/tags.py,sha256=isvxhaBbendC6k_rluiJkQ2-yO7OwCEw9wse4wgEOIo,338
29
32
  wexample_wex_addon_dev_python/file/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
33
  wexample_wex_addon_dev_python/file/__pycache__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
34
  wexample_wex_addon_dev_python/file/python_app_iml_file.py,sha256=l6YHEILxSGFjOvYWY20zIyAODjOIfuyHsuCfSMw0jVE,1201
@@ -46,8 +49,8 @@ wexample_wex_addon_dev_python/services/python/__init__.py,sha256=47DEQpj8HBSa-_T
46
49
  wexample_wex_addon_dev_python/services/python/app_service.py,sha256=OeM7f-IHm7lfS2graCBVAjjqxK_lEiQRmfl9mSEqoP0,2272
47
50
  wexample_wex_addon_dev_python/services/python/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
51
  wexample_wex_addon_dev_python/services/python/commands/service/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- wexample_wex_addon_dev_python/services/python/commands/service/install.py,sha256=RQL2O9_YzNMxgdT4BEa3DuCZzuCIr0Tmd0nrcEQOb_c,1580
50
- wexample_wex_addon_dev_python/services/python/commands/service/setup.py,sha256=mKrBeHzxYayDSu9ySmbLy9W4U7DY8m0OQ6Or0JeIsps,1941
52
+ wexample_wex_addon_dev_python/services/python/commands/service/install.py,sha256=a50XFDUJGX2pCUJ_M4qruDUH7bHUxl5k9FIBlhky1eM,1896
53
+ wexample_wex_addon_dev_python/services/python/commands/service/setup.py,sha256=JAt8N39_BQu8ZpYHHqNLZK3NFYFKzXvqjlPLTHOM3Y4,2293
51
54
  wexample_wex_addon_dev_python/services/python/docker/.wex.yml,sha256=JdIF6nGkFcfi76yZYGlXxeWfOK4eAUSV_gAn6i3hk2w,32
52
55
  wexample_wex_addon_dev_python/services/python/docker/docker-compose.yml,sha256=zr9jm99KXyhOe1RZJ1nxgwqbi62xTXClvyhtA9jAAFc,463
53
56
  wexample_wex_addon_dev_python/services/python/samples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -61,8 +64,8 @@ wexample_wex_addon_dev_python/services/python/service.yml,sha256=28gvNQIzZ0T0PBw
61
64
  wexample_wex_addon_dev_python/workdir/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
65
  wexample_wex_addon_dev_python/workdir/__pycache__/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
66
  wexample_wex_addon_dev_python/workdir/mixin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
- wexample_wex_addon_dev_python/workdir/mixin/with_profiling_python_workdir_mixin.py,sha256=rWf_AMq4YM_vvKYZiXyhFeAz2xg0KMt_u-1FJACtvjc,3042
65
- wexample_wex_addon_dev_python/workdir/python_package_workdir.py,sha256=PUSDChE-_lfDRECS9ABAxC_FJ_km5m4YrKH0uXUIDrs,19100
66
- wexample_wex_addon_dev_python/workdir/python_packages_suite_workdir.py,sha256=ICHHewLpsXiheYzGDEahphBryH98ZVezWzSAy6A5w5I,2874
67
- wexample_wex_addon_dev_python/workdir/python_workdir.py,sha256=_HeBe2iSSVjpf5JhGIvEFUTV_3LCVSEpF6ZS4oobBn8,20676
68
- wexample_wex_addon_dev_python-8.8.2.dist-info/RECORD,,
67
+ wexample_wex_addon_dev_python/workdir/mixin/with_profiling_python_workdir_mixin.py,sha256=yPj84DyNJ_cFSawcOUDMBzKBlEohy2NQdt3FM5Nmw4o,3115
68
+ wexample_wex_addon_dev_python/workdir/python_package_workdir.py,sha256=3m3ySOt25eBgqIkuE4AwaA_9W0mfRco13AgN-phPuSM,18656
69
+ wexample_wex_addon_dev_python/workdir/python_packages_suite_workdir.py,sha256=_meFBFBxUyxjgeGJHx06o7cynEoUHifVn5eJbwqK3mw,2947
70
+ wexample_wex_addon_dev_python/workdir/python_workdir.py,sha256=8ZspxNsBttXG0ZD6LH6kQ9Jb4hX_k1p4DlAhcdeQ0hM,20919
71
+ wexample_wex_addon_dev_python-8.9.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: pdm-backend (2.4.8)
2
+ Generator: pdm-backend (2.4.9)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any