def _build_event_handlers(context, components_dict):
        """
        Builds the event handlers for the application

        :param context: The template context
        :param components_dict: Dictionary containing components by name (and other info)
        """
        config = context.template.template_config
        app_section = config.application_section

        basic_sample_comp = components_dict["basic_sample_comp"]
        app_file_comp = components_dict["app_file_comp"]
        app_dir = components_dict["app_dir"]

        event_handlers = app_section.event_handlers
        if len(event_handlers) > 0:
            components_dict["has_events"] = True
            register_event_handler_def_comp = CodeTemplateComponent(
                "app/code/register_event_handler_def.code.tmpl")
            register_event_handler_def_comp.indent_level = 1
            app_file_comp.add_child(register_event_handler_def_comp)

            file_comp = FileTemplateComponent("eventhandlers.py",
                                              "app/eventhandlers.py.tmpl")
            app_dir.add_child(file_comp)

            for handler_name in event_handlers:
                handler_section = config.get_event_handler_section(
                    handler_name)
                code_comp = CodeTemplateComponent(
                    "app/code/events_event_callback.code.tmpl", {
                        "className": handler_section.class_name,
                        "name": handler_name,
                        "topic": handler_section.topic
                    })
                file_comp.add_child(code_comp)

                code_comp = CodeTemplateComponent(
                    "app/code/register_event_handler.code.tmpl", {
                        "className": handler_section.class_name,
                        "topic": handler_section.topic,
                        "callbackName": handler_name,
                        "separateThread": handler_section.separate_thread
                    })
                code_comp.indent_level = 1
                register_event_handler_def_comp.add_child(code_comp)

                event_code_comp = CodeTemplateComponent(
                    "sample/basic/code/event.code.tmpl", {
                        "topic": handler_section.topic,
                        "callbackName": handler_name
                    })
                event_code_comp.indent_level = 1
                basic_sample_comp.add_child(event_code_comp)
    def _build_services(context, components_dict):
        """
        Builds the services exposed by the application

        :param context: The template context
        :param components_dict: Dictionary containing components by name (and other info)
        """
        config = context.template.template_config
        app_section = config.application_section

        basic_sample_comp = components_dict["basic_sample_comp"]
        app_file_comp = components_dict["app_file_comp"]
        app_dir = components_dict["app_dir"]

        service_names = app_section.services
        requests_file_comp = None
        if len(service_names) > 0:
            components_dict["has_services"] = True
            register_services_def_comp = CodeTemplateComponent(
                "app/code/register_services_def.code.tmpl")
            register_services_def_comp.indent_level = 1
            app_file_comp.add_child(register_services_def_comp)

            for service_name in service_names:
                service = config.get_service_section(service_name)
                service_create_comp = CodeTemplateComponent(
                    "app/code/service_create.code.tmpl", {
                        "serviceType": service.service_type,
                        "serviceName": service_name
                    })
                service_create_comp.indent_level = 1
                register_services_def_comp.add_child(service_create_comp)

                request_handlers = service.request_handlers
                for handler_name in request_handlers:
                    handler_section = config.get_request_handler_section(
                        handler_name)
                    if requests_file_comp is None:
                        requests_file_comp = FileTemplateComponent(
                            "requesthandlers.py",
                            "app/requesthandlers.py.tmpl")
                        app_dir.add_child(requests_file_comp)
                    code_comp = CodeTemplateComponent(
                        "app/code/requests_request_callback.code.tmpl", {
                            "className": handler_section.class_name,
                            "name": handler_name,
                            "topic": handler_section.topic
                        })
                    requests_file_comp.add_child(code_comp)

                    code_comp = CodeTemplateComponent(
                        "app/code/service_add_topic.code.tmpl", {
                            "topic": handler_section.topic,
                            "className": handler_section.class_name,
                            "separateThread": handler_section.separate_thread,
                            "callbackName": handler_name
                        })
                    code_comp.indent_level = 1
                    register_services_def_comp.add_child(code_comp)

                    request_code_comp = CodeTemplateComponent(
                        "sample/basic/code/request.code.tmpl", {
                            "topic": handler_section.topic,
                            "name": handler_name
                        })
                    request_code_comp.indent_level = 1
                    basic_sample_comp.add_child(request_code_comp)

                code_comp = CodeTemplateComponent(
                    "app/code/service_register.code.tmpl", )
                code_comp.indent_level = 1
                register_services_def_comp.add_child(code_comp)