crawlee 1.0.0rc1__py3-none-any.whl → 1.0.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.
- crawlee/_autoscaling/snapshotter.py +1 -1
- crawlee/_request.py +2 -1
- crawlee/_service_locator.py +44 -24
- crawlee/_types.py +76 -17
- crawlee/_utils/raise_if_too_many_kwargs.py +12 -0
- crawlee/_utils/sitemap.py +3 -1
- crawlee/_utils/system.py +3 -3
- crawlee/browsers/_playwright_browser_controller.py +20 -14
- crawlee/configuration.py +1 -1
- crawlee/crawlers/_abstract_http/_abstract_http_crawler.py +3 -1
- crawlee/crawlers/_abstract_http/_abstract_http_parser.py +1 -1
- crawlee/crawlers/_abstract_http/_http_crawling_context.py +1 -1
- crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler.py +6 -2
- crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler_statistics.py +1 -1
- crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawling_context.py +2 -1
- crawlee/crawlers/_adaptive_playwright/_rendering_type_predictor.py +1 -1
- crawlee/crawlers/_basic/_basic_crawler.py +107 -27
- crawlee/crawlers/_basic/_logging_utils.py +5 -1
- crawlee/crawlers/_playwright/_playwright_crawler.py +6 -1
- crawlee/events/_types.py +6 -6
- crawlee/fingerprint_suite/_fingerprint_generator.py +3 -0
- crawlee/fingerprint_suite/_types.py +2 -2
- crawlee/project_template/{{cookiecutter.project_name}}/pyproject.toml +2 -2
- crawlee/project_template/{{cookiecutter.project_name}}/requirements.txt +3 -0
- crawlee/request_loaders/_request_list.py +1 -1
- crawlee/request_loaders/_request_loader.py +5 -1
- crawlee/request_loaders/_sitemap_request_loader.py +228 -48
- crawlee/sessions/_models.py +2 -2
- crawlee/statistics/_models.py +1 -1
- crawlee/storage_clients/__init__.py +12 -0
- crawlee/storage_clients/_base/_storage_client.py +13 -0
- crawlee/storage_clients/_file_system/_dataset_client.py +27 -25
- crawlee/storage_clients/_file_system/_key_value_store_client.py +27 -23
- crawlee/storage_clients/_file_system/_request_queue_client.py +84 -98
- crawlee/storage_clients/_file_system/_storage_client.py +16 -3
- crawlee/storage_clients/_file_system/_utils.py +0 -0
- crawlee/storage_clients/_memory/_dataset_client.py +14 -2
- crawlee/storage_clients/_memory/_key_value_store_client.py +14 -2
- crawlee/storage_clients/_memory/_request_queue_client.py +43 -12
- crawlee/storage_clients/_memory/_storage_client.py +6 -3
- crawlee/storage_clients/_sql/__init__.py +6 -0
- crawlee/storage_clients/_sql/_client_mixin.py +385 -0
- crawlee/storage_clients/_sql/_dataset_client.py +310 -0
- crawlee/storage_clients/_sql/_db_models.py +269 -0
- crawlee/storage_clients/_sql/_key_value_store_client.py +299 -0
- crawlee/storage_clients/_sql/_request_queue_client.py +706 -0
- crawlee/storage_clients/_sql/_storage_client.py +282 -0
- crawlee/storage_clients/_sql/py.typed +0 -0
- crawlee/storage_clients/models.py +10 -10
- crawlee/storages/_base.py +3 -1
- crawlee/storages/_dataset.py +9 -2
- crawlee/storages/_key_value_store.py +9 -2
- crawlee/storages/_request_queue.py +7 -2
- crawlee/storages/_storage_instance_manager.py +126 -72
- {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1.dist-info}/METADATA +12 -5
- {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1.dist-info}/RECORD +59 -49
- {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1.dist-info}/WHEEL +0 -0
- {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1.dist-info}/entry_points.txt +0 -0
- {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,21 +1,64 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from collections
|
|
4
|
-
from
|
|
3
|
+
from collections import defaultdict
|
|
4
|
+
from collections.abc import Coroutine, Hashable
|
|
5
|
+
from dataclasses import dataclass, field
|
|
6
|
+
from typing import TYPE_CHECKING, TypeVar
|
|
5
7
|
|
|
8
|
+
from crawlee._utils.raise_if_too_many_kwargs import raise_if_too_many_kwargs
|
|
6
9
|
from crawlee.storage_clients._base import DatasetClient, KeyValueStoreClient, RequestQueueClient
|
|
7
10
|
|
|
8
|
-
from ._base import Storage
|
|
9
|
-
|
|
10
11
|
if TYPE_CHECKING:
|
|
11
|
-
from
|
|
12
|
+
from ._base import Storage
|
|
12
13
|
|
|
13
14
|
T = TypeVar('T', bound='Storage')
|
|
14
15
|
|
|
15
|
-
StorageClientType = DatasetClient | KeyValueStoreClient | RequestQueueClient
|
|
16
|
-
"""Type alias for the storage client types."""
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
@dataclass
|
|
18
|
+
class _StorageCache:
|
|
19
|
+
"""Cache for storage instances."""
|
|
20
|
+
|
|
21
|
+
by_id: defaultdict[type[Storage], defaultdict[str, defaultdict[Hashable, Storage]]] = field(
|
|
22
|
+
default_factory=lambda: defaultdict(lambda: defaultdict(lambda: defaultdict()))
|
|
23
|
+
)
|
|
24
|
+
"""Cache for storage instances by ID. Example: by_id[Dataset]['some_id']['some_additional_cache_key']."""
|
|
25
|
+
|
|
26
|
+
by_name: defaultdict[type[Storage], defaultdict[str, defaultdict[Hashable, Storage]]] = field(
|
|
27
|
+
default_factory=lambda: defaultdict(lambda: defaultdict(lambda: defaultdict()))
|
|
28
|
+
)
|
|
29
|
+
"""Cache for storage instances by name. Example: by_name[Dataset]['some_name']['some_additional_cache_key']"""
|
|
30
|
+
|
|
31
|
+
by_alias: defaultdict[type[Storage], defaultdict[str, defaultdict[Hashable, Storage]]] = field(
|
|
32
|
+
default_factory=lambda: defaultdict(lambda: defaultdict(lambda: defaultdict()))
|
|
33
|
+
)
|
|
34
|
+
"""Cache for storage instances by alias. Example: by_alias[Dataset]['some_alias']['some_additional_cache_key']"""
|
|
35
|
+
|
|
36
|
+
def remove_from_cache(self, storage_instance: Storage) -> None:
|
|
37
|
+
"""Remove a storage instance from the cache.
|
|
38
|
+
|
|
39
|
+
Args:
|
|
40
|
+
storage_instance: The storage instance to remove.
|
|
41
|
+
"""
|
|
42
|
+
storage_type = type(storage_instance)
|
|
43
|
+
|
|
44
|
+
# Remove from ID cache
|
|
45
|
+
for additional_key in self.by_id[storage_type][storage_instance.id]:
|
|
46
|
+
del self.by_id[storage_type][storage_instance.id][additional_key]
|
|
47
|
+
break
|
|
48
|
+
|
|
49
|
+
# Remove from name cache or alias cache. It can never be in both.
|
|
50
|
+
if storage_instance.name is not None:
|
|
51
|
+
for additional_key in self.by_name[storage_type][storage_instance.name]:
|
|
52
|
+
del self.by_name[storage_type][storage_instance.name][additional_key]
|
|
53
|
+
break
|
|
54
|
+
else:
|
|
55
|
+
for alias_key in self.by_alias[storage_type]:
|
|
56
|
+
for additional_key in self.by_alias[storage_type][alias_key]:
|
|
57
|
+
del self.by_alias[storage_type][alias_key][additional_key]
|
|
58
|
+
break
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
ClientOpenerCoro = Coroutine[None, None, DatasetClient | KeyValueStoreClient | RequestQueueClient]
|
|
19
62
|
"""Type alias for the client opener function."""
|
|
20
63
|
|
|
21
64
|
|
|
@@ -26,15 +69,11 @@ class StorageInstanceManager:
|
|
|
26
69
|
and provides a unified interface for opening and managing storage instances.
|
|
27
70
|
"""
|
|
28
71
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"""Cache for storage instances by ID, separated by storage type."""
|
|
32
|
-
|
|
33
|
-
self._cache_by_name = dict[type[Storage], dict[str, Storage]]()
|
|
34
|
-
"""Cache for storage instances by name, separated by storage type."""
|
|
72
|
+
_DEFAULT_STORAGE_ALIAS = '__default__'
|
|
73
|
+
"""Reserved alias for default unnamed storage."""
|
|
35
74
|
|
|
36
|
-
|
|
37
|
-
|
|
75
|
+
def __init__(self) -> None:
|
|
76
|
+
self._cache: _StorageCache = _StorageCache()
|
|
38
77
|
|
|
39
78
|
async def open_storage_instance(
|
|
40
79
|
self,
|
|
@@ -42,66 +81,98 @@ class StorageInstanceManager:
|
|
|
42
81
|
*,
|
|
43
82
|
id: str | None,
|
|
44
83
|
name: str | None,
|
|
45
|
-
|
|
46
|
-
|
|
84
|
+
alias: str | None,
|
|
85
|
+
client_opener_coro: ClientOpenerCoro,
|
|
86
|
+
storage_client_cache_key: Hashable = '',
|
|
47
87
|
) -> T:
|
|
48
88
|
"""Open a storage instance with caching support.
|
|
49
89
|
|
|
50
90
|
Args:
|
|
51
91
|
cls: The storage class to instantiate.
|
|
52
92
|
id: Storage ID.
|
|
53
|
-
name: Storage name.
|
|
54
|
-
|
|
55
|
-
|
|
93
|
+
name: Storage name. (global scope, persists across runs).
|
|
94
|
+
alias: Storage alias (run scope, creates unnamed storage).
|
|
95
|
+
client_opener_coro: Coroutine to open the storage client when storage instance not found in cache.
|
|
96
|
+
storage_client_cache_key: Additional optional key from storage client to differentiate cache entries.
|
|
56
97
|
|
|
57
98
|
Returns:
|
|
58
99
|
The storage instance.
|
|
59
100
|
|
|
60
101
|
Raises:
|
|
61
|
-
ValueError: If
|
|
102
|
+
ValueError: If multiple parameters out of `id`, `name`, and `alias` are specified.
|
|
62
103
|
"""
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
104
|
+
try:
|
|
105
|
+
if name == self._DEFAULT_STORAGE_ALIAS:
|
|
106
|
+
raise ValueError(
|
|
107
|
+
f'Storage name cannot be "{self._DEFAULT_STORAGE_ALIAS}" as it is reserved for default alias.'
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
# Validate input parameters.
|
|
111
|
+
raise_if_too_many_kwargs(id=id, name=name, alias=alias)
|
|
112
|
+
|
|
113
|
+
# Auto-set alias='default' when no parameters are specified.
|
|
114
|
+
# Default unnamed storage is equal to alias=default unnamed storage.
|
|
115
|
+
if not any([name, alias, id]):
|
|
116
|
+
alias = self._DEFAULT_STORAGE_ALIAS
|
|
117
|
+
|
|
118
|
+
# Check cache
|
|
119
|
+
if id is not None and (cached_instance := self._cache.by_id[cls][id].get(storage_client_cache_key)):
|
|
75
120
|
if isinstance(cached_instance, cls):
|
|
76
121
|
return cached_instance
|
|
122
|
+
raise RuntimeError('Cached instance type mismatch.')
|
|
77
123
|
|
|
78
|
-
|
|
79
|
-
type_cache_by_name = self._cache_by_name.get(cls, {})
|
|
80
|
-
if name in type_cache_by_name:
|
|
81
|
-
cached_instance = type_cache_by_name[name]
|
|
124
|
+
if name is not None and (cached_instance := self._cache.by_name[cls][name].get(storage_client_cache_key)):
|
|
82
125
|
if isinstance(cached_instance, cls):
|
|
83
126
|
return cached_instance
|
|
127
|
+
raise RuntimeError('Cached instance type mismatch.')
|
|
128
|
+
|
|
129
|
+
if alias is not None and (
|
|
130
|
+
cached_instance := self._cache.by_alias[cls][alias].get(storage_client_cache_key)
|
|
131
|
+
):
|
|
132
|
+
if isinstance(cached_instance, cls):
|
|
133
|
+
return cached_instance
|
|
134
|
+
raise RuntimeError('Cached instance type mismatch.')
|
|
135
|
+
|
|
136
|
+
# Check for conflicts between named and alias storages
|
|
137
|
+
if alias and (self._cache.by_name[cls][alias].get(storage_client_cache_key)):
|
|
138
|
+
raise ValueError(
|
|
139
|
+
f'Cannot create alias storage "{alias}" because a named storage with the same name already exists. '
|
|
140
|
+
f'Use a different alias or drop the existing named storage first.'
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
if name and (self._cache.by_alias[cls][name].get(storage_client_cache_key)):
|
|
144
|
+
raise ValueError(
|
|
145
|
+
f'Cannot create named storage "{name}" because an alias storage with the same name already exists. '
|
|
146
|
+
f'Use a different name or drop the existing alias storage first.'
|
|
147
|
+
)
|
|
84
148
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
149
|
+
# Create new instance
|
|
150
|
+
client: KeyValueStoreClient | DatasetClient | RequestQueueClient
|
|
151
|
+
client = await client_opener_coro
|
|
88
152
|
|
|
89
|
-
|
|
90
|
-
instance_name = getattr(instance, 'name', None)
|
|
153
|
+
metadata = await client.get_metadata()
|
|
91
154
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
type_cache_by_name = self._cache_by_name.setdefault(cls, {})
|
|
155
|
+
instance = cls(client, metadata.id, metadata.name) # type: ignore[call-arg]
|
|
156
|
+
instance_name = getattr(instance, 'name', None)
|
|
95
157
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
158
|
+
# Cache the instance.
|
|
159
|
+
# Always cache by id.
|
|
160
|
+
self._cache.by_id[cls][instance.id][storage_client_cache_key] = instance
|
|
99
161
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
162
|
+
# Cache named storage.
|
|
163
|
+
if instance_name is not None:
|
|
164
|
+
self._cache.by_name[cls][instance_name][storage_client_cache_key] = instance
|
|
103
165
|
|
|
104
|
-
|
|
166
|
+
# Cache unnamed storage.
|
|
167
|
+
if alias is not None:
|
|
168
|
+
self._cache.by_alias[cls][alias][storage_client_cache_key] = instance
|
|
169
|
+
|
|
170
|
+
return instance
|
|
171
|
+
|
|
172
|
+
finally:
|
|
173
|
+
# Make sure the client opener is closed.
|
|
174
|
+
# If it was awaited, then closing is no operation, if it was not awaited, this is the cleanup.
|
|
175
|
+
client_opener_coro.close()
|
|
105
176
|
|
|
106
177
|
def remove_from_cache(self, storage_instance: Storage) -> None:
|
|
107
178
|
"""Remove a storage instance from the cache.
|
|
@@ -109,25 +180,8 @@ class StorageInstanceManager:
|
|
|
109
180
|
Args:
|
|
110
181
|
storage_instance: The storage instance to remove.
|
|
111
182
|
"""
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
# Remove from ID cache
|
|
115
|
-
type_cache_by_id = self._cache_by_id.get(storage_type, {})
|
|
116
|
-
if storage_instance.id in type_cache_by_id:
|
|
117
|
-
del type_cache_by_id[storage_instance.id]
|
|
118
|
-
|
|
119
|
-
# Remove from name cache
|
|
120
|
-
if storage_instance.name is not None:
|
|
121
|
-
type_cache_by_name = self._cache_by_name.get(storage_type, {})
|
|
122
|
-
if storage_instance.name in type_cache_by_name:
|
|
123
|
-
del type_cache_by_name[storage_instance.name]
|
|
124
|
-
|
|
125
|
-
# Remove from default instances
|
|
126
|
-
if storage_type in self._default_instances and self._default_instances[storage_type] is storage_instance:
|
|
127
|
-
del self._default_instances[storage_type]
|
|
183
|
+
self._cache.remove_from_cache(storage_instance)
|
|
128
184
|
|
|
129
185
|
def clear_cache(self) -> None:
|
|
130
186
|
"""Clear all cached storage instances."""
|
|
131
|
-
self.
|
|
132
|
-
self._cache_by_name.clear()
|
|
133
|
-
self._default_instances.clear()
|
|
187
|
+
self._cache = _StorageCache()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crawlee
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: Crawlee for Python
|
|
5
5
|
Project-URL: Apify Homepage, https://apify.com
|
|
6
6
|
Project-URL: Changelog, https://crawlee.dev/python/docs/changelog
|
|
@@ -227,12 +227,12 @@ Classifier: Topic :: Software Development :: Libraries
|
|
|
227
227
|
Requires-Python: >=3.10
|
|
228
228
|
Requires-Dist: cachetools>=5.5.0
|
|
229
229
|
Requires-Dist: colorama>=0.4.0
|
|
230
|
-
Requires-Dist: impit>=0.
|
|
230
|
+
Requires-Dist: impit>=0.6.1
|
|
231
231
|
Requires-Dist: more-itertools>=10.2.0
|
|
232
232
|
Requires-Dist: protego>=0.5.0
|
|
233
233
|
Requires-Dist: psutil>=6.0.0
|
|
234
|
-
Requires-Dist: pydantic!=2.10.0,!=2.10.1,!=2.10.2,>=2.8.0
|
|
235
234
|
Requires-Dist: pydantic-settings!=2.7.0,!=2.7.1,!=2.8.0,>=2.2.0
|
|
235
|
+
Requires-Dist: pydantic>=2.11.0
|
|
236
236
|
Requires-Dist: pyee>=9.0.0
|
|
237
237
|
Requires-Dist: tldextract>=5.1.0
|
|
238
238
|
Requires-Dist: typing-extensions>=4.1.0
|
|
@@ -244,7 +244,9 @@ Requires-Dist: jaro-winkler>=2.0.3; extra == 'adaptive-crawler'
|
|
|
244
244
|
Requires-Dist: playwright>=1.27.0; extra == 'adaptive-crawler'
|
|
245
245
|
Requires-Dist: scikit-learn>=1.6.0; extra == 'adaptive-crawler'
|
|
246
246
|
Provides-Extra: all
|
|
247
|
+
Requires-Dist: aiosqlite>=0.21.0; extra == 'all'
|
|
247
248
|
Requires-Dist: apify-fingerprint-datapoints>=0.0.2; extra == 'all'
|
|
249
|
+
Requires-Dist: asyncpg>=0.24.0; extra == 'all'
|
|
248
250
|
Requires-Dist: beautifulsoup4[lxml]>=4.12.0; extra == 'all'
|
|
249
251
|
Requires-Dist: browserforge>=1.2.3; extra == 'all'
|
|
250
252
|
Requires-Dist: cookiecutter>=2.6.0; extra == 'all'
|
|
@@ -263,6 +265,7 @@ Requires-Dist: parsel>=1.10.0; extra == 'all'
|
|
|
263
265
|
Requires-Dist: playwright>=1.27.0; extra == 'all'
|
|
264
266
|
Requires-Dist: rich>=13.9.0; extra == 'all'
|
|
265
267
|
Requires-Dist: scikit-learn>=1.6.0; extra == 'all'
|
|
268
|
+
Requires-Dist: sqlalchemy[asyncio]<3.0.0,>=2.0.0; extra == 'all'
|
|
266
269
|
Requires-Dist: typer>=0.12.0; extra == 'all'
|
|
267
270
|
Requires-Dist: wrapt>=1.17.0; extra == 'all'
|
|
268
271
|
Provides-Extra: beautifulsoup
|
|
@@ -293,6 +296,12 @@ Provides-Extra: playwright
|
|
|
293
296
|
Requires-Dist: apify-fingerprint-datapoints>=0.0.2; extra == 'playwright'
|
|
294
297
|
Requires-Dist: browserforge>=1.2.3; extra == 'playwright'
|
|
295
298
|
Requires-Dist: playwright>=1.27.0; extra == 'playwright'
|
|
299
|
+
Provides-Extra: sql-postgres
|
|
300
|
+
Requires-Dist: asyncpg>=0.24.0; extra == 'sql-postgres'
|
|
301
|
+
Requires-Dist: sqlalchemy[asyncio]<3.0.0,>=2.0.0; extra == 'sql-postgres'
|
|
302
|
+
Provides-Extra: sql-sqlite
|
|
303
|
+
Requires-Dist: aiosqlite>=0.21.0; extra == 'sql-sqlite'
|
|
304
|
+
Requires-Dist: sqlalchemy[asyncio]<3.0.0,>=2.0.0; extra == 'sql-sqlite'
|
|
296
305
|
Description-Content-Type: text/markdown
|
|
297
306
|
|
|
298
307
|
<h1 align="center">
|
|
@@ -327,8 +336,6 @@ Description-Content-Type: text/markdown
|
|
|
327
336
|
|
|
328
337
|
Crawlee covers your crawling and scraping end-to-end and **helps you build reliable scrapers. Fast.**
|
|
329
338
|
|
|
330
|
-
> 🚀 Crawlee for Python is open to early adopters!
|
|
331
|
-
|
|
332
339
|
Your crawlers will appear almost human-like and fly under the radar of modern bot protections even with the default configuration. Crawlee gives you the tools to crawl the web for links, scrape data and persistently store it in machine-readable formats, without having to worry about the technical details. And thanks to rich configuration options, you can tweak almost any aspect of Crawlee to suit your project's needs if the default settings don't cut it.
|
|
333
340
|
|
|
334
341
|
> 👉 **View full documentation, guides and examples on the [Crawlee project website](https://crawlee.dev/python/)** 👈
|
|
@@ -3,10 +3,10 @@ crawlee/_browserforge_workaround.py,sha256=FYQaqpqfZGYkx-A8evF9nsHnj4KK4IMtjNq3L
|
|
|
3
3
|
crawlee/_cli.py,sha256=czuEsGD8QYEiq5gtMcBxrL08hQ5OJQQkMVhAr1pvDaQ,10353
|
|
4
4
|
crawlee/_consts.py,sha256=RQ96gx7V-WPH91cVsMUz76X5UZUNDNhCudtlyGkxFVk,133
|
|
5
5
|
crawlee/_log_config.py,sha256=VyxoEfWCq_9fyicmmJbjiZ5KC91onMcAtX2L4oKX4m4,5999
|
|
6
|
-
crawlee/_request.py,sha256=
|
|
7
|
-
crawlee/_service_locator.py,sha256=
|
|
8
|
-
crawlee/_types.py,sha256=
|
|
9
|
-
crawlee/configuration.py,sha256=
|
|
6
|
+
crawlee/_request.py,sha256=8bAbftf4loxnVPY3TVXZIUyRuwrGaoibqdwQULNHMzs,15948
|
|
7
|
+
crawlee/_service_locator.py,sha256=uO1eml4YeMs0xqlFN2d1LvOAroAdNJYbb2Mt15V-qzs,5066
|
|
8
|
+
crawlee/_types.py,sha256=qi2E-gWXINMFn_3nhRMxuB3QfndRpFf2urIpz6Hab9g,28990
|
|
9
|
+
crawlee/configuration.py,sha256=KG_XDkPe1VaYfaIu41nICvMjfHbDKM0h4-YTi3DkyRY,7917
|
|
10
10
|
crawlee/errors.py,sha256=RhFNA_uT615nVBHf9TylpX5YWwtDuHUUEV8LPT4CYa4,3878
|
|
11
11
|
crawlee/proxy_configuration.py,sha256=rqf67yerXvLvraBaAHW04nvf5ECze3wMQbK7LlqXucM,10386
|
|
12
12
|
crawlee/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -15,7 +15,7 @@ crawlee/_autoscaling/__init__.py,sha256=t6Z44gU488C0UmkBCTtwsgAR8iqJcv2g4ZlC4NYh
|
|
|
15
15
|
crawlee/_autoscaling/_types.py,sha256=xnrRHXYOVn7GwELLVHi_y7B-Ic7u3hPkYl3P-LT3Fhk,5453
|
|
16
16
|
crawlee/_autoscaling/autoscaled_pool.py,sha256=Bcu2jDgK2SYMnZN5xfjs8Oxti0ZxrktjydWv3J0Hz48,12214
|
|
17
17
|
crawlee/_autoscaling/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
-
crawlee/_autoscaling/snapshotter.py,sha256=
|
|
18
|
+
crawlee/_autoscaling/snapshotter.py,sha256=DjP-D_M4qJ2lg_j6NhpWIzAUNDFYZf0KYIJPY-3qlA8,17744
|
|
19
19
|
crawlee/_autoscaling/system_status.py,sha256=oxxEuFXAjJ5gyzT6r4MEnevRIIHoiH5YGuZnAyFtVXA,9444
|
|
20
20
|
crawlee/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
21
|
crawlee/_utils/blocked.py,sha256=sxN99AouFXMoe6uG1EvCTCmKMGk73DBMUk9nOkWK86I,863
|
|
@@ -28,12 +28,13 @@ crawlee/_utils/file.py,sha256=sGcGsV9zOJ-fKsMuYV_xwTRkOqoEiHVCqPpbprho5t4,5282
|
|
|
28
28
|
crawlee/_utils/globs.py,sha256=SGX2J35Kqw7yZnSS5c4mLz9UD8c77PF0IoCgXQM5uiw,5310
|
|
29
29
|
crawlee/_utils/html_to_text.py,sha256=1iykT-OXd2xXNy7isHVWHqPxe23X82CGQBHIfbZbZkY,902
|
|
30
30
|
crawlee/_utils/models.py,sha256=EqM50Uc-xvxKlLCLA2lPpRduzfKvT0z_-Q-UWG8aTRQ,1955
|
|
31
|
+
crawlee/_utils/raise_if_too_many_kwargs.py,sha256=J2gaUJmsmNwexohuehXw_mdYKv-eWiui6WUHFsQ3qTQ,597
|
|
31
32
|
crawlee/_utils/recoverable_state.py,sha256=_88kOEDDRg1lr6RWs7NNDku6NNRlg7zuzUOoUxwMwGk,7734
|
|
32
33
|
crawlee/_utils/recurring_task.py,sha256=sA0n4Cf9pYLQyBD9PZ7QbR6m6KphlbkACaT2GdbLfs4,1757
|
|
33
34
|
crawlee/_utils/requests.py,sha256=yOjai7bHR9_duPJ0ck-L76y9AnKZr49JBfSOQv9kvJc,5048
|
|
34
35
|
crawlee/_utils/robots.py,sha256=k3Yi2OfKT0H04MPkP-OBGGV7fEePgOqb60awltjMYWY,4346
|
|
35
|
-
crawlee/_utils/sitemap.py,sha256=
|
|
36
|
-
crawlee/_utils/system.py,sha256=
|
|
36
|
+
crawlee/_utils/sitemap.py,sha256=9FtZRG87i5YZJhJa2m5CexSpm7RpvsSAgG60ih4BQc0,16636
|
|
37
|
+
crawlee/_utils/system.py,sha256=tA8AP__9vsJ9OTLTnAYAKkxc8U5-IEna0N_hqYBybUo,4294
|
|
37
38
|
crawlee/_utils/time.py,sha256=WK17P939r65dLz2rWvL59OEJoxgzdinw-ND9WuG4DuU,2353
|
|
38
39
|
crawlee/_utils/try_import.py,sha256=QI_58ifc2l0Rxehzu6xcofQrRAVeLzZuBTTTHttLl8s,1310
|
|
39
40
|
crawlee/_utils/urls.py,sha256=NN27TA6KMU5V_j5TCZ4o33UIXw4pB9a-wGlmDQtYT8E,1294
|
|
@@ -44,7 +45,7 @@ crawlee/browsers/_browser_controller.py,sha256=-g0pB5Nx5q67eMZVka49x-HMfQqJYoI6k
|
|
|
44
45
|
crawlee/browsers/_browser_plugin.py,sha256=Wuojop___8ZO9eDoMs4JFmwMAFe5mZaTl0-Vz1PjkD8,3057
|
|
45
46
|
crawlee/browsers/_browser_pool.py,sha256=2pT4m_g0DfopjTHYXb-piN6GqxvkayOeb4gmOtn1QNM,15634
|
|
46
47
|
crawlee/browsers/_playwright_browser.py,sha256=1yXD6cXuLefZZGUG1m0CT38xXYSwIC7n95bJBdMOxbo,3820
|
|
47
|
-
crawlee/browsers/_playwright_browser_controller.py,sha256=
|
|
48
|
+
crawlee/browsers/_playwright_browser_controller.py,sha256=YaY19slRj8gIKrZy0M8rzF_zy2Z1Ym6d0S_vXcMX108,10215
|
|
48
49
|
crawlee/browsers/_playwright_browser_plugin.py,sha256=axZa_yZNCPHyM3Ijx9jW4CzzRXQTVzYAswcGAZHP3Hk,8106
|
|
49
50
|
crawlee/browsers/_types.py,sha256=eWgpoLMWu103hMQQTObkA01sVc_7hdPESl-TCyDMMV0,426
|
|
50
51
|
crawlee/browsers/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -52,22 +53,22 @@ crawlee/crawlers/__init__.py,sha256=9VmFahav3rjE-2Bxa5PAhBgkYXP0k5SSAEpdG2xMZ7c,
|
|
|
52
53
|
crawlee/crawlers/_types.py,sha256=xbGTJQirgz5wUbfr12afMR4q-_5AWP7ngF2e8K5P8l0,355
|
|
53
54
|
crawlee/crawlers/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
55
|
crawlee/crawlers/_abstract_http/__init__.py,sha256=QCjn8x7jpo8FwEeSRw10TVj_0La2v9mLEiQWdk2RoTw,273
|
|
55
|
-
crawlee/crawlers/_abstract_http/_abstract_http_crawler.py,sha256=
|
|
56
|
-
crawlee/crawlers/_abstract_http/_abstract_http_parser.py,sha256=
|
|
57
|
-
crawlee/crawlers/_abstract_http/_http_crawling_context.py,sha256=
|
|
56
|
+
crawlee/crawlers/_abstract_http/_abstract_http_crawler.py,sha256=ZG6A4DNGZYbOBXi0Th6K6CHDi2SqWO5VpxcnjypDO-A,11503
|
|
57
|
+
crawlee/crawlers/_abstract_http/_abstract_http_parser.py,sha256=Y5o_hiW_0mQAte5GFqkUxscwKEFpWrBYRsLKP1cfBwE,3521
|
|
58
|
+
crawlee/crawlers/_abstract_http/_http_crawling_context.py,sha256=Rno_uJ8ivmyRxFQv2MyY_z9B5WPHSEd5MAPz31_1ZIo,2179
|
|
58
59
|
crawlee/crawlers/_abstract_http/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
60
|
crawlee/crawlers/_adaptive_playwright/__init__.py,sha256=LREq9WR9BKsE8S8lSsEhlCoNjQaLhlJ9yo8y_6a8o4c,1072
|
|
60
|
-
crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler.py,sha256=
|
|
61
|
-
crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler_statistics.py,sha256=
|
|
62
|
-
crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawling_context.py,sha256=
|
|
63
|
-
crawlee/crawlers/_adaptive_playwright/_rendering_type_predictor.py,sha256=
|
|
61
|
+
crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler.py,sha256=j-7lm5vTI_14JrEQQDUFQ3iWnidTaca376UbSZ-uiTk,21731
|
|
62
|
+
crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler_statistics.py,sha256=_At8T8S3JLGPA-1AeCFGrpE-FuCDW9sazrXt9U0tK6U,1048
|
|
63
|
+
crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawling_context.py,sha256=9FlHIUC05IzUhJsVldQvpnDnj1jk8GJpqC98mPLN_fw,10431
|
|
64
|
+
crawlee/crawlers/_adaptive_playwright/_rendering_type_predictor.py,sha256=TM4mkbIN_059jUyCG8Z6XAb_FBLClIKw7z-aDvjon2I,10834
|
|
64
65
|
crawlee/crawlers/_adaptive_playwright/_result_comparator.py,sha256=NAfw5VKzTnkvARtLr_zrZj6UGeMp05Voc6Oi8oPxU3w,1747
|
|
65
66
|
crawlee/crawlers/_adaptive_playwright/_utils.py,sha256=EUYVz5i2YkLpL_gbVRp9BAD5u6w1xJ_AFzc_qB9bdDQ,1102
|
|
66
67
|
crawlee/crawlers/_basic/__init__.py,sha256=LPln8SiBBXSMqrApiFUfpqz3hvqxN5HUa1cHQXMVKgU,280
|
|
67
|
-
crawlee/crawlers/_basic/_basic_crawler.py,sha256=
|
|
68
|
+
crawlee/crawlers/_basic/_basic_crawler.py,sha256=7qnDAO3t9qIn_RF2dCYgqTzr7rTg3namul3o3dsyES4,72690
|
|
68
69
|
crawlee/crawlers/_basic/_basic_crawling_context.py,sha256=fjxm2RQXMDkDlWu38dQ3xn5rrGUOhJXkXiqkgbFJFk4,155
|
|
69
70
|
crawlee/crawlers/_basic/_context_pipeline.py,sha256=vM8EEvnCoguERjRV3oyrxUq2Ln2F9DzY7P5dAEiuMHo,5869
|
|
70
|
-
crawlee/crawlers/_basic/_logging_utils.py,sha256=
|
|
71
|
+
crawlee/crawlers/_basic/_logging_utils.py,sha256=jp5mEwSq5a_BgzUhNPJ9WrIDcoIeYGbeHstcRqCcP0s,3093
|
|
71
72
|
crawlee/crawlers/_basic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
72
73
|
crawlee/crawlers/_beautifulsoup/__init__.py,sha256=7pL273ashA7yYDrH6nokYZ7SAMUAezilGIWdfThi_Co,822
|
|
73
74
|
crawlee/crawlers/_beautifulsoup/_beautifulsoup_crawler.py,sha256=oLnRN2AMNSKOZDFWMg1jLhRp7_IShkeEwy1O_m1QLm8,3058
|
|
@@ -84,7 +85,7 @@ crawlee/crawlers/_parsel/_parsel_crawling_context.py,sha256=sZB26RcRLjSoD15myEOM
|
|
|
84
85
|
crawlee/crawlers/_parsel/_parsel_parser.py,sha256=yWBfuXUHMriK4DRnyrXTQoGeqX5WV9bOEkBp_g0YCvQ,1540
|
|
85
86
|
crawlee/crawlers/_parsel/_utils.py,sha256=MbRwx-cdjlq1zLzFYf64M3spOGQ6yxum4FvP0sdqA_Q,2693
|
|
86
87
|
crawlee/crawlers/_playwright/__init__.py,sha256=6Cahe6VEF82o8CYiP8Cmp58Cmb6Rb8uMeyy7wnwe5ms,837
|
|
87
|
-
crawlee/crawlers/_playwright/_playwright_crawler.py,sha256=
|
|
88
|
+
crawlee/crawlers/_playwright/_playwright_crawler.py,sha256=YI_EvJApfabuBY5TZq7OdBI-45ASiDE2GfsIC4qpd8A,23756
|
|
88
89
|
crawlee/crawlers/_playwright/_playwright_crawling_context.py,sha256=Oi0tMBXHaEDlFjqG01DzgB7Ck52bjVjz-X__eMioxas,1249
|
|
89
90
|
crawlee/crawlers/_playwright/_playwright_http_client.py,sha256=Nfm69dqX85k68jN1p3ljZWbn8egqDWPIPRykXyXsoQs,3977
|
|
90
91
|
crawlee/crawlers/_playwright/_playwright_pre_nav_crawling_context.py,sha256=fEI2laWhmJdWiGoMF5JBLBsim9NtENfagZt6FFd2Rgo,1387
|
|
@@ -93,14 +94,14 @@ crawlee/crawlers/_playwright/_utils.py,sha256=FQ_-LYo7DGHsNHRrTtWt3mC06VzQvQ2wkG
|
|
|
93
94
|
crawlee/events/__init__.py,sha256=YMgOXKI0LsXfImKQy06PZ2Vdjy-uD_-acioagHft1do,577
|
|
94
95
|
crawlee/events/_event_manager.py,sha256=kP5_zO2JmFReWnCZqg_uSS1kSV4reem2XN3oRY-SGcI,11428
|
|
95
96
|
crawlee/events/_local_event_manager.py,sha256=CSiMJ6a_BwX0PPwtffEOtHm21dmALJz1zifo3AuMAk8,3708
|
|
96
|
-
crawlee/events/_types.py,sha256=
|
|
97
|
+
crawlee/events/_types.py,sha256=MKsI014OOKKhjPJRrvWYrezIDGoLjGGhWXrkqYw26Ns,3313
|
|
97
98
|
crawlee/events/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
98
99
|
crawlee/fingerprint_suite/__init__.py,sha256=noY9qw80B0seZGj_B3bBvCDIDk2YWOSN-llIssLdY5c,550
|
|
99
100
|
crawlee/fingerprint_suite/_browserforge_adapter.py,sha256=bsGebBjjHawM-FiINgqkZW5I9a9Fnv3SGwdKgaVWiRI,11934
|
|
100
101
|
crawlee/fingerprint_suite/_consts.py,sha256=SgykWfxD-pYvOpRp_ooQ4ZTPS0sQ2b3wDyyCjwU_8-w,258
|
|
101
|
-
crawlee/fingerprint_suite/_fingerprint_generator.py,sha256=
|
|
102
|
+
crawlee/fingerprint_suite/_fingerprint_generator.py,sha256=Di4sDk1qioiFGx4ZcoVyHhtFHF8JXDhxQt8ZPug99k8,730
|
|
102
103
|
crawlee/fingerprint_suite/_header_generator.py,sha256=GMveKjVRsfyt_iq0Cvif98D7pFiPryPD0-zQ7efE8j8,3491
|
|
103
|
-
crawlee/fingerprint_suite/_types.py,sha256=
|
|
104
|
+
crawlee/fingerprint_suite/_types.py,sha256=7n2LJTiL2XvL-H4G-Y26Uoq5-ZXzH07Dq4o50uhMa-w,2423
|
|
104
105
|
crawlee/fingerprint_suite/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
106
|
crawlee/http_clients/__init__.py,sha256=OQFhR9F8BrdlIaS5aRS7hvgQ0tKJPQ8FiyYPualyQcU,890
|
|
106
107
|
crawlee/http_clients/_base.py,sha256=kbIAVTWLBJboN3zRolAla-2g7mvK-3iWKc5YmIif0FY,7377
|
|
@@ -125,59 +126,68 @@ crawlee/project_template/templates/routes_playwright_camoufox.py,sha256=XtXWbPZ4
|
|
|
125
126
|
crawlee/project_template/{{cookiecutter.project_name}}/.dockerignore,sha256=PCDXvENlrMmYleuQULduBiw8ipXmE_iYJtCmeZVuz1I,6
|
|
126
127
|
crawlee/project_template/{{cookiecutter.project_name}}/Dockerfile,sha256=NRSdHgEnCjBWE0lU3y-qHNEUJg_OH3zhoo0fPzkIs58,4138
|
|
127
128
|
crawlee/project_template/{{cookiecutter.project_name}}/README.md,sha256=kEwhjWKqnSbg3gtGsuEiqWFGoqMdf4W7TZ0Lu0omwHk,1753
|
|
128
|
-
crawlee/project_template/{{cookiecutter.project_name}}/pyproject.toml,sha256=
|
|
129
|
-
crawlee/project_template/{{cookiecutter.project_name}}/requirements.txt,sha256=
|
|
129
|
+
crawlee/project_template/{{cookiecutter.project_name}}/pyproject.toml,sha256=rfzarAQB8H93clog9xnqVThCIR7ltKqasMHX0-9PIMw,970
|
|
130
|
+
crawlee/project_template/{{cookiecutter.project_name}}/requirements.txt,sha256=HTiM50HxLguBgqKKLFR9DjsfrWgo13n8cAAJ9xhEmw8,460
|
|
130
131
|
crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
131
132
|
crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/__main__.py,sha256=7YQVjE3HdCnoU055kLcKUcqXvbp3C2rtAY2TSJaItts,867
|
|
132
133
|
crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/main.py,sha256=mb3Wo_FpXGdIzWABJ0Y6CE-eXKxqSM_k__tnYYM1rF4,55
|
|
133
134
|
crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_name}}/routes.py,sha256=rF-o4w_vdBgYC2qMNmyxUV9CqrGXdk6PJgKbeNY5xOM,57
|
|
134
135
|
crawlee/request_loaders/__init__.py,sha256=W3Mh5uDeb7age5hUTcW2AEdKDCX7AY2aOux2t4gQH6U,353
|
|
135
|
-
crawlee/request_loaders/_request_list.py,sha256=
|
|
136
|
-
crawlee/request_loaders/_request_loader.py,sha256=
|
|
136
|
+
crawlee/request_loaders/_request_list.py,sha256=SIalHBMuFanE5GLnFocI0QCppWUiJQjr-Vm4MM-eCOI,8873
|
|
137
|
+
crawlee/request_loaders/_request_loader.py,sha256=2Bg-AWWkIV1W-Dwjqo91dPY8nmc7H3teQy7d6OSgliQ,3620
|
|
137
138
|
crawlee/request_loaders/_request_manager.py,sha256=qFizyJuV2meIb9iiPfuii7ciuERMrp4SldAufiH46dc,3000
|
|
138
139
|
crawlee/request_loaders/_request_manager_tandem.py,sha256=lv-s94KPsoQAqx1KaXFch96ejhO147uOflF3UK5ORTk,4058
|
|
139
|
-
crawlee/request_loaders/_sitemap_request_loader.py,sha256=
|
|
140
|
+
crawlee/request_loaders/_sitemap_request_loader.py,sha256=y5KQs5riT32WMdN3Awk2lKQNkYcXT3FYQ-mmbd31AJc,15201
|
|
140
141
|
crawlee/sessions/__init__.py,sha256=dJdelbL-6MK5sW4SMU4QrjFbb9kRZ9uRnN-VS3R5-8Y,190
|
|
141
142
|
crawlee/sessions/_cookies.py,sha256=ihYbmpXfCzClzXDT7M2wefB_3KVzcMUdIzTZo6uGk6Y,9356
|
|
142
|
-
crawlee/sessions/_models.py,sha256=
|
|
143
|
+
crawlee/sessions/_models.py,sha256=JMRQgDUP30XUdZ32isncHowOsXvK9jC_m9QYegbBI1E,2916
|
|
143
144
|
crawlee/sessions/_session.py,sha256=cMXVf6QjfGJDgdLUB4MhUP-zTm3pEDHRs-W5SBA4JFI,9638
|
|
144
145
|
crawlee/sessions/_session_pool.py,sha256=-cMODmTRAXuoYa9DoW0cSTxbPuauF5qXY9QJcX6hXTg,9630
|
|
145
146
|
crawlee/sessions/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
146
147
|
crawlee/statistics/__init__.py,sha256=lXAsHNkeRZQBffW1B7rERarivXIUJveNlcKTGOXQZY0,154
|
|
147
148
|
crawlee/statistics/_error_snapshotter.py,sha256=ChBBG0gIMWcSeyEzs3jQf3mSnHLZUHcD284wEDan1Js,3278
|
|
148
149
|
crawlee/statistics/_error_tracker.py,sha256=x9Yw1TuyEptjwgPPJ4gIom-0oVjawcNReQDsHH2nZ3w,8553
|
|
149
|
-
crawlee/statistics/_models.py,sha256=
|
|
150
|
+
crawlee/statistics/_models.py,sha256=SFWYpT3r1c4XugU8nrm0epTpcM5_0fS1mXi9fnbhGJ8,5237
|
|
150
151
|
crawlee/statistics/_statistics.py,sha256=fJr_du4CkVTz4_UgVToivAJKgA88PThE6IDBCW8RSTQ,12183
|
|
151
|
-
crawlee/storage_clients/__init__.py,sha256=
|
|
152
|
-
crawlee/storage_clients/models.py,sha256=
|
|
152
|
+
crawlee/storage_clients/__init__.py,sha256=RCnutWMOqs_kUQpzfLVT5jgpHGWakLv557c6UIYFQsA,754
|
|
153
|
+
crawlee/storage_clients/models.py,sha256=gfW_kpSCOBuoTBIW0N7tb3FUv7BgD3keZADS7pyT4_I,6586
|
|
153
154
|
crawlee/storage_clients/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
154
155
|
crawlee/storage_clients/_base/__init__.py,sha256=-f0VIaGjw7Oo6HAgEK9ABtmKnnSRwzkA3WUQZMX5w0w,307
|
|
155
156
|
crawlee/storage_clients/_base/_dataset_client.py,sha256=0JBiXVXZlPzd2o3r2uc_skl6aYEer2-wcvOv3ZgIQls,3049
|
|
156
157
|
crawlee/storage_clients/_base/_key_value_store_client.py,sha256=eTZae1pIINnbs__FLvwvX8jTraEKMjdZuA69IrwLzfk,3409
|
|
157
158
|
crawlee/storage_clients/_base/_request_queue_client.py,sha256=cgM4yk6xJwgfzP-xaN9ApqJn32sh0FrSEPIdxN7kujw,4926
|
|
158
|
-
crawlee/storage_clients/_base/_storage_client.py,sha256=
|
|
159
|
+
crawlee/storage_clients/_base/_storage_client.py,sha256=RvmKCV1U9_KxyG7n8xhClm2vwD2SKChWIiBLk6cuqw0,3523
|
|
159
160
|
crawlee/storage_clients/_base/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
160
161
|
crawlee/storage_clients/_file_system/__init__.py,sha256=w3twfwz5YeLYeu_70pNPBRINS2wXRvzOMvA1hUDYgf0,387
|
|
161
|
-
crawlee/storage_clients/_file_system/_dataset_client.py,sha256=
|
|
162
|
-
crawlee/storage_clients/_file_system/_key_value_store_client.py,sha256=
|
|
163
|
-
crawlee/storage_clients/_file_system/_request_queue_client.py,sha256=
|
|
164
|
-
crawlee/storage_clients/_file_system/_storage_client.py,sha256
|
|
162
|
+
crawlee/storage_clients/_file_system/_dataset_client.py,sha256=aklivbj6MsFOLiG9muHVBpOJ3vTgLK-xb_SOHVqHWeM,17748
|
|
163
|
+
crawlee/storage_clients/_file_system/_key_value_store_client.py,sha256=i3Jz7GEPoyi9DRz76TuKs4VMSzQL18rbGaF3voJG3JQ,18695
|
|
164
|
+
crawlee/storage_clients/_file_system/_request_queue_client.py,sha256=2NN9you6sqfRonThcdqrEeXtU0I7YVMkxiiKJvU4TKQ,32880
|
|
165
|
+
crawlee/storage_clients/_file_system/_storage_client.py,sha256=My63uc513kfUPe5X-PTYWBRe9xUGnkLqJN7IcsQd2yw,3293
|
|
166
|
+
crawlee/storage_clients/_file_system/_utils.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
165
167
|
crawlee/storage_clients/_file_system/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
166
168
|
crawlee/storage_clients/_memory/__init__.py,sha256=WHyBhckxdw2k0epkM_B3ymNASebNTOCU_NrvfzUAn14,355
|
|
167
|
-
crawlee/storage_clients/_memory/_dataset_client.py,sha256=
|
|
168
|
-
crawlee/storage_clients/_memory/_key_value_store_client.py,sha256=
|
|
169
|
-
crawlee/storage_clients/_memory/_request_queue_client.py,sha256=
|
|
170
|
-
crawlee/storage_clients/_memory/_storage_client.py,sha256=
|
|
169
|
+
crawlee/storage_clients/_memory/_dataset_client.py,sha256=3LW9rB4IDIggwL8299OHUEe_2Mz0DA30vdReGSO0dvc,8836
|
|
170
|
+
crawlee/storage_clients/_memory/_key_value_store_client.py,sha256=0u2y7Tl88dx3Lg0h6QA1nDA06VZiUZW3820JV8_OcUI,6487
|
|
171
|
+
crawlee/storage_clients/_memory/_request_queue_client.py,sha256=yYdv6r4O7x8JcQ2v-COit-9YyB79AxKvzOJkOCcMDaY,13110
|
|
172
|
+
crawlee/storage_clients/_memory/_storage_client.py,sha256=EyiH-MgM_6iBItjmy2SkWAdjVbviacnxr3la-yiGfIw,2724
|
|
171
173
|
crawlee/storage_clients/_memory/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
174
|
+
crawlee/storage_clients/_sql/__init__.py,sha256=X_fDMc6jn50gEBZ9QyUw54sjovYfFvE-dgXAdci6Y2M,312
|
|
175
|
+
crawlee/storage_clients/_sql/_client_mixin.py,sha256=U9ThDUuRbT5JDtCFlBurhZIs1Ay5t9fTfPXXI_4dwHY,15988
|
|
176
|
+
crawlee/storage_clients/_sql/_dataset_client.py,sha256=jr3hD34qhGnV7teS56tJD8psUDhp3kT12Gk-HQ0MwT4,10209
|
|
177
|
+
crawlee/storage_clients/_sql/_db_models.py,sha256=Gs4MS1YL0gWaUfNReVKJUXsqbU_d5jxiyvZ0sFxAV2A,9845
|
|
178
|
+
crawlee/storage_clients/_sql/_key_value_store_client.py,sha256=1qwl298ThVybUJgfyQaKXMhWNOieEHa1TVeXWVb1YO0,11201
|
|
179
|
+
crawlee/storage_clients/_sql/_request_queue_client.py,sha256=V2mUhQTe8pbEBb_4GNsI12i5Okr3ILLKyAHw8irdwLo,28936
|
|
180
|
+
crawlee/storage_clients/_sql/_storage_client.py,sha256=3xfgUcdW7Pu_j3SDYFzAdnU81jl1CmZ9Z5_NLvNi4P8,10913
|
|
181
|
+
crawlee/storage_clients/_sql/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
172
182
|
crawlee/storages/__init__.py,sha256=wc2eioyCKAAYrg4N7cshpjC-UbE23OzGar9nK_kteSY,186
|
|
173
|
-
crawlee/storages/_base.py,sha256
|
|
174
|
-
crawlee/storages/_dataset.py,sha256=
|
|
175
|
-
crawlee/storages/_key_value_store.py,sha256=
|
|
176
|
-
crawlee/storages/_request_queue.py,sha256=
|
|
177
|
-
crawlee/storages/_storage_instance_manager.py,sha256=
|
|
183
|
+
crawlee/storages/_base.py,sha256=Ka9RdYnEYlNLiKJGWqSwEDOPv5AtJWXKZErSTesh42Y,2124
|
|
184
|
+
crawlee/storages/_dataset.py,sha256=T2C8Q3gDUWg8p0JBS5MHnCuSd252oDU61JuNZGZzg-I,14573
|
|
185
|
+
crawlee/storages/_key_value_store.py,sha256=3oI5hVoM_NpTQVKXCbQCmb0sZhW7vN2oXQo-Yxi7BLQ,10127
|
|
186
|
+
crawlee/storages/_request_queue.py,sha256=jt-d-NkI9lAorLssoI2r_lZjeEipe-5Cn6z9bfQqY3k,13154
|
|
187
|
+
crawlee/storages/_storage_instance_manager.py,sha256=iFX3ymsIXyTg8tMHtx5Wn9XyaC77dIf15GpuggsJPDM,7821
|
|
178
188
|
crawlee/storages/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
179
|
-
crawlee-1.0.
|
|
180
|
-
crawlee-1.0.
|
|
181
|
-
crawlee-1.0.
|
|
182
|
-
crawlee-1.0.
|
|
183
|
-
crawlee-1.0.
|
|
189
|
+
crawlee-1.0.1.dist-info/METADATA,sha256=TUu48Ck-aNjxG2Kyn7Dampj6RZ_rGWV0MZcIUSf7rf0,29312
|
|
190
|
+
crawlee-1.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
191
|
+
crawlee-1.0.1.dist-info/entry_points.txt,sha256=1p65X3dA-cYvzjtlxLL6Kn1wpY-3uEDVqJLp53uNPeo,45
|
|
192
|
+
crawlee-1.0.1.dist-info/licenses/LICENSE,sha256=AsFjHssKjj4LGd2ZCqXn6FBzMqcWdjQre1byPPSypVw,11355
|
|
193
|
+
crawlee-1.0.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|