hunk.code_window:             # Replace slashes by dots
               self.module = dir.replace('/', '.') + '.' + SETTINGS_DEFAULT_NAME + '.' + name
               # Create the directory structure
               dir_path = os.path.join(self.settings_root, dir)
               mkdir_p(dir_path)
               # Add the __init__ for the directories
               # This is required for Python 2.7
               basedir = self.settings_root
               for part in dir.split('/'):
  
hunk.labels: keep keep keep keep keep replace keep keep keep keep keep
hunk.after_edit:             pathlib.Path(dir_path).mkdir(parents=True, exist_ok=True)
  
hunk.file_path: tests/test_logging_config.py
hunk.type: replace
file: /**
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements. See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership. The ASF licenses this file
   * to you under the Apache License, Version 2.0 (the
   * "License"); you may not use this file except in compliance
   * with the License. You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing,
   * software distributed under the License is distributed on an
   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   * KIND, either express or implied. See the License for the
   * specific language governing permissions and limitations
   * under the License.
   */
  
  import { generateTooltipDateTime, converAndFormatUTC, secondsToString } from './datetime-utils';
  import { escapeHtml } from './base';
  
  // Assigning css classes based on state to nodes
  // Initiating the tooltips
  function update_nodes_states(task_instances) {
    $.each(task_instances, function (task_id, ti) {
      $('tspan').filter(function (index) {
        return $(this).text() === task_id;
      })
        .parent().parent().parent().parent()
        .attr("class", "node enter " + (ti.state ? ti.state : "no_status"))
        .attr("data-toggle", "tooltip")
        .attr("data-original-title", function (d) {
          // Tooltip
          const task = tasks[task_id];
          let tt = "";
          if(ti.task_id != undefined) {
            tt +=  "Task_id: " + escapeHtml(task.task_id) + "<br>";
          }
          tt += "Run: " + converAndFormatUTC(task.execution_date) + "<br>";
          if(ti.run_id != undefined) {
            tt += "run_id: <nobr>" + escapeHtml(task.run_id) + "</nobr><br>";
          }
          tt += "Operator: " + escapeHtml(task.task_type) + "<br>";
          tt += "Duration: " + escapeHtml(convertSecsToHumanReadable(ti.duration)) + "<br>";
          tt += "Started: " + escapeHtml(ti.start_date) + "<br>";
          tt += generateTooltipDateTime(ti.start_date, ti.end_date, dagTZ); // dagTZ has been defined in dag.html
          return tt;
        });
    });
  }
  
  function initRefreshButton() {
    d3.select("#refresh_button").on("click",
      function () {
        $("#loading").css("display", "block");
        $("div#svg_container").css("opacity", "0.2");
        $.get(getTaskInstanceURL)
          .done(
            function (task_instances) {
              update_nodes_states(JSON.parse(task_instances));
              $("#loading").hide();
              $("div#svg_container").css("opacity", "1");
              $('#error').hide();
            }
          ).fail(function (jqxhr, textStatus, err) {
          $('#error_msg').html(textStatus + ': ' + err);
          $('#error').show();
          $('#loading').hide();
          $('#chart_section').hide(1000);
          $('#datatable_section').hide(1000);
        });
      }
    );
  }
  
  initRefreshButton();
  update_nodes_states(task_instances);
  