hammad-python 0.0.29__py3-none-any.whl → 0.0.31__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.
- ham/__init__.py +10 -0
- {hammad_python-0.0.29.dist-info → hammad_python-0.0.31.dist-info}/METADATA +6 -32
- hammad_python-0.0.31.dist-info/RECORD +6 -0
- hammad/__init__.py +0 -84
- hammad/_internal.py +0 -256
- hammad/_main.py +0 -226
- hammad/cache/__init__.py +0 -40
- hammad/cache/base_cache.py +0 -181
- hammad/cache/cache.py +0 -169
- hammad/cache/decorators.py +0 -261
- hammad/cache/file_cache.py +0 -80
- hammad/cache/ttl_cache.py +0 -74
- hammad/cli/__init__.py +0 -33
- hammad/cli/animations.py +0 -573
- hammad/cli/plugins.py +0 -867
- hammad/cli/styles/__init__.py +0 -55
- hammad/cli/styles/settings.py +0 -139
- hammad/cli/styles/types.py +0 -358
- hammad/cli/styles/utils.py +0 -634
- hammad/data/__init__.py +0 -90
- hammad/data/collections/__init__.py +0 -49
- hammad/data/collections/collection.py +0 -326
- hammad/data/collections/indexes/__init__.py +0 -37
- hammad/data/collections/indexes/qdrant/__init__.py +0 -1
- hammad/data/collections/indexes/qdrant/index.py +0 -723
- hammad/data/collections/indexes/qdrant/settings.py +0 -94
- hammad/data/collections/indexes/qdrant/utils.py +0 -210
- hammad/data/collections/indexes/tantivy/__init__.py +0 -1
- hammad/data/collections/indexes/tantivy/index.py +0 -426
- hammad/data/collections/indexes/tantivy/settings.py +0 -40
- hammad/data/collections/indexes/tantivy/utils.py +0 -176
- hammad/data/configurations/__init__.py +0 -35
- hammad/data/configurations/configuration.py +0 -564
- hammad/data/models/__init__.py +0 -50
- hammad/data/models/extensions/__init__.py +0 -4
- hammad/data/models/extensions/pydantic/__init__.py +0 -42
- hammad/data/models/extensions/pydantic/converters.py +0 -759
- hammad/data/models/fields.py +0 -546
- hammad/data/models/model.py +0 -1078
- hammad/data/models/utils.py +0 -280
- hammad/data/sql/__init__.py +0 -24
- hammad/data/sql/database.py +0 -576
- hammad/data/sql/types.py +0 -127
- hammad/data/types/__init__.py +0 -75
- hammad/data/types/file.py +0 -431
- hammad/data/types/multimodal/__init__.py +0 -36
- hammad/data/types/multimodal/audio.py +0 -200
- hammad/data/types/multimodal/image.py +0 -182
- hammad/data/types/text.py +0 -1308
- hammad/formatting/__init__.py +0 -33
- hammad/formatting/json/__init__.py +0 -27
- hammad/formatting/json/converters.py +0 -158
- hammad/formatting/text/__init__.py +0 -63
- hammad/formatting/text/converters.py +0 -723
- hammad/formatting/text/markdown.py +0 -131
- hammad/formatting/yaml/__init__.py +0 -26
- hammad/formatting/yaml/converters.py +0 -5
- hammad/genai/__init__.py +0 -217
- hammad/genai/a2a/__init__.py +0 -32
- hammad/genai/a2a/workers.py +0 -552
- hammad/genai/agents/__init__.py +0 -59
- hammad/genai/agents/agent.py +0 -1973
- hammad/genai/agents/run.py +0 -1024
- hammad/genai/agents/types/__init__.py +0 -42
- hammad/genai/agents/types/agent_context.py +0 -13
- hammad/genai/agents/types/agent_event.py +0 -128
- hammad/genai/agents/types/agent_hooks.py +0 -220
- hammad/genai/agents/types/agent_messages.py +0 -31
- hammad/genai/agents/types/agent_response.py +0 -125
- hammad/genai/agents/types/agent_stream.py +0 -327
- hammad/genai/graphs/__init__.py +0 -125
- hammad/genai/graphs/_utils.py +0 -190
- hammad/genai/graphs/base.py +0 -1828
- hammad/genai/graphs/plugins.py +0 -316
- hammad/genai/graphs/types.py +0 -638
- hammad/genai/models/__init__.py +0 -1
- hammad/genai/models/embeddings/__init__.py +0 -43
- hammad/genai/models/embeddings/model.py +0 -226
- hammad/genai/models/embeddings/run.py +0 -163
- hammad/genai/models/embeddings/types/__init__.py +0 -37
- hammad/genai/models/embeddings/types/embedding_model_name.py +0 -75
- hammad/genai/models/embeddings/types/embedding_model_response.py +0 -76
- hammad/genai/models/embeddings/types/embedding_model_run_params.py +0 -66
- hammad/genai/models/embeddings/types/embedding_model_settings.py +0 -47
- hammad/genai/models/language/__init__.py +0 -57
- hammad/genai/models/language/model.py +0 -1098
- hammad/genai/models/language/run.py +0 -878
- hammad/genai/models/language/types/__init__.py +0 -40
- hammad/genai/models/language/types/language_model_instructor_mode.py +0 -47
- hammad/genai/models/language/types/language_model_messages.py +0 -28
- hammad/genai/models/language/types/language_model_name.py +0 -239
- hammad/genai/models/language/types/language_model_request.py +0 -127
- hammad/genai/models/language/types/language_model_response.py +0 -217
- hammad/genai/models/language/types/language_model_response_chunk.py +0 -56
- hammad/genai/models/language/types/language_model_settings.py +0 -89
- hammad/genai/models/language/types/language_model_stream.py +0 -600
- hammad/genai/models/language/utils/__init__.py +0 -28
- hammad/genai/models/language/utils/requests.py +0 -421
- hammad/genai/models/language/utils/structured_outputs.py +0 -135
- hammad/genai/models/model_provider.py +0 -4
- hammad/genai/models/multimodal.py +0 -47
- hammad/genai/models/reranking.py +0 -26
- hammad/genai/types/__init__.py +0 -1
- hammad/genai/types/base.py +0 -215
- hammad/genai/types/history.py +0 -290
- hammad/genai/types/tools.py +0 -507
- hammad/logging/__init__.py +0 -35
- hammad/logging/decorators.py +0 -834
- hammad/logging/logger.py +0 -1018
- hammad/mcp/__init__.py +0 -53
- hammad/mcp/client/__init__.py +0 -35
- hammad/mcp/client/client.py +0 -624
- hammad/mcp/client/client_service.py +0 -400
- hammad/mcp/client/settings.py +0 -178
- hammad/mcp/servers/__init__.py +0 -26
- hammad/mcp/servers/launcher.py +0 -1161
- hammad/runtime/__init__.py +0 -32
- hammad/runtime/decorators.py +0 -142
- hammad/runtime/run.py +0 -299
- hammad/service/__init__.py +0 -49
- hammad/service/create.py +0 -527
- hammad/service/decorators.py +0 -283
- hammad/types.py +0 -288
- hammad/typing/__init__.py +0 -435
- hammad/web/__init__.py +0 -43
- hammad/web/http/__init__.py +0 -1
- hammad/web/http/client.py +0 -944
- hammad/web/models.py +0 -275
- hammad/web/openapi/__init__.py +0 -1
- hammad/web/openapi/client.py +0 -740
- hammad/web/search/__init__.py +0 -1
- hammad/web/search/client.py +0 -1023
- hammad/web/utils.py +0 -472
- hammad_python-0.0.29.dist-info/RECORD +0 -135
- {hammad → ham}/py.typed +0 -0
- {hammad_python-0.0.29.dist-info → hammad_python-0.0.31.dist-info}/WHEEL +0 -0
- {hammad_python-0.0.29.dist-info → hammad_python-0.0.31.dist-info}/licenses/LICENSE +0 -0
hammad/web/utils.py
DELETED
@@ -1,472 +0,0 @@
|
|
1
|
-
"""hammad.web.utils"""
|
2
|
-
|
3
|
-
import asyncio
|
4
|
-
from typing import Any, Dict, Optional, Union, Literal, List, overload, TYPE_CHECKING
|
5
|
-
|
6
|
-
if TYPE_CHECKING:
|
7
|
-
from .http.client import HttpResponse
|
8
|
-
|
9
|
-
from .models import (
|
10
|
-
SearchResults,
|
11
|
-
NewsResults,
|
12
|
-
WebPageResult,
|
13
|
-
WebPageResults,
|
14
|
-
ExtractedLinks,
|
15
|
-
HttpResponse as HttpResponseModel,
|
16
|
-
)
|
17
|
-
|
18
|
-
__all__ = (
|
19
|
-
"run_web_request",
|
20
|
-
"run_web_search",
|
21
|
-
"read_web_page",
|
22
|
-
"read_web_pages",
|
23
|
-
"run_news_search",
|
24
|
-
"extract_web_page_links",
|
25
|
-
)
|
26
|
-
|
27
|
-
|
28
|
-
# Module-level singleton for performance
|
29
|
-
_search_client = None
|
30
|
-
|
31
|
-
|
32
|
-
def _get_search_client():
|
33
|
-
"""Get a SearchClient instance using lazy import and singleton pattern."""
|
34
|
-
global _search_client
|
35
|
-
if _search_client is None:
|
36
|
-
from .search.client import AsyncSearchClient as SearchClient
|
37
|
-
|
38
|
-
_search_client = SearchClient()
|
39
|
-
return _search_client
|
40
|
-
|
41
|
-
|
42
|
-
@overload
|
43
|
-
def run_web_request(
|
44
|
-
type: Literal["http"],
|
45
|
-
method: Literal["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"],
|
46
|
-
url: str,
|
47
|
-
*,
|
48
|
-
headers: Optional[Dict[str, str]] = None,
|
49
|
-
params: Optional[Dict[str, Any]] = None,
|
50
|
-
json_data: Optional[Dict[str, Any]] = None,
|
51
|
-
form_data: Optional[Dict[str, Any]] = None,
|
52
|
-
content: Optional[Union[str, bytes]] = None,
|
53
|
-
timeout: Optional[float] = None,
|
54
|
-
follow_redirects: bool = True,
|
55
|
-
base_url: Optional[str] = None,
|
56
|
-
default_headers: Optional[Dict[str, str]] = None,
|
57
|
-
verify_ssl: bool = True,
|
58
|
-
# Semantic authentication parameters
|
59
|
-
api_key: Optional[str] = None,
|
60
|
-
api_key_header: str = "X-API-Key",
|
61
|
-
bearer_token: Optional[str] = None,
|
62
|
-
basic_auth: Optional[tuple[str, str]] = None,
|
63
|
-
user_agent: Optional[str] = None,
|
64
|
-
retry_attempts: int = 0,
|
65
|
-
retry_delay: float = 1.0,
|
66
|
-
) -> "HttpResponse": ...
|
67
|
-
|
68
|
-
|
69
|
-
@overload
|
70
|
-
def run_web_request(
|
71
|
-
type: Literal["openapi"],
|
72
|
-
openapi_spec: Union[str, Dict[str, Any]],
|
73
|
-
operation_id: str,
|
74
|
-
*,
|
75
|
-
parameters: Optional[Dict[str, Any]] = None,
|
76
|
-
request_body: Optional[Dict[str, Any]] = None,
|
77
|
-
headers: Optional[Dict[str, str]] = None,
|
78
|
-
base_url: Optional[str] = None,
|
79
|
-
default_headers: Optional[Dict[str, str]] = None,
|
80
|
-
timeout: float = 30.0,
|
81
|
-
follow_redirects: bool = True,
|
82
|
-
verify_ssl: bool = True,
|
83
|
-
# Semantic authentication parameters
|
84
|
-
api_key: Optional[str] = None,
|
85
|
-
api_key_header: str = "X-API-Key",
|
86
|
-
bearer_token: Optional[str] = None,
|
87
|
-
basic_auth: Optional[tuple[str, str]] = None,
|
88
|
-
user_agent: Optional[str] = None,
|
89
|
-
) -> "HttpResponse": ...
|
90
|
-
|
91
|
-
|
92
|
-
def run_web_request(
|
93
|
-
type: Literal["http", "openapi"], *args, **kwargs
|
94
|
-
) -> "HttpResponse":
|
95
|
-
"""
|
96
|
-
Create and execute a request using either HTTP or OpenAPI toolkits.
|
97
|
-
|
98
|
-
This function initializes the appropriate toolkit and sends the request,
|
99
|
-
returning the HTTP response.
|
100
|
-
|
101
|
-
Args:
|
102
|
-
type: Type of request - "http" for direct HTTP requests or "openapi" for OpenAPI operations
|
103
|
-
|
104
|
-
HTTP-specific args:
|
105
|
-
method: HTTP method
|
106
|
-
url: Request URL
|
107
|
-
headers: Request headers
|
108
|
-
params: Query parameters
|
109
|
-
json_data: JSON request body
|
110
|
-
form_data: Form data
|
111
|
-
content: Raw content
|
112
|
-
timeout: Request timeout
|
113
|
-
follow_redirects: Whether to follow redirects
|
114
|
-
base_url: Base URL for requests
|
115
|
-
default_headers: Default headers
|
116
|
-
verify_ssl: Whether to verify SSL certificates
|
117
|
-
|
118
|
-
OpenAPI-specific args:
|
119
|
-
openapi_spec: OpenAPI specification (dict, JSON string, or YAML string)
|
120
|
-
operation_id: OpenAPI operation ID to execute
|
121
|
-
parameters: Operation parameters
|
122
|
-
request_body: Request body for the operation
|
123
|
-
headers: Additional headers
|
124
|
-
base_url: Base URL override
|
125
|
-
default_headers: Default headers
|
126
|
-
timeout: Request timeout
|
127
|
-
follow_redirects: Whether to follow redirects
|
128
|
-
verify_ssl: Whether to verify SSL certificates
|
129
|
-
|
130
|
-
Returns:
|
131
|
-
HttpResponse object containing the response data
|
132
|
-
|
133
|
-
Raises:
|
134
|
-
ValueError: For invalid request type or missing required parameters
|
135
|
-
HttpToolkitError: For HTTP-related errors
|
136
|
-
OpenApiToolkitError: For OpenAPI-related errors
|
137
|
-
"""
|
138
|
-
|
139
|
-
async def _run_web_request_async():
|
140
|
-
if type == "http":
|
141
|
-
if len(args) < 2:
|
142
|
-
raise ValueError(
|
143
|
-
"HTTP requests require method and url as positional arguments"
|
144
|
-
)
|
145
|
-
|
146
|
-
method, url = args[0], args[1]
|
147
|
-
|
148
|
-
# Import here to avoid circular imports
|
149
|
-
from .http.client import HttpClient as HttpToolkit
|
150
|
-
|
151
|
-
# Initialize the HTTP toolkit
|
152
|
-
toolkit = HttpToolkit(
|
153
|
-
base_url=kwargs.get("base_url"),
|
154
|
-
default_headers=kwargs.get("default_headers", {}),
|
155
|
-
timeout=kwargs.get("timeout", 30.0),
|
156
|
-
follow_redirects=kwargs.get("follow_redirects", True),
|
157
|
-
verify_ssl=kwargs.get("verify_ssl", True),
|
158
|
-
api_key=kwargs.get("api_key"),
|
159
|
-
api_key_header=kwargs.get("api_key_header", "X-API-Key"),
|
160
|
-
bearer_token=kwargs.get("bearer_token"),
|
161
|
-
basic_auth=kwargs.get("basic_auth"),
|
162
|
-
user_agent=kwargs.get("user_agent"),
|
163
|
-
)
|
164
|
-
|
165
|
-
# Execute the request based on method
|
166
|
-
if method.upper() == "GET":
|
167
|
-
return await toolkit.get(
|
168
|
-
url,
|
169
|
-
headers=kwargs.get("headers"),
|
170
|
-
params=kwargs.get("params"),
|
171
|
-
timeout=kwargs.get("timeout"),
|
172
|
-
retry_attempts=kwargs.get("retry_attempts", 0),
|
173
|
-
retry_delay=kwargs.get("retry_delay", 1.0),
|
174
|
-
)
|
175
|
-
elif method.upper() == "POST":
|
176
|
-
return await toolkit.post(
|
177
|
-
url,
|
178
|
-
headers=kwargs.get("headers"),
|
179
|
-
json_data=kwargs.get("json_data"),
|
180
|
-
form_data=kwargs.get("form_data"),
|
181
|
-
timeout=kwargs.get("timeout"),
|
182
|
-
retry_attempts=kwargs.get("retry_attempts", 0),
|
183
|
-
)
|
184
|
-
elif method.upper() == "PUT":
|
185
|
-
return await toolkit.put(
|
186
|
-
url,
|
187
|
-
headers=kwargs.get("headers"),
|
188
|
-
json_data=kwargs.get("json_data"),
|
189
|
-
form_data=kwargs.get("form_data"),
|
190
|
-
timeout=kwargs.get("timeout"),
|
191
|
-
retry_attempts=kwargs.get("retry_attempts", 0),
|
192
|
-
)
|
193
|
-
elif method.upper() == "PATCH":
|
194
|
-
return await toolkit.patch(
|
195
|
-
url,
|
196
|
-
headers=kwargs.get("headers"),
|
197
|
-
json_data=kwargs.get("json_data"),
|
198
|
-
form_data=kwargs.get("form_data"),
|
199
|
-
timeout=kwargs.get("timeout"),
|
200
|
-
retry_attempts=kwargs.get("retry_attempts", 0),
|
201
|
-
)
|
202
|
-
elif method.upper() == "DELETE":
|
203
|
-
return await toolkit.delete(
|
204
|
-
url,
|
205
|
-
headers=kwargs.get("headers"),
|
206
|
-
timeout=kwargs.get("timeout"),
|
207
|
-
retry_attempts=kwargs.get("retry_attempts", 0),
|
208
|
-
)
|
209
|
-
else:
|
210
|
-
raise ValueError(f"Unsupported HTTP method: {method}")
|
211
|
-
|
212
|
-
elif type == "openapi":
|
213
|
-
from .openapi.client import OpenAPIClient as OpenApiToolkit
|
214
|
-
|
215
|
-
if len(args) < 2:
|
216
|
-
raise ValueError(
|
217
|
-
"OpenAPI requests require openapi_spec and operation_id as positional arguments"
|
218
|
-
)
|
219
|
-
|
220
|
-
openapi_spec, operation_id = args[0], args[1]
|
221
|
-
|
222
|
-
# Initialize the OpenAPI toolkit
|
223
|
-
toolkit = OpenApiToolkit(
|
224
|
-
openapi_spec=openapi_spec,
|
225
|
-
base_url=kwargs.get("base_url"),
|
226
|
-
default_headers=kwargs.get("default_headers"),
|
227
|
-
timeout=kwargs.get("timeout", 30.0),
|
228
|
-
follow_redirects=kwargs.get("follow_redirects", True),
|
229
|
-
verify_ssl=kwargs.get("verify_ssl", True),
|
230
|
-
api_key=kwargs.get("api_key"),
|
231
|
-
api_key_header=kwargs.get("api_key_header", "X-API-Key"),
|
232
|
-
bearer_token=kwargs.get("bearer_token"),
|
233
|
-
basic_auth=kwargs.get("basic_auth"),
|
234
|
-
user_agent=kwargs.get("user_agent"),
|
235
|
-
)
|
236
|
-
|
237
|
-
# Execute the OpenAPI operation
|
238
|
-
return await toolkit.execute_operation(
|
239
|
-
operation_id=operation_id,
|
240
|
-
parameters=kwargs.get("parameters"),
|
241
|
-
request_body=kwargs.get("request_body"),
|
242
|
-
headers=kwargs.get("headers"),
|
243
|
-
)
|
244
|
-
|
245
|
-
else:
|
246
|
-
raise ValueError(
|
247
|
-
f"Invalid request type: {type}. Must be 'http' or 'openapi'"
|
248
|
-
)
|
249
|
-
|
250
|
-
return asyncio.run(_run_web_request_async())
|
251
|
-
|
252
|
-
|
253
|
-
def run_web_search(
|
254
|
-
query: str,
|
255
|
-
*,
|
256
|
-
max_results: int = 10,
|
257
|
-
region: str = "wt-wt",
|
258
|
-
safesearch: Literal["on", "moderate", "off"] = "moderate",
|
259
|
-
timelimit: Optional[Literal["d", "w", "m", "y"]] = None,
|
260
|
-
backend: Literal["auto", "html", "lite"] = "auto",
|
261
|
-
retry_attempts: int = 3,
|
262
|
-
retry_delay: float = 1.0,
|
263
|
-
) -> SearchResults:
|
264
|
-
"""
|
265
|
-
Search the web using DuckDuckGo search.
|
266
|
-
|
267
|
-
Args:
|
268
|
-
query: Search query string
|
269
|
-
max_results: Maximum number of results to return (default: 10)
|
270
|
-
region: Search region (default: "wt-wt" for worldwide)
|
271
|
-
safesearch: Safe search setting (default: "moderate")
|
272
|
-
timelimit: Time limit for results (d=day, w=week, m=month, y=year)
|
273
|
-
backend: Search backend to use (default: "auto")
|
274
|
-
retry_attempts: Number of retry attempts for rate limit errors (default: 3)
|
275
|
-
retry_delay: Initial delay between retries in seconds (default: 1.0)
|
276
|
-
|
277
|
-
Returns:
|
278
|
-
List of search result dictionaries with 'title', 'href', and 'body' keys
|
279
|
-
|
280
|
-
Raises:
|
281
|
-
ValueError: If query is empty
|
282
|
-
Exception: If search fails after all retries
|
283
|
-
"""
|
284
|
-
|
285
|
-
async def _run_web_search_async():
|
286
|
-
client = _get_search_client()
|
287
|
-
return await client.web_search(
|
288
|
-
query=query,
|
289
|
-
max_results=max_results,
|
290
|
-
region=region,
|
291
|
-
safesearch=safesearch,
|
292
|
-
timelimit=timelimit,
|
293
|
-
backend=backend,
|
294
|
-
)
|
295
|
-
|
296
|
-
return asyncio.run(_run_web_search_async())
|
297
|
-
|
298
|
-
|
299
|
-
def read_web_page(
|
300
|
-
url: str,
|
301
|
-
*,
|
302
|
-
timeout: float = 30.0,
|
303
|
-
headers: Optional[Dict[str, str]] = None,
|
304
|
-
extract_text: bool = True,
|
305
|
-
extract_links: bool = False,
|
306
|
-
extract_images: bool = False,
|
307
|
-
css_selector: Optional[str] = None,
|
308
|
-
) -> WebPageResult:
|
309
|
-
"""
|
310
|
-
Read and parse a single web page using selectolax.
|
311
|
-
|
312
|
-
Args:
|
313
|
-
url: URL to fetch and parse
|
314
|
-
timeout: Request timeout in seconds (default: 30.0)
|
315
|
-
headers: Optional HTTP headers to send
|
316
|
-
extract_text: Whether to extract text content (default: True)
|
317
|
-
extract_links: Whether to extract links (default: False)
|
318
|
-
extract_images: Whether to extract images (default: False)
|
319
|
-
css_selector: Optional CSS selector to extract specific elements
|
320
|
-
|
321
|
-
Returns:
|
322
|
-
Dictionary containing parsed content and metadata
|
323
|
-
|
324
|
-
Raises:
|
325
|
-
httpx.HTTPError: If request fails
|
326
|
-
Exception: If parsing fails
|
327
|
-
"""
|
328
|
-
|
329
|
-
async def _read_web_page_async():
|
330
|
-
client = _get_search_client()
|
331
|
-
return await client.read_web_page(
|
332
|
-
url=url,
|
333
|
-
timeout=timeout,
|
334
|
-
headers=headers,
|
335
|
-
extract_text=extract_text,
|
336
|
-
extract_links=extract_links,
|
337
|
-
extract_images=extract_images,
|
338
|
-
css_selector=css_selector,
|
339
|
-
)
|
340
|
-
|
341
|
-
return asyncio.run(_read_web_page_async())
|
342
|
-
|
343
|
-
|
344
|
-
def read_web_pages(
|
345
|
-
urls: List[str],
|
346
|
-
*,
|
347
|
-
timeout: float = 30.0,
|
348
|
-
headers: Optional[Dict[str, str]] = None,
|
349
|
-
extract_text: bool = True,
|
350
|
-
extract_links: bool = False,
|
351
|
-
extract_images: bool = False,
|
352
|
-
css_selector: Optional[str] = None,
|
353
|
-
max_concurrent: int = 5,
|
354
|
-
) -> WebPageResults:
|
355
|
-
"""
|
356
|
-
Read and parse multiple web pages concurrently using selectolax.
|
357
|
-
|
358
|
-
Args:
|
359
|
-
urls: List of URLs to fetch and parse
|
360
|
-
timeout: Request timeout in seconds (default: 30.0)
|
361
|
-
headers: Optional HTTP headers to send
|
362
|
-
extract_text: Whether to extract text content (default: True)
|
363
|
-
extract_links: Whether to extract links (default: False)
|
364
|
-
extract_images: Whether to extract images (default: False)
|
365
|
-
css_selector: Optional CSS selector to extract specific elements
|
366
|
-
max_concurrent: Maximum number of concurrent requests (default: 5)
|
367
|
-
|
368
|
-
Returns:
|
369
|
-
List of dictionaries containing parsed content and metadata
|
370
|
-
|
371
|
-
Raises:
|
372
|
-
Exception: If any critical error occurs
|
373
|
-
"""
|
374
|
-
|
375
|
-
async def _read_web_pages_async():
|
376
|
-
client = _get_search_client()
|
377
|
-
return await client.read_web_pages(
|
378
|
-
urls=urls,
|
379
|
-
timeout=timeout,
|
380
|
-
headers=headers,
|
381
|
-
extract_text=extract_text,
|
382
|
-
extract_links=extract_links,
|
383
|
-
extract_images=extract_images,
|
384
|
-
css_selector=css_selector,
|
385
|
-
max_concurrent=max_concurrent,
|
386
|
-
)
|
387
|
-
|
388
|
-
return asyncio.run(_read_web_pages_async())
|
389
|
-
|
390
|
-
|
391
|
-
def run_news_search(
|
392
|
-
query: str,
|
393
|
-
*,
|
394
|
-
max_results: int = 10,
|
395
|
-
region: str = "wt-wt",
|
396
|
-
safesearch: Literal["on", "moderate", "off"] = "moderate",
|
397
|
-
timelimit: Optional[Literal["d", "w", "m"]] = None,
|
398
|
-
) -> NewsResults:
|
399
|
-
"""
|
400
|
-
Search for news using DuckDuckGo news search.
|
401
|
-
|
402
|
-
Args:
|
403
|
-
query: Search query string
|
404
|
-
max_results: Maximum number of results to return (default: 10)
|
405
|
-
region: Search region (default: "wt-wt" for worldwide)
|
406
|
-
safesearch: Safe search setting (default: "moderate")
|
407
|
-
timelimit: Time limit for results (d=day, w=week, m=month)
|
408
|
-
|
409
|
-
Returns:
|
410
|
-
List of news result dictionaries with date, title, body, url, image, and source
|
411
|
-
|
412
|
-
Raises:
|
413
|
-
ValueError: If query is empty
|
414
|
-
Exception: If search fails
|
415
|
-
"""
|
416
|
-
|
417
|
-
async def _run_news_search_async():
|
418
|
-
client = _get_search_client()
|
419
|
-
return await client.search_news(
|
420
|
-
query=query,
|
421
|
-
max_results=max_results,
|
422
|
-
region=region,
|
423
|
-
safesearch=safesearch,
|
424
|
-
timelimit=timelimit,
|
425
|
-
)
|
426
|
-
|
427
|
-
return asyncio.run(_run_news_search_async())
|
428
|
-
|
429
|
-
|
430
|
-
def extract_web_page_links(
|
431
|
-
url: str,
|
432
|
-
*,
|
433
|
-
timeout: float = 30.0,
|
434
|
-
headers: Optional[Dict[str, str]] = None,
|
435
|
-
css_selector: str = "a[href]",
|
436
|
-
include_external: bool = True,
|
437
|
-
include_internal: bool = True,
|
438
|
-
base_url: Optional[str] = None,
|
439
|
-
) -> ExtractedLinks:
|
440
|
-
"""
|
441
|
-
Extract links from a web page using selectolax.
|
442
|
-
|
443
|
-
Args:
|
444
|
-
url: URL to fetch and extract links from
|
445
|
-
timeout: Request timeout in seconds (default: 30.0)
|
446
|
-
headers: Optional HTTP headers to send
|
447
|
-
css_selector: CSS selector for links (default: "a[href]")
|
448
|
-
include_external: Whether to include external links (default: True)
|
449
|
-
include_internal: Whether to include internal links (default: True)
|
450
|
-
base_url: Base URL for resolving relative links (uses page URL if not provided)
|
451
|
-
|
452
|
-
Returns:
|
453
|
-
List of link dictionaries with href, text, title, and type (internal/external)
|
454
|
-
|
455
|
-
Raises:
|
456
|
-
httpx.HTTPError: If request fails
|
457
|
-
Exception: If parsing fails
|
458
|
-
"""
|
459
|
-
|
460
|
-
async def _extract_web_page_links_async():
|
461
|
-
client = _get_search_client()
|
462
|
-
return await client.extract_page_links(
|
463
|
-
url=url,
|
464
|
-
timeout=timeout,
|
465
|
-
headers=headers,
|
466
|
-
css_selector=css_selector,
|
467
|
-
include_external=include_external,
|
468
|
-
include_internal=include_internal,
|
469
|
-
base_url=base_url,
|
470
|
-
)
|
471
|
-
|
472
|
-
return asyncio.run(_extract_web_page_links_async())
|
@@ -1,135 +0,0 @@
|
|
1
|
-
hammad/__init__.py,sha256=PtKUoTlLLfTA8cuhfvvaG1PCz6B4gkyl4d0OgZA0rNY,1705
|
2
|
-
hammad/_internal.py,sha256=qQGXjzQyyCxzH5kMjCHwVdAojp-2OOVAO2T2QDxOBn8,8957
|
3
|
-
hammad/_main.py,sha256=2y18WxvGqRtA0C4aaYK9-LhFXwhFvY6832kNmUyebRA,6902
|
4
|
-
hammad/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
-
hammad/types.py,sha256=bhQaWC9eY0vS5Ds_bbehf-61uzrUZRMNRg3oE_BsCbY,7444
|
6
|
-
hammad/cache/__init__.py,sha256=29vI8UkVITtiEe7fTr9UR5Q0lV7tr_SVe7tLlJmm1Ks,954
|
7
|
-
hammad/cache/base_cache.py,sha256=kYJS2IcQtxhzT7BQBFtOWnhw4VkvAapPhAVkfbW5IeY,6353
|
8
|
-
hammad/cache/cache.py,sha256=bzDXxjSolrSdIxqES2VMfVZZGTk_8k4x9n0AW4tlifs,4621
|
9
|
-
hammad/cache/decorators.py,sha256=olYLK5x4JkxHpA8WIiplI45QYmNIzyGjNMrTKNRCSQg,9599
|
10
|
-
hammad/cache/file_cache.py,sha256=XjLJxM4Ql65OABxz8q1DtA_s8HZQJKywCw6MNVnC6YE,2485
|
11
|
-
hammad/cache/ttl_cache.py,sha256=-0pJ4lkVgg1OIb98bQFub9n6f4zgWVs-dQfKZe_DmpE,2153
|
12
|
-
hammad/cli/__init__.py,sha256=mnetA--WekbUSvNUJOO4hQywltvfY25kcD07pe6DAWQ,733
|
13
|
-
hammad/cli/animations.py,sha256=h68OuJBkDiYTLdB5pLPgQ2gpPT2c3dNulkDv2BtKHFA,19507
|
14
|
-
hammad/cli/plugins.py,sha256=qWFtCUZMB0Tu6WwbUg9ut1PvCT5eIIUo2S5WFejUm4A,31804
|
15
|
-
hammad/cli/styles/__init__.py,sha256=Ok7J_uhJgyswNkBWnDw50oTX9Xk1HPksUl3UbmT1qTI,1363
|
16
|
-
hammad/cli/styles/settings.py,sha256=irChf9RsMij3djx_n9D9duoVIzxLCpd9-BlKl6U_OLk,5532
|
17
|
-
hammad/cli/styles/types.py,sha256=vNIeQY_23m10K8qVT7Iy-PMwosGL-La-UAZKszHJjEE,7911
|
18
|
-
hammad/cli/styles/utils.py,sha256=zzi0JdH1X7O8XWRlMVfJP2jB-OWt7zkpm_LeCHoSKVY,28287
|
19
|
-
hammad/data/__init__.py,sha256=VfrHgmyf4RU1y8U0oA23TcohuF-XUh8742rH3lUnw0g,2278
|
20
|
-
hammad/data/collections/__init__.py,sha256=_7qoquGARHfx6G_ui9D4czyQAx5RkVHyrdFBhB7UI9U,1156
|
21
|
-
hammad/data/collections/collection.py,sha256=zDx27gMv-5F-ClTSaI0_1_GZN8K9bzXmvWIvIBqpkH0,12172
|
22
|
-
hammad/data/collections/indexes/__init__.py,sha256=RmXKWKq2sbtA1swz5vamKKWut-eKfc-Q2tUnij-E-IU,960
|
23
|
-
hammad/data/collections/indexes/qdrant/__init__.py,sha256=KU89TIJkYmJPnVxWKHfXntkIYwhn86ejXtWG30hCyHg,49
|
24
|
-
hammad/data/collections/indexes/qdrant/index.py,sha256=UzhW64i5Yq5AXyGZjkW4dljgQxwKUbjF6vhzendbjko,25634
|
25
|
-
hammad/data/collections/indexes/qdrant/settings.py,sha256=6Q3zT7hDNfKKqC6qI3xLiinm8yTsmyrncIoxLjbPk5o,2445
|
26
|
-
hammad/data/collections/indexes/qdrant/utils.py,sha256=_-iUn8O2C5Oaf2WlWBYBWZM4F7WM7B1KXh7FKu4Svkk,6326
|
27
|
-
hammad/data/collections/indexes/tantivy/__init__.py,sha256=iHlb8zNlvoKkQJOZgLONq8knYkoHFRQlS1DYKpcVwvE,46
|
28
|
-
hammad/data/collections/indexes/tantivy/index.py,sha256=TO5eRJB0ajjeJtDKRs5Q7-0n5vOqlAZgH87h6YIzavw,13628
|
29
|
-
hammad/data/collections/indexes/tantivy/settings.py,sha256=8K3CmmiU2geVniiUsRo3PXUAhAAhfqYeCSSvTQhpKH4,1254
|
30
|
-
hammad/data/collections/indexes/tantivy/utils.py,sha256=etY_N3BdiF91r7mvD8SYyQhnADPFLeMKA9d56jmlCYE,5454
|
31
|
-
hammad/data/configurations/__init__.py,sha256=1vJMpKKItA_aCDtOV7ouNpNAwOXhCJ28H_8dilrAzz0,834
|
32
|
-
hammad/data/configurations/configuration.py,sha256=ijm2FAyQjZ66Jo2RlT5hjCiAZdC9EnnghmR7Pj5z0Gw,17737
|
33
|
-
hammad/data/models/__init__.py,sha256=M59vT2Wu1Qw1jK2Qhs5KRgxh8MVrSmTRjGUNlM_Rmkw,1154
|
34
|
-
hammad/data/models/fields.py,sha256=6H5SbrXhC0KEge5PJNFqN-Ek8RKxt7-eRKC2E7xmoe8,19180
|
35
|
-
hammad/data/models/model.py,sha256=gBH6fL9TjSYfAyDHuw-VJdTorML62iisokvTlVzOnhY,39128
|
36
|
-
hammad/data/models/utils.py,sha256=KNtr1PlxBizs14gmZqQeG1A7EQ6JHPRrRN0pTr3ucR8,9964
|
37
|
-
hammad/data/models/extensions/__init__.py,sha256=dfVDCMBKZYtaMHJRQBShaoMHFcQ6VJcD_5q5Fcc77mQ,128
|
38
|
-
hammad/data/models/extensions/pydantic/__init__.py,sha256=2ipoelO4knYSug47Vdt0URHtBNCQIFixJ3tTcawaCtE,1205
|
39
|
-
hammad/data/models/extensions/pydantic/converters.py,sha256=_485-4EUQe7-fxlPG2o1wnaU8SDA79AhxMitiUMoIYY,24545
|
40
|
-
hammad/data/sql/__init__.py,sha256=o5OygbXCCpWH0A1Sr994e_rdplUxY0Vl3mGIykt1c7k,493
|
41
|
-
hammad/data/sql/database.py,sha256=t06bNLQ0WPmg8Be_Xf9u8k5zhy70Iw-akC4Ff2o5PrA,18208
|
42
|
-
hammad/data/sql/types.py,sha256=8xLEEK7u6YBFGfh8MJbJeSVNeGZ1RCxF_QvNTu0rel0,3526
|
43
|
-
hammad/data/types/__init__.py,sha256=6BB1tu7RHrTLiqUYAxXsSFeejGSBuzOvFaw4I0llGN4,1723
|
44
|
-
hammad/data/types/file.py,sha256=G40bjC5n6zzbGDLeyCYER3hOg0bbCoZgjSH4TaCwL5A,13092
|
45
|
-
hammad/data/types/text.py,sha256=x22KAEX18eU0m5DUvY5P9f1kcYYtoUv9tPRlvmTJubA,40863
|
46
|
-
hammad/data/types/multimodal/__init__.py,sha256=jPqoHTmgBJnc_8jg-QMjAYiOiRys29IcDnJ3FMrCH_0,689
|
47
|
-
hammad/data/types/multimodal/audio.py,sha256=6T3XJXrAazkAluwohfGff0ENmhRtIMAX0XV22KVGgDU,5380
|
48
|
-
hammad/data/types/multimodal/image.py,sha256=IDjuCfTpsNqWEaAZ2c6M28gwTpswHy6tGu16F3GE6Rg,4733
|
49
|
-
hammad/formatting/__init__.py,sha256=HspdG2uFBPcqtUa5lMdqV_9gTon1Emvn61WBUAz4xCI,642
|
50
|
-
hammad/formatting/json/__init__.py,sha256=V4uODCUQdptfyw_D96R3XDopw1bgNIR2ogiEG-Z-FtQ,525
|
51
|
-
hammad/formatting/json/converters.py,sha256=CfEKtoTkeQbaGnpHHY3SAFVFjRjeG115X94L8Jq-14I,5597
|
52
|
-
hammad/formatting/text/__init__.py,sha256=ZAA7D4pwKFjeUxHsnm21QKSTtQ7Fj8ncO__m5Ry_eHY,1506
|
53
|
-
hammad/formatting/text/converters.py,sha256=g3z-ZGTaKNVbLFFKBSh6qN2Uz0BSkdxCaN3LR9cAyV8,23806
|
54
|
-
hammad/formatting/text/markdown.py,sha256=D17NOoGkoXUBhoOGKelKHwi72iqsAwPU5HEFjRJtLQI,3407
|
55
|
-
hammad/formatting/yaml/__init__.py,sha256=4dBeXPi0jx7ELT2_sC2fUYaiY8b8wFiUScLODc9ISEw,462
|
56
|
-
hammad/formatting/yaml/converters.py,sha256=zvSB8QGb56uvwO0KjXllfTj9g1FmNINOKR06DTjvXw8,153
|
57
|
-
hammad/genai/__init__.py,sha256=d7E8JzSEk-4j-9eEYdTo-oPIH1_7wCMNteqSa0JfBLY,5271
|
58
|
-
hammad/genai/a2a/__init__.py,sha256=TXSD1nrihWVZsZLMxcbi4rgcXpmZy6c8cVXDKFVJ4HA,504
|
59
|
-
hammad/genai/a2a/workers.py,sha256=xJNVDDw-8XxQhwtQXBSLgUJhn-dLfuvvFCz_eTqcbMc,18339
|
60
|
-
hammad/genai/agents/__init__.py,sha256=_kfDT1rLHNm-eVdr7Lq3IRoHNooQvw3HbaN_71uqKek,1544
|
61
|
-
hammad/genai/agents/agent.py,sha256=hTIiRxVE3N6JkwmhGOrry059ZXiA9f5avrNMdwjlOes,84503
|
62
|
-
hammad/genai/agents/run.py,sha256=ooiyVIOlDmIb0327pIP8j2OrcU198VgSRIOZTEmJr0s,37530
|
63
|
-
hammad/genai/agents/types/__init__.py,sha256=6X6_P82qe15dyqs-vAcXUk4na4tB-7oMdMf484v87io,1119
|
64
|
-
hammad/genai/agents/types/agent_context.py,sha256=u4evwx9B-UKEHMtNcsNlN9q8i12bsW9HhtyvmU0NNTw,313
|
65
|
-
hammad/genai/agents/types/agent_event.py,sha256=zNKXXPKKOsIO9MAhE-YNCOxeNg00O7j1mE0R1pA_Xr8,3925
|
66
|
-
hammad/genai/agents/types/agent_hooks.py,sha256=wgys4ixiHjX5oux4zVSr9OPXyAZ-iJGk_MhaOKEgMxo,7853
|
67
|
-
hammad/genai/agents/types/agent_messages.py,sha256=csjEq42bElaTZYZW2dE6nlFZc142-HgT3bB6h1KMg_w,846
|
68
|
-
hammad/genai/agents/types/agent_response.py,sha256=tQ3oNBZC_9dD7t-7tRuKA2h1a-XE5gGryVF9XcmZ5GA,3863
|
69
|
-
hammad/genai/agents/types/agent_stream.py,sha256=VIfqZp55wq6jQh_OtPzZjiL_K4cEoVCkeEZS3s_MIXI,11069
|
70
|
-
hammad/genai/graphs/__init__.py,sha256=bK59ilXuR46DgSjat7kOOr_KujIpJSfbCSgriceRhjw,3112
|
71
|
-
hammad/genai/graphs/_utils.py,sha256=kLPD9iAWhI7zRDTNLnYGRrD2f2IPre-0GYLMQcq1xzU,8854
|
72
|
-
hammad/genai/graphs/base.py,sha256=02kLcQRFJxGw-rPlfFBDWW9C9_CAlPYHdlTwu7rg7nA,69633
|
73
|
-
hammad/genai/graphs/plugins.py,sha256=AK_JSo2eLCD9cdrxZ5OxxZtLVrUDcQ8f_FWBxOQPzyw,10007
|
74
|
-
hammad/genai/graphs/types.py,sha256=kpQvWpE7cKjK9TzNFa_I-z7LfxWdlCuIA-lfRTk_nFU,20701
|
75
|
-
hammad/genai/models/__init__.py,sha256=e4TbEsiKIoXENOEsdIdQcWWt0RnFdTEqCz0nICHQHtM,26
|
76
|
-
hammad/genai/models/model_provider.py,sha256=2RdOeqr7KpjyrMqq4YH4OYy1pk6sjzf2CPu1ZHa1Pdk,75
|
77
|
-
hammad/genai/models/multimodal.py,sha256=KXUyLXqM1eBgBGZFEbMw3dYbakZFAXoko2xYprronxY,1276
|
78
|
-
hammad/genai/models/reranking.py,sha256=oR1j7uomtEQCse-1zkteDTdXklEKu40CvFcAMLAV2XM,451
|
79
|
-
hammad/genai/models/embeddings/__init__.py,sha256=x_lWV2TGjogAsG4Yny73-ECRmZPVMw245qnKOr81R9o,1033
|
80
|
-
hammad/genai/models/embeddings/model.py,sha256=vh8JPfy8_vBZrS8h3OEyaUYjbbuyBq3x2bUa0hVxkuc,8166
|
81
|
-
hammad/genai/models/embeddings/run.py,sha256=-0WPCGF2otIfPZzQ2VeocuvKFxSyCz66WsfkhORJAV4,5011
|
82
|
-
hammad/genai/models/embeddings/types/__init__.py,sha256=j1puexoIpgyYpDkz-1wMy2QjbS5QEZiLlI0BJaus3gY,1068
|
83
|
-
hammad/genai/models/embeddings/types/embedding_model_name.py,sha256=LA8E6C-_o7cz8KwFPL0vLYt2OxhTtJikMHsQBwNpKpY,2499
|
84
|
-
hammad/genai/models/embeddings/types/embedding_model_response.py,sha256=V2H_VTl1MSBTa6Yubwjb43ZaoIrHORRdy9nYG2kZGyQ,2038
|
85
|
-
hammad/genai/models/embeddings/types/embedding_model_run_params.py,sha256=ZGhCXrEEzMF5y-V8neF2a73Gh1emzrYUHVxWkybg5uE,1570
|
86
|
-
hammad/genai/models/embeddings/types/embedding_model_settings.py,sha256=KEwvoElXhPMSVCKW2uKwqqT2lSAAthQXmGXaV7Qk5cU,1268
|
87
|
-
hammad/genai/models/language/__init__.py,sha256=1PovP7w1eIytFPCRB7NaTLERT8-pl-5axg1pOEL5tMo,2006
|
88
|
-
hammad/genai/models/language/model.py,sha256=se0Lflc1d9Vw-T0SlWLxIKDqNv01QkSfOR3VETNNRFw,42027
|
89
|
-
hammad/genai/models/language/run.py,sha256=ulIjn97X74u1Ct575kGV2OZzexpOmjlKkbx7T9IeTOk,32495
|
90
|
-
hammad/genai/models/language/types/__init__.py,sha256=cdLnoCiVmK6T86-5CZrUJg2rxXKoSk-svyCSviUdgao,1534
|
91
|
-
hammad/genai/models/language/types/language_model_instructor_mode.py,sha256=7ywBaY24m-UKRynnX6XsfVf_hsQrM2xHAHugTgV0Vho,1008
|
92
|
-
hammad/genai/models/language/types/language_model_messages.py,sha256=e-HZ_YKXq17gwmMlpOmYUYUpBFm7Mu3aRawtjSslWXs,504
|
93
|
-
hammad/genai/models/language/types/language_model_name.py,sha256=2V70cZ47L9yIcug6LCcMHcvEJaee7gRN6DUPhLUBlsE,8056
|
94
|
-
hammad/genai/models/language/types/language_model_request.py,sha256=ZtzhCx8o6zkEBS3uTFXFLf_poDD7MnIp1y7MbKckOmI,3911
|
95
|
-
hammad/genai/models/language/types/language_model_response.py,sha256=CE-PWxmAB9RDzHqGjEUvYaVnbDnKYz4eEMW4Fz65F4s,7640
|
96
|
-
hammad/genai/models/language/types/language_model_response_chunk.py,sha256=wIzGZw732KsI-a1-uASjATA6qvBuq-7rupWoFjsAgQo,1796
|
97
|
-
hammad/genai/models/language/types/language_model_settings.py,sha256=C0EvLXZoOLgPZ4bX7mVFs_CWP-jam27qkseJRGsBAfQ,2794
|
98
|
-
hammad/genai/models/language/types/language_model_stream.py,sha256=XgJ83JSbtTdf7jeLQMrDhMfI7zp0pRrdY7JWYbZV_h0,22043
|
99
|
-
hammad/genai/models/language/utils/__init__.py,sha256=eoq08gYz2dzgRAge38c-HsadHdv9sNdTxsZ3Af8YfXQ,732
|
100
|
-
hammad/genai/models/language/utils/requests.py,sha256=_FAksgbNyD7dQAEB5a6D50DoWG0ENg71HX9DBeIwmJg,13344
|
101
|
-
hammad/genai/models/language/utils/structured_outputs.py,sha256=Va7pie9AOvLbJOaDj4VIKG94EO8-47d-aL4CJTM9FAg,3923
|
102
|
-
hammad/genai/types/__init__.py,sha256=W0fzUnKhDynt4TkwZX8LCRYfgRTAVomSuWqPmhGu8sg,25
|
103
|
-
hammad/genai/types/base.py,sha256=VnGL45w8oR-6rWl2GfGgWX4SjMC-23RGWuN0_H2bH_I,5437
|
104
|
-
hammad/genai/types/history.py,sha256=zsfBvGMoFTHZCT7Igae-5_jszu409dVJ_wEmNw7alCk,10208
|
105
|
-
hammad/genai/types/tools.py,sha256=Te4WU-MOTCoFvpMw0ddHB9NjlXvpeAYZ99Cd6pcchi4,16563
|
106
|
-
hammad/logging/__init__.py,sha256=VtskZx0bKEAJ9FHTMflhB1CzeFUxLpDT5HPgcecAXUo,701
|
107
|
-
hammad/logging/decorators.py,sha256=VbI1x3P4ft0-0BGjXq7nQgiuNqcXAA51CGmoSn47iSw,30122
|
108
|
-
hammad/logging/logger.py,sha256=5i89ILoRDn-ThTj7DRvN5sLgWN9IXdX_4-pqCoRAsIg,33612
|
109
|
-
hammad/mcp/__init__.py,sha256=qdnxy_G75NAuZvaxUNXNFd_n_Qxs1pItkcXuCk7k120,1195
|
110
|
-
hammad/mcp/client/__init__.py,sha256=_SfnKvd5Za-FfFoE5GcXkBY9WcwprZND9SyZ6RY--no,795
|
111
|
-
hammad/mcp/client/client.py,sha256=auKCiIJfcZkuVFRapTpqYP4PxoyIfx40gVbMYLBdTzI,20565
|
112
|
-
hammad/mcp/client/client_service.py,sha256=quJp02n9tp70l0SJd9jkIuRkdSPeWegzusk-eiV41b0,14990
|
113
|
-
hammad/mcp/client/settings.py,sha256=7bLpJYyiUT_H7zp3SDwLyAt9fmiQwL3L89qVTAZYpi8,5913
|
114
|
-
hammad/mcp/servers/__init__.py,sha256=QOQGd8NnTyt3bUJ8Bbs_izDiSdmB6ZvCc3HQTQfgmTc,585
|
115
|
-
hammad/mcp/servers/launcher.py,sha256=jQDQOqz-cKK2PSEOxoPBCVsBeTABNNjcwTXSWE4-LQA,41606
|
116
|
-
hammad/runtime/__init__.py,sha256=I7MuJV-1dvLSUaAiK6TCAo1rm0vQvR617bLd1Q9c99E,662
|
117
|
-
hammad/runtime/decorators.py,sha256=5T56nAwwfH0ZKfnLlDGkDNFYaGBBSrH1i4_yX3Dt5GA,4524
|
118
|
-
hammad/runtime/run.py,sha256=VFzoXieSaEg1KlDTTepDIsSyISkWXuxHpNs_AgHX5nM,10802
|
119
|
-
hammad/service/__init__.py,sha256=B7wnQkT8e2kFwaigpAcXI_PJ8jlQzxcgTtDDH1p4KSU,1222
|
120
|
-
hammad/service/create.py,sha256=Z0Vy-nQUKk_zqLuVOKJye6gLdVSU5HNlPgm4irvRgu8,16224
|
121
|
-
hammad/service/decorators.py,sha256=s7MB1fBgf1TwDYH80tmpJe12ixtaElkmFlTvtMTMQdQ,9918
|
122
|
-
hammad/typing/__init__.py,sha256=P9XCKrn-kxyfSLHpY9vraOLV9vyoBz_DzEm6eIH5xWY,11712
|
123
|
-
hammad/web/__init__.py,sha256=8wQPjlpW6t1bbCKUkZMIEJtVbL9Aj6TnTWcmNRdjBRY,1077
|
124
|
-
hammad/web/models.py,sha256=YLQ5oKLWmsyVWb1Gtd0x38YMOZginQd4oCgIXCVoRh4,6407
|
125
|
-
hammad/web/utils.py,sha256=o-ys9anLDtOTkqvk0Z8gxc-V0lhp0LB03DHFpoj6Ous,15863
|
126
|
-
hammad/web/http/__init__.py,sha256=jn9Rn7Yg2cypD7duTTNFuW2wQZx9B63Bde4RJJeDYU0,22
|
127
|
-
hammad/web/http/client.py,sha256=LWBSVjvHEuHmOOWq5EUT4zN5w6zSG45bOTk6FiSPHuA,33082
|
128
|
-
hammad/web/openapi/__init__.py,sha256=JhJQ6_laBmB2djIYFc0vgGha2GsdUe4FP1LDdZCQ5J4,25
|
129
|
-
hammad/web/openapi/client.py,sha256=1pXz7KAO_0pN4kQZoWKWskXDYGiJ535TsPO1GGCiC0E,26816
|
130
|
-
hammad/web/search/__init__.py,sha256=e9A6znPIiZCz-4secyHbUs0uUGf5yAqW6wGacgx961U,24
|
131
|
-
hammad/web/search/client.py,sha256=cBp8aNWFzVKoYimjip1IYJ09Z3lDgQ0EAzDST16e8Pk,36676
|
132
|
-
hammad_python-0.0.29.dist-info/METADATA,sha256=xM6ZjAZnYyC09TtSFNiYfG0XE0p-wZHlKkWtOwuTtDY,6425
|
133
|
-
hammad_python-0.0.29.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
134
|
-
hammad_python-0.0.29.dist-info/licenses/LICENSE,sha256=h74yFUWjbBaodcWG5wNmm30npjl8obVcxD-1nQfUp2I,1069
|
135
|
-
hammad_python-0.0.29.dist-info/RECORD,,
|
{hammad → ham}/py.typed
RENAMED
File without changes
|
File without changes
|
File without changes
|