firecrawl 4.0.0__tar.gz → 4.1.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of firecrawl might be problematic. Click here for more details.

Files changed (86) hide show
  1. {firecrawl-4.0.0 → firecrawl-4.1.1}/PKG-INFO +1 -1
  2. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__init__.py +1 -1
  3. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/client.py +4 -3
  4. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/types.py +9 -2
  5. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/utils/validation.py +15 -1
  6. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl.egg-info/PKG-INFO +1 -1
  7. {firecrawl-4.0.0 → firecrawl-4.1.1}/LICENSE +0 -0
  8. {firecrawl-4.0.0 → firecrawl-4.1.1}/README.md +0 -0
  9. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/aio/test_aio_batch_scrape.py +0 -0
  10. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/aio/test_aio_crawl.py +0 -0
  11. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/aio/test_aio_extract.py +0 -0
  12. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/aio/test_aio_map.py +0 -0
  13. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/aio/test_aio_scrape.py +0 -0
  14. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/aio/test_aio_search.py +0 -0
  15. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/aio/test_aio_usage.py +0 -0
  16. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/aio/test_aio_watcher.py +0 -0
  17. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/conftest.py +0 -0
  18. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/test_async.py +0 -0
  19. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/test_batch_scrape.py +0 -0
  20. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/test_crawl.py +0 -0
  21. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/test_extract.py +0 -0
  22. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/test_map.py +0 -0
  23. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/test_scrape.py +0 -0
  24. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/test_search.py +0 -0
  25. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/test_usage.py +0 -0
  26. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/e2e/v2/test_watcher.py +0 -0
  27. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_crawl_params.py +0 -0
  28. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_crawl_request_preparation.py +0 -0
  29. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_crawl_validation.py +0 -0
  30. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_map_request_preparation.py +0 -0
  31. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_scrape_request_preparation.py +0 -0
  32. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_search_request_preparation.py +0 -0
  33. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/aio/test_batch_request_preparation_async.py +0 -0
  34. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/aio/test_ensure_async.py +0 -0
  35. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_batch_request_preparation.py +0 -0
  36. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_crawl_params.py +0 -0
  37. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_crawl_request_preparation.py +0 -0
  38. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_crawl_validation.py +0 -0
  39. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_map_request_preparation.py +0 -0
  40. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_pagination.py +0 -0
  41. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_scrape_request_preparation.py +0 -0
  42. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_search_request_preparation.py +0 -0
  43. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_search_validation.py +0 -0
  44. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_usage_types.py +0 -0
  45. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/methods/test_webhook.py +0 -0
  46. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/utils/test_validation.py +0 -0
  47. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/__tests__/unit/v2/watcher/test_ws_watcher.py +0 -0
  48. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/client.py +0 -0
  49. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/firecrawl.backup.py +0 -0
  50. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/types.py +0 -0
  51. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v1/__init__.py +0 -0
  52. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v1/client.py +0 -0
  53. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/__init__.py +0 -0
  54. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/client_async.py +0 -0
  55. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/aio/__init__.py +0 -0
  56. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/aio/batch.py +0 -0
  57. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/aio/crawl.py +0 -0
  58. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/aio/extract.py +0 -0
  59. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/aio/map.py +0 -0
  60. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/aio/scrape.py +0 -0
  61. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/aio/search.py +0 -0
  62. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/aio/usage.py +0 -0
  63. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/batch.py +0 -0
  64. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/crawl.py +0 -0
  65. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/extract.py +0 -0
  66. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/map.py +0 -0
  67. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/scrape.py +0 -0
  68. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/search.py +0 -0
  69. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/methods/usage.py +0 -0
  70. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/utils/__init__.py +0 -0
  71. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/utils/error_handler.py +0 -0
  72. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/utils/get_version.py +0 -0
  73. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/utils/http_client.py +0 -0
  74. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/utils/http_client_async.py +0 -0
  75. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/utils/normalize.py +0 -0
  76. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/watcher.py +0 -0
  77. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl/v2/watcher_async.py +0 -0
  78. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl.egg-info/SOURCES.txt +0 -0
  79. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl.egg-info/dependency_links.txt +0 -0
  80. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl.egg-info/requires.txt +0 -0
  81. {firecrawl-4.0.0 → firecrawl-4.1.1}/firecrawl.egg-info/top_level.txt +0 -0
  82. {firecrawl-4.0.0 → firecrawl-4.1.1}/pyproject.toml +0 -0
  83. {firecrawl-4.0.0 → firecrawl-4.1.1}/setup.cfg +0 -0
  84. {firecrawl-4.0.0 → firecrawl-4.1.1}/setup.py +0 -0
  85. {firecrawl-4.0.0 → firecrawl-4.1.1}/tests/test_change_tracking.py +0 -0
  86. {firecrawl-4.0.0 → firecrawl-4.1.1}/tests/test_timeout_conversion.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: firecrawl
3
- Version: 4.0.0
3
+ Version: 4.1.1
4
4
  Summary: Python SDK for Firecrawl API
5
5
  Home-page: https://github.com/firecrawl/firecrawl
6
6
  Author: Mendable.ai
@@ -17,7 +17,7 @@ from .v1 import (
17
17
  V1ChangeTrackingOptions,
18
18
  )
19
19
 
20
- __version__ = "4.0.0"
20
+ __version__ = "4.1.1"
21
21
 
22
22
  # Define the logger for the Firecrawl project
23
23
  logger: logging.Logger = logging.getLogger("firecrawl")
