@@ -1522,6 +1522,7 @@ cdef class ConfigurationOption(Provider):
15221522 self ._root = root
15231523 self ._children = {}
15241524 self ._required = required
1525+ self ._required_option = None
15251526 self ._cache = UNDEFINED
15261527 super ().__init__()
15271528
@@ -1537,6 +1538,7 @@ cdef class ConfigurationOption(Provider):
15371538 copied._root = deepcopy(self ._root, memo)
15381539 copied._children = deepcopy(self ._children, memo)
15391540 copied._required = self ._required
1541+ copied._required_option = deepcopy(self ._required_option, memo)
15401542 self ._copy_overridings(copied, memo)
15411543 return copied
15421544
@@ -1604,7 +1606,11 @@ cdef class ConfigurationOption(Provider):
16041606 return TypedConfigurationOption(callback, self , * args, ** kwargs)
16051607
16061608 def required (self ):
1607- return self .__class__ (self ._name, self ._root, required = True )
1609+ if self ._required:
1610+ return self
1611+ if self ._required_option is None :
1612+ self ._required_option = self .__class__ (self ._name, self ._root, required = True )
1613+ return self ._required_option
16081614
16091615 def is_required (self ):
16101616 return self ._required
@@ -1626,6 +1632,9 @@ cdef class ConfigurationOption(Provider):
16261632 for provider in self ._children.values():
16271633 provider.reset_cache()
16281634
1635+ if self ._required_option is not None :
1636+ self ._required_option.reset_cache()
1637+
16291638 for provider in self .overrides:
16301639 if isinstance (provider, (Configuration, ConfigurationOption)):
16311640 provider.reset_cache()
0 commit comments