Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os.path
- import datetime
- import argparse
- from scripts.conversion_news import read_news
- from scripts.conversion_news import unpack_json
- from scripts.conversion_news import unpack_news
- from scripts.conversion_news import unpack_with_date
- from scripts.create_xml import create_fb2
- from scripts.rss_parser import find_news
- from scripts.write_logs import write_log
- import logging
- def valid_date(date):
- try:
- return datetime.datetime.strptime(date, '%Y%m%d')
- except ValueError:
- msg = "Not a valid date: '{0}'.".format(
- date) # s ? не записывали дату нигде же date? # Да. криво скопировал с инета
- raise argparse.ArgumentTypeError(
- msg) # не читал про ошибку аргпарса даже( точно, через точку, удобнее без точек
- def parse_arguments():
- parser = argparse.ArgumentParser(description='Pure Python command-line RSS reader')
- parser.add_argument('source', help='RRS URL', nargs='?')
- parser.add_argument('--verbose', action='store_true', help='Outputs verbose status message')
- parser.add_argument('--version', action='version', version='%(prog)s 0.4', help='Print version info')
- parser.add_argument('--json', action='store_true', help='Print result as JSON in stdout')
- parser.add_argument('--limit', type=int, help='Limit topics if this parameter provided')
- parser.add_argument('--date', type=valid_date,
- help='Print news by publication date') # Обрати внимание на type. Думаю должно сработать и argparse сам провалидирует args.date. Тоесть ты сможешь сразу получить год с помощью args.date.year
- parser.add_argument('--output-path', dest='output_path', type=str, help='Path to save fb2')
- parser.add_argument('--to-fb2', dest='to_fb2', action='store_true', help='Conversion news in fb.2')
- return parser.parse_args()
- def validate_arguments(args):
- if args.limit is not None and args.limit < 0: ## if args.limit is not None and args.limit < 0
- print('Limit must be >0')
- return False
- if args.json and args.output_path is not None:
- print('ArgumentsError: You should use --json without --out-path')
- return False
- if args.source is not None and args.source == '':
- print('You should give the rss_url')
- return False
- if args.output_path and not args.to_fb2: ##!!!!!
- print('You should use --output-path with --to-fb2')
- return False
- return True
- def process_arguments(args):
- news = None
- max_limit = None
- if args.source == 'date':
- if args.date:
- news, max_limit = retrieve_from_cache(args.date)
- if args.verbose:
- logging.debug(args,news,max_limit)
- else:
- try:
- news, title, max_limit = retrieve_from_url(
- args.source)
- except TypeError:
- pass
- if args.to_fb2:
- dump_news_to_fb2(news, args.output_path)
- if args.verbose:
- logging.debug(args, news, max_limit)
- else:
- dump_news_to_stdout(news, args.limit, max_limit, as_json=args.json)
- if args.verbose:
- logging.debug(args, news, max_limit)
- def dump_news_to_stdout(news, limit, max_limit, as_json=None,
- title=None):
- if as_json:
- if limit:
- if max_limit < limit:
- print('{0} news on site'.format(max_limit))
- else:
- unpack_json(news, limit)
- else:
- unpack_json(news, max_limit)
- else:
- if limit:
- if max_limit < limit:
- print('{0} on site'.format(max_limit))
- else:
- unpack_news(news, limit, title)
- else:
- unpack_news(news, max_limit, title)
- def dump_news_to_fb2(news, output_path):
- create_fb2(news, output_path)
- def retrieve_from_url(url):
- try:
- news, title = find_news(url)
- except TypeError:
- pass
- else:
- max_limit = len(news)
- return news, title, max_limit
- def retrieve_from_cache(date=None):
- first_news = read_news()
- max_limit = len(first_news)
- if date:
- news, limit = unpack_with_date(user_date=date, news=first_news)
- return news, limit
- else:
- return first_news, max_limit
- def retrieve_json(url, limit=None):
- NEWS_INDEX = 0
- try:
- news = dict(find_news(url)[NEWS_INDEX])
- max_limit = len(news)
- except TypeError:
- pass
- else:
- if limit:
- news = unpack_json(news, limit)
- max_limit = len(news)
- return news, max_limit
- else:
- max_limit = len(news)
- return news, max_limit
- def retrieve_logs():
- LOGS_FILE_NAME = 'logs.txt'
- with open(LOGS_FILE_NAME, 'r') as file:
- data = file.read()
- print(data)
- def conversion_to_fb2_with_url(url, path=None):
- NEWS_INDEX = 0
- news = dict(find_news(url)[NEWS_INDEX])
- return news, path
- def main():
- args = parse_arguments()
- logging.basicConfig(level=logging.DEBUG)
- logging.getLogger("urllib3").setLevel(logging.WARNING)
- if not validate_arguments(args):
- return -1
- process_arguments(args)
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement