firecrawl 4.1.0__tar.gz → 4.2.0__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.1.0 → firecrawl-4.2.0}/PKG-INFO +1 -1
  2. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__init__.py +1 -1
  3. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/client.py +4 -0
  4. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/usage.py +16 -1
  5. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/types.py +9 -19
  6. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl.egg-info/PKG-INFO +1 -1
  7. {firecrawl-4.1.0 → firecrawl-4.2.0}/LICENSE +0 -0
  8. {firecrawl-4.1.0 → firecrawl-4.2.0}/README.md +0 -0
  9. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/aio/test_aio_batch_scrape.py +0 -0
  10. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/aio/test_aio_crawl.py +0 -0
  11. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/aio/test_aio_extract.py +0 -0
  12. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/aio/test_aio_map.py +0 -0
  13. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/aio/test_aio_scrape.py +0 -0
  14. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/aio/test_aio_search.py +0 -0
  15. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/aio/test_aio_usage.py +0 -0
  16. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/aio/test_aio_watcher.py +0 -0
  17. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/conftest.py +0 -0
  18. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/test_async.py +0 -0
  19. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/test_batch_scrape.py +0 -0
  20. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/test_crawl.py +0 -0
  21. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/test_extract.py +0 -0
  22. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/test_map.py +0 -0
  23. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/test_scrape.py +0 -0
  24. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/test_search.py +0 -0
  25. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/test_usage.py +0 -0
  26. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/e2e/v2/test_watcher.py +0 -0
  27. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_crawl_params.py +0 -0
  28. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_crawl_request_preparation.py +0 -0
  29. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_crawl_validation.py +0 -0
  30. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_map_request_preparation.py +0 -0
  31. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_scrape_request_preparation.py +0 -0
  32. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/aio/test_aio_search_request_preparation.py +0 -0
  33. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/aio/test_batch_request_preparation_async.py +0 -0
  34. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/aio/test_ensure_async.py +0 -0
  35. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_batch_request_preparation.py +0 -0
  36. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_crawl_params.py +0 -0
  37. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_crawl_request_preparation.py +0 -0
  38. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_crawl_validation.py +0 -0
  39. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_map_request_preparation.py +0 -0
  40. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_pagination.py +0 -0
  41. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_scrape_request_preparation.py +0 -0
  42. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_search_request_preparation.py +0 -0
  43. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_search_validation.py +0 -0
  44. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_usage_types.py +0 -0
  45. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/methods/test_webhook.py +0 -0
  46. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/utils/test_validation.py +0 -0
  47. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/__tests__/unit/v2/watcher/test_ws_watcher.py +0 -0
  48. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/client.py +0 -0
  49. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/firecrawl.backup.py +0 -0
  50. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/types.py +0 -0
  51. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v1/__init__.py +0 -0
  52. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v1/client.py +0 -0
  53. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/__init__.py +0 -0
  54. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/client_async.py +0 -0
  55. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/aio/__init__.py +0 -0
  56. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/aio/batch.py +0 -0
  57. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/aio/crawl.py +0 -0
  58. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/aio/extract.py +0 -0
  59. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/aio/map.py +0 -0
  60. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/aio/scrape.py +0 -0
  61. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/aio/search.py +0 -0
  62. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/aio/usage.py +0 -0
  63. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/batch.py +0 -0
  64. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/crawl.py +0 -0
  65. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/extract.py +0 -0
  66. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/map.py +0 -0
  67. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/scrape.py +0 -0
  68. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/methods/search.py +0 -0
  69. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/utils/__init__.py +0 -0
  70. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/utils/error_handler.py +0 -0
  71. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/utils/get_version.py +0 -0
  72. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/utils/http_client.py +0 -0
  73. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/utils/http_client_async.py +0 -0
  74. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/utils/normalize.py +0 -0
  75. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/utils/validation.py +0 -0
  76. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/watcher.py +0 -0
  77. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl/v2/watcher_async.py +0 -0
  78. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl.egg-info/SOURCES.txt +0 -0
  79. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl.egg-info/dependency_links.txt +0 -0
  80. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl.egg-info/requires.txt +0 -0
  81. {firecrawl-4.1.0 → firecrawl-4.2.0}/firecrawl.egg-info/top_level.txt +0 -0
  82. {firecrawl-4.1.0 → firecrawl-4.2.0}/pyproject.toml +0 -0
  83. {firecrawl-4.1.0 → firecrawl-4.2.0}/setup.cfg +0 -0
  84. {firecrawl-4.1.0 → firecrawl-4.2.0}/setup.py +0 -0
  85. {firecrawl-4.1.0 → firecrawl-4.2.0}/tests/test_change_tracking.py +0 -0
  86. {firecrawl-4.1.0 → firecrawl-4.2.0}/tests/test_timeout_conversion.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: firecrawl
