psswd_box 1.2.2__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.
- psswd_box-1.2.2/.gitignore +10 -0
- psswd_box-1.2.2/.python-version +1 -0
- psswd_box-1.2.2/LICENSE +19 -0
- psswd_box-1.2.2/PKG-INFO +31 -0
- psswd_box-1.2.2/README.md +20 -0
- psswd_box-1.2.2/bandit.yaml +16 -0
- psswd_box-1.2.2/pyproject.toml +18 -0
- psswd_box-1.2.2/src/psswd_box/__init__.py +0 -0
- psswd_box-1.2.2/src/psswd_box/app.py +212 -0
- psswd_box-1.2.2/src/psswd_box/password_generator.py +148 -0
- psswd_box-1.2.2/src/psswd_box/resources/configs/config.yaml +8 -0
- psswd_box-1.2.2/src/psswd_box/resources/configs/themes.yaml +15 -0
- psswd_box-1.2.2/src/psswd_box/resources/gifs/app_showcase.gif +0 -0
- psswd_box-1.2.2/src/psswd_box/resources/images/psswd_box-128.png +0 -0
- psswd_box-1.2.2/src/psswd_box/resources/images/psswd_box-16.png +0 -0
- psswd_box-1.2.2/src/psswd_box/resources/images/psswd_box-256.png +0 -0
- psswd_box-1.2.2/src/psswd_box/resources/images/psswd_box-32.png +0 -0
- psswd_box-1.2.2/src/psswd_box/resources/images/psswd_box-512.png +0 -0
- psswd_box-1.2.2/src/psswd_box/resources/images/psswd_box-64.png +0 -0
- psswd_box-1.2.2/src/psswd_box/yaml_file_handler.py +18 -0
- psswd_box-1.2.2/uv.lock +199 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
psswd_box-1.2.2/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright (c) 2025, Melvin Quick
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
in the Software without restriction, including without limitation the rights
|
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
furnished to do so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
psswd_box-1.2.2/PKG-INFO
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: psswd_box
|
|
3
|
+
Version: 1.2.2
|
|
4
|
+
Summary: Password generator that never leaves your machine.
|
|
5
|
+
Author-email: Melvin Quick <melvinquick@proton.me>
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Python: >=3.12
|
|
8
|
+
Requires-Dist: pyside6>=6.8.2.1
|
|
9
|
+
Requires-Dist: pyyaml>=6.0.2
|
|
10
|
+
Description-Content-Type: text/markdown
|
|
11
|
+
|
|
12
|
+
<p align="center"> <img src="src/psswd_box/resources/images/psswd_box-256.png" /> </p>
|
|
13
|
+
|
|
14
|
+
## Donations
|
|
15
|
+
|
|
16
|
+
- [Buy Me A Coffee](https://www.buymeacoffee.com/KingKairos)
|
|
17
|
+
- [GitHub Sponsors](https://github.com/sponsors/melvinquick)
|
|
18
|
+
|
|
19
|
+
## Purpose
|
|
20
|
+
|
|
21
|
+
The general purpose of this app is to give people an easy way to generate passwords completely locally on their machine. This doesn't rely on a cloud service, or any information leaving the local machine whatsoever.
|
|
22
|
+
|
|
23
|
+
## App Showcase
|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+
## Useful Information
|
|
28
|
+
|
|
29
|
+
- [Project Goals](https://codeberg.org/melvinquick/psswd_box/projects/12633)
|
|
30
|
+
- [Latest Release](https://codeberg.org/melvinquick/psswd_box/releases/latest)
|
|
31
|
+
- [Releases](https://codeberg.org/melvinquick/psswd_box/releases)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<p align="center"> <img src="src/psswd_box/resources/images/psswd_box-256.png" /> </p>
|
|
2
|
+
|
|
3
|
+
## Donations
|
|
4
|
+
|
|
5
|
+
- [Buy Me A Coffee](https://www.buymeacoffee.com/KingKairos)
|
|
6
|
+
- [GitHub Sponsors](https://github.com/sponsors/melvinquick)
|
|
7
|
+
|
|
8
|
+
## Purpose
|
|
9
|
+
|
|
10
|
+
The general purpose of this app is to give people an easy way to generate passwords completely locally on their machine. This doesn't rely on a cloud service, or any information leaving the local machine whatsoever.
|
|
11
|
+
|
|
12
|
+
## App Showcase
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+
|
|
16
|
+
## Useful Information
|
|
17
|
+
|
|
18
|
+
- [Project Goals](https://codeberg.org/melvinquick/psswd_box/projects/12633)
|
|
19
|
+
- [Latest Release](https://codeberg.org/melvinquick/psswd_box/releases/latest)
|
|
20
|
+
- [Releases](https://codeberg.org/melvinquick/psswd_box/releases)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
exclude_dirs:
|
|
2
|
+
[
|
|
3
|
+
"psswd_box/.venv/",
|
|
4
|
+
"psswd_box/dist/",
|
|
5
|
+
"psswd_box/src/psswd_box/__pycache__",
|
|
6
|
+
"psswd_box/src/psswd_box/resources/",
|
|
7
|
+
".gitignore",
|
|
8
|
+
".python-version",
|
|
9
|
+
"bandit.yaml",
|
|
10
|
+
"LICENSE",
|
|
11
|
+
"pyproject.toml",
|
|
12
|
+
"README.md",
|
|
13
|
+
"uv.lock",
|
|
14
|
+
]
|
|
15
|
+
tests: []
|
|
16
|
+
skips: []
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "psswd_box"
|
|
3
|
+
version = "1.2.2"
|
|
4
|
+
description = "Password generator that never leaves your machine."
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [{ name = "Melvin Quick", email = "melvinquick@proton.me" }]
|
|
7
|
+
requires-python = ">=3.12"
|
|
8
|
+
dependencies = ["pyside6>=6.8.2.1", "pyyaml>=6.0.2"]
|
|
9
|
+
|
|
10
|
+
[project.gui-scripts]
|
|
11
|
+
psswd-box = "psswd_box.app:main"
|
|
12
|
+
|
|
13
|
+
[build-system]
|
|
14
|
+
requires = ["hatchling"]
|
|
15
|
+
build-backend = "hatchling.build"
|
|
16
|
+
|
|
17
|
+
[dependency-groups]
|
|
18
|
+
dev = ["bandit>=1.8.3"]
|
|
File without changes
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Password generator that never leaves your machine.
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
from PySide6.QtCore import Qt
|
|
8
|
+
from PySide6.QtGui import QFont, QFontMetrics
|
|
9
|
+
from PySide6.QtWidgets import (
|
|
10
|
+
QApplication,
|
|
11
|
+
QMainWindow,
|
|
12
|
+
QWidget,
|
|
13
|
+
QPushButton,
|
|
14
|
+
QCheckBox,
|
|
15
|
+
QLabel,
|
|
16
|
+
QHBoxLayout,
|
|
17
|
+
QSpinBox,
|
|
18
|
+
QGridLayout,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
from psswd_box.password_generator import PasswordGenerator
|
|
22
|
+
from psswd_box.yaml_file_handler import YamlFileHandler
|
|
23
|
+
|
|
24
|
+
config_file = YamlFileHandler("resources/configs/config.yaml")
|
|
25
|
+
config = config_file.load_yaml_file()
|
|
26
|
+
|
|
27
|
+
themes_file = YamlFileHandler("resources/configs/themes.yaml")
|
|
28
|
+
themes = themes_file.load_yaml_file()
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class PsswdBox(QMainWindow):
|
|
32
|
+
def __init__(self):
|
|
33
|
+
super().__init__()
|
|
34
|
+
self.init_ui()
|
|
35
|
+
|
|
36
|
+
def init_ui(self):
|
|
37
|
+
self.show()
|
|
38
|
+
|
|
39
|
+
# * Set window default settings
|
|
40
|
+
self.setWindowTitle(config["window_title"])
|
|
41
|
+
self.setFixedSize(
|
|
42
|
+
config["window_size"]["width"], config["window_size"]["height"]
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
# * Define normal variables
|
|
46
|
+
self.theme_list = [theme for theme in list(themes)[:-1]]
|
|
47
|
+
|
|
48
|
+
# * Create end user widgets and apply settings to them
|
|
49
|
+
self.generate_password = QPushButton("Generate and Copy Password")
|
|
50
|
+
|
|
51
|
+
self.password = QLabel(
|
|
52
|
+
" ", alignment=Qt.AlignmentFlag.AlignCenter, wordWrap=False
|
|
53
|
+
)
|
|
54
|
+
self.password.setFixedWidth(560)
|
|
55
|
+
|
|
56
|
+
self.lowercase_letters = QCheckBox("Lowercase")
|
|
57
|
+
self.lowercase_letters.setCheckState(Qt.CheckState.Checked)
|
|
58
|
+
|
|
59
|
+
self.uppercase_letters = QCheckBox("Uppercase")
|
|
60
|
+
self.uppercase_letters.setCheckState(Qt.CheckState.Checked)
|
|
61
|
+
|
|
62
|
+
self.numbers = QCheckBox("Numbers")
|
|
63
|
+
self.numbers.setCheckState(Qt.CheckState.Checked)
|
|
64
|
+
|
|
65
|
+
self.symbols = QCheckBox("Symbols")
|
|
66
|
+
self.symbols.setCheckState(Qt.CheckState.Checked)
|
|
67
|
+
|
|
68
|
+
self.num_characters = QSpinBox(prefix="Number of Characters: ")
|
|
69
|
+
self.num_characters.setRange(
|
|
70
|
+
config["num_characters"]["min"], config["num_characters"]["max"]
|
|
71
|
+
)
|
|
72
|
+
self.num_characters.setValue(config["num_characters"]["default"])
|
|
73
|
+
|
|
74
|
+
self.theme_toggle = QPushButton("Dark")
|
|
75
|
+
|
|
76
|
+
# * Define button connections and/or actions
|
|
77
|
+
self.generate_password.pressed.connect(self.get_password)
|
|
78
|
+
self.generate_password.pressed.connect(self.copy_text)
|
|
79
|
+
self.theme_toggle.pressed.connect(self.toggle_theme)
|
|
80
|
+
|
|
81
|
+
# * Create layouts
|
|
82
|
+
self.page = QGridLayout()
|
|
83
|
+
self.inputs = QGridLayout()
|
|
84
|
+
self.outputs = QHBoxLayout()
|
|
85
|
+
|
|
86
|
+
# * Add widgets to layouts
|
|
87
|
+
self.inputs.addWidget(self.generate_password, 0, 0, 1, 2)
|
|
88
|
+
self.inputs.addWidget(self.lowercase_letters, 1, 0)
|
|
89
|
+
self.inputs.addWidget(self.uppercase_letters, 1, 1)
|
|
90
|
+
self.inputs.addWidget(self.numbers, 2, 0)
|
|
91
|
+
self.inputs.addWidget(self.symbols, 2, 1)
|
|
92
|
+
self.inputs.addWidget(self.num_characters, 3, 0, 1, 2)
|
|
93
|
+
self.inputs.addWidget(self.theme_toggle, 4, 0, 1, 2)
|
|
94
|
+
|
|
95
|
+
self.outputs.addWidget(self.password)
|
|
96
|
+
|
|
97
|
+
# * Setup overall page layout and set default window theme
|
|
98
|
+
self.page.addLayout(self.inputs, 0, 0)
|
|
99
|
+
self.page.addLayout(self.outputs, 0, 2)
|
|
100
|
+
|
|
101
|
+
self.gui = QWidget()
|
|
102
|
+
self.gui.setLayout(self.page)
|
|
103
|
+
|
|
104
|
+
self.setCentralWidget(self.gui)
|
|
105
|
+
|
|
106
|
+
self.apply_theme(self.theme_toggle.text().lower())
|
|
107
|
+
self.set_font()
|
|
108
|
+
|
|
109
|
+
def get_password(self):
|
|
110
|
+
character_types = self.get_character_types()
|
|
111
|
+
if character_types == ["n", "n", "n", "n"]:
|
|
112
|
+
self.password.setText("You MUST select one of the character types below!")
|
|
113
|
+
else:
|
|
114
|
+
psswd = PasswordGenerator()
|
|
115
|
+
self.password.setText(
|
|
116
|
+
psswd.generate_password(character_types, self.num_characters.value())
|
|
117
|
+
)
|
|
118
|
+
self.set_font_password()
|
|
119
|
+
|
|
120
|
+
def get_character_types(self):
|
|
121
|
+
lowercase_letters_value = "y" if self.lowercase_letters.isChecked() else "n"
|
|
122
|
+
uppercase_letters_value = "y" if self.uppercase_letters.isChecked() else "n"
|
|
123
|
+
numbers_value = "y" if self.numbers.isChecked() else "n"
|
|
124
|
+
symbols_value = "y" if self.symbols.isChecked() else "n"
|
|
125
|
+
character_types = [
|
|
126
|
+
lowercase_letters_value,
|
|
127
|
+
uppercase_letters_value,
|
|
128
|
+
numbers_value,
|
|
129
|
+
symbols_value,
|
|
130
|
+
]
|
|
131
|
+
|
|
132
|
+
return character_types
|
|
133
|
+
|
|
134
|
+
def copy_text(self):
|
|
135
|
+
clipboard = QApplication.clipboard()
|
|
136
|
+
clipboard.setText(self.password.text())
|
|
137
|
+
|
|
138
|
+
def toggle_theme(self):
|
|
139
|
+
if self.theme_toggle.text() == "Dark":
|
|
140
|
+
self.theme_toggle.setText("Light")
|
|
141
|
+
theme = self.theme_toggle.text()
|
|
142
|
+
else:
|
|
143
|
+
self.theme_toggle.setText("Dark")
|
|
144
|
+
theme = self.theme_toggle.text()
|
|
145
|
+
|
|
146
|
+
self.apply_theme(theme.lower())
|
|
147
|
+
|
|
148
|
+
def apply_theme(self, theme):
|
|
149
|
+
self.main_stylesheet = f"""
|
|
150
|
+
background-color: {themes[theme]["background-color"]};
|
|
151
|
+
color: {themes[theme]["color"]};
|
|
152
|
+
border: {themes[theme]["border"]};
|
|
153
|
+
border-radius: {themes["general"]["border-radius"]};
|
|
154
|
+
padding: {themes["general"]["padding"]};
|
|
155
|
+
"""
|
|
156
|
+
self.widget_stylesheet = f"""
|
|
157
|
+
background-color: {themes[theme]["widget-background-color"]};
|
|
158
|
+
"""
|
|
159
|
+
self.setStyleSheet(self.main_stylesheet)
|
|
160
|
+
self.password.setStyleSheet(self.widget_stylesheet)
|
|
161
|
+
self.generate_password.setStyleSheet(self.widget_stylesheet)
|
|
162
|
+
self.lowercase_letters.setStyleSheet(self.widget_stylesheet)
|
|
163
|
+
self.uppercase_letters.setStyleSheet(self.widget_stylesheet)
|
|
164
|
+
self.numbers.setStyleSheet(self.widget_stylesheet)
|
|
165
|
+
self.symbols.setStyleSheet(self.widget_stylesheet)
|
|
166
|
+
self.theme_toggle.setStyleSheet(self.widget_stylesheet)
|
|
167
|
+
self.num_characters.setStyleSheet(self.widget_stylesheet)
|
|
168
|
+
|
|
169
|
+
(
|
|
170
|
+
self.theme_toggle.setText("Dark")
|
|
171
|
+
if theme == "dark"
|
|
172
|
+
else self.theme_toggle.setText("Light")
|
|
173
|
+
)
|
|
174
|
+
|
|
175
|
+
def set_font(self):
|
|
176
|
+
font = QFont("Commit Mono Nerd Font", 9)
|
|
177
|
+
|
|
178
|
+
self.setFont(font)
|
|
179
|
+
self.generate_password.setFont(font)
|
|
180
|
+
self.lowercase_letters.setFont(font)
|
|
181
|
+
self.uppercase_letters.setFont(font)
|
|
182
|
+
self.numbers.setFont(font)
|
|
183
|
+
self.symbols.setFont(font)
|
|
184
|
+
self.theme_toggle.setFont(font)
|
|
185
|
+
self.num_characters.setFont(font)
|
|
186
|
+
|
|
187
|
+
def set_font_password(self):
|
|
188
|
+
min_font_size = 11
|
|
189
|
+
current_font_size = 65
|
|
190
|
+
font = QFont("Commit Mono Nerd Font")
|
|
191
|
+
|
|
192
|
+
while current_font_size >= min_font_size:
|
|
193
|
+
font.setPointSize(current_font_size)
|
|
194
|
+
|
|
195
|
+
if (
|
|
196
|
+
QFontMetrics(font).horizontalAdvance(self.password.text())
|
|
197
|
+
< self.password.width() - 10
|
|
198
|
+
):
|
|
199
|
+
self.password.setFont(font)
|
|
200
|
+
return
|
|
201
|
+
|
|
202
|
+
current_font_size -= 1
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def main():
|
|
206
|
+
app = QApplication(sys.argv)
|
|
207
|
+
main_window = PsswdBox() # noqa: F841
|
|
208
|
+
sys.exit(app.exec())
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
if __name__ == "__main__":
|
|
212
|
+
main()
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
from secrets import choice
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class PasswordGenerator:
|
|
5
|
+
def __init__(self):
|
|
6
|
+
self.lowercase_letters = [
|
|
7
|
+
"a",
|
|
8
|
+
"b",
|
|
9
|
+
"c",
|
|
10
|
+
"d",
|
|
11
|
+
"e",
|
|
12
|
+
"f",
|
|
13
|
+
"g",
|
|
14
|
+
"h",
|
|
15
|
+
"i",
|
|
16
|
+
"j",
|
|
17
|
+
"k",
|
|
18
|
+
"l",
|
|
19
|
+
"m",
|
|
20
|
+
"n",
|
|
21
|
+
"o",
|
|
22
|
+
"p",
|
|
23
|
+
"q",
|
|
24
|
+
"r",
|
|
25
|
+
"s",
|
|
26
|
+
"t",
|
|
27
|
+
"u",
|
|
28
|
+
"v",
|
|
29
|
+
"x",
|
|
30
|
+
"x",
|
|
31
|
+
"y",
|
|
32
|
+
"z",
|
|
33
|
+
]
|
|
34
|
+
self.uppercase_letters = [
|
|
35
|
+
"A",
|
|
36
|
+
"B",
|
|
37
|
+
"C",
|
|
38
|
+
"D",
|
|
39
|
+
"E",
|
|
40
|
+
"F",
|
|
41
|
+
"G",
|
|
42
|
+
"H",
|
|
43
|
+
"I",
|
|
44
|
+
"J",
|
|
45
|
+
"K",
|
|
46
|
+
"L",
|
|
47
|
+
"M",
|
|
48
|
+
"N",
|
|
49
|
+
"O",
|
|
50
|
+
"P",
|
|
51
|
+
"Q",
|
|
52
|
+
"R",
|
|
53
|
+
"S",
|
|
54
|
+
"T",
|
|
55
|
+
"U",
|
|
56
|
+
"V",
|
|
57
|
+
"W",
|
|
58
|
+
"X",
|
|
59
|
+
"Y",
|
|
60
|
+
"Z",
|
|
61
|
+
]
|
|
62
|
+
self.numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
|
|
63
|
+
self.symbols = [
|
|
64
|
+
"!",
|
|
65
|
+
"@",
|
|
66
|
+
"#",
|
|
67
|
+
"$",
|
|
68
|
+
"%",
|
|
69
|
+
"^",
|
|
70
|
+
"&",
|
|
71
|
+
"*",
|
|
72
|
+
"(",
|
|
73
|
+
")",
|
|
74
|
+
"[",
|
|
75
|
+
"]",
|
|
76
|
+
"{",
|
|
77
|
+
"}",
|
|
78
|
+
"\\",
|
|
79
|
+
";",
|
|
80
|
+
":",
|
|
81
|
+
'"',
|
|
82
|
+
"'",
|
|
83
|
+
"<",
|
|
84
|
+
">",
|
|
85
|
+
"/",
|
|
86
|
+
"?",
|
|
87
|
+
",",
|
|
88
|
+
"`",
|
|
89
|
+
"~",
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
def generate_password(
|
|
93
|
+
self, character_types=["y", "y", "y", "y"], num_characters=20
|
|
94
|
+
):
|
|
95
|
+
if character_types == ["n", "n", "n", "n"]:
|
|
96
|
+
print("You didn't include any character types... Exiting")
|
|
97
|
+
return exit()
|
|
98
|
+
|
|
99
|
+
choices = self.get_valid_choices(character_types)
|
|
100
|
+
character_counter = 0
|
|
101
|
+
psswd = ""
|
|
102
|
+
|
|
103
|
+
while character_counter < num_characters:
|
|
104
|
+
psswd += choice(choices)
|
|
105
|
+
character_counter += 1
|
|
106
|
+
|
|
107
|
+
return psswd
|
|
108
|
+
|
|
109
|
+
def get_valid_choices(self, character_types):
|
|
110
|
+
match character_types:
|
|
111
|
+
case ["y", "y", "y", "y"]:
|
|
112
|
+
return (
|
|
113
|
+
self.lowercase_letters
|
|
114
|
+
+ self.uppercase_letters
|
|
115
|
+
+ self.numbers
|
|
116
|
+
+ self.symbols
|
|
117
|
+
)
|
|
118
|
+
case ["y", "y", "y", "n"]:
|
|
119
|
+
return self.lowercase_letters + self.uppercase_letters + self.numbers
|
|
120
|
+
case ["y", "y", "n", "n"]:
|
|
121
|
+
return self.lowercase_letters + self.uppercase_letters
|
|
122
|
+
case ["y", "n", "n", "n"]:
|
|
123
|
+
return self.lowercase_letters
|
|
124
|
+
case ["y", "n", "y", "y"]:
|
|
125
|
+
return self.lowercase_letters + self.numbers + self.symbols
|
|
126
|
+
case ["y", "n", "y", "n"]:
|
|
127
|
+
return self.lowercase_letters + self.numbers
|
|
128
|
+
case ["y", "n", "n", "y"]:
|
|
129
|
+
return self.lowercase_letters + self.symbols
|
|
130
|
+
case ["y", "y", "n", "y"]:
|
|
131
|
+
return self.lowercase_letters + self.uppercase_letters + self.symbols
|
|
132
|
+
case ["n", "y", "y", "y"]:
|
|
133
|
+
return self.uppercase_letters + self.numbers + self.symbols
|
|
134
|
+
case ["n", "n", "y", "y"]:
|
|
135
|
+
return self.numbers + self.symbols
|
|
136
|
+
case ["n", "n", "n", "y"]:
|
|
137
|
+
return self.symbols
|
|
138
|
+
case ["n", "y", "n", "y"]:
|
|
139
|
+
return self.uppercase_letters + self.symbols
|
|
140
|
+
case ["n", "y", "n", "n"]:
|
|
141
|
+
return self.uppercase_letters
|
|
142
|
+
case ["n", "n", "y", "n"]:
|
|
143
|
+
return self.numbers
|
|
144
|
+
case ["n", "y", "y", "n"]:
|
|
145
|
+
return self.uppercase_letters + self.numbers
|
|
146
|
+
case ["n", "n", "n", "n"]:
|
|
147
|
+
print("You didn't include any character types... Exiting")
|
|
148
|
+
return exit()
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
light:
|
|
2
|
+
background-color: "#d8dee9"
|
|
3
|
+
color: "#2e3440"
|
|
4
|
+
border: 1px solid '#e5e9f0'
|
|
5
|
+
widget-background-color: "#eceff4"
|
|
6
|
+
|
|
7
|
+
dark:
|
|
8
|
+
background-color: "#2e3440"
|
|
9
|
+
color: "#eceff4"
|
|
10
|
+
border: 1px solid '#434c5e'
|
|
11
|
+
widget-background-color: "#4c566a"
|
|
12
|
+
|
|
13
|
+
general:
|
|
14
|
+
border-radius: "4px"
|
|
15
|
+
padding: "2px 4px"
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import yaml
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class YamlFileHandler:
|
|
6
|
+
def __init__(self, filename):
|
|
7
|
+
self.filename = filename
|
|
8
|
+
|
|
9
|
+
def load_yaml_file(self):
|
|
10
|
+
with open(self.get_file_path(), "r") as f:
|
|
11
|
+
return yaml.safe_load(f)
|
|
12
|
+
|
|
13
|
+
def save_yaml_file(self, configs):
|
|
14
|
+
with open(self.get_file_path(), "w") as f:
|
|
15
|
+
return yaml.safe_dump(configs, f, default_flow_style=False)
|
|
16
|
+
|
|
17
|
+
def get_file_path(self):
|
|
18
|
+
return os.path.join(os.path.dirname(__file__), self.filename)
|
psswd_box-1.2.2/uv.lock
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
version = 1
|
|
2
|
+
revision = 1
|
|
3
|
+
requires-python = ">=3.13"
|
|
4
|
+
|
|
5
|
+
[[package]]
|
|
6
|
+
name = "bandit"
|
|
7
|
+
version = "1.8.3"
|
|
8
|
+
source = { registry = "https://pypi.org/simple" }
|
|
9
|
+
dependencies = [
|
|
10
|
+
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
11
|
+
{ name = "pyyaml" },
|
|
12
|
+
{ name = "rich" },
|
|
13
|
+
{ name = "stevedore" },
|
|
14
|
+
]
|
|
15
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1a/a5/144a45f8e67df9d66c3bc3f7e69a39537db8bff1189ab7cff4e9459215da/bandit-1.8.3.tar.gz", hash = "sha256:f5847beb654d309422985c36644649924e0ea4425c76dec2e89110b87506193a", size = 4232005 }
|
|
16
|
+
wheels = [
|
|
17
|
+
{ url = "https://files.pythonhosted.org/packages/88/85/db74b9233e0aa27ec96891045c5e920a64dd5cbccd50f8e64e9460f48d35/bandit-1.8.3-py3-none-any.whl", hash = "sha256:28f04dc0d258e1dd0f99dee8eefa13d1cb5e3fde1a5ab0c523971f97b289bcd8", size = 129078 },
|
|
18
|
+
]
|
|
19
|
+
|
|
20
|
+
[[package]]
|
|
21
|
+
name = "colorama"
|
|
22
|
+
version = "0.4.6"
|
|
23
|
+
source = { registry = "https://pypi.org/simple" }
|
|
24
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 }
|
|
25
|
+
wheels = [
|
|
26
|
+
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
[[package]]
|
|
30
|
+
name = "markdown-it-py"
|
|
31
|
+
version = "3.0.0"
|
|
32
|
+
source = { registry = "https://pypi.org/simple" }
|
|
33
|
+
dependencies = [
|
|
34
|
+
{ name = "mdurl" },
|
|
35
|
+
]
|
|
36
|
+
sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596 }
|
|
37
|
+
wheels = [
|
|
38
|
+
{ url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 },
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
[[package]]
|
|
42
|
+
name = "mdurl"
|
|
43
|
+
version = "0.1.2"
|
|
44
|
+
source = { registry = "https://pypi.org/simple" }
|
|
45
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729 }
|
|
46
|
+
wheels = [
|
|
47
|
+
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 },
|
|
48
|
+
]
|
|
49
|
+
|
|
50
|
+
[[package]]
|
|
51
|
+
name = "pbr"
|
|
52
|
+
version = "6.1.1"
|
|
53
|
+
source = { registry = "https://pypi.org/simple" }
|
|
54
|
+
dependencies = [
|
|
55
|
+
{ name = "setuptools" },
|
|
56
|
+
]
|
|
57
|
+
sdist = { url = "https://files.pythonhosted.org/packages/01/d2/510cc0d218e753ba62a1bc1434651db3cd797a9716a0a66cc714cb4f0935/pbr-6.1.1.tar.gz", hash = "sha256:93ea72ce6989eb2eed99d0f75721474f69ad88128afdef5ac377eb797c4bf76b", size = 125702 }
|
|
58
|
+
wheels = [
|
|
59
|
+
{ url = "https://files.pythonhosted.org/packages/47/ac/684d71315abc7b1214d59304e23a982472967f6bf4bde5a98f1503f648dc/pbr-6.1.1-py2.py3-none-any.whl", hash = "sha256:38d4daea5d9fa63b3f626131b9d34947fd0c8be9b05a29276870580050a25a76", size = 108997 },
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
[[package]]
|
|
63
|
+
name = "psswd-box"
|
|
64
|
+
version = "1.2.2"
|
|
65
|
+
source = { editable = "." }
|
|
66
|
+
dependencies = [
|
|
67
|
+
{ name = "pyside6" },
|
|
68
|
+
{ name = "pyyaml" },
|
|
69
|
+
]
|
|
70
|
+
|
|
71
|
+
[package.dev-dependencies]
|
|
72
|
+
dev = [
|
|
73
|
+
{ name = "bandit" },
|
|
74
|
+
]
|
|
75
|
+
|
|
76
|
+
[package.metadata]
|
|
77
|
+
requires-dist = [
|
|
78
|
+
{ name = "pyside6", specifier = ">=6.8.2.1" },
|
|
79
|
+
{ name = "pyyaml", specifier = ">=6.0.2" },
|
|
80
|
+
]
|
|
81
|
+
|
|
82
|
+
[package.metadata.requires-dev]
|
|
83
|
+
dev = [{ name = "bandit", specifier = ">=1.8.3" }]
|
|
84
|
+
|
|
85
|
+
[[package]]
|
|
86
|
+
name = "pygments"
|
|
87
|
+
version = "2.19.1"
|
|
88
|
+
source = { registry = "https://pypi.org/simple" }
|
|
89
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7c/2d/c3338d48ea6cc0feb8446d8e6937e1408088a72a39937982cc6111d17f84/pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f", size = 4968581 }
|
|
90
|
+
wheels = [
|
|
91
|
+
{ url = "https://files.pythonhosted.org/packages/8a/0b/9fcc47d19c48b59121088dd6da2488a49d5f72dacf8262e2790a1d2c7d15/pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c", size = 1225293 },
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
[[package]]
|
|
95
|
+
name = "pyside6"
|
|
96
|
+
version = "6.8.2.1"
|
|
97
|
+
source = { registry = "https://pypi.org/simple" }
|
|
98
|
+
dependencies = [
|
|
99
|
+
{ name = "pyside6-addons" },
|
|
100
|
+
{ name = "pyside6-essentials" },
|
|
101
|
+
{ name = "shiboken6" },
|
|
102
|
+
]
|
|
103
|
+
wheels = [
|
|
104
|
+
{ url = "https://files.pythonhosted.org/packages/14/0f/bdb12758448b52497dba7a3bbfb5855dfb29129c64ddbda4da56c4b11f6c/PySide6-6.8.2.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:3fcb551729f235475b2abe7d919027de54a65d850e744f60716f890202273720", size = 550254 },
|
|
105
|
+
{ url = "https://files.pythonhosted.org/packages/fa/00/0b232a25eeb8671202d7a7ec92893bd25b965debfd1d5d7aad637b067efe/PySide6-6.8.2.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:23d2a1a77b25459a049c4276b4e0bbfb375b73d3921061b1a16bcfa64e1fe517", size = 550489 },
|
|
106
|
+
{ url = "https://files.pythonhosted.org/packages/8b/8a/9eb78cf71233399236c257cf85770ca4673ed0b9b959895856285157f643/PySide6-6.8.2.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:bfefa80a93db06dc64c0e7beef0377c9b8ca51e007cfc34575defe065af893b6", size = 550491 },
|
|
107
|
+
{ url = "https://files.pythonhosted.org/packages/fb/3d/3e626e1953408cb8977a050ce54b1f1adff9a4c06bb519f6d56ebaf9310c/PySide6-6.8.2.1-cp39-abi3-win_amd64.whl", hash = "sha256:92361e41727910e3560ea5ba494fabecc76cd20892c9fcb2ced07619081c4e65", size = 556167 },
|
|
108
|
+
]
|
|
109
|
+
|
|
110
|
+
[[package]]
|
|
111
|
+
name = "pyside6-addons"
|
|
112
|
+
version = "6.8.2.1"
|
|
113
|
+
source = { registry = "https://pypi.org/simple" }
|
|
114
|
+
dependencies = [
|
|
115
|
+
{ name = "pyside6-essentials" },
|
|
116
|
+
{ name = "shiboken6" },
|
|
117
|
+
]
|
|
118
|
+
wheels = [
|
|
119
|
+
{ url = "https://files.pythonhosted.org/packages/6e/79/a868ffac6eb446afdd25312b61872d0d11173032d50320d48b5277b68ccf/PySide6_Addons-6.8.2.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:5558816018042fecd0d782111ced529585a23ea9a010b518f8495764f578a01f", size = 302704501 },
|
|
120
|
+
{ url = "https://files.pythonhosted.org/packages/95/3a/93e0028805c50ceff8b8ae0f274d502805b8a864129b83d705ab12d48f78/PySide6_Addons-6.8.2.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f3d85e676851ada8238bc76ebfacbee738fc0b35b3bc15c9765dd107b8ee6ec4", size = 160641392 },
|
|
121
|
+
{ url = "https://files.pythonhosted.org/packages/84/5c/e822e4ef6c2140b273cb0f8531d7e200c8771bd61832decc524fc318c335/PySide6_Addons-6.8.2.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:d904179f16deeca4ba440b4ef78e8d54df2b994b46784ad9d53b741082f3b2a7", size = 156398179 },
|
|
122
|
+
{ url = "https://files.pythonhosted.org/packages/0a/f8/98f85194f85a1fcff44ad98cd80cf6e856f7edee9e744fba81dec48b0ae9/PySide6_Addons-6.8.2.1-cp39-abi3-win_amd64.whl", hash = "sha256:c761cc45022aa79d8419e671e7fb34a4a3e5b3826f1e68fcb819bd6e3a387fbb", size = 127973648 },
|
|
123
|
+
]
|
|
124
|
+
|
|
125
|
+
[[package]]
|
|
126
|
+
name = "pyside6-essentials"
|
|
127
|
+
version = "6.8.2.1"
|
|
128
|
+
source = { registry = "https://pypi.org/simple" }
|
|
129
|
+
dependencies = [
|
|
130
|
+
{ name = "shiboken6" },
|
|
131
|
+
]
|
|
132
|
+
wheels = [
|
|
133
|
+
{ url = "https://files.pythonhosted.org/packages/01/bb/0127a53530cec0f9e7268e2fe235322b7b6e592caeb36c558b64da6ec52c/PySide6_Essentials-6.8.2.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:ae5cc48f7e9a08e73e3ec2387ce245c8150e620b8d5a87548ebd4b8e3aeae49b", size = 134909713 },
|
|
134
|
+
{ url = "https://files.pythonhosted.org/packages/d2/f9/aa4ff511ff1f3dd177f7e8f5a635e03fe578fa2045c8d6be4577e7db3b28/PySide6_Essentials-6.8.2.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5ab31e5395a4724102edd6e8ff980fa3f7cde2aa79050763a1dcc30bb914195a", size = 95331575 },
|
|
135
|
+
{ url = "https://files.pythonhosted.org/packages/fd/69/595002d860ee58431fe7add081d6f54fff94ae9680f2eb8cd355c1649bb6/PySide6_Essentials-6.8.2.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:7aed46f91d44399b4c713cf7387f5fb6f0114413fbcdbde493a528fb8e19f6ed", size = 93200219 },
|
|
136
|
+
{ url = "https://files.pythonhosted.org/packages/5b/54/28a8b03f327e2c1d27d4a1ccf1a44997afc73c00ad07125d889640367194/PySide6_Essentials-6.8.2.1-cp39-abi3-win_amd64.whl", hash = "sha256:18de224f09108998d194e60f2fb8a1e86367dd525dd8a6192598e80e6ada649e", size = 72502927 },
|
|
137
|
+
]
|
|
138
|
+
|
|
139
|
+
[[package]]
|
|
140
|
+
name = "pyyaml"
|
|
141
|
+
version = "6.0.2"
|
|
142
|
+
source = { registry = "https://pypi.org/simple" }
|
|
143
|
+
sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 }
|
|
144
|
+
wheels = [
|
|
145
|
+
{ url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 },
|
|
146
|
+
{ url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 },
|
|
147
|
+
{ url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 },
|
|
148
|
+
{ url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 },
|
|
149
|
+
{ url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 },
|
|
150
|
+
{ url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 },
|
|
151
|
+
{ url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 },
|
|
152
|
+
{ url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 },
|
|
153
|
+
{ url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 },
|
|
154
|
+
]
|
|
155
|
+
|
|
156
|
+
[[package]]
|
|
157
|
+
name = "rich"
|
|
158
|
+
version = "13.9.4"
|
|
159
|
+
source = { registry = "https://pypi.org/simple" }
|
|
160
|
+
dependencies = [
|
|
161
|
+
{ name = "markdown-it-py" },
|
|
162
|
+
{ name = "pygments" },
|
|
163
|
+
]
|
|
164
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", size = 223149 }
|
|
165
|
+
wheels = [
|
|
166
|
+
{ url = "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", size = 242424 },
|
|
167
|
+
]
|
|
168
|
+
|
|
169
|
+
[[package]]
|
|
170
|
+
name = "setuptools"
|
|
171
|
+
version = "76.0.0"
|
|
172
|
+
source = { registry = "https://pypi.org/simple" }
|
|
173
|
+
sdist = { url = "https://files.pythonhosted.org/packages/32/d2/7b171caf085ba0d40d8391f54e1c75a1cda9255f542becf84575cfd8a732/setuptools-76.0.0.tar.gz", hash = "sha256:43b4ee60e10b0d0ee98ad11918e114c70701bc6051662a9a675a0496c1a158f4", size = 1349387 }
|
|
174
|
+
wheels = [
|
|
175
|
+
{ url = "https://files.pythonhosted.org/packages/37/66/d2d7e6ad554f3a7c7297c3f8ef6e22643ad3d35ef5c63bf488bc89f32f31/setuptools-76.0.0-py3-none-any.whl", hash = "sha256:199466a166ff664970d0ee145839f5582cb9bca7a0a3a2e795b6a9cb2308e9c6", size = 1236106 },
|
|
176
|
+
]
|
|
177
|
+
|
|
178
|
+
[[package]]
|
|
179
|
+
name = "shiboken6"
|
|
180
|
+
version = "6.8.2.1"
|
|
181
|
+
source = { registry = "https://pypi.org/simple" }
|
|
182
|
+
wheels = [
|
|
183
|
+
{ url = "https://files.pythonhosted.org/packages/d8/8f/71ccc3642edb59efaca35d4ba974248b1d7847f5e4d87d3ea323e73b2cab/shiboken6-6.8.2.1-cp39-abi3-macosx_12_0_universal2.whl", hash = "sha256:d3dedeb3732ecfc920c9f97da769c0022a1c3bda99346a9eba56fbf093deaa75", size = 401266 },
|
|
184
|
+
{ url = "https://files.pythonhosted.org/packages/7b/ff/ab4f287b9573e50b5a47c10e2af8feb5abecc3c7431bd5deec135efc969e/shiboken6-6.8.2.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c83e90056f13d0872cc4d2b7bf60b6d6e3b1b172f1f91910c0ba5b641af01758", size = 204273 },
|
|
185
|
+
{ url = "https://files.pythonhosted.org/packages/a6/b0/4fb102eb5260ee06d379769f3c4f0b82ef397c15f1cbbbbb3f6dceb86d5d/shiboken6-6.8.2.1-cp39-abi3-manylinux_2_39_aarch64.whl", hash = "sha256:8592401423acc693f51dbbfae5e7493cc3ed6738be79daaf90afa07f4da5bb25", size = 200909 },
|
|
186
|
+
{ url = "https://files.pythonhosted.org/packages/ae/88/b56bdb38a11066e4eecd1da6be4205bb406398b733b392b11c5aaf9547f7/shiboken6-6.8.2.1-cp39-abi3-win_amd64.whl", hash = "sha256:1b751d47b759762b7ca31bad278d52eca4105d3028880d93979261ebbfba810c", size = 1150270 },
|
|
187
|
+
]
|
|
188
|
+
|
|
189
|
+
[[package]]
|
|
190
|
+
name = "stevedore"
|
|
191
|
+
version = "5.4.1"
|
|
192
|
+
source = { registry = "https://pypi.org/simple" }
|
|
193
|
+
dependencies = [
|
|
194
|
+
{ name = "pbr" },
|
|
195
|
+
]
|
|
196
|
+
sdist = { url = "https://files.pythonhosted.org/packages/28/3f/13cacea96900bbd31bb05c6b74135f85d15564fc583802be56976c940470/stevedore-5.4.1.tar.gz", hash = "sha256:3135b5ae50fe12816ef291baff420acb727fcd356106e3e9cbfa9e5985cd6f4b", size = 513858 }
|
|
197
|
+
wheels = [
|
|
198
|
+
{ url = "https://files.pythonhosted.org/packages/f7/45/8c4ebc0c460e6ec38e62ab245ad3c7fc10b210116cea7c16d61602aa9558/stevedore-5.4.1-py3-none-any.whl", hash = "sha256:d10a31c7b86cba16c1f6e8d15416955fc797052351a56af15e608ad20811fcfe", size = 49533 },
|
|
199
|
+
]
|