mirror of https://github.com/scrapy/scrapy.git
Fix TypeError on using pathlib.Path as key on FEEDS settings (#5384)
This commit is contained in:
parent
30d5779ea9
commit
fe43411bc4
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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"]}}))
|
||||
|
|
|
|||
|
|
@ -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'],
|
||||
},
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue