Fix TypeError on using pathlib.Path as key on FEEDS settings (#5384)

This commit is contained in:
Laerte 2022-02-04 05:57:57 -03:00 committed by GitHub
parent 30d5779ea9
commit fe43411bc4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 1 deletions

View File

@ -375,9 +375,13 @@ class BaseSettings(MutableMapping):
return len(self.attributes)
def _to_dict(self):
return {k: (v._to_dict() if isinstance(v, BaseSettings) else v)
return {self._get_key(k): (v._to_dict() if isinstance(v, BaseSettings) else v)
for k, v in self.items()}
def _get_key(self, key_value):
return (key_value if isinstance(key_value, (bool, float, int, str, type(None)))
else str(key_value))
def copy_to_dict(self):
"""
Make a copy of current settings and convert to a dict.

View File

@ -64,3 +64,7 @@ class CmdlineTest(unittest.TestCase):
settingsdict = json.loads(settingsstr)
self.assertCountEqual(settingsdict.keys(), EXTENSIONS.keys())
self.assertEqual(200, settingsdict[EXT_PATH])
def test_pathlib_path_as_feeds_key(self):
self.assertEqual(self._execute('settings', '--get', 'FEEDS'),
json.dumps({"items.csv": {"format": "csv", "fields": ["price", "name"]}}))

View File

@ -1,5 +1,14 @@
from pathlib import Path
EXTENSIONS = {
'tests.test_cmdline.extensions.TestExtension': 0,
}
TEST1 = 'default'
FEEDS = {
Path('items.csv'): {
'format': 'csv',
'fields': ['price', 'name'],
},
}