Move cli code to argParse
Related code changes (incl. :format=xyz)
This commit is contained in:
		@@ -68,15 +68,15 @@ def cgi_app(environ, start_response):
 | 
			
		||||
    if options.cors:
 | 
			
		||||
        headers['access-control-allow-origin'] = '*'
 | 
			
		||||
 | 
			
		||||
    if options.html:
 | 
			
		||||
    if options.format == 'html':
 | 
			
		||||
        headers['content-type'] = 'text/html'
 | 
			
		||||
    elif options.txt or options.silent:
 | 
			
		||||
        headers['content-type'] = 'text/plain'
 | 
			
		||||
    elif options.json:
 | 
			
		||||
    elif options.format == 'json':
 | 
			
		||||
        headers['content-type'] = 'application/json'
 | 
			
		||||
    elif options.callback:
 | 
			
		||||
        headers['content-type'] = 'application/javascript'
 | 
			
		||||
    elif options.csv:
 | 
			
		||||
    elif options.format == 'csv':
 | 
			
		||||
        headers['content-type'] = 'text/csv'
 | 
			
		||||
        headers['content-disposition'] = 'attachment; filename="feed.csv"'
 | 
			
		||||
    else:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										44
									
								
								morss/cli.py
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								morss/cli.py
									
									
									
									
									
								
							@@ -1,15 +1,53 @@
 | 
			
		||||
import sys
 | 
			
		||||
import os.path
 | 
			
		||||
import argparse
 | 
			
		||||
 | 
			
		||||
from . import crawler
 | 
			
		||||
from .morss import FeedFetch, FeedGather, FeedFormat
 | 
			
		||||
from .morss import Options, parseOptions
 | 
			
		||||
from .morss import Options
 | 
			
		||||
from .morss import log, DEBUG
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#args = parser.parse_args()
 | 
			
		||||
 | 
			
		||||
def cli_app():
 | 
			
		||||
    options = Options(parseOptions(sys.argv[1:-1]))
 | 
			
		||||
    url = sys.argv[-1]
 | 
			
		||||
    parser = argparse.ArgumentParser(
 | 
			
		||||
        prog='morss',
 | 
			
		||||
        description='Get full-text RSS feeds',
 | 
			
		||||
        epilog='GNU AGPLv3 code'
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    parser.add_argument('url', help='feed url')
 | 
			
		||||
 | 
			
		||||
    group = parser.add_argument_group('output')
 | 
			
		||||
    group.add_argument('--format', default='rss', choices=('rss', 'json', 'html', 'csv'), help='output format')
 | 
			
		||||
    group.add_argument('--search', action='store', type=str, metavar='STRING', help='does a basic case-sensitive search in the feed')
 | 
			
		||||
    group.add_argument('--clip', action='store_true', help='stick the full article content under the original feed content (useful for twitter)')
 | 
			
		||||
    group.add_argument('--indent', action='store_true', help='returns indented XML or JSON, takes more place, but human-readable')
 | 
			
		||||
 | 
			
		||||
    group = parser.add_argument_group('action')
 | 
			
		||||
    group.add_argument('--cache', action='store_true', help='only take articles from the cache (ie. don\'t grab new articles\' content), so as to save time')
 | 
			
		||||
    group.add_argument('--force', action='store_true', help='force refetch the rss feed and articles')
 | 
			
		||||
    group.add_argument('--proxy', action='store_true', help='doesn\'t fill the articles')
 | 
			
		||||
    group.add_argument('--newest', action='store_true', help='return the feed items in chronological order (morss ohterwise shows the items by appearing order)')
 | 
			
		||||
    group.add_argument('--firstlink', action='store_true', help='pull the first article mentioned in the description instead of the default link')
 | 
			
		||||
 | 
			
		||||
    group = parser.add_argument_group('custom feeds')
 | 
			
		||||
    group.add_argument('--items', action='store', type=str, metavar='XPATH', help='(mandatory to activate the custom feeds function) xpath rule to match all the RSS entries')
 | 
			
		||||
    group.add_argument('--item_link', action='store', type=str, metavar='XPATH', help='xpath rule relative to items to point to the entry\'s link')
 | 
			
		||||
    group.add_argument('--item_title', action='store', type=str, metavar='XPATH', help='entry\'s title')
 | 
			
		||||
    group.add_argument('--item_content', action='store', type=str, metavar='XPATH', help='entry\'s content')
 | 
			
		||||
    group.add_argument('--item_time', action='store', type=str, metavar='XPATH', help='entry\'s date & time (accepts a wide range of time formats)')
 | 
			
		||||
 | 
			
		||||
    group = parser.add_argument_group('misc')
 | 
			
		||||
    group.add_argument('--nolink', action='store_true', help='drop links, but keeps links\' inner text')
 | 
			
		||||
    group.add_argument('--noref', action='store_true', help='drop items\' link')
 | 
			
		||||
    group.add_argument('--debug', action='store_true', help='to have some feedback from the script execution. Useful for debugging')
 | 
			
		||||
 | 
			
		||||
    options = Options(parser.parse_args())
 | 
			
		||||
    url = options.url
 | 
			
		||||
 | 
			
		||||
    global DEBUG
 | 
			
		||||
    DEBUG = options.debug
 | 
			
		||||
 
 | 
			
		||||
@@ -379,24 +379,24 @@ def FeedFormat(rss, options, encoding='utf-8'):
 | 
			
		||||
        else:
 | 
			
		||||
            raise MorssException('Invalid callback var name')
 | 
			
		||||
 | 
			
		||||
    elif options.json:
 | 
			
		||||
    elif options.format == 'json':
 | 
			
		||||
        if options.indent:
 | 
			
		||||
            return rss.tojson(encoding=encoding, indent=4)
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
            return rss.tojson(encoding=encoding)
 | 
			
		||||
 | 
			
		||||
    elif options.csv:
 | 
			
		||||
    elif options.format == 'csv':
 | 
			
		||||
        return rss.tocsv(encoding=encoding)
 | 
			
		||||
 | 
			
		||||
    elif options.html:
 | 
			
		||||
    elif options.format == 'html':
 | 
			
		||||
        if options.indent:
 | 
			
		||||
            return rss.tohtml(encoding=encoding, pretty_print=True)
 | 
			
		||||
 | 
			
		||||
        else:
 | 
			
		||||
            return rss.tohtml(encoding=encoding)
 | 
			
		||||
 | 
			
		||||
    else:
 | 
			
		||||
    else: # i.e. format == 'rss'
 | 
			
		||||
        if options.indent:
 | 
			
		||||
            return rss.torss(xml_declaration=(not encoding == 'unicode'), encoding=encoding, pretty_print=True)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user