crawlee 1.0.0rc1__py3-none-any.whl → 1.0.1b1__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.
Files changed (56) hide show
  1. crawlee/_autoscaling/snapshotter.py +1 -1
  2. crawlee/_request.py +2 -1
  3. crawlee/_service_locator.py +44 -24
  4. crawlee/_types.py +76 -17
  5. crawlee/_utils/raise_if_too_many_kwargs.py +12 -0
  6. crawlee/_utils/sitemap.py +3 -1
  7. crawlee/_utils/system.py +3 -3
  8. crawlee/configuration.py +1 -1
  9. crawlee/crawlers/_abstract_http/_abstract_http_crawler.py +3 -1
  10. crawlee/crawlers/_abstract_http/_abstract_http_parser.py +1 -1
  11. crawlee/crawlers/_abstract_http/_http_crawling_context.py +1 -1
  12. crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler.py +6 -2
  13. crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler_statistics.py +1 -1
  14. crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawling_context.py +2 -1
  15. crawlee/crawlers/_adaptive_playwright/_rendering_type_predictor.py +1 -1
  16. crawlee/crawlers/_basic/_basic_crawler.py +107 -27
  17. crawlee/crawlers/_basic/_logging_utils.py +5 -1
  18. crawlee/crawlers/_playwright/_playwright_crawler.py +6 -1
  19. crawlee/events/_types.py +6 -6
  20. crawlee/fingerprint_suite/_fingerprint_generator.py +3 -0
  21. crawlee/fingerprint_suite/_types.py +2 -2
  22. crawlee/request_loaders/_request_list.py +1 -1
  23. crawlee/request_loaders/_request_loader.py +5 -1
  24. crawlee/request_loaders/_sitemap_request_loader.py +228 -48
  25. crawlee/sessions/_models.py +2 -2
  26. crawlee/statistics/_models.py +1 -1
  27. crawlee/storage_clients/__init__.py +12 -0
  28. crawlee/storage_clients/_base/_storage_client.py +13 -0
  29. crawlee/storage_clients/_file_system/_dataset_client.py +27 -25
  30. crawlee/storage_clients/_file_system/_key_value_store_client.py +27 -23
  31. crawlee/storage_clients/_file_system/_request_queue_client.py +84 -98
  32. crawlee/storage_clients/_file_system/_storage_client.py +16 -3
  33. crawlee/storage_clients/_file_system/_utils.py +0 -0
  34. crawlee/storage_clients/_memory/_dataset_client.py +14 -2
  35. crawlee/storage_clients/_memory/_key_value_store_client.py +14 -2
  36. crawlee/storage_clients/_memory/_request_queue_client.py +43 -12
  37. crawlee/storage_clients/_memory/_storage_client.py +6 -3
  38. crawlee/storage_clients/_sql/__init__.py +6 -0
  39. crawlee/storage_clients/_sql/_client_mixin.py +385 -0
  40. crawlee/storage_clients/_sql/_dataset_client.py +310 -0
  41. crawlee/storage_clients/_sql/_db_models.py +269 -0
  42. crawlee/storage_clients/_sql/_key_value_store_client.py +299 -0
  43. crawlee/storage_clients/_sql/_request_queue_client.py +706 -0
  44. crawlee/storage_clients/_sql/_storage_client.py +282 -0
  45. crawlee/storage_clients/_sql/py.typed +0 -0
  46. crawlee/storage_clients/models.py +10 -10
  47. crawlee/storages/_base.py +3 -1
  48. crawlee/storages/_dataset.py +9 -2
  49. crawlee/storages/_key_value_store.py +9 -2
  50. crawlee/storages/_request_queue.py +7 -2
  51. crawlee/storages/_storage_instance_manager.py +126 -72
  52. {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1b1.dist-info}/METADATA +12 -5
  53. {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1b1.dist-info}/RECORD +56 -46
  54. {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1b1.dist-info}/WHEEL +0 -0
  55. {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1b1.dist-info}/entry_points.txt +0 -0
  56. {crawlee-1.0.0rc1.dist-info → crawlee-1.0.1b1.dist-info}/licenses/LICENSE +0 -0
