 Issue 29884571:
  Issue 6945 - Add script to make filter list diffs  (Closed) 
  Base URL: https://hg.adblockplus.org/python-abp/
    
  
    Issue 29884571:
  Issue 6945 - Add script to make filter list diffs  (Closed) 
  Base URL: https://hg.adblockplus.org/python-abp/| Index: abp/filters/diff_script.py | 
| =================================================================== | 
| new file mode 100644 | 
| --- /dev/null | 
| +++ b/abp/filters/diff_script.py | 
| @@ -0,0 +1,65 @@ | 
| +# This file is part of Adblock Plus <https://adblockplus.org/>, | 
| +# Copyright (C) 2006-present eyeo GmbH | 
| +# | 
| +# Adblock Plus is free software: you can redistribute it and/or modify | 
| +# it under the terms of the GNU General Public License version 3 as | 
| +# published by the Free Software Foundation. | 
| +# | 
| +# Adblock Plus is distributed in the hope that it will be useful, | 
| +# but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| +# GNU General Public License for more details. | 
| +# | 
| +# You should have received a copy of the GNU General Public License | 
| +# along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 
| + | 
| +"""Command line script for rendering Adblock Plus filter list diffs.""" | 
| + | 
| +import argparse | 
| +import io | 
| +import sys | 
| + | 
| +from collections import namedtuple | 
| + | 
| +from .sources import NotFound | 
| +from .renderer import render_diff | 
| +__all__ = ['main'] | 
| + | 
| + | 
| +def parse_args(): | 
| + parser = argparse.ArgumentParser(description='Render a filter list diff.') | 
| + parser.add_argument( | 
| + 'base', help='the older filter list that needs to be updated', | 
| + default='-', nargs='?') | 
| + parser.add_argument( | 
| + 'latest', help='the most recent version of the filter list', | 
| + default='-', nargs='?') | 
| + parser.add_argument( | 
| + 'outfile', help='output file for filter list diff', | 
| + default='-', nargs='?') | 
| + return parser.parse_args() | 
| + | 
| + | 
| +def main(args_in=None): | 
| + """Entry point for the diff rendering script (diffrender).""" | 
| + if args_in: | 
| + Parse = namedtuple('Test', 'base, latest, outfile') | 
| + args = Parse(args_in['base'], args_in['latest'], args_in['outfile']) | 
| + else: | 
| + args = parse_args() | 
| + | 
| + base = open(args.base, 'r') | 
| + latest = open(args.latest, 'r') | 
| 
Sebastian Noack
2018/09/18 16:56:12
Any reason you don't use io.open(..., encoding="ut
 
Sebastian Noack
2018/09/18 16:56:12
Please make sure all files are explicitly closed.
 
rhowell
2018/09/18 17:23:33
Done.
 | 
| + | 
| + try: | 
| + lines = render_diff(base, latest) | 
| + if args.outfile == '-': | 
| + for line in lines: | 
| + sys.stdout.write(line + '\n') | 
| + else: | 
| + open(args.outfile, 'w') | 
| 
rhowell
2018/09/18 16:01:54
This feels hacky..
 
Sebastian Noack
2018/09/18 16:56:12
Well, this is redundant. Why did you put it here?
 
rhowell
2018/09/18 17:23:33
Wow, you're right. I swore I was getting an error
 
Sebastian Noack
2018/09/18 19:13:18
Both, open(..., 'w') and io.open(..., 'w') create
 | 
| + with io.open(args.outfile, 'w', encoding='utf-8') as out_fp: | 
| + for line in lines: | 
| + out_fp.write(line + '\n') | 
| + except NotFound as exc: | 
| + sys.exit(exc) |