apify 1.1.4b3__tar.gz → 1.1.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of apify might be problematic. Click here for more details.
- {apify-1.1.4b3 → apify-1.1.5}/LICENSE +1 -1
- {apify-1.1.4b3 → apify-1.1.5}/PKG-INFO +48 -4
- {apify-1.1.4b3 → apify-1.1.5}/README.md +3 -2
- {apify-1.1.4b3 → apify-1.1.5}/pyproject.toml +5 -99
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/actor.py +0 -1
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/consts.py +10 -9
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/event_manager.py +1 -1
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/log.py +17 -1
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/storages/dataset.py +2 -1
- {apify-1.1.4b3 → apify-1.1.5}/src/apify.egg-info/PKG-INFO +48 -4
- {apify-1.1.4b3 → apify-1.1.5}/src/apify.egg-info/requires.txt +3 -5
- {apify-1.1.4b3 → apify-1.1.5}/setup.cfg +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/__init__.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_crypto.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/__init__.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/file_storage_utils.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/memory_storage_client.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/__init__.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/base_resource_client.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/base_resource_collection_client.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/dataset.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/dataset_collection.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/key_value_store.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/key_value_store_collection.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/request_queue.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/request_queue_collection.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/_utils.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/config.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/proxy_configuration.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/py.typed +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/storages/__init__.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/storages/base_storage.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/storages/key_value_store.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/storages/request_queue.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify/storages/storage_client_manager.py +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify.egg-info/SOURCES.txt +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify.egg-info/dependency_links.txt +0 -0
- {apify-1.1.4b3 → apify-1.1.5}/src/apify.egg-info/top_level.txt +0 -0
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright
|
|
189
|
+
Copyright 2023 Apify Technologies s.r.o.
|
|
190
190
|
|
|
191
191
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
192
|
you may not use this file except in compliance with the License.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: apify
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5
|
|
4
4
|
Summary: Apify SDK for Python
|
|
5
5
|
Author-email: "Apify Technologies s.r.o." <support@apify.com>
|
|
6
6
|
License: Apache Software License
|
|
@@ -22,8 +22,51 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
22
22
|
Classifier: Topic :: Software Development :: Libraries
|
|
23
23
|
Requires-Python: >=3.8
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
|
-
Provides-Extra: dev
|
|
26
25
|
License-File: LICENSE
|
|
26
|
+
Requires-Dist: aiofiles>=22.1.0
|
|
27
|
+
Requires-Dist: aioshutil>=1.0
|
|
28
|
+
Requires-Dist: apify-client~=1.4.0
|
|
29
|
+
Requires-Dist: apify-shared~=1.0.2
|
|
30
|
+
Requires-Dist: colorama>=0.4.6
|
|
31
|
+
Requires-Dist: cryptography>=39.0.0
|
|
32
|
+
Requires-Dist: httpx>=0.24.1
|
|
33
|
+
Requires-Dist: psutil>=5.9.5
|
|
34
|
+
Requires-Dist: pyee>=9.0.0
|
|
35
|
+
Requires-Dist: sortedcollections>=2.0.1
|
|
36
|
+
Requires-Dist: typing-extensions>=4.1.0
|
|
37
|
+
Requires-Dist: websockets>=10.1
|
|
38
|
+
Provides-Extra: dev
|
|
39
|
+
Requires-Dist: autopep8~=2.0.2; extra == "dev"
|
|
40
|
+
Requires-Dist: build~=0.10.0; extra == "dev"
|
|
41
|
+
Requires-Dist: filelock~=3.12.0; extra == "dev"
|
|
42
|
+
Requires-Dist: flake8~=6.0.0; extra == "dev"
|
|
43
|
+
Requires-Dist: flake8-bugbear~=23.5.9; extra == "dev"
|
|
44
|
+
Requires-Dist: flake8-commas~=2.1.0; extra == "dev"
|
|
45
|
+
Requires-Dist: flake8-comprehensions~=3.12.0; extra == "dev"
|
|
46
|
+
Requires-Dist: flake8-datetimez~=20.10.0; extra == "dev"
|
|
47
|
+
Requires-Dist: flake8-docstrings~=1.7.0; extra == "dev"
|
|
48
|
+
Requires-Dist: flake8-encodings~=0.5.0; extra == "dev"
|
|
49
|
+
Requires-Dist: flake8-isort~=6.0.0; extra == "dev"
|
|
50
|
+
Requires-Dist: flake8-noqa~=1.3.1; extra == "dev"
|
|
51
|
+
Requires-Dist: flake8-pytest-style~=1.7.2; extra == "dev"
|
|
52
|
+
Requires-Dist: flake8-quotes~=3.3.2; extra == "dev"
|
|
53
|
+
Requires-Dist: flake8-simplify~=0.20.0; extra == "dev"
|
|
54
|
+
Requires-Dist: flake8-unused-arguments~=0.0.13; extra == "dev"
|
|
55
|
+
Requires-Dist: isort~=5.12.0; extra == "dev"
|
|
56
|
+
Requires-Dist: mypy~=1.3.0; extra == "dev"
|
|
57
|
+
Requires-Dist: pep8-naming~=0.13.3; extra == "dev"
|
|
58
|
+
Requires-Dist: pre-commit~=3.3.2; extra == "dev"
|
|
59
|
+
Requires-Dist: pydoc-markdown~=4.8.2; extra == "dev"
|
|
60
|
+
Requires-Dist: pytest~=7.3.1; extra == "dev"
|
|
61
|
+
Requires-Dist: pytest-asyncio~=0.21.0; extra == "dev"
|
|
62
|
+
Requires-Dist: pytest-only~=2.0.0; extra == "dev"
|
|
63
|
+
Requires-Dist: pytest-timeout~=2.1.0; extra == "dev"
|
|
64
|
+
Requires-Dist: pytest-xdist~=3.3.1; extra == "dev"
|
|
65
|
+
Requires-Dist: respx~=0.20.1; extra == "dev"
|
|
66
|
+
Requires-Dist: twine~=4.0.2; extra == "dev"
|
|
67
|
+
Requires-Dist: types-aiofiles~=23.1.0.3; extra == "dev"
|
|
68
|
+
Requires-Dist: types-colorama~=0.4.15.11; extra == "dev"
|
|
69
|
+
Requires-Dist: types-psutil~=5.9.5.12; extra == "dev"
|
|
27
70
|
|
|
28
71
|
# Apify SDK for Python
|
|
29
72
|
|
|
@@ -46,9 +89,10 @@ import requests
|
|
|
46
89
|
|
|
47
90
|
async def main():
|
|
48
91
|
async with Actor:
|
|
49
|
-
|
|
92
|
+
input = await Actor.get_input()
|
|
93
|
+
response = requests.get(input['url'])
|
|
50
94
|
soup = BeautifulSoup(response.content, 'html.parser')
|
|
51
|
-
await Actor.push_data({ 'url': url, 'title': soup.title.string })
|
|
95
|
+
await Actor.push_data({ 'url': input['url'], 'title': soup.title.string })
|
|
52
96
|
```
|
|
53
97
|
|
|
54
98
|
## What are Actors?
|
|
@@ -19,9 +19,10 @@ import requests
|
|
|
19
19
|
|
|
20
20
|
async def main():
|
|
21
21
|
async with Actor:
|
|
22
|
-
|
|
22
|
+
input = await Actor.get_input()
|
|
23
|
+
response = requests.get(input['url'])
|
|
23
24
|
soup = BeautifulSoup(response.content, 'html.parser')
|
|
24
|
-
await Actor.push_data({ 'url': url, 'title': soup.title.string })
|
|
25
|
+
await Actor.push_data({ 'url': input['url'], 'title': soup.title.string })
|
|
25
26
|
```
|
|
26
27
|
|
|
27
28
|
## What are Actors?
|
|
@@ -1,186 +1,92 @@
|
|
|
1
1
|
[project]
|
|
2
|
-
|
|
3
2
|
name = "apify"
|
|
4
|
-
|
|
5
|
-
version = "1.1.4b3"
|
|
3
|
+
version = "1.1.5"
|
|
6
4
|
description = "Apify SDK for Python"
|
|
7
|
-
|
|
8
5
|
readme = "README.md"
|
|
9
|
-
|
|
10
6
|
license = {text = "Apache Software License"}
|
|
11
|
-
|
|
12
7
|
authors = [
|
|
13
|
-
|
|
14
|
-
{ name = "Apify Technologies s.r.o.", email = "support@apify.com" },
|
|
15
|
-
|
|
8
|
+
{name = "Apify Technologies s.r.o.", email = "support@apify.com"},
|
|
16
9
|
]
|
|
17
|
-
|
|
18
10
|
keywords = ["apify", "sdk", "actor", "scraping", "automation"]
|
|
19
11
|
|
|
20
|
-
|
|
21
|
-
|
|
22
12
|
classifiers = [
|
|
23
|
-
|
|
24
13
|
"Development Status :: 5 - Production/Stable",
|
|
25
|
-
|
|
26
14
|
"Intended Audience :: Developers",
|
|
27
|
-
|
|
28
15
|
"License :: OSI Approved :: Apache Software License",
|
|
29
|
-
|
|
30
16
|
"Operating System :: OS Independent",
|
|
31
|
-
|
|
32
17
|
"Programming Language :: Python :: 3.8",
|
|
33
|
-
|
|
34
18
|
"Programming Language :: Python :: 3.9",
|
|
35
|
-
|
|
36
19
|
"Programming Language :: Python :: 3.10",
|
|
37
|
-
|
|
38
20
|
"Programming Language :: Python :: 3.11",
|
|
39
|
-
|
|
40
21
|
"Topic :: Software Development :: Libraries",
|
|
41
|
-
|
|
42
22
|
]
|
|
43
23
|
|
|
44
|
-
|
|
45
|
-
|
|
46
24
|
requires-python = ">=3.8"
|
|
47
|
-
|
|
48
25
|
dependencies = [
|
|
49
|
-
|
|
50
26
|
"aiofiles >= 22.1.0",
|
|
51
|
-
|
|
52
27
|
"aioshutil >= 1.0",
|
|
53
|
-
|
|
54
|
-
"apify-
|
|
55
|
-
|
|
56
|
-
"apify-shared == 1.0.2",
|
|
57
|
-
|
|
28
|
+
"apify-client ~= 1.4.0",
|
|
29
|
+
"apify-shared ~= 1.0.2",
|
|
58
30
|
"colorama >= 0.4.6",
|
|
59
|
-
|
|
60
31
|
"cryptography >= 39.0.0",
|
|
61
|
-
|
|
62
32
|
"httpx >= 0.24.1",
|
|
63
|
-
|
|
64
33
|
"psutil >= 5.9.5",
|
|
65
|
-
|
|
66
34
|
"pyee >= 9.0.0",
|
|
67
|
-
|
|
68
35
|
"sortedcollections >= 2.0.1",
|
|
69
|
-
|
|
70
36
|
"typing-extensions >= 4.1.0",
|
|
71
|
-
|
|
72
37
|
"websockets >= 10.1",
|
|
73
|
-
|
|
74
38
|
]
|
|
75
39
|
|
|
76
|
-
|
|
77
|
-
|
|
78
40
|
[project.optional-dependencies]
|
|
79
|
-
|
|
80
41
|
dev = [
|
|
81
|
-
|
|
82
42
|
"autopep8 ~= 2.0.2",
|
|
83
|
-
|
|
84
43
|
"build ~= 0.10.0",
|
|
85
|
-
|
|
86
44
|
"filelock ~= 3.12.0",
|
|
87
|
-
|
|
88
45
|
"flake8 ~= 6.0.0",
|
|
89
|
-
|
|
90
46
|
"flake8-bugbear ~= 23.5.9",
|
|
91
|
-
|
|
92
47
|
"flake8-commas ~= 2.1.0",
|
|
93
|
-
|
|
94
48
|
"flake8-comprehensions ~= 3.12.0",
|
|
95
|
-
|
|
96
49
|
"flake8-datetimez ~= 20.10.0",
|
|
97
|
-
|
|
98
50
|
"flake8-docstrings ~= 1.7.0",
|
|
99
|
-
|
|
100
51
|
"flake8-encodings ~= 0.5.0",
|
|
101
|
-
|
|
102
52
|
"flake8-isort ~= 6.0.0",
|
|
103
|
-
|
|
104
53
|
"flake8-noqa ~= 1.3.1",
|
|
105
|
-
|
|
106
54
|
"flake8-pytest-style ~= 1.7.2",
|
|
107
|
-
|
|
108
55
|
"flake8-quotes ~= 3.3.2",
|
|
109
|
-
|
|
110
56
|
"flake8-simplify ~= 0.20.0",
|
|
111
|
-
|
|
112
57
|
"flake8-unused-arguments ~= 0.0.13",
|
|
113
|
-
|
|
114
58
|
"isort ~= 5.12.0",
|
|
115
|
-
|
|
116
59
|
"mypy ~= 1.3.0",
|
|
117
|
-
|
|
118
60
|
"pep8-naming ~= 0.13.3",
|
|
119
|
-
|
|
120
61
|
"pre-commit ~= 3.3.2",
|
|
121
|
-
|
|
62
|
+
"pydoc-markdown ~= 4.8.2",
|
|
122
63
|
"pytest ~= 7.3.1",
|
|
123
|
-
|
|
124
64
|
"pytest-asyncio ~= 0.21.0",
|
|
125
|
-
|
|
126
65
|
"pytest-only ~= 2.0.0",
|
|
127
|
-
|
|
128
66
|
"pytest-timeout ~= 2.1.0",
|
|
129
|
-
|
|
130
67
|
"pytest-xdist ~= 3.3.1",
|
|
131
|
-
|
|
132
68
|
"respx ~= 0.20.1",
|
|
133
|
-
|
|
134
|
-
"sphinx ~= 6.1.3",
|
|
135
|
-
|
|
136
|
-
"sphinx-autodoc-typehints ~= 1.22",
|
|
137
|
-
|
|
138
|
-
"sphinx-markdown-builder == 0.5.4", # pinned to 0.5.4, because 0.5.5 has a formatting bug
|
|
139
|
-
|
|
140
69
|
"twine ~= 4.0.2",
|
|
141
|
-
|
|
142
70
|
"types-aiofiles ~= 23.1.0.3",
|
|
143
|
-
|
|
144
71
|
"types-colorama ~= 0.4.15.11",
|
|
145
|
-
|
|
146
72
|
"types-psutil ~= 5.9.5.12",
|
|
147
|
-
|
|
148
73
|
]
|
|
149
74
|
|
|
150
|
-
|
|
151
|
-
|
|
152
75
|
[project.urls]
|
|
153
|
-
|
|
154
76
|
"Homepage" = "https://docs.apify.com/sdk/python/"
|
|
155
|
-
|
|
156
77
|
"Documentation" = "https://docs.apify.com/sdk/python/"
|
|
157
|
-
|
|
158
78
|
"Source" = "https://github.com/apify/apify-sdk-python"
|
|
159
|
-
|
|
160
79
|
"Issue tracker" = "https://github.com/apify/apify-sdk-python/issues"
|
|
161
|
-
|
|
162
80
|
"Changelog" = "https://github.com/apify/apify-sdk-python/blob/master/CHANGELOG.md"
|
|
163
|
-
|
|
164
81
|
"Apify Homepage" = "https://apify.com"
|
|
165
82
|
|
|
166
|
-
|
|
167
|
-
|
|
168
83
|
[build-system]
|
|
169
|
-
|
|
170
84
|
requires = ["setuptools>=64.0.0", "wheel"]
|
|
171
|
-
|
|
172
85
|
build-backend = "setuptools.build_meta"
|
|
173
86
|
|
|
174
|
-
|
|
175
|
-
|
|
176
87
|
[tool.setuptools.packages.find]
|
|
177
|
-
|
|
178
88
|
where = ["src"]
|
|
179
|
-
|
|
180
89
|
include = ["apify*"]
|
|
181
90
|
|
|
182
|
-
|
|
183
|
-
|
|
184
91
|
[tool.setuptools.package-data]
|
|
185
|
-
|
|
186
92
|
apify = ["py.typed"]
|
|
@@ -36,7 +36,6 @@ MainReturnType = TypeVar('MainReturnType')
|
|
|
36
36
|
|
|
37
37
|
# This metaclass is needed so you can do `async with Actor: ...` instead of `async with Actor() as a: ...`
|
|
38
38
|
# and have automatic `Actor.init()` and `Actor.exit()`
|
|
39
|
-
# TODO: decide if this mumbo jumbo is worth it or not, or if it maybe breaks something
|
|
40
39
|
|
|
41
40
|
|
|
42
41
|
class _ActorContextManager(type):
|
|
@@ -3,14 +3,14 @@ import warnings
|
|
|
3
3
|
from enum import Enum
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
|
-
from apify_shared.consts import BOOL_ENV_VARS as _BOOL_ENV_VARS
|
|
7
|
-
from apify_shared.consts import DATETIME_ENV_VARS as _DATETIME_ENV_VARS
|
|
8
|
-
from apify_shared.consts import FLOAT_ENV_VARS as _FLOAT_ENV_VARS
|
|
9
|
-
from apify_shared.consts import INTEGER_ENV_VARS as _INTEGER_ENV_VARS
|
|
10
|
-
from apify_shared.consts import STRING_ENV_VARS as _STRING_ENV_VARS
|
|
11
|
-
from apify_shared.consts import ActorEventTypes as _ActorEventTypes
|
|
12
|
-
from apify_shared.consts import ActorExitCodes as _ActorExitCodes
|
|
13
|
-
from apify_shared.consts import ApifyEnvVars as _ApifyEnvVars
|
|
6
|
+
from apify_shared.consts import BOOL_ENV_VARS as _BOOL_ENV_VARS # noqa: F401
|
|
7
|
+
from apify_shared.consts import DATETIME_ENV_VARS as _DATETIME_ENV_VARS # noqa: F401
|
|
8
|
+
from apify_shared.consts import FLOAT_ENV_VARS as _FLOAT_ENV_VARS # noqa: F401
|
|
9
|
+
from apify_shared.consts import INTEGER_ENV_VARS as _INTEGER_ENV_VARS # noqa: F401
|
|
10
|
+
from apify_shared.consts import STRING_ENV_VARS as _STRING_ENV_VARS # noqa: F401
|
|
11
|
+
from apify_shared.consts import ActorEventTypes as _ActorEventTypes # noqa: F401
|
|
12
|
+
from apify_shared.consts import ActorExitCodes as _ActorExitCodes # noqa: F401
|
|
13
|
+
from apify_shared.consts import ApifyEnvVars as _ApifyEnvVars # noqa: F401
|
|
14
14
|
|
|
15
15
|
DEPRECATED_NAMES = [
|
|
16
16
|
'BOOL_ENV_VARS',
|
|
@@ -61,4 +61,5 @@ BASE64_REGEXP = '[-A-Za-z0-9+/]*={0,3}'
|
|
|
61
61
|
ENCRYPTED_INPUT_VALUE_PREFIX = 'ENCRYPTED_VALUE'
|
|
62
62
|
ENCRYPTED_INPUT_VALUE_REGEXP = re.compile(f'^{ENCRYPTED_INPUT_VALUE_PREFIX}:({BASE64_REGEXP}):({BASE64_REGEXP})$')
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
# 9MB
|
|
65
|
+
MAX_PAYLOAD_SIZE_BYTES = 9437184
|
|
@@ -34,7 +34,7 @@ class EventManager:
|
|
|
34
34
|
_connected_to_platform_websocket: Optional[asyncio.Future] = None
|
|
35
35
|
|
|
36
36
|
def __init__(self, config: Configuration) -> None:
|
|
37
|
-
"""
|
|
37
|
+
"""Create an instance of the EventManager.
|
|
38
38
|
|
|
39
39
|
Args:
|
|
40
40
|
config (Configuration): The actor configuration to be used in this event manager.
|
|
@@ -17,6 +17,7 @@ logger_name = __name__.split('.')[0]
|
|
|
17
17
|
# Logger used throughout the library
|
|
18
18
|
logger = logging.getLogger(logger_name)
|
|
19
19
|
|
|
20
|
+
_LOG_NAME_COLOR = Fore.LIGHTBLACK_EX
|
|
20
21
|
|
|
21
22
|
_LOG_LEVEL_COLOR = {
|
|
22
23
|
logging.DEBUG: Fore.BLUE,
|
|
@@ -54,6 +55,15 @@ class ActorLogFormatter(logging.Formatter):
|
|
|
54
55
|
# and extract all the extra ones not present in the empty log record
|
|
55
56
|
empty_record = logging.LogRecord('dummy', 0, 'dummy', 0, 'dummy', None, None)
|
|
56
57
|
|
|
58
|
+
def __init__(self, include_logger_name: bool = False, *args: tuple, **kwargs: dict) -> None:
|
|
59
|
+
"""Create an instance of the ActorLogFormatter.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
include_logger_name: Include logger name at the beginning of the log line. Defaults to False.
|
|
63
|
+
"""
|
|
64
|
+
super().__init__(*args, **kwargs) # type: ignore
|
|
65
|
+
self.include_logger_name = include_logger_name
|
|
66
|
+
|
|
57
67
|
def _get_extra_fields(self, record: logging.LogRecord) -> Dict[str, Any]:
|
|
58
68
|
extra_fields: Dict[str, Any] = {}
|
|
59
69
|
for key, value in record.__dict__.items():
|
|
@@ -72,6 +82,8 @@ class ActorLogFormatter(logging.Formatter):
|
|
|
72
82
|
- then has the stringified extra log fields
|
|
73
83
|
- then, if an exception is a part of the log record, prints the formatted exception.
|
|
74
84
|
"""
|
|
85
|
+
logger_name_string = f'{_LOG_NAME_COLOR}[{record.name}]{Style.RESET_ALL} '
|
|
86
|
+
|
|
75
87
|
# Colorize the log level, and shorten it to 6 chars tops
|
|
76
88
|
level_color_code = _LOG_LEVEL_COLOR.get(record.levelno, '')
|
|
77
89
|
level_short_alias = _LOG_LEVEL_SHORT_ALIAS.get(record.levelno, record.levelname)
|
|
@@ -97,4 +109,8 @@ class ActorLogFormatter(logging.Formatter):
|
|
|
97
109
|
log_string = super().format(record)
|
|
98
110
|
log_string = textwrap.indent(log_string, _LOG_MESSAGE_INDENT).lstrip()
|
|
99
111
|
|
|
100
|
-
|
|
112
|
+
if self.include_logger_name:
|
|
113
|
+
# Include logger name at the beginning of the log line
|
|
114
|
+
return f'{logger_name_string}{level_string}{log_string}{extra_string}{exception_string}'
|
|
115
|
+
else:
|
|
116
|
+
return f'{level_string}{log_string}{extra_string}{exception_string}'
|
|
@@ -17,7 +17,8 @@ from ..consts import MAX_PAYLOAD_SIZE_BYTES
|
|
|
17
17
|
from .base_storage import BaseStorage
|
|
18
18
|
from .key_value_store import KeyValueStore
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
# 0.01%
|
|
21
|
+
SAFETY_BUFFER_PERCENT = 0.01 / 100
|
|
21
22
|
EFFECTIVE_LIMIT_BYTES = MAX_PAYLOAD_SIZE_BYTES - math.ceil(MAX_PAYLOAD_SIZE_BYTES * SAFETY_BUFFER_PERCENT)
|
|
22
23
|
|
|
23
24
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: apify
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.5
|
|
4
4
|
Summary: Apify SDK for Python
|
|
5
5
|
Author-email: "Apify Technologies s.r.o." <support@apify.com>
|
|
6
6
|
License: Apache Software License
|
|
@@ -22,8 +22,51 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
22
22
|
Classifier: Topic :: Software Development :: Libraries
|
|
23
23
|
Requires-Python: >=3.8
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
|
-
Provides-Extra: dev
|
|
26
25
|
License-File: LICENSE
|
|
26
|
+
Requires-Dist: aiofiles>=22.1.0
|
|
27
|
+
Requires-Dist: aioshutil>=1.0
|
|
28
|
+
Requires-Dist: apify-client~=1.4.0
|
|
29
|
+
Requires-Dist: apify-shared~=1.0.2
|
|
30
|
+
Requires-Dist: colorama>=0.4.6
|
|
31
|
+
Requires-Dist: cryptography>=39.0.0
|
|
32
|
+
Requires-Dist: httpx>=0.24.1
|
|
33
|
+
Requires-Dist: psutil>=5.9.5
|
|
34
|
+
Requires-Dist: pyee>=9.0.0
|
|
35
|
+
Requires-Dist: sortedcollections>=2.0.1
|
|
36
|
+
Requires-Dist: typing-extensions>=4.1.0
|
|
37
|
+
Requires-Dist: websockets>=10.1
|
|
38
|
+
Provides-Extra: dev
|
|
39
|
+
Requires-Dist: autopep8~=2.0.2; extra == "dev"
|
|
40
|
+
Requires-Dist: build~=0.10.0; extra == "dev"
|
|
41
|
+
Requires-Dist: filelock~=3.12.0; extra == "dev"
|
|
42
|
+
Requires-Dist: flake8~=6.0.0; extra == "dev"
|
|
43
|
+
Requires-Dist: flake8-bugbear~=23.5.9; extra == "dev"
|
|
44
|
+
Requires-Dist: flake8-commas~=2.1.0; extra == "dev"
|
|
45
|
+
Requires-Dist: flake8-comprehensions~=3.12.0; extra == "dev"
|
|
46
|
+
Requires-Dist: flake8-datetimez~=20.10.0; extra == "dev"
|
|
47
|
+
Requires-Dist: flake8-docstrings~=1.7.0; extra == "dev"
|
|
48
|
+
Requires-Dist: flake8-encodings~=0.5.0; extra == "dev"
|
|
49
|
+
Requires-Dist: flake8-isort~=6.0.0; extra == "dev"
|
|
50
|
+
Requires-Dist: flake8-noqa~=1.3.1; extra == "dev"
|
|
51
|
+
Requires-Dist: flake8-pytest-style~=1.7.2; extra == "dev"
|
|
52
|
+
Requires-Dist: flake8-quotes~=3.3.2; extra == "dev"
|
|
53
|
+
Requires-Dist: flake8-simplify~=0.20.0; extra == "dev"
|
|
54
|
+
Requires-Dist: flake8-unused-arguments~=0.0.13; extra == "dev"
|
|
55
|
+
Requires-Dist: isort~=5.12.0; extra == "dev"
|
|
56
|
+
Requires-Dist: mypy~=1.3.0; extra == "dev"
|
|
57
|
+
Requires-Dist: pep8-naming~=0.13.3; extra == "dev"
|
|
58
|
+
Requires-Dist: pre-commit~=3.3.2; extra == "dev"
|
|
59
|
+
Requires-Dist: pydoc-markdown~=4.8.2; extra == "dev"
|
|
60
|
+
Requires-Dist: pytest~=7.3.1; extra == "dev"
|
|
61
|
+
Requires-Dist: pytest-asyncio~=0.21.0; extra == "dev"
|
|
62
|
+
Requires-Dist: pytest-only~=2.0.0; extra == "dev"
|
|
63
|
+
Requires-Dist: pytest-timeout~=2.1.0; extra == "dev"
|
|
64
|
+
Requires-Dist: pytest-xdist~=3.3.1; extra == "dev"
|
|
65
|
+
Requires-Dist: respx~=0.20.1; extra == "dev"
|
|
66
|
+
Requires-Dist: twine~=4.0.2; extra == "dev"
|
|
67
|
+
Requires-Dist: types-aiofiles~=23.1.0.3; extra == "dev"
|
|
68
|
+
Requires-Dist: types-colorama~=0.4.15.11; extra == "dev"
|
|
69
|
+
Requires-Dist: types-psutil~=5.9.5.12; extra == "dev"
|
|
27
70
|
|
|
28
71
|
# Apify SDK for Python
|
|
29
72
|
|
|
@@ -46,9 +89,10 @@ import requests
|
|
|
46
89
|
|
|
47
90
|
async def main():
|
|
48
91
|
async with Actor:
|
|
49
|
-
|
|
92
|
+
input = await Actor.get_input()
|
|
93
|
+
response = requests.get(input['url'])
|
|
50
94
|
soup = BeautifulSoup(response.content, 'html.parser')
|
|
51
|
-
await Actor.push_data({ 'url': url, 'title': soup.title.string })
|
|
95
|
+
await Actor.push_data({ 'url': input['url'], 'title': soup.title.string })
|
|
52
96
|
```
|
|
53
97
|
|
|
54
98
|
## What are Actors?
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
aiofiles>=22.1.0
|
|
2
2
|
aioshutil>=1.0
|
|
3
|
-
apify-client
|
|
4
|
-
apify-shared
|
|
3
|
+
apify-client~=1.4.0
|
|
4
|
+
apify-shared~=1.0.2
|
|
5
5
|
colorama>=0.4.6
|
|
6
6
|
cryptography>=39.0.0
|
|
7
7
|
httpx>=0.24.1
|
|
@@ -32,15 +32,13 @@ isort~=5.12.0
|
|
|
32
32
|
mypy~=1.3.0
|
|
33
33
|
pep8-naming~=0.13.3
|
|
34
34
|
pre-commit~=3.3.2
|
|
35
|
+
pydoc-markdown~=4.8.2
|
|
35
36
|
pytest~=7.3.1
|
|
36
37
|
pytest-asyncio~=0.21.0
|
|
37
38
|
pytest-only~=2.0.0
|
|
38
39
|
pytest-timeout~=2.1.0
|
|
39
40
|
pytest-xdist~=3.3.1
|
|
40
41
|
respx~=0.20.1
|
|
41
|
-
sphinx~=6.1.3
|
|
42
|
-
sphinx-autodoc-typehints~=1.22
|
|
43
|
-
sphinx-markdown-builder==0.5.4
|
|
44
42
|
twine~=4.0.2
|
|
45
43
|
types-aiofiles~=23.1.0.3
|
|
46
44
|
types-colorama~=0.4.15.11
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/base_resource_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/dataset_collection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{apify-1.1.4b3 → apify-1.1.5}/src/apify/_memory_storage/resource_clients/request_queue_collection.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|