persian-devkit 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.
- persian_devkit-1.0.0/LICENSE.txt +21 -0
- persian_devkit-1.0.0/PKG-INFO +702 -0
- persian_devkit-1.0.0/README.md +661 -0
- persian_devkit-1.0.0/persian_devkit/__init__.py +4 -0
- persian_devkit-1.0.0/persian_devkit/__main__.py +5 -0
- persian_devkit-1.0.0/persian_devkit/cli.py +55 -0
- persian_devkit-1.0.0/persian_devkit/commands/__init__.py +16 -0
- persian_devkit-1.0.0/persian_devkit/commands/base64_cmd.py +51 -0
- persian_devkit-1.0.0/persian_devkit/commands/color_cmd.py +143 -0
- persian_devkit-1.0.0/persian_devkit/commands/csv_cmd.py +121 -0
- persian_devkit-1.0.0/persian_devkit/commands/date_cmd.py +98 -0
- persian_devkit-1.0.0/persian_devkit/commands/env_cmd.py +100 -0
- persian_devkit-1.0.0/persian_devkit/commands/gitignore_cmd.py +68 -0
- persian_devkit-1.0.0/persian_devkit/commands/hash_cmd.py +71 -0
- persian_devkit-1.0.0/persian_devkit/commands/image_cmd.py +88 -0
- persian_devkit-1.0.0/persian_devkit/commands/jq_cmd.py +92 -0
- persian_devkit-1.0.0/persian_devkit/commands/json_cmd.py +135 -0
- persian_devkit-1.0.0/persian_devkit/commands/license_cmd.py +67 -0
- persian_devkit-1.0.0/persian_devkit/commands/lorem_cmd.py +53 -0
- persian_devkit-1.0.0/persian_devkit/commands/name_cmd.py +98 -0
- persian_devkit-1.0.0/persian_devkit/commands/number_cmd.py +65 -0
- persian_devkit-1.0.0/persian_devkit/commands/password_cmd.py +55 -0
- persian_devkit-1.0.0/persian_devkit/commands/qrcode_cmd.py +46 -0
- persian_devkit-1.0.0/persian_devkit/commands/random_cmd.py +110 -0
- persian_devkit-1.0.0/persian_devkit/commands/scaffold_cmd.py +155 -0
- persian_devkit-1.0.0/persian_devkit/commands/template_cmd.py +87 -0
- persian_devkit-1.0.0/persian_devkit/commands/text_cmd.py +157 -0
- persian_devkit-1.0.0/persian_devkit/commands/time_cmd.py +96 -0
- persian_devkit-1.0.0/persian_devkit/commands/toml_cmd.py +85 -0
- persian_devkit-1.0.0/persian_devkit/commands/url_cmd.py +102 -0
- persian_devkit-1.0.0/persian_devkit/commands/uuid_cmd.py +45 -0
- persian_devkit-1.0.0/persian_devkit/commands/yaml_cmd.py +94 -0
- persian_devkit-1.0.0/persian_devkit/main.py +63 -0
- persian_devkit-1.0.0/persian_devkit/py.typed +0 -0
- persian_devkit-1.0.0/persian_devkit/utils/__init__.py +1 -0
- persian_devkit-1.0.0/persian_devkit/utils/color_utils.py +112 -0
- persian_devkit-1.0.0/persian_devkit/utils/crypto_utils.py +157 -0
- persian_devkit-1.0.0/persian_devkit/utils/data_utils.py +146 -0
- persian_devkit-1.0.0/persian_devkit/utils/date_utils.py +58 -0
- persian_devkit-1.0.0/persian_devkit/utils/fake_utils.py +144 -0
- persian_devkit-1.0.0/persian_devkit/utils/gitignore_data.py +211 -0
- persian_devkit-1.0.0/persian_devkit/utils/image_utils.py +37 -0
- persian_devkit-1.0.0/persian_devkit/utils/jsonpath_utils.py +94 -0
- persian_devkit-1.0.0/persian_devkit/utils/license_data.py +190 -0
- persian_devkit-1.0.0/persian_devkit/utils/number_utils.py +78 -0
- persian_devkit-1.0.0/persian_devkit/utils/qrcode_utils.py +84 -0
- persian_devkit-1.0.0/persian_devkit/utils/text_utils.py +166 -0
- persian_devkit-1.0.0/persian_devkit/utils/time_utils.py +81 -0
- persian_devkit-1.0.0/persian_devkit/utils/url_utils.py +54 -0
- persian_devkit-1.0.0/pyproject.toml +85 -0
- persian_devkit-1.0.0/tests/__init__.py +0 -0
- persian_devkit-1.0.0/tests/test_cli.py +278 -0
- persian_devkit-1.0.0/tests/test_color_qr_image.py +296 -0
- persian_devkit-1.0.0/tests/test_crypto.py +123 -0
- persian_devkit-1.0.0/tests/test_data.py +299 -0
- persian_devkit-1.0.0/tests/test_date.py +65 -0
- persian_devkit-1.0.0/tests/test_fake_jq.py +237 -0
- persian_devkit-1.0.0/tests/test_json.py +81 -0
- persian_devkit-1.0.0/tests/test_new_cmds.py +151 -0
- persian_devkit-1.0.0/tests/test_number.py +63 -0
- persian_devkit-1.0.0/tests/test_project.py +295 -0
- persian_devkit-1.0.0/tests/test_text.py +63 -0
- persian_devkit-1.0.0/tests/test_url_time.py +278 -0
- persian_devkit-1.0.0/tests/test_uuid.py +24 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 sobhan Osman zadeh
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,702 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: persian-devkit
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: جعبهابزار خط فرمان برای توسعهدهندگان فارسیزبان (تاریخ، عدد، متن، UUID، JSON)
|
|
5
|
+
Project-URL: Homepage, https://github.com/your-username/persian-devkit
|
|
6
|
+
Project-URL: Repository, https://github.com/your-username/persian-devkit
|
|
7
|
+
Project-URL: Issues, https://github.com/your-username/persian-devkit/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/your-username/persian-devkit/blob/main/CHANGELOG.md
|
|
9
|
+
Author-email: sobhan osman zadeh <sobhanosmanzadeh1@gmail.com>
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE.txt
|
|
12
|
+
Keywords: cli,developer-tools,devkit,farsi,jalali,persian,shamsi
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Natural Language :: Persian
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Classifier: Topic :: Utilities
|
|
25
|
+
Requires-Python: >=3.10
|
|
26
|
+
Requires-Dist: jdatetime>=4.1.0
|
|
27
|
+
Requires-Dist: pillow>=10.0.0
|
|
28
|
+
Requires-Dist: python-bidi>=0.4.2
|
|
29
|
+
Requires-Dist: pyyaml>=6.0.1
|
|
30
|
+
Requires-Dist: qrcode>=7.4.2
|
|
31
|
+
Requires-Dist: rich>=13.7.0
|
|
32
|
+
Requires-Dist: tomli-w>=1.0.0
|
|
33
|
+
Requires-Dist: tomli>=2.0.1; python_version < '3.11'
|
|
34
|
+
Requires-Dist: typer>=0.12.0
|
|
35
|
+
Provides-Extra: dev
|
|
36
|
+
Requires-Dist: build>=1.2; extra == 'dev'
|
|
37
|
+
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
|
|
38
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: twine>=5.1; extra == 'dev'
|
|
40
|
+
Description-Content-Type: text/markdown
|
|
41
|
+
|
|
42
|
+
# persian-devkit
|
|
43
|
+
|
|
44
|
+
> جعبهابزار خط فرمان برای توسعهدهندگان فارسیزبان — تاریخ، عدد، متن، UUID و JSON در یک CLI سریع و زیبا.
|
|
45
|
+
|
|
46
|
+
[](https://pypi.org/project/persian-devkit/)
|
|
47
|
+
[](https://www.python.org/)
|
|
48
|
+
[](LICENSE)
|
|
49
|
+

|
|
50
|
+

|
|
51
|
+

|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## چرا persian-devkit؟
|
|
55
|
+
|
|
56
|
+
هر توسعهدهندهٔ ایرانی روزانه با کارهای تکراری مثل تبدیل تاریخ شمسی، اصلاح نیمفاصله، تبدیل اعداد فارسی، ساخت UUID و … سروکار دارد. **pdev** همهٔ این کارها را در یک دستور ساده و یکپارچه جمع میکند.
|
|
57
|
+
|
|
58
|
+
- سبک و سریع
|
|
59
|
+
- خروجی رنگی با Rich
|
|
60
|
+
- کار روی Linux، macOS و Windows
|
|
61
|
+
- تستشده با pytest (پوشش ۸۰٪+)
|
|
62
|
+
- پشتیبانی از stdin و pipe
|
|
63
|
+
- شلکامپلیشن برای bash و zsh
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## نصب
|
|
68
|
+
|
|
69
|
+
**نسخهٔ فعلی:** 1.0.0 — پایدار
|
|
70
|
+
|
|
71
|
+
شامل **۳۷ دستور** و **۱۱۰+ زیرفرمان** برای کارهای روزمره:
|
|
72
|
+
تاریخ شمسی، متن فارسی، اعداد، JSON، YAML، TOML، CSV، URL، رنگ،
|
|
73
|
+
QR Code، تصویر، دادههای نمونهٔ فارسی، و ابزارهای پروژه.
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pip install persian-devkit
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
یا نصب توسعه:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
git clone https://github.com/your-username/persian-devkit
|
|
83
|
+
cd persian-devkit
|
|
84
|
+
pip install -e ".[dev]"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## شروع سریع
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
pdev --help
|
|
93
|
+
pdev date now
|
|
94
|
+
pdev number words 1234
|
|
95
|
+
echo "می روم" | pdev text halfspace
|
|
96
|
+
pdev uuid new --count 3
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## دستورات
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
### 🔐 `pdev base64` — رمزگذاری و رمزگشایی
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
$ pdev base64 encode "hello world"
|
|
108
|
+
aGVsbG8gd29ybGQ=
|
|
109
|
+
|
|
110
|
+
$ pdev base64 decode "aGVsbG8gd29ybGQ="
|
|
111
|
+
hello world
|
|
112
|
+
|
|
113
|
+
$ echo "سلام" | pdev base64 encode
|
|
114
|
+
2LPZhNin2YU=
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### 🧮 `pdev hash` — محاسبهٔ هش
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
$ pdev hash text "hello"
|
|
121
|
+
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
|
|
122
|
+
|
|
123
|
+
$ pdev hash text "hello" --algo md5
|
|
124
|
+
5d41402abc4b2a76b9719d911017c592
|
|
125
|
+
|
|
126
|
+
$ pdev hash file myfile.zip --algo sha512
|
|
127
|
+
...
|
|
128
|
+
|
|
129
|
+
$ pdev hash all "hello"
|
|
130
|
+
┏━━━━━━━━━ 🔐 هشها ━━━━━━━━━┓
|
|
131
|
+
┃ الگوریتم │ مقدار ┃
|
|
132
|
+
┡━━━━━━━━━╇━━━━━━━━━━━━━━━┩
|
|
133
|
+
│ md5 │ 5d41402a... │
|
|
134
|
+
│ sha1 │ aaf4c61d... │
|
|
135
|
+
│ sha256 │ 2cf24dba... │
|
|
136
|
+
│ ... │ ... │
|
|
137
|
+
└──────────┴────────────────┘
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### 🔑 `pdev password` — تولید و سنجش رمز
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
$ pdev password new
|
|
144
|
+
k9$mN2#pQ8@xL4zW
|
|
145
|
+
|
|
146
|
+
$ pdev password new --length 32 --count 3
|
|
147
|
+
...
|
|
148
|
+
|
|
149
|
+
$ pdev password check "abc123"
|
|
150
|
+
┏━━━━━━━━ 🔒 قدرت رمز ━━━━━━━━┓
|
|
151
|
+
┃ شاخص │ مقدار ┃
|
|
152
|
+
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
|
|
153
|
+
│ امتیاز │ 30/100 │
|
|
154
|
+
│ برچسب │ ضعیف │
|
|
155
|
+
│ آنتروپی │ 37.6 بیت │
|
|
156
|
+
└─────────┴──────────────────┘
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 🎲 `pdev random` — مقادیر تصادفی
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
$ pdev random int 1 100
|
|
163
|
+
42
|
|
164
|
+
|
|
165
|
+
$ pdev random str --length 16
|
|
166
|
+
aB3kL9mN2pQ8xY4z
|
|
167
|
+
|
|
168
|
+
$ pdev random choice a b c d
|
|
169
|
+
b
|
|
170
|
+
|
|
171
|
+
$ pdev random coin
|
|
172
|
+
شیر
|
|
173
|
+
|
|
174
|
+
$ pdev random dice --sides 20
|
|
175
|
+
17
|
|
176
|
+
|
|
177
|
+
$ pdev random nanoid
|
|
178
|
+
V1StGXR8_Z5jdHi6B-myT
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### ✍️ `pdev text` — دستورات پیشرفتهٔ جدید
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
$ pdev text slug "سلام دنیا"
|
|
185
|
+
سلام-دنیا
|
|
186
|
+
|
|
187
|
+
$ pdev text slug "Hello, World! 2024" --max-length 15
|
|
188
|
+
hello-world-2024
|
|
189
|
+
|
|
190
|
+
$ pdev text case upper "hello world"
|
|
191
|
+
HELLO WORLD
|
|
192
|
+
|
|
193
|
+
$ pdev text case title "hello world"
|
|
194
|
+
Hello World
|
|
195
|
+
|
|
196
|
+
$ pdev text diff "line1\nline2" "line1\nline3"
|
|
197
|
+
- line2
|
|
198
|
+
+ line3
|
|
199
|
+
|
|
200
|
+
$ pdev text regex "\d+" "a1b22c333"
|
|
201
|
+
✓ مطابقت یافت شد.
|
|
202
|
+
تعداد: 3
|
|
203
|
+
• 1
|
|
204
|
+
• 22
|
|
205
|
+
• 333
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
### 🔗 `pdev url` — کار با URL
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
$ pdev url encode "سلام دنیا"
|
|
212
|
+
%D8%B3%D9%84%D8%A7%D9%85%20%D8%AF%D9%86%DB%8C%D8%A7
|
|
213
|
+
|
|
214
|
+
$ pdev url decode "%D8%B3%D9%84%D8%A7%D9%85"
|
|
215
|
+
سلام
|
|
216
|
+
|
|
217
|
+
$ pdev url parse "https://example.com:8080/path?x=1&y=2#frag"
|
|
218
|
+
┏━━━━━━━━ 🔗 URL ━━━━━━━━┓
|
|
219
|
+
┃ بخش │ مقدار ┃
|
|
220
|
+
┡━━━━━━━━━╇━━━━━━━━━━━━━┩
|
|
221
|
+
│ scheme │ https │
|
|
222
|
+
│ netloc │ example.com:8080 │
|
|
223
|
+
│ host │ example.com │
|
|
224
|
+
│ port │ 8080 │
|
|
225
|
+
│ path │ /path │
|
|
226
|
+
│ query.x │ 1 │
|
|
227
|
+
│ query.y │ 2 │
|
|
228
|
+
│ fragment │ frag │
|
|
229
|
+
└──────────┴──────────────┘
|
|
230
|
+
|
|
231
|
+
$ pdev url build name=ali age=30
|
|
232
|
+
name=ali&age=30
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### ⏱ `pdev time` — timestamp و مدت زمان
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
$ pdev time now
|
|
239
|
+
1737000000
|
|
240
|
+
|
|
241
|
+
$ pdev time from-unix 0
|
|
242
|
+
1970-01-01 00:00:00 UTC
|
|
243
|
+
|
|
244
|
+
$ pdev time to-unix "2024-01-01 12:00:00"
|
|
245
|
+
1704110400
|
|
246
|
+
|
|
247
|
+
$ pdev time duration "2h30m"
|
|
248
|
+
┏━━━━━━━━ ⏱ مدت زمان ━━━━━━━━┓
|
|
249
|
+
┃ شاخص │ مقدار ┃
|
|
250
|
+
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
|
|
251
|
+
│ ثانیه │ 9,000 │
|
|
252
|
+
│ خوانا │ 2 ساعت و 30 دقیقه│
|
|
253
|
+
└─────────┴──────────────────┘
|
|
254
|
+
|
|
255
|
+
$ pdev time ago 1700000000
|
|
256
|
+
14 روز و 3 ساعت پیش
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
### `pdev date` — تبدیل و محاسبهٔ تاریخ
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
$ pdev date to-jalali 2024-03-21
|
|
266
|
+
1403/01/02
|
|
267
|
+
|
|
268
|
+
$ pdev date to-gregorian 1403/01/02
|
|
269
|
+
2024-03-21
|
|
270
|
+
|
|
271
|
+
$ pdev date now
|
|
272
|
+
┏━━━━━━━━━ اکنون ━━━━━━━━━┓
|
|
273
|
+
┃ تقویم │ مقدار ┃
|
|
274
|
+
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩
|
|
275
|
+
│ میلادی │ 2026-09-11 14:32:01│
|
|
276
|
+
│ شمسی │ 1405/06/20 14:32:01│
|
|
277
|
+
│ روز │جمعه │
|
|
278
|
+
└─────────┴────────────────────┘
|
|
279
|
+
|
|
280
|
+
$ pdev date diff 1402/01/01 1403/01/01
|
|
281
|
+
اختلاف: 365 روز
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### 🎨 `pdev color` — کار با رنگها
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
$ pdev color convert "#ff0000"
|
|
288
|
+
┏━━━━━━━━━━━ 🎨 #ff0000 ━━━━━━━━━━┓
|
|
289
|
+
┃ فرمت │ مقدار ┃
|
|
290
|
+
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩
|
|
291
|
+
│ HEX │ #ff0000 │
|
|
292
|
+
│ RGB │ rgb(255, 0, 0) │
|
|
293
|
+
│ HSL │ hsl(0, 100%, 50%) │
|
|
294
|
+
│ روشنایی │ 50.0% │
|
|
295
|
+
│ نمایش │ ██████████ │
|
|
296
|
+
└──────────┴───────────────────────┘
|
|
297
|
+
|
|
298
|
+
$ pdev color palette "#ff8800" --count 5
|
|
299
|
+
$ pdev color random --pleasant --count 3
|
|
300
|
+
$ pdev color contrast "#000" "#fff"
|
|
301
|
+
نسبت کنتراست: 21.00:1
|
|
302
|
+
سطح WCAG: AAA ✓
|
|
303
|
+
$ pdev color complement "#ff0000"
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
### 📱 `pdev qrcode` — تولید QR Code
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
$ pdev qrcode "سلام دنیا"
|
|
310
|
+
▄▄▄▄▄▄▄ ▄ ▄▄▄▄▄▄▄
|
|
311
|
+
█ ▄▄▄ █ █▄▀█ █ ▄▄▄ █
|
|
312
|
+
█ ███ █ ▄▀ ▀ █ ███ █
|
|
313
|
+
█▄▄▄▄▄█ ▀▄▀ █▄▄▄▄▄█
|
|
314
|
+
...
|
|
315
|
+
|
|
316
|
+
$ pdev qrcode "https://github.com" -o qr.png
|
|
317
|
+
✓ ذخیره شد: qr.png
|
|
318
|
+
|
|
319
|
+
$ pdev qrcode "متن فارسی" -e H --box-size 15 -o high.png
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### 🖼 `pdev image` — اطلاعات و تبدیل تصویر
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
$ pdev image info photo.jpg
|
|
326
|
+
┏━━━━━━━━━━━ 🖼 photo.jpg ━━━━━━━━━━┓
|
|
327
|
+
┃ شاخص │ مقدار ┃
|
|
328
|
+
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━┩
|
|
329
|
+
│ فرمت │ JPEG │
|
|
330
|
+
│ حالت رنگی │ RGB │
|
|
331
|
+
│ ابعاد │ 1920 × 1080 │
|
|
332
|
+
│ اندازه │ 245.3 KB │
|
|
333
|
+
└─────────────┴──────────────────────┘
|
|
334
|
+
|
|
335
|
+
$ pdev image resize photo.jpg 800
|
|
336
|
+
✓ ذخیره شد: photo_resized.jpg
|
|
337
|
+
|
|
338
|
+
$ pdev image convert photo.png photo.jpg --quality 85
|
|
339
|
+
✓ ذخیره شد: photo.jpg
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
### `pdev number` — تبدیل و قالببندی اعداد
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
$ pdev number to-persian 1234567
|
|
347
|
+
۱۲۳۴۵۶۷
|
|
348
|
+
|
|
349
|
+
$ pdev number to-english ۱۲۳۴۵۶۷
|
|
350
|
+
1234567
|
|
351
|
+
|
|
352
|
+
$ pdev number format 1234567
|
|
353
|
+
1,234,567
|
|
354
|
+
|
|
355
|
+
$ pdev number words 1234
|
|
356
|
+
یک هزار و دویست و سی و چهار
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
### `pdev text` — پاکسازی و پردازش متن
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
$ pdev text halfspace "می روم"
|
|
363
|
+
میروم
|
|
364
|
+
|
|
365
|
+
$ pdev text normalize "سلام دنيا"
|
|
366
|
+
سلام دنیا
|
|
367
|
+
|
|
368
|
+
$ pdev text reverse "سلام"
|
|
369
|
+
مالس
|
|
370
|
+
|
|
371
|
+
$ pdev text stats "یک متن نمونه"
|
|
372
|
+
┏━━━━━━━━━━ آمار متن ━━━━━━━━━━┓
|
|
373
|
+
┃ شاخص │ مقدار ┃
|
|
374
|
+
┡━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━┩
|
|
375
|
+
│ کاراکترها │ 12 │
|
|
376
|
+
│ کاراکترهای غیرفاصله│ 10 │
|
|
377
|
+
│ کلمات │ 3 │
|
|
378
|
+
│ خطوط │ 1 │
|
|
379
|
+
│ جملات │ 1 │
|
|
380
|
+
└───────────────────┴─────────────┘
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
پشتیبانی از stdin:
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
$ echo "می روم" | pdev text halfspace
|
|
387
|
+
میروم
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### `pdev uuid` — تولید UUID
|
|
391
|
+
|
|
392
|
+
```bash
|
|
393
|
+
$ pdev uuid new
|
|
394
|
+
c4f9e78c-2b8a-4b8c-9d2f-3e8a1b5f6c7d
|
|
395
|
+
|
|
396
|
+
$ pdev uuid new --count 3
|
|
397
|
+
...
|
|
398
|
+
|
|
399
|
+
$ pdev uuid short
|
|
400
|
+
3q2_4rT9wZkA8bC1dE5fG7
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### `pdev json` — کار با JSON
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
$ pdev json pretty data.json
|
|
407
|
+
{
|
|
408
|
+
"name": "علی",
|
|
409
|
+
"age": 30
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
$ pdev json minify data.json
|
|
413
|
+
{"name":"علی","age":30}
|
|
414
|
+
|
|
415
|
+
$ pdev json validate data.json
|
|
416
|
+
✓ JSON معتبر است.
|
|
417
|
+
|
|
418
|
+
$ pdev json keys data.json
|
|
419
|
+
• name
|
|
420
|
+
• age
|
|
421
|
+
|
|
422
|
+
$ pdev json flatten nested.json
|
|
423
|
+
{
|
|
424
|
+
"user.name": "ali",
|
|
425
|
+
"user.tags[0]": "a",
|
|
426
|
+
"user.tags[1]": "b"
|
|
427
|
+
}
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
---
|
|
431
|
+
|
|
432
|
+
## گزینههای سراسری
|
|
433
|
+
|
|
434
|
+
| گزینه | توضیح |
|
|
435
|
+
|-------|-------|
|
|
436
|
+
| `--version`, `-V` | نمایش نسخه |
|
|
437
|
+
| `--verbose`, `-v` | خروجی با جزئیات بیشتر |
|
|
438
|
+
| `--quiet`, `-q` | کاهش پیامهای اضافی |
|
|
439
|
+
| `--help` | راهنما |
|
|
440
|
+
|
|
441
|
+
---
|
|
442
|
+
|
|
443
|
+
## Completion
|
|
444
|
+
|
|
445
|
+
پس از نصب، برای فعالسازی auto-completion:
|
|
446
|
+
|
|
447
|
+
```bash
|
|
448
|
+
# bash
|
|
449
|
+
pdev --install-completion bash && source ~/.bashrc
|
|
450
|
+
|
|
451
|
+
# zsh
|
|
452
|
+
pdev --install-completion zsh && source ~/.zshrc
|
|
453
|
+
|
|
454
|
+
# PowerShell (Windows)
|
|
455
|
+
pdev --install-completion powershell
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## توسعه
|
|
461
|
+
|
|
462
|
+
```bash
|
|
463
|
+
git clone https://github.com/your-username/persian-devkit
|
|
464
|
+
cd persian-devkit
|
|
465
|
+
python -m venv .venv && source .venv/bin/activate
|
|
466
|
+
pip install -e ".[dev]"
|
|
467
|
+
pytest
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
ساختار پروژه:
|
|
471
|
+
|
|
472
|
+
```
|
|
473
|
+
persian-devkit/
|
|
474
|
+
├── src/
|
|
475
|
+
│ └── persian_devkit/
|
|
476
|
+
│ ├── init.py
|
|
477
|
+
│ ├── main.py
|
|
478
|
+
│ ├── cli.py
|
|
479
|
+
│ ├── commands/
|
|
480
|
+
│ │ ├── init.py
|
|
481
|
+
│ │ ├── date_cmd.py
|
|
482
|
+
│ │ ├── number_cmd.py
|
|
483
|
+
│ │ ├── text_cmd.py
|
|
484
|
+
│ │ ├── uuid_cmd.py
|
|
485
|
+
│ │ └── json_cmd.py
|
|
486
|
+
│ └── utils/
|
|
487
|
+
│ ├── init.py
|
|
488
|
+
│ ├── date_utils.py
|
|
489
|
+
│ ├── number_utils.py
|
|
490
|
+
│ └── text_utils.py
|
|
491
|
+
├── tests/
|
|
492
|
+
│ ├── test_date.py
|
|
493
|
+
│ ├── test_number.py
|
|
494
|
+
│ ├── test_text.py
|
|
495
|
+
│ ├── test_uuid.py
|
|
496
|
+
│ └── test_json.py
|
|
497
|
+
├── pyproject.toml
|
|
498
|
+
├── README.md
|
|
499
|
+
├── LICENSE
|
|
500
|
+
└── requirements.txt
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
## انتشار در PyPI
|
|
506
|
+
|
|
507
|
+
### آمادهسازی
|
|
508
|
+
|
|
509
|
+
```bash
|
|
510
|
+
pip install --upgrade build twine
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### بیلد
|
|
514
|
+
|
|
515
|
+
```bash
|
|
516
|
+
rm -rf dist/ build/ src/*.egg-info
|
|
517
|
+
python -m build
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
این دستور دو فایل در `dist/` میسازد:
|
|
521
|
+
- `persian_devkit-0.1.0-py3-none-any.whl`
|
|
522
|
+
- `persian_devkit-0.1.0.tar.gz`
|
|
523
|
+
|
|
524
|
+
### تست محلی
|
|
525
|
+
|
|
526
|
+
```bash
|
|
527
|
+
python -m twine check dist/*
|
|
528
|
+
pip install dist/*.whl
|
|
529
|
+
pdev --version
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
### آپلود به TestPyPI (پیشنهادی)
|
|
533
|
+
|
|
534
|
+
```bash
|
|
535
|
+
python -m twine upload --repository testpypi dist/*
|
|
536
|
+
pip install -i https://test.pypi.org/simple/ persian-devkit
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
### آپلود به PyPI
|
|
540
|
+
|
|
541
|
+
```bash
|
|
542
|
+
python -m twine upload dist/*
|
|
543
|
+
```
|
|
544
|
+
|
|
545
|
+
سپس هر کاربر میتواند با یک دستور نصب کند:
|
|
546
|
+
|
|
547
|
+
```bash
|
|
548
|
+
pip install persian-devkit
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
> برای اطلاعات بیشتر دربارهٔ `~/.pypirc` و کلیدهای API، به [مستندات رسمی PyPI](https://packaging.python.org/) مراجعه کن.
|
|
552
|
+
|
|
553
|
+
---
|
|
554
|
+
|
|
555
|
+
## مجوز
|
|
556
|
+
|
|
557
|
+
MIT © 2026 — برای جزئیات `LICENSE` را ببین.
|
|
558
|
+
|
|
559
|
+
### نکتهٔ کاربران ویندوز
|
|
560
|
+
|
|
561
|
+
برای پشتیبانی کامل از متن فارسی در CMD، ابتدا در ترمینال خود این را اجرا کنید:
|
|
562
|
+
|
|
563
|
+
chcp 65001
|
|
564
|
+
|
|
565
|
+
یا از PowerShell استفاده کنید که بهطور پیشفرض UTF-8 است:
|
|
566
|
+
|
|
567
|
+
"می روم" | pdev text halfspace
|
|
568
|
+
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
|
|
573
|
+
|
|
574
|
+
|
|
575
|
+
|
|
576
|
+
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
### `pdev yaml` / `pdev toml` / `pdev csv` / `pdev env`
|
|
581
|
+
|
|
582
|
+
تبدیل و اعتبارسنجی دادههای ساختاریافته:
|
|
583
|
+
|
|
584
|
+
```bash
|
|
585
|
+
$ pdev yaml to-json config.yaml
|
|
586
|
+
$ pdev yaml from-json data.json -o config.yaml
|
|
587
|
+
$ pdev toml to-json pyproject.toml
|
|
588
|
+
$ pdev csv show data.csv
|
|
589
|
+
$ pdev csv to-json data.csv
|
|
590
|
+
$ pdev csv filter data.csv age "^3" --ignore-case
|
|
591
|
+
$ pdev env show .env # مقادیر حساس مخفی
|
|
592
|
+
$ pdev env to-shell .env # export KEY=...
|
|
593
|
+
$ pdev env sort .env -o .env.sorted
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
### 🔍 `pdev jq` — کوئری JSON (جایگزین سادهٔ jq)
|
|
602
|
+
|
|
603
|
+
```bash
|
|
604
|
+
$ echo '{"user": {"name": "علی", "age": 30}}' | pdev jq .user.name -r
|
|
605
|
+
علی
|
|
606
|
+
|
|
607
|
+
$ pdev jq .items[0] -f data.json
|
|
608
|
+
$ pdev jq '.items[*].name' -f data.json -r
|
|
609
|
+
$ pdev jq '.config.database.host' -f config.json -r
|
|
610
|
+
$ pdev jq '["key with space"]' -f d.json
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
مسیرهای پشتیبانیشده:
|
|
614
|
+
- `.key` → دسترسی به کلید
|
|
615
|
+
- `.a.b.c` → تودرتو
|
|
616
|
+
- `.items[0]` → اندیس آرایه
|
|
617
|
+
- `.items[*]` → همهٔ عناصر
|
|
618
|
+
- `["key with space"]` → کلید با کاراکتر خاص
|
|
619
|
+
|
|
620
|
+
### `pdev lorem` — متن نمونهٔ فارسی
|
|
621
|
+
|
|
622
|
+
```bash
|
|
623
|
+
$ pdev lorem sentence
|
|
624
|
+
زبان فارسی گنجینهای از ادبیات و فرهنگ است.
|
|
625
|
+
|
|
626
|
+
$ pdev lorem paragraph -s 3
|
|
627
|
+
...
|
|
628
|
+
$ pdev lorem words -c 6
|
|
629
|
+
$ pdev lorem all -p 3 -s 4
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
### `pdev name` — نام و دادهٔ نمونهٔ فارسی
|
|
633
|
+
|
|
634
|
+
```bash
|
|
635
|
+
$ pdev name full
|
|
636
|
+
علی احمدی
|
|
637
|
+
|
|
638
|
+
$ pdev name full -g female -c 3
|
|
639
|
+
سارا رضایی
|
|
640
|
+
مریم حسینی
|
|
641
|
+
فاطمه محمدی
|
|
642
|
+
|
|
643
|
+
$ pdev name email
|
|
644
|
+
ali.ahmadi42@example.com
|
|
645
|
+
|
|
646
|
+
$ pdev name profile -c 3 -j
|
|
647
|
+
[
|
|
648
|
+
{"name": "علی احمدی", "email": "...", "city": "تهران"},
|
|
649
|
+
...
|
|
650
|
+
]
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
### `pdev license` — تولید لایسنس
|
|
658
|
+
|
|
659
|
+
```bash
|
|
660
|
+
$ pdev license list
|
|
661
|
+
$ pdev license show MIT -a "علی رضایی" -y 2024
|
|
662
|
+
$ pdev license new Apache-2.0 -a "Sara" -o LICENSE
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
### `pdev gitignore` — تولید .gitignore
|
|
666
|
+
|
|
667
|
+
```bash
|
|
668
|
+
$ pdev gitignore list
|
|
669
|
+
$ pdev gitignore show python
|
|
670
|
+
$ pdev gitignore new python node macos -o .gitignore
|
|
671
|
+
$ pdev gitignore new rust --append
|
|
672
|
+
```
|
|
673
|
+
|
|
674
|
+
### `pdev scaffold` — ساخت پروژه از قالب
|
|
675
|
+
|
|
676
|
+
```bash
|
|
677
|
+
$ pdev scaffold python myproject
|
|
678
|
+
✓ پروژه ساخته شد: /home/user/myproject
|
|
679
|
+
• README.md
|
|
680
|
+
• pyproject.toml
|
|
681
|
+
• src/myproject/main.py
|
|
682
|
+
• tests/test_main.py
|
|
683
|
+
|
|
684
|
+
$ pdev scaffold node myapp --target ./projects
|
|
685
|
+
$ pdev scaffold minimal hello
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
### `pdev template` — رندر قالب متنی
|
|
689
|
+
|
|
690
|
+
```bash
|
|
691
|
+
$ echo "سلام {{name}} از {{city}}" > greet.txt
|
|
692
|
+
$ pdev template greet.txt -D name=علی -D city=تهران
|
|
693
|
+
سلام علی از تهران
|
|
694
|
+
|
|
695
|
+
$ pdev template vars greet.txt
|
|
696
|
+
متغیرهای یافتشده (2):
|
|
697
|
+
• name
|
|
698
|
+
• city
|
|
699
|
+
|
|
700
|
+
$ pdev template config.tpl -D port=8080 -o config.yaml
|
|
701
|
+
```
|
|
702
|
+
|