Ejemplo n.º 1
0
    def testCases(self):
        for f in os.listdir(self.testdir):
            filename = os.path.join(self.testdir, f)
            args = [executable, minipy.__file__]
            kwargs = dict()
            components = f.split('.')
            if len(components) == 3:
                for c in components[1]:
                    a = {
                        'J': ('--nojoinlines', dict(joinlines=False)),
                        'D': ('--docstrings', dict(docstrings=True)),
                        'R': ('--rename', dict(rename=True)),
                        '4': ('--indent=4', dict(indent=4)),
                    }.get(c)
                    if a:
                        args.append(a[0])
                        kwargs.update(a[1])

                # Run this test case via the script interface
                args.append(filename)
                pipe = Popen(args, stdout=PIPE)
                output, _ = pipe.communicate()
                resultfile = os.path.join(self.testdir, components[0] + ".py")
                with open(resultfile) as r:
                    correct = r.read().encode('utf-8')
                self.assertEqual(output, correct)

                # Run this test case via the Python interface
                output = BytesIO()
                minipy.minify(filename, output=output, **kwargs)
                output.seek(0)
                self.assertEqual(output.read(), correct)
Ejemplo n.º 2
0
    def testCases(self):
        for f in os.listdir(self.testdir):
            filename = os.path.join(self.testdir, f)
            args = [executable, minipy.__file__]
            kwargs = dict()
            components = f.split('.')
            if len(components) == 3:
                for c in components[1]:
                    a = {
                        'J': ('--nojoinlines', dict(joinlines=False)),
                        'D': ('--docstrings', dict(docstrings=True)),
                        'R': ('--rename', dict(rename=True)),
                        '4': ('--indent=4', dict(indent=4)),
                        }.get(c)
                    if a:
                        args.append(a[0])
                        kwargs.update(a[1])

                # Run this test case via the script interface
                args.append(filename)
                pipe = Popen(args, stdout=PIPE)
                output, _ = pipe.communicate()
                resultfile = os.path.join(self.testdir, components[0] + ".py")
                correct = open(resultfile).read()
                self.assertEqual(output, correct)

                # Run this test case via the Python interface
                output = StringIO()
                minipy.minify(filename, output=output, **kwargs)
                output.seek(0)
                self.assertEqual(output.read(), correct)
Ejemplo n.º 3
0
def minify_python(filename):
    mini_kwargs = {
        'rename': True,
        'preserve': None,
        'indent': 1,
        'selftest': True,
        'joinlines': True,
        'docstrings': True,
        'debug': False
    }
    return minipy.minify(filename, **mini_kwargs)
Ejemplo n.º 4
0
def main():

    try:
        imp.find_module('minipy')
        import minipy
    except ImportError:
        print 'Missing minipy'
        print 'get it here: http://github.com/gareth-rees/minipy'
        print 'install with \'setup.py -install\' in the minipy folder'
        return

    parser = argparse.ArgumentParser(prog='shrinkbot',\
        description='Shrink a robotgame robot using minipy/zlib/base64.')

    parser.add_argument('robot', metavar='robot_file', help='Robot to shrink')
    parser.add_argument('--output', '-o', \
                 help="output file (default: appends _shrunken to the original file name)")
    parser.add_argument('--delete_minipy', '-d', action='store_true',\
                 help="delete the minipy intermediate file")
        
    args = parser.parse_args()
    infile = args.robot
    if os.path.isfile(infile):
        base = os.path.basename(infile)
        robotname = os.path.splitext(base)[0]
        outfile_minipy = robotname + '_minipy.py'
        if args.output is not None:
            outfile_shrink = args.output
        else:
            outfile_shrink = robotname + '_shrunken.py'
    else:
        parser.error("invalid/missing file")

    fid=open(infile)
    robot_original=fid.read()
    fid.close()
    len_original = float(len(robot_original))
    print 'original: %5i' % len_original
    
    minipy.minify(infile, output=outfile_minipy, rename=True, preserve='Robot,act')
    fid=open(outfile_minipy)
    robot_minify=fid.read()
    fid.close()
    if args.delete_minipy:
        os.remove(outfile_minipy)
    len_minify = len(robot_minify)
    print 'minipy  : %5i  (%2i%% of original)' % (len_minify,len_minify/len_original*100)

    robot_zlib = zlib.compress(robot_minify,9)
    print 'zlib    : %5i' % len(robot_zlib)
    
    robot_encoded = base64.b64encode(robot_zlib)
    len_encoded = len(robot_encoded)
    print 'base64  : %5i' % len_encoded
    
    fid=open(outfile_shrink ,'w')
    fid.write('import base64,zlib\n')
    fid.write('exec zlib.decompress(base64.decodestring(')
    fid.write('\'' + robot_encoded + '\'))')
    fid.close()

    print 'final   : %5i  (%2i%% of original)' % (len_encoded+65,(len_encoded+65)/len_original*100)
