webscout 8.2.9__py3-none-any.whl → 2026.1.19__py3-none-any.whl
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.
- webscout/AIauto.py +524 -251
- webscout/AIbase.py +247 -319
- webscout/AIutel.py +68 -703
- webscout/Bard.py +1072 -1026
- webscout/Extra/GitToolkit/__init__.py +10 -10
- webscout/Extra/GitToolkit/gitapi/__init__.py +20 -12
- webscout/Extra/GitToolkit/gitapi/gist.py +142 -0
- webscout/Extra/GitToolkit/gitapi/organization.py +91 -0
- webscout/Extra/GitToolkit/gitapi/repository.py +308 -195
- webscout/Extra/GitToolkit/gitapi/search.py +162 -0
- webscout/Extra/GitToolkit/gitapi/trending.py +236 -0
- webscout/Extra/GitToolkit/gitapi/user.py +128 -96
- webscout/Extra/GitToolkit/gitapi/utils.py +82 -62
- webscout/Extra/YTToolkit/README.md +443 -375
- webscout/Extra/YTToolkit/YTdownloader.py +953 -957
- webscout/Extra/YTToolkit/__init__.py +3 -3
- webscout/Extra/YTToolkit/transcriber.py +595 -476
- webscout/Extra/YTToolkit/ytapi/README.md +230 -44
- webscout/Extra/YTToolkit/ytapi/__init__.py +22 -6
- webscout/Extra/YTToolkit/ytapi/captions.py +190 -0
- webscout/Extra/YTToolkit/ytapi/channel.py +302 -307
- webscout/Extra/YTToolkit/ytapi/errors.py +13 -13
- webscout/Extra/YTToolkit/ytapi/extras.py +178 -118
- webscout/Extra/YTToolkit/ytapi/hashtag.py +120 -0
- webscout/Extra/YTToolkit/ytapi/https.py +89 -88
- webscout/Extra/YTToolkit/ytapi/patterns.py +61 -61
- webscout/Extra/YTToolkit/ytapi/playlist.py +59 -59
- webscout/Extra/YTToolkit/ytapi/pool.py +8 -8
- webscout/Extra/YTToolkit/ytapi/query.py +143 -40
- webscout/Extra/YTToolkit/ytapi/shorts.py +122 -0
- webscout/Extra/YTToolkit/ytapi/stream.py +68 -63
- webscout/Extra/YTToolkit/ytapi/suggestions.py +97 -0
- webscout/Extra/YTToolkit/ytapi/utils.py +66 -62
- webscout/Extra/YTToolkit/ytapi/video.py +403 -232
- webscout/Extra/__init__.py +2 -3
- webscout/Extra/gguf.py +1298 -684
- webscout/Extra/tempmail/README.md +487 -487
- webscout/Extra/tempmail/__init__.py +28 -28
- webscout/Extra/tempmail/async_utils.py +143 -141
- webscout/Extra/tempmail/base.py +172 -161
- webscout/Extra/tempmail/cli.py +191 -187
- webscout/Extra/tempmail/emailnator.py +88 -84
- webscout/Extra/tempmail/mail_tm.py +378 -361
- webscout/Extra/tempmail/temp_mail_io.py +304 -292
- webscout/Extra/weather.py +196 -194
- webscout/Extra/weather_ascii.py +17 -15
- webscout/Provider/AISEARCH/PERPLEXED_search.py +175 -0
- webscout/Provider/AISEARCH/Perplexity.py +292 -333
- webscout/Provider/AISEARCH/README.md +106 -279
- webscout/Provider/AISEARCH/__init__.py +16 -9
- webscout/Provider/AISEARCH/brave_search.py +298 -0
- webscout/Provider/AISEARCH/iask_search.py +357 -410
- webscout/Provider/AISEARCH/monica_search.py +200 -220
- webscout/Provider/AISEARCH/webpilotai_search.py +242 -255
- webscout/Provider/Algion.py +413 -0
- webscout/Provider/Andi.py +74 -69
- webscout/Provider/Apriel.py +313 -0
- webscout/Provider/Ayle.py +323 -0
- webscout/Provider/ChatSandbox.py +329 -342
- webscout/Provider/ClaudeOnline.py +365 -0
- webscout/Provider/Cohere.py +232 -208
- webscout/Provider/DeepAI.py +367 -0
- webscout/Provider/Deepinfra.py +467 -340
- webscout/Provider/EssentialAI.py +217 -0
- webscout/Provider/ExaAI.py +274 -261
- webscout/Provider/Gemini.py +175 -169
- webscout/Provider/GithubChat.py +385 -369
- webscout/Provider/Gradient.py +286 -0
- webscout/Provider/Groq.py +556 -801
- webscout/Provider/HadadXYZ.py +323 -0
- webscout/Provider/HeckAI.py +392 -375
- webscout/Provider/HuggingFace.py +387 -0
- webscout/Provider/IBM.py +340 -0
- webscout/Provider/Jadve.py +317 -291
- webscout/Provider/K2Think.py +306 -0
- webscout/Provider/Koboldai.py +221 -384
- webscout/Provider/Netwrck.py +273 -270
- webscout/Provider/Nvidia.py +310 -0
- webscout/Provider/OPENAI/DeepAI.py +489 -0
- webscout/Provider/OPENAI/K2Think.py +423 -0
- webscout/Provider/OPENAI/PI.py +463 -0
- webscout/Provider/OPENAI/README.md +890 -952
- webscout/Provider/OPENAI/TogetherAI.py +405 -0
- webscout/Provider/OPENAI/TwoAI.py +255 -357
- webscout/Provider/OPENAI/__init__.py +148 -40
- webscout/Provider/OPENAI/ai4chat.py +348 -293
- webscout/Provider/OPENAI/akashgpt.py +436 -0
- webscout/Provider/OPENAI/algion.py +303 -0
- webscout/Provider/OPENAI/{exachat.py → ayle.py} +365 -444
- webscout/Provider/OPENAI/base.py +253 -249
- webscout/Provider/OPENAI/cerebras.py +296 -0
- webscout/Provider/OPENAI/chatgpt.py +870 -556
- webscout/Provider/OPENAI/chatsandbox.py +233 -173
- webscout/Provider/OPENAI/deepinfra.py +403 -322
- webscout/Provider/OPENAI/e2b.py +2370 -1414
- webscout/Provider/OPENAI/elmo.py +278 -0
- webscout/Provider/OPENAI/exaai.py +452 -417
- webscout/Provider/OPENAI/freeassist.py +446 -0
- webscout/Provider/OPENAI/gradient.py +448 -0
- webscout/Provider/OPENAI/groq.py +380 -364
- webscout/Provider/OPENAI/hadadxyz.py +292 -0
- webscout/Provider/OPENAI/heckai.py +333 -308
- webscout/Provider/OPENAI/huggingface.py +321 -0
- webscout/Provider/OPENAI/ibm.py +425 -0
- webscout/Provider/OPENAI/llmchat.py +253 -0
- webscout/Provider/OPENAI/llmchatco.py +378 -335
- webscout/Provider/OPENAI/meta.py +541 -0
- webscout/Provider/OPENAI/netwrck.py +374 -357
- webscout/Provider/OPENAI/nvidia.py +317 -0
- webscout/Provider/OPENAI/oivscode.py +348 -287
- webscout/Provider/OPENAI/openrouter.py +328 -0
- webscout/Provider/OPENAI/pydantic_imports.py +1 -172
- webscout/Provider/OPENAI/sambanova.py +397 -0
- webscout/Provider/OPENAI/sonus.py +305 -304
- webscout/Provider/OPENAI/textpollinations.py +370 -339
- webscout/Provider/OPENAI/toolbaz.py +375 -413
- webscout/Provider/OPENAI/typefully.py +419 -355
- webscout/Provider/OPENAI/typliai.py +279 -0
- webscout/Provider/OPENAI/utils.py +314 -318
- webscout/Provider/OPENAI/wisecat.py +359 -387
- webscout/Provider/OPENAI/writecream.py +185 -163
- webscout/Provider/OPENAI/x0gpt.py +462 -365
- webscout/Provider/OPENAI/zenmux.py +380 -0
- webscout/Provider/OpenRouter.py +386 -0
- webscout/Provider/Openai.py +337 -496
- webscout/Provider/PI.py +443 -429
- webscout/Provider/QwenLM.py +346 -254
- webscout/Provider/STT/__init__.py +28 -0
- webscout/Provider/STT/base.py +303 -0
- webscout/Provider/STT/elevenlabs.py +264 -0
- webscout/Provider/Sambanova.py +317 -0
- webscout/Provider/TTI/README.md +69 -82
- webscout/Provider/TTI/__init__.py +37 -7
- webscout/Provider/TTI/base.py +147 -64
- webscout/Provider/TTI/claudeonline.py +393 -0
- webscout/Provider/TTI/magicstudio.py +292 -201
- webscout/Provider/TTI/miragic.py +180 -0
- webscout/Provider/TTI/pollinations.py +331 -221
- webscout/Provider/TTI/together.py +334 -0
- webscout/Provider/TTI/utils.py +14 -11
- webscout/Provider/TTS/README.md +186 -192
- webscout/Provider/TTS/__init__.py +43 -10
- webscout/Provider/TTS/base.py +523 -159
- webscout/Provider/TTS/deepgram.py +286 -156
- webscout/Provider/TTS/elevenlabs.py +189 -111
- webscout/Provider/TTS/freetts.py +218 -0
- webscout/Provider/TTS/murfai.py +288 -113
- webscout/Provider/TTS/openai_fm.py +364 -129
- webscout/Provider/TTS/parler.py +203 -111
- webscout/Provider/TTS/qwen.py +334 -0
- webscout/Provider/TTS/sherpa.py +286 -0
- webscout/Provider/TTS/speechma.py +693 -580
- webscout/Provider/TTS/streamElements.py +275 -333
- webscout/Provider/TTS/utils.py +280 -280
- webscout/Provider/TextPollinationsAI.py +331 -308
- webscout/Provider/TogetherAI.py +450 -0
- webscout/Provider/TwoAI.py +309 -475
- webscout/Provider/TypliAI.py +311 -305
- webscout/Provider/UNFINISHED/ChatHub.py +219 -209
- webscout/Provider/{OPENAI/glider.py → UNFINISHED/ChutesAI.py} +331 -326
- webscout/Provider/{GizAI.py → UNFINISHED/GizAI.py} +300 -295
- webscout/Provider/{Marcus.py → UNFINISHED/Marcus.py} +218 -198
- webscout/Provider/UNFINISHED/Qodo.py +481 -0
- webscout/Provider/{MCPCore.py → UNFINISHED/XenAI.py} +330 -315
- webscout/Provider/UNFINISHED/Youchat.py +347 -330
- webscout/Provider/UNFINISHED/aihumanizer.py +41 -0
- webscout/Provider/UNFINISHED/grammerchecker.py +37 -0
- webscout/Provider/UNFINISHED/liner.py +342 -0
- webscout/Provider/UNFINISHED/liner_api_request.py +246 -263
- webscout/Provider/{samurai.py → UNFINISHED/samurai.py} +231 -224
- webscout/Provider/WiseCat.py +256 -233
- webscout/Provider/WrDoChat.py +390 -370
- webscout/Provider/__init__.py +115 -174
- webscout/Provider/ai4chat.py +181 -174
- webscout/Provider/akashgpt.py +330 -335
- webscout/Provider/cerebras.py +397 -290
- webscout/Provider/cleeai.py +236 -213
- webscout/Provider/elmo.py +291 -283
- webscout/Provider/geminiapi.py +343 -208
- webscout/Provider/julius.py +245 -223
- webscout/Provider/learnfastai.py +333 -325
- webscout/Provider/llama3mitril.py +230 -215
- webscout/Provider/llmchat.py +308 -258
- webscout/Provider/llmchatco.py +321 -306
- webscout/Provider/meta.py +996 -801
- webscout/Provider/oivscode.py +332 -309
- webscout/Provider/searchchat.py +316 -292
- webscout/Provider/sonus.py +264 -258
- webscout/Provider/toolbaz.py +359 -353
- webscout/Provider/turboseek.py +332 -266
- webscout/Provider/typefully.py +262 -202
- webscout/Provider/x0gpt.py +332 -299
- webscout/__init__.py +31 -39
- webscout/__main__.py +5 -5
- webscout/cli.py +585 -524
- webscout/client.py +1497 -70
- webscout/conversation.py +140 -436
- webscout/exceptions.py +383 -362
- webscout/litagent/__init__.py +29 -29
- webscout/litagent/agent.py +492 -455
- webscout/litagent/constants.py +60 -60
- webscout/models.py +505 -181
- webscout/optimizers.py +74 -420
- webscout/prompt_manager.py +376 -288
- webscout/sanitize.py +1514 -0
- webscout/scout/README.md +452 -404
- webscout/scout/__init__.py +8 -8
- webscout/scout/core/__init__.py +7 -7
- webscout/scout/core/crawler.py +330 -210
- webscout/scout/core/scout.py +800 -607
- webscout/scout/core/search_result.py +51 -96
- webscout/scout/core/text_analyzer.py +64 -63
- webscout/scout/core/text_utils.py +412 -277
- webscout/scout/core/web_analyzer.py +54 -52
- webscout/scout/element.py +872 -478
- webscout/scout/parsers/__init__.py +70 -69
- webscout/scout/parsers/html5lib_parser.py +182 -172
- webscout/scout/parsers/html_parser.py +238 -236
- webscout/scout/parsers/lxml_parser.py +203 -178
- webscout/scout/utils.py +38 -37
- webscout/search/__init__.py +47 -0
- webscout/search/base.py +201 -0
- webscout/search/bing_main.py +45 -0
- webscout/search/brave_main.py +92 -0
- webscout/search/duckduckgo_main.py +57 -0
- webscout/search/engines/__init__.py +127 -0
- webscout/search/engines/bing/__init__.py +15 -0
- webscout/search/engines/bing/base.py +35 -0
- webscout/search/engines/bing/images.py +114 -0
- webscout/search/engines/bing/news.py +96 -0
- webscout/search/engines/bing/suggestions.py +36 -0
- webscout/search/engines/bing/text.py +109 -0
- webscout/search/engines/brave/__init__.py +19 -0
- webscout/search/engines/brave/base.py +47 -0
- webscout/search/engines/brave/images.py +213 -0
- webscout/search/engines/brave/news.py +353 -0
- webscout/search/engines/brave/suggestions.py +318 -0
- webscout/search/engines/brave/text.py +167 -0
- webscout/search/engines/brave/videos.py +364 -0
- webscout/search/engines/duckduckgo/__init__.py +25 -0
- webscout/search/engines/duckduckgo/answers.py +80 -0
- webscout/search/engines/duckduckgo/base.py +189 -0
- webscout/search/engines/duckduckgo/images.py +100 -0
- webscout/search/engines/duckduckgo/maps.py +183 -0
- webscout/search/engines/duckduckgo/news.py +70 -0
- webscout/search/engines/duckduckgo/suggestions.py +22 -0
- webscout/search/engines/duckduckgo/text.py +221 -0
- webscout/search/engines/duckduckgo/translate.py +48 -0
- webscout/search/engines/duckduckgo/videos.py +80 -0
- webscout/search/engines/duckduckgo/weather.py +84 -0
- webscout/search/engines/mojeek.py +61 -0
- webscout/search/engines/wikipedia.py +77 -0
- webscout/search/engines/yahoo/__init__.py +41 -0
- webscout/search/engines/yahoo/answers.py +19 -0
- webscout/search/engines/yahoo/base.py +34 -0
- webscout/search/engines/yahoo/images.py +323 -0
- webscout/search/engines/yahoo/maps.py +19 -0
- webscout/search/engines/yahoo/news.py +258 -0
- webscout/search/engines/yahoo/suggestions.py +140 -0
- webscout/search/engines/yahoo/text.py +273 -0
- webscout/search/engines/yahoo/translate.py +19 -0
- webscout/search/engines/yahoo/videos.py +302 -0
- webscout/search/engines/yahoo/weather.py +220 -0
- webscout/search/engines/yandex.py +67 -0
- webscout/search/engines/yep/__init__.py +13 -0
- webscout/search/engines/yep/base.py +34 -0
- webscout/search/engines/yep/images.py +101 -0
- webscout/search/engines/yep/suggestions.py +38 -0
- webscout/search/engines/yep/text.py +99 -0
- webscout/search/http_client.py +172 -0
- webscout/search/results.py +141 -0
- webscout/search/yahoo_main.py +57 -0
- webscout/search/yep_main.py +48 -0
- webscout/server/__init__.py +48 -0
- webscout/server/config.py +78 -0
- webscout/server/exceptions.py +69 -0
- webscout/server/providers.py +286 -0
- webscout/server/request_models.py +131 -0
- webscout/server/request_processing.py +404 -0
- webscout/server/routes.py +642 -0
- webscout/server/server.py +351 -0
- webscout/server/ui_templates.py +1171 -0
- webscout/swiftcli/__init__.py +79 -95
- webscout/swiftcli/core/__init__.py +7 -7
- webscout/swiftcli/core/cli.py +574 -297
- webscout/swiftcli/core/context.py +98 -104
- webscout/swiftcli/core/group.py +268 -241
- webscout/swiftcli/decorators/__init__.py +28 -28
- webscout/swiftcli/decorators/command.py +243 -221
- webscout/swiftcli/decorators/options.py +247 -220
- webscout/swiftcli/decorators/output.py +392 -252
- webscout/swiftcli/exceptions.py +21 -21
- webscout/swiftcli/plugins/__init__.py +9 -9
- webscout/swiftcli/plugins/base.py +134 -135
- webscout/swiftcli/plugins/manager.py +269 -269
- webscout/swiftcli/utils/__init__.py +58 -59
- webscout/swiftcli/utils/formatting.py +251 -252
- webscout/swiftcli/utils/parsing.py +368 -267
- webscout/update_checker.py +280 -136
- webscout/utils.py +28 -14
- webscout/version.py +2 -1
- webscout/version.py.bak +3 -0
- webscout/zeroart/__init__.py +218 -135
- webscout/zeroart/base.py +70 -66
- webscout/zeroart/effects.py +155 -101
- webscout/zeroart/fonts.py +1799 -1239
- webscout-2026.1.19.dist-info/METADATA +638 -0
- webscout-2026.1.19.dist-info/RECORD +312 -0
- {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/WHEEL +1 -1
- {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/entry_points.txt +1 -1
- webscout/DWEBS.py +0 -520
- webscout/Extra/Act.md +0 -309
- webscout/Extra/GitToolkit/gitapi/README.md +0 -110
- webscout/Extra/autocoder/__init__.py +0 -9
- webscout/Extra/autocoder/autocoder.py +0 -1105
- webscout/Extra/autocoder/autocoder_utiles.py +0 -332
- webscout/Extra/gguf.md +0 -430
- webscout/Extra/weather.md +0 -281
- webscout/Litlogger/README.md +0 -10
- webscout/Litlogger/__init__.py +0 -15
- webscout/Litlogger/formats.py +0 -4
- webscout/Litlogger/handlers.py +0 -103
- webscout/Litlogger/levels.py +0 -13
- webscout/Litlogger/logger.py +0 -92
- webscout/Provider/AI21.py +0 -177
- webscout/Provider/AISEARCH/DeepFind.py +0 -254
- webscout/Provider/AISEARCH/felo_search.py +0 -202
- webscout/Provider/AISEARCH/genspark_search.py +0 -324
- webscout/Provider/AISEARCH/hika_search.py +0 -186
- webscout/Provider/AISEARCH/scira_search.py +0 -298
- webscout/Provider/Aitopia.py +0 -316
- webscout/Provider/AllenAI.py +0 -440
- webscout/Provider/Blackboxai.py +0 -791
- webscout/Provider/ChatGPTClone.py +0 -237
- webscout/Provider/ChatGPTGratis.py +0 -194
- webscout/Provider/Cloudflare.py +0 -324
- webscout/Provider/ExaChat.py +0 -358
- webscout/Provider/Flowith.py +0 -217
- webscout/Provider/FreeGemini.py +0 -250
- webscout/Provider/Glider.py +0 -225
- webscout/Provider/HF_space/__init__.py +0 -0
- webscout/Provider/HF_space/qwen_qwen2.py +0 -206
- webscout/Provider/HuggingFaceChat.py +0 -469
- webscout/Provider/Hunyuan.py +0 -283
- webscout/Provider/LambdaChat.py +0 -411
- webscout/Provider/Llama3.py +0 -259
- webscout/Provider/Nemotron.py +0 -218
- webscout/Provider/OLLAMA.py +0 -396
- webscout/Provider/OPENAI/BLACKBOXAI.py +0 -766
- webscout/Provider/OPENAI/Cloudflare.py +0 -378
- webscout/Provider/OPENAI/FreeGemini.py +0 -283
- webscout/Provider/OPENAI/NEMOTRON.py +0 -232
- webscout/Provider/OPENAI/Qwen3.py +0 -283
- webscout/Provider/OPENAI/api.py +0 -969
- webscout/Provider/OPENAI/c4ai.py +0 -373
- webscout/Provider/OPENAI/chatgptclone.py +0 -494
- webscout/Provider/OPENAI/copilot.py +0 -242
- webscout/Provider/OPENAI/flowith.py +0 -162
- webscout/Provider/OPENAI/freeaichat.py +0 -359
- webscout/Provider/OPENAI/mcpcore.py +0 -389
- webscout/Provider/OPENAI/multichat.py +0 -376
- webscout/Provider/OPENAI/opkfc.py +0 -496
- webscout/Provider/OPENAI/scirachat.py +0 -477
- webscout/Provider/OPENAI/standardinput.py +0 -433
- webscout/Provider/OPENAI/typegpt.py +0 -364
- webscout/Provider/OPENAI/uncovrAI.py +0 -463
- webscout/Provider/OPENAI/venice.py +0 -431
- webscout/Provider/OPENAI/yep.py +0 -382
- webscout/Provider/OpenGPT.py +0 -209
- webscout/Provider/Perplexitylabs.py +0 -415
- webscout/Provider/Reka.py +0 -214
- webscout/Provider/StandardInput.py +0 -290
- webscout/Provider/TTI/aiarta.py +0 -365
- webscout/Provider/TTI/artbit.py +0 -0
- webscout/Provider/TTI/fastflux.py +0 -200
- webscout/Provider/TTI/piclumen.py +0 -203
- webscout/Provider/TTI/pixelmuse.py +0 -225
- webscout/Provider/TTS/gesserit.py +0 -128
- webscout/Provider/TTS/sthir.py +0 -94
- webscout/Provider/TeachAnything.py +0 -229
- webscout/Provider/UNFINISHED/puterjs.py +0 -635
- webscout/Provider/UNFINISHED/test_lmarena.py +0 -119
- webscout/Provider/Venice.py +0 -258
- webscout/Provider/VercelAI.py +0 -253
- webscout/Provider/Writecream.py +0 -246
- webscout/Provider/WritingMate.py +0 -269
- webscout/Provider/asksteve.py +0 -220
- webscout/Provider/chatglm.py +0 -215
- webscout/Provider/copilot.py +0 -425
- webscout/Provider/freeaichat.py +0 -285
- webscout/Provider/granite.py +0 -235
- webscout/Provider/hermes.py +0 -266
- webscout/Provider/koala.py +0 -170
- webscout/Provider/lmarena.py +0 -198
- webscout/Provider/multichat.py +0 -364
- webscout/Provider/scira_chat.py +0 -299
- webscout/Provider/scnet.py +0 -243
- webscout/Provider/talkai.py +0 -194
- webscout/Provider/typegpt.py +0 -289
- webscout/Provider/uncovr.py +0 -368
- webscout/Provider/yep.py +0 -389
- webscout/litagent/Readme.md +0 -276
- webscout/litprinter/__init__.py +0 -59
- webscout/swiftcli/Readme.md +0 -323
- webscout/tempid.py +0 -128
- webscout/webscout_search.py +0 -1184
- webscout/webscout_search_async.py +0 -654
- webscout/yep_search.py +0 -347
- webscout/zeroart/README.md +0 -89
- webscout-8.2.9.dist-info/METADATA +0 -1033
- webscout-8.2.9.dist-info/RECORD +0 -289
- {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/licenses/LICENSE.md +0 -0
- {webscout-8.2.9.dist-info → webscout-2026.1.19.dist-info}/top_level.txt +0 -0
webscout/litprinter/__init__.py
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
>>> from litprinter import litprint
|
|
3
|
-
>>> from litprinter import lit
|
|
4
|
-
>>> from litprinter import install, uninstall
|
|
5
|
-
>>>
|
|
6
|
-
>>> litprint("Hello, world!")
|
|
7
|
-
LIT -> [__main__.py:1] in () >>> Hello, world!
|
|
8
|
-
>>>
|
|
9
|
-
>>> def my_function():
|
|
10
|
-
... lit(1, 2, 3)
|
|
11
|
-
>>> my_function()
|
|
12
|
-
LIT -> [__main__.py:4] in my_function() >>> 1, 2, 3
|
|
13
|
-
>>> install()
|
|
14
|
-
>>> ic("This is now the builtins.ic()")
|
|
15
|
-
LIT -> [__main__.py:7] in () >>> This is now the builtins.ic()
|
|
16
|
-
>>> uninstall()
|
|
17
|
-
|
|
18
|
-
This module provides enhanced print and logging functionalities for Python,
|
|
19
|
-
allowing developers to debug their code with style and precision. It
|
|
20
|
-
includes the litprint and lit functions for debugging, log for logging, and
|
|
21
|
-
install/uninstall functions for integration into the builtins module.
|
|
22
|
-
It also handles colorizing output and provides different styles and customizable
|
|
23
|
-
options.
|
|
24
|
-
|
|
25
|
-
LITPRINTER is inspired by the icecream package and provides similar functionality
|
|
26
|
-
with additional features:
|
|
27
|
-
- Variable inspection with expression display
|
|
28
|
-
- Return value handling for inline usage
|
|
29
|
-
- Support for custom formatters for specific data types
|
|
30
|
-
- Execution context tracking
|
|
31
|
-
- Rich-like colorized output with multiple themes (JARVIS, RICH, MODERN, NEON, CYBERPUNK)
|
|
32
|
-
- Better JSON formatting with indent=2 by default
|
|
33
|
-
- Advanced pretty printing for complex data structures with smart truncation
|
|
34
|
-
- Clickable file paths in supported terminals and editors (VSCode compatible)
|
|
35
|
-
- Enhanced visual formatting with better spacing and separators
|
|
36
|
-
- Special formatters for common types (Exception, bytes, set, frozenset, etc.)
|
|
37
|
-
- Smart object introspection for custom classes
|
|
38
|
-
- Logging capabilities with timestamp and log levels
|
|
39
|
-
"""
|
|
40
|
-
|
|
41
|
-
# Try to import from the standalone litprinter package first
|
|
42
|
-
# If it's not installed
|
|
43
|
-
try:
|
|
44
|
-
import litprinter
|
|
45
|
-
# If standalone package is found, re-export all its components
|
|
46
|
-
from litprinter import litprint, lit, log, ic, install, uninstall
|
|
47
|
-
from litprinter import LITPrintDebugger, argumentToString
|
|
48
|
-
from litprinter import JARVIS, RICH, MODERN, NEON, CYBERPUNK, create_custom_style
|
|
49
|
-
from litprinter import traceback
|
|
50
|
-
# For compatibility with icecream
|
|
51
|
-
enable = litprinter.enable
|
|
52
|
-
disable = litprinter.disable
|
|
53
|
-
|
|
54
|
-
except ImportError:
|
|
55
|
-
# Raise a more informative error when litprinter is not installed
|
|
56
|
-
raise ImportError(
|
|
57
|
-
"The 'litprinter' package is required but not installed. "
|
|
58
|
-
"Please install it using: pip install litprinter"
|
|
59
|
-
) from None
|
webscout/swiftcli/Readme.md
DELETED
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
<div align="center">
|
|
2
|
-
|
|
3
|
-
# ⚡ SwiftCLI
|
|
4
|
-
|
|
5
|
-
> Build Beautiful Command-Line Applications at Light Speed
|
|
6
|
-
|
|
7
|
-
[](https://www.python.org)
|
|
8
|
-
[](https://pypi.org/project/webscout/)
|
|
9
|
-
[](LICENSE)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
</div>
|
|
13
|
-
|
|
14
|
-
## 🌟 Key Features
|
|
15
|
-
|
|
16
|
-
- 🎨 **Rich Output**: Beautiful tables, progress bars, and styled text
|
|
17
|
-
- 🔄 **Command Groups**: Organize commands logically
|
|
18
|
-
- 🎯 **Type Safety**: Full type hints and runtime validation
|
|
19
|
-
- 🔌 **Plugin System**: Extend functionality easily
|
|
20
|
-
- 🌍 **Environment Support**: Load config from env vars and files
|
|
21
|
-
- 🚀 **Modern Python**: Async support, type hints, and more
|
|
22
|
-
|
|
23
|
-
## 📦 Installation
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
pip install -U webscout
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## 🚀 Quick Start
|
|
30
|
-
|
|
31
|
-
```python
|
|
32
|
-
from webscout.swiftcli import CLI, option, table_output
|
|
33
|
-
|
|
34
|
-
app = CLI("myapp", version="1.0.0")
|
|
35
|
-
|
|
36
|
-
@app.command()
|
|
37
|
-
@option("--count", "-c", type=int, default=5)
|
|
38
|
-
@table_output(["ID", "Status"])
|
|
39
|
-
def list_items(count: int):
|
|
40
|
-
"""List system items with status"""
|
|
41
|
-
return [
|
|
42
|
-
[i, "Active" if i % 2 == 0 else "Inactive"]
|
|
43
|
-
for i in range(1, count + 1)
|
|
44
|
-
]
|
|
45
|
-
|
|
46
|
-
if __name__ == "__main__":
|
|
47
|
-
app.run()
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
Run it:
|
|
51
|
-
```bash
|
|
52
|
-
$ python app.py list-items --count 3
|
|
53
|
-
┌────┬──────────┐
|
|
54
|
-
│ ID │ Status │
|
|
55
|
-
├────┼──────────┤
|
|
56
|
-
│ 1 │ Inactive │
|
|
57
|
-
│ 2 │ Active │
|
|
58
|
-
│ 3 │ Inactive │
|
|
59
|
-
└────┴──────────┘
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## 📚 Documentation
|
|
63
|
-
|
|
64
|
-
### Command Groups
|
|
65
|
-
|
|
66
|
-
Organize related commands:
|
|
67
|
-
|
|
68
|
-
```python
|
|
69
|
-
@app.group()
|
|
70
|
-
def db():
|
|
71
|
-
"""Database operations"""
|
|
72
|
-
pass
|
|
73
|
-
|
|
74
|
-
@db.command()
|
|
75
|
-
@option("--force", is_flag=True)
|
|
76
|
-
def migrate(force: bool):
|
|
77
|
-
"""Run database migrations"""
|
|
78
|
-
print(f"Running migrations (force={force})")
|
|
79
|
-
|
|
80
|
-
# Usage: python app.py db migrate --force
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Rich Output
|
|
84
|
-
|
|
85
|
-
Beautiful progress bars and tables:
|
|
86
|
-
|
|
87
|
-
```python
|
|
88
|
-
@app.command()
|
|
89
|
-
@progress("Processing")
|
|
90
|
-
async def process():
|
|
91
|
-
"""Process items with progress"""
|
|
92
|
-
for i in range(5):
|
|
93
|
-
yield f"Step {i+1}/5"
|
|
94
|
-
await asyncio.sleep(0.5)
|
|
95
|
-
|
|
96
|
-
@app.command()
|
|
97
|
-
@table_output(["Name", "Score"])
|
|
98
|
-
def top_scores():
|
|
99
|
-
"""Show top scores"""
|
|
100
|
-
return [
|
|
101
|
-
["Alice", 100],
|
|
102
|
-
["Bob", 95],
|
|
103
|
-
["Charlie", 90]
|
|
104
|
-
]
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
### Type-Safe Options
|
|
108
|
-
|
|
109
|
-
```python
|
|
110
|
-
from enum import Enum
|
|
111
|
-
from datetime import datetime
|
|
112
|
-
from typing import List, Optional
|
|
113
|
-
|
|
114
|
-
class Format(Enum):
|
|
115
|
-
JSON = "json"
|
|
116
|
-
YAML = "yaml"
|
|
117
|
-
CSV = "csv"
|
|
118
|
-
|
|
119
|
-
@app.command()
|
|
120
|
-
@option("--format", type=Format, default=Format.JSON)
|
|
121
|
-
@option("--date", type=datetime)
|
|
122
|
-
@option("--tags", type=List[str])
|
|
123
|
-
def export(
|
|
124
|
-
format: Format,
|
|
125
|
-
date: datetime,
|
|
126
|
-
tags: Optional[List[str]] = None
|
|
127
|
-
):
|
|
128
|
-
"""Export data with type validation"""
|
|
129
|
-
print(f"Exporting as {format.value}")
|
|
130
|
-
print(f"Date: {date}")
|
|
131
|
-
if tags:
|
|
132
|
-
print(f"Tags: {', '.join(tags)}")
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### Environment & Config
|
|
136
|
-
|
|
137
|
-
```python
|
|
138
|
-
@app.command()
|
|
139
|
-
@envvar("API_KEY", required=True)
|
|
140
|
-
@config_file("~/.config/myapp.yaml")
|
|
141
|
-
def api_call(api_key: str, config: dict):
|
|
142
|
-
"""Make API call using config"""
|
|
143
|
-
url = config.get("api_url")
|
|
144
|
-
print(f"Calling {url} with key {api_key[:4]}...")
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
### Async Support
|
|
148
|
-
|
|
149
|
-
```python
|
|
150
|
-
@app.command()
|
|
151
|
-
async def fetch_data():
|
|
152
|
-
"""Fetch data asynchronously"""
|
|
153
|
-
async with aiohttp.ClientSession() as session:
|
|
154
|
-
async with session.get("https://api.example.com") as resp:
|
|
155
|
-
data = await resp.json()
|
|
156
|
-
return data
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### Plugin System
|
|
160
|
-
|
|
161
|
-
```python
|
|
162
|
-
from webscout.swiftcli import Plugin
|
|
163
|
-
|
|
164
|
-
class MetricsPlugin(Plugin):
|
|
165
|
-
def __init__(self):
|
|
166
|
-
self.start_time = None
|
|
167
|
-
|
|
168
|
-
def before_command(self, command: str, args: list):
|
|
169
|
-
self.start_time = time.time()
|
|
170
|
-
|
|
171
|
-
def after_command(self, command: str, args: list, result: any):
|
|
172
|
-
duration = time.time() - self.start_time
|
|
173
|
-
print(f"Command {command} took {duration:.2f}s")
|
|
174
|
-
|
|
175
|
-
app.plugin_manager.register(MetricsPlugin())
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
## 🛠 Advanced Features
|
|
179
|
-
|
|
180
|
-
### Custom Output Formatting
|
|
181
|
-
|
|
182
|
-
```python
|
|
183
|
-
from rich.console import Console
|
|
184
|
-
from rich.panel import Panel
|
|
185
|
-
from rich.table import Table
|
|
186
|
-
|
|
187
|
-
console = Console()
|
|
188
|
-
|
|
189
|
-
@app.command()
|
|
190
|
-
def status():
|
|
191
|
-
"""Show system status"""
|
|
192
|
-
table = Table(show_header=True)
|
|
193
|
-
table.add_column("Service")
|
|
194
|
-
table.add_column("Status")
|
|
195
|
-
table.add_column("Uptime")
|
|
196
|
-
|
|
197
|
-
table.add_row("API", "✅ Online", "24h")
|
|
198
|
-
table.add_row("DB", "✅ Online", "12h")
|
|
199
|
-
table.add_row("Cache", "⚠️ Degraded", "6h")
|
|
200
|
-
|
|
201
|
-
console.print(Panel(
|
|
202
|
-
table,
|
|
203
|
-
title="System Status",
|
|
204
|
-
border_style="green"
|
|
205
|
-
))
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
### Command Pipelines
|
|
209
|
-
|
|
210
|
-
```python
|
|
211
|
-
@app.group(chain=True)
|
|
212
|
-
def process():
|
|
213
|
-
"""Data processing pipeline"""
|
|
214
|
-
pass
|
|
215
|
-
|
|
216
|
-
@process.command()
|
|
217
|
-
def extract():
|
|
218
|
-
"""Extract data"""
|
|
219
|
-
return {"data": [1, 2, 3]}
|
|
220
|
-
|
|
221
|
-
@process.command()
|
|
222
|
-
def transform(data: dict):
|
|
223
|
-
"""Transform data"""
|
|
224
|
-
return {"data": [x * 2 for x in data["data"]]}
|
|
225
|
-
|
|
226
|
-
@process.command()
|
|
227
|
-
def load(data: dict):
|
|
228
|
-
"""Load data"""
|
|
229
|
-
print(f"Loading: {data}")
|
|
230
|
-
|
|
231
|
-
# Usage: python app.py process extract transform load
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
## 🔧 Configuration
|
|
235
|
-
|
|
236
|
-
### Application Config
|
|
237
|
-
|
|
238
|
-
```python
|
|
239
|
-
app = CLI(
|
|
240
|
-
name="myapp",
|
|
241
|
-
version="1.0.0",
|
|
242
|
-
description="My awesome CLI app",
|
|
243
|
-
config_file="~/.config/myapp.yaml",
|
|
244
|
-
auto_envvar_prefix="MYAPP",
|
|
245
|
-
plugin_folder="~/.myapp/plugins"
|
|
246
|
-
)
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
### Command Config
|
|
250
|
-
|
|
251
|
-
```python
|
|
252
|
-
@app.command()
|
|
253
|
-
@option("--config", type=click.Path(exists=True))
|
|
254
|
-
@option("--verbose", "-v", count=True)
|
|
255
|
-
@option("--format", type=click.Choice(["json", "yaml"]))
|
|
256
|
-
def process(config: str, verbose: int, format: str):
|
|
257
|
-
"""Process with configuration"""
|
|
258
|
-
pass
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
## 📋 Best Practices
|
|
262
|
-
|
|
263
|
-
1. **Use Type Hints**
|
|
264
|
-
```python
|
|
265
|
-
from typing import Optional, List, Dict
|
|
266
|
-
|
|
267
|
-
@app.command()
|
|
268
|
-
def search(
|
|
269
|
-
query: str,
|
|
270
|
-
limit: Optional[int] = 10,
|
|
271
|
-
tags: List[str] = None
|
|
272
|
-
) -> Dict[str, any]:
|
|
273
|
-
"""Search with proper type hints"""
|
|
274
|
-
pass
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
2. **Structured Error Handling**
|
|
278
|
-
```python
|
|
279
|
-
from webscout.swiftcli import CLIError
|
|
280
|
-
|
|
281
|
-
@app.command()
|
|
282
|
-
def risky():
|
|
283
|
-
try:
|
|
284
|
-
# Risky operation
|
|
285
|
-
pass
|
|
286
|
-
except FileNotFoundError as e:
|
|
287
|
-
raise CLIError("Config file not found") from e
|
|
288
|
-
except PermissionError as e:
|
|
289
|
-
raise CLIError("Permission denied") from e
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
3. **Command Organization**
|
|
293
|
-
```python
|
|
294
|
-
# commands/
|
|
295
|
-
# ├── __init__.py
|
|
296
|
-
# ├── db.py
|
|
297
|
-
# ├── auth.py
|
|
298
|
-
# └── utils.py
|
|
299
|
-
|
|
300
|
-
from .commands import db, auth, utils
|
|
301
|
-
|
|
302
|
-
app.add_command_group(db.commands)
|
|
303
|
-
app.add_command_group(auth.commands)
|
|
304
|
-
app.add_command_group(utils.commands)
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
## 🤝 Contributing
|
|
308
|
-
|
|
309
|
-
Contributions are welcome! Check out our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
310
|
-
|
|
311
|
-
## 📝 License
|
|
312
|
-
|
|
313
|
-
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
314
|
-
|
|
315
|
-
<div align="center">
|
|
316
|
-
|
|
317
|
-
---
|
|
318
|
-
|
|
319
|
-
Made with ❤️ by the [Webscout](https://github.com/OEvortex/Webscout) team
|
|
320
|
-
|
|
321
|
-
[](https://github.com/OEvortex/Webscout)
|
|
322
|
-
|
|
323
|
-
</div>
|
webscout/tempid.py
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import aiohttp
|
|
2
|
-
from dataclasses import dataclass
|
|
3
|
-
from typing import NoReturn, List, Dict, Any, Optional, Union
|
|
4
|
-
import requests
|
|
5
|
-
|
|
6
|
-
@dataclass
|
|
7
|
-
class DomainModel:
|
|
8
|
-
name: str
|
|
9
|
-
type: str
|
|
10
|
-
forward_available: str
|
|
11
|
-
forward_max_seconds: str
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@dataclass
|
|
15
|
-
class CreateEmailResponseModel:
|
|
16
|
-
email: str
|
|
17
|
-
token: str
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
@dataclass
|
|
21
|
-
class MessageResponseModel:
|
|
22
|
-
attachments: Optional[List[Any]]
|
|
23
|
-
body_html: Optional[str]
|
|
24
|
-
body_text: Optional[str]
|
|
25
|
-
cc: Optional[str]
|
|
26
|
-
created_at: str
|
|
27
|
-
email_from: Optional[str]
|
|
28
|
-
id: str
|
|
29
|
-
subject: Optional[str]
|
|
30
|
-
email_to: Optional[str]
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class TempMail:
|
|
34
|
-
def __init__(self):
|
|
35
|
-
self._session = aiohttp.ClientSession(
|
|
36
|
-
base_url="https://api.internal.temp-mail.io",
|
|
37
|
-
headers={
|
|
38
|
-
'Host': 'api.internal.temp-mail.io',
|
|
39
|
-
'User-Agent': 'okhttp/4.5.0',
|
|
40
|
-
'Connection': 'close'
|
|
41
|
-
}
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
async def close(self) -> None:
|
|
45
|
-
if not self._session.closed:
|
|
46
|
-
await self._session.close()
|
|
47
|
-
|
|
48
|
-
async def __aenter__(self):
|
|
49
|
-
return self
|
|
50
|
-
|
|
51
|
-
async def __aexit__(self, exc_type, exc_val, exc_tb):
|
|
52
|
-
await self.close()
|
|
53
|
-
return None
|
|
54
|
-
|
|
55
|
-
async def get_domains(self) -> List[DomainModel]:
|
|
56
|
-
async with self._session.get("/api/v3/domains") as response:
|
|
57
|
-
response_json = await response.json()
|
|
58
|
-
return [DomainModel(domain['name'], domain['type'], domain['forward_available'], domain['forward_max_seconds']) for domain in response_json['domains']]
|
|
59
|
-
|
|
60
|
-
async def create_email(self, alias: Optional[str] = None, domain: Optional[str] = None) -> CreateEmailResponseModel:
|
|
61
|
-
async with self._session.post("/api/v3/email/new", data={'name': alias, 'domain': domain}) as response:
|
|
62
|
-
response_json = await response.json()
|
|
63
|
-
return CreateEmailResponseModel(response_json['email'], response_json['token'])
|
|
64
|
-
|
|
65
|
-
async def delete_email(self, email: str, token: str) -> bool:
|
|
66
|
-
async with self._session.delete(f"/api/v3/email/{email}", data={'token': token}) as response:
|
|
67
|
-
if response.status == 200:
|
|
68
|
-
return True
|
|
69
|
-
else:
|
|
70
|
-
return False
|
|
71
|
-
|
|
72
|
-
async def get_messages(self, email: str) -> Optional[List[MessageResponseModel]]:
|
|
73
|
-
async with self._session.get(f"/api/v3/email/{email}/messages") as response:
|
|
74
|
-
response_json = await response.json()
|
|
75
|
-
if len(response_json) == 0:
|
|
76
|
-
return None
|
|
77
|
-
return [MessageResponseModel(message['attachments'], message['body_html'], message['body_text'], message['cc'], message['created_at'], message['from'], message['id'], message['subject'], message['to']) for message in response_json]
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
class VNEngine:
|
|
81
|
-
def __init__(self) -> NoReturn:
|
|
82
|
-
self.lang: str = "?lang=en"
|
|
83
|
-
self.base: str = "https://onlinesim.io/"
|
|
84
|
-
self.endpoint: str = "api/v1/free_numbers_content/"
|
|
85
|
-
self.country_url: str = f"{self.base}{self.endpoint}countries"
|
|
86
|
-
|
|
87
|
-
def get_online_countries(self) -> List[Dict[str, str]]:
|
|
88
|
-
response: Any = requests.get(url=self.country_url).json()
|
|
89
|
-
if response["response"] == "1":
|
|
90
|
-
all_countries: List[Dict[str, str]] = response["counties"]
|
|
91
|
-
online_countries: List[Dict[str, str]] = list(
|
|
92
|
-
filter(lambda x: x["online"] == True, all_countries)
|
|
93
|
-
)
|
|
94
|
-
return online_countries
|
|
95
|
-
return []
|
|
96
|
-
|
|
97
|
-
def get_country_numbers(self, country: str) -> List[Dict[str, str]]:
|
|
98
|
-
numbers_url: str = f"{self.country_url}/{country}{self.lang}"
|
|
99
|
-
response: Any = requests.get(url=numbers_url).json()
|
|
100
|
-
if response["response"] == "1":
|
|
101
|
-
numbers: List[Dict[str, str]] = list(
|
|
102
|
-
map(lambda x: {"data_humans": x["data_humans"], "full_number": x["full_number"]}, response["numbers"])
|
|
103
|
-
)
|
|
104
|
-
return numbers
|
|
105
|
-
return []
|
|
106
|
-
|
|
107
|
-
def get_number_inbox(self, country: str, number: str) -> Dict[str, str]:
|
|
108
|
-
number_detail_url: str = f"{self.country_url}/{country}/{number}{self.lang}"
|
|
109
|
-
response: Any = requests.get(url=number_detail_url).json()
|
|
110
|
-
if response["response"] != "1" or not response["online"]:
|
|
111
|
-
print(f"Error: Unable to retrieve inbox messages for {country} - {number}")
|
|
112
|
-
return {}
|
|
113
|
-
|
|
114
|
-
messages: List[Dict[str, str]] = []
|
|
115
|
-
for msg_data in response["messages"]["data"]:
|
|
116
|
-
try:
|
|
117
|
-
msg = {"data_humans": msg_data["data_humans"], "text": msg_data["text"]}
|
|
118
|
-
messages.append(msg)
|
|
119
|
-
except KeyError as e:
|
|
120
|
-
print(f"Warning: Missing key '{str(e)}' in message data")
|
|
121
|
-
|
|
122
|
-
return {"messages": messages}
|
|
123
|
-
|
|
124
|
-
class sms_message:
|
|
125
|
-
def __init__(self, content, frm, time):
|
|
126
|
-
self.content = content
|
|
127
|
-
self.frm = frm
|
|
128
|
-
self.time = time
|