apify 1.5.1b3__py3-none-any.whl → 1.5.2b2__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 apify might be problematic. Click here for more details.
- apify/_memory_storage/resource_clients/base_resource_collection_client.py +1 -1
- apify/_memory_storage/resource_clients/dataset.py +1 -1
- apify/_memory_storage/resource_clients/dataset_collection.py +1 -1
- apify/_memory_storage/resource_clients/key_value_store_collection.py +1 -1
- apify/_memory_storage/resource_clients/request_queue_collection.py +1 -1
- apify/actor.py +1 -1
- apify/event_manager.py +2 -2
- apify/log.py +1 -1
- apify/scrapy/__init__.py +0 -1
- apify/scrapy/middlewares/apify_proxy.py +9 -7
- apify/scrapy/middlewares/apify_retry.py +2 -3
- apify/scrapy/pipelines/__init__.py +1 -0
- apify/scrapy/{pipelines.py → pipelines/actor_dataset_push.py} +1 -1
- apify/scrapy/scheduler.py +16 -6
- apify/scrapy/utils.py +19 -11
- apify/storages/base_storage.py +1 -1
- apify/storages/dataset.py +1 -1
- apify/storages/key_value_store.py +1 -1
- apify/storages/request_queue.py +1 -1
- {apify-1.5.1b3.dist-info → apify-1.5.2b2.dist-info}/METADATA +1 -1
- {apify-1.5.1b3.dist-info → apify-1.5.2b2.dist-info}/RECORD +24 -23
- {apify-1.5.1b3.dist-info → apify-1.5.2b2.dist-info}/LICENSE +0 -0
- {apify-1.5.1b3.dist-info → apify-1.5.2b2.dist-info}/WHEEL +0 -0
- {apify-1.5.1b3.dist-info → apify-1.5.2b2.dist-info}/top_level.txt +0 -0
|
@@ -43,7 +43,7 @@ class BaseResourceCollectionClient(ABC, Generic[ResourceClientType]):
|
|
|
43
43
|
raise NotImplementedError('You must override this method in the subclass!')
|
|
44
44
|
|
|
45
45
|
@abstractmethod
|
|
46
|
-
async def list(self: BaseResourceCollectionClient) -> ListPage:
|
|
46
|
+
async def list(self: BaseResourceCollectionClient) -> ListPage:
|
|
47
47
|
"""List the available storages.
|
|
48
48
|
|
|
49
49
|
Returns:
|
|
@@ -314,7 +314,7 @@ class DatasetClient(BaseResourceClient):
|
|
|
314
314
|
existing_dataset_by_id._dataset_entries[idx] = entry
|
|
315
315
|
added_ids.append(idx)
|
|
316
316
|
|
|
317
|
-
data_entries = [(id, existing_dataset_by_id._dataset_entries[id]) for id in added_ids]
|
|
317
|
+
data_entries = [(id, existing_dataset_by_id._dataset_entries[id]) for id in added_ids] # noqa: A001
|
|
318
318
|
|
|
319
319
|
async with existing_dataset_by_id._file_operation_lock:
|
|
320
320
|
await existing_dataset_by_id._update_timestamps(has_been_modified=True)
|
|
@@ -21,7 +21,7 @@ class DatasetCollectionClient(BaseResourceCollectionClient):
|
|
|
21
21
|
def _get_resource_client_class(self: DatasetCollectionClient) -> type[DatasetClient]:
|
|
22
22
|
return DatasetClient
|
|
23
23
|
|
|
24
|
-
async def list(self: DatasetCollectionClient) -> ListPage:
|
|
24
|
+
async def list(self: DatasetCollectionClient) -> ListPage:
|
|
25
25
|
"""List the available datasets.
|
|
26
26
|
|
|
27
27
|
Returns:
|
|
@@ -21,7 +21,7 @@ class KeyValueStoreCollectionClient(BaseResourceCollectionClient):
|
|
|
21
21
|
def _get_resource_client_class(self: KeyValueStoreCollectionClient) -> type[KeyValueStoreClient]:
|
|
22
22
|
return KeyValueStoreClient
|
|
23
23
|
|
|
24
|
-
async def list(self: KeyValueStoreCollectionClient) -> ListPage:
|
|
24
|
+
async def list(self: KeyValueStoreCollectionClient) -> ListPage:
|
|
25
25
|
"""List the available key-value stores.
|
|
26
26
|
|
|
27
27
|
Returns:
|
|
@@ -21,7 +21,7 @@ class RequestQueueCollectionClient(BaseResourceCollectionClient):
|
|
|
21
21
|
def _get_resource_client_class(self: RequestQueueCollectionClient) -> type[RequestQueueClient]:
|
|
22
22
|
return RequestQueueClient
|
|
23
23
|
|
|
24
|
-
async def list(self: RequestQueueCollectionClient) -> ListPage:
|
|
24
|
+
async def list(self: RequestQueueCollectionClient) -> ListPage:
|
|
25
25
|
"""List the available request queues.
|
|
26
26
|
|
|
27
27
|
Returns:
|
apify/actor.py
CHANGED
apify/event_manager.py
CHANGED
|
@@ -219,7 +219,7 @@ class EventManager:
|
|
|
219
219
|
try:
|
|
220
220
|
async with websockets.client.connect(self._config.actor_events_ws_url) as websocket:
|
|
221
221
|
self._platform_events_websocket = websocket
|
|
222
|
-
self._connected_to_platform_websocket.set_result(True)
|
|
222
|
+
self._connected_to_platform_websocket.set_result(True)
|
|
223
223
|
async for message in websocket:
|
|
224
224
|
try:
|
|
225
225
|
parsed_message = json.loads(message)
|
|
@@ -234,4 +234,4 @@ class EventManager:
|
|
|
234
234
|
logger.exception('Cannot parse actor event', extra={'message': message})
|
|
235
235
|
except Exception:
|
|
236
236
|
logger.exception('Error in websocket connection')
|
|
237
|
-
self._connected_to_platform_websocket.set_result(False)
|
|
237
|
+
self._connected_to_platform_websocket.set_result(False)
|
apify/log.py
CHANGED
|
@@ -82,7 +82,7 @@ class ActorLogFormatter(logging.Formatter):
|
|
|
82
82
|
return extra_fields
|
|
83
83
|
|
|
84
84
|
@ignore_docs
|
|
85
|
-
def format(self: ActorLogFormatter, record: logging.LogRecord) -> str:
|
|
85
|
+
def format(self: ActorLogFormatter, record: logging.LogRecord) -> str:
|
|
86
86
|
"""Format the log record nicely.
|
|
87
87
|
|
|
88
88
|
This formats the log record so that it:
|
apify/scrapy/__init__.py
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from typing import TYPE_CHECKING
|
|
4
3
|
from urllib.parse import ParseResult, urlparse
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
from scrapy
|
|
5
|
+
try:
|
|
6
|
+
from scrapy import Request, Spider # noqa: TCH002
|
|
7
|
+
from scrapy.core.downloader.handlers.http11 import TunnelError
|
|
8
|
+
from scrapy.crawler import Crawler # noqa: TCH002
|
|
9
|
+
from scrapy.exceptions import NotConfigured
|
|
10
|
+
except ImportError as exc:
|
|
11
|
+
raise ImportError(
|
|
12
|
+
'To use this module, you need to install the "scrapy" extra. Run "pip install apify[scrapy]".',
|
|
13
|
+
) from exc
|
|
8
14
|
|
|
9
15
|
from ...actor import Actor
|
|
10
16
|
from ...proxy_configuration import ProxyConfiguration
|
|
11
17
|
from ..utils import get_basic_auth_header
|
|
12
18
|
|
|
13
|
-
if TYPE_CHECKING:
|
|
14
|
-
from scrapy import Request, Spider
|
|
15
|
-
from scrapy.crawler import Crawler
|
|
16
|
-
|
|
17
19
|
|
|
18
20
|
class ApifyHttpProxyMiddleware:
|
|
19
21
|
"""Apify HTTP proxy middleware for Scrapy.
|
|
@@ -4,7 +4,9 @@ import traceback
|
|
|
4
4
|
from typing import TYPE_CHECKING, Any
|
|
5
5
|
|
|
6
6
|
try:
|
|
7
|
+
from scrapy import Spider # noqa: TCH002
|
|
7
8
|
from scrapy.downloadermiddlewares.retry import RetryMiddleware
|
|
9
|
+
from scrapy.http import Request, Response # noqa: TCH002
|
|
8
10
|
from scrapy.utils.response import response_status_message
|
|
9
11
|
except ImportError as exc:
|
|
10
12
|
raise ImportError(
|
|
@@ -15,9 +17,6 @@ from ...actor import Actor
|
|
|
15
17
|
from ..utils import nested_event_loop, open_queue_with_custom_client, to_apify_request
|
|
16
18
|
|
|
17
19
|
if TYPE_CHECKING:
|
|
18
|
-
from scrapy import Spider
|
|
19
|
-
from scrapy.http import Request, Response
|
|
20
|
-
|
|
21
20
|
from ...storages import RequestQueue
|
|
22
21
|
|
|
23
22
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .actor_dataset_push import ActorDatasetPushPipeline
|
apify/scrapy/scheduler.py
CHANGED
|
@@ -35,7 +35,7 @@ class ApifyScheduler(BaseScheduler):
|
|
|
35
35
|
self._rq: RequestQueue | None = None
|
|
36
36
|
self.spider: Spider | None = None
|
|
37
37
|
|
|
38
|
-
def open(self: ApifyScheduler, spider: Spider) -> None: #
|
|
38
|
+
def open(self: ApifyScheduler, spider: Spider) -> None: # this has to be named "open"
|
|
39
39
|
"""Open the scheduler.
|
|
40
40
|
|
|
41
41
|
Args:
|
|
@@ -55,7 +55,9 @@ class ApifyScheduler(BaseScheduler):
|
|
|
55
55
|
Returns:
|
|
56
56
|
True if the scheduler has any pending requests, False otherwise.
|
|
57
57
|
"""
|
|
58
|
-
|
|
58
|
+
if not isinstance(self._rq, RequestQueue):
|
|
59
|
+
raise TypeError('self._rq must be an instance of the RequestQueue class')
|
|
60
|
+
|
|
59
61
|
try:
|
|
60
62
|
is_finished = nested_event_loop.run_until_complete(self._rq.is_finished())
|
|
61
63
|
except BaseException:
|
|
@@ -76,10 +78,14 @@ class ApifyScheduler(BaseScheduler):
|
|
|
76
78
|
call_id = crypto_random_object_id(8)
|
|
77
79
|
Actor.log.debug(f'[{call_id}]: ApifyScheduler.enqueue_request was called (scrapy_request={request})...')
|
|
78
80
|
|
|
79
|
-
|
|
81
|
+
if not isinstance(self.spider, Spider):
|
|
82
|
+
raise TypeError('self.spider must be an instance of the Spider class')
|
|
83
|
+
|
|
80
84
|
apify_request = to_apify_request(request, spider=self.spider)
|
|
81
85
|
Actor.log.debug(f'[{call_id}]: scrapy_request was transformed to apify_request (apify_request={apify_request})')
|
|
82
|
-
|
|
86
|
+
|
|
87
|
+
if not isinstance(self._rq, RequestQueue):
|
|
88
|
+
raise TypeError('self._rq must be an instance of the RequestQueue class')
|
|
83
89
|
|
|
84
90
|
try:
|
|
85
91
|
result = nested_event_loop.run_until_complete(self._rq.add_request(apify_request))
|
|
@@ -98,7 +104,9 @@ class ApifyScheduler(BaseScheduler):
|
|
|
98
104
|
"""
|
|
99
105
|
call_id = crypto_random_object_id(8)
|
|
100
106
|
Actor.log.debug(f'[{call_id}]: ApifyScheduler.next_request was called...')
|
|
101
|
-
|
|
107
|
+
|
|
108
|
+
if not isinstance(self._rq, RequestQueue):
|
|
109
|
+
raise TypeError('self._rq must be an instance of the RequestQueue class')
|
|
102
110
|
|
|
103
111
|
try:
|
|
104
112
|
apify_request = nested_event_loop.run_until_complete(self._rq.fetch_next_request())
|
|
@@ -111,7 +119,9 @@ class ApifyScheduler(BaseScheduler):
|
|
|
111
119
|
if apify_request is None:
|
|
112
120
|
return None
|
|
113
121
|
|
|
114
|
-
|
|
122
|
+
if not isinstance(self.spider, Spider):
|
|
123
|
+
raise TypeError('self.spider must be an instance of the Spider class')
|
|
124
|
+
|
|
115
125
|
scrapy_request = to_scrapy_request(apify_request, spider=self.spider)
|
|
116
126
|
Actor.log.debug(
|
|
117
127
|
f'[{call_id}]: apify_request was transformed to the scrapy_request which is gonna be returned (scrapy_request={scrapy_request})',
|
apify/scrapy/utils.py
CHANGED
|
@@ -6,10 +6,9 @@ import pickle
|
|
|
6
6
|
from base64 import b64encode
|
|
7
7
|
from urllib.parse import unquote
|
|
8
8
|
|
|
9
|
-
from scrapy.utils.python import to_bytes
|
|
10
|
-
|
|
11
9
|
try:
|
|
12
10
|
from scrapy import Request, Spider
|
|
11
|
+
from scrapy.utils.python import to_bytes
|
|
13
12
|
from scrapy.utils.request import request_from_dict
|
|
14
13
|
except ImportError as exc:
|
|
15
14
|
raise ImportError(
|
|
@@ -51,7 +50,8 @@ def to_apify_request(scrapy_request: Request, spider: Spider) -> dict:
|
|
|
51
50
|
Returns:
|
|
52
51
|
The converted Apify request.
|
|
53
52
|
"""
|
|
54
|
-
|
|
53
|
+
if not isinstance(scrapy_request, Request):
|
|
54
|
+
raise TypeError('scrapy_request must be an instance of the scrapy.Request class')
|
|
55
55
|
|
|
56
56
|
call_id = crypto_random_object_id(8)
|
|
57
57
|
Actor.log.debug(f'[{call_id}]: to_apify_request was called (scrapy_request={scrapy_request})...')
|
|
@@ -91,11 +91,14 @@ def to_scrapy_request(apify_request: dict, spider: Spider) -> Request:
|
|
|
91
91
|
Returns:
|
|
92
92
|
The converted Scrapy request.
|
|
93
93
|
"""
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
if not isinstance(apify_request, dict):
|
|
95
|
+
raise TypeError('apify_request must be a dictionary')
|
|
96
|
+
|
|
97
|
+
required_keys = ['url', 'method', 'id', 'uniqueKey']
|
|
98
|
+
missing_keys = [key for key in required_keys if key not in apify_request]
|
|
99
|
+
|
|
100
|
+
if missing_keys:
|
|
101
|
+
raise ValueError(f"apify_request must contain {', '.join(map(repr, missing_keys))} key(s)")
|
|
99
102
|
|
|
100
103
|
call_id = crypto_random_object_id(8)
|
|
101
104
|
Actor.log.debug(f'[{call_id}]: to_scrapy_request was called (apify_request={apify_request})...')
|
|
@@ -106,14 +109,19 @@ def to_scrapy_request(apify_request: dict, spider: Spider) -> Request:
|
|
|
106
109
|
# - This process involves decoding the base64-encoded request data and reconstructing
|
|
107
110
|
# the Scrapy Request object from its dictionary representation.
|
|
108
111
|
Actor.log.debug(f'[{call_id}]: Restoring the Scrapy Request from the apify_request...')
|
|
112
|
+
|
|
109
113
|
scrapy_request_dict_encoded = apify_request['userData']['scrapy_request']
|
|
110
|
-
|
|
114
|
+
if not isinstance(scrapy_request_dict_encoded, str):
|
|
115
|
+
raise TypeError('scrapy_request_dict_encoded must be a string')
|
|
111
116
|
|
|
112
117
|
scrapy_request_dict = pickle.loads(codecs.decode(scrapy_request_dict_encoded.encode(), 'base64'))
|
|
113
|
-
|
|
118
|
+
if not isinstance(scrapy_request_dict, dict):
|
|
119
|
+
raise TypeError('scrapy_request_dict must be a dictionary')
|
|
114
120
|
|
|
115
121
|
scrapy_request = request_from_dict(scrapy_request_dict, spider=spider)
|
|
116
|
-
|
|
122
|
+
if not isinstance(scrapy_request, Request):
|
|
123
|
+
raise TypeError('scrapy_request must be an instance of the Request class')
|
|
124
|
+
|
|
117
125
|
Actor.log.debug(f'[{call_id}]: Scrapy Request successfully reconstructed (scrapy_request={scrapy_request})...')
|
|
118
126
|
|
|
119
127
|
# Update the meta field with the meta field from the apify_request
|
apify/storages/base_storage.py
CHANGED
apify/storages/dataset.py
CHANGED
apify/storages/request_queue.py
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
apify/__init__.py,sha256=aAjho-r0-XAqUjD9j55ueCo4lZJzyytOWjk0VCmkeeY,283
|
|
2
2
|
apify/_crypto.py,sha256=Ds-ZRBYX2YiO2VYuOoofBec1NAo0EIvV2HLXpbQvrjQ,5818
|
|
3
3
|
apify/_utils.py,sha256=hR7ya_DaGy0jborKZJwTag-YXm3w7hntRTXV0DOjxLI,12710
|
|
4
|
-
apify/actor.py,sha256
|
|
4
|
+
apify/actor.py,sha256=78QazK0VrNPPMzpyRP9hZ3-qdcKblMPKyWEbCOBDiAY,59952
|
|
5
5
|
apify/config.py,sha256=TGRZ1710ZKa2q2FtG_wI8Lmo1kQt0GdpB9V32rjbXLE,8780
|
|
6
6
|
apify/consts.py,sha256=eSD23HmwLKwWG8bRp5O1c7bmtlhvYE17Yw46BKs4vQQ,2263
|
|
7
|
-
apify/event_manager.py,sha256=
|
|
8
|
-
apify/log.py,sha256=
|
|
7
|
+
apify/event_manager.py,sha256=e0Z8Z2uUy3BIrzUMoD0DnGAijRqx0PmmuJZ-QalSD2E,10603
|
|
8
|
+
apify/log.py,sha256=bjWHm3J0m6pwjjzLVG2vGxpkt_s3ciCZxn6LbJVSGP4,5006
|
|
9
9
|
apify/proxy_configuration.py,sha256=tJujO_PHZYXygk1ajFLKKoJrAi1EPTwRyFl5Dpl4LjY,15727
|
|
10
10
|
apify/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
apify/_memory_storage/__init__.py,sha256=frNb9kh6bfKtZNEMe2PA_QlT6DTUbhffcNfWhELiZNQ,90
|
|
@@ -13,28 +13,29 @@ apify/_memory_storage/file_storage_utils.py,sha256=l9DkKZnn_CGoQDlzs1EJatrQqxjsI
|
|
|
13
13
|
apify/_memory_storage/memory_storage_client.py,sha256=6mJbKtVaZxCeQapR4YrjVakOzoBNiOGrZwp4KYVz1Jw,10469
|
|
14
14
|
apify/_memory_storage/resource_clients/__init__.py,sha256=afkbzv59lgBe_JCgJcTbAt-ayX0VjtO6u0ExI7JVkEk,705
|
|
15
15
|
apify/_memory_storage/resource_clients/base_resource_client.py,sha256=8CaoUY6y-GTKz-2I9a8-F3RDwdNNvEHtw0bmlgKDvN8,5143
|
|
16
|
-
apify/_memory_storage/resource_clients/base_resource_collection_client.py,sha256=
|
|
17
|
-
apify/_memory_storage/resource_clients/dataset.py,sha256
|
|
18
|
-
apify/_memory_storage/resource_clients/dataset_collection.py,sha256=
|
|
16
|
+
apify/_memory_storage/resource_clients/base_resource_collection_client.py,sha256=K3xx8j53i7yjiOULXlvjg__ptwPuy-u7x0xqsjDQapw,3908
|
|
17
|
+
apify/_memory_storage/resource_clients/dataset.py,sha256=o99RmQFxxM6JLr4wM9pZDVri7fHUENZD07-Dw0Yw_t0,19976
|
|
18
|
+
apify/_memory_storage/resource_clients/dataset_collection.py,sha256=yECyLznz5z-qBm49xIdje5brBudyW_IPOpOqaqA0coA,1538
|
|
19
19
|
apify/_memory_storage/resource_clients/key_value_store.py,sha256=Fbw2dDsO8WveQBMZytqYaQ76LINbqvT51-OPRW3aXgI,20492
|
|
20
|
-
apify/_memory_storage/resource_clients/key_value_store_collection.py,sha256=
|
|
20
|
+
apify/_memory_storage/resource_clients/key_value_store_collection.py,sha256=Oy1jJ_wWd_g6DpLV4OAMBxfrnMxwtGDCG3mzVTL-Aww,1664
|
|
21
21
|
apify/_memory_storage/resource_clients/request_queue.py,sha256=7LS_jrBBJvylFZedZHrgwMPyCsLz8X9-mAvvhOaYzXI,19614
|
|
22
|
-
apify/_memory_storage/resource_clients/request_queue_collection.py,sha256=
|
|
23
|
-
apify/scrapy/__init__.py,sha256=
|
|
24
|
-
apify/scrapy/
|
|
25
|
-
apify/scrapy/
|
|
26
|
-
apify/scrapy/utils.py,sha256=DcspnpCY7LVPGpFPrZzzn9nRB4p5gWgK-UOb1ChCwMA,6777
|
|
22
|
+
apify/_memory_storage/resource_clients/request_queue_collection.py,sha256=ydnYy2zu9wp_A58fr4LnENjvOVNEWgJ8vyG5jjHzXIA,1637
|
|
23
|
+
apify/scrapy/__init__.py,sha256=tCnqsdzcCx0Rpx13r1THeEJ6SzEgjmyrmHVKdCgfEfo,174
|
|
24
|
+
apify/scrapy/scheduler.py,sha256=Ogl789PrvY0jAAaK3hgTxjliNQ9Dx0cisE9YM8vm52Y,4926
|
|
25
|
+
apify/scrapy/utils.py,sha256=2qphTfTVHu-wG-1Ibrp0mDG18ONaosZcX0kQlf_nkxY,7162
|
|
27
26
|
apify/scrapy/middlewares/__init__.py,sha256=zzosV8BD8SZQIrVKsSaGFGV9rHinNLKm5GPL3ZNxSZQ,96
|
|
28
|
-
apify/scrapy/middlewares/apify_proxy.py,sha256=
|
|
29
|
-
apify/scrapy/middlewares/apify_retry.py,sha256=
|
|
27
|
+
apify/scrapy/middlewares/apify_proxy.py,sha256=FFNGFq7danSNKl722nZ7zC-VKoMLRk6bVtlFL4cksvg,5902
|
|
28
|
+
apify/scrapy/middlewares/apify_retry.py,sha256=HaQcYxoOFm_CMgTWkbL5HPoEhpMPFKkHn11_j-4JvwE,4590
|
|
29
|
+
apify/scrapy/pipelines/__init__.py,sha256=KBUE3maOWrLfJRmWSsyW6YxxZY4lCGP2GZyMm9Z56VY,57
|
|
30
|
+
apify/scrapy/pipelines/actor_dataset_push.py,sha256=qXtSFIUhIvqC8KGDdft4N_FmSA2qyfZfsjd9uSYTZo4,956
|
|
30
31
|
apify/storages/__init__.py,sha256=rBdwhyZxUMG6m_7uAb4sl5eg_dxiLvYVas5aRcZ6PIE,268
|
|
31
|
-
apify/storages/base_storage.py,sha256=
|
|
32
|
-
apify/storages/dataset.py,sha256=
|
|
33
|
-
apify/storages/key_value_store.py,sha256=
|
|
34
|
-
apify/storages/request_queue.py,sha256=
|
|
32
|
+
apify/storages/base_storage.py,sha256=LKkC0W6ndmvVI2huoiIArZUKuMF6aqwqpjGQPWCcx2s,7408
|
|
33
|
+
apify/storages/dataset.py,sha256=x_rte5nVOMPdg3ui_KHpH71UdUT2gcN10bGnrLXB6xk,23291
|
|
34
|
+
apify/storages/key_value_store.py,sha256=HKSF6odZTMWgFF6usS9l9xcCGLyRitRq59LAKbmyYAY,10730
|
|
35
|
+
apify/storages/request_queue.py,sha256=b0Qh2d1BWDtdbf_adAVS68fVkdcR2gtL4KyfxAp1oMY,26915
|
|
35
36
|
apify/storages/storage_client_manager.py,sha256=QAGbu47pwFkHa-AFfolNW3W5hvR7zNz2yxK9Sv0wQbA,2457
|
|
36
|
-
apify-1.5.
|
|
37
|
-
apify-1.5.
|
|
38
|
-
apify-1.5.
|
|
39
|
-
apify-1.5.
|
|
40
|
-
apify-1.5.
|
|
37
|
+
apify-1.5.2b2.dist-info/LICENSE,sha256=AsFjHssKjj4LGd2ZCqXn6FBzMqcWdjQre1byPPSypVw,11355
|
|
38
|
+
apify-1.5.2b2.dist-info/METADATA,sha256=Cw3UknTKsrRzu5DUsxVUUIbIRTyBhzt0IpDcs49UwPk,6235
|
|
39
|
+
apify-1.5.2b2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
40
|
+
apify-1.5.2b2.dist-info/top_level.txt,sha256=2oFNsHggn5m_rCaaP7xijQg_-Va2ByOSYuvKgACsS5w,6
|
|
41
|
+
apify-1.5.2b2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|