[3.6] bpo-29623: Make PathLike objects work with ConfigParser.read() (#242) (#432)

(cherry picked from commit 85b8d01c916b482dac937b93ede1e53b1db0361c)

Conflicts:

	Lib/test/test_configparser.py
diff --git a/Lib/configparser.py b/Lib/configparser.py
index af5aca1..230ab2b 100644
--- a/Lib/configparser.py
+++ b/Lib/configparser.py
@@ -143,6 +143,7 @@
 import functools
 import io
 import itertools
+import os
 import re
 import sys
 import warnings
@@ -687,7 +688,7 @@
 
         Return list of successfully read files.
         """
-        if isinstance(filenames, str):
+        if isinstance(filenames, (str, os.PathLike)):
             filenames = [filenames]
         read_ok = []
         for filename in filenames:
@@ -696,6 +697,8 @@
                     self._read(fp, filename)
             except OSError:
                 continue
+            if isinstance(filename, os.PathLike):
+                filename = os.fspath(filename)
             read_ok.append(filename)
         return read_ok
 
diff --git a/Lib/test/test_configparser.py b/Lib/test/test_configparser.py
index 0d06080..72c3f19 100644
--- a/Lib/test/test_configparser.py
+++ b/Lib/test/test_configparser.py
@@ -2,7 +2,7 @@
 import configparser
 import io
 import os
-import sys
+import pathlib
 import textwrap
 import unittest
 import warnings
@@ -721,6 +721,16 @@
         parsed_files = cf.read(file1)
         self.assertEqual(parsed_files, [file1])
         self.assertEqual(cf.get("Foo Bar", "foo"), "newbar")
+        # check when we pass only a Path object:
+        cf = self.newconfig()
+        parsed_files = cf.read(pathlib.Path(file1))
+        self.assertEqual(parsed_files, [file1])
+        self.assertEqual(cf.get("Foo Bar", "foo"), "newbar")
+        # check when we passed both a filename and a Path object:
+        cf = self.newconfig()
+        parsed_files = cf.read([pathlib.Path(file1), file1])
+        self.assertEqual(parsed_files, [file1, file1])
+        self.assertEqual(cf.get("Foo Bar", "foo"), "newbar")
         # check when we pass only missing files:
         cf = self.newconfig()
         parsed_files = cf.read(["nonexistent-file"])