Skip to content

Commit f68bcbe

Browse files
authored
Merge pull request #65 from RyouMon/refactor-config
Save files to FAVORS_HOME by default
2 parents 29d2ad9 + 62b7dc5 commit f68bcbe

File tree

5 files changed

+34
-19
lines changed

5 files changed

+34
-19
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@ yandere:
155155
```
156156
157157
## Download location
158-
By default, pictures will download to working directory.
159-
If you want to change download location, you can add FILES_STORE option to config.
158+
By default, pictures will download to `${FAVORS_HOME}/{site_name}`
159+
If you want to change download location, you can update FILES_STORE.
160160
For example, if you want save pixiv files to `pictures/a`, and want save yandere files to `pictures/b`, you can modify config file like this:
161161
```yaml
162162
pixiv:

src/favorites_crawler/commands/crawl.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def crawl(name, **kwargs):
7272
"""
7373
spider = spider_loader.load(name)
7474
favors_home = os.getenv('FAVORS_HOME', DEFAULT_FAVORS_HOME)
75-
overwrite_spider_settings(spider, scrapy_settings, load_config(favors_home))
75+
overwrite_spider_settings(spider, favors_home, load_config(favors_home))
7676
process = CrawlerProcess(scrapy_settings)
7777
process.crawl(spider, **kwargs)
7878
for crawler in process.crawlers:
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
DEFAULT_FAVORS_HOME = '~/.favorites_crawler'
1+
import os
2+
3+
DEFAULT_FAVORS_HOME = os.path.join('~', '.favorites_crawler')

src/favorites_crawler/utils/config.py

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import os
2-
import yaml
32
from copy import deepcopy
43

4+
import yaml
5+
56

67
DEFAULT_CONFIG = {
78
'global': {
@@ -10,28 +11,28 @@
1011
'EXIF_TOOL_EXECUTABLE': None,
1112
},
1213
'pixiv': {
13-
'FILES_STORE': 'favorites_crawler_files/pixiv',
14+
'FILES_STORE': os.path.join('$FAVORS_HOME', 'pixiv'),
1415
'USER_ID': '',
1516
'ACCESS_TOKEN': '',
1617
'REFRESH_TOKEN': '',
1718
},
1819
'yandere': {
19-
'FILES_STORE': 'favorites_crawler_files/yandere',
20+
'FILES_STORE': os.path.join('$FAVORS_HOME', 'yandere'),
2021
'USERNAME': '',
2122
},
2223
'twitter': {
23-
'FILES_STORE': 'favorites_crawler_files/twitter',
24+
'FILES_STORE': os.path.join('$FAVORS_HOME', 'twitter'),
2425
'USER_ID': '',
2526
'AUTHORIZATION': '',
2627
'LIKES_ID': '',
2728
'X_CSRF_TOKEN': '',
2829
},
2930
'lemon': {
30-
'FILES_STORE': 'favorites_crawler_files/lemon',
31+
'FILES_STORE': os.path.join('$FAVORS_HOME', 'lemon'),
3132
},
3233
'nhentai': {
3334
'USER_AGENT': '',
34-
'FILES_STORE': 'favorites_crawler_files/nhentai',
35+
'FILES_STORE': os.path.join('$FAVORS_HOME', 'nhentai'),
3536
}
3637
}
3738

@@ -63,22 +64,26 @@ def create_favors_home(path: str):
6364
os.makedirs(path, exist_ok=True)
6465

6566

66-
def overwrite_spider_settings(spider, default_settings, user_config):
67+
def overwrite_spider_settings(spider, home, user_config):
6768
"""
6869
Overwrite spider settings by user config
6970
Priority: favors spider config > favors global config > spider custom settings > scrapy settings
7071
7172
:param spider: Spider class
72-
:param default_settings: :class:`scrapy.settings.Settings`
73+
:param home: favors home
7374
:param user_config: favorites crawler config
7475
"""
7576
global_config = user_config.get('global')
7677
if global_config:
7778
spider.custom_settings.update(global_config)
7879

79-
spider_config = user_config.get(spider.name)
80+
spider_config = user_config.get(spider.name, {})
8081
if spider_config:
8182
spider.custom_settings.update(spider_config)
8283

83-
default_files_store = os.path.join(default_settings.get('FILES_STORE', ''), spider.name)
84-
spider.custom_settings.setdefault('FILES_STORE', default_files_store)
84+
home = os.path.expanduser(home)
85+
files_store = spider_config.get('FILES_STORE')
86+
if files_store:
87+
spider.custom_settings['FILES_STORE'] = files_store.replace('$FAVORS_HOME', home)
88+
else:
89+
spider.custom_settings['FILES_STORE'] = os.path.join(home, spider.name)

tests/test_utils/test_config.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def test_overwrite_spider_settings(self):
8484
}
8585
spider = spider_loader.load('pixiv')
8686

87-
overwrite_spider_settings(spider, scrapy_settings, user_config)
87+
overwrite_spider_settings(spider, '~', user_config)
8888

8989
assert spider.custom_settings['FILES_STORE'] == user_config['pixiv']['FILES_STORE']
9090
assert spider.custom_settings['ENABLE_ORGANIZE_BY_ARTIST'] == user_config['global']['ENABLE_ORGANIZE_BY_ARTIST']
@@ -100,14 +100,22 @@ def test_spider_config_priority_should_gt_global_config(self):
100100
}
101101
spider = spider_loader.load('yandere')
102102

103-
overwrite_spider_settings(spider, scrapy_settings, user_config)
103+
overwrite_spider_settings(spider, '~', user_config)
104104

105105
assert spider.custom_settings['ENABLE_ORGANIZE_BY_ARTIST'] == user_config['yandere']['ENABLE_ORGANIZE_BY_ARTIST']
106106

107107
def test_should_set_default_file_store_when_user_doesnt_config_it(self):
108108
user_config = {}
109109
spider = spider_loader.load('nhentai')
110110

111-
overwrite_spider_settings(spider, scrapy_settings, user_config)
111+
overwrite_spider_settings(spider, '~', user_config)
112112

113-
assert spider.custom_settings['FILES_STORE'] == os.path.join(scrapy_settings.get('FILES_STORE', ''), 'nhentai')
113+
assert spider.custom_settings['FILES_STORE'] == os.path.expanduser(os.path.join('~', 'nhentai'))
114+
115+
def test_should_replace_favors_home_in_files_store(self):
116+
user_config = {'twitter': {'FILES_STORE': os.path.join('$FAVORS_HOME', 'twitter')}}
117+
spider = spider_loader.load('twitter')
118+
119+
overwrite_spider_settings(spider, '~', user_config)
120+
121+
assert spider.custom_settings['FILES_STORE'] == os.path.expanduser(os.path.join('~', 'twitter'))

0 commit comments

Comments
 (0)