@@ -34,7 +34,7 @@ class Application(MutableMapping):
3434 ATTRS = frozenset ([
3535 'logger' , '_debug' , '_router' , '_loop' , '_handler_args' ,
3636 '_middlewares' , '_middlewares_handlers' , '_run_middlewares' ,
37- '_state' , '_frozen' , '_subapps' ,
37+ '_state' , '_frozen' , '_pre_frozen' , ' _subapps' ,
3838 '_on_response_prepare' , '_on_startup' , '_on_shutdown' ,
3939 '_on_cleanup' , '_client_max_size' , '_cleanup_ctx' ])
4040
@@ -68,6 +68,7 @@ def __init__(self, *,
6868 self ._run_middlewares = None # initialized on freezing
6969 self ._state = {}
7070 self ._frozen = False
71+ self ._pre_frozen = False
7172 self ._subapps = []
7273
7374 self ._on_response_prepare = Signal (self ) # type: _RespPrepareSignal
@@ -146,14 +147,14 @@ def _set_loop(self, loop):
146147 subapp ._set_loop (loop )
147148
148149 @property
149- def frozen (self ) -> bool :
150- return self ._frozen
150+ def pre_frozen (self ) -> bool :
151+ return self ._pre_frozen
151152
152- def freeze (self ) -> None :
153- if self ._frozen :
153+ def pre_freeze (self ) -> None :
154+ if self ._pre_frozen :
154155 return
155156
156- self ._frozen = True
157+ self ._pre_frozen = True
157158 self ._middlewares .freeze ()
158159 self ._router .freeze ()
159160 self ._on_response_prepare .freeze ()
@@ -171,10 +172,23 @@ def freeze(self) -> None:
171172 self ._run_middlewares = True if self .middlewares else False
172173
173174 for subapp in self ._subapps :
174- subapp .freeze ()
175+ subapp .pre_freeze ()
175176 self ._run_middlewares = \
176177 self ._run_middlewares or subapp ._run_middlewares
177178
179+ @property
180+ def frozen (self ) -> bool :
181+ return self ._frozen
182+
183+ def freeze (self ) -> None :
184+ if self ._frozen :
185+ return
186+
187+ self .pre_freeze ()
188+ self ._frozen = True
189+ for subapp in self ._subapps :
190+ subapp .freeze ()
191+
178192 @property
179193 def debug (self ) -> bool :
180194 return self ._debug
@@ -208,7 +222,7 @@ def add_subapp(self, prefix: str, subapp: 'Application'):
208222 self .router .register_resource (resource )
209223 self ._reg_subapp_signals (subapp )
210224 self ._subapps .append (subapp )
211- subapp .freeze ()
225+ subapp .pre_freeze ()
212226 if self ._loop is not None :
213227 subapp ._set_loop (self ._loop )
214228 return resource
0 commit comments