Open-AutoTools 0.0.3rc4__tar.gz → 0.0.3rc5__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.
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5/Open_AutoTools.egg-info}/PKG-INFO +12 -3
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/Open_AutoTools.egg-info/requires.txt +3 -0
- {open_autotools-0.0.3rc4/Open_AutoTools.egg-info → open_autotools-0.0.3rc5}/PKG-INFO +12 -3
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/README.md +4 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autodownload/core.py +78 -18
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/test/commands.py +15 -17
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/setup.py +10 -4
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/LICENSE +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/Open_AutoTools.egg-info/SOURCES.txt +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/Open_AutoTools.egg-info/dependency_links.txt +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/Open_AutoTools.egg-info/entry_points.txt +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/Open_AutoTools.egg-info/top_level.txt +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autocaps/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autocaps/commands.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autocaps/core.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autocaps/tests/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autocaps/tests/test_autocaps_core.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autocaps/tests/test_autocaps_integration.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autodownload/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autodownload/commands.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autoip/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autoip/commands.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autoip/core.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autoip/tests/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autoip/tests/test_autoip_core.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autoip/tests/test_autoip_integration.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autolower/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autolower/commands.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autolower/core.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autolower/tests/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autolower/tests/test_autolower_core.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autolower/tests/test_autolower_integration.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autopassword/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autopassword/commands.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autopassword/core.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autospell/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autospell/commands.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autospell/core.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autotranslate/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autotranslate/commands.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autotranslate/core.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/cli.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/test/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/utils/__init__.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/utils/loading.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/utils/updates.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/utils/version.py +0 -0
- {open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/setup.cfg +0 -0
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: Open-AutoTools
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.3rc5
|
|
4
4
|
Summary: A suite of automated tools accessible via CLI with a simple `autotools` command
|
|
5
5
|
Home-page: https://github.com/BabylooPro/Open-AutoTools
|
|
6
6
|
Author: BabylooPro
|
|
7
7
|
Author-email: maxremy.dev@gmail.com
|
|
8
8
|
Project-URL: Bug Tracker, https://github.com/BabylooPro/Open-AutoTools/issues
|
|
9
|
-
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
10
12
|
Classifier: License :: OSI Approved :: MIT License
|
|
11
13
|
Classifier: Operating System :: OS Independent
|
|
12
|
-
Requires-Python: >=3.
|
|
14
|
+
Requires-Python: >=3.10
|
|
13
15
|
Description-Content-Type: text/markdown
|
|
14
16
|
License-File: LICENSE
|
|
15
17
|
Requires-Dist: Brotli==1.1.0
|
|
@@ -54,6 +56,9 @@ Requires-Dist: ffmpeg-python>=0.2.0
|
|
|
54
56
|
Provides-Extra: test
|
|
55
57
|
Requires-Dist: pytest>=7.4.0; extra == "test"
|
|
56
58
|
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
59
|
+
Requires-Dist: pytest-sugar>=1.0.0; extra == "test"
|
|
60
|
+
Requires-Dist: pytest-xdist>=3.5.0; extra == "test"
|
|
61
|
+
Requires-Dist: pytest-timeout>=2.2.0; extra == "test"
|
|
57
62
|
Dynamic: author
|
|
58
63
|
Dynamic: author-email
|
|
59
64
|
Dynamic: classifier
|
|
@@ -109,6 +114,10 @@ pip install -r requirements.txt
|
|
|
109
114
|
|
|
110
115
|
# For development, install in editable mode
|
|
111
116
|
pip install -e .
|
|
117
|
+
|
|
118
|
+
# INFO: if you want to run tests and some errors occur before see test executable
|
|
119
|
+
# install test dependencies directly (optional)
|
|
120
|
+
pip install -e ".[test]"
|
|
112
121
|
```
|
|
113
122
|
|
|
114
123
|
## Key Features
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.2
|
|
2
2
|
Name: Open-AutoTools
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.3rc5
|
|
4
4
|
Summary: A suite of automated tools accessible via CLI with a simple `autotools` command
|
|
5
5
|
Home-page: https://github.com/BabylooPro/Open-AutoTools
|
|
6
6
|
Author: BabylooPro
|
|
7
7
|
Author-email: maxremy.dev@gmail.com
|
|
8
8
|
Project-URL: Bug Tracker, https://github.com/BabylooPro/Open-AutoTools/issues
|
|
9
|
-
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
10
12
|
Classifier: License :: OSI Approved :: MIT License
|
|
11
13
|
Classifier: Operating System :: OS Independent
|
|
12
|
-
Requires-Python: >=3.
|
|
14
|
+
Requires-Python: >=3.10
|
|
13
15
|
Description-Content-Type: text/markdown
|
|
14
16
|
License-File: LICENSE
|
|
15
17
|
Requires-Dist: Brotli==1.1.0
|
|
@@ -54,6 +56,9 @@ Requires-Dist: ffmpeg-python>=0.2.0
|
|
|
54
56
|
Provides-Extra: test
|
|
55
57
|
Requires-Dist: pytest>=7.4.0; extra == "test"
|
|
56
58
|
Requires-Dist: pytest-cov>=4.1.0; extra == "test"
|
|
59
|
+
Requires-Dist: pytest-sugar>=1.0.0; extra == "test"
|
|
60
|
+
Requires-Dist: pytest-xdist>=3.5.0; extra == "test"
|
|
61
|
+
Requires-Dist: pytest-timeout>=2.2.0; extra == "test"
|
|
57
62
|
Dynamic: author
|
|
58
63
|
Dynamic: author-email
|
|
59
64
|
Dynamic: classifier
|
|
@@ -109,6 +114,10 @@ pip install -r requirements.txt
|
|
|
109
114
|
|
|
110
115
|
# For development, install in editable mode
|
|
111
116
|
pip install -e .
|
|
117
|
+
|
|
118
|
+
# INFO: if you want to run tests and some errors occur before see test executable
|
|
119
|
+
# install test dependencies directly (optional)
|
|
120
|
+
pip install -e ".[test]"
|
|
112
121
|
```
|
|
113
122
|
|
|
114
123
|
## Key Features
|
|
@@ -41,6 +41,10 @@ pip install -r requirements.txt
|
|
|
41
41
|
|
|
42
42
|
# For development, install in editable mode
|
|
43
43
|
pip install -e .
|
|
44
|
+
|
|
45
|
+
# INFO: if you want to run tests and some errors occur before see test executable
|
|
46
|
+
# install test dependencies directly (optional)
|
|
47
|
+
pip install -e ".[test]"
|
|
44
48
|
```
|
|
45
49
|
|
|
46
50
|
## Key Features
|
|
@@ -129,10 +129,26 @@ def save_consent_status(status):
|
|
|
129
129
|
# IF SAVING FAILS, RETURN FALSE TO FORCE NEW CONSENT NEXT TIME
|
|
130
130
|
return False
|
|
131
131
|
|
|
132
|
+
# FUNCTION TO SAFELY PRINT WITH EMOJI FALLBACK
|
|
133
|
+
def safe_print(text):
|
|
134
|
+
"""PRINT TEXT WITH EMOJI FALLBACK FOR WINDOWS"""
|
|
135
|
+
try:
|
|
136
|
+
print(text)
|
|
137
|
+
except UnicodeEncodeError:
|
|
138
|
+
# REPLACE EMOJIS WITH ASCII ALTERNATIVES
|
|
139
|
+
text = (text.replace('⚠️', '!')
|
|
140
|
+
.replace('🔍', '*')
|
|
141
|
+
.replace('🎥', '>')
|
|
142
|
+
.replace('📋', '+')
|
|
143
|
+
.replace('❌', 'X')
|
|
144
|
+
.replace('✅', 'V')
|
|
145
|
+
.replace('↓', 'v'))
|
|
146
|
+
print(text)
|
|
147
|
+
|
|
132
148
|
# FUNCTION TO GET USER CONSENT WITH INTERACTIVE PROMPT
|
|
133
149
|
def get_user_consent():
|
|
134
150
|
"""GET USER CONSENT WITH INTERACTIVE PROMPT"""
|
|
135
|
-
|
|
151
|
+
safe_print("\n! Important Notice:")
|
|
136
152
|
print("This tool will:")
|
|
137
153
|
print("1. Download video content from YouTube")
|
|
138
154
|
print("2. Save files to your local machine")
|
|
@@ -178,12 +194,12 @@ def download_youtube_video(url, format='mp4', quality='best'):
|
|
|
178
194
|
"""DOWNLOAD VIDEO WITH CONSENT CHECK"""
|
|
179
195
|
# VALIDATE URL FIRST
|
|
180
196
|
if not validate_youtube_url(url):
|
|
181
|
-
|
|
197
|
+
safe_print("\nX Invalid YouTube URL")
|
|
182
198
|
return False
|
|
183
199
|
|
|
184
200
|
# CHECK FOR SAVED CONSENT FIRST AND GET NEW CONSENT IF NEEDED
|
|
185
201
|
if not load_consent_status() and not get_user_consent():
|
|
186
|
-
|
|
202
|
+
safe_print("\nX Download cancelled by user")
|
|
187
203
|
return False
|
|
188
204
|
|
|
189
205
|
# FIRST CHECK VIDEO INFO AND EXISTENCE
|
|
@@ -199,7 +215,7 @@ def download_youtube_video(url, format='mp4', quality='best'):
|
|
|
199
215
|
info = ydl.extract_info(url, download=False)
|
|
200
216
|
formats = info.get('formats', [])
|
|
201
217
|
if not formats:
|
|
202
|
-
|
|
218
|
+
safe_print("\nX No formats available for this video")
|
|
203
219
|
return False
|
|
204
220
|
|
|
205
221
|
# FIND BEST AVAILABLE QUALITY
|
|
@@ -218,7 +234,7 @@ def download_youtube_video(url, format='mp4', quality='best'):
|
|
|
218
234
|
height = best_height
|
|
219
235
|
# ASK FOR CONFIRMATION IF 4K OR HIGHER (ONLY FOR MP4)
|
|
220
236
|
if format == 'mp4' and height >= 2160:
|
|
221
|
-
|
|
237
|
+
safe_print(f"\n! This video is available in {height}p quality!")
|
|
222
238
|
while True:
|
|
223
239
|
response = input(f"Do you want to download in {height}p quality? (yes/no): ").lower()
|
|
224
240
|
if response in ['no', 'n']:
|
|
@@ -238,7 +254,7 @@ def download_youtube_video(url, format='mp4', quality='best'):
|
|
|
238
254
|
# CHECK IF FILE EXISTS AND GET REPLACEMENT CONSENT
|
|
239
255
|
force_download = check_existing_video(info, format)
|
|
240
256
|
if not force_download:
|
|
241
|
-
|
|
257
|
+
safe_print("\nX Download cancelled - file already exists")
|
|
242
258
|
return False
|
|
243
259
|
|
|
244
260
|
# OPEN DOWNLOADS FOLDER IF STARTING NEW DOWNLOAD OR REPLACING
|
|
@@ -246,7 +262,7 @@ def download_youtube_video(url, format='mp4', quality='best'):
|
|
|
246
262
|
open_download_folder(download_dir)
|
|
247
263
|
|
|
248
264
|
except Exception as e:
|
|
249
|
-
|
|
265
|
+
safe_print(f"\nX Error checking video: {str(e)}")
|
|
250
266
|
return False
|
|
251
267
|
|
|
252
268
|
loading = LoadingAnimation()
|
|
@@ -254,17 +270,22 @@ def download_youtube_video(url, format='mp4', quality='best'):
|
|
|
254
270
|
# START LOADING FOR DOWNLOAD PROCESS
|
|
255
271
|
with loading:
|
|
256
272
|
loading._spinner.start()
|
|
257
|
-
|
|
273
|
+
safe_print("\n* Starting download...")
|
|
258
274
|
|
|
259
|
-
|
|
275
|
+
safe_print(f"\n> Downloading video from: {url}")
|
|
260
276
|
if format == 'mp3':
|
|
261
|
-
|
|
277
|
+
safe_print(f"+ Format: {format}\n")
|
|
262
278
|
else:
|
|
263
|
-
|
|
279
|
+
safe_print(f"+ Format: {format}, Quality: {height}p\n")
|
|
264
280
|
|
|
265
281
|
# YT-DLP PERMISSION OPTIONS FOR DOWNLOADING YOUTUBE VIDEOS
|
|
266
282
|
ydl_opts = {
|
|
267
|
-
'format':
|
|
283
|
+
'format': (
|
|
284
|
+
f'bestvideo[height<={height}][ext=mp4]+bestaudio[ext=m4a]/' # TRY EXACT HEIGHT MATCH FIRST
|
|
285
|
+
f'bestvideo[height<={height}][ext=webm]+bestaudio[ext=webm]/' # TRY WEBM AS FALLBACK
|
|
286
|
+
f'best[height<={height}]/' # TRY COMBINED FORMATS
|
|
287
|
+
'best' # FALLBACK TO BEST AVAILABLE
|
|
288
|
+
) if format == 'mp4' else 'bestaudio/best',
|
|
268
289
|
'postprocessors': [{
|
|
269
290
|
'key': 'FFmpegExtractAudio',
|
|
270
291
|
'preferredcodec': 'mp3',
|
|
@@ -276,13 +297,13 @@ def download_youtube_video(url, format='mp4', quality='best'):
|
|
|
276
297
|
'progress_hooks': [lambda d: update_progress(d)],
|
|
277
298
|
'extractor_args': {
|
|
278
299
|
'youtube': {
|
|
279
|
-
'player_client': ['
|
|
300
|
+
'player_client': ['android', 'web'], # USE ANDROID FIRST AND WEB PLAYER CLIENTS IF ANDROID FAILS
|
|
280
301
|
'formats': ['missing_pot'], # ALLOW FORMATS WITHOUT PO TOKEN
|
|
281
302
|
'player_skip': ['configs', 'webpage'] # SKIP UNNECESSARY CONFIGS
|
|
282
303
|
}
|
|
283
304
|
},
|
|
284
305
|
'http_headers': {
|
|
285
|
-
'User-Agent': 'Mozilla/5.0 (
|
|
306
|
+
'User-Agent': 'Mozilla/5.0 (Linux; Android 12) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Mobile Safari/537.36',
|
|
286
307
|
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
|
287
308
|
'Accept-Language': 'en-us,en;q=0.5',
|
|
288
309
|
'Sec-Fetch-Mode': 'navigate'
|
|
@@ -290,15 +311,42 @@ def download_youtube_video(url, format='mp4', quality='best'):
|
|
|
290
311
|
'outtmpl': str(download_dir / '%(title)s.%(ext)s'), # SET OUTPUT TEMPLATE
|
|
291
312
|
'overwrites': True, # FORCE OVERWRITE IF USER CONSENTED
|
|
292
313
|
'no_check_certificates': True, # SKIP CERTIFICATE VALIDATION
|
|
293
|
-
'
|
|
314
|
+
'ignoreerrors': False, # CATCH ERRORS PROPERLY
|
|
315
|
+
'cookiesfrombrowser': None, # DISABLE COOKIE FILE
|
|
316
|
+
'cookiefile': None, # DISABLE COOKIE FILE
|
|
294
317
|
}
|
|
295
318
|
|
|
296
319
|
try:
|
|
297
320
|
# THEN DOWNLOAD
|
|
298
321
|
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
322
|
+
try:
|
|
323
|
+
ydl.download([url])
|
|
324
|
+
safe_print("\nV Download completed successfully!")
|
|
325
|
+
return True
|
|
326
|
+
except Exception as e:
|
|
327
|
+
if "HTTP Error 403" in str(e):
|
|
328
|
+
safe_print("\n! Access denied for requested quality. Trying lower quality...")
|
|
329
|
+
# TRY DOWNLOADING WITH LOWER QUALITY
|
|
330
|
+
if height > 720:
|
|
331
|
+
new_height = min(height - 360, 1080) # STEP DOWN QUALITY
|
|
332
|
+
safe_print(f"v Falling back to {new_height}p")
|
|
333
|
+
ydl_opts['format'] = (
|
|
334
|
+
f'bestvideo[height<={new_height}][ext=mp4]+bestaudio[ext=m4a]/'
|
|
335
|
+
f'bestvideo[height<={new_height}][ext=webm]+bestaudio[ext=webm]/'
|
|
336
|
+
f'best[height<={new_height}]/'
|
|
337
|
+
'best'
|
|
338
|
+
)
|
|
339
|
+
with yt_dlp.YoutubeDL(ydl_opts) as ydl2:
|
|
340
|
+
ydl2.download([url])
|
|
341
|
+
safe_print("\nV Download completed successfully!")
|
|
342
|
+
return True
|
|
343
|
+
else:
|
|
344
|
+
safe_print("\nX Failed to download video at any quality")
|
|
345
|
+
return False
|
|
346
|
+
else:
|
|
347
|
+
raise e
|
|
348
|
+
|
|
349
|
+
# CATCH ANY EXCEPTIONS AND HANDLE THEM
|
|
302
350
|
except Exception as e:
|
|
303
351
|
error_msg = str(e)
|
|
304
352
|
if "Requested format is not available" in error_msg:
|
|
@@ -371,3 +419,15 @@ def download_file_with_tqdm(url):
|
|
|
371
419
|
open_download_folder(download_dir)
|
|
372
420
|
except requests.exceptions.RequestException as e:
|
|
373
421
|
print(f"Error during file download: {e}")
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
# FUNCTION TO GET BROWSER COOKIES
|
|
425
|
+
def get_browser_cookies():
|
|
426
|
+
"""GET BROWSER COOKIES WITH FALLBACK OPTIONS"""
|
|
427
|
+
try:
|
|
428
|
+
return ('chrome',) # TRY CHROME FIRST
|
|
429
|
+
except Exception:
|
|
430
|
+
try:
|
|
431
|
+
return ('firefox',) # TRY FIREFOX IF CHROME FAILS
|
|
432
|
+
except Exception:
|
|
433
|
+
return None # RETURN NONE IF BOTH FAIL
|
|
@@ -28,34 +28,32 @@ def test(unit, integration, no_cov, html, module):
|
|
|
28
28
|
|
|
29
29
|
# BASE COMMAND WITH ENHANCED VERBOSITY
|
|
30
30
|
cmd = [
|
|
31
|
-
|
|
32
|
-
'
|
|
33
|
-
'
|
|
34
|
-
'
|
|
35
|
-
'--
|
|
36
|
-
'--
|
|
37
|
-
'
|
|
38
|
-
'--tb=long', # LONG TRACEBACK STYLE
|
|
39
|
-
'-s' # SHORTCUT FOR --capture=no
|
|
31
|
+
sys.executable, # USE SYSTEM PYTHON EXECUTABLE
|
|
32
|
+
'-m', 'pytest', # RUN PYTEST AS MODULE
|
|
33
|
+
'-vv', # VERY VERBOSE OUTPUT
|
|
34
|
+
'--capture=no', # SHOW PRINT STATEMENTS
|
|
35
|
+
'--showlocals', # SHOW LOCAL VARIABLES IN TRACEBACKS
|
|
36
|
+
'--log-cli-level=DEBUG', # SHOW DEBUG LOGS
|
|
37
|
+
'-s', # DISABLE CAPTURE
|
|
40
38
|
]
|
|
41
39
|
|
|
42
40
|
# COVERAGE OPTIONS
|
|
43
41
|
if not no_cov:
|
|
44
|
-
cmd.extend(['--cov=autotools'])
|
|
45
42
|
if html:
|
|
46
|
-
cmd.extend(['--cov-report=html'])
|
|
43
|
+
cmd.extend(['--cov-report=html', '--cov=autotools'])
|
|
47
44
|
else:
|
|
48
|
-
cmd.extend(['--cov-report=term-missing'])
|
|
45
|
+
cmd.extend(['--cov-report=term-missing', '--cov=autotools'])
|
|
49
46
|
|
|
50
47
|
# TEST SELECTION
|
|
51
|
-
test_path = 'autotools'
|
|
52
48
|
if module:
|
|
49
|
+
test_path = f'autotools/{module}/tests'
|
|
53
50
|
if unit and not integration:
|
|
54
|
-
|
|
51
|
+
test_path = f'{test_path}/unit'
|
|
55
52
|
elif integration and not unit:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
test_path = f'{test_path}/integration'
|
|
54
|
+
cmd.append(test_path)
|
|
55
|
+
else:
|
|
56
|
+
cmd.append('autotools')
|
|
59
57
|
|
|
60
58
|
# SHOW COMMAND BEING RUN
|
|
61
59
|
click.echo(click.style("\nRunning tests with command:", fg='blue', bold=True))
|
|
@@ -52,7 +52,7 @@ required = [
|
|
|
52
52
|
# SETUP CONFIGURATION FOR PACKAGE DISTRIBUTION
|
|
53
53
|
setup(
|
|
54
54
|
name='Open-AutoTools',
|
|
55
|
-
version='0.0.3-rc.
|
|
55
|
+
version='0.0.3-rc.5',
|
|
56
56
|
packages=find_packages(),
|
|
57
57
|
include_package_data=True,
|
|
58
58
|
install_requires=required,
|
|
@@ -68,12 +68,15 @@ setup(
|
|
|
68
68
|
"Bug Tracker": "https://github.com/BabylooPro/Open-AutoTools/issues",
|
|
69
69
|
},
|
|
70
70
|
classifiers=[
|
|
71
|
-
"Programming Language :: Python :: 3",
|
|
71
|
+
"Programming Language :: Python :: 3.10",
|
|
72
|
+
"Programming Language :: Python :: 3.11",
|
|
73
|
+
"Programming Language :: Python :: 3.12",
|
|
72
74
|
"License :: OSI Approved :: MIT License",
|
|
73
75
|
"Operating System :: OS Independent",
|
|
74
76
|
],
|
|
75
|
-
python_requires=">=3.
|
|
76
|
-
|
|
77
|
+
python_requires=">=3.10",
|
|
78
|
+
|
|
79
|
+
# ENTRY POINTS FOR CLI COMMANDS
|
|
77
80
|
entry_points='''
|
|
78
81
|
[console_scripts]
|
|
79
82
|
autotools=autotools.cli:cli
|
|
@@ -91,6 +94,9 @@ setup(
|
|
|
91
94
|
'test': [
|
|
92
95
|
'pytest>=7.4.0',
|
|
93
96
|
'pytest-cov>=4.1.0',
|
|
97
|
+
'pytest-sugar>=1.0.0',
|
|
98
|
+
'pytest-xdist>=3.5.0',
|
|
99
|
+
'pytest-timeout>=2.2.0',
|
|
94
100
|
],
|
|
95
101
|
},
|
|
96
102
|
)
|
|
File without changes
|
|
File without changes
|
{open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/Open_AutoTools.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/Open_AutoTools.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autocaps/tests/test_autocaps_core.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autoip/tests/test_autoip_core.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{open_autotools-0.0.3rc4 → open_autotools-0.0.3rc5}/autotools/autolower/tests/test_autolower_core.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|