Skip to content

Commit 53d27d9

Browse files
authored
feat: Use Actor env vars (#5)
1 parent 7b377ac commit 53d27d9

File tree

2 files changed

+120
-48
lines changed

2 files changed

+120
-48
lines changed

src/apify_shared/consts.py

Lines changed: 107 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -54,47 +54,60 @@ class ActorEventTypes(str, Enum):
5454
ABORTING = 'aborting'
5555

5656

57+
class ActorEnvVars(str, Enum):
58+
"""Possible Apify-specific environment variables prefixed with "ACTOR_"."""
59+
60+
# TODO: document these
61+
62+
#: BUILD_ID
63+
BUILD_ID = 'ACTOR_BUILD_ID'
64+
#: BUILD_NUMBER
65+
BUILD_NUMBER = 'ACTOR_BUILD_NUMBER'
66+
#: DEFAULT_DATASET_ID
67+
DEFAULT_DATASET_ID = 'ACTOR_DEFAULT_DATASET_ID'
68+
#: DEFAULT_KEY_VALUE_STORE_ID
69+
DEFAULT_KEY_VALUE_STORE_ID = 'ACTOR_DEFAULT_KEY_VALUE_STORE_ID'
70+
#: DEFAULT_REQUEST_QUEUE_ID
71+
DEFAULT_REQUEST_QUEUE_ID = 'ACTOR_DEFAULT_REQUEST_QUEUE_ID'
72+
#: EVENTS_WEBSOCKET_URL
73+
EVENTS_WEBSOCKET_URL = 'ACTOR_EVENTS_WEBSOCKET_URL'
74+
#: ID
75+
ID = 'ACTOR_ID'
76+
#: INPUT_KEY
77+
INPUT_KEY = 'ACTOR_INPUT_KEY'
78+
#: MAX_PAID_DATASET_ITEMS
79+
MAX_PAID_DATASET_ITEMS = 'ACTOR_MAX_PAID_DATASET_ITEMS'
80+
#: MEMORY_MBYTES
81+
MEMORY_MBYTES = 'ACTOR_MEMORY_MBYTES'
82+
#: RUN_ID
83+
RUN_ID = 'ACTOR_RUN_ID'
84+
#: STARTED_AT
85+
STARTED_AT = 'ACTOR_STARTED_AT'
86+
#: TASK_ID
87+
TASK_ID = 'ACTOR_TASK_ID'
88+
#: TIMEOUT_AT
89+
TIMEOUT_AT = 'ACTOR_TIMEOUT_AT'
90+
#: WEB_SERVER_PORT
91+
WEB_SERVER_PORT = 'ACTOR_WEB_SERVER_PORT'
92+
#: WEB_SERVER_URL
93+
WEB_SERVER_URL = 'ACTOR_WEB_SERVER_URL'
94+
95+
5796
class ApifyEnvVars(str, Enum):
58-
"""Possible Apify-specific environment variables."""
97+
"""Possible Apify-specific environment variables prefixed with "APIFY_"."""
5998

6099
# TODO: document these
61100

62-
#: ACT_ID
63-
ACT_ID = 'APIFY_ACT_ID'
64-
#: ACT_RUN_ID
65-
ACT_RUN_ID = 'APIFY_ACT_RUN_ID'
66-
#: ACTOR_BUILD_ID
67-
ACTOR_BUILD_ID = 'APIFY_ACTOR_BUILD_ID'
68-
#: ACTOR_BUILD_NUMBER
69-
ACTOR_BUILD_NUMBER = 'APIFY_ACTOR_BUILD_NUMBER'
70-
#: ACTOR_EVENTS_WS_URL
71-
ACTOR_EVENTS_WS_URL = 'APIFY_ACTOR_EVENTS_WS_URL'
72-
#: ACTOR_ID
73-
ACTOR_ID = 'APIFY_ACTOR_ID'
74-
#: ACTOR_RUN_ID
75-
ACTOR_RUN_ID = 'APIFY_ACTOR_RUN_ID'
76-
#: ACTOR_TASK_ID
77-
ACTOR_TASK_ID = 'APIFY_ACTOR_TASK_ID'
78101
#: API_BASE_URL
79102
API_BASE_URL = 'APIFY_API_BASE_URL'
80103
#: API_PUBLIC_BASE_URL
81104
API_PUBLIC_BASE_URL = 'APIFY_API_PUBLIC_BASE_URL'
82105
#: CHROME_EXECUTABLE_PATH
83106
CHROME_EXECUTABLE_PATH = 'APIFY_CHROME_EXECUTABLE_PATH'
84-
#: CONTAINER_PORT
85-
CONTAINER_PORT = 'APIFY_CONTAINER_PORT'
86-
#: CONTAINER_URL
87-
CONTAINER_URL = 'APIFY_CONTAINER_URL'
88107
#: DEDICATED_CPUS
89108
DEDICATED_CPUS = 'APIFY_DEDICATED_CPUS'
90109
#: DEFAULT_BROWSER_PATH
91110
DEFAULT_BROWSER_PATH = 'APIFY_DEFAULT_BROWSER_PATH'
92-
#: DEFAULT_DATASET_ID
93-
DEFAULT_DATASET_ID = 'APIFY_DEFAULT_DATASET_ID'
94-
#: DEFAULT_KEY_VALUE_STORE_ID
95-
DEFAULT_KEY_VALUE_STORE_ID = 'APIFY_DEFAULT_KEY_VALUE_STORE_ID'
96-
#: DEFAULT_REQUEST_QUEUE_ID
97-
DEFAULT_REQUEST_QUEUE_ID = 'APIFY_DEFAULT_REQUEST_QUEUE_ID'
98111
#: DISABLE_BROWSER_SANDBOX
99112
DISABLE_BROWSER_SANDBOX = 'APIFY_DISABLE_BROWSER_SANDBOX'
100113
#: DISABLE_OUTDATED_WARNING
@@ -103,8 +116,6 @@ class ApifyEnvVars(str, Enum):
103116
FACT = 'APIFY_FACT'
104117
#: HEADLESS
105118
HEADLESS = 'APIFY_HEADLESS'
106-
#: INPUT_KEY
107-
INPUT_KEY = 'APIFY_INPUT_KEY'
108119
#: INPUT_SECRETS_PRIVATE_KEY_FILE
109120
INPUT_SECRETS_PRIVATE_KEY_FILE = 'APIFY_INPUT_SECRETS_PRIVATE_KEY_FILE'
110121
#: INPUT_SECRETS_PRIVATE_KEY_PASSPHRASE
@@ -119,10 +130,12 @@ class ApifyEnvVars(str, Enum):
119130
LOG_LEVEL = 'APIFY_LOG_LEVEL'
120131
#: MAX_USED_CPU_RATIO
121132
MAX_USED_CPU_RATIO = 'APIFY_MAX_USED_CPU_RATIO'
122-
#: MEMORY_MBYTES
123-
MEMORY_MBYTES = 'APIFY_MEMORY_MBYTES'
124133
#: META_ORIGIN
125134
META_ORIGIN = 'APIFY_META_ORIGIN'
135+
#: METAMORPH_AFTER_SLEEP_MILLIS
136+
METAMORPH_AFTER_SLEEP_MILLIS = 'APIFY_METAMORPH_AFTER_SLEEP_MILLIS'
137+
#: PERSIST_STATE_INTERVAL_MILLIS
138+
PERSIST_STATE_INTERVAL_MILLIS = 'APIFY_PERSIST_STATE_INTERVAL_MILLIS'
126139
#: PERSIST_STORAGE
127140
PERSIST_STORAGE = 'APIFY_PERSIST_STORAGE'
128141
#: PROXY_HOSTNAME
@@ -133,12 +146,12 @@ class ApifyEnvVars(str, Enum):
133146
PROXY_PORT = 'APIFY_PROXY_PORT'
134147
#: PROXY_STATUS_URL
135148
PROXY_STATUS_URL = 'APIFY_PROXY_STATUS_URL'
149+
#: PURGE_ON_START
150+
PURGE_ON_START = 'APIFY_PURGE_ON_START'
136151
#: SDK_LATEST_VERSION
137152
SDK_LATEST_VERSION = 'APIFY_SDK_LATEST_VERSION'
138-
#: STARTED_AT
139-
STARTED_AT = 'APIFY_STARTED_AT'
140-
#: TIMEOUT_AT
141-
TIMEOUT_AT = 'APIFY_TIMEOUT_AT'
153+
#: SYSTEM_INFO_INTERVAL_MILLIS
154+
SYSTEM_INFO_INTERVAL_MILLIS = 'APIFY_SYSTEM_INFO_INTERVAL_MILLIS'
142155
#: TOKEN
143156
TOKEN = 'APIFY_TOKEN'
144157
#: USER_ID
@@ -148,15 +161,43 @@ class ApifyEnvVars(str, Enum):
148161
#: XVFB
149162
XVFB = 'APIFY_XVFB'
150163

151-
# Extra ones not in @apify/consts:
152-
#: METAMORPH_AFTER_SLEEP_MILLIS
153-
METAMORPH_AFTER_SLEEP_MILLIS = 'APIFY_METAMORPH_AFTER_SLEEP_MILLIS'
154-
#: PERSIST_STATE_INTERVAL_MILLIS
155-
PERSIST_STATE_INTERVAL_MILLIS = 'APIFY_PERSIST_STATE_INTERVAL_MILLIS'
156-
#: PURGE_ON_START
157-
PURGE_ON_START = 'APIFY_PURGE_ON_START'
158-
#: SYSTEM_INFO_INTERVAL_MILLIS
159-
SYSTEM_INFO_INTERVAL_MILLIS = 'APIFY_SYSTEM_INFO_INTERVAL_MILLIS'
164+
# Replaced by ActorEnvVars, kept for backward compatibility:
165+
#: ACTOR_BUILD_ID
166+
ACTOR_BUILD_ID = 'APIFY_ACTOR_BUILD_ID'
167+
#: ACTOR_BUILD_NUMBER
168+
ACTOR_BUILD_NUMBER = 'APIFY_ACTOR_BUILD_NUMBER'
169+
#: ACTOR_EVENTS_WS_URL
170+
ACTOR_EVENTS_WS_URL = 'APIFY_ACTOR_EVENTS_WS_URL'
171+
#: ACTOR_ID
172+
ACTOR_ID = 'APIFY_ACTOR_ID'
173+
#: ACTOR_RUN_ID
174+
ACTOR_RUN_ID = 'APIFY_ACTOR_RUN_ID'
175+
#: ACTOR_TASK_ID
176+
ACTOR_TASK_ID = 'APIFY_ACTOR_TASK_ID'
177+
#: CONTAINER_PORT
178+
CONTAINER_PORT = 'APIFY_CONTAINER_PORT'
179+
#: CONTAINER_URL
180+
CONTAINER_URL = 'APIFY_CONTAINER_URL'
181+
#: DEFAULT_DATASET_ID
182+
DEFAULT_DATASET_ID = 'APIFY_DEFAULT_DATASET_ID'
183+
#: DEFAULT_KEY_VALUE_STORE_ID
184+
DEFAULT_KEY_VALUE_STORE_ID = 'APIFY_DEFAULT_KEY_VALUE_STORE_ID'
185+
#: DEFAULT_REQUEST_QUEUE_ID
186+
DEFAULT_REQUEST_QUEUE_ID = 'APIFY_DEFAULT_REQUEST_QUEUE_ID'
187+
#: INPUT_KEY
188+
INPUT_KEY = 'APIFY_INPUT_KEY'
189+
#: MEMORY_MBYTES
190+
MEMORY_MBYTES = 'APIFY_MEMORY_MBYTES'
191+
#: STARTED_AT
192+
STARTED_AT = 'APIFY_STARTED_AT'
193+
#: TIMEOUT_AT
194+
TIMEOUT_AT = 'APIFY_TIMEOUT_AT'
195+
196+
# Deprecated, kept for backward compatibility:
197+
#: ACT_ID
198+
ACT_ID = 'APIFY_ACT_ID'
199+
#: ACT_RUN_ID
200+
ACT_RUN_ID = 'APIFY_ACT_RUN_ID'
160201

161202

162203
class ActorExitCodes(int, Enum):
@@ -217,6 +258,11 @@ class MetaOrigin(str, Enum):
217258

218259

219260
INTEGER_ENV_VARS_TYPE = Literal[
261+
# Actor env vars
262+
ActorEnvVars.MAX_PAID_DATASET_ITEMS,
263+
ActorEnvVars.MEMORY_MBYTES,
264+
ActorEnvVars.WEB_SERVER_PORT,
265+
# Apify env vars
220266
ApifyEnvVars.CONTAINER_PORT,
221267
ApifyEnvVars.DEDICATED_CPUS,
222268
ApifyEnvVars.LOG_LEVEL,
@@ -248,13 +294,30 @@ class MetaOrigin(str, Enum):
248294
BOOL_ENV_VARS: List[BOOL_ENV_VARS_TYPE] = list(get_args(BOOL_ENV_VARS_TYPE))
249295

250296
DATETIME_ENV_VARS_TYPE = Literal[
297+
# Actor env vars
298+
ActorEnvVars.STARTED_AT,
299+
ActorEnvVars.TIMEOUT_AT,
300+
# Apify env vars
251301
ApifyEnvVars.STARTED_AT,
252302
ApifyEnvVars.TIMEOUT_AT,
253303
]
254304

255305
DATETIME_ENV_VARS: List[DATETIME_ENV_VARS_TYPE] = list(get_args(DATETIME_ENV_VARS_TYPE))
256306

257307
STRING_ENV_VARS_TYPE = Literal[
308+
# Actor env vars
309+
ActorEnvVars.BUILD_ID,
310+
ActorEnvVars.BUILD_NUMBER,
311+
ActorEnvVars.DEFAULT_DATASET_ID,
312+
ActorEnvVars.DEFAULT_KEY_VALUE_STORE_ID,
313+
ActorEnvVars.DEFAULT_REQUEST_QUEUE_ID,
314+
ActorEnvVars.EVENTS_WEBSOCKET_URL,
315+
ActorEnvVars.ID,
316+
ActorEnvVars.INPUT_KEY,
317+
ActorEnvVars.RUN_ID,
318+
ActorEnvVars.TASK_ID,
319+
ActorEnvVars.WEB_SERVER_URL,
320+
# Apify env vars
258321
ApifyEnvVars.ACT_ID,
259322
ApifyEnvVars.ACT_RUN_ID,
260323
ApifyEnvVars.ACTOR_BUILD_ID,

tests/unit/test_consts.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import itertools
2+
from enum import Enum
3+
from typing import List
24

3-
from apify_shared.consts import BOOL_ENV_VARS, DATETIME_ENV_VARS, FLOAT_ENV_VARS, INTEGER_ENV_VARS, STRING_ENV_VARS, ApifyEnvVars
5+
from apify_shared.consts import BOOL_ENV_VARS, DATETIME_ENV_VARS, FLOAT_ENV_VARS, INTEGER_ENV_VARS, STRING_ENV_VARS, ActorEnvVars, ApifyEnvVars
46

57

68
class TestConsts:
@@ -19,9 +21,16 @@ def test_env_vars_types_do_not_overlap(self) -> None:
1921
assert not set(first) & set(second)
2022

2123
def test_env_vars_types_defined_for_all_env_vars(self) -> None:
22-
"""Test that all env vars from `ApifyEnvVars` have a defined type."""
24+
"""Test that all env vars from `ApifyEnvVars` and `ActorEnvVars` have a defined type."""
2325
env_vars_from_types = set(
2426
list(BOOL_ENV_VARS) + list(DATETIME_ENV_VARS) + list(FLOAT_ENV_VARS) + list(INTEGER_ENV_VARS) + list(STRING_ENV_VARS),
2527
)
26-
env_vars_from_enum = set(ApifyEnvVars)
27-
assert env_vars_from_types == env_vars_from_enum
28+
env_vars_from_enums = set(ApifyEnvVars).union(set(ActorEnvVars))
29+
assert env_vars_from_types == env_vars_from_enums
30+
31+
def test_env_vars_have_correct_prefix(self) -> None:
32+
"""Test that all env vars from `ApifyEnvVars` and `ActorEnvVars` have the correct prefix."""
33+
for (env_vars_class, prefix) in [(ActorEnvVars, 'ACTOR_'), (ApifyEnvVars, 'APIFY_')]:
34+
env_vars: List[Enum] = list(env_vars_class)
35+
for env_var in env_vars:
36+
assert env_var.value.startswith(prefix) is True

0 commit comments

Comments
 (0)