firecrawl 2.7.0__py3-none-any.whl → 2.7.1__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.
Potentially problematic release.
This version of firecrawl might be problematic. Click here for more details.
- build/lib/build/lib/firecrawl/__init__.py +79 -0
- build/lib/build/lib/firecrawl/__tests__/e2e_withAuth/__init__.py +0 -0
- build/lib/build/lib/firecrawl/__tests__/e2e_withAuth/test.py +170 -0
- build/lib/build/lib/firecrawl/__tests__/v1/e2e_withAuth/__init__.py +0 -0
- build/lib/build/lib/firecrawl/__tests__/v1/e2e_withAuth/test.py +440 -0
- build/lib/build/lib/firecrawl/firecrawl.py +4467 -0
- build/lib/build/lib/tests/test_change_tracking.py +98 -0
- build/lib/firecrawl/__init__.py +79 -0
- build/lib/firecrawl/__tests__/e2e_withAuth/__init__.py +0 -0
- build/lib/firecrawl/__tests__/e2e_withAuth/test.py +170 -0
- build/lib/firecrawl/__tests__/v1/e2e_withAuth/__init__.py +0 -0
- build/lib/firecrawl/__tests__/v1/e2e_withAuth/test.py +440 -0
- build/lib/firecrawl/firecrawl.py +4467 -0
- build/lib/tests/test_change_tracking.py +98 -0
- firecrawl/__init__.py +1 -1
- firecrawl/firecrawl.py +10 -10
- {firecrawl-2.7.0.dist-info → firecrawl-2.7.1.dist-info}/METADATA +1 -1
- firecrawl-2.7.1.dist-info/RECORD +26 -0
- {firecrawl-2.7.0.dist-info → firecrawl-2.7.1.dist-info}/top_level.txt +2 -0
- firecrawl-2.7.0.dist-info/RECORD +0 -12
- {firecrawl-2.7.0.dist-info → firecrawl-2.7.1.dist-info}/LICENSE +0 -0
- {firecrawl-2.7.0.dist-info → firecrawl-2.7.1.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import unittest
|
|
2
|
+
from unittest.mock import patch, MagicMock
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
from firecrawl import FirecrawlApp
|
|
6
|
+
|
|
7
|
+
class TestChangeTracking(unittest.TestCase):
|
|
8
|
+
@patch('requests.post')
|
|
9
|
+
def test_change_tracking_format(self, mock_post):
|
|
10
|
+
mock_response = MagicMock()
|
|
11
|
+
mock_response.status_code = 200
|
|
12
|
+
mock_response.json.return_value = {
|
|
13
|
+
'success': True,
|
|
14
|
+
'data': {
|
|
15
|
+
'markdown': 'Test markdown content',
|
|
16
|
+
'changeTracking': {
|
|
17
|
+
'previousScrapeAt': '2023-01-01T00:00:00Z',
|
|
18
|
+
'changeStatus': 'changed',
|
|
19
|
+
'visibility': 'visible'
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
mock_post.return_value = mock_response
|
|
24
|
+
|
|
25
|
+
app = FirecrawlApp(api_key=os.environ.get('TEST_API_KEY', 'dummy-api-key-for-testing'))
|
|
26
|
+
result = app.scrape_url('https://example.com', {
|
|
27
|
+
'formats': ['markdown', 'changeTracking']
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
args, kwargs = mock_post.call_args
|
|
31
|
+
self.assertEqual(kwargs['json']['formats'], ['markdown', 'changeTracking'])
|
|
32
|
+
|
|
33
|
+
self.assertEqual(result['changeTracking']['previousScrapeAt'], '2023-01-01T00:00:00Z')
|
|
34
|
+
self.assertEqual(result['changeTracking']['changeStatus'], 'changed')
|
|
35
|
+
self.assertEqual(result['changeTracking']['visibility'], 'visible')
|
|
36
|
+
|
|
37
|
+
@patch('requests.post')
|
|
38
|
+
def test_change_tracking_options(self, mock_post):
|
|
39
|
+
mock_response = MagicMock()
|
|
40
|
+
mock_response.status_code = 200
|
|
41
|
+
mock_response.json.return_value = {
|
|
42
|
+
'success': True,
|
|
43
|
+
'data': {
|
|
44
|
+
'markdown': 'Test markdown content',
|
|
45
|
+
'changeTracking': {
|
|
46
|
+
'previousScrapeAt': '2023-01-01T00:00:00Z',
|
|
47
|
+
'changeStatus': 'changed',
|
|
48
|
+
'visibility': 'visible',
|
|
49
|
+
'diff': {
|
|
50
|
+
'text': '@@ -1,1 +1,1 @@\n-old content\n+new content',
|
|
51
|
+
'json': {
|
|
52
|
+
'files': [{
|
|
53
|
+
'from': None,
|
|
54
|
+
'to': None,
|
|
55
|
+
'chunks': [{
|
|
56
|
+
'content': '@@ -1,1 +1,1 @@',
|
|
57
|
+
'changes': [{
|
|
58
|
+
'type': 'del',
|
|
59
|
+
'content': '-old content',
|
|
60
|
+
'del': True,
|
|
61
|
+
'ln': 1
|
|
62
|
+
}, {
|
|
63
|
+
'type': 'add',
|
|
64
|
+
'content': '+new content',
|
|
65
|
+
'add': True,
|
|
66
|
+
'ln': 1
|
|
67
|
+
}]
|
|
68
|
+
}]
|
|
69
|
+
}]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
'json': {
|
|
73
|
+
'title': {
|
|
74
|
+
'previous': 'Old Title',
|
|
75
|
+
'current': 'New Title'
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
mock_post.return_value = mock_response
|
|
82
|
+
|
|
83
|
+
app = FirecrawlApp(api_key=os.environ.get('TEST_API_KEY', 'dummy-api-key-for-testing'))
|
|
84
|
+
result = app.scrape_url('https://example.com', {
|
|
85
|
+
'formats': ['markdown', 'changeTracking'],
|
|
86
|
+
'changeTrackingOptions': {
|
|
87
|
+
'modes': ['git-diff', 'json'],
|
|
88
|
+
'schema': {'type': 'object', 'properties': {'title': {'type': 'string'}}}
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
args, kwargs = mock_post.call_args
|
|
93
|
+
self.assertEqual(kwargs['json']['formats'], ['markdown', 'changeTracking'])
|
|
94
|
+
self.assertEqual(kwargs['json']['changeTrackingOptions']['modes'], ['git-diff', 'json'])
|
|
95
|
+
|
|
96
|
+
self.assertEqual(result['changeTracking']['diff']['text'], '@@ -1,1 +1,1 @@\n-old content\n+new content')
|
|
97
|
+
self.assertEqual(result['changeTracking']['json']['title']['previous'], 'Old Title')
|
|
98
|
+
self.assertEqual(result['changeTracking']['json']['title']['current'], 'New Title')
|
firecrawl/__init__.py
CHANGED
|
@@ -13,7 +13,7 @@ import os
|
|
|
13
13
|
|
|
14
14
|
from .firecrawl import FirecrawlApp, AsyncFirecrawlApp, JsonConfig, ScrapeOptions, ChangeTrackingOptions # noqa
|
|
15
15
|
|
|
16
|
-
__version__ = "2.7.
|
|
16
|
+
__version__ = "2.7.1"
|
|
17
17
|
|
|
18
18
|
# Define the logger for the Firecrawl project
|
|
19
19
|
logger: logging.Logger = logging.getLogger("firecrawl")
|
firecrawl/firecrawl.py
CHANGED
|
@@ -155,7 +155,7 @@ class ScrapeOptions(pydantic.BaseModel):
|
|
|
155
155
|
skipTlsVerification: Optional[bool] = None
|
|
156
156
|
removeBase64Images: Optional[bool] = None
|
|
157
157
|
blockAds: Optional[bool] = None
|
|
158
|
-
proxy: Optional[Literal["basic", "stealth"]] = None
|
|
158
|
+
proxy: Optional[Literal["basic", "stealth", "auto"]] = None
|
|
159
159
|
changeTrackingOptions: Optional[ChangeTrackingOptions] = None
|
|
160
160
|
|
|
161
161
|
class WaitAction(pydantic.BaseModel):
|
|
@@ -459,7 +459,7 @@ class FirecrawlApp:
|
|
|
459
459
|
skip_tls_verification: Optional[bool] = None,
|
|
460
460
|
remove_base64_images: Optional[bool] = None,
|
|
461
461
|
block_ads: Optional[bool] = None,
|
|
462
|
-
proxy: Optional[Literal["basic", "stealth"]] = None,
|
|
462
|
+
proxy: Optional[Literal["basic", "stealth", "auto"]] = None,
|
|
463
463
|
extract: Optional[JsonConfig] = None,
|
|
464
464
|
json_options: Optional[JsonConfig] = None,
|
|
465
465
|
actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None,
|
|
@@ -481,7 +481,7 @@ class FirecrawlApp:
|
|
|
481
481
|
skip_tls_verification (Optional[bool]): Skip TLS verification
|
|
482
482
|
remove_base64_images (Optional[bool]): Remove base64 images
|
|
483
483
|
block_ads (Optional[bool]): Block ads
|
|
484
|
-
proxy (Optional[Literal["basic", "stealth"]]): Proxy type (basic/stealth)
|
|
484
|
+
proxy (Optional[Literal["basic", "stealth", "auto"]]): Proxy type (basic/stealth)
|
|
485
485
|
extract (Optional[JsonConfig]): Content extraction settings
|
|
486
486
|
json_options (Optional[JsonConfig]): JSON extraction settings
|
|
487
487
|
actions (Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]]): Actions to perform
|
|
@@ -1191,7 +1191,7 @@ class FirecrawlApp:
|
|
|
1191
1191
|
skip_tls_verification: Optional[bool] = None,
|
|
1192
1192
|
remove_base64_images: Optional[bool] = None,
|
|
1193
1193
|
block_ads: Optional[bool] = None,
|
|
1194
|
-
proxy: Optional[Literal["basic", "stealth"]] = None,
|
|
1194
|
+
proxy: Optional[Literal["basic", "stealth", "auto"]] = None,
|
|
1195
1195
|
extract: Optional[JsonConfig] = None,
|
|
1196
1196
|
json_options: Optional[JsonConfig] = None,
|
|
1197
1197
|
actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None,
|
|
@@ -1325,7 +1325,7 @@ class FirecrawlApp:
|
|
|
1325
1325
|
skip_tls_verification: Optional[bool] = None,
|
|
1326
1326
|
remove_base64_images: Optional[bool] = None,
|
|
1327
1327
|
block_ads: Optional[bool] = None,
|
|
1328
|
-
proxy: Optional[Literal["basic", "stealth"]] = None,
|
|
1328
|
+
proxy: Optional[Literal["basic", "stealth", "auto"]] = None,
|
|
1329
1329
|
extract: Optional[JsonConfig] = None,
|
|
1330
1330
|
json_options: Optional[JsonConfig] = None,
|
|
1331
1331
|
actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None,
|
|
@@ -1457,7 +1457,7 @@ class FirecrawlApp:
|
|
|
1457
1457
|
skip_tls_verification: Optional[bool] = None,
|
|
1458
1458
|
remove_base64_images: Optional[bool] = None,
|
|
1459
1459
|
block_ads: Optional[bool] = None,
|
|
1460
|
-
proxy: Optional[Literal["basic", "stealth"]] = None,
|
|
1460
|
+
proxy: Optional[Literal["basic", "stealth", "auto"]] = None,
|
|
1461
1461
|
extract: Optional[JsonConfig] = None,
|
|
1462
1462
|
json_options: Optional[JsonConfig] = None,
|
|
1463
1463
|
actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None,
|
|
@@ -2852,7 +2852,7 @@ class AsyncFirecrawlApp(FirecrawlApp):
|
|
|
2852
2852
|
skip_tls_verification: Optional[bool] = None,
|
|
2853
2853
|
remove_base64_images: Optional[bool] = None,
|
|
2854
2854
|
block_ads: Optional[bool] = None,
|
|
2855
|
-
proxy: Optional[Literal["basic", "stealth"]] = None,
|
|
2855
|
+
proxy: Optional[Literal["basic", "stealth", "auto"]] = None,
|
|
2856
2856
|
extract: Optional[JsonConfig] = None,
|
|
2857
2857
|
json_options: Optional[JsonConfig] = None,
|
|
2858
2858
|
actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None,
|
|
@@ -2873,7 +2873,7 @@ class AsyncFirecrawlApp(FirecrawlApp):
|
|
|
2873
2873
|
skip_tls_verification (Optional[bool]): Skip TLS verification
|
|
2874
2874
|
remove_base64_images (Optional[bool]): Remove base64 images
|
|
2875
2875
|
block_ads (Optional[bool]): Block ads
|
|
2876
|
-
proxy (Optional[Literal["basic", "stealth"]]): Proxy type (basic/stealth)
|
|
2876
|
+
proxy (Optional[Literal["basic", "stealth", "auto"]]): Proxy type (basic/stealth)
|
|
2877
2877
|
extract (Optional[JsonConfig]): Content extraction settings
|
|
2878
2878
|
json_options (Optional[JsonConfig]): JSON extraction settings
|
|
2879
2879
|
actions (Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]]): Actions to perform
|
|
@@ -2981,7 +2981,7 @@ class AsyncFirecrawlApp(FirecrawlApp):
|
|
|
2981
2981
|
skip_tls_verification: Optional[bool] = None,
|
|
2982
2982
|
remove_base64_images: Optional[bool] = None,
|
|
2983
2983
|
block_ads: Optional[bool] = None,
|
|
2984
|
-
proxy: Optional[Literal["basic", "stealth"]] = None,
|
|
2984
|
+
proxy: Optional[Literal["basic", "stealth", "auto"]] = None,
|
|
2985
2985
|
extract: Optional[JsonConfig] = None,
|
|
2986
2986
|
json_options: Optional[JsonConfig] = None,
|
|
2987
2987
|
actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None,
|
|
@@ -3120,7 +3120,7 @@ class AsyncFirecrawlApp(FirecrawlApp):
|
|
|
3120
3120
|
skip_tls_verification: Optional[bool] = None,
|
|
3121
3121
|
remove_base64_images: Optional[bool] = None,
|
|
3122
3122
|
block_ads: Optional[bool] = None,
|
|
3123
|
-
proxy: Optional[Literal["basic", "stealth"]] = None,
|
|
3123
|
+
proxy: Optional[Literal["basic", "stealth", "auto"]] = None,
|
|
3124
3124
|
extract: Optional[JsonConfig] = None,
|
|
3125
3125
|
json_options: Optional[JsonConfig] = None,
|
|
3126
3126
|
actions: Optional[List[Union[WaitAction, ScreenshotAction, ClickAction, WriteAction, PressAction, ScrollAction, ScrapeAction, ExecuteJavascriptAction]]] = None,
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
build/lib/build/lib/firecrawl/__init__.py,sha256=jAxgyVgi4Aq94lwkcicF2_Ba2Y9u51-KfskU9d7ynRQ,2612
|
|
2
|
+
build/lib/build/lib/firecrawl/firecrawl.py,sha256=fsKXa1cHcIIsGUbFAENLlKYZaW349CHQ6O353Uq6ypg,190196
|
|
3
|
+
build/lib/build/lib/firecrawl/__tests__/e2e_withAuth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
+
build/lib/build/lib/firecrawl/__tests__/e2e_withAuth/test.py,sha256=-Fq2vPcMo0iQi4dwsUkkCd931ybDaTxMBnZbRfGdDcA,7931
|
|
5
|
+
build/lib/build/lib/firecrawl/__tests__/v1/e2e_withAuth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
build/lib/build/lib/firecrawl/__tests__/v1/e2e_withAuth/test.py,sha256=DcCw-cohtnL-t9XPekUtRoQrgg3UCWu8Ikqudf9ory8,19880
|
|
7
|
+
build/lib/build/lib/tests/test_change_tracking.py,sha256=_IJ5ShLcoj2fHDBaw-nE4I4lHdmDB617ocK_XMHhXps,4177
|
|
8
|
+
build/lib/firecrawl/__init__.py,sha256=jAxgyVgi4Aq94lwkcicF2_Ba2Y9u51-KfskU9d7ynRQ,2612
|
|
9
|
+
build/lib/firecrawl/firecrawl.py,sha256=fsKXa1cHcIIsGUbFAENLlKYZaW349CHQ6O353Uq6ypg,190196
|
|
10
|
+
build/lib/firecrawl/__tests__/e2e_withAuth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
+
build/lib/firecrawl/__tests__/e2e_withAuth/test.py,sha256=-Fq2vPcMo0iQi4dwsUkkCd931ybDaTxMBnZbRfGdDcA,7931
|
|
12
|
+
build/lib/firecrawl/__tests__/v1/e2e_withAuth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
+
build/lib/firecrawl/__tests__/v1/e2e_withAuth/test.py,sha256=DcCw-cohtnL-t9XPekUtRoQrgg3UCWu8Ikqudf9ory8,19880
|
|
14
|
+
build/lib/tests/test_change_tracking.py,sha256=_IJ5ShLcoj2fHDBaw-nE4I4lHdmDB617ocK_XMHhXps,4177
|
|
15
|
+
firecrawl/__init__.py,sha256=jAxgyVgi4Aq94lwkcicF2_Ba2Y9u51-KfskU9d7ynRQ,2612
|
|
16
|
+
firecrawl/firecrawl.py,sha256=fsKXa1cHcIIsGUbFAENLlKYZaW349CHQ6O353Uq6ypg,190196
|
|
17
|
+
firecrawl/__tests__/e2e_withAuth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
firecrawl/__tests__/e2e_withAuth/test.py,sha256=-Fq2vPcMo0iQi4dwsUkkCd931ybDaTxMBnZbRfGdDcA,7931
|
|
19
|
+
firecrawl/__tests__/v1/e2e_withAuth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
firecrawl/__tests__/v1/e2e_withAuth/test.py,sha256=DcCw-cohtnL-t9XPekUtRoQrgg3UCWu8Ikqudf9ory8,19880
|
|
21
|
+
tests/test_change_tracking.py,sha256=_IJ5ShLcoj2fHDBaw-nE4I4lHdmDB617ocK_XMHhXps,4177
|
|
22
|
+
firecrawl-2.7.1.dist-info/LICENSE,sha256=nPCunEDwjRGHlmjvsiDUyIWbkqqyj3Ej84ntnh0g0zA,1084
|
|
23
|
+
firecrawl-2.7.1.dist-info/METADATA,sha256=w6FnQdZopA66KHPgwSziV2uhom9Unr6-5iyQ1RpTlog,7165
|
|
24
|
+
firecrawl-2.7.1.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
|
25
|
+
firecrawl-2.7.1.dist-info/top_level.txt,sha256=ytN_R30g2U2qZYFyIm710Z8QeK9FO1Uwa-WPGHXyqjE,27
|
|
26
|
+
firecrawl-2.7.1.dist-info/RECORD,,
|
firecrawl-2.7.0.dist-info/RECORD
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
firecrawl/__init__.py,sha256=ysLLoNia3LF_XLrGvSOQ4pTMfS4jqN8oEZhkgnS-ox8,2612
|
|
2
|
-
firecrawl/firecrawl.py,sha256=aOYx9hI5f_M9SoWWHiukrpIDVB8DyFmY6-MKK-4t7p4,190116
|
|
3
|
-
firecrawl/__tests__/e2e_withAuth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
firecrawl/__tests__/e2e_withAuth/test.py,sha256=-Fq2vPcMo0iQi4dwsUkkCd931ybDaTxMBnZbRfGdDcA,7931
|
|
5
|
-
firecrawl/__tests__/v1/e2e_withAuth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
-
firecrawl/__tests__/v1/e2e_withAuth/test.py,sha256=DcCw-cohtnL-t9XPekUtRoQrgg3UCWu8Ikqudf9ory8,19880
|
|
7
|
-
tests/test_change_tracking.py,sha256=_IJ5ShLcoj2fHDBaw-nE4I4lHdmDB617ocK_XMHhXps,4177
|
|
8
|
-
firecrawl-2.7.0.dist-info/LICENSE,sha256=nPCunEDwjRGHlmjvsiDUyIWbkqqyj3Ej84ntnh0g0zA,1084
|
|
9
|
-
firecrawl-2.7.0.dist-info/METADATA,sha256=R1AURKl4C5bjf_gtiZ-W7AovX2Pg3rT2QlobVELddwg,7165
|
|
10
|
-
firecrawl-2.7.0.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
|
|
11
|
-
firecrawl-2.7.0.dist-info/top_level.txt,sha256=8T3jOaSN5mtLghO-R3MQ8KO290gIX8hmfxQmglBPdLE,16
|
|
12
|
-
firecrawl-2.7.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|