@@ -1,21 +1,64 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Awaitable, Callable
4
- from typing import TYPE_CHECKING, TypeVar, cast
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 crawlee.configuration import Configuration
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
- ClientOpener = Callable[..., Awaitable[StorageClientType]]
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
- def __init__(self) -> None:
30
- self._cache_by_id = dict[type[Storage], dict[str, Storage]]()
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
- self._default_instances = dict[type[Storage], Storage]()
37
- """Cache for default instances of each storage type."""
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
- configuration: Configuration,
46
- client_opener: ClientOpener,
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
- configuration: Configuration object.
55
- client_opener: Function to create the storage client.
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 both id and name are specified.
102
+ ValueError: If multiple parameters out of `id`, `name`, and `alias` are specified.
62
103
  """
63
- if id and name:
64
- raise ValueError('Only one of "id" or "name" can be specified, not both.')
65
-
66
- # Check for default instance
67
- if id is None and name is None and cls in self._default_instances:
68
- return cast('T', self._default_instances[cls])
69
-
70
- # Check cache
71
- if id is not None:
72
- type_cache_by_id = self._cache_by_id.get(cls, {})
73
- if id in type_cache_by_id:
74
- cached_instance = type_cache_by_id[id]
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
- if name is not None:
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
- # Create new instance
86
- client = await client_opener(id=id, name=name, configuration=configuration)
87
- metadata = await client.get_metadata()
149
+ # Create new instance
150
+ client: KeyValueStoreClient | DatasetClient | RequestQueueClient
151
+ client = await client_opener_coro
88
152
 
89
- instance = cls(client, metadata.id, metadata.name) # type: ignore[call-arg]
90
- instance_name = getattr(instance, 'name', None)
153
+ metadata = await client.get_metadata()
91
154
 
92
- # Cache the instance
93
- type_cache_by_id = self._cache_by_id.setdefault(cls, {})
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
- type_cache_by_id[instance.id] = instance
97
- if instance_name is not None:
98
- type_cache_by_name[instance_name] = instance
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
- # Set as default if no id/name specified
101
- if id is None and name is None:
102
- self._default_instances[cls] = instance
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
- return instance
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
- storage_type = type(storage_instance)
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._cache_by_id.clear()
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.0rc1
3
+ Version: 1.0.1b1
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.5.2
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=y6WEZhlo0eLy728fsutDd7ZUVZiILJUExkbFVYUwP6U,15903
7
- crawlee/_service_locator.py,sha256=p5LIM0rQ9dMJsEOVAabA4cTzXzRv5h0V-ebEnXO2oLs,4024
8
- crawlee/_types.py,sha256=iGlOI0Kt0RWLviA6SExZ6aFTSXjthtWWa4mQrX53y74,26015
9
- crawlee/configuration.py,sha256=YNFHR47N0X52EwPsp-PSw40YahVvM9YxTYfegV1lOjg,7893
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=tVkvkgQ8jRiH9aPiNN9LK48VxTMpWCpr-sE0KGxDkzk,17734
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=Vp1WntCCWS1_a9xd7_1K5uQEoEGnClqcEJ1oYbIyyDE,16552
36
- crawlee/_utils/system.py,sha256=5XiW5DSCGoRf27R2Ow7svPWpj0fdefV88ZqUiR5ecJk,4222
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
@@ -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=mR469xTqTEluLrrEf4SZ5buWsirx-mn94Z1Db8FsJqA,11494
56
- crawlee/crawlers/_abstract_http/_abstract_http_parser.py,sha256=pMcxTo-VTY6csa12Zvyab_5s8lNKvsVlzl3YiBTcHU0,3521
57
- crawlee/crawlers/_abstract_http/_http_crawling_context.py,sha256=PV5nUMG1yefMT-ZMiY9H_nPl5WYXWmCWR26r79xaeH0,2179
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=Iqnd0XxflcIswR3IQQ0TfMDt1j2WPjrpo_PxWrqzJdA,21450
61
- crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawler_statistics.py,sha256=_T6z2izdKJdgaHSY9Hrt7mkQQOaT60HX3LwrtLVyk7E,1024
62
- crawlee/crawlers/_adaptive_playwright/_adaptive_playwright_crawling_context.py,sha256=TsTYJjDwAGkpu_UpP6XB8SMYvX13O9AVDXZDBiZb6NM,10426
63
- crawlee/crawlers/_adaptive_playwright/_rendering_type_predictor.py,sha256=JtS67UTCY9pK5ZKmKjfoQMPu9ITFNlE2SRz5sJPSv54,10810
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=XdYeACOkbHKsF9dQwZwtPJXANG-36-M0B32VD809Ri0,69040
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=hpEcP1eo5SwHu_G8mymwGDzc4mbHGeosPY_Jdlm6r9A,2847
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=YolXcaPahDi2hWYeX5akL-Y0DLdA0TiZfuBQvATVA2M,23449
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=enxcdQOD9afcGXGI9cxzDBuvAmUIHmLvxlh8n-XMqeY,3169
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=9UIsx_1mq3ixwcMk3mCRT8GkKueHUTABVlqvWcq1zq0,665
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=jTeIAQME5HjO9LLeF5MQQWpTkuGgm1aQOvkrBL5EH4M,2375
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
@@ -132,52 +133,61 @@ crawlee/project_template/{{cookiecutter.project_name}}/{{cookiecutter.__package_
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=PqAtoUXphX1ea6uY2vdrOpf6wQgE2LtxlIBtj1DwSJI,8849
136
- crawlee/request_loaders/_request_loader.py,sha256=7vE4KowhoXeAX5ATanzKLSX1AAKqatBU_hEg1QhA-TQ,3448
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=luzVvPBYbwNsTB0nDJqqvJw9TyhA_LrENj9e9mXqOMc,6555
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=PYQBdhfbksvHO57ApQbtoY-XFM4nUk-nmaW_VclgHx0,2868
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=aQqaR3emAcapGi9rtleJhVkKJvNQHSHrGOXmRYfrsGA,5213
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=eKf5Hs6zXNk_qH8WBY84a3Sh-h3TmmQKZ_sod_petCA,218
152
- crawlee/storage_clients/models.py,sha256=ver2JY18bdCQ1M__JO0sAUrnkMYnoI9sf1Ykb3YrvMA,6126
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=1hTHXYiq4EMViNt1pdfa54ABlSvpiim6d2IVif0jtak,2954
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=088x7IaIo69JhLJMfVIrvBV5vTmS28hzOy21l1UuYFk,17569
162
- crawlee/storage_clients/_file_system/_key_value_store_client.py,sha256=rzxmE7ArvLbgl6fMUfJZvF1dh-ftL9-7vhrXHhclPwQ,18514
163
- crawlee/storage_clients/_file_system/_request_queue_client.py,sha256=Yp2zb3MDcjtJAKPwS8BVCkjGqL2bNcLTD01p4FGD95Y,33873
164
- crawlee/storage_clients/_file_system/_storage_client.py,sha256=-ypuyaCMOA3_2pVokzsCEay-1DRoXwmON3IgNVyx0Z0,2762
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=0fA9iakYAP_iw9IzPbiJeNL3XfmKpykQbSrTiQphcoE,8275
168
- crawlee/storage_clients/_memory/_key_value_store_client.py,sha256=4NJ0hmm1ddW0f1hJzxKUxCF-Y78KbvWg4hi90gwMOqo,5963
169
- crawlee/storage_clients/_memory/_request_queue_client.py,sha256=vLUO684yntFpAtDI7Pt8Kbi4k5uQwtOYvOdnHFTI8WI,11843
170
- crawlee/storage_clients/_memory/_storage_client.py,sha256=9Vq8CBW_M3Kwd9dbkPXv-otugBhfa0VHlfj9zgLq2YE,2583
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=-vTBeTeataBJ_2hN-Ls3YatJ-GdqrSWoXYBOBaypB-E,1978
174
- crawlee/storages/_dataset.py,sha256=epsqKECdrL7d5PiJKfCY2FNEJZo8vYo71yCKjN53k9I,14248
175
- crawlee/storages/_key_value_store.py,sha256=_BOImKr0_71h_G3vkjifxj7_rjrdnaUI3hm55Ma0T1c,9810
176
- crawlee/storages/_request_queue.py,sha256=xKFisrduGis1RA3SpIJFFON7wKmRJD0sJldhUquj3kk,12859
177
- crawlee/storages/_storage_instance_manager.py,sha256=o8m3YNZpjYLcZP9uiEl8cg53eRhHrFhrP5gonKICsT4,4808
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.0rc1.dist-info/METADATA,sha256=NTKYjFZpXFQelfFS-Q8wbdmNadfMdvhp6uOi250DDeE,28920
180
- crawlee-1.0.0rc1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
181
- crawlee-1.0.0rc1.dist-info/entry_points.txt,sha256=1p65X3dA-cYvzjtlxLL6Kn1wpY-3uEDVqJLp53uNPeo,45
182
- crawlee-1.0.0rc1.dist-info/licenses/LICENSE,sha256=AsFjHssKjj4LGd2ZCqXn6FBzMqcWdjQre1byPPSypVw,11355
183
- crawlee-1.0.0rc1.dist-info/RECORD,,
189
+ crawlee-1.0.1b1.dist-info/METADATA,sha256=sDwdyTWu9EDrobftnQpOtCpDSYJgrfKyHSo0juDhQ_8,29314
190
+ crawlee-1.0.1b1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
191
+ crawlee-1.0.1b1.dist-info/entry_points.txt,sha256=1p65X3dA-cYvzjtlxLL6Kn1wpY-3uEDVqJLp53uNPeo,45
192
+ crawlee-1.0.1b1.dist-info/licenses/LICENSE,sha256=AsFjHssKjj4LGd2ZCqXn6FBzMqcWdjQre1byPPSypVw,11355
193
+ crawlee-1.0.1b1.dist-info/RECORD,,