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.
Files changed (31) hide show
  1. {crawlora-1.40.0.dev1/crawlora.egg-info → crawlora-1.41.0.dev1}/PKG-INFO +1 -1
  2. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/client.py +1 -1
  3. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/client.pyi +57 -0
  4. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/operations.py +14 -1
  5. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1/crawlora.egg-info}/PKG-INFO +1 -1
  6. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/docs/operations.md +2 -1
  7. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/pyproject.toml +1 -1
  8. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_client.py +2 -2
  9. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/LICENSE +0 -0
  10. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/MANIFEST.in +0 -0
  11. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/README.md +0 -0
  12. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/__init__.py +0 -0
  13. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/_pagination.py +0 -0
  14. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/_transport_sync.py +0 -0
  15. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/async_client.py +0 -0
  16. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora/py.typed +0 -0
  17. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora.egg-info/SOURCES.txt +0 -0
  18. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora.egg-info/dependency_links.txt +0 -0
  19. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora.egg-info/requires.txt +0 -0
  20. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/crawlora.egg-info/top_level.txt +0 -0
  21. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/docs/recipes.md +0 -0
  22. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/examples/async_search.py +0 -0
  23. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/examples/bing_search.py +0 -0
  24. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/examples/paginate.py +0 -0
  25. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/examples/youtube_transcript.py +0 -0
  26. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/setup.cfg +0 -0
  27. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_async_httpx.py +0 -0
  28. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_examples.py +0 -0
  29. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_v14_features.py +0 -0
  30. {crawlora-1.40.0.dev1 → crawlora-1.41.0.dev1}/tests/test_v15_features.py +0 -0
  31. {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.40.0.dev1
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.40.0-sdk.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 = 1938
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.40.0.dev1
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: `1938`
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.40.0.dev1"
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, 1938)
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: `1938`",
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