webscout 7.2__tar.gz → 7.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.
Potentially problematic release.
This version of webscout might be problematic. Click here for more details.
- {webscout-7.2/webscout.egg-info → webscout-7.3}/PKG-INFO +55 -56
- {webscout-7.2 → webscout-7.3}/README.md +52 -2
- {webscout-7.2 → webscout-7.3}/webscout/Bard.py +2 -2
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/core/level.py +3 -0
- webscout-7.3/webscout/Litlogger/core/logger.py +166 -0
- webscout-7.3/webscout/Litlogger/handlers/console.py +33 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/handlers/network.py +16 -17
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/styles/colors.py +81 -63
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/styles/formats.py +163 -80
- webscout-7.3/webscout/Provider/AISEARCH/ISou.py +277 -0
- webscout-7.3/webscout/Provider/AISEARCH/__init__.py +3 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Deepinfra.py +40 -24
- webscout-7.3/webscout/Provider/TTI/FreeAIPlayground/__init__.py +9 -0
- webscout-7.3/webscout/Provider/TTI/FreeAIPlayground/async_freeaiplayground.py +206 -0
- webscout-7.3/webscout/Provider/TTI/FreeAIPlayground/sync_freeaiplayground.py +192 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/__init__.py +2 -1
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TextPollinationsAI.py +26 -5
- {webscout-7.2 → webscout-7.3}/webscout/Provider/__init__.py +2 -0
- webscout-7.3/webscout/Provider/freeaichat.py +221 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/yep.py +1 -1
- {webscout-7.2 → webscout-7.3}/webscout/__init__.py +1 -0
- {webscout-7.2 → webscout-7.3}/webscout/version.py +1 -1
- {webscout-7.2 → webscout-7.3}/webscout/webscout_search.py +82 -2
- {webscout-7.2 → webscout-7.3}/webscout/webscout_search_async.py +58 -1
- webscout-7.3/webscout/yep_search.py +297 -0
- {webscout-7.2 → webscout-7.3/webscout.egg-info}/PKG-INFO +55 -56
- {webscout-7.2 → webscout-7.3}/webscout.egg-info/SOURCES.txt +6 -0
- webscout-7.2/webscout/Litlogger/core/logger.py +0 -123
- webscout-7.2/webscout/Litlogger/handlers/console.py +0 -50
- webscout-7.2/webscout/Provider/AISEARCH/__init__.py +0 -2
- {webscout-7.2 → webscout-7.3}/LICENSE.md +0 -0
- {webscout-7.2 → webscout-7.3}/setup.cfg +0 -0
- {webscout-7.2 → webscout-7.3}/setup.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/AIauto.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/AIbase.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/AIutel.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/DWEBS.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/YTdownloader.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/transcriber.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/channel.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/errors.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/extras.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/https.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/patterns.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/playlist.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/pool.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/query.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/stream.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/utils.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/YTToolkit/ytapi/video.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/autocoder/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/autocoder/autocoder_utiles.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/autocoder/rawdog.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/autollama.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/gguf.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/weather.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Extra/weather_ascii.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/LLM.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/core/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/handlers/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/handlers/file.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/styles/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/styles/text.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/utils/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/utils/detectors.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Litlogger/utils/formatters.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Local/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Local/_version.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Local/formats.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Local/model.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Local/samplers.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Local/thread.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Local/ui.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Local/utils.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/AI21.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/AISEARCH/DeepFind.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/AISEARCH/felo_search.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Amigo.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Andi.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Bing.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Blackboxai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/ChatGPTES.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/ChatGPTGratis.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Chatify.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Cloudflare.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Cohere.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/DARKAI.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/DeepSeek.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/DiscordRocks.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/EDITEE.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Free2GPT.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/GPTWeb.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Gemini.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Glider.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Groq.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/HF_space/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/HF_space/qwen_qwen2.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Jadve.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Koboldai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Llama.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Llama3.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Marcus.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Netwrck.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/OLLAMA.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Openai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/PI.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Phind.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/PizzaGPT.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/QwenLM.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Reka.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/AiForce/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/AiForce/async_aiforce.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/AiForce/sync_aiforce.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/Nexra/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/Nexra/async_nexra.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/Nexra/sync_nexra.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/PollinationsAI/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/PollinationsAI/async_pollinations.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/PollinationsAI/sync_pollinations.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/artbit/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/artbit/async_artbit.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/artbit/sync_artbit.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/blackbox/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/blackbox/async_blackbox.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/blackbox/sync_blackbox.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/deepinfra/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/deepinfra/async_deepinfra.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/deepinfra/sync_deepinfra.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/huggingface/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/huggingface/async_huggingface.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/huggingface/sync_huggingface.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/imgninza/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/imgninza/async_ninza.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/imgninza/sync_ninza.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/talkai/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/talkai/async_talkai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTI/talkai/sync_talkai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/deepgram.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/elevenlabs.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/gesserit.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/murfai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/parler.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/streamElements.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/utils.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TTS/voicepod.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/TeachAnything.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/WiseCat.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/Youchat.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/ai4chat.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/aimathgpt.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/askmyai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/bagoodex.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/cerebras.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/chatglm.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/cleeai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/dgaf.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/elmo.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/gaurish.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/geminiapi.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/geminiprorealtime.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/granite.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/hermes.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/julius.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/koala.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/learnfastai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/lepton.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/llama3mitril.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/llamatutor.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/llmchat.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/meta.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/multichat.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/promptrefine.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/talkai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/turboseek.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/tutorai.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/typegpt.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/Provider/x0gpt.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/__main__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/cli.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/conversation.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/exceptions.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/litagent/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/litagent/agent.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/litagent/constants.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/litprinter/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/litprinter/colors.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/optimizers.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/prompt_manager.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/core/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/core/crawler.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/core/scout.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/core/search_result.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/core/text_analyzer.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/core/text_utils.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/core/web_analyzer.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/core.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/element.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/parsers/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/parsers/html5lib_parser.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/parsers/html_parser.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/parsers/lxml_parser.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/scout/utils.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/swiftcli/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/tempid.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/update_checker.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/utils.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/zeroart/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/zeroart/base.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/zeroart/effects.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout/zeroart/fonts.py +0 -0
- {webscout-7.2 → webscout-7.3}/webscout.egg-info/dependency_links.txt +0 -0
- {webscout-7.2 → webscout-7.3}/webscout.egg-info/entry_points.txt +0 -0
- {webscout-7.2 → webscout-7.3}/webscout.egg-info/requires.txt +0 -0
- {webscout-7.2 → webscout-7.3}/webscout.egg-info/top_level.txt +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/__init__.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/classifier.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/keywords.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/language.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/ner.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/normalizer.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/processor.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/sentiment.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/stemmer.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/tagger.py +0 -0
- {webscout-7.2 → webscout-7.3}/webstoken/tokenizer.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
2
|
Name: webscout
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.3
|
|
4
4
|
Summary: Search for anything using Google, DuckDuckGo, phind.com, Contains AI models, can transcribe yt videos, temporary email and phone number generation, has TTS support, webai (terminal gpt and open interpreter) and offline LLMs and more
|
|
5
5
|
Author: OEvortex
|
|
6
6
|
Author-email: helpingai5@gmail.com
|
|
@@ -23,60 +23,9 @@ Classifier: Topic :: Internet :: WWW/HTTP :: Indexing/Search
|
|
|
23
23
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
24
|
Requires-Python: >=3.7
|
|
25
25
|
Description-Content-Type: text/markdown
|
|
26
|
-
License-File: LICENSE.md
|
|
27
|
-
Requires-Dist: setuptools
|
|
28
|
-
Requires-Dist: wheel
|
|
29
|
-
Requires-Dist: pip
|
|
30
|
-
Requires-Dist: mistune
|
|
31
|
-
Requires-Dist: tenacity
|
|
32
|
-
Requires-Dist: curl_cffi
|
|
33
|
-
Requires-Dist: nest-asyncio
|
|
34
|
-
Requires-Dist: rich
|
|
35
|
-
Requires-Dist: markdownify
|
|
36
|
-
Requires-Dist: requests
|
|
37
|
-
Requires-Dist: google-generativeai
|
|
38
|
-
Requires-Dist: lxml>=5.2.2
|
|
39
|
-
Requires-Dist: termcolor
|
|
40
|
-
Requires-Dist: orjson
|
|
41
|
-
Requires-Dist: PyYAML
|
|
42
|
-
Requires-Dist: tls_client
|
|
43
|
-
Requires-Dist: clipman
|
|
44
|
-
Requires-Dist: playsound==1.2.2
|
|
45
|
-
Requires-Dist: ollama
|
|
46
|
-
Requires-Dist: pillow
|
|
47
|
-
Requires-Dist: bson
|
|
48
|
-
Requires-Dist: cloudscraper
|
|
49
|
-
Requires-Dist: html5lib
|
|
50
|
-
Requires-Dist: aiofiles
|
|
51
|
-
Requires-Dist: emoji
|
|
52
|
-
Requires-Dist: openai
|
|
53
|
-
Requires-Dist: prompt-toolkit
|
|
54
|
-
Requires-Dist: primp
|
|
55
|
-
Requires-Dist: pyreqwest_impersonate
|
|
56
|
-
Requires-Dist: gradio_client
|
|
57
|
-
Requires-Dist: psutil
|
|
58
|
-
Requires-Dist: pygetwindow
|
|
59
|
-
Requires-Dist: aiohttp
|
|
60
26
|
Provides-Extra: dev
|
|
61
|
-
Requires-Dist: ruff>=0.1.6; extra == "dev"
|
|
62
|
-
Requires-Dist: pytest>=7.4.2; extra == "dev"
|
|
63
27
|
Provides-Extra: local
|
|
64
|
-
|
|
65
|
-
Requires-Dist: colorama; extra == "local"
|
|
66
|
-
Requires-Dist: numpy; extra == "local"
|
|
67
|
-
Requires-Dist: huggingface_hub[cli]; extra == "local"
|
|
68
|
-
Requires-Dist: unicorn; extra == "local"
|
|
69
|
-
Dynamic: author
|
|
70
|
-
Dynamic: author-email
|
|
71
|
-
Dynamic: classifier
|
|
72
|
-
Dynamic: description
|
|
73
|
-
Dynamic: description-content-type
|
|
74
|
-
Dynamic: license
|
|
75
|
-
Dynamic: project-url
|
|
76
|
-
Dynamic: provides-extra
|
|
77
|
-
Dynamic: requires-dist
|
|
78
|
-
Dynamic: requires-python
|
|
79
|
-
Dynamic: summary
|
|
28
|
+
License-File: LICENSE.md
|
|
80
29
|
|
|
81
30
|
|
|
82
31
|
[](https://t.me/official_helpingai)
|
|
@@ -96,7 +45,7 @@ Dynamic: summary
|
|
|
96
45
|
<p align="center">
|
|
97
46
|
<strong>Webscout</strong> is the all-in-one search and AI toolkit you need.
|
|
98
47
|
<br>
|
|
99
|
-
Discover insights with
|
|
48
|
+
Discover insights with Yep.com, DuckDuckGo, and Phind; access cutting-edge AI models; transcribe YouTube videos; generate temporary emails and phone numbers; perform text-to-speech conversions; run offline language models; and much more!
|
|
100
49
|
</p>
|
|
101
50
|
|
|
102
51
|
<div align="center">
|
|
@@ -285,7 +234,43 @@ if __name__ == "__main__":
|
|
|
285
234
|
asyncio.run(main())
|
|
286
235
|
```
|
|
287
236
|
|
|
237
|
+
...
|
|
238
|
+
|
|
239
|
+
### 🔍 `YepSearch` - Search using Yep.com
|
|
288
240
|
|
|
241
|
+
```python
|
|
242
|
+
from webscout import YepSearch
|
|
243
|
+
|
|
244
|
+
# Initialize YepSearch
|
|
245
|
+
yep = YepSearch(
|
|
246
|
+
timeout=20, # Optional: Set custom timeout
|
|
247
|
+
proxies=None, # Optional: Use proxies
|
|
248
|
+
verify=True # Optional: SSL verification
|
|
249
|
+
)
|
|
250
|
+
|
|
251
|
+
# Text Search
|
|
252
|
+
text_results = yep.text(
|
|
253
|
+
keywords="artificial intelligence",
|
|
254
|
+
region="all", # Optional: Region for results
|
|
255
|
+
safesearch="moderate", # Optional: "on", "moderate", "off"
|
|
256
|
+
max_results=10 # Optional: Limit number of results
|
|
257
|
+
)
|
|
258
|
+
print(text_results)
|
|
259
|
+
|
|
260
|
+
# Image Search
|
|
261
|
+
image_results = yep.images(
|
|
262
|
+
keywords="nature photography",
|
|
263
|
+
region="all",
|
|
264
|
+
safesearch="moderate",
|
|
265
|
+
max_results=10
|
|
266
|
+
)
|
|
267
|
+
print(image_results)
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
# Suggestions
|
|
271
|
+
suggestions = yep.suggestions("hist")
|
|
272
|
+
print(suggestions)
|
|
273
|
+
```
|
|
289
274
|
|
|
290
275
|
## 🔍 GoogleS (formerly DWEBS)
|
|
291
276
|
|
|
@@ -517,8 +502,21 @@ with WEBS() as WEBS:
|
|
|
517
502
|
print(r)
|
|
518
503
|
```
|
|
519
504
|
|
|
505
|
+
### 9. `weather()` - Weather Information by DuckDuckGo.com
|
|
506
|
+
|
|
507
|
+
```python
|
|
508
|
+
from webscout import WEBS
|
|
509
|
+
|
|
510
|
+
# Get weather information for a location using DuckDuckGo.com
|
|
511
|
+
with WEBS() as webs:
|
|
512
|
+
weather_data = webs.weather("New York")
|
|
513
|
+
print(weather_data)
|
|
514
|
+
|
|
515
|
+
```
|
|
516
|
+
|
|
520
517
|
|
|
521
|
-
|
|
518
|
+
|
|
519
|
+
## ALL Acts
|
|
522
520
|
|
|
523
521
|
<details>
|
|
524
522
|
<summary>Expand</summary>
|
|
@@ -1332,3 +1330,4 @@ Contributions are welcome! If you'd like to contribute to Webscout, please follo
|
|
|
1332
1330
|
|
|
1333
1331
|
* All the amazing developers who have contributed to the project!
|
|
1334
1332
|
* The open-source community for their support and inspiration.
|
|
1333
|
+
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<p align="center">
|
|
17
17
|
<strong>Webscout</strong> is the all-in-one search and AI toolkit you need.
|
|
18
18
|
<br>
|
|
19
|
-
Discover insights with
|
|
19
|
+
Discover insights with Yep.com, DuckDuckGo, and Phind; access cutting-edge AI models; transcribe YouTube videos; generate temporary emails and phone numbers; perform text-to-speech conversions; run offline language models; and much more!
|
|
20
20
|
</p>
|
|
21
21
|
|
|
22
22
|
<div align="center">
|
|
@@ -205,7 +205,43 @@ if __name__ == "__main__":
|
|
|
205
205
|
asyncio.run(main())
|
|
206
206
|
```
|
|
207
207
|
|
|
208
|
+
...
|
|
208
209
|
|
|
210
|
+
### 🔍 `YepSearch` - Search using Yep.com
|
|
211
|
+
|
|
212
|
+
```python
|
|
213
|
+
from webscout import YepSearch
|
|
214
|
+
|
|
215
|
+
# Initialize YepSearch
|
|
216
|
+
yep = YepSearch(
|
|
217
|
+
timeout=20, # Optional: Set custom timeout
|
|
218
|
+
proxies=None, # Optional: Use proxies
|
|
219
|
+
verify=True # Optional: SSL verification
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
# Text Search
|
|
223
|
+
text_results = yep.text(
|
|
224
|
+
keywords="artificial intelligence",
|
|
225
|
+
region="all", # Optional: Region for results
|
|
226
|
+
safesearch="moderate", # Optional: "on", "moderate", "off"
|
|
227
|
+
max_results=10 # Optional: Limit number of results
|
|
228
|
+
)
|
|
229
|
+
print(text_results)
|
|
230
|
+
|
|
231
|
+
# Image Search
|
|
232
|
+
image_results = yep.images(
|
|
233
|
+
keywords="nature photography",
|
|
234
|
+
region="all",
|
|
235
|
+
safesearch="moderate",
|
|
236
|
+
max_results=10
|
|
237
|
+
)
|
|
238
|
+
print(image_results)
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
# Suggestions
|
|
242
|
+
suggestions = yep.suggestions("hist")
|
|
243
|
+
print(suggestions)
|
|
244
|
+
```
|
|
209
245
|
|
|
210
246
|
## 🔍 GoogleS (formerly DWEBS)
|
|
211
247
|
|
|
@@ -437,8 +473,21 @@ with WEBS() as WEBS:
|
|
|
437
473
|
print(r)
|
|
438
474
|
```
|
|
439
475
|
|
|
476
|
+
### 9. `weather()` - Weather Information by DuckDuckGo.com
|
|
440
477
|
|
|
441
|
-
|
|
478
|
+
```python
|
|
479
|
+
from webscout import WEBS
|
|
480
|
+
|
|
481
|
+
# Get weather information for a location using DuckDuckGo.com
|
|
482
|
+
with WEBS() as webs:
|
|
483
|
+
weather_data = webs.weather("New York")
|
|
484
|
+
print(weather_data)
|
|
485
|
+
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
## ALL Acts
|
|
442
491
|
|
|
443
492
|
<details>
|
|
444
493
|
<summary>Expand</summary>
|
|
@@ -1252,3 +1301,4 @@ Contributions are welcome! If you'd like to contribute to Webscout, please follo
|
|
|
1252
1301
|
|
|
1253
1302
|
* All the amazing developers who have contributed to the project!
|
|
1254
1303
|
* The open-source community for their support and inspiration.
|
|
1304
|
+
|
|
@@ -16,7 +16,7 @@ import httpx
|
|
|
16
16
|
from httpx import AsyncClient, HTTPStatusError
|
|
17
17
|
|
|
18
18
|
# For image models using validation. Adjust based on organization internal pydantic.
|
|
19
|
-
from pydantic import BaseModel,
|
|
19
|
+
from pydantic import BaseModel, validator
|
|
20
20
|
|
|
21
21
|
# Rich is retained for logging within image methods.
|
|
22
22
|
from rich.console import Console
|
|
@@ -463,7 +463,7 @@ class GeneratedImage(Image):
|
|
|
463
463
|
"""
|
|
464
464
|
cookies: Dict[str, str]
|
|
465
465
|
|
|
466
|
-
@
|
|
466
|
+
@validator("cookies")
|
|
467
467
|
def validate_cookies(cls, v):
|
|
468
468
|
if not v:
|
|
469
469
|
raise ValueError("GeneratedImage requires cookies from GeminiClient.")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from enum import Enum
|
|
2
2
|
|
|
3
3
|
class LogLevel(Enum):
|
|
4
|
+
NOTSET = 0
|
|
4
5
|
DEBUG = 10
|
|
5
6
|
INFO = 20
|
|
6
7
|
WARNING = 30
|
|
@@ -9,6 +10,8 @@ class LogLevel(Enum):
|
|
|
9
10
|
|
|
10
11
|
@staticmethod
|
|
11
12
|
def get_level(level_str: str) -> 'LogLevel':
|
|
13
|
+
if not level_str:
|
|
14
|
+
return LogLevel.NOTSET
|
|
12
15
|
try:
|
|
13
16
|
return LogLevel[level_str.upper()]
|
|
14
17
|
except KeyError:
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
|
|
2
|
+
import asyncio
|
|
3
|
+
import sys
|
|
4
|
+
import threading
|
|
5
|
+
import traceback
|
|
6
|
+
from datetime import datetime
|
|
7
|
+
from typing import Any, Dict, List, Optional, Union
|
|
8
|
+
|
|
9
|
+
from ..core.level import LogLevel
|
|
10
|
+
from ..styles.formats import LogFormat
|
|
11
|
+
from ..styles.colors import LogColors
|
|
12
|
+
|
|
13
|
+
class Logger:
|
|
14
|
+
# Emoji mappings for different log levels
|
|
15
|
+
LEVEL_EMOJIS = {
|
|
16
|
+
LogLevel.DEBUG: "🔍",
|
|
17
|
+
LogLevel.INFO: "ℹ️",
|
|
18
|
+
LogLevel.WARNING: "⚠️",
|
|
19
|
+
LogLevel.ERROR: "❌",
|
|
20
|
+
LogLevel.CRITICAL: "🔥"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
name: str = "LitLogger",
|
|
26
|
+
level: Union[str, LogLevel, None] = None,
|
|
27
|
+
format: Union[str, LogFormat] = LogFormat.MODERN_EMOJI,
|
|
28
|
+
handlers: List = None,
|
|
29
|
+
enable_colors: bool = True,
|
|
30
|
+
async_mode: bool = False,
|
|
31
|
+
show_thread: bool = True,
|
|
32
|
+
show_context: bool = True
|
|
33
|
+
):
|
|
34
|
+
self.name = name
|
|
35
|
+
self.level = LogLevel.NOTSET if level is None else (
|
|
36
|
+
LogLevel.get_level(level) if isinstance(level, str) else level
|
|
37
|
+
)
|
|
38
|
+
self.format = format
|
|
39
|
+
self.enable_colors = enable_colors
|
|
40
|
+
self.async_mode = async_mode
|
|
41
|
+
self.show_thread = show_thread
|
|
42
|
+
self.show_context = show_context
|
|
43
|
+
self._context_data = {}
|
|
44
|
+
|
|
45
|
+
# Initialize with default console handler if none provided
|
|
46
|
+
if handlers is None:
|
|
47
|
+
from ..handlers.console import ConsoleHandler
|
|
48
|
+
self.handlers = [ConsoleHandler(level=self.level)]
|
|
49
|
+
else:
|
|
50
|
+
self.handlers = handlers
|
|
51
|
+
|
|
52
|
+
def _format_message(self, level: LogLevel, message: str, **kwargs) -> str:
|
|
53
|
+
now = datetime.now()
|
|
54
|
+
emoji = self.LEVEL_EMOJIS.get(level, "") if self.enable_colors else ""
|
|
55
|
+
|
|
56
|
+
log_data = {
|
|
57
|
+
"timestamp": now.strftime("%H:%M:%S"),
|
|
58
|
+
"level": level.name,
|
|
59
|
+
"name": self.name,
|
|
60
|
+
"message": str(message),
|
|
61
|
+
"emoji": emoji,
|
|
62
|
+
"thread": threading.current_thread().name if self.show_thread else "",
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# Add context data
|
|
66
|
+
if self.show_context and self._context_data:
|
|
67
|
+
log_data.update(self._context_data)
|
|
68
|
+
|
|
69
|
+
# Add extra kwargs
|
|
70
|
+
log_data.update(kwargs)
|
|
71
|
+
|
|
72
|
+
# Format exception if present
|
|
73
|
+
if 'exc_info' in kwargs:
|
|
74
|
+
exc_info = kwargs['exc_info']
|
|
75
|
+
if exc_info:
|
|
76
|
+
exception_text = ''.join(traceback.format_exception(*exc_info))
|
|
77
|
+
log_data['message'] = f"{message}\n{exception_text}"
|
|
78
|
+
|
|
79
|
+
try:
|
|
80
|
+
base_message = f"{emoji} [{log_data['timestamp']}] {level.name} {log_data['message']}"
|
|
81
|
+
return base_message
|
|
82
|
+
except Exception as e:
|
|
83
|
+
return f"[{log_data['timestamp']}] {level.name}: {message}"
|
|
84
|
+
|
|
85
|
+
def _log(self, level: LogLevel, message: str, **kwargs):
|
|
86
|
+
if self.async_mode:
|
|
87
|
+
loop = asyncio.get_event_loop()
|
|
88
|
+
if loop.is_running():
|
|
89
|
+
return asyncio.create_task(self._async_log(level, message, **kwargs))
|
|
90
|
+
else:
|
|
91
|
+
return loop.run_until_complete(self._async_log(level, message, **kwargs))
|
|
92
|
+
return self._sync_log(level, message, **kwargs)
|
|
93
|
+
|
|
94
|
+
def debug(self, message: str, **kwargs):
|
|
95
|
+
self._log(LogLevel.DEBUG, message, **kwargs)
|
|
96
|
+
|
|
97
|
+
def info(self, message: str, **kwargs):
|
|
98
|
+
self._log(LogLevel.INFO, message, **kwargs)
|
|
99
|
+
|
|
100
|
+
def warning(self, message: str, **kwargs):
|
|
101
|
+
self._log(LogLevel.WARNING, message, **kwargs)
|
|
102
|
+
|
|
103
|
+
def error(self, message: str, **kwargs):
|
|
104
|
+
self._log(LogLevel.ERROR, message, **kwargs)
|
|
105
|
+
|
|
106
|
+
def critical(self, message: str, **kwargs):
|
|
107
|
+
self._log(LogLevel.CRITICAL, message, **kwargs)
|
|
108
|
+
|
|
109
|
+
def exception(self, message: str, exc_info=True, **kwargs):
|
|
110
|
+
"""
|
|
111
|
+
Log an exception with traceback.
|
|
112
|
+
|
|
113
|
+
Args:
|
|
114
|
+
message: The message to log
|
|
115
|
+
exc_info: If True, adds exception info to the message. Can also be a tuple (type, value, traceback)
|
|
116
|
+
**kwargs: Additional key-value pairs to log
|
|
117
|
+
"""
|
|
118
|
+
if exc_info:
|
|
119
|
+
if not isinstance(exc_info, tuple):
|
|
120
|
+
exc_info = sys.exc_info()
|
|
121
|
+
kwargs['exc_info'] = exc_info
|
|
122
|
+
self.error(message, **kwargs)
|
|
123
|
+
|
|
124
|
+
def _sync_log(self, level: LogLevel, message: str, **kwargs):
|
|
125
|
+
if self._should_log(level):
|
|
126
|
+
formatted_message = self._format_message(level, message, **kwargs)
|
|
127
|
+
for handler in self.handlers:
|
|
128
|
+
if handler.level == LogLevel.NOTSET or level.value >= handler.level.value:
|
|
129
|
+
handler.emit(formatted_message, level)
|
|
130
|
+
|
|
131
|
+
async def _async_log(self, level: LogLevel, message: str, **kwargs):
|
|
132
|
+
if self._should_log(level):
|
|
133
|
+
formatted_message = self._format_message(level, message, **kwargs)
|
|
134
|
+
tasks = []
|
|
135
|
+
for handler in self.handlers:
|
|
136
|
+
if handler.level == LogLevel.NOTSET or level.value >= handler.level.value:
|
|
137
|
+
if hasattr(handler, 'async_emit'):
|
|
138
|
+
tasks.append(handler.async_emit(formatted_message, level))
|
|
139
|
+
else:
|
|
140
|
+
tasks.append(asyncio.to_thread(handler.emit, formatted_message, level))
|
|
141
|
+
await asyncio.gather(*tasks)
|
|
142
|
+
|
|
143
|
+
def _should_log(self, level: LogLevel) -> bool:
|
|
144
|
+
return self.level == LogLevel.NOTSET or level.value >= self.level.value
|
|
145
|
+
|
|
146
|
+
def set_context(self, **kwargs):
|
|
147
|
+
self._context_data.update(kwargs)
|
|
148
|
+
|
|
149
|
+
def clear_context(self):
|
|
150
|
+
self._context_data.clear()
|
|
151
|
+
|
|
152
|
+
def set_style(self, style: str):
|
|
153
|
+
"""Set logger style format."""
|
|
154
|
+
if style in LogFormat.TEMPLATES:
|
|
155
|
+
self.format = LogFormat.TEMPLATES[style]
|
|
156
|
+
else:
|
|
157
|
+
raise ValueError(f"Unknown style: {style}")
|
|
158
|
+
|
|
159
|
+
def __enter__(self):
|
|
160
|
+
return self
|
|
161
|
+
|
|
162
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
163
|
+
if exc_type is not None:
|
|
164
|
+
self.error(f"Context exited with error: {exc_val}")
|
|
165
|
+
return False
|
|
166
|
+
return True
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from ..core.level import LogLevel
|
|
3
|
+
from ..styles.colors import LogColors
|
|
4
|
+
|
|
5
|
+
class ConsoleHandler:
|
|
6
|
+
def __init__(self, level: LogLevel = LogLevel.DEBUG, stream=sys.stdout):
|
|
7
|
+
self.level = level
|
|
8
|
+
self.stream = stream
|
|
9
|
+
self.colors = LogColors()
|
|
10
|
+
|
|
11
|
+
def emit(self, message: str, level: LogLevel):
|
|
12
|
+
"""Write the colored message to the console."""
|
|
13
|
+
try:
|
|
14
|
+
# Apply color based on log level
|
|
15
|
+
color = LogColors.LEVEL_COLORS.get(level, LogColors.RESET)
|
|
16
|
+
colored_message = f"{color}{message}{LogColors.RESET}"
|
|
17
|
+
print(colored_message, file=self.stream, flush=True)
|
|
18
|
+
except Exception as e:
|
|
19
|
+
# Fallback to plain printing if coloring fails
|
|
20
|
+
print(message, file=self.stream, flush=True)
|
|
21
|
+
|
|
22
|
+
async def async_emit(self, message: str, level: LogLevel):
|
|
23
|
+
"""
|
|
24
|
+
Asynchronously write log message to console.
|
|
25
|
+
Just calls emit() since console output is generally fast enough.
|
|
26
|
+
"""
|
|
27
|
+
self.emit(message, level)
|
|
28
|
+
|
|
29
|
+
class ErrorConsoleHandler(ConsoleHandler):
|
|
30
|
+
"""Specialized handler that writes to stderr."""
|
|
31
|
+
|
|
32
|
+
def __init__(self, level: LogLevel = LogLevel.ERROR):
|
|
33
|
+
super().__init__(stream=sys.stderr, level=level)
|
|
@@ -125,25 +125,24 @@ class NetworkHandler:
|
|
|
125
125
|
|
|
126
126
|
async def async_emit(self, message: str, level: LogLevel):
|
|
127
127
|
"""Asynchronously send log message to remote server."""
|
|
128
|
-
if level
|
|
129
|
-
|
|
128
|
+
# Fix: Allow all messages if level is NOTSET
|
|
129
|
+
if self.level == LogLevel.NOTSET or level.value >= self.level.value:
|
|
130
|
+
log_data = {
|
|
131
|
+
"message": message,
|
|
132
|
+
"level": level.name,
|
|
133
|
+
**self.custom_fields
|
|
134
|
+
}
|
|
130
135
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if self.batch_size > 0:
|
|
138
|
-
self._batch.append(log_data)
|
|
139
|
-
if len(self._batch) >= self.batch_size:
|
|
140
|
-
await self._send_batch()
|
|
141
|
-
else:
|
|
142
|
-
if self.protocol in ["http", "https"]:
|
|
143
|
-
await self._send_http(log_data)
|
|
136
|
+
if self.batch_size > 0:
|
|
137
|
+
self._batch.append(log_data)
|
|
138
|
+
if len(self._batch) >= self.batch_size:
|
|
139
|
+
await self._send_batch()
|
|
144
140
|
else:
|
|
145
|
-
|
|
146
|
-
|
|
141
|
+
if self.protocol in ["http", "https"]:
|
|
142
|
+
await self._send_http(log_data)
|
|
143
|
+
else:
|
|
144
|
+
await self._send_tcp(log_data)
|
|
145
|
+
|
|
147
146
|
async def _send_batch(self):
|
|
148
147
|
"""Send batched log messages."""
|
|
149
148
|
if not self._batch:
|