Changeset 4381:ca25d2b9ec59 in livinglogic.python.xist

Show
Ignore:
Timestamp:
03/03/11 17:54:26 (9 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Add options --include and --exclude to ucp and ucp. Remove --verbose from ucat.

Files:
4 modified

Legend:

Unmodified
Added
Removed
  • NEWS.rst

    r4377 r4381  
    1111    and indexes properly. All ``iternames`` methods now skip objects whose name 
    1212    starts with ``BIN$``. 
     13 
     14*   The scripts ``ucp`` and ``ucat`` have new options :option:`--include` and 
     15    :option:`--exclude` for including/excluding URLs that match the regular 
     16    expressions. 
     17 
     18*   The unused :option:`--verbose` was removed from the script ``ucat``. 
    1319 
    1420 
  • src/ll/astyle.py

    r4365 r4381  
    396396style_ellisis = Style.fromstr("red:black") 
    397397 
    398 # Style for displaying exceptions 
     398# Style for displaying warnings/errors/exceptions 
     399style_warn = Style.fromstr("yellow:black") 
    399400style_error = Style.fromstr("red:black") 
    400401 
  • src/ll/scripts/ucat.py

    r4283 r4381  
    1111 
    1212 
    13 import sys, argparse, contextlib, errno 
     13import sys, re, argparse, contextlib, errno 
    1414 
    1515from ll import misc, url 
     
    2828def main(args=None): 
    2929    def catone(urlread): 
     30        strurlread = str(urlread) 
    3031        if urlread.isdir(): 
    3132            if args.recursive: 
     
    3334                    catone(urlread/u) 
    3435            else: 
    35                 raise IOError(errno.EISDIR, "Is a directory", str(urlread)) 
     36                raise IOError(errno.EISDIR, "Is a directory", strurlread) 
    3637        else: 
    37             try: 
    38                 with contextlib.closing(urlread.open("rb")) as fileread: 
    39                     size = 0 
    40                     while True: 
    41                         data = fileread.read(262144) 
    42                         if data: 
    43                             sys.stdout.write(data) 
    44                         else: 
    45                             break 
    46             except Exception: 
    47                 if not args.ignoreerrors: 
    48                     raise 
     38            do = True 
     39            if args.include is not None and args.include.search(strurlread) is None: 
     40                do = False 
     41            if args.exclude is not None and args.exclude.search(strurlread) is not None: 
     42                do = False 
     43            if do: 
     44                try: 
     45                    with contextlib.closing(urlread.open("rb")) as fileread: 
     46                        size = 0 
     47                        while True: 
     48                            data = fileread.read(262144) 
     49                            if data: 
     50                                sys.stdout.write(data) 
     51                            else: 
     52                                break 
     53                except Exception: 
     54                    if not args.ignoreerrors: 
     55                        raise 
    4956 
    5057    p = argparse.ArgumentParser(description="print URL content on the screen") 
    5158    p.add_argument("urls", metavar="url", help="URLs to be printed", nargs="+", type=url.URL) 
    52     p.add_argument("-v", "--verbose", dest="verbose", help="Be verbose? (default: %(default)s)", action=misc.FlagAction, default=False) 
    5359    p.add_argument("-r", "--recursive", dest="recursive", help="Copy stuff recursively? (default: %(default)s)", action=misc.FlagAction, default=False) 
    5460    p.add_argument("-x", "--ignoreerrors", dest="ignoreerrors", help="Ignore errors? (default: %(default)s)", action=misc.FlagAction, default=False) 
     61    p.add_argument("-i", "--include", dest="include", metavar="PATTERN", help="Include only URLs matching PATTERN (default: %(default)s)", type=re.compile) 
     62    p.add_argument("-e", "--exclude", dest="exclude", metavar="PATTERN", help="Exclude URLs matching PATTERN (default: %(default)s)", type=re.compile) 
    5563 
    5664    args = p.parse_args(args) 
  • src/ll/scripts/ucp.py

    r4299 r4381  
    1111 
    1212 
    13 import sys, argparse, contextlib 
     13import sys, re, argparse, contextlib 
    1414 
    1515from ll import misc, url 
     
    2828def main(args=None): 
    2929    def copyone(urlread, urlwrite): 
     30        strurlread = str(urlread) 
    3031        if urlread.isdir(): 
    3132            if args.recursive: 
     
    3435            else: 
    3536                if args.verbose: 
    36                     msg = astyle.style_default("ucp: ", astyle.style_url(str(urlread)), " (directory skipped)") 
     37                    msg = astyle.style_default("ucp: ", astyle.style_url(strurlread), " (directory skipped)") 
    3738                    stderr.writeln(msg) 
    3839        else: 
    39             if args.verbose: 
    40                 msg = astyle.style_default("ucp: ", astyle.style_url(str(urlread)), " -> ") 
    41                 stderr.write(msg) 
    42             try: 
    43                 with contextlib.closing(urlread.open("rb")) as fileread: 
    44                     with contextlib.closing(urlwrite.open("wb")) as filewrite: 
    45                         size = 0 
    46                         while True: 
    47                             data = fileread.read(262144) 
    48                             if data: 
    49                                 filewrite.write(data) 
    50                                 size += len(data) 
    51                             else: 
    52                                 break 
    53                 if user or group: 
    54                     urlwrite.chown(user, group) 
    55             except Exception: 
    56                 if args.ignoreerrors: 
     40            do = True 
     41            if args.include is not None and args.include.search(strurlread) is None: 
     42                do = False 
     43            if args.exclude is not None and args.exclude.search(strurlread) is not None: 
     44                do = False 
     45            if do: 
     46                if args.verbose: 
     47                    msg = astyle.style_default("ucp: ", astyle.style_url(strurlread), " -> ") 
     48                    stderr.write(msg) 
     49                try: 
     50                    with contextlib.closing(urlread.open("rb")) as fileread: 
     51                        with contextlib.closing(urlwrite.open("wb")) as filewrite: 
     52                            size = 0 
     53                            while True: 
     54                                data = fileread.read(262144) 
     55                                if data: 
     56                                    filewrite.write(data) 
     57                                    size += len(data) 
     58                                else: 
     59                                    break 
     60                    if user or group: 
     61                        urlwrite.chown(user, group) 
     62                except Exception: 
     63                    if args.ignoreerrors: 
     64                        if args.verbose: 
     65                            msg = astyle.style_error(" (failed)") 
     66                            stderr.writeln(msg) 
     67                    else: 
     68                        raise 
     69                else: 
    5770                    if args.verbose: 
    58                         msg = astyle.style_error(" (failed)") 
     71                        msg = astyle.style_default(astyle.style_url(str(urlwrite)), " (", str(size), " bytes)") 
    5972                        stderr.writeln(msg) 
    60                 else: 
    61                     raise 
    6273            else: 
    6374                if args.verbose: 
    64                     msg = astyle.style_default(astyle.style_url(str(urlwrite)), " (", str(size), " bytes)") 
     75                    msg = astyle.style_default("ucp: ", astyle.style_url(strurlread), astyle.style_warn(" (skipped)")) 
    6576                    stderr.writeln(msg) 
    6677 
     
    7384    p.add_argument("-r", "--recursive", dest="recursive", help="Copy stuff recursively? (default: %(default)s)", action=misc.FlagAction, default=False) 
    7485    p.add_argument("-x", "--ignoreerrors", dest="ignoreerrors", help="Ignore errors? (default: %(default)s)", action=misc.FlagAction, default=False) 
     86    p.add_argument("-i", "--include", dest="include", metavar="PATTERN", help="Include only URLs matching PATTERN (default: %(default)s)", type=re.compile) 
     87    p.add_argument("-e", "--exclude", dest="exclude", metavar="PATTERN", help="Exclude URLs matching PATTERN (default: %(default)s)", type=re.compile) 
    7588 
    7689    args = p.parse_args(args)