webscout 8.2.7__py3-none-any.whl → 8.2.9__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.
Files changed (281) hide show
  1. webscout/AIauto.py +33 -15
  2. webscout/AIbase.py +96 -37
  3. webscout/AIutel.py +703 -250
  4. webscout/Bard.py +441 -323
  5. webscout/Extra/Act.md +309 -0
  6. webscout/Extra/GitToolkit/__init__.py +10 -0
  7. webscout/Extra/GitToolkit/gitapi/README.md +110 -0
  8. webscout/Extra/GitToolkit/gitapi/__init__.py +12 -0
  9. webscout/Extra/GitToolkit/gitapi/repository.py +195 -0
  10. webscout/Extra/GitToolkit/gitapi/user.py +96 -0
  11. webscout/Extra/GitToolkit/gitapi/utils.py +62 -0
  12. webscout/Extra/YTToolkit/README.md +375 -0
  13. webscout/Extra/YTToolkit/YTdownloader.py +957 -0
  14. webscout/Extra/YTToolkit/__init__.py +3 -0
  15. webscout/Extra/YTToolkit/transcriber.py +476 -0
  16. webscout/Extra/YTToolkit/ytapi/README.md +44 -0
  17. webscout/Extra/YTToolkit/ytapi/__init__.py +6 -0
  18. webscout/Extra/YTToolkit/ytapi/channel.py +307 -0
  19. webscout/Extra/YTToolkit/ytapi/errors.py +13 -0
  20. webscout/Extra/YTToolkit/ytapi/extras.py +118 -0
  21. webscout/Extra/YTToolkit/ytapi/https.py +88 -0
  22. webscout/Extra/YTToolkit/ytapi/patterns.py +61 -0
  23. webscout/Extra/YTToolkit/ytapi/playlist.py +59 -0
  24. webscout/Extra/YTToolkit/ytapi/pool.py +8 -0
  25. webscout/Extra/YTToolkit/ytapi/query.py +40 -0
  26. webscout/Extra/YTToolkit/ytapi/stream.py +63 -0
  27. webscout/Extra/YTToolkit/ytapi/utils.py +62 -0
  28. webscout/Extra/YTToolkit/ytapi/video.py +232 -0
  29. webscout/Extra/__init__.py +7 -0
  30. webscout/Extra/autocoder/__init__.py +9 -0
  31. webscout/Extra/autocoder/autocoder.py +1105 -0
  32. webscout/Extra/autocoder/autocoder_utiles.py +332 -0
  33. webscout/Extra/gguf.md +430 -0
  34. webscout/Extra/gguf.py +684 -0
  35. webscout/Extra/tempmail/README.md +488 -0
  36. webscout/Extra/tempmail/__init__.py +28 -0
  37. webscout/Extra/tempmail/async_utils.py +141 -0
  38. webscout/Extra/tempmail/base.py +161 -0
  39. webscout/Extra/tempmail/cli.py +187 -0
  40. webscout/Extra/tempmail/emailnator.py +84 -0
  41. webscout/Extra/tempmail/mail_tm.py +361 -0
  42. webscout/Extra/tempmail/temp_mail_io.py +292 -0
  43. webscout/Extra/weather.md +281 -0
  44. webscout/Extra/weather.py +194 -0
  45. webscout/Extra/weather_ascii.py +76 -0
  46. webscout/Litlogger/README.md +10 -0
  47. webscout/Litlogger/__init__.py +15 -0
  48. webscout/Litlogger/formats.py +4 -0
  49. webscout/Litlogger/handlers.py +103 -0
  50. webscout/Litlogger/levels.py +13 -0
  51. webscout/Litlogger/logger.py +92 -0
  52. webscout/Provider/AI21.py +177 -0
  53. webscout/Provider/AISEARCH/DeepFind.py +254 -0
  54. webscout/Provider/AISEARCH/Perplexity.py +333 -0
  55. webscout/Provider/AISEARCH/README.md +279 -0
  56. webscout/Provider/AISEARCH/__init__.py +9 -0
  57. webscout/Provider/AISEARCH/felo_search.py +202 -0
  58. webscout/Provider/AISEARCH/genspark_search.py +324 -0
  59. webscout/Provider/AISEARCH/hika_search.py +186 -0
  60. webscout/Provider/AISEARCH/iask_search.py +410 -0
  61. webscout/Provider/AISEARCH/monica_search.py +220 -0
  62. webscout/Provider/AISEARCH/scira_search.py +298 -0
  63. webscout/Provider/AISEARCH/webpilotai_search.py +255 -0
  64. webscout/Provider/Aitopia.py +316 -0
  65. webscout/Provider/AllenAI.py +440 -0
  66. webscout/Provider/Andi.py +228 -0
  67. webscout/Provider/Blackboxai.py +791 -0
  68. webscout/Provider/ChatGPTClone.py +237 -0
  69. webscout/Provider/ChatGPTGratis.py +194 -0
  70. webscout/Provider/ChatSandbox.py +342 -0
  71. webscout/Provider/Cloudflare.py +324 -0
  72. webscout/Provider/Cohere.py +208 -0
  73. webscout/Provider/Deepinfra.py +340 -0
  74. webscout/Provider/ExaAI.py +261 -0
  75. webscout/Provider/ExaChat.py +358 -0
  76. webscout/Provider/Flowith.py +217 -0
  77. webscout/Provider/FreeGemini.py +250 -0
  78. webscout/Provider/Gemini.py +169 -0
  79. webscout/Provider/GithubChat.py +369 -0
  80. webscout/Provider/GizAI.py +295 -0
  81. webscout/Provider/Glider.py +225 -0
  82. webscout/Provider/Groq.py +801 -0
  83. webscout/Provider/HF_space/__init__.py +0 -0
  84. webscout/Provider/HF_space/qwen_qwen2.py +206 -0
  85. webscout/Provider/HeckAI.py +375 -0
  86. webscout/Provider/HuggingFaceChat.py +469 -0
  87. webscout/Provider/Hunyuan.py +283 -0
  88. webscout/Provider/Jadve.py +291 -0
  89. webscout/Provider/Koboldai.py +384 -0
  90. webscout/Provider/LambdaChat.py +411 -0
  91. webscout/Provider/Llama3.py +259 -0
  92. webscout/Provider/MCPCore.py +315 -0
  93. webscout/Provider/Marcus.py +198 -0
  94. webscout/Provider/Nemotron.py +218 -0
  95. webscout/Provider/Netwrck.py +270 -0
  96. webscout/Provider/OLLAMA.py +396 -0
  97. webscout/Provider/OPENAI/BLACKBOXAI.py +766 -0
  98. webscout/Provider/OPENAI/Cloudflare.py +378 -0
  99. webscout/Provider/OPENAI/FreeGemini.py +283 -0
  100. webscout/Provider/OPENAI/NEMOTRON.py +232 -0
  101. webscout/Provider/OPENAI/Qwen3.py +283 -0
  102. webscout/Provider/OPENAI/README.md +952 -0
  103. webscout/Provider/OPENAI/TwoAI.py +357 -0
  104. webscout/Provider/OPENAI/__init__.py +40 -0
  105. webscout/Provider/OPENAI/ai4chat.py +293 -0
  106. webscout/Provider/OPENAI/api.py +969 -0
  107. webscout/Provider/OPENAI/base.py +249 -0
  108. webscout/Provider/OPENAI/c4ai.py +373 -0
  109. webscout/Provider/OPENAI/chatgpt.py +556 -0
  110. webscout/Provider/OPENAI/chatgptclone.py +494 -0
  111. webscout/Provider/OPENAI/chatsandbox.py +173 -0
  112. webscout/Provider/OPENAI/copilot.py +242 -0
  113. webscout/Provider/OPENAI/deepinfra.py +322 -0
  114. webscout/Provider/OPENAI/e2b.py +1414 -0
  115. webscout/Provider/OPENAI/exaai.py +417 -0
  116. webscout/Provider/OPENAI/exachat.py +444 -0
  117. webscout/Provider/OPENAI/flowith.py +162 -0
  118. webscout/Provider/OPENAI/freeaichat.py +359 -0
  119. webscout/Provider/OPENAI/glider.py +326 -0
  120. webscout/Provider/OPENAI/groq.py +364 -0
  121. webscout/Provider/OPENAI/heckai.py +308 -0
  122. webscout/Provider/OPENAI/llmchatco.py +335 -0
  123. webscout/Provider/OPENAI/mcpcore.py +389 -0
  124. webscout/Provider/OPENAI/multichat.py +376 -0
  125. webscout/Provider/OPENAI/netwrck.py +357 -0
  126. webscout/Provider/OPENAI/oivscode.py +287 -0
  127. webscout/Provider/OPENAI/opkfc.py +496 -0
  128. webscout/Provider/OPENAI/pydantic_imports.py +172 -0
  129. webscout/Provider/OPENAI/scirachat.py +477 -0
  130. webscout/Provider/OPENAI/sonus.py +304 -0
  131. webscout/Provider/OPENAI/standardinput.py +433 -0
  132. webscout/Provider/OPENAI/textpollinations.py +339 -0
  133. webscout/Provider/OPENAI/toolbaz.py +413 -0
  134. webscout/Provider/OPENAI/typefully.py +355 -0
  135. webscout/Provider/OPENAI/typegpt.py +364 -0
  136. webscout/Provider/OPENAI/uncovrAI.py +463 -0
  137. webscout/Provider/OPENAI/utils.py +318 -0
  138. webscout/Provider/OPENAI/venice.py +431 -0
  139. webscout/Provider/OPENAI/wisecat.py +387 -0
  140. webscout/Provider/OPENAI/writecream.py +163 -0
  141. webscout/Provider/OPENAI/x0gpt.py +365 -0
  142. webscout/Provider/OPENAI/yep.py +382 -0
  143. webscout/Provider/OpenGPT.py +209 -0
  144. webscout/Provider/Openai.py +496 -0
  145. webscout/Provider/PI.py +429 -0
  146. webscout/Provider/Perplexitylabs.py +415 -0
  147. webscout/Provider/QwenLM.py +254 -0
  148. webscout/Provider/Reka.py +214 -0
  149. webscout/Provider/StandardInput.py +290 -0
  150. webscout/Provider/TTI/README.md +82 -0
  151. webscout/Provider/TTI/__init__.py +7 -0
  152. webscout/Provider/TTI/aiarta.py +365 -0
  153. webscout/Provider/TTI/artbit.py +0 -0
  154. webscout/Provider/TTI/base.py +64 -0
  155. webscout/Provider/TTI/fastflux.py +200 -0
  156. webscout/Provider/TTI/magicstudio.py +201 -0
  157. webscout/Provider/TTI/piclumen.py +203 -0
  158. webscout/Provider/TTI/pixelmuse.py +225 -0
  159. webscout/Provider/TTI/pollinations.py +221 -0
  160. webscout/Provider/TTI/utils.py +11 -0
  161. webscout/Provider/TTS/README.md +192 -0
  162. webscout/Provider/TTS/__init__.py +10 -0
  163. webscout/Provider/TTS/base.py +159 -0
  164. webscout/Provider/TTS/deepgram.py +156 -0
  165. webscout/Provider/TTS/elevenlabs.py +111 -0
  166. webscout/Provider/TTS/gesserit.py +128 -0
  167. webscout/Provider/TTS/murfai.py +113 -0
  168. webscout/Provider/TTS/openai_fm.py +129 -0
  169. webscout/Provider/TTS/parler.py +111 -0
  170. webscout/Provider/TTS/speechma.py +580 -0
  171. webscout/Provider/TTS/sthir.py +94 -0
  172. webscout/Provider/TTS/streamElements.py +333 -0
  173. webscout/Provider/TTS/utils.py +280 -0
  174. webscout/Provider/TeachAnything.py +229 -0
  175. webscout/Provider/TextPollinationsAI.py +308 -0
  176. webscout/Provider/TwoAI.py +475 -0
  177. webscout/Provider/TypliAI.py +305 -0
  178. webscout/Provider/UNFINISHED/ChatHub.py +209 -0
  179. webscout/Provider/UNFINISHED/Youchat.py +330 -0
  180. webscout/Provider/UNFINISHED/liner_api_request.py +263 -0
  181. webscout/Provider/UNFINISHED/puterjs.py +635 -0
  182. webscout/Provider/UNFINISHED/test_lmarena.py +119 -0
  183. webscout/Provider/Venice.py +258 -0
  184. webscout/Provider/VercelAI.py +253 -0
  185. webscout/Provider/WiseCat.py +233 -0
  186. webscout/Provider/WrDoChat.py +370 -0
  187. webscout/Provider/Writecream.py +246 -0
  188. webscout/Provider/WritingMate.py +269 -0
  189. webscout/Provider/__init__.py +174 -0
  190. webscout/Provider/ai4chat.py +174 -0
  191. webscout/Provider/akashgpt.py +335 -0
  192. webscout/Provider/asksteve.py +220 -0
  193. webscout/Provider/cerebras.py +290 -0
  194. webscout/Provider/chatglm.py +215 -0
  195. webscout/Provider/cleeai.py +213 -0
  196. webscout/Provider/copilot.py +425 -0
  197. webscout/Provider/elmo.py +283 -0
  198. webscout/Provider/freeaichat.py +285 -0
  199. webscout/Provider/geminiapi.py +208 -0
  200. webscout/Provider/granite.py +235 -0
  201. webscout/Provider/hermes.py +266 -0
  202. webscout/Provider/julius.py +223 -0
  203. webscout/Provider/koala.py +170 -0
  204. webscout/Provider/learnfastai.py +325 -0
  205. webscout/Provider/llama3mitril.py +215 -0
  206. webscout/Provider/llmchat.py +258 -0
  207. webscout/Provider/llmchatco.py +306 -0
  208. webscout/Provider/lmarena.py +198 -0
  209. webscout/Provider/meta.py +801 -0
  210. webscout/Provider/multichat.py +364 -0
  211. webscout/Provider/oivscode.py +309 -0
  212. webscout/Provider/samurai.py +224 -0
  213. webscout/Provider/scira_chat.py +299 -0
  214. webscout/Provider/scnet.py +243 -0
  215. webscout/Provider/searchchat.py +292 -0
  216. webscout/Provider/sonus.py +258 -0
  217. webscout/Provider/talkai.py +194 -0
  218. webscout/Provider/toolbaz.py +353 -0
  219. webscout/Provider/turboseek.py +266 -0
  220. webscout/Provider/typefully.py +202 -0
  221. webscout/Provider/typegpt.py +289 -0
  222. webscout/Provider/uncovr.py +368 -0
  223. webscout/Provider/x0gpt.py +299 -0
  224. webscout/Provider/yep.py +389 -0
  225. webscout/__init__.py +4 -2
  226. webscout/cli.py +3 -28
  227. webscout/client.py +70 -0
  228. webscout/conversation.py +35 -35
  229. webscout/litagent/Readme.md +276 -0
  230. webscout/litagent/__init__.py +29 -0
  231. webscout/litagent/agent.py +455 -0
  232. webscout/litagent/constants.py +60 -0
  233. webscout/litprinter/__init__.py +59 -0
  234. webscout/optimizers.py +419 -419
  235. webscout/scout/README.md +404 -0
  236. webscout/scout/__init__.py +8 -0
  237. webscout/scout/core/__init__.py +7 -0
  238. webscout/scout/core/crawler.py +210 -0
  239. webscout/scout/core/scout.py +607 -0
  240. webscout/scout/core/search_result.py +96 -0
  241. webscout/scout/core/text_analyzer.py +63 -0
  242. webscout/scout/core/text_utils.py +277 -0
  243. webscout/scout/core/web_analyzer.py +52 -0
  244. webscout/scout/element.py +478 -0
  245. webscout/scout/parsers/__init__.py +69 -0
  246. webscout/scout/parsers/html5lib_parser.py +172 -0
  247. webscout/scout/parsers/html_parser.py +236 -0
  248. webscout/scout/parsers/lxml_parser.py +178 -0
  249. webscout/scout/utils.py +37 -0
  250. webscout/swiftcli/Readme.md +323 -0
  251. webscout/swiftcli/__init__.py +95 -0
  252. webscout/swiftcli/core/__init__.py +7 -0
  253. webscout/swiftcli/core/cli.py +297 -0
  254. webscout/swiftcli/core/context.py +104 -0
  255. webscout/swiftcli/core/group.py +241 -0
  256. webscout/swiftcli/decorators/__init__.py +28 -0
  257. webscout/swiftcli/decorators/command.py +221 -0
  258. webscout/swiftcli/decorators/options.py +220 -0
  259. webscout/swiftcli/decorators/output.py +252 -0
  260. webscout/swiftcli/exceptions.py +21 -0
  261. webscout/swiftcli/plugins/__init__.py +9 -0
  262. webscout/swiftcli/plugins/base.py +135 -0
  263. webscout/swiftcli/plugins/manager.py +269 -0
  264. webscout/swiftcli/utils/__init__.py +59 -0
  265. webscout/swiftcli/utils/formatting.py +252 -0
  266. webscout/swiftcli/utils/parsing.py +267 -0
  267. webscout/version.py +1 -1
  268. webscout/webscout_search.py +2 -182
  269. webscout/webscout_search_async.py +1 -179
  270. webscout/zeroart/README.md +89 -0
  271. webscout/zeroart/__init__.py +135 -0
  272. webscout/zeroart/base.py +66 -0
  273. webscout/zeroart/effects.py +101 -0
  274. webscout/zeroart/fonts.py +1239 -0
  275. {webscout-8.2.7.dist-info → webscout-8.2.9.dist-info}/METADATA +262 -83
  276. webscout-8.2.9.dist-info/RECORD +289 -0
  277. {webscout-8.2.7.dist-info → webscout-8.2.9.dist-info}/WHEEL +1 -1
  278. {webscout-8.2.7.dist-info → webscout-8.2.9.dist-info}/entry_points.txt +1 -0
  279. webscout-8.2.7.dist-info/RECORD +0 -26
  280. {webscout-8.2.7.dist-info → webscout-8.2.9.dist-info}/licenses/LICENSE.md +0 -0
  281. {webscout-8.2.7.dist-info → webscout-8.2.9.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,323 @@
1
+ <div align="center">
2
+
3
+ # ⚡ SwiftCLI
4
+
5
+ > Build Beautiful Command-Line Applications at Light Speed
6
+
7
+ [![Python 3.8+](https://img.shields.io/badge/Python-3.8+-blue.svg?style=for-the-badge&logo=python&logoColor=white)](https://www.python.org)
8
+ [![PyPI version](https://img.shields.io/badge/View_on-PyPI-orange.svg?style=for-the-badge&logo=pypi&logoColor=white)](https://pypi.org/project/webscout/)
9
+ [![License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](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
+ [![GitHub stars](https://img.shields.io/github/stars/OEvortex/Webscout?style=social)](https://github.com/OEvortex/Webscout)
322
+
323
+ </div>
@@ -0,0 +1,95 @@
1
+ """
2
+ SwiftCLI - Build Beautiful Command-Line Applications at Light Speed
3
+
4
+ A modern, feature-rich CLI framework for building awesome command-line applications.
5
+ Built with love for the Python community!
6
+
7
+ Basic Usage:
8
+ >>> from swiftcli import CLI
9
+ >>> app = CLI(name="my-app", help="My awesome CLI app")
10
+ >>> @app.command()
11
+ ... def hello(name: str):
12
+ ... '''Say hello to someone'''
13
+ ... print(f"Hello {name}!")
14
+ >>> app.run()
15
+
16
+ For more examples and documentation, visit:
17
+ https://github.com/OEvortex/Webscout/tree/main/webscout/swiftcli
18
+ """
19
+
20
+ from .core.cli import CLI
21
+ from .core.group import Group
22
+ from .core.context import Context
23
+ from .plugins.base import Plugin
24
+ from .exceptions import (
25
+ SwiftCLIException,
26
+ UsageError,
27
+ BadParameter,
28
+ ConfigError,
29
+ PluginError
30
+ )
31
+
32
+ # Command decorators
33
+ from .decorators.command import (
34
+ command,
35
+ group,
36
+ argument,
37
+ flag,
38
+ pass_context
39
+ )
40
+
41
+ # Option decorators
42
+ from .decorators.options import (
43
+ option,
44
+ envvar,
45
+ config_file,
46
+ version_option,
47
+ help_option
48
+ )
49
+
50
+ # Output decorators
51
+ from .decorators.output import (
52
+ table_output,
53
+ progress,
54
+ panel_output,
55
+ format_output,
56
+ pager_output
57
+ )
58
+
59
+
60
+ __all__ = [
61
+ # Core classes
62
+ 'CLI',
63
+ 'Group',
64
+ 'Context',
65
+ 'Plugin',
66
+
67
+ # Exceptions
68
+ 'SwiftCLIException',
69
+ 'UsageError',
70
+ 'BadParameter',
71
+ 'ConfigError',
72
+ 'PluginError',
73
+
74
+ # Command decorators
75
+ 'command',
76
+ 'group',
77
+ 'argument',
78
+ 'flag',
79
+ 'pass_context',
80
+
81
+ # Option decorators
82
+ 'option',
83
+ 'envvar',
84
+ 'config_file',
85
+ 'version_option',
86
+ 'help_option',
87
+
88
+ # Output decorators
89
+ 'table_output',
90
+ 'progress',
91
+ 'panel_output',
92
+ 'format_output',
93
+ 'pager_output',
94
+
95
+ ]
@@ -0,0 +1,7 @@
1
+ """Core functionality for SwiftCLI."""
2
+
3
+ from .cli import CLI
4
+ from .context import Context
5
+ from .group import Group
6
+
7
+ __all__ = ['CLI', 'Context', 'Group']