@@ -42,9 +42,9 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
42
42
43
43
return map_fn (env_value )
44
44
45
- _EQUALS_TRUE = lambda value : value .lower () == 'true'
45
+ _AS_BOOL = lambda value : value .lower () == 'true'
46
46
_AS_INT = lambda value : int (value )
47
- _SPLIT_ON_SPACE = lambda value : list (filter (None , value .split (' ' )))
47
+ _AS_LIST = lambda value : list (filter (None , value .split (' ' )))
48
48
49
49
_BASE_DIR = dirname (dirname (abspath (__file__ )))
50
50
@@ -73,7 +73,7 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
73
73
# Database connection SSLMODE
74
74
'CONN_MAX_AGE' : _environ_get_and_map ('DB_CONN_MAX_AGE' , '300' , _AS_INT ),
75
75
# Max database connection age
76
- 'DISABLE_SERVER_SIDE_CURSORS' : _environ_get_and_map ('DB_DISABLE_SERVER_SIDE_CURSORS' , 'False' , _EQUALS_TRUE ),
76
+ 'DISABLE_SERVER_SIDE_CURSORS' : _environ_get_and_map ('DB_DISABLE_SERVER_SIDE_CURSORS' , 'False' , _AS_BOOL ),
77
77
# Disable the use of server-side cursors transaction pooling
78
78
}
79
79
@@ -86,16 +86,16 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
86
86
'PORT' : _environ_get_and_map ('REDIS_PORT' , 6379 , _AS_INT ),
87
87
'PASSWORD' : _read_secret ('redis_password' , environ .get ('REDIS_PASSWORD' , '' )),
88
88
'DATABASE' : _environ_get_and_map ('REDIS_DATABASE' , 0 , _AS_INT ),
89
- 'SSL' : _environ_get_and_map ('REDIS_SSL' , 'False' , _EQUALS_TRUE ),
90
- 'INSECURE_SKIP_TLS_VERIFY' : _environ_get_and_map ('REDIS_INSECURE_SKIP_TLS_VERIFY' , 'False' , _EQUALS_TRUE ),
89
+ 'SSL' : _environ_get_and_map ('REDIS_SSL' , 'False' , _AS_BOOL ),
90
+ 'INSECURE_SKIP_TLS_VERIFY' : _environ_get_and_map ('REDIS_INSECURE_SKIP_TLS_VERIFY' , 'False' , _AS_BOOL ),
91
91
},
92
92
'caching' : {
93
93
'HOST' : environ .get ('REDIS_CACHE_HOST' , environ .get ('REDIS_HOST' , 'localhost' )),
94
94
'PORT' : _environ_get_and_map ('REDIS_CACHE_PORT' , environ .get ('REDIS_PORT' , '6379' ), _AS_INT ),
95
95
'PASSWORD' : _read_secret ('redis_cache_password' , environ .get ('REDIS_CACHE_PASSWORD' , environ .get ('REDIS_PASSWORD' , '' ))),
96
96
'DATABASE' : _environ_get_and_map ('REDIS_CACHE_DATABASE' , '1' , _AS_INT ),
97
- 'SSL' : _environ_get_and_map ('REDIS_CACHE_SSL' , environ .get ('REDIS_SSL' , 'False' ), _EQUALS_TRUE ),
98
- 'INSECURE_SKIP_TLS_VERIFY' : _environ_get_and_map ('REDIS_CACHE_INSECURE_SKIP_TLS_VERIFY' , environ .get ('REDIS_INSECURE_SKIP_TLS_VERIFY' , 'False' ), _EQUALS_TRUE ),
97
+ 'SSL' : _environ_get_and_map ('REDIS_CACHE_SSL' , environ .get ('REDIS_SSL' , 'False' ), _AS_BOOL ),
98
+ 'INSECURE_SKIP_TLS_VERIFY' : _environ_get_and_map ('REDIS_CACHE_INSECURE_SKIP_TLS_VERIFY' , environ .get ('REDIS_INSECURE_SKIP_TLS_VERIFY' , 'False' ), _AS_BOOL ),
99
99
},
100
100
}
101
101
@@ -119,7 +119,7 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
119
119
# ]
120
120
121
121
if 'ALLOWED_URL_SCHEMES' in environ :
122
- ALLOWED_URL_SCHEMES = _environ_get_and_map ('ALLOWED_URL_SCHEMES' , None , _SPLIT_ON_SPACE )
122
+ ALLOWED_URL_SCHEMES = _environ_get_and_map ('ALLOWED_URL_SCHEMES' , None , _AS_LIST )
123
123
124
124
# Optionally display a persistent banner at the top and/or bottom of every page. HTML is allowed. To display the same
125
125
# content in both banners, define BANNER_TOP and set BANNER_BOTTOM = BANNER_TOP.
@@ -147,28 +147,28 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
147
147
# API Cross-Origin Resource Sharing (CORS) settings. If CORS_ORIGIN_ALLOW_ALL is set to True, all origins will be
148
148
# allowed. Otherwise, define a list of allowed origins using either CORS_ORIGIN_WHITELIST or
149
149
# CORS_ORIGIN_REGEX_WHITELIST. For more information, see https://github.com/ottoyiu/django-cors-headers
150
- CORS_ORIGIN_ALLOW_ALL = _environ_get_and_map ('CORS_ORIGIN_ALLOW_ALL' , 'False' , _EQUALS_TRUE )
151
- CORS_ORIGIN_WHITELIST = _environ_get_and_map ('CORS_ORIGIN_WHITELIST' , 'https://localhost' , _SPLIT_ON_SPACE )
152
- CORS_ORIGIN_REGEX_WHITELIST = [re .compile (r ) for r in _environ_get_and_map ('CORS_ORIGIN_REGEX_WHITELIST' , '' , _SPLIT_ON_SPACE )]
150
+ CORS_ORIGIN_ALLOW_ALL = _environ_get_and_map ('CORS_ORIGIN_ALLOW_ALL' , 'False' , _AS_BOOL )
151
+ CORS_ORIGIN_WHITELIST = _environ_get_and_map ('CORS_ORIGIN_WHITELIST' , 'https://localhost' , _AS_LIST )
152
+ CORS_ORIGIN_REGEX_WHITELIST = [re .compile (r ) for r in _environ_get_and_map ('CORS_ORIGIN_REGEX_WHITELIST' , '' , _AS_LIST )]
153
153
154
154
# Set to True to enable server debugging. WARNING: Debugging introduces a substantial performance penalty and may reveal
155
155
# sensitive information about your installation. Only enable debugging while performing testing.
156
156
# Never enable debugging on a production system.
157
- DEBUG = _environ_get_and_map ('DEBUG' , 'False' , _EQUALS_TRUE )
157
+ DEBUG = _environ_get_and_map ('DEBUG' , 'False' , _AS_BOOL )
158
158
159
159
# This parameter serves as a safeguard to prevent some potentially dangerous behavior,
160
160
# such as generating new database schema migrations.
161
161
# Set this to True only if you are actively developing the NetBox code base.
162
- DEVELOPER = _environ_get_and_map ('DEVELOPER' , 'False' , _EQUALS_TRUE )
162
+ DEVELOPER = _environ_get_and_map ('DEVELOPER' , 'False' , _AS_BOOL )
163
163
164
164
# Email settings
165
165
EMAIL = {
166
166
'SERVER' : environ .get ('EMAIL_SERVER' , 'localhost' ),
167
167
'PORT' : _environ_get_and_map ('EMAIL_PORT' , 25 , _AS_INT ),
168
168
'USERNAME' : environ .get ('EMAIL_USERNAME' , '' ),
169
169
'PASSWORD' : _read_secret ('email_password' , environ .get ('EMAIL_PASSWORD' , '' )),
170
- 'USE_SSL' : _environ_get_and_map ('EMAIL_USE_SSL' , 'False' , _EQUALS_TRUE ),
171
- 'USE_TLS' : _environ_get_and_map ('EMAIL_USE_TLS' , 'False' , _EQUALS_TRUE ),
170
+ 'USE_SSL' : _environ_get_and_map ('EMAIL_USE_SSL' , 'False' , _AS_BOOL ),
171
+ 'USE_TLS' : _environ_get_and_map ('EMAIL_USE_TLS' , 'False' , _AS_BOOL ),
172
172
'SSL_CERTFILE' : environ .get ('EMAIL_SSL_CERTFILE' , '' ),
173
173
'SSL_KEYFILE' : environ .get ('EMAIL_SSL_KEYFILE' , '' ),
174
174
'TIMEOUT' : _environ_get_and_map ('EMAIL_TIMEOUT' , 10 , _AS_INT ), # seconds
@@ -178,11 +178,11 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
178
178
# Enforcement of unique IP space can be toggled on a per-VRF basis. To enforce unique IP space within the global table
179
179
# (all prefixes and IP addresses not assigned to a VRF), set ENFORCE_GLOBAL_UNIQUE to True.
180
180
if 'ENFORCE_GLOBAL_UNIQUE' in environ :
181
- ENFORCE_GLOBAL_UNIQUE = _environ_get_and_map ('ENFORCE_GLOBAL_UNIQUE' , None , _EQUALS_TRUE )
181
+ ENFORCE_GLOBAL_UNIQUE = _environ_get_and_map ('ENFORCE_GLOBAL_UNIQUE' , None , _AS_BOOL )
182
182
183
183
# Exempt certain models from the enforcement of view permissions. Models listed here will be viewable by all users and
184
184
# by anonymous users. List models in the form `<app>.<model>`. Add '*' to this list to exempt all models.
185
- EXEMPT_VIEW_PERMISSIONS = _environ_get_and_map ('EXEMPT_VIEW_PERMISSIONS' , '' , _SPLIT_ON_SPACE )
185
+ EXEMPT_VIEW_PERMISSIONS = _environ_get_and_map ('EXEMPT_VIEW_PERMISSIONS' , '' , _AS_LIST )
186
186
187
187
# HTTP proxies NetBox should use when sending outbound HTTP requests (e.g. for webhooks).
188
188
# HTTP_PROXIES = {
@@ -192,31 +192,31 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
192
192
193
193
# IP addresses recognized as internal to the system. The debugging toolbar will be available only to clients accessing
194
194
# NetBox from an internal IP.
195
- INTERNAL_IPS = _environ_get_and_map ('INTERNAL_IPS' , '127.0.0.1 ::1' , _SPLIT_ON_SPACE )
195
+ INTERNAL_IPS = _environ_get_and_map ('INTERNAL_IPS' , '127.0.0.1 ::1' , _AS_LIST )
196
196
197
197
# Enable GraphQL API.
198
198
if 'GRAPHQL_ENABLED' in environ :
199
- GRAPHQL_ENABLED = _environ_get_and_map ('GRAPHQL_ENABLED' , None , _EQUALS_TRUE )
199
+ GRAPHQL_ENABLED = _environ_get_and_map ('GRAPHQL_ENABLED' , None , _AS_BOOL )
200
200
201
201
# # Enable custom logging. Please see the Django documentation for detailed guidance on configuring custom logs:
202
202
# # https://docs.djangoproject.com/en/stable/topics/logging/
203
203
# LOGGING = {}
204
204
205
205
# Automatically reset the lifetime of a valid session upon each authenticated request. Enables users to remain
206
206
# authenticated to NetBox indefinitely.
207
- LOGIN_PERSISTENCE = _environ_get_and_map ('LOGIN_PERSISTENCE' , 'False' , _EQUALS_TRUE )
207
+ LOGIN_PERSISTENCE = _environ_get_and_map ('LOGIN_PERSISTENCE' , 'False' , _AS_BOOL )
208
208
209
209
# Setting this to True will permit only authenticated users to access any part of NetBox. By default, anonymous users
210
210
# are permitted to access most data in NetBox (excluding secrets) but not make any changes.
211
- LOGIN_REQUIRED = _environ_get_and_map ('LOGIN_REQUIRED' , 'False' , _EQUALS_TRUE )
211
+ LOGIN_REQUIRED = _environ_get_and_map ('LOGIN_REQUIRED' , 'False' , _AS_BOOL )
212
212
213
213
# The length of time (in seconds) for which a user will remain logged into the web UI before being prompted to
214
214
# re-authenticate. (Default: 1209600 [14 days])
215
215
LOGIN_TIMEOUT = _environ_get_and_map ('LOGIN_TIMEOUT' , 1209600 , _AS_INT )
216
216
217
217
# Setting this to True will display a "maintenance mode" banner at the top of every page.
218
218
if 'MAINTENANCE_MODE' in environ :
219
- MAINTENANCE_MODE = _environ_get_and_map ('MAINTENANCE_MODE' , None , _EQUALS_TRUE )
219
+ MAINTENANCE_MODE = _environ_get_and_map ('MAINTENANCE_MODE' , None , _AS_BOOL )
220
220
221
221
# Maps provider
222
222
if 'MAPS_URL' in environ :
@@ -233,7 +233,7 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
233
233
MEDIA_ROOT = environ .get ('MEDIA_ROOT' , join (_BASE_DIR , 'media' ))
234
234
235
235
# Expose Prometheus monitoring metrics at the HTTP endpoint '/metrics'
236
- METRICS_ENABLED = _environ_get_and_map ('METRICS_ENABLED' , 'False' , _EQUALS_TRUE )
236
+ METRICS_ENABLED = _environ_get_and_map ('METRICS_ENABLED' , 'False' , _AS_BOOL )
237
237
238
238
# Credentials that NetBox will uses to authenticate to devices when connecting via NAPALM.
239
239
if 'NAPALM_USERNAME' in environ :
@@ -264,7 +264,7 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
264
264
# When determining the primary IP address for a device, IPv6 is preferred over IPv4 by default. Set this to True to
265
265
# prefer IPv4 instead.
266
266
if 'PREFER_IPV4' in environ :
267
- PREFER_IPV4 = _environ_get_and_map ('PREFER_IPV4' , None , _EQUALS_TRUE )
267
+ PREFER_IPV4 = _environ_get_and_map ('PREFER_IPV4' , None , _AS_BOOL )
268
268
269
269
# The default value for the amperage field when creating new power feeds.
270
270
if 'POWERFEED_DEFAULT_AMPERAGE' in environ :
@@ -285,11 +285,11 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
285
285
RACK_ELEVATION_DEFAULT_UNIT_WIDTH = _environ_get_and_map ('RACK_ELEVATION_DEFAULT_UNIT_WIDTH' , None , _AS_INT )
286
286
287
287
# Remote authentication support
288
- REMOTE_AUTH_ENABLED = _environ_get_and_map ('REMOTE_AUTH_ENABLED' , 'False' , _EQUALS_TRUE )
288
+ REMOTE_AUTH_ENABLED = _environ_get_and_map ('REMOTE_AUTH_ENABLED' , 'False' , _AS_BOOL )
289
289
REMOTE_AUTH_BACKEND = environ .get ('REMOTE_AUTH_BACKEND' , 'netbox.authentication.RemoteUserBackend' )
290
290
REMOTE_AUTH_HEADER = environ .get ('REMOTE_AUTH_HEADER' , 'HTTP_REMOTE_USER' )
291
- REMOTE_AUTH_AUTO_CREATE_USER = _environ_get_and_map ('REMOTE_AUTH_AUTO_CREATE_USER' , 'True' , _EQUALS_TRUE )
292
- REMOTE_AUTH_DEFAULT_GROUPS = _environ_get_and_map ('REMOTE_AUTH_DEFAULT_GROUPS' , '' , _SPLIT_ON_SPACE )
291
+ REMOTE_AUTH_AUTO_CREATE_USER = _environ_get_and_map ('REMOTE_AUTH_AUTO_CREATE_USER' , 'True' , _AS_BOOL )
292
+ REMOTE_AUTH_DEFAULT_GROUPS = _environ_get_and_map ('REMOTE_AUTH_DEFAULT_GROUPS' , '' , _AS_LIST )
293
293
# REMOTE_AUTH_DEFAULT_PERMISSIONS = {}
294
294
295
295
# This repository is used to check whether there is a new release of NetBox available. Set to None to disable the
@@ -314,7 +314,7 @@ def _environ_get_and_map(variable_name: str, default: str | None = None, map_fn:
314
314
# Cross-Site-Request-Forgery-Attack settings. If Netbox is sitting behind a reverse proxy, you might need to set the CSRF_TRUSTED_ORIGINS flag.
315
315
# Django 4.0 requires to specify the URL Scheme in this setting. An example environment variable could be specified like:
316
316
# CSRF_TRUSTED_ORIGINS=https://demo.netbox.dev http://demo.netbox.dev
317
- CSRF_TRUSTED_ORIGINS = _environ_get_and_map ('CSRF_TRUSTED_ORIGINS' , '' , _SPLIT_ON_SPACE )
317
+ CSRF_TRUSTED_ORIGINS = _environ_get_and_map ('CSRF_TRUSTED_ORIGINS' , '' , _AS_LIST )
318
318
319
319
# The name to use for the session cookie.
320
320
SESSION_COOKIE_NAME = environ .get ('SESSION_COOKIE_NAME' , 'sessionid' )
0 commit comments