@@ -18,6 +18,7 @@ from .types import (
18
18
  CrawlResponse,
19
19
  CrawlJob,
20
20
  CrawlParamsRequest,
21
+ PDFParser,
21
22
  CrawlParamsData,
22
23
  WebhookConfig,
23
24
  CrawlErrorsResponse,
@@ -105,7 +106,7 @@ class FirecrawlClient:
105
106
  timeout: Optional[int] = None,
106
107
  wait_for: Optional[int] = None,
107
108
  mobile: Optional[bool] = None,
108
- parsers: Optional[List[str]] = None,
109
+ parsers: Optional[Union[List[str], List[Union[str, PDFParser]]]] = None,
109
110
  actions: Optional[List[Union['WaitAction', 'ScreenshotAction', 'ClickAction', 'WriteAction', 'PressAction', 'ScrollAction', 'ScrapeAction', 'ExecuteJavascriptAction', 'PDFAction']]] = None,
110
111
  location: Optional['Location'] = None,
111
112
  skip_tls_verification: Optional[bool] = None,
@@ -571,7 +572,7 @@ class FirecrawlClient:
571
572
  timeout: Optional[int] = None,
572
573
  wait_for: Optional[int] = None,
573
574
  mobile: Optional[bool] = None,
574
- parsers: Optional[List[str]] = None,
575
+ parsers: Optional[Union[List[str], List[Union[str, PDFParser]]]] = None,
575
576
  actions: Optional[List[Union['WaitAction', 'ScreenshotAction', 'ClickAction', 'WriteAction', 'PressAction', 'ScrollAction', 'ScrapeAction', 'ExecuteJavascriptAction', 'PDFAction']]] = None,
576
577
  location: Optional['Location'] = None,
577
578
  skip_tls_verification: Optional[bool] = None,
@@ -759,7 +760,7 @@ class FirecrawlClient:
759
760
  timeout: Optional[int] = None,
760
761
  wait_for: Optional[int] = None,
761
762
  mobile: Optional[bool] = None,
762
- parsers: Optional[List[str]] = None,
763
+ parsers: Optional[Union[List[str], List[Union[str, PDFParser]]]] = None,
763
764
  actions: Optional[List[Union['WaitAction', 'ScreenshotAction', 'ClickAction', 'WriteAction', 'PressAction', 'ScrollAction', 'ScrapeAction', 'ExecuteJavascriptAction', 'PDFAction']]] = None,
764
765
  location: Optional['Location'] = None,
765
766
  skip_tls_verification: Optional[bool] = None,
@@ -278,7 +278,7 @@ class ScrapeOptions(BaseModel):
278
278
  timeout: Optional[int] = None
279
279
  wait_for: Optional[int] = None
280
280
  mobile: Optional[bool] = None
281
- parsers: Optional[List[str]] = None
281
+ parsers: Optional[Union[List[str], List[Union[str, 'PDFParser']]]] = None
282
282
  actions: Optional[List[Union['WaitAction', 'ScreenshotAction', 'ClickAction', 'WriteAction', 'PressAction', 'ScrollAction', 'ScrapeAction', 'ExecuteJavascriptAction', 'PDFAction']]] = None
283
283
  location: Optional['Location'] = None
284
284
  skip_tls_verification: Optional[bool] = None
@@ -536,6 +536,11 @@ class PDFAction(BaseModel):
536
536
  landscape: Optional[bool] = None
537
537
  scale: Optional[float] = None
538
538
 
539
+ class PDFParser(BaseModel):
540
+ """PDF parser configuration with optional page limit."""
541
+ type: Literal["pdf"] = "pdf"
542
+ max_pages: Optional[int] = None
543
+
539
544
  # Location types
540
545
  class Location(BaseModel):
541
546
  """Location configuration for scraping."""
@@ -594,6 +599,8 @@ class SearchRequest(BaseModel):
594
599
 
595
600
  return normalized_categories
596
601
 
602
+ # NOTE: parsers validation does not belong on SearchRequest; it is part of ScrapeOptions.
603
+
597
604
  class LinkResult(BaseModel):
598
605
  """A generic link result with optional metadata (used by search and map)."""
599
606
  url: str
@@ -686,4 +693,4 @@ AnyResponse = Union[
686
693
  MapResponse,
687
694
  SearchResponse,
688
695
  ErrorResponse,
689
- ]
696
+ ]
@@ -311,6 +311,20 @@ def prepare_scrape_options(options: Optional[ScrapeOptions]) -> Optional[Dict[st
311
311
  converted_action[action_key] = action_value
312
312
  converted_actions.append(converted_action)
313
313
  scrape_data["actions"] = converted_actions
314
+ elif key == "parsers":
315
+ converted_parsers = []
316
+ for parser in value:
317
+ if isinstance(parser, str):
318
+ converted_parsers.append(parser)
319
+ elif isinstance(parser, dict):
320
+ converted_parsers.append(parser)
321
+ else:
322
+ parser_data = parser.model_dump(exclude_none=True)
323
+ # Convert snake_case to camelCase for API
324
+ if "max_pages" in parser_data:
325
+ parser_data["maxPages"] = parser_data.pop("max_pages")
326
+ converted_parsers.append(parser_data)
327
+ scrape_data["parsers"] = converted_parsers
314
328
  elif key == "location":
315
329
  # Handle location conversion
316
330
  if isinstance(value, dict):
@@ -321,4 +335,4 @@ def prepare_scrape_options(options: Optional[ScrapeOptions]) -> Optional[Dict[st
321
335
  # For fields that don't need conversion, use as-is
322
336
  scrape_data[key] = value
323
337
 
324
- return scrape_data
338
+ return scrape_data
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: firecrawl
3
- Version: 4.0.0
3
+ Version: 4.1.1
4
4
  Summary: Python SDK for Firecrawl API
5
5
  Home-page: https://github.com/firecrawl/firecrawl
6
6
  Author: Mendable.ai
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes