1
1
import json
2
2
import logging
3
3
from datetime import datetime , timezone
4
+ from typing import Self
4
5
5
6
from botocore .client import BaseClient
6
7
@@ -42,33 +43,42 @@ class ArchiveService:
42
43
rule_name : RuleName
43
44
target_id : TargetId
44
45
45
- def __init__ (
46
- self ,
46
+ def __init__ (self , archive : Archive ):
47
+ self .archive = archive
48
+ self .set_state (ArchiveState .CREATING )
49
+ self .set_creation_time ()
50
+ self .client : BaseClient = self ._initialize_client ()
51
+ self .event_bus_name : EventBusName = extract_event_bus_name (archive .event_source_arn )
52
+ self .set_state (ArchiveState .ENABLED )
53
+ self .rule_name = f"Events-Archive-{ self .archive_name } "
54
+ self .target_id = f"Events-Archive-{ self .archive_name } "
55
+
56
+ @classmethod
57
+ def create_archive_service (
58
+ cls ,
47
59
archive_name : ArchiveName ,
48
60
region : str ,
49
61
account_id : str ,
50
62
event_source_arn : Arn ,
51
63
description : ArchiveDescription ,
52
64
event_pattern : EventPattern ,
53
65
retention_days : RetentionDays ,
54
- ):
55
- self .archive = Archive (
56
- archive_name ,
57
- region ,
58
- account_id ,
59
- event_source_arn ,
60
- description ,
61
- event_pattern ,
62
- retention_days ,
66
+ ) -> Self :
67
+ return cls (
68
+ Archive (
69
+ archive_name ,
70
+ region ,
71
+ account_id ,
72
+ event_source_arn ,
73
+ description ,
74
+ event_pattern ,
75
+ retention_days ,
76
+ )
63
77
)
64
- self .set_state (ArchiveState .CREATING )
65
- self .set_creation_time ()
66
- self .client : BaseClient = self ._initialize_client ()
67
- self .event_bus_name : EventBusName = extract_event_bus_name (event_source_arn )
68
78
69
- self . rule_name : RuleName = self . _create_archive_rule ()
70
- self .target_id : TargetId = self . _create_archive_target ()
71
- self .set_state ( ArchiveState . ENABLED )
79
+ def register_archive_rule_and_targets ( self ):
80
+ self ._create_archive_rule ()
81
+ self ._create_archive_target ( )
72
82
73
83
def __getattr__ (self , name ):
74
84
return getattr (self .archive , name )
@@ -133,8 +143,7 @@ def _initialize_client(self) -> BaseClient:
133
143
134
144
def _create_archive_rule (
135
145
self ,
136
- ) -> RuleName :
137
- rule_name = f"Events-Archive-{ self .name } "
146
+ ):
138
147
default_event_pattern = {
139
148
"replay-name" : [{"exists" : False }],
140
149
}
@@ -144,25 +153,22 @@ def _create_archive_rule(
144
153
else :
145
154
updated_event_pattern = default_event_pattern
146
155
self .client .put_rule (
147
- Name = rule_name ,
156
+ Name = self . rule_name ,
148
157
EventBusName = self .event_bus_name ,
149
158
EventPattern = json .dumps (updated_event_pattern ),
150
159
)
151
- return rule_name
152
160
153
161
def _create_archive_target (
154
162
self ,
155
- ) -> TargetId :
163
+ ):
156
164
"""Creates a target for the archive rule. The target is required for accessing parameters
157
165
from the provider during sending of events to the target but it is not invoked
158
166
because events are put to the archive directly to not overload the gateway"""
159
- target_id = f"Events-Archive-{ self .name } "
160
167
self .client .put_targets (
161
168
Rule = self .rule_name ,
162
169
EventBusName = self .event_bus_name ,
163
- Targets = [{"Id" : target_id , "Arn" : self .arn }],
170
+ Targets = [{"Id" : self . target_id , "Arn" : self .arn }],
164
171
)
165
- return target_id
166
172
167
173
def _normalize_datetime (self , dt : datetime ) -> datetime :
168
174
return dt .replace (second = 0 , microsecond = 0 )
0 commit comments