Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

"""LICENSE 

Copyright 2019 Hermann Krumrey <hermann@krumreyh.com> 

 

This file is part of status-page. 

 

status-page is free software: you can redistribute it and/or modify 

it under the terms of the GNU General Public License as published by 

the Free Software Foundation, either version 3 of the License, or 

(at your option) any later version. 

 

status-page is distributed in the hope that it will be useful, 

but WITHOUT ANY WARRANTY; without even the implied warranty of 

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 

GNU General Public License for more details. 

 

You should have received a copy of the GNU General Public License 

along with status-page. If not, see <http://www.gnu.org/licenses/>. 

LICENSE""" 

 

import os 

import json 

from typing import Optional 

from status_page import app 

 

 

def resolve_env_variable( 

env_key: str, _type: type = str, default: object = None 

) -> Optional[object]: 

""" 

Resolves an environment key. 

A non-existant environment key will lead to a KeyError unless the app 

is in testing mode, in which case database-related variables won't 

cause a KeyError. 

KeyErrors can also be provided using the 'default' argument 

:param env_key: The environment key to resolve 

:param _type: The type of the environment variable 

:param default: An optional default value 

:return: The resolved environment variable. 

None if the app is in testing mode and the variable is db-related 

""" 

using_sqlite = app.testing or app.config["ENV"] == "development" 

try: 

return _type(os.environ[env_key]) 

except KeyError as e: 

45 ↛ 47line 45 didn't jump to line 47, because the condition on line 45 was never false if default is not None: 

return default 

elif using_sqlite and env_key.startswith("DB_"): 

return None 

else: 

raise e 

 

 

def load_secrets(secrets_file: str): 

""" 

Loads a JSON file filled with configuration details and secrets into 

os.environ 

:param secrets_file: The file to load 

:return: None 

""" 

if os.path.isfile(secrets_file): 

with open(secrets_file, "r") as f: 

secrets = json.load(f) 

 

for secret, value in secrets.items(): 

os.environ[secret] = str(value)