def configure(self, cfg, handler, path="<STR_LIT>"):
<EOL>for name, attr in handler.attributes():<EOL><INDENT>if cfg.get(name) is not None:<EOL><INDENT>continue<EOL><DEDENT>if attr.expected_type not in [list, dict]:<EOL><INDENT>cfg[name] = self.set(handler, attr, name, path, cfg)<EOL><DEDENT>elif attr.default is None and not hasattr(handler, "<STR_LIT>" % name):<EOL><INDENT>self.action_required.append(("<STR_LIT>" % (path, name, attr.help_text)).strip("<STR_LIT:.>"))<EOL><DEDENT><DEDENT>for name, attr in handler.attributes():<EOL><INDENT>if cfg.get(name) is not None:<EOL><INDENT>continue<EOL><DEDENT>if hasattr(handler, "<STR_LIT>" % name):<EOL><INDENT>fn = getattr(handler, "<STR_LIT>" % name)<EOL>fn(self, cfg, "<STR_LIT>"% (path, name))<EOL>if attr.expected_type in [list, dict] and not cfg.get(name):<EOL><INDENT>try:<EOL><INDENT>del cfg[name]<EOL><DEDENT>except KeyError:<EOL><INDENT>pass<EOL><DEDENT><DEDENT><DEDENT><DEDENT>
Start configuration process for the provided handler

Args:
    cfg (dict): config container
    handler (config.Handler class): config handler to use
    path (str): current path in the configuration progress