crawlora 1.40.0.dev1__tar.gz → 1.41.0.dev1__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.
- {crawlora-1.40.0.dev1/crawlora.egg-info → crawlora-1.41.0.dev1}/PKG-INFO +1 -1
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/client.py +1 -1
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/client.pyi +57 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/operations.py +14 -1
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1/crawlora.egg-info}/PKG-INFO +1 -1
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/docs/operations.md +2 -1
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/pyproject.toml +1 -1
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_client.py +2 -2
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/LICENSE +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/MANIFEST.in +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/README.md +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/__init__.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/_pagination.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/_transport_sync.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/async_client.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/py.typed +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora.egg-info/SOURCES.txt +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora.egg-info/dependency_links.txt +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora.egg-info/requires.txt +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora.egg-info/top_level.txt +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/docs/recipes.md +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/examples/async_search.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/examples/bing_search.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/examples/paginate.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/examples/youtube_transcript.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/setup.cfg +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_async_httpx.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_examples.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_v14_features.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_v15_features.py +0 -0
- {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_w2_features.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crawlora
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.41.0.dev1
|
|
4
4
|
Summary: Official Python SDK for the Crawlora web-scraping API: typed grouped and dynamic operation calls for every public endpoint, with retries, pagination, hooks, and an async client.
|
|
5
5
|
Author: Crawlora
|
|
6
6
|
License-Expression: MIT
|
|
@@ -20,7 +20,7 @@ from ._transport_sync import KeepAliveTransport
|
|
|
20
20
|
from .operations import GROUPS, OPERATIONS
|
|
21
21
|
|
|
22
22
|
DEFAULT_BASE_URL = "https://api.crawlora.net/api/v1"
|
|
23
|
-
VERSION = "1.
|
|
23
|
+
VERSION = "1.41.0-sdk.1"
|
|
24
24
|
DEFAULT_USER_AGENT = f"crawlora-python-sdk/{VERSION}"
|
|
25
25
|
DEFAULT_MAX_RETRY_DELAY = 30.0
|
|
26
26
|
DEFAULT_RETRY_STATUSES = (408, 409, 425, 429)
|
|
@@ -9406,12 +9406,34 @@ ModelContactSocialProfile = TypedDict('ModelContactSocialProfile', {
|
|
|
9406
9406
|
'url': NotRequired[str],
|
|
9407
9407
|
}, total=False)
|
|
9408
9408
|
|
|
9409
|
+
ModelContactVerifiedAddress = TypedDict('ModelContactVerifiedAddress', {
|
|
9410
|
+
'address': NotRequired[str],
|
|
9411
|
+
'status': NotRequired[Literal['verified', 'risky', 'unverified', 'invalid']],
|
|
9412
|
+
'type': NotRequired[Literal['personal', 'generic', 'role']],
|
|
9413
|
+
}, total=False)
|
|
9414
|
+
|
|
9415
|
+
ModelContactVerifyRequest = TypedDict('ModelContactVerifyRequest', {
|
|
9416
|
+
'emails': Required[list[str]],
|
|
9417
|
+
}, total=False)
|
|
9418
|
+
|
|
9419
|
+
ModelContactVerifyResponse = TypedDict('ModelContactVerifyResponse', {
|
|
9420
|
+
'checked': NotRequired[int],
|
|
9421
|
+
'results': NotRequired[list[ModelContactVerifiedAddress]],
|
|
9422
|
+
'smtp_enabled': NotRequired[bool],
|
|
9423
|
+
}, total=False)
|
|
9424
|
+
|
|
9409
9425
|
ModelContactContactResponseDoc = TypedDict('ModelContactContactResponseDoc', {
|
|
9410
9426
|
'code': NotRequired[int],
|
|
9411
9427
|
'data': NotRequired[ModelContactContactResult],
|
|
9412
9428
|
'msg': NotRequired[str],
|
|
9413
9429
|
}, total=False)
|
|
9414
9430
|
|
|
9431
|
+
ModelContactVerifyResponseDoc = TypedDict('ModelContactVerifyResponseDoc', {
|
|
9432
|
+
'code': NotRequired[int],
|
|
9433
|
+
'data': NotRequired[ModelContactVerifyResponse],
|
|
9434
|
+
'msg': NotRequired[str],
|
|
9435
|
+
}, total=False)
|
|
9436
|
+
|
|
9415
9437
|
ModelCostcoCategoriesResponse = TypedDict('ModelCostcoCategoriesResponse', {
|
|
9416
9438
|
'categories': NotRequired[list[ModelCostcoCategory]],
|
|
9417
9439
|
'query': NotRequired[str],
|
|
@@ -55022,6 +55044,15 @@ EBayEbaySellerShopParams = TypedDict('EBayEbaySellerShopParams', {
|
|
|
55022
55044
|
'page': NotRequired[int],
|
|
55023
55045
|
}, total=False)
|
|
55024
55046
|
|
|
55047
|
+
WebEmailVerifyBody = ModelContactVerifyRequest
|
|
55048
|
+
WebEmailVerifyResponse = ModelContactVerifyResponseDoc
|
|
55049
|
+
WebEmailVerifyParams = TypedDict('WebEmailVerifyParams', {
|
|
55050
|
+
'_response_type': NotRequired[ResponseType],
|
|
55051
|
+
'_timeout': NotRequired[float],
|
|
55052
|
+
'_headers': NotRequired[Mapping[str, str]],
|
|
55053
|
+
'option': Required[WebEmailVerifyBody],
|
|
55054
|
+
}, total=False)
|
|
55055
|
+
|
|
55025
55056
|
EspnAthleteResponse = ModelEspnAthleteResponseDoc
|
|
55026
55057
|
EspnAthleteParams = TypedDict('EspnAthleteParams', {
|
|
55027
55058
|
'_response_type': NotRequired[ResponseType],
|
|
@@ -68348,6 +68379,7 @@ class CongressGroup:
|
|
|
68348
68379
|
class WebGroup:
|
|
68349
68380
|
def contact(self, **params: Unpack[WebContactParams]) -> WebContactResponse: ...
|
|
68350
68381
|
def antibot_check(self, **params: Unpack[WebAntibotCheckParams]) -> WebAntibotCheckResponse: ...
|
|
68382
|
+
def email_verify(self, **params: Unpack[WebEmailVerifyParams]) -> WebEmailVerifyResponse: ...
|
|
68351
68383
|
def extract(self, **params: Unpack[WebExtractParams]) -> WebExtractResponse: ...
|
|
68352
68384
|
def scrape(self, **params: Unpack[WebScrapeParams]) -> WebScrapeResponse: ...
|
|
68353
68385
|
def techstack(self, **params: Unpack[WebTechstackParams]) -> WebTechstackResponse: ...
|
|
@@ -70878,6 +70910,7 @@ OperationId = Literal[
|
|
|
70878
70910
|
'ebay-seller-about',
|
|
70879
70911
|
'ebay-seller-feedback',
|
|
70880
70912
|
'ebay-seller-shop',
|
|
70913
|
+
'email-verify',
|
|
70881
70914
|
'espn-athlete',
|
|
70882
70915
|
'espn-game-summary',
|
|
70883
70916
|
'espn-news',
|
|
@@ -79676,6 +79709,18 @@ class CrawloraClient:
|
|
|
79676
79709
|
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
79677
79710
|
) -> EBayEbaySellerShopResponse: ...
|
|
79678
79711
|
@overload
|
|
79712
|
+
def operation(
|
|
79713
|
+
self,
|
|
79714
|
+
operation_id: Literal['email-verify'],
|
|
79715
|
+
params: WebEmailVerifyParams,
|
|
79716
|
+
*,
|
|
79717
|
+
response_type: ResponseType = ...,
|
|
79718
|
+
timeout: float | None = ...,
|
|
79719
|
+
headers: Mapping[str, str] | None = ...,
|
|
79720
|
+
retries: int | None = ...,
|
|
79721
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
79722
|
+
) -> WebEmailVerifyResponse: ...
|
|
79723
|
+
@overload
|
|
79679
79724
|
def operation(
|
|
79680
79725
|
self,
|
|
79681
79726
|
operation_id: Literal['espn-athlete'],
|
|
@@ -102944,6 +102989,18 @@ class CrawloraClient:
|
|
|
102944
102989
|
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
102945
102990
|
) -> EBayEbaySellerShopResponse: ...
|
|
102946
102991
|
@overload
|
|
102992
|
+
def request(
|
|
102993
|
+
self,
|
|
102994
|
+
operation_id: Literal['email-verify'],
|
|
102995
|
+
params: WebEmailVerifyParams,
|
|
102996
|
+
*,
|
|
102997
|
+
response_type: ResponseType = ...,
|
|
102998
|
+
timeout: float | None = ...,
|
|
102999
|
+
headers: Mapping[str, str] | None = ...,
|
|
103000
|
+
retries: int | None = ...,
|
|
103001
|
+
retry_predicate: Callable[[int, BaseException | None], bool] | None = ...,
|
|
103002
|
+
) -> WebEmailVerifyResponse: ...
|
|
103003
|
+
@overload
|
|
102947
103004
|
def request(
|
|
102948
103005
|
self,
|
|
102949
103006
|
operation_id: Literal['espn-athlete'],
|
|
@@ -11977,6 +11977,17 @@ OPERATIONS = {'7now-catalog': {'bodyParam': None,
|
|
|
11977
11977
|
'produces': ['application/json'],
|
|
11978
11978
|
'queryParams': [{'in': 'query', 'name': 'page', 'type': 'integer'}],
|
|
11979
11979
|
'security': ['ApiKeyAuth']},
|
|
11980
|
+
'email-verify': {'bodyParam': 'option',
|
|
11981
|
+
'bodyRequired': True,
|
|
11982
|
+
'consumes': ['application/json'],
|
|
11983
|
+
'formParams': [],
|
|
11984
|
+
'id': 'email-verify',
|
|
11985
|
+
'method': 'POST',
|
|
11986
|
+
'path': '/email/verify',
|
|
11987
|
+
'pathParams': [],
|
|
11988
|
+
'produces': ['application/json'],
|
|
11989
|
+
'queryParams': [],
|
|
11990
|
+
'security': ['ApiKeyAuth']},
|
|
11980
11991
|
'espn-athlete': {'bodyParam': None,
|
|
11981
11992
|
'bodyRequired': False,
|
|
11982
11993
|
'consumes': ['application/json'],
|
|
@@ -33647,6 +33658,7 @@ GROUPS = {'accor': {'amenities': 'accor-amenities',
|
|
|
33647
33658
|
'wayfair': {'categories': 'wayfair-categories', 'category': 'wayfair-category', 'product': 'wayfair-product'},
|
|
33648
33659
|
'web': {'antibot_check': 'antibot-check',
|
|
33649
33660
|
'contact': 'contact',
|
|
33661
|
+
'email_verify': 'email-verify',
|
|
33650
33662
|
'extract': 'extract',
|
|
33651
33663
|
'scrape': 'web-scrape',
|
|
33652
33664
|
'techstack': 'web-techstack'},
|
|
@@ -33811,7 +33823,7 @@ GROUPS = {'accor': {'amenities': 'accor-amenities',
|
|
|
33811
33823
|
'restaurant_menu': 'zomato-restaurant-menu',
|
|
33812
33824
|
'search': 'zomato-search'}}
|
|
33813
33825
|
|
|
33814
|
-
OPERATION_COUNT =
|
|
33826
|
+
OPERATION_COUNT = 1939
|
|
33815
33827
|
|
|
33816
33828
|
class OperationId:
|
|
33817
33829
|
ACCOR_AMENITIES = 'accor-amenities'
|
|
@@ -35573,6 +35585,7 @@ class OperationId:
|
|
|
35573
35585
|
WAYFAIR_PRODUCT = 'wayfair-product'
|
|
35574
35586
|
WEB_ANTIBOT_CHECK = 'antibot-check'
|
|
35575
35587
|
WEB_CONTACT = 'contact'
|
|
35588
|
+
WEB_EMAIL_VERIFY = 'email-verify'
|
|
35576
35589
|
WEB_EXTRACT = 'extract'
|
|
35577
35590
|
WEB_SCRAPE = 'web-scrape'
|
|
35578
35591
|
WEB_TECHSTACK = 'web-techstack'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crawlora
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.41.0.dev1
|
|
4
4
|
Summary: Official Python SDK for the Crawlora web-scraping API: typed grouped and dynamic operation calls for every public endpoint, with retries, pagination, hooks, and an async client.
|
|
5
5
|
Author: Crawlora
|
|
6
6
|
License-Expression: MIT
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Generated from `openapi/public.json`. Deprecated, admin, and internal operations are excluded from this SDK contract.
|
|
4
4
|
|
|
5
|
-
Total operations: `
|
|
5
|
+
Total operations: `1939`
|
|
6
6
|
|
|
7
7
|
| Group | SDK method | Operation ID | HTTP | Params | Auth | Response | Notes |
|
|
8
8
|
| --- | --- | --- | --- | --- | --- | --- | --- |
|
|
@@ -360,6 +360,7 @@ Total operations: `1938`
|
|
|
360
360
|
| congress | `congress.stock_disclosures` | `congress-stock-disclosures` | `GET /congress/stock-disclosures` | `chamber` (query Literal['house', 'senate'])<br>`member` (query str)<br>`first_name` (query str)<br>`last_name` (query str)<br>`ticker` (query str)<br>`state` (query Literal['AK', 'AL', 'AR', 'AS', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'FM', 'GA', 'GU', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MH', 'MI', 'MN', 'MO', 'MP', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'PW', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VI', 'VT', 'WA', 'WI', 'WV', 'WY'])<br>`senator_state` (query Literal['AK', 'AL', 'AR', 'AS', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'FM', 'GA', 'GU', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MH', 'MI', 'MN', 'MO', 'MP', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'PW', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VI', 'VT', 'WA', 'WI', 'WV', 'WY'])<br>`candidate_state` (query Literal['AK', 'AL', 'AR', 'AS', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'FM', 'GA', 'GU', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MH', 'MI', 'MN', 'MO', 'MP', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'PW', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VI', 'VT', 'WA', 'WI', 'WV', 'WY'])<br>`district` (query str)<br>`filer_type` (query Literal['member', 'candidate', 'all', 'senator', 'former_senator'])<br>`election_year` (query str)<br>`report_type` (query Literal['annual', 'periodic_transaction', 'due_date_extension', 'blind_trust', 'other'])<br>`from` (query str)<br>`to` (query str)<br>`sort` (query Literal['name_asc', 'name_desc', 'office_asc', 'office_desc', 'filing_year_asc', 'filing_year_desc'])<br>`page` (query int)<br>`limit` (query int) | `ApiKeyAuth` | `CongressStockDisclosuresResponse` | |
|
|
361
361
|
| web | `web.contact` | `contact` | `POST /contact` | `option` (body str required) | `ApiKeyAuth` | `WebContactResponse` | |
|
|
362
362
|
| web | `web.antibot_check` | `antibot-check` | `POST /diagnostics/antibot-check` | `request` (body str required) | `ApiKeyAuth` | `WebAntibotCheckResponse` | |
|
|
363
|
+
| web | `web.email_verify` | `email-verify` | `POST /email/verify` | `option` (body str required) | `ApiKeyAuth` | `WebEmailVerifyResponse` | |
|
|
363
364
|
| web | `web.extract` | `extract` | `POST /extract` | `extractOption` (body str required) | `ApiKeyAuth` | `WebExtractResponse` | |
|
|
364
365
|
| web | `web.scrape` | `web-scrape` | `POST /web/scrape` | `scrapeOption` (body str required) | `ApiKeyAuth` | `WebScrapeResponse` | |
|
|
365
366
|
| web | `web.techstack` | `web-techstack` | `POST /web/techstack` | `request` (body str required) | `ApiKeyAuth` | `WebTechstackResponse` | |
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "crawlora"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.41.0.dev1"
|
|
8
8
|
description = "Official Python SDK for the Crawlora web-scraping API: typed grouped and dynamic operation calls for every public endpoint, with retries, pagination, hooks, and an async client."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
@@ -268,7 +268,7 @@ class CrawloraClientTest(unittest.TestCase):
|
|
|
268
268
|
|
|
269
269
|
def test_operation_metadata_count(self) -> None:
|
|
270
270
|
self.assertEqual(len(OPERATIONS), OPERATION_COUNT)
|
|
271
|
-
self.assertEqual(OPERATION_COUNT,
|
|
271
|
+
self.assertEqual(OPERATION_COUNT, 1939)
|
|
272
272
|
|
|
273
273
|
def test_deprecated_endpoints_are_not_generated(self) -> None:
|
|
274
274
|
self.assertFalse(hasattr(CrawloraClient(api_key="api_test", base_url=self.base_url).google, "lens"))
|
|
@@ -299,7 +299,7 @@ class CrawloraClientTest(unittest.TestCase):
|
|
|
299
299
|
recipes_doc = root.joinpath("docs", "recipes.md").read_text()
|
|
300
300
|
|
|
301
301
|
for expected in [
|
|
302
|
-
"Total operations: `
|
|
302
|
+
"Total operations: `1939`",
|
|
303
303
|
"`bing-search`",
|
|
304
304
|
"`GET /bing/search`",
|
|
305
305
|
"`bing.search`",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|