1
1
from dataclasses import dataclass
2
- from typing import Any , Callable
2
+ from typing import Any , Callable , Optional
3
+ from uuid import uuid4
3
4
4
5
import boto3
5
6
@@ -12,9 +13,15 @@ def get_session() -> Any:
12
13
return session
13
14
14
15
16
+ def get_tmp_html_key () -> str :
17
+ """This function can be overridden to provide a custom storage_location for temporary html files"""
18
+ return f"tmp/{ uuid4 ()} .html"
19
+
20
+
15
21
def delete_key (bucket_name : str , path : str ) -> None :
16
22
"""This function can be overriden to provide a custom delete key function"""
17
- session = config .get_session ()
23
+ global config
24
+ session = config .get_session_fn ()
18
25
s3_client = session .client ("s3" )
19
26
try :
20
27
s3_client .delete_object (Bucket = bucket_name , Key = path )
@@ -23,12 +30,13 @@ def delete_key(bucket_name: str, path: str) -> None:
23
30
24
31
25
32
def configure_splat (
26
- function_region : str = "ap-southeast-2" ,
27
- function_name : str = "splat-prod" ,
28
- default_bucket_name : str = "" ,
29
- default_tagging : str = "ExpireAfter=1w" ,
30
- get_session_fn : Callable [[], Any ] = get_session ,
31
- delete_key_fn : Callable [[str , str ], None ] = delete_key ,
33
+ function_region : Optional [str ] = None ,
34
+ function_name : Optional [str ] = None ,
35
+ default_bucket_name : Optional [str ] = None ,
36
+ default_tagging : Optional [str ] = None ,
37
+ get_session_fn : Optional [Callable [[], Any ]] = None ,
38
+ get_tmp_html_key_fn : Optional [Callable [[str ], str ]] = None ,
39
+ delete_key_fn : Optional [Callable [[str , str ], None ]] = None ,
32
40
):
33
41
"""Configure the splat function.
34
42
@@ -40,14 +48,20 @@ def configure_splat(
40
48
:param default_key_delete_fn: a function that deletes a key from s3
41
49
"""
42
50
global config
43
- config = Config (
44
- function_region = function_region ,
45
- function_name = function_name ,
46
- default_bucket_name = default_bucket_name ,
47
- default_tagging = default_tagging ,
48
- get_session_fn = get_session_fn ,
49
- delete_key_fn = delete_key_fn ,
50
- )
51
+ if function_region is not None :
52
+ config .function_region = function_region
53
+ if function_name is not None :
54
+ config .function_name = function_name
55
+ if default_bucket_name is not None :
56
+ config .default_bucket_name = default_bucket_name
57
+ if default_tagging is not None :
58
+ config .default_tagging = default_tagging
59
+ if get_session_fn is not None :
60
+ config .get_session_fn = get_session_fn
61
+ if get_tmp_html_key_fn is not None :
62
+ config .get_tmp_html_key_fn = get_tmp_html_key_fn
63
+ if delete_key_fn is not None :
64
+ config .delete_key_fn = delete_key_fn
51
65
52
66
53
67
@dataclass
@@ -58,7 +72,18 @@ class Config:
58
72
default_tagging : str
59
73
60
74
get_session_fn : Callable [[], Any ]
75
+ get_tmp_html_key_fn : Callable [[str ], str ]
61
76
delete_key_fn : Callable [[str , str ], None ]
62
77
63
78
64
79
configure_splat ()
80
+
81
+ config = Config (
82
+ function_region = "ap-southeast-2" ,
83
+ function_name = "splat-prod" ,
84
+ default_bucket_name = "" ,
85
+ default_tagging = "ExpireAfter=1w" ,
86
+ get_session_fn = get_session ,
87
+ get_tmp_html_key_fn = get_tmp_html_key ,
88
+ delete_key_fn = delete_key ,
89
+ )
0 commit comments