98 lines
2.6 KiB
Python
98 lines
2.6 KiB
Python
import sys
|
|
import argparse
|
|
import os
|
|
import urllib
|
|
|
|
import requests
|
|
|
|
from daypicts import get_picture_url, get_picture_urls
|
|
from daypicts import validate_date, gen_dates, picture_type
|
|
from daypicts import NoPictureForDate
|
|
from daypicts import REMOTE_PICT_BASE_URL, PICT_EXCEPTIONS
|
|
|
|
FIXTURE_DOC_DIR = 'fixture/docroot/'
|
|
FIXTURE_TEMPLATE_POTD_DIR = FIXTURE_DOC_DIR + 'Template-POTD/'
|
|
|
|
def parse_args(argv):
|
|
parser = argparse.ArgumentParser(description=main.__doc__)
|
|
date_help = 'YYYY-MM-DD or YYYY-MM or YYYY: year, month and day'
|
|
parser.add_argument('date', help=date_help)
|
|
parser.add_argument('-u', '--url_only', action='store_true',
|
|
help='get picture URLS only')
|
|
|
|
args = parser.parse_args(argv)
|
|
|
|
try:
|
|
iso_parts = validate_date(args.date)
|
|
except ValueError as exc:
|
|
print('error:', exc.args[0])
|
|
parser.print_usage()
|
|
sys.exit(2)
|
|
|
|
dates = list(gen_dates(iso_parts))
|
|
if len(dates) == 1:
|
|
print('-> Date: ', dates[0])
|
|
else:
|
|
fmt = '-> {} days: {}...{}'
|
|
print(fmt.format(len(dates), dates[0], dates[-1]))
|
|
|
|
return dates, args
|
|
|
|
|
|
def save_picture_urls(dates, save_path):
|
|
for date in dates:
|
|
try:
|
|
url = get_picture_url(date)
|
|
except NoPictureForDate as exc:
|
|
snippet = repr(exc)
|
|
else:
|
|
snippet = url.replace('http://', 'src="//') + '"'
|
|
print(date, end=' ')
|
|
print(snippet)
|
|
with open(os.path.join(save_path, date), 'w') as fp:
|
|
fp.write(snippet)
|
|
|
|
|
|
def save_pictures(dates, save_path, verbose=False):
|
|
urls_ok = []
|
|
for date, url in get_picture_urls(dates, verbose):
|
|
response = requests.get(url)
|
|
file_path = os.path.join(save_path,
|
|
url.replace(REMOTE_PICT_BASE_URL, ''))
|
|
file_path = urllib.parse.unquote(file_path)
|
|
octets = response.content
|
|
# http://en.wikipedia.org/wiki/Template:POTD/2013-06-15
|
|
|
|
if date not in PICT_EXCEPTIONS:
|
|
assert picture_type(octets) is not None, url
|
|
|
|
try:
|
|
os.makedirs(os.path.dirname(file_path))
|
|
except FileExistsError:
|
|
pass
|
|
with open(file_path, 'wb') as fp:
|
|
fp.write(octets)
|
|
|
|
print(file_path)
|
|
return urls_ok
|
|
|
|
|
|
def main(argv):
|
|
"""Build test fixture from Wikipedia "POTD" data"""
|
|
|
|
try:
|
|
os.makedirs(FIXTURE_TEMPLATE_POTD_DIR)
|
|
except FileExistsError:
|
|
pass
|
|
|
|
dates, args = parse_args(argv)
|
|
|
|
if args.url_only:
|
|
save_picture_urls(dates, FIXTURE_TEMPLATE_POTD_DIR)
|
|
else:
|
|
save_pictures(dates, FIXTURE_DOC_DIR)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main(sys.argv[1:])
|