Ejemplo n.º 5
0
def main():

    try:
        imp.find_module('minipy')
        import minipy
    except ImportError:
        print 'Missing minipy'
        print 'get it here: http://github.com/gareth-rees/minipy'
        print 'install with \'setup.py -install\' in the minipy folder'
        return

    parser = argparse.ArgumentParser(prog='shrinkbot',\
        description='Shrink a robotgame robot using minipy/zlib/base64.')

    parser.add_argument('robot', metavar='robot_file', help='Robot to shrink')
    parser.add_argument('--output', '-o', \
                 help="output file (default: appends _shrunken to the original file name)")
    parser.add_argument('--delete_minipy', '-d', action='store_true',\
                 help="delete the minipy intermediate file")
        
    args = parser.parse_args()
    infile = args.robot
    if os.path.isfile(infile):
        base = os.path.basename(infile)
        robotname = os.path.splitext(base)[0]
        outfile_minipy = robotname + '_minipy.py'
        if args.output is not None:
            outfile_shrink = args.output
        else:
            outfile_shrink = robotname + '_shrunken.py'
    else:
        parser.error("invalid/missing file")

    fid=open(infile)
    robot_original=fid.read()
    fid.close()
    len_original = len(robot_original)
    print 'original: %5i' % len_original
    
    # code taken from here:
    # http://stackoverflow.com/questions/7032031/python-regex-to-remove-comments
    import tokenize
    import io

    def nocomment(s):
        result = []
        g = tokenize.generate_tokens(io.BytesIO(s).readline)  
        for toknum, tokval, _, _, _  in g:
            # print(toknum,tokval)
            if toknum != tokenize.COMMENT:
                result.append((toknum, tokval))
        return tokenize.untokenize(result)

    robot_nocomments = nocomment(robot_original)
    len_nocomm = float(len(robot_nocomments))
    print 'w/o comm: %5i' % len_nocomm
        
    minipy.minify(infile, output=outfile_minipy, rename=True, preserve='Robot,act,rgkit', docstrings=True)
    fid=open(outfile_minipy)
    robot_minify=fid.read()
    fid.close()
    if args.delete_minipy:
        os.remove(outfile_minipy)
    len_minify = len(robot_minify)
    print 'minipy  : %5i  (%2i%% of original w/o comm)' % (len_minify,len_minify/len_nocomm*100)

    robot_zlib = zlib.compress(robot_minify,9)
    print 'zlib    : %5i' % len(robot_zlib)
    
    robot_encoded = base64.b64encode(robot_zlib)
    len_encoded = len(robot_encoded)
    print 'base64  : %5i' % len_encoded
    
    fid=open(outfile_shrink ,'w')
    final_string = 'import base64,zlib\nexec zlib.decompress(base64.decodestring(\'' + robot_encoded + '\'))'
    len_final = len(final_string)
    fid.write(final_string)
    fid.close()

    print 'final   : %5i  (%2i%% of original w/o comm)' % (len_final,(len_final)/len_nocomm*100)
Ejemplo n.º 6
0
def main():

    try:
        imp.find_module('minipy')
        import minipy
    except ImportError:
        print 'Missing minipy'
        print 'get it here: http://github.com/gareth-rees/minipy'
        print 'install with \'setup.py -install\' in the minipy folder'
        return

    parser = argparse.ArgumentParser(prog='shrinkbot',\
        description='Shrink a robotgame robot using minipy/zlib/base64.')

    parser.add_argument('robot', metavar='robot_file', help='Robot to shrink')
    parser.add_argument('--output', '-o', \
                 help="output file (default: appends _shrunken to the original file name)")
    parser.add_argument('--delete_minipy', '-d', action='store_true',\
                 help="delete the minipy intermediate file")

    args = parser.parse_args()
    infile = args.robot
    if os.path.isfile(infile):
        base = os.path.basename(infile)
        robotname = os.path.splitext(base)[0]
        outfile_minipy = robotname + '_minipy.py'
        if args.output is not None:
            outfile_shrink = args.output
        else:
            outfile_shrink = robotname + '_shrunken.py'
    else:
        parser.error("invalid/missing file")

    fid = open(infile)
    robot_original = fid.read()
    fid.close()
    len_original = len(robot_original)
    print 'original: %5i' % len_original

    # code taken from here:
    # http://stackoverflow.com/questions/7032031/python-regex-to-remove-comments
    import tokenize
    import io

    def nocomment(s):
        result = []
        g = tokenize.generate_tokens(io.BytesIO(s).readline)
        for toknum, tokval, _, _, _ in g:
            # print(toknum,tokval)
            if toknum != tokenize.COMMENT:
                result.append((toknum, tokval))
        return tokenize.untokenize(result)

    robot_nocomments = nocomment(robot_original)
    len_nocomm = float(len(robot_nocomments))
    print 'w/o comm: %5i' % len_nocomm

    minipy.minify(infile,
                  output=outfile_minipy,
                  rename=True,
                  preserve='Robot,act')
    fid = open(outfile_minipy)
    robot_minify = fid.read()
    fid.close()
    if args.delete_minipy:
        os.remove(outfile_minipy)
    len_minify = len(robot_minify)
    print 'minipy  : %5i  (%2i%% of original w/o comm)' % (
        len_minify, len_minify / len_nocomm * 100)

    robot_zlib = zlib.compress(robot_minify, 9)
    print 'zlib    : %5i' % len(robot_zlib)

    robot_encoded = base64.b64encode(robot_zlib)
    len_encoded = len(robot_encoded)
    print 'base64  : %5i' % len_encoded

    fid = open(outfile_shrink, 'w')
    fid.write('import base64,zlib\n')
    fid.write('exec zlib.decompress(base64.decodestring(')
    fid.write('\'' + robot_encoded + '\'))')
    fid.close()

    print 'final   : %5i  (%2i%% of original w/o comm)' % (len_encoded + 65,
                                                           (len_encoded + 65) /
                                                           len_nocomm * 100)