xtn-tools-pro 1.0.1.2.1__tar.gz → 1.0.1.2.3__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.
Files changed (68) hide show
  1. {xtn-tools-pro-1.0.1.2.1/xtn_tools_pro.egg-info → xtn-tools-pro-1.0.1.2.3}/PKG-INFO +1 -1
  2. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/setup.py +3 -1
  3. xtn-tools-pro-1.0.1.2.3/xtn_tools_pro/utils/audio_video.py +34 -0
  4. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/crypto.py +16 -0
  5. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/file_utils.py +38 -3
  6. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3/xtn_tools_pro.egg-info}/PKG-INFO +1 -1
  7. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro.egg-info/SOURCES.txt +1 -0
  8. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro.egg-info/requires.txt +1 -0
  9. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/LICENSE +0 -0
  10. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/MANIFEST.in +0 -0
  11. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/README.md +0 -0
  12. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/setup.cfg +0 -0
  13. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/__init__.py +0 -0
  14. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/db/MongoDB.py +0 -0
  15. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/db/MysqlDB.py +0 -0
  16. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/db/RedisDB.py +0 -0
  17. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/db/__init__.py +0 -0
  18. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/__init__.py +0 -0
  19. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/cli.py +0 -0
  20. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/.gitignore +0 -0
  21. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/Dockerfile +0 -0
  22. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/README.md +0 -0
  23. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/__init__.py +0 -0
  24. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/__init__.py +0 -0
  25. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/api/__init__.py +0 -0
  26. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/api/v1/__init__.py +0 -0
  27. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/api/v1/demo.py +0 -0
  28. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/app.py +0 -0
  29. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/config/__init__.py +0 -0
  30. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/config/secure.py +0 -0
  31. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/config/setting.py +0 -0
  32. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/libs/__init__.py +0 -0
  33. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/libs/base.py +0 -0
  34. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/libs/error.py +0 -0
  35. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/libs/error_code.py +0 -0
  36. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/libs/redprint.py +0 -0
  37. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/libs/token_auth.py +0 -0
  38. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/models/__init__.py +0 -0
  39. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/models/base.py +0 -0
  40. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/models/redis_demo.py +0 -0
  41. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/validators/__init__.py +0 -0
  42. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/validators/base.py +0 -0
  43. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/app/validators/demo.py +0 -0
  44. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/docker-compose.yml +0 -0
  45. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/logs/__init__.py +0 -0
  46. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/obj/__init__.py +0 -0
  47. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/requirements.txt +0 -0
  48. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/server_run.py +0 -0
  49. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/test/__init__.py +0 -0
  50. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/flask_demo/templates/uwsgi.ini +0 -0
  51. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/proxy/XiaoXiangProxy.py +0 -0
  52. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/proxy/__init__.py +0 -0
  53. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/proxy/proxy.py +0 -0
  54. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/task_pro/__init__.py +0 -0
  55. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/task_pro/go_fun_air_v1.py +0 -0
  56. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/task_pro/go_fun_v3.py +0 -0
  57. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/tools.py +0 -0
  58. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/__init__.py +0 -0
  59. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/helpers.py +0 -0
  60. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/log.py +0 -0
  61. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/retry.py +0 -0
  62. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/set_data.py +0 -0
  63. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/shell.py +0 -0
  64. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/sql.py +0 -0
  65. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro/utils/time_utils.py +0 -0
  66. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro.egg-info/dependency_links.txt +0 -0
  67. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro.egg-info/entry_points.txt +0 -0
  68. {xtn-tools-pro-1.0.1.2.1 → xtn-tools-pro-1.0.1.2.3}/xtn_tools_pro.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtn-tools-pro
3
- Version: 1.0.1.2.1
3
+ Version: 1.0.1.2.3
4
4
  Summary: xtn 开发工具
5
5
  Author: xtn
6
6
  Author-email: czw011122@gmail.com
@@ -15,7 +15,7 @@ with open("README.md", "r") as f:
15
15
 