3
- Version: 4.1.0
3
+ Version: 4.2.0
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.1.0"
20
+ __version__ = "4.2.0"
21
21
 
22
22
  # Define the logger for the Firecrawl project
23
23
  logger: logging.Logger = logging.getLogger("firecrawl")
@@ -727,6 +727,10 @@ class FirecrawlClient:
727
727
  """Get recent token usage metrics (v2)."""
728
728
  return usage_methods.get_token_usage(self.http_client)
729
729
 
730
+ def get_queue_status(self):
731
+ """Get metrics about the team's scrape queue."""
732
+ return usage_methods.get_queue_status(self.http_client)
733
+
730
734
  def watcher(
731
735
  self,
732
736
  job_id: str,
@@ -1,5 +1,5 @@
1
1
  from ..utils import HttpClient, handle_response_error
2
- from ..types import ConcurrencyCheck, CreditUsage, TokenUsage
2
+ from ..types import ConcurrencyCheck, CreditUsage, QueueStatusResponse, TokenUsage
3
3
 
4
4
 
5
5
  def get_concurrency(client: HttpClient) -> ConcurrencyCheck:
@@ -39,3 +39,18 @@ def get_token_usage(client: HttpClient) -> TokenUsage:
39
39
  remaining_tokens=data.get("remainingTokens", 0)
40
40
  )
41
41
 
42
+ def get_queue_status(client: HttpClient) -> QueueStatusResponse:
43
+ resp = client.get("/v2/team/queue-status")
44
+ if not resp.ok:
45
+ handle_response_error(resp, "get queue status")
46
+ body = resp.json()
47
+ if not body.get("success"):
48
+ raise Exception(body.get("error", "Unknown error"))
49
+ data = body.get("data", body)
50
+ return QueueStatusResponse(
51
+ jobs_in_queue=data.get("jobsInQueue", 0),
52
+ active_jobs_in_queue=data.get("activeJobsInQueue", 0),
53
+ waiting_jobs_in_queue=data.get("waitingJobsInQueue", 0),
54
+ max_concurrency=data.get("maxConcurrency", 0),
55
+ most_recent_success=data.get("mostRecentSuccess", None),
56
+ )
@@ -485,6 +485,14 @@ class TokenUsage(BaseModel):
485
485
  """Recent token usage metrics (if available)."""
486
486
  remaining_tokens: int
487
487
 
488
+ class QueueStatusResponse(BaseModel):
489
+ """Metrics about the team's scrape queue."""
490
+ jobs_in_queue: int
491
+ active_jobs_in_queue: int
492
+ waiting_jobs_in_queue: int
493
+ max_concurrency: int
494
+ most_recent_success: Optional[datetime] = None
495
+
488
496
  # Action types
489
497
  class WaitAction(BaseModel):
490
498
  """Wait action to perform during scraping."""
@@ -599,25 +607,7 @@ class SearchRequest(BaseModel):
599
607
 
600
608
  return normalized_categories
601
609
 
602
- @field_validator('parsers')
603
- @classmethod
604
- def validate_parsers(cls, v):
605
- """Validate and normalize parsers input."""
606
- if v is None:
607
- return v
608
-
609
- normalized_parsers = []
610
- for parser in v:
611
- if isinstance(parser, str):
612
- normalized_parsers.append(parser)
613
- elif isinstance(parser, dict):
614
- normalized_parsers.append(PDFParser(**parser))
615
- elif isinstance(parser, PDFParser):
616
- normalized_parsers.append(parser)
617
- else:
618
- raise ValueError(f"Invalid parser format: {parser}")
619
-
620
- return normalized_parsers
610
+ # NOTE: parsers validation does not belong on SearchRequest; it is part of ScrapeOptions.
621
611
 
622
612
  class LinkResult(BaseModel):
623
613
  """A generic link result with optional metadata (used by search and map)."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: firecrawl
3
- Version: 4.1.0
3
+ Version: 4.2.0
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