Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit fd2d108

Browse files
authored
chore: define rest of explicit state containers for providers (#13433)
1 parent c1cdd36 commit fd2d108

14 files changed

Lines changed: 73 additions & 4 deletions

File tree

localstack-core/localstack/services/route53/provider.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,16 @@
2626
from localstack.aws.connect import connect_to
2727
from localstack.services.moto import call_moto
2828
from localstack.services.plugins import ServiceLifecycleHook
29+
from localstack.state import StateVisitor
2930

3031

3132
class Route53Provider(Route53Api, ServiceLifecycleHook):
33+
def accept_state_visitor(self, visitor: StateVisitor):
34+
from localstack.services.route53.models import route53_stores
35+
36+
visitor.visit(route53_backends)
37+
visitor.visit(route53_stores)
38+
3239
def create_hosted_zone(
3340
self,
3441
context: RequestContext,

localstack-core/localstack/services/route53resolver/provider.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,18 @@
100100
validate_mutation_protection,
101101
validate_priority,
102102
)
103+
from localstack.state import StateVisitor
103104
from localstack.utils.aws import arns
104105
from localstack.utils.aws.arns import extract_account_id_from_arn, extract_region_from_arn
105106
from localstack.utils.collections import select_from_typed_dict
106107
from localstack.utils.patch import patch
107108

108109

109110
class Route53ResolverProvider(Route53ResolverApi):
111+
def accept_state_visitor(self, visitor: StateVisitor):
112+
visitor.visit(route53resolver_backends)
113+
visitor.visit(route53resolver_stores)
114+
110115
@staticmethod
111116
def get_store(account_id: str, region: str) -> Route53ResolverStore:
112117
return route53resolver_stores[account_id][region]

localstack-core/localstack/services/s3control/provider.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from localstack.aws.forwarder import NotImplementedAvoidFallbackError
1313
from localstack.services.s3.models import s3_stores
1414
from localstack.services.s3control.validation import validate_tags
15+
from localstack.state import StateVisitor
1516
from localstack.utils.tagging import TaggingService
1617

1718

@@ -21,6 +22,11 @@ def __init__(self, message=None):
2122

2223

2324
class S3ControlProvider(S3ControlApi):
25+
def accept_state_visitor(self, visitor: StateVisitor):
26+
from moto.s3control.models import s3control_backends
27+
28+
visitor.visit(s3control_backends)
29+
2430
"""
2531
S3Control is a management interface for S3, and can access some of its internals with no public API
2632
This requires us to access the s3 stores directly

localstack-core/localstack/services/scheduler/provider.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import logging
22
import re
33

4-
from moto.scheduler.models import EventBridgeSchedulerBackend
4+
from moto.scheduler.models import EventBridgeSchedulerBackend, scheduler_backends
55

66
from localstack.aws.api.scheduler import SchedulerApi, ValidationException
77
from localstack.services.events.rule import RULE_SCHEDULE_CRON_REGEX, RULE_SCHEDULE_RATE_REGEX
88
from localstack.services.plugins import ServiceLifecycleHook
9+
from localstack.state import StateVisitor
910
from localstack.utils.patch import patch
1011

1112
LOG = logging.getLogger(__name__)
@@ -17,7 +18,8 @@
1718

1819

1920
class SchedulerProvider(SchedulerApi, ServiceLifecycleHook):
20-
pass
21+
def accept_state_visitor(self, visitor: StateVisitor):
22+
visitor.visit(scheduler_backends)
2123

2224

2325
def _validate_schedule_expression(schedule_expression: str) -> None:

localstack-core/localstack/services/secretsmanager/provider.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
)
6666
from localstack.aws.connect import connect_to
6767
from localstack.services.moto import call_moto
68+
from localstack.state import StateVisitor
6869
from localstack.utils.aws import arns
6970
from localstack.utils.patch import patch
7071
from localstack.utils.time import today_no_time
@@ -105,6 +106,9 @@ def __init__(self):
105106
super().__init__()
106107
apply_patches()
107108

109+
def accept_state_visitor(self, visitor: StateVisitor):
110+
visitor.visit(secretsmanager_backends)
111+
108112
@staticmethod
109113
def get_moto_backend_for_resource(
110114
name_or_arn: str, context: RequestContext

localstack-core/localstack/services/ses/provider.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
from localstack.services.moto import call_moto
6363
from localstack.services.plugins import ServiceLifecycleHook
6464
from localstack.services.ses.models import EmailType, SentEmail, SentEmailBody
65+
from localstack.state import StateVisitor
6566
from localstack.utils.aws import arns
6667
from localstack.utils.files import mkdir
6768
from localstack.utils.strings import long_uid, to_str
@@ -177,6 +178,9 @@ def register_ses_api_resource():
177178

178179

179180
class SesProvider(SesApi, ServiceLifecycleHook):
181+
def accept_state_visitor(self, visitor: StateVisitor):
182+
visitor.visit(ses_backends)
183+
180184
#
181185
# Lifecycle Hooks
182186
#

localstack-core/localstack/services/sns/provider.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
from localstack.utils.collections import PaginatedList, select_from_typed_dict
8787
from localstack.utils.strings import short_uid, to_bytes, to_str
8888

89+
from ...state import StateVisitor
8990
from .analytics import internal_api_calls
9091

9192
# set up logger
@@ -118,6 +119,10 @@ def __init__(self) -> None:
118119
self._publisher = PublishDispatcher()
119120
self._signature_cert_pem: str = SNS_SERVER_CERT
120121

122+
def accept_state_visitor(self, visitor: StateVisitor):
123+
visitor.visit(sns_backends)
124+
visitor.visit(sns_stores)
125+
121126
def on_before_stop(self):
122127
self._publisher.shutdown()
123128

localstack-core/localstack/services/sns/v2/provider.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118
parse_and_validate_topic_arn,
119119
validate_subscription_attribute,
120120
)
121+
from localstack.state import StateVisitor
121122
from localstack.utils.aws.arns import (
122123
extract_account_id_from_arn,
123124
extract_region_from_arn,
@@ -142,6 +143,9 @@ def __init__(self) -> None:
142143
self._publisher = PublishDispatcher()
143144
self._signature_cert_pem: str = SNS_SERVER_CERT
144145

146+
def accept_state_visitor(self, visitor: StateVisitor):
147+
visitor.visit(sns_stores)
148+
145149
def on_before_stop(self):
146150
self._publisher.shutdown()
147151

localstack-core/localstack/services/sqs/provider.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
parse_queue_url,
102102
)
103103
from localstack.services.stores import AccountRegionBundle
104+
from localstack.state import StateVisitor
104105
from localstack.utils.aws.arns import parse_arn
105106
from localstack.utils.bootstrap import is_api_enabled
106107
from localstack.utils.cloudwatch.cloudwatch_util import (
@@ -659,6 +660,9 @@ def __init__(self) -> None:
659660
self._router_rules = []
660661
self._init_cloudwatch_metrics_reporting()
661662

663+
def accept_state_visitor(self, visitor: StateVisitor):
664+
visitor.visit(sqs_stores)
665+
662666
@staticmethod
663667
def get_store(account_id: str, region: str) -> SqsStore:
664668
return sqs_stores[account_id][region]

localstack-core/localstack/services/ssm/provider.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
)
7979
from localstack.aws.connect import connect_to
8080
from localstack.services.moto import call_moto, call_moto_with_request
81+
from localstack.state import StateVisitor
8182
from localstack.utils.aws.arns import extract_resource_from_arn, is_arn
8283
from localstack.utils.bootstrap import is_api_enabled
8384
from localstack.utils.collections import remove_attributes
@@ -105,6 +106,11 @@ def __init__(self):
105106

106107
# TODO: check if _normalize_name(..) calls are still required here
107108
class SsmProvider(SsmApi, ABC):
109+
def accept_state_visitor(self, visitor: StateVisitor):
110+
from moto.ssm.models import ssm_backends
111+
112+
visitor.visit(ssm_backends)
113+
108114
def get_parameters(
109115
self,
110116
context: RequestContext,

0 commit comments

Comments
 (0)