liblaf-cherries 0.0.8__py3-none-any.whl → 0.0.10__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.
Files changed (49) hide show
  1. liblaf/cherries/__init__.pyi +76 -23
  2. liblaf/cherries/_run.py +31 -0
  3. liblaf/cherries/_version.py +2 -2
  4. liblaf/cherries/info/__init__.pyi +11 -0
  5. liblaf/cherries/info/_exp_name.py +19 -0
  6. liblaf/cherries/info/_git.py +49 -0
  7. liblaf/cherries/pathutils/__init__.pyi +20 -0
  8. liblaf/cherries/pathutils/_convert.py +40 -0
  9. liblaf/cherries/pathutils/_path.py +68 -0
  10. liblaf/cherries/pathutils/_special.py +50 -0
  11. liblaf/cherries/plugin/__init__.pyi +72 -6
  12. liblaf/cherries/plugin/_abc.py +112 -21
  13. liblaf/cherries/plugin/_dvc.py +47 -0
  14. liblaf/cherries/plugin/_git.py +41 -18
  15. liblaf/cherries/plugin/_logging.py +21 -26
  16. liblaf/cherries/plugin/_mlflow.py +73 -0
  17. liblaf/cherries/plugin/_run.py +104 -0
  18. liblaf/cherries/presets/__init__.pyi +3 -0
  19. liblaf/cherries/presets/_default.py +32 -0
  20. liblaf/cherries/py.typed +0 -0
  21. liblaf/cherries/typed.py +3 -0
  22. liblaf/cherries/utils/__init__.pyi +3 -0
  23. liblaf/cherries/utils/_functools.py +6 -0
  24. liblaf_cherries-0.0.10.dist-info/METADATA +46 -0
  25. liblaf_cherries-0.0.10.dist-info/RECORD +35 -0
  26. liblaf/cherries/_env.py +0 -4
  27. liblaf/cherries/_experiment.py +0 -111
  28. liblaf/cherries/_main.py +0 -38
  29. liblaf/cherries/_start.py +0 -26
  30. liblaf/cherries/git/__init__.pyi +0 -18
  31. liblaf/cherries/git/_commit.py +0 -17
  32. liblaf/cherries/git/_entrypoint.py +0 -12
  33. liblaf/cherries/git/_grapes.py +0 -3
  34. liblaf/cherries/git/github/__init__.pyi +0 -4
  35. liblaf/cherries/git/github/_link.py +0 -25
  36. liblaf/cherries/git/github/_repo.py +0 -23
  37. liblaf/cherries/integration/__init__.pyi +0 -5
  38. liblaf/cherries/integration/_backend.py +0 -53
  39. liblaf/cherries/integration/_factory.py +0 -13
  40. liblaf/cherries/integration/_neptune.py +0 -66
  41. liblaf/cherries/plugin/_default.py +0 -9
  42. liblaf/cherries/plugin/_restic.py +0 -60
  43. liblaf_cherries-0.0.8.dist-info/METADATA +0 -153
  44. liblaf_cherries-0.0.8.dist-info/RECORD +0 -36
  45. /liblaf/cherries/{git → info}/__init__.py +0 -0
  46. /liblaf/cherries/{git/github → pathutils}/__init__.py +0 -0
  47. /liblaf/cherries/{integration → presets}/__init__.py +0 -0
  48. {liblaf_cherries-0.0.8.dist-info → liblaf_cherries-0.0.10.dist-info}/WHEEL +0 -0
  49. {liblaf_cherries-0.0.8.dist-info → liblaf_cherries-0.0.10.dist-info}/licenses/LICENSE +0 -0
@@ -1,3 +0,0 @@
1
- from liblaf.grapes.git import GitInfo, info, root, root_safe
2
-
3
- __all__ = ["GitInfo", "info", "root", "root_safe"]
@@ -1,4 +0,0 @@
1
- from ._link import permalink
2
- from ._repo import user_repo
3
-
4
- __all__ = ["permalink", "user_repo"]
@@ -1,25 +0,0 @@
1
- import os
2
- from pathlib import Path
3
-
4
- import git
5
-
6
- from . import user_repo
7
-
8
-
9
- def permalink(
10
- repo: git.Repo | None = None, filepath: str | os.PathLike[str] | None = None
11
- ) -> str | None:
12
- if repo is None:
13
- repo = git.Repo(search_parent_directories=True)
14
- user: str | None
15
- repo_str: str | None
16
- user, repo_str = user_repo(repo)
17
- if not (user and repo):
18
- return None
19
- sha: str = repo.head.commit.hexsha
20
- link: str = f"https://github.com/{user}/{repo_str}/tree/{sha}"
21
- if filepath:
22
- filepath = Path(filepath).absolute()
23
- if not filepath.is_relative_to(repo.working_dir):
24
- return None
25
- link += f"/{Path(filepath).as_posix()}"
@@ -1,23 +0,0 @@
1
- import re
2
-
3
- import git
4
-
5
- GITHUB_URL_PATTERNS: list[str] = [
6
- r"https://github\.com/(?P<user>[^/]+)/(?P<repo>[^/]+)(?:\.git)?"
7
- ]
8
-
9
-
10
- def user_repo(
11
- repo: git.Repo | None = None,
12
- ) -> tuple[str, str] | tuple[None, None]:
13
- if repo is None:
14
- repo = git.Repo(search_parent_directories=True)
15
- remote: git.Remote = repo.remote()
16
- for pattern in GITHUB_URL_PATTERNS:
17
- match: re.Match[str] | None = re.match(pattern, remote.url)
18
- if not match:
19
- continue
20
- user: str = match.group("user")
21
- repo_name: str = match.group("repo")
22
- return user, repo_name
23
- return None, None
@@ -1,5 +0,0 @@
1
- from ._backend import Backend
2
- from ._factory import backend_factory
3
- from ._neptune import BackendNeptune
4
-
5
- __all__ = ["Backend", "BackendNeptune", "backend_factory"]
@@ -1,53 +0,0 @@
1
- import datetime
2
- import functools
3
- from pathlib import Path
4
- from typing import Any
5
-
6
- import pydantic_settings as ps
7
-
8
- from liblaf import cherries
9
-
10
-
11
- class Backend(ps.BaseSettings):
12
- model_config = ps.SettingsConfigDict(
13
- frozen=True, env_prefix=cherries.ENV_PREFIX + "DUMMY_"
14
- )
15
- enabled: bool = True
16
-
17
- @property
18
- def backend(self) -> str:
19
- return "dummy"
20
-
21
- @functools.cached_property
22
- def entrypoint(self) -> Path:
23
- return cherries.entrypoint()
24
-
25
- @property
26
- def id(self) -> str:
27
- raise NotImplementedError
28
-
29
- @property
30
- def name(self) -> str:
31
- raise NotImplementedError
32
-
33
- @functools.cached_property
34
- def start_time(self) -> datetime.datetime:
35
- return datetime.datetime.now().astimezone()
36
-
37
- @property
38
- def url(self) -> str:
39
- raise NotImplementedError
40
-
41
- def start(self) -> None: ...
42
- def end(self) -> None: ...
43
- def log_metric(
44
- self,
45
- key: str,
46
- value: float,
47
- *,
48
- step: float | None = None,
49
- timestamp: float | None = None,
50
- **kwargs,
51
- ) -> None: ...
52
- def log_other(self, key: str, value: Any, **kwargs) -> None: ...
53
- def upload_file(self, key: str, path: Path, **kwargs) -> None: ...
@@ -1,13 +0,0 @@
1
- from liblaf import cherries
2
-
3
-
4
- def backend_factory(backend: str | None = None) -> cherries.Backend:
5
- backend = backend or cherries.env.str("BACKEND", "dummy")
6
- match backend:
7
- case "neptune":
8
- return cherries.BackendNeptune()
9
- case "dummy":
10
- return cherries.Backend()
11
- case _:
12
- msg: str = f"Unknown backend: {backend}"
13
- raise ValueError(msg)
@@ -1,66 +0,0 @@
1
- import os
2
- from pathlib import Path
3
- from typing import Any
4
-
5
- import neptune
6
- import neptune.common.exceptions
7
- import neptune.utils
8
- import pydantic
9
- import pydantic_settings as ps
10
-
11
- from liblaf import cherries
12
-
13
-
14
- class BackendNeptune(cherries.Backend):
15
- model_config = ps.SettingsConfigDict(frozen=True, env_prefix="NEPTUNE_")
16
- monitoring_namespace: str | None = None
17
- _backend: neptune.Run = pydantic.PrivateAttr()
18
-
19
- @property
20
- def backend(self) -> str:
21
- return "neptune"
22
-
23
- @property
24
- def id(self) -> str:
25
- return self._backend["sys/id"].fetch()
26
-
27
- @property
28
- def name(self) -> str:
29
- return self._backend["sys/name"].fetch()
30
-
31
- @property
32
- def url(self) -> str:
33
- return self._backend.get_url()
34
-
35
- def start(self) -> None:
36
- neptune.common.exceptions.STYLES.update(neptune.common.exceptions.EMPTY_STYLES)
37
- self._backend = neptune.init_run(monitoring_namespace=self.monitoring_namespace)
38
-
39
- def end(self) -> None:
40
- self._backend.stop()
41
-
42
- def log_metric(
43
- self,
44
- key: str,
45
- value: float,
46
- *,
47
- step: float | None = None,
48
- timestamp: float | None = None,
49
- **kwargs,
50
- ) -> None:
51
- self._backend[key].append(value, step=step, timestamp=timestamp, **kwargs)
52
-
53
- def log_other(self, key: str, value: Any, **kwargs) -> None:
54
- value = stringify_unsupported(value)
55
- self._backend[key].assign(value, **kwargs)
56
-
57
- def upload_file(self, key: str, path: Path, **kwargs) -> None:
58
- return self._backend[key].upload(str(path), **kwargs)
59
-
60
-
61
- def stringify_unsupported(value: Any) -> Any:
62
- if isinstance(value, pydantic.BaseModel):
63
- return value.model_dump()
64
- if isinstance(value, os.PathLike):
65
- return str(value)
66
- return value
@@ -1,9 +0,0 @@
1
- from liblaf import cherries
2
-
3
-
4
- def default_plugins() -> list[cherries.Plugin]:
5
- return [
6
- cherries.plugin.PluginLogging(),
7
- cherries.plugin.PluginGit(),
8
- cherries.plugin.PluginRestic(),
9
- ]
@@ -1,60 +0,0 @@
1
- import contextlib
2
- import json
3
- import os
4
- import subprocess as sp
5
- from pathlib import Path
6
- from typing import Any
7
-
8
- import pydantic
9
- import pydantic_settings as ps
10
- from loguru import logger
11
-
12
- from liblaf import cherries
13
-
14
-
15
- def default_config() -> Path:
16
- git_root: Path = cherries.git.root()
17
- for path in [
18
- git_root / ".config" / "resticprofile.toml",
19
- git_root / "resticprofile.toml",
20
- ]:
21
- if path.exists():
22
- return path
23
- return git_root / ".config" / "resticprofile.toml"
24
-
25
-
26
- class PluginRestic(cherries.Plugin):
27
- model_config = ps.SettingsConfigDict(env_prefix=cherries.ENV_PREFIX + "RESTIC_")
28
- config: Path = pydantic.Field(default_factory=default_config)
29
- name: str | None = None
30
- dry_run: bool = False
31
-
32
- def _pre_end(self, run: cherries.Experiment) -> None:
33
- if not self.config.exists():
34
- logger.warning("configuration file '{}' was not found", self.config)
35
- return
36
- args: list[str | os.PathLike[str]] = [
37
- "resticprofile",
38
- "--config",
39
- self.config,
40
- "backup",
41
- "--json",
42
- ]
43
- if self.name:
44
- args += ["--name", self.name]
45
- if self.dry_run:
46
- args.append("--dry-run")
47
- args += ["--time", run.start_time.strftime("%Y-%m-%d %H:%M:%S")]
48
- proc: sp.Popen[str] = sp.Popen(
49
- args, stdout=sp.PIPE, cwd=cherries.git.root(), text=True
50
- )
51
- assert proc.stdout is not None
52
- for line_ in proc.stdout:
53
- line: str = line_.rstrip()
54
- logger.debug("{}", line)
55
- with contextlib.suppress(json.JSONDecodeError):
56
- log: dict[str, Any] = json.loads(line)
57
- if log["message_type"] == "summary":
58
- run.log_other("cherries/restic", log)
59
- returncode: int = proc.wait()
60
- run.log_other("cherries/restic/returncode", returncode)
@@ -1,153 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: liblaf-cherries
3
- Version: 0.0.8
4
- Summary: Add your description here
5
- Project-URL: Changelog, https://github.com/liblaf/cherries/blob/main/CHANGELOG.md
6
- Project-URL: Homepage, https://github.com/liblaf/cherries
7
- Project-URL: Issue Tracker, https://github.com/liblaf/cherries/issues
8
- Project-URL: Release Notes, https://github.com/liblaf/cherries/releases
9
- Project-URL: Source Code, https://github.com/liblaf/cherries
10
- Author-email: liblaf <30631553+liblaf@users.noreply.github.com>
11
- License-Expression: MIT
12
- License-File: LICENSE
13
- Classifier: Development Status :: 4 - Beta
14
- Classifier: Intended Audience :: Developers
15
- Classifier: Intended Audience :: Science/Research
16
- Classifier: License :: OSI Approved
17
- Classifier: License :: OSI Approved :: MIT License
18
- Classifier: Operating System :: OS Independent
19
- Classifier: Programming Language :: Python
20
- Classifier: Programming Language :: Python :: 3
21
- Classifier: Programming Language :: Python :: 3.12
22
- Classifier: Programming Language :: Python :: 3.13
23
- Classifier: Topic :: Software Development
24
- Classifier: Topic :: Software Development :: Bug Tracking
25
- Classifier: Topic :: Software Development :: Debuggers
26
- Classifier: Topic :: Software Development :: Libraries
27
- Classifier: Topic :: Software Development :: Libraries :: Python Modules
28
- Classifier: Topic :: System
29
- Classifier: Topic :: System :: Logging
30
- Classifier: Topic :: Utilities
31
- Classifier: Typing :: Typed
32
- Requires-Python: >=3.12
33
- Requires-Dist: comet-ml<4,>=3.49.5
34
- Requires-Dist: gitpython<4,>=3.1.44
35
- Requires-Dist: giturlparse<0.13,>=0.12.0
36
- Requires-Dist: lazy-loader<0.5,>=0.4
37
- Requires-Dist: liblaf-grapes<0.2,>=0.1.10
38
- Requires-Dist: loguru<0.8,>=0.7.3
39
- Requires-Dist: neptune<2,>=1.13.0
40
- Requires-Dist: pydantic-settings<3,>=2.8.1
41
- Requires-Dist: pydantic<3,>=2.10.6
42
- Description-Content-Type: text/markdown
43
-
44
- <!-- -*- mode: markdown -*- -->
45
-
46
- <div align="center"><a name="readme-top"></a>
47
-
48
- <img height="160" src="https://api.iconify.design/logos/python.svg" />
49
-
50
- # Cherries
51
-
52
- TODO: DESCRIPTION
53
-
54
- [**Explore the docs »**](https://liblaf.github.io/cherries/)
55
-
56
- [![PyPI - Downloads](https://img.shields.io/pypi/dm/liblaf-cherries?logo=PyPI&label=Downloads)](https://pypi.org/project/liblaf-cherries)
57
- [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/liblaf-cherries?logo=Python&label=Python)](https://pypi.org/project/liblaf-cherries)
58
- [![PyPI - Version](https://img.shields.io/pypi/v/liblaf-cherries?logo=PyPI&label=PyPI)](https://pypi.org/project/liblaf-cherries)
59
- [![Codecov](https://img.shields.io/codecov/c/github/liblaf/cherries?logo=Codecov&label=Coverage)](https://codecov.io/gh/liblaf/cherries)
60
- [![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/liblaf/cherries/test.yaml?logo=GitHub%20Actions&label=Test)](https://github.com/liblaf/cherries/actions/workflows/test.yaml)
61
- <br />
62
- [![GitHub Contributors](https://img.shields.io/github/contributors/liblaf/cherries?logo=GitHub&label=Contributors)](https://github.com/liblaf/cherries/graphs/contributors)
63
- [![GitHub Forks](https://img.shields.io/github/forks/liblaf/cherries)](https://github.com/liblaf/cherries/forks)
64
- [![GitHub Repo Stars](https://img.shields.io/github/stars/liblaf/cherries)](https://github.com/liblaf/cherries/stargazers)
65
- [![GitHub Issues](https://img.shields.io/github/issues/liblaf/cherries?logo=GitHub&label=Issues)](https://github.com/liblaf/cherries/issues)
66
- [![GitHub License](https://img.shields.io/github/license/liblaf/cherries?label=License)](https://github.com/liblaf/cherries/blob/main/LICENSE)
67
-
68
- [Changelog](https://github.com/liblaf/cherries/blob/main/CHANGELOG.md) · [Report Bug](https://github.com/liblaf/cherries/issues) · [Request Feature](https://github.com/liblaf/cherries/issues)
69
-
70
- ![](https://raw.githubusercontent.com/andreasbm/readme/master/assets/lines/rainbow.png)
71
-
72
- </div>
73
-
74
- ## ✨ Features
75
-
76
- - [x] ✨ **TODO:** FEATURES;
77
-
78
- <div align="right">
79
-
80
- [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
81
-
82
- </div>
83
-
84
- ## 📦 Installation
85
-
86
- To install `liblaf-cherries`, run the following command:
87
-
88
- ```bash
89
- $ uv add liblaf-cherries
90
- ```
91
-
92
- <div align="right">
93
-
94
- [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
95
-
96
- </div>
97
-
98
- ## ⌨️ Local Development
99
-
100
- You can use Github Codespaces for online development:
101
-
102
- [![](https://github.com/codespaces/badge.svg)](https://codespaces.new/liblaf/cherries)
103
-
104
- Or clone it for local development:
105
-
106
- ```bash
107
- $ gh repo clone liblaf/cherries
108
- $ cd cherries
109
- $ just test
110
- ```
111
-
112
- <div align="right">
113
-
114
- [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
115
-
116
- </div>
117
-
118
- ## 🤝 Contributing
119
-
120
- Contributions of all types are more than welcome, if you are interested in contributing code, feel free to check out our GitHub [Issues](https://github.com/liblaf/cherries/issues) to get stuck in to show us what you're made of.
121
-
122
- [![](https://img.shields.io/badge/%F0%9F%A4%AF%20PR%20WELCOME-%E2%86%92-ffcb47?labelColor=black&style=for-the-badge)](https://github.com/liblaf/cherries/pulls)
123
-
124
- [![](https://contrib.rocks/image?repo=liblaf%2Fcherries)](https://github.com/liblaf/cherries/graphs/contributors)
125
-
126
- <div align="right">
127
-
128
- [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
129
-
130
- </div>
131
-
132
- ## 🔗 Links
133
-
134
- ### More Projects
135
-
136
- - **[🍇 cherries](https://github.com/liblaf/cherries)** - Powerful Python utilities for logging, timing, and more, making development smoother!
137
-
138
- ### Credits
139
-
140
- - **Python** - <https://www.python.org/>
141
-
142
- <div align="right">
143
-
144
- [![](https://img.shields.io/badge/-BACK_TO_TOP-black?style=flat-square)](#readme-top)
145
-
146
- </div>
147
-
148
- ---
149
-
150
- #### 📝 License
151
-
152
- Copyright © 2025 [liblaf](https://github.com/liblaf). <br />
153
- This project is [MIT](https://github.com/liblaf/cherries/blob/main/LICENSE) licensed.
@@ -1,36 +0,0 @@
1
- liblaf/cherries/__init__.py,sha256=OHb6Xou2v6u42swTgjRfzej4CIlRg4OmgOIQXUiRjKA,97
2
- liblaf/cherries/__init__.pyi,sha256=u-eKDd-6imkzIue3LmuJJmpjLDV1yGfV0XP9aN0VdWQ,827
3
- liblaf/cherries/_config.py,sha256=rm-Y6roi8hBvQYdH-VQh_ovWCyVsX_7R0x1jokBPCDM,741
4
- liblaf/cherries/_env.py,sha256=RK9NMHIok-AkCLMqW44cXLl0d_daLjpEcjhreSP1vm0,92
5
- liblaf/cherries/_experiment.py,sha256=E6r5DyojfY75lKsIDxYpyaCgXFXMJTaUIglIk9Xs-Sw,3181
6
- liblaf/cherries/_main.py,sha256=R8vWc9e94MViqCzMiG257--QtSoOU50lmR59oIRc6nw,1237
7
- liblaf/cherries/_start.py,sha256=iGAhDm8sF_JCaWPWdMIFL0d5nODFU8IcBPdNihhiSp4,685
8
- liblaf/cherries/_version.py,sha256=SbamvXnLxfCU9pL5KMng4JCEwFYPcZcxEC7yaD9HbZ4,511
9
- liblaf/cherries/_version.pyi,sha256=Pnv4Bxw13LHeuVkPLPsTtnp4N4jOGcAfFJw05uMMgBY,108
10
- liblaf/cherries/git/__init__.py,sha256=OHb6Xou2v6u42swTgjRfzej4CIlRg4OmgOIQXUiRjKA,97
11
- liblaf/cherries/git/__init__.pyi,sha256=kHd7B4_atL4929so2AnrBcCJNgGg-i-HEi4PeGh3csk,383
12
- liblaf/cherries/git/_commit.py,sha256=jnAtCKljNnzhXK90cj3adAYkPvcnLnOrHWA8YWhtZF4,482
13
- liblaf/cherries/git/_entrypoint.py,sha256=My_TmLqpGX4NJV4qjQvmHtnwhxX_B2ilfuYvpj2ftaM,262
14
- liblaf/cherries/git/_grapes.py,sha256=f9RRn2ci-fC5FqkbPJoIjNcJpUMwo2qBeu7CMre_t1o,113
15
- liblaf/cherries/git/github/__init__.py,sha256=OHb6Xou2v6u42swTgjRfzej4CIlRg4OmgOIQXUiRjKA,97
16
- liblaf/cherries/git/github/__init__.pyi,sha256=jspOamBde7EtGOqsIzWg75jFToVHRhG4hfiEw1MDz80,96
17
- liblaf/cherries/git/github/_link.py,sha256=f_AcdKMhukUZ2fgBtC0usBrwnpAHaLYo9EhkZYesZuQ,693
18
- liblaf/cherries/git/github/_repo.py,sha256=I3vjgonI_SPrytf68qzLAej880Zn7cPryaK4PPoVZpU,627
19
- liblaf/cherries/integration/__init__.py,sha256=OHb6Xou2v6u42swTgjRfzej4CIlRg4OmgOIQXUiRjKA,97
20
- liblaf/cherries/integration/__init__.pyi,sha256=n2QqtCl9oTVJatyt8LhiTJVnr_uoyYgfrN8virEqezQ,165
21
- liblaf/cherries/integration/_backend.py,sha256=iwpwTB3NgAI9oUCdWYMmH8qI8xYmUsZmES0pyw9_6D0,1241
22
- liblaf/cherries/integration/_factory.py,sha256=KJPse2efpOLv6s4sPQAPnzh9vwYcIQVsOg1ucxzTmIo,412
23
- liblaf/cherries/integration/_neptune.py,sha256=MhvPZUblAae6vmGRjgDELl_2wcOhrb90nCIsg8xpRMs,1789
24
- liblaf/cherries/plugin/__init__.py,sha256=OHb6Xou2v6u42swTgjRfzej4CIlRg4OmgOIQXUiRjKA,97
25
- liblaf/cherries/plugin/__init__.pyi,sha256=3wmkKoe27SI3q5zbyejf3KmaBRUhAu-OEefJAxxbECs,248
26
- liblaf/cherries/plugin/_abc.py,sha256=kMDFzDAEDifpxWbnQhp4M4sr24-D55x-B6MPIZW_1jA,848
27
- liblaf/cherries/plugin/_default.py,sha256=H7_vym_uxxba41xR2ERBeBt0kBX4s4tjzjifyKjXxS0,215
28
- liblaf/cherries/plugin/_git.py,sha256=Gyv8Uc2AnPpZul23oGm6Dba2YOaiFx6WAytrQ8ylSsk,866
29
- liblaf/cherries/plugin/_logging.py,sha256=yTp2IgwmTgWs6fkiFp6GyKz8IOTJZrHn_61VRZ_3eEY,1004
30
- liblaf/cherries/plugin/_restic.py,sha256=4ArmgD42ZUotkVdCwdMvlmJF0Z8PuKe8EukzRoWyQK8,1926
31
- liblaf/cherries/utils/__init__.py,sha256=OHb6Xou2v6u42swTgjRfzej4CIlRg4OmgOIQXUiRjKA,97
32
- liblaf/cherries/utils/__init__.pyi,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- liblaf_cherries-0.0.8.dist-info/METADATA,sha256=jsqjgGh9hySIGVpLhQ-HvrjHhsOAA79iPlfk-8ux4kQ,5789
34
- liblaf_cherries-0.0.8.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
35
- liblaf_cherries-0.0.8.dist-info/licenses/LICENSE,sha256=Ph4NzyU3lGVDeYv-mf8aRmImH8v9rVL9F362FV4G6Ow,1063
36
- liblaf_cherries-0.0.8.dist-info/RECORD,,
File without changes
File without changes
File without changes