pycpufreq 1.0.0__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.
@@ -0,0 +1,143 @@
1
+ Metadata-Version: 2.4
2
+ Name: pycpufreq
3
+ Version: 1.0.0
4
+ Summary: Python library and CLI tool to manage and monitor CPU frequencies and turbo state
5
+ Author: turulomio
6
+ Author-email: turulomio <turulomio@yahoo.es>
7
+ License-Expression: GPL-3.0-or-later
8
+ Requires-Python: >=3.14
9
+ Description-Content-Type: text/markdown
10
+
11
+ # pycpufreq
12
+
13
+ <p align="center">
14
+ <a href="https://github.com/turulomio/pycpufreq/actions/workflows/ci.yml">
15
+ <img src="https://github.com/turulomio/pycpufreq/actions/workflows/ci.yml/badge.svg" alt="CI Status" />
16
+ </a>
17
+ <a href="https://pypi.org/project/pycpufreq/">
18
+ <img src="https://img.shields.io/pypi/v/pycpufreq.svg" alt="PyPI version" />
19
+ </a>
20
+ <a href="https://pypi.org/project/pycpufreq/">
21
+ <img src="https://img.shields.io/pypi/pyversions/pycpufreq.svg" alt="Python Versions" />
22
+ </a>
23
+ <a href="https://github.com/turulomio/pycpufreq/blob/main/LICENSE">
24
+ <img src="https://img.shields.io/github/license/turulomio/pycpufreq.svg" alt="License" />
25
+ </a>
26
+ <a href="https://github.com/astral-sh/uv">
27
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json" alt="uv" />
28
+ </a>
29
+ </p>
30
+
31
+ ---
32
+
33
+ **pycpufreq** is a modern Python library and CLI utility to monitor and configure CPU scaling frequencies and Intel Turbo Boost via Linux `sysfs` (`/sys/devices/system/cpu`).
34
+
35
+ ## ✨ Key Features
36
+
37
+ - **Query CPU Frequencies**: Retrieve minimum, maximum, current, and scaling CPU frequencies.
38
+ - **Multicore Scaling Configuration**: Safely set scaling maximum frequency across all present CPU cores (`cpu0`, `cpu1`, ...).
39
+ - **Intel Turbo Boost Toggle**: Enable or disable turbo state on Intel processors through `intel_pstate/no_turbo`.
40
+ - **Target Frequency Validation**: CLI validates custom frequencies against real hardware bounds ($f_{min} \le f_{target} \le f_{max}$).
41
+ - **Standard Internationalization (`gettext`)**: Multi-language support (English, Spanish, French, Romanian, Russian, Chinese, Hindi).
42
+ - **Modern Packaging with `uv` & `poethepoet`**: High-performance task runner, dependency management and zero-dependency runtime.
43
+
44
+ ---
45
+
46
+ ## 📦 Installation
47
+
48
+ Install with `uv`:
49
+
50
+ ```bash
51
+ uv add pycpufreq
52
+ ```
53
+
54
+ Or using `pip`:
55
+
56
+ ```bash
57
+ pip install pycpufreq
58
+ ```
59
+
60
+ ---
61
+
62
+ ## 🚀 Quick Start
63
+
64
+ ### Python Library
65
+
66
+ ```python
67
+ from pycpufreq import (
68
+ is_cpufreq_configured,
69
+ sys_get_cpu_max_freq,
70
+ sys_get_cpu_min_freq,
71
+ sys_get_cpu_current_freq,
72
+ sys_set_cpu_max_scaling_freq,
73
+ sys_set_cpu_turbo,
74
+ )
75
+
76
+ if is_cpufreq_configured():
77
+ print(f"Max Frequency: {sys_get_cpu_max_freq()} kHz")
78
+ print(f"Min Frequency: {sys_get_cpu_min_freq()} kHz")
79
+ print(f"Current Frequency: {sys_get_cpu_current_freq()} kHz")
80
+
81
+ # Set scaling frequency (requires write permissions to sysfs):
82
+ # sys_set_cpu_max_scaling_freq(2400000)
83
+
84
+ # Enable or disable Turbo boost:
85
+ # sys_set_cpu_turbo(True)
86
+ ```
87
+
88
+ ### Command Line Interface (CLI)
89
+
90
+ Run the CLI directly:
91
+
92
+ ```bash
93
+ # Display CPU stats, run dynamic scaling test and restore maximum frequency:
94
+ pycpufreq
95
+
96
+ # Run and leave CPU at a validated target frequency (e.g. 2400000 kHz):
97
+ pycpufreq 2400000
98
+
99
+ # Show help & options:
100
+ pycpufreq --help
101
+ ```
102
+
103
+ Or via `uv`:
104
+
105
+ ```bash
106
+ uv run pycpufreq
107
+ ```
108
+
109
+ ---
110
+
111
+ ## 🛠️ Development & Tasks
112
+
113
+ This project uses [`poethepoet`](https://github.com/nat-n/poethepoet) to streamline development tasks.
114
+
115
+ ### Run Tests
116
+
117
+ ```bash
118
+ poe test
119
+ # or directly:
120
+ uv run pytest
121
+ ```
122
+
123
+ ### Update Translations
124
+
125
+ Extract translatable strings, update catalogs and compile binary `.mo` files:
126
+
127
+ ```bash
128
+ poe translate
129
+ ```
130
+
131
+ ### Release Checklist
132
+
133
+ Print release steps and commands for tag, build and publish:
134
+
135
+ ```bash
136
+ poe release
137
+ ```
138
+
139
+ ---
140
+
141
+ ## 📄 License
142
+
143
+ Distributed under the terms of the [GNU General Public License v3 or later (GPL-3.0-or-later)](LICENSE).
@@ -0,0 +1,133 @@
1
+ # pycpufreq
2
+
3
+ <p align="center">
4
+ <a href="https://github.com/turulomio/pycpufreq/actions/workflows/ci.yml">
5
+ <img src="https://github.com/turulomio/pycpufreq/actions/workflows/ci.yml/badge.svg" alt="CI Status" />
6
+ </a>
7
+ <a href="https://pypi.org/project/pycpufreq/">
8
+ <img src="https://img.shields.io/pypi/v/pycpufreq.svg" alt="PyPI version" />
9
+ </a>
10
+ <a href="https://pypi.org/project/pycpufreq/">
11
+ <img src="https://img.shields.io/pypi/pyversions/pycpufreq.svg" alt="Python Versions" />
12
+ </a>
13
+ <a href="https://github.com/turulomio/pycpufreq/blob/main/LICENSE">
14
+ <img src="https://img.shields.io/github/license/turulomio/pycpufreq.svg" alt="License" />
15
+ </a>
16
+ <a href="https://github.com/astral-sh/uv">
17
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/uv/main/assets/badge/v0.json" alt="uv" />
18
+ </a>
19
+ </p>
20
+
21
+ ---
22
+
23
+ **pycpufreq** is a modern Python library and CLI utility to monitor and configure CPU scaling frequencies and Intel Turbo Boost via Linux `sysfs` (`/sys/devices/system/cpu`).
24
+
25
+ ## ✨ Key Features
26
+
27
+ - **Query CPU Frequencies**: Retrieve minimum, maximum, current, and scaling CPU frequencies.
28
+ - **Multicore Scaling Configuration**: Safely set scaling maximum frequency across all present CPU cores (`cpu0`, `cpu1`, ...).
29
+ - **Intel Turbo Boost Toggle**: Enable or disable turbo state on Intel processors through `intel_pstate/no_turbo`.
30
+ - **Target Frequency Validation**: CLI validates custom frequencies against real hardware bounds ($f_{min} \le f_{target} \le f_{max}$).
31
+ - **Standard Internationalization (`gettext`)**: Multi-language support (English, Spanish, French, Romanian, Russian, Chinese, Hindi).
32
+ - **Modern Packaging with `uv` & `poethepoet`**: High-performance task runner, dependency management and zero-dependency runtime.
33
+
34
+ ---
35
+
36
+ ## 📦 Installation
37
+
38
+ Install with `uv`:
39
+
40
+ ```bash
41
+ uv add pycpufreq
42
+ ```
43
+
44
+ Or using `pip`:
45
+
46
+ ```bash
47
+ pip install pycpufreq
48
+ ```
49
+
50
+ ---
51
+
52
+ ## 🚀 Quick Start
53
+
54
+ ### Python Library
55
+
56
+ ```python
57
+ from pycpufreq import (
58
+ is_cpufreq_configured,
59
+ sys_get_cpu_max_freq,
60
+ sys_get_cpu_min_freq,
61
+ sys_get_cpu_current_freq,
62
+ sys_set_cpu_max_scaling_freq,
63
+ sys_set_cpu_turbo,
64
+ )
65
+
66
+ if is_cpufreq_configured():
67
+ print(f"Max Frequency: {sys_get_cpu_max_freq()} kHz")
68
+ print(f"Min Frequency: {sys_get_cpu_min_freq()} kHz")
69
+ print(f"Current Frequency: {sys_get_cpu_current_freq()} kHz")
70
+
71
+ # Set scaling frequency (requires write permissions to sysfs):
72
+ # sys_set_cpu_max_scaling_freq(2400000)
73
+
74
+ # Enable or disable Turbo boost:
75
+ # sys_set_cpu_turbo(True)
76
+ ```
77
+
78
+ ### Command Line Interface (CLI)
79
+
80
+ Run the CLI directly:
81
+
82
+ ```bash
83
+ # Display CPU stats, run dynamic scaling test and restore maximum frequency:
84
+ pycpufreq
85
+
86
+ # Run and leave CPU at a validated target frequency (e.g. 2400000 kHz):
87
+ pycpufreq 2400000
88
+
89
+ # Show help & options:
90
+ pycpufreq --help
91
+ ```
92
+
93
+ Or via `uv`:
94
+
95
+ ```bash
96
+ uv run pycpufreq
97
+ ```
98
+
99
+ ---
100
+
101
+ ## 🛠️ Development & Tasks
102
+
103
+ This project uses [`poethepoet`](https://github.com/nat-n/poethepoet) to streamline development tasks.
104
+
105
+ ### Run Tests
106
+
107
+ ```bash
108
+ poe test
109
+ # or directly:
110
+ uv run pytest
111
+ ```
112
+
113
+ ### Update Translations
114
+
115
+ Extract translatable strings, update catalogs and compile binary `.mo` files:
116
+
117
+ ```bash
118
+ poe translate
119
+ ```
120
+
121
+ ### Release Checklist
122
+
123
+ Print release steps and commands for tag, build and publish:
124
+
125
+ ```bash
126
+ poe release
127
+ ```
128
+
129
+ ---
130
+
131
+ ## 📄 License
132
+
133
+ Distributed under the terms of the [GNU General Public License v3 or later (GPL-3.0-or-later)](LICENSE).
@@ -0,0 +1,34 @@
1
+ [project]
2
+ name = "pycpufreq"
3
+ version = "1.0.0"
4
+ description = "Python library and CLI tool to manage and monitor CPU frequencies and turbo state"
5
+ readme = "README.md"
6
+ license = "GPL-3.0-or-later"
7
+ requires-python = ">=3.14"
8
+ dependencies = []
9
+
10
+ [[project.authors]]
11
+ name = "turulomio"
12
+ email = "turulomio@yahoo.es"
13
+
14
+ [project.scripts]
15
+ pycpufreq = "pycpufreq.commands:main"
16
+
17
+ [build-system]
18
+ requires = ["uv_build>=0.12.17,<0.13.0"]
19
+ build-backend = "uv_build"
20
+
21
+ [dependency-groups]
22
+ dev = ["pytest>=9.2.0"]
23
+
24
+ [tool.poe.tasks.translate]
25
+ script = "pycpufreq.poethepoet:translate"
26
+ help = "Extract, update and compile gettext catalogs"
27
+
28
+ [tool.poe.tasks.test]
29
+ cmd = "pytest"
30
+ help = "Run test suite"
31
+
32
+ [tool.poe.tasks.release]
33
+ script = "pycpufreq.poethepoet:release"
34
+ help = "Print instructions for releasing a new version"
@@ -0,0 +1,30 @@
1
+ [project]
2
+ name = "pycpufreq"
3
+ version = "1.0.0"
4
+ description = "Python library and CLI tool to manage and monitor CPU frequencies and turbo state"
5
+ readme = "README.md"
6
+ license = "GPL-3.0-or-later"
7
+ authors = [
8
+ { name = "turulomio", email = "turulomio@yahoo.es" }
9
+ ]
10
+ requires-python = ">=3.14"
11
+ dependencies = []
12
+
13
+ [project.scripts]
14
+ pycpufreq = "pycpufreq.commands:main"
15
+
16
+ [build-system]
17
+ requires = ["uv_build>=0.12.17,<0.13.0"]
18
+ build-backend = "uv_build"
19
+
20
+ [dependency-groups]
21
+ dev = [
22
+ "pytest>=9.2.0",
23
+ ]
24
+
25
+ [tool.poe.tasks]
26
+ translate = { script = "pycpufreq.poethepoet:translate", help = "Extract, update and compile gettext catalogs" }
27
+ test = { cmd = "pytest", help = "Run test suite" }
28
+ release = { script = "pycpufreq.poethepoet:release", help = "Print instructions for releasing a new version" }
29
+
30
+
@@ -0,0 +1,31 @@
1
+ """pycpufreq package."""
2
+
3
+ from pycpufreq.version import __version__, __version_date__, __version_datetime__
4
+ from pycpufreq.i18n import LOCALE_DIR, _, translation
5
+ from pycpufreq.core import (
6
+ FAIL_FREQUENCY,
7
+ is_cpufreq_configured,
8
+ sys_get_cpu_max_freq,
9
+ sys_get_cpu_min_freq,
10
+ sys_get_cpu_current_freq,
11
+ sys_get_cpu_max_scaling_freq,
12
+ sys_set_cpu_max_scaling_freq,
13
+ sys_set_cpu_turbo,
14
+ )
15
+
16
+ __all__ = [
17
+ "__version__",
18
+ "__version_date__",
19
+ "__version_datetime__",
20
+ "LOCALE_DIR",
21
+ "_",
22
+ "translation",
23
+ "FAIL_FREQUENCY",
24
+ "is_cpufreq_configured",
25
+ "sys_get_cpu_max_freq",
26
+ "sys_get_cpu_min_freq",
27
+ "sys_get_cpu_current_freq",
28
+ "sys_get_cpu_max_scaling_freq",
29
+ "sys_set_cpu_max_scaling_freq",
30
+ "sys_set_cpu_turbo",
31
+ ]
@@ -0,0 +1,97 @@
1
+ """CLI commands entrypoint for pycpufreq."""
2
+
3
+ import argparse
4
+ import sys
5
+ from time import sleep
6
+ from pycpufreq.i18n import _
7
+ from pycpufreq.version import __version__
8
+ from pycpufreq.core import (
9
+ is_cpufreq_configured,
10
+ sys_get_cpu_max_freq,
11
+ sys_get_cpu_min_freq,
12
+ sys_get_cpu_current_freq,
13
+ sys_get_cpu_max_scaling_freq,
14
+ sys_set_cpu_max_scaling_freq,
15
+ sys_set_cpu_turbo,
16
+ )
17
+
18
+
19
+ def main(args: list[str] | None = None) -> int:
20
+ """Main CLI entrypoint demonstrating cpufreq features and leaving final frequency."""
21
+ parser = argparse.ArgumentParser(
22
+ prog="pycpufreq",
23
+ description=_("Manage and monitor CPU frequencies and turbo state."),
24
+ )
25
+ parser.add_argument(
26
+ "-v", "--version",
27
+ action="version",
28
+ version=f"%(prog)s {__version__}",
29
+ )
30
+ parser.add_argument(
31
+ "frequency",
32
+ nargs="?",
33
+ type=int,
34
+ default=None,
35
+ help=_("Target final CPU scaling frequency (in kHz). If omitted, maximum frequency is used."),
36
+ )
37
+
38
+ parsed = parser.parse_args(args)
39
+ sleeptime = 2
40
+
41
+ print(_("Is kernel cpufreq configured?:"), is_cpufreq_configured())
42
+
43
+ if not is_cpufreq_configured():
44
+ return 1
45
+
46
+ max_freq = int(sys_get_cpu_max_freq())
47
+ min_freq = int(sys_get_cpu_min_freq())
48
+
49
+ # Validate target frequency if supplied
50
+ target_freq = parsed.frequency
51
+ if target_freq is not None:
52
+ if target_freq < min_freq or target_freq > max_freq:
53
+ print(
54
+ _("Invalid frequency: {}. It must be between {} and {} kHz.").format(
55
+ target_freq, min_freq, max_freq
56
+ ),
57
+ file=sys.stderr,
58
+ )
59
+ return 2
60
+ else:
61
+ target_freq = max_freq
62
+
63
+ print(_("Max cpu freq is {}").format(max_freq))
64
+ print(_("Min cpu freq is {}").format(min_freq))
65
+ print(_("Current cpu freq is {}").format(sys_get_cpu_current_freq()))
66
+
67
+ print(_("Changing cpu to maximum scaling freq"))
68
+ sys_set_cpu_max_scaling_freq(max_freq)
69
+ sleep(sleeptime)
70
+ print(_("Current cpu max scaling freq is {}").format(sys_get_cpu_max_scaling_freq()))
71
+
72
+ print(_("Disabling turbo"))
73
+ sys_set_cpu_turbo(False)
74
+ sleep(sleeptime)
75
+ print(_("Current cpu max scaling freq is {}").format(sys_get_cpu_max_scaling_freq()))
76
+
77
+ print(_("Enabling turbo"))
78
+ sys_set_cpu_turbo(True)
79
+ sleep(sleeptime)
80
+ print(_("Current cpu max scaling freq is {}").format(sys_get_cpu_max_scaling_freq()))
81
+
82
+ print(_("Changing cpu to minimum scaling freq"))
83
+ sys_set_cpu_max_scaling_freq(min_freq)
84
+ sleep(sleeptime)
85
+ print(_("Current cpu max scaling freq is {}").format(sys_get_cpu_max_scaling_freq()))
86
+
87
+ # Leave the CPU configured with target frequency at the end
88
+ print(_("Leaving CPU frequency at {}").format(target_freq))
89
+ sys_set_cpu_max_scaling_freq(target_freq)
90
+ sleep(sleeptime)
91
+ print(_("Current cpu max scaling freq is {}").format(sys_get_cpu_max_scaling_freq()))
92
+
93
+ return 0
94
+
95
+
96
+ if __name__ == "__main__":
97
+ sys.exit(main())
@@ -0,0 +1,119 @@
1
+ """Core functionality for CPU frequency management."""
2
+
3
+ from pathlib import Path
4
+ from pycpufreq.i18n import _
5
+
6
+ FAIL_FREQUENCY = 400000
7
+
8
+
9
+ def _resolve_path(base_path: str | Path) -> Path:
10
+ """Helper to convert base_path to Path instance."""
11
+ return Path(base_path)
12
+
13
+
14
+ def is_cpufreq_configured(base_path: str | Path = "/sys/devices/system/cpu") -> bool:
15
+ """Check if cpufreq and intel_pstate sysfs nodes exist."""
16
+ base = _resolve_path(base_path)
17
+ return (
18
+ (base / "cpu0" / "cpufreq").exists()
19
+ and (base / "cpu0" / "cpufreq" / "cpuinfo_max_freq").exists()
20
+ and (base / "cpu0" / "cpufreq" / "cpuinfo_min_freq").exists()
21
+ and (base / "cpu0" / "cpufreq" / "scaling_cur_freq").exists()
22
+ and (base / "cpu0" / "cpufreq" / "scaling_max_freq").exists()
23
+ and (base / "intel_pstate" / "no_turbo").exists()
24
+ )
25
+
26
+
27
+ def sys_get_cpu_max_freq(base_path: str | Path = "/sys/devices/system/cpu") -> str | int:
28
+ """Get maximum cpu frequency supported by cpu0."""
29
+ base = _resolve_path(base_path)
30
+ if is_cpufreq_configured(base):
31
+ try:
32
+ return (base / "cpu0" / "cpufreq" / "cpuinfo_max_freq").read_text().strip()
33
+ except OSError:
34
+ return FAIL_FREQUENCY
35
+ return FAIL_FREQUENCY
36
+
37
+
38
+ def sys_get_cpu_min_freq(base_path: str | Path = "/sys/devices/system/cpu") -> str | int:
39
+ """Get minimum cpu frequency supported by cpu0."""
40
+ base = _resolve_path(base_path)
41
+ if is_cpufreq_configured(base):
42
+ try:
43
+ return (base / "cpu0" / "cpufreq" / "cpuinfo_min_freq").read_text().strip()
44
+ except OSError:
45
+ return FAIL_FREQUENCY
46
+ return FAIL_FREQUENCY
47
+
48
+
49
+ def sys_get_cpu_current_freq(base_path: str | Path = "/sys/devices/system/cpu") -> str | int:
50
+ """Get current operating cpu frequency of cpu0."""
51
+ base = _resolve_path(base_path)
52
+ if is_cpufreq_configured(base):
53
+ try:
54
+ return (base / "cpu0" / "cpufreq" / "scaling_cur_freq").read_text().strip()
55
+ except OSError:
56
+ return FAIL_FREQUENCY
57
+ return FAIL_FREQUENCY
58
+
59
+
60
+ def sys_get_cpu_max_scaling_freq(base_path: str | Path = "/sys/devices/system/cpu") -> str | int:
61
+ """Get maximum scaling frequency of cpu0."""
62
+ base = _resolve_path(base_path)
63
+ if is_cpufreq_configured(base):
64
+ try:
65
+ return (base / "cpu0" / "cpufreq" / "scaling_max_freq").read_text().strip()
66
+ except OSError:
67
+ return FAIL_FREQUENCY
68
+ return FAIL_FREQUENCY
69
+
70
+
71
+ def sys_set_cpu_max_scaling_freq(freq: str | int, base_path: str | Path = "/sys/devices/system/cpu") -> bool:
72
+ """Set maximum scaling frequency for all available CPUs."""
73
+ base = _resolve_path(base_path)
74
+ # Security validation: Ensure freq is numeric to avoid invalid writes
75
+ try:
76
+ val = int(freq)
77
+ if val <= 0:
78
+ raise ValueError()
79
+ str_val = str(val)
80
+ except (ValueError, TypeError):
81
+ print(_("Error setting sys_set_cpu_max_scaling_freq"))
82
+ return False
83
+
84
+ if is_cpufreq_configured(base):
85
+ i = 0
86
+ written_any = False
87
+ try:
88
+ while True:
89
+ freq_path = base / f"cpu{i}" / "cpufreq" / "scaling_max_freq"
90
+ if freq_path.exists():
91
+ freq_path.write_text(str_val)
92
+ written_any = True
93
+ i += 1
94
+ else:
95
+ break
96
+ return written_any
97
+ except OSError:
98
+ print(_("Error setting sys_set_cpu_max_scaling_freq"))
99
+ return False
100
+ else:
101
+ print(_("Error setting sys_set_cpu_max_scaling_freq"))
102
+ return False
103
+
104
+
105
+ def sys_set_cpu_turbo(boolean: bool, base_path: str | Path = "/sys/devices/system/cpu") -> bool:
106
+ """Enable or disable CPU turbo via intel_pstate."""
107
+ base = _resolve_path(base_path)
108
+ if is_cpufreq_configured(base):
109
+ s = "0" if boolean else "1"
110
+ target_path = base / "intel_pstate" / "no_turbo"
111
+ try:
112
+ target_path.write_text(s)
113
+ return True
114
+ except OSError:
115
+ print(_("Error setting sys_set_cpu_turbo"))
116
+ return False
117
+ else:
118
+ print(_("Error setting sys_set_cpu_turbo"))
119
+ return False
@@ -0,0 +1,6 @@
1
+ import gettext
2
+ from pathlib import Path
3
+
4
+ LOCALE_DIR = Path(__file__).resolve().parent / "locale"
5
+ translation = gettext.translation("pycpufreq", localedir=str(LOCALE_DIR), fallback=True)
6
+ _ = translation.gettext
@@ -0,0 +1,62 @@
1
+ # Spanish translations for pycpufreq package.
2
+ # Copyright (C) 2026 turulomio
3
+ # This file is distributed under the same license as the pycpufreq package.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: pycpufreq 0.1.0\n"
8
+ "Report-Msgid-Bugs-To: \n"
9
+ "POT-Creation-Date: 2026-10-31 09:26+0100\n"
10
+ "PO-Revision-Date: 2026-10-31 09:25+0100\n"
11
+ "Last-Translator: turulomio <turulomio@yahoo.es>\n"
12
+ "Language-Team: Spanish <turulomio@yahoo.es>\n"
13
+ "Language: es\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+
19
+ msgid "Error setting sys_set_cpu_max_scaling_freq"
20
+ msgstr "Error al establecer sys_set_cpu_max_scaling_freq"
21
+
22
+ msgid "Error setting sys_set_cpu_turbo"
23
+ msgstr "Error al establecer sys_set_cpu_turbo"
24
+
25
+ msgid "Manage and monitor CPU frequencies and turbo state."
26
+ msgstr "Gestiona y monitoriza frecuencias de CPU y el estado de Turbo."
27
+
28
+ msgid "Target final CPU scaling frequency (in kHz). If omitted, maximum frequency is used."
29
+ msgstr "Frecuencia final objetivo de escalado de CPU (en kHz). Si se omite, se utiliza la frecuencia máxima."
30
+
31
+ msgid "Is kernel cpufreq configured?:"
32
+ msgstr "¿Está cpufreq del kernel configurado?:"
33
+
34
+ msgid "Invalid frequency: {}. It must be between {} and {} kHz."
35
+ msgstr "Frecuencia no válida: {}. Debe estar entre {} y {} kHz."
36
+
37
+ msgid "Max cpu freq is {}"
38
+ msgstr "La frecuencia máxima de cpu es {}"
39
+
40
+ msgid "Min cpu freq is {}"
41
+ msgstr "La frecuencia mínima de cpu es {}"
42
+
43
+ msgid "Current cpu freq is {}"
44
+ msgstr "La frecuencia actual de cpu es {}"
45
+
46
+ msgid "Changing cpu to maximum scaling freq"
47
+ msgstr "Cambiando la cpu a la frecuencia máxima de escalado"
48
+
49
+ msgid "Current cpu max scaling freq is {}"
50
+ msgstr "La frecuencia máxima actual de escalado de la cpu es {}"
51
+
52
+ msgid "Disabling turbo"
53
+ msgstr "Desactivando turbo"
54
+
55
+ msgid "Enabling turbo"
56
+ msgstr "Activando turbo"
57
+
58
+ msgid "Changing cpu to minimum scaling freq"
59
+ msgstr "Cambiando la cpu a la frecuencia mínima de escalado"
60
+
61
+ msgid "Leaving CPU frequency at {}"
62
+ msgstr "Dejando la frecuencia de CPU en {}"
@@ -0,0 +1,62 @@
1
+ # French translations for pycpufreq package.
2
+ # Copyright (C) 2026 turulomio
3
+ # This file is distributed under the same license as the pycpufreq package.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: pycpufreq 0.1.0\n"
8
+ "Report-Msgid-Bugs-To: \n"
9
+ "POT-Creation-Date: 2026-10-31 09:26+0100\n"
10
+ "PO-Revision-Date: 2026-10-31 09:25+0100\n"
11
+ "Last-Translator: turulomio <turulomio@yahoo.es>\n"
12
+ "Language-Team: French <turulomio@yahoo.es>\n"
13
+ "Language: fr\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n > 1);\n"
18
+
19
+ msgid "Error setting sys_set_cpu_max_scaling_freq"
20
+ msgstr "Erreur lors de la définition de sys_set_cpu_max_scaling_freq"
21
+
22
+ msgid "Error setting sys_set_cpu_turbo"
23
+ msgstr "Erreur lors de la définition de sys_set_cpu_turbo"
24
+
25
+ msgid "Manage and monitor CPU frequencies and turbo state."
26
+ msgstr "Gérer et surveiller les fréquences du processeur et l'état turbo."
27
+
28
+ msgid "Target final CPU scaling frequency (in kHz). If omitted, maximum frequency is used."
29
+ msgstr "Fréquence finale cible d'échelle du processeur (en kHz). Si omise, la fréquence maximale est utilisée."
30
+
31
+ msgid "Is kernel cpufreq configured?:"
32
+ msgstr "Le cpufreq du noyau est-il configuré ? :"
33
+
34
+ msgid "Invalid frequency: {}. It must be between {} and {} kHz."
35
+ msgstr "Fréquence non valide : {}. Elle doit être comprise entre {} et {} kHz."
36
+
37
+ msgid "Max cpu freq is {}"
38
+ msgstr "La fréquence maximale du processeur est {}"
39
+
40
+ msgid "Min cpu freq is {}"
41
+ msgstr "La fréquence minimale du processeur est {}"
42
+
43
+ msgid "Current cpu freq is {}"
44
+ msgstr "La fréquence actuelle du processeur est {}"
45
+
46
+ msgid "Changing cpu to maximum scaling freq"
47
+ msgstr "Changement du processeur vers la fréquence d'échelle maximale"
48
+
49
+ msgid "Current cpu max scaling freq is {}"
50
+ msgstr "La fréquence d'échelle maximale actuelle du processeur est {}"
51
+
52
+ msgid "Disabling turbo"
53
+ msgstr "Désactivation du turbo"
54
+
55
+ msgid "Enabling turbo"
56
+ msgstr "Activation du turbo"
57
+
58
+ msgid "Changing cpu to minimum scaling freq"
59
+ msgstr "Changement du processeur vers la fréquence d'échelle minimale"
60
+
61
+ msgid "Leaving CPU frequency at {}"
62
+ msgstr "Maintien de la fréquence du processeur à {}"
@@ -0,0 +1,62 @@
1
+ # Hindi translations for pycpufreq package.
2
+ # Copyright (C) 2026 turulomio
3
+ # This file is distributed under the same license as the pycpufreq package.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: pycpufreq 0.1.0\n"
8
+ "Report-Msgid-Bugs-To: \n"
9
+ "POT-Creation-Date: 2026-10-31 09:26+0100\n"
10
+ "PO-Revision-Date: 2026-10-31 09:25+0100\n"
11
+ "Last-Translator: turulomio <turulomio@yahoo.es>\n"
12
+ "Language-Team: Hindi <turulomio@yahoo.es>\n"
13
+ "Language: hi\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+
19
+ msgid "Error setting sys_set_cpu_max_scaling_freq"
20
+ msgstr "sys_set_cpu_max_scaling_freq सेट करने में त्रुटि"
21
+
22
+ msgid "Error setting sys_set_cpu_turbo"
23
+ msgstr "sys_set_cpu_turbo सेट करने में त्रुटि"
24
+
25
+ msgid "Manage and monitor CPU frequencies and turbo state."
26
+ msgstr "सीपीयू आवृत्तियों और टर्बो स्थिति का प्रबंधन और निगरानी करें।"
27
+
28
+ msgid "Target final CPU scaling frequency (in kHz). If omitted, maximum frequency is used."
29
+ msgstr "लक्ष्य अंतिम सीपीयू स्केलिंग आवृत्ति (kHz में)। यदि छोड़ दिया जाए, तो अधिकतम आवृत्ति का उपयोग किया जाता है।"
30
+
31
+ msgid "Is kernel cpufreq configured?:"
32
+ msgstr "क्या कर्नेल cpufreq कॉन्फ़िगर किया गया है?:"
33
+
34
+ msgid "Invalid frequency: {}. It must be between {} and {} kHz."
35
+ msgstr "अमान्य आवृत्ति: {}। यह {} और {} kHz के बीच होनी चाहिए।"
36
+
37
+ msgid "Max cpu freq is {}"
38
+ msgstr "अधिकतम सीपीयू आवृत्ति {} है"
39
+
40
+ msgid "Min cpu freq is {}"
41
+ msgstr "न्यूनतम सीपीयू आवृत्ति {} है"
42
+
43
+ msgid "Current cpu freq is {}"
44
+ msgstr "वर्तमान सीपीयू आवृत्ति {} है"
45
+
46
+ msgid "Changing cpu to maximum scaling freq"
47
+ msgstr "सीपीयू को अधिकतम स्केलिंग आवृत्ति में बदला जा रहा है"
48
+
49
+ msgid "Current cpu max scaling freq is {}"
50
+ msgstr "वर्तमान सीपीयू अधिकतम स्केलिंग आवृत्ति {} है"
51
+
52
+ msgid "Disabling turbo"
53
+ msgstr "टर्बो अक्षम किया जा रहा है"
54
+
55
+ msgid "Enabling turbo"
56
+ msgstr "टर्बो सक्षम किया जा रहा है"
57
+
58
+ msgid "Changing cpu to minimum scaling freq"
59
+ msgstr "सीपीयू को न्यूनतम स्केलिंग आवृत्ति में बदला जा रहा है"
60
+
61
+ msgid "Leaving CPU frequency at {}"
62
+ msgstr "सीपीयू आवृत्ति {} पर छोड़ी जा रही है"
@@ -0,0 +1,63 @@
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2026-10-31 09:45+0100\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "Language: \n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=CHARSET\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+
20
+ msgid "Error setting sys_set_cpu_max_scaling_freq"
21
+ msgstr ""
22
+
23
+ msgid "Error setting sys_set_cpu_turbo"
24
+ msgstr ""
25
+
26
+ msgid "Manage and monitor CPU frequencies and turbo state."
27
+ msgstr ""
28
+
29
+ msgid "Target final CPU scaling frequency (in kHz). If omitted, maximum frequency is used."
30
+ msgstr ""
31
+
32
+ msgid "Is kernel cpufreq configured?:"
33
+ msgstr ""
34
+
35
+ msgid "Invalid frequency: {}. It must be between {} and {} kHz."
36
+ msgstr ""
37
+
38
+ msgid "Max cpu freq is {}"
39
+ msgstr ""
40
+
41
+ msgid "Min cpu freq is {}"
42
+ msgstr ""
43
+
44
+ msgid "Current cpu freq is {}"
45
+ msgstr ""
46
+
47
+ msgid "Changing cpu to maximum scaling freq"
48
+ msgstr ""
49
+
50
+ msgid "Current cpu max scaling freq is {}"
51
+ msgstr ""
52
+
53
+ msgid "Disabling turbo"
54
+ msgstr ""
55
+
56
+ msgid "Enabling turbo"
57
+ msgstr ""
58
+
59
+ msgid "Changing cpu to minimum scaling freq"
60
+ msgstr ""
61
+
62
+ msgid "Leaving CPU frequency at {}"
63
+ msgstr ""
@@ -0,0 +1,62 @@
1
+ # Romanian translations for pycpufreq package.
2
+ # Copyright (C) 2026 turulomio
3
+ # This file is distributed under the same license as the pycpufreq package.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: pycpufreq 0.1.0\n"
8
+ "Report-Msgid-Bugs-To: \n"
9
+ "POT-Creation-Date: 2026-10-31 09:26+0100\n"
10
+ "PO-Revision-Date: 2026-10-31 09:25+0100\n"
11
+ "Last-Translator: turulomio <turulomio@yahoo.es>\n"
12
+ "Language-Team: Romanian <turulomio@yahoo.es>\n"
13
+ "Language: ro\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
18
+
19
+ msgid "Error setting sys_set_cpu_max_scaling_freq"
20
+ msgstr "Eroare la setarea sys_set_cpu_max_scaling_freq"
21
+
22
+ msgid "Error setting sys_set_cpu_turbo"
23
+ msgstr "Eroare la setarea sys_set_cpu_turbo"
24
+
25
+ msgid "Manage and monitor CPU frequencies and turbo state."
26
+ msgstr "Gestionați și monitorizați frecvențele procesorului și starea turbo."
27
+
28
+ msgid "Target final CPU scaling frequency (in kHz). If omitted, maximum frequency is used."
29
+ msgstr "Frecvența finală țintă de scalare a procesorului (în kHz). Dacă este omisă, se utilizează frecvența maximă."
30
+
31
+ msgid "Is kernel cpufreq configured?:"
32
+ msgstr "Este configurat cpufreq în nucleu?:"
33
+
34
+ msgid "Invalid frequency: {}. It must be between {} and {} kHz."
35
+ msgstr "Frecvență nevalidă: {}. Trebuie să fie între {} și {} kHz."
36
+
37
+ msgid "Max cpu freq is {}"
38
+ msgstr "Frecvența maximă a procesorului este {}"
39
+
40
+ msgid "Min cpu freq is {}"
41
+ msgstr "Frecvența minimă a procesorului este {}"
42
+
43
+ msgid "Current cpu freq is {}"
44
+ msgstr "Frecvența curentă a procesorului este {}"
45
+
46
+ msgid "Changing cpu to maximum scaling freq"
47
+ msgstr "Se schimbă procesorul la frecvența maximă de scalare"
48
+
49
+ msgid "Current cpu max scaling freq is {}"
50
+ msgstr "Frecvența maximă curentă de scalare a procesorului este {}"
51
+
52
+ msgid "Disabling turbo"
53
+ msgstr "Se dezactivează turbo"
54
+
55
+ msgid "Enabling turbo"
56
+ msgstr "Se activează turbo"
57
+
58
+ msgid "Changing cpu to minimum scaling freq"
59
+ msgstr "Se schimbă procesorul la frecvența minimă de scalare"
60
+
61
+ msgid "Leaving CPU frequency at {}"
62
+ msgstr "Se lasă frecvența procesorului la {}"
@@ -0,0 +1,62 @@
1
+ # Russian translations for pycpufreq package.
2
+ # Copyright (C) 2026 turulomio
3
+ # This file is distributed under the same license as the pycpufreq package.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: pycpufreq 0.1.0\n"
8
+ "Report-Msgid-Bugs-To: \n"
9
+ "POT-Creation-Date: 2026-10-31 09:26+0100\n"
10
+ "PO-Revision-Date: 2026-10-31 09:25+0100\n"
11
+ "Last-Translator: turulomio <turulomio@yahoo.es>\n"
12
+ "Language-Team: Russian <turulomio@yahoo.es>\n"
13
+ "Language: ru\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
18
+
19
+ msgid "Error setting sys_set_cpu_max_scaling_freq"
20
+ msgstr "Ошибка при установке sys_set_cpu_max_scaling_freq"
21
+
22
+ msgid "Error setting sys_set_cpu_turbo"
23
+ msgstr "Ошибка при установке sys_set_cpu_turbo"
24
+
25
+ msgid "Manage and monitor CPU frequencies and turbo state."
26
+ msgstr "Управление и мониторинг частот процессора и состояния турбо."
27
+
28
+ msgid "Target final CPU scaling frequency (in kHz). If omitted, maximum frequency is used."
29
+ msgstr "Целевая конечная частота масштабирования процессора (в кГц). Если не указана, используется максимальная частота."
30
+
31
+ msgid "Is kernel cpufreq configured?:"
32
+ msgstr "Настроен ли cpufreq ядра?:"
33
+
34
+ msgid "Invalid frequency: {}. It must be between {} and {} kHz."
35
+ msgstr "Недопустимая частота: {}. Она должна быть в диапазоне от {} до {} кГц."
36
+
37
+ msgid "Max cpu freq is {}"
38
+ msgstr "Максимальная частота процессора: {}"
39
+
40
+ msgid "Min cpu freq is {}"
41
+ msgstr "Минимальная частота процессора: {}"
42
+
43
+ msgid "Current cpu freq is {}"
44
+ msgstr "Текущая частота процессора: {}"
45
+
46
+ msgid "Changing cpu to maximum scaling freq"
47
+ msgstr "Переключение процессора на максимальную частоту масштабирования"
48
+
49
+ msgid "Current cpu max scaling freq is {}"
50
+ msgstr "Текущая максимальная частота масштабирования процессора: {}"
51
+
52
+ msgid "Disabling turbo"
53
+ msgstr "Отключение турбо"
54
+
55
+ msgid "Enabling turbo"
56
+ msgstr "Включение турбо"
57
+
58
+ msgid "Changing cpu to minimum scaling freq"
59
+ msgstr "Переключение процессора на минимальную частоту масштабирования"
60
+
61
+ msgid "Leaving CPU frequency at {}"
62
+ msgstr "Установка частоты процессора на уровне {}"
@@ -0,0 +1,62 @@
1
+ # Chinese translations for pycpufreq package.
2
+ # Copyright (C) 2026 turulomio
3
+ # This file is distributed under the same license as the pycpufreq package.
4
+ #
5
+ msgid ""
6
+ msgstr ""
7
+ "Project-Id-Version: pycpufreq 0.1.0\n"
8
+ "Report-Msgid-Bugs-To: \n"
9
+ "POT-Creation-Date: 2026-10-31 09:26+0100\n"
10
+ "PO-Revision-Date: 2026-10-31 09:25+0100\n"
11
+ "Last-Translator: turulomio <turulomio@yahoo.es>\n"
12
+ "Language-Team: Chinese <turulomio@yahoo.es>\n"
13
+ "Language: zh\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=1; plural=0;\n"
18
+
19
+ msgid "Error setting sys_set_cpu_max_scaling_freq"
20
+ msgstr "设置 sys_set_cpu_max_scaling_freq 时出错"
21
+
22
+ msgid "Error setting sys_set_cpu_turbo"
23
+ msgstr "设置 sys_set_cpu_turbo 时出错"
24
+
25
+ msgid "Manage and monitor CPU frequencies and turbo state."
26
+ msgstr "管理和监控 CPU 频率以及 Turbo 状态。"
27
+
28
+ msgid "Target final CPU scaling frequency (in kHz). If omitted, maximum frequency is used."
29
+ msgstr "目标最终 CPU 调节频率(单位 kHz)。若省略,则使用最大频率。"
30
+
31
+ msgid "Is kernel cpufreq configured?:"
32
+ msgstr "内核 cpufreq 是否已配置?:"
33
+
34
+ msgid "Invalid frequency: {}. It must be between {} and {} kHz."
35
+ msgstr "无效频率:{}。必须介于 {} 和 {} kHz 之间。"
36
+
37
+ msgid "Max cpu freq is {}"
38
+ msgstr "CPU 最大频率为 {}"
39
+
40
+ msgid "Min cpu freq is {}"
41
+ msgstr "CPU 最小频率为 {}"
42
+
43
+ msgid "Current cpu freq is {}"
44
+ msgstr "CPU 当前频率为 {}"
45
+
46
+ msgid "Changing cpu to maximum scaling freq"
47
+ msgstr "正在将 CPU 更改为最大调节频率"
48
+
49
+ msgid "Current cpu max scaling freq is {}"
50
+ msgstr "当前 CPU 最大调节频率为 {}"
51
+
52
+ msgid "Disabling turbo"
53
+ msgstr "正在禁用 Turbo"
54
+
55
+ msgid "Enabling turbo"
56
+ msgstr "正在启用 Turbo"
57
+
58
+ msgid "Changing cpu to minimum scaling freq"
59
+ msgstr "正在将 CPU 更改为最小调节频率"
60
+
61
+ msgid "Leaving CPU frequency at {}"
62
+ msgstr "将 CPU 频率保持在 {}"
@@ -0,0 +1,70 @@
1
+ from pathlib import Path
2
+ import subprocess
3
+ from pycpufreq.version import __version__
4
+ from pycpufreq.i18n import _
5
+
6
+ LANGUAGES = ["es", "fr", "ro", "ru", "zh", "hi"]
7
+ PACKAGE_DIR = Path(__file__).resolve().parent
8
+ LOCALE_DIR = PACKAGE_DIR / "locale"
9
+ POT_FILE = LOCALE_DIR / "pycpufreq.pot"
10
+
11
+
12
+ def translate() -> None:
13
+ """Extract translatable strings, update PO catalogs, and compile MO binary files."""
14
+ LOCALE_DIR.mkdir(parents=True, exist_ok=True)
15
+ python_files = [str(p) for p in PACKAGE_DIR.glob("*.py") if p.name != "poethepoet.py"]
16
+
17
+ subprocess.run(
18
+ [
19
+ "xgettext",
20
+ "-L", "Python",
21
+ "--no-wrap",
22
+ "--no-location",
23
+ "--from-code=UTF-8",
24
+ "-o", str(POT_FILE),
25
+ *python_files,
26
+ ],
27
+ check=True,
28
+ )
29
+
30
+ for lang in LANGUAGES:
31
+ lang_dir = LOCALE_DIR / lang / "LC_MESSAGES"
32
+ lang_dir.mkdir(parents=True, exist_ok=True)
33
+ po_file = LOCALE_DIR / f"{lang}.po"
34
+
35
+ if not po_file.exists():
36
+ res = subprocess.run(
37
+ ["msginit", "--no-translator", "-l", f"{lang}.UTF-8", "-i", str(POT_FILE), "-o", str(po_file)],
38
+ capture_output=True,
39
+ )
40
+ if res.returncode != 0:
41
+ po_file.write_bytes(POT_FILE.read_bytes())
42
+
43
+ subprocess.run(
44
+ ["msgmerge", "-N", "--no-wrap", "-U", str(po_file), str(POT_FILE)],
45
+ check=True,
46
+ )
47
+ mo_file = lang_dir / "pycpufreq.mo"
48
+ subprocess.run(
49
+ ["msgfmt", "-cv", "-o", str(mo_file), str(po_file)],
50
+ check=True,
51
+ )
52
+
53
+
54
+ def release() -> None:
55
+ """Print the step-by-step checklist for publishing a new release."""
56
+ print(_("New Release:"))
57
+ print(_(" * Change version and date in src/pycpufreq/version.py"))
58
+ print(_(" * Change version in pyproject.toml"))
59
+ print(_(" * Edit Changelog in README.md"))
60
+ print(" * poe translate")
61
+ print(" * mcedit src/pycpufreq/locale/es.po")
62
+ print(" * poe translate")
63
+ print(" * poe test")
64
+ print(f" * git commit -a -m 'pycpufreq-{__version__}'")
65
+ print(" * git push")
66
+ print(_(" * Make a new tag in github"))
67
+ print(" * uv build")
68
+ print(" * uv publish")
69
+ print(_(" * Create a new gentoo ebuild with the new version"))
70
+ print(_(" * Upload to portage repository"))
@@ -0,0 +1,5 @@
1
+ from datetime import datetime
2
+
3
+ __version__ = "1.0.0"
4
+ __version_datetime__ = datetime(2026, 10, 31, 9, 45, 0)
5
+ __version_date__ = __version_datetime__.date()