16
16
  setuptools.setup(
17
17
  name="xtn-tools-pro", # 模块名称
18
- version="1.0.1.2.1", # 版本
18
+ version="1.0.1.2.3", # 版本
19
19
  author="xtn", # 作者
20
20
  author_email="czw011122@gmail.com", # 作者邮箱
21
21
  description="xtn 开发工具", # 模块简介
@@ -43,6 +43,8 @@ setuptools.setup(
43
43
  "tqdm",
44
44
  "fabric",
45
45
  "pyotp",
46
+ # "moviepy",
47
+ "pycryptodome",
46
48
  "requests"
47
49
  ],
48
50
  python_requires='>=3.7',
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env python
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # 说明:
5
+ # 音频、视频 处理
6
+ # History:
7
+ # Date Author Version Modification
8
+ # --------------------------------------------------------------------------------------------------
9
+ # 2025/5/1 xiatn V00.01.000 新建
10
+ # --------------------------------------------------------------------------------------------------
11
+ from moviepy.editor import VideoFileClip
12
+ from xtn_tools_pro.utils.file_utils import get_filename, get_parent_dir, path_join
13
+
14
+
15
+ def mp4_extracting_mp3(mp4_path, save_path=""):
16
+ """
17
+ 从mp4视频中提取音频
18
+ :param mp4_path:mp4文件路径
19
+ :param save_path:保存位置,默认在mp4文件目录下和mp4同名
20
+ :return:
21
+ """
22
+ video = VideoFileClip(mp4_path)
23
+ audio = video.audio
24
+ if save_path:
25
+ audio.write_audiofile(save_path)
26
+ return
27
+
28
+ dir_path = get_parent_dir(mp4_path, 1)
29
+ mp3_path = path_join(dir_path, f"{get_filename(mp4_path, suffix=False)}.mp3")
30
+ audio.write_audiofile(mp3_path)
31
+
32
+
33
+ if __name__ == '__main__':
34
+ pass
@@ -13,6 +13,7 @@ import pyotp
13
13
  import base64
14
14
  import hashlib
15
15
  import secrets
16
+ from Crypto.Cipher import AES
16
17
 
17
18
 
18
19
  def get_md5_32(s: str, is_upper=False):
@@ -176,5 +177,20 @@ def get_2FA(secret):
176
177
  return str(totp.now())
177
178
 
178
179
 
180
+ class A8:
181
+ def __init__(self, AES_key):
182
+ self.__AES_cipher = AES.new(AES_key, AES.MODE_ECB)
183
+
184
+ def data_en_pro(self, raw):
185
+ enc = self.__AES_cipher.encrypt(raw.encode('utf-8'))
186
+ result = base64.b64encode(enc).decode('utf-8')
187
+ return result
188
+
189
+ def data_de_pro(self, enc):
190
+ enc = base64.b64decode(enc)
191
+ result = self.__AES_cipher.decrypt(enc).decode('utf-8')
192
+ return result
193
+
194
+
179
195
  if __name__ == '__main__':
180
196
  print(get_2FA('ninqzrh367u3iahpi2mum36bgfvouv5m'))
@@ -10,7 +10,7 @@
10
10
  # --------------------------------------------------------------------------------------------------
11
11
  import os
12
12
  import re
13
-
13
+ from pathlib import Path
14
14
 
15
15
  def get_file_extension(file_name):
16
16
  """
@@ -80,7 +80,42 @@ def get_listdir(dir_path):
80
80
  return os.listdir(dir_path)
81
81
 
82
82
 
83
+ def get_filename(file_path, suffix=True):
84
+ """
85
+ 传入文件路径返回文件名
86
+ :param filename:文件路径
87
+ :param suffix:是否返回后缀名
88
+ :return:
89
+ """
90
+ file_path = Path(file_path)
91
+ if suffix:
92
+ return file_path.name
93
+ return file_path.stem
94
+
95
+
96
+ def get_parent_dir(file_path: str, levels: int = 1) -> str:
97
+ """
98
+ 获取文件的上几级目
99
+
100
+ :param file_path: 文件路径字符串
101
+ :param levels: 要向上获取的目录层级数(默认为1)
102
+ :return: 上级目录路径字符串
103
+ """
104
+ path = Path(file_path)
105
+ try:
106
+ return str(path.parents[levels - 1])
107
+ except IndexError:
108
+ raise ValueError(f"文件路径没有那么多层级(最多 {len(path.parents)} 层)")
109
+
110
+
111
+ def path_join(a_path,b_path):
112
+ """
113
+ 路径拼接
114
+ :param a_path:
115
+ :param b_path:
116
+ :return:
117
+ """
118
+ return os.path.join(a_path, b_path)
119
+
83
120
  if __name__ == '__main__':
84
121
  pass
85
- print(get_file_extension('file/2024-04-19/BOSCH GEX 125-1A/125-1AE砂磨机操作说明书:[1]_jingyan.txt'))
86
- print(get_file_check_filename('file/2024-04-19/BOSCH GEX 125-1A/125-1AE砂磨机操作说明书:[1]_jingyan.txt'))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: xtn-tools-pro
3
- Version: 1.0.1.2.1
3
+ Version: 1.0.1.2.3
4
4
  Summary: xtn 开发工具
5
5
  Author: xtn
6
6
  Author-email: czw011122@gmail.com
@@ -54,6 +54,7 @@ xtn_tools_pro/task_pro/__init__.py
54
54
  xtn_tools_pro/task_pro/go_fun_air_v1.py
55
55
  xtn_tools_pro/task_pro/go_fun_v3.py
56
56
  xtn_tools_pro/utils/__init__.py
57
+ xtn_tools_pro/utils/audio_video.py
57
58
  xtn_tools_pro/utils/crypto.py
58
59
  xtn_tools_pro/utils/file_utils.py
59
60
  xtn_tools_pro/utils/helpers.py
@@ -9,4 +9,5 @@ PyJWT
9
9
  tqdm
10
10
  fabric
11
11
  pyotp
12
+ pycryptodome
12
13
  requests