color support
This commit is contained in:
		
							parent
							
								
									31233ec6a8
								
							
						
					
					
						commit
						0a9fc9f5a0
					
				@ -24,6 +24,7 @@ positional arguments:
 | 
				
			|||||||
optional arguments:
 | 
					optional arguments:
 | 
				
			||||||
  -h, --help   show this help message and exit
 | 
					  -h, --help   show this help message and exit
 | 
				
			||||||
  -b, --brief  do not show detailed comparisons of mismatching values
 | 
					  -b, --brief  do not show detailed comparisons of mismatching values
 | 
				
			||||||
 | 
					  -c, --color  colorize the output
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Single package
 | 
					### Single package
 | 
				
			||||||
 | 
				
			|||||||
@ -25,6 +25,18 @@ class Package:
 | 
				
			|||||||
        self.reported_manifest = parse_manifest(name)
 | 
					        self.reported_manifest = parse_manifest(name)
 | 
				
			||||||
        self.actual_manifest = parse_actual_manifest(name, self.reported_manifest.version)
 | 
					        self.actual_manifest = parse_actual_manifest(name, self.reported_manifest.version)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class colors:
 | 
				
			||||||
 | 
					   PURPLE = '\033[1;35;48m'
 | 
				
			||||||
 | 
					   CYAN = '\033[1;36;48m'
 | 
				
			||||||
 | 
					   BOLD = '\033[1;37;48m'
 | 
				
			||||||
 | 
					   BLUE = '\033[1;34;48m'
 | 
				
			||||||
 | 
					   GREEN = '\033[1;32;48m'
 | 
				
			||||||
 | 
					   YELLOW = '\033[1;33;48m'
 | 
				
			||||||
 | 
					   RED = '\033[1;31;48m'
 | 
				
			||||||
 | 
					   BLACK = '\033[1;30;48m'
 | 
				
			||||||
 | 
					   UNDERLINE = '\033[4;37;48m'
 | 
				
			||||||
 | 
					   END = '\033[1;37;0m'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# https://www.npmjs.com/package/darcyclarke-manifest-pkg/v/2.1.15/index
 | 
					# https://www.npmjs.com/package/darcyclarke-manifest-pkg/v/2.1.15/index
 | 
				
			||||||
# hex checksum = file name
 | 
					# hex checksum = file name
 | 
				
			||||||
# use hex to get *actual* manifest:
 | 
					# use hex to get *actual* manifest:
 | 
				
			||||||
@ -93,41 +105,77 @@ def parse_actual_manifest(pkg, ver):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return Manifest(name, version, dependencies, scripts)
 | 
					    return Manifest(name, version, dependencies, scripts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def compare_manifests(pkg, brief=False):
 | 
					def compare_manifests(pkg, brief=False, color=False):
 | 
				
			||||||
    mismatch = False
 | 
					    mismatch = False
 | 
				
			||||||
    if pkg.reported_manifest.version != pkg.actual_manifest.version:
 | 
					    if pkg.reported_manifest.version != pkg.actual_manifest.version:
 | 
				
			||||||
        mismatch = True
 | 
					        mismatch = True
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.RED, end='')
 | 
				
			||||||
        print('Version mismatch for {}!'.format(pkg.name))
 | 
					        print('Version mismatch for {}!'.format(pkg.name))
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.END, end='')
 | 
				
			||||||
        if not brief:
 | 
					        if not brief:
 | 
				
			||||||
 | 
					            if color:
 | 
				
			||||||
 | 
					                print(colors.YELLOW, end='')
 | 
				
			||||||
            print('Reported version: {}'.format(pkg.reported_manifest.version))
 | 
					            print('Reported version: {}'.format(pkg.reported_manifest.version))
 | 
				
			||||||
            print('Actual version:   {}'.format(pkg.actual_manifest.version))
 | 
					            print('Actual version:   {}'.format(pkg.actual_manifest.version))
 | 
				
			||||||
 | 
					            if color:
 | 
				
			||||||
 | 
					                print(colors.END, end='')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if pkg.actual_manifest.dependencies != pkg.reported_manifest.dependencies:
 | 
					    if pkg.actual_manifest.dependencies != pkg.reported_manifest.dependencies:
 | 
				
			||||||
        mismatch = True
 | 
					        mismatch = True
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.RED, end='')
 | 
				
			||||||
        print('Dependency mismatch detected for {}!'.format(pkg.name))
 | 
					        print('Dependency mismatch detected for {}!'.format(pkg.name))
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.END, end='')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not brief:
 | 
					        if not brief:
 | 
				
			||||||
 | 
					            if color:
 | 
				
			||||||
 | 
					                print(colors.YELLOW, end='')
 | 
				
			||||||
            dep_diff = DeepDiff(pkg.reported_manifest.dependencies, pkg.actual_manifest.dependencies, verbose_level=2)
 | 
					            dep_diff = DeepDiff(pkg.reported_manifest.dependencies, pkg.actual_manifest.dependencies, verbose_level=2)
 | 
				
			||||||
            pprint(dep_diff, indent=2)
 | 
					            pprint(dep_diff, indent=2)
 | 
				
			||||||
 | 
					            if color:
 | 
				
			||||||
 | 
					                print(colors.END, end='')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if pkg.actual_manifest.scripts != pkg.reported_manifest.scripts:
 | 
					    if pkg.actual_manifest.scripts != pkg.reported_manifest.scripts:
 | 
				
			||||||
        mismatch = True
 | 
					        mismatch = True
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.RED, end='')
 | 
				
			||||||
        print('Scripts mismatch detected for {}!'.format(pkg.name))
 | 
					        print('Scripts mismatch detected for {}!'.format(pkg.name))
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.END, end='')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not brief:
 | 
					        if not brief:
 | 
				
			||||||
 | 
					            if color:
 | 
				
			||||||
 | 
					                print(colors.YELLOW, end='')
 | 
				
			||||||
            scripts_diff = DeepDiff(pkg.reported_manifest.scripts, pkg.actual_manifest.scripts, verbose_level=2)
 | 
					            scripts_diff = DeepDiff(pkg.reported_manifest.scripts, pkg.actual_manifest.scripts, verbose_level=2)
 | 
				
			||||||
            pprint(scripts_diff, indent=2)
 | 
					            pprint(scripts_diff, indent=2)
 | 
				
			||||||
 | 
					            if color:
 | 
				
			||||||
 | 
					                print(colors.END, end='')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if pkg.actual_manifest.name != pkg.reported_manifest.name:
 | 
					    if pkg.actual_manifest.name != pkg.reported_manifest.name:
 | 
				
			||||||
        mismatch = True
 | 
					        mismatch = True
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.RED, end='')
 | 
				
			||||||
        print('Name mismatch detected for {}!'.format(pkg.name))
 | 
					        print('Name mismatch detected for {}!'.format(pkg.name))
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.END, end='')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not brief:
 | 
					        if not brief:
 | 
				
			||||||
 | 
					            if color:
 | 
				
			||||||
 | 
					                print(colors.YELLOW, end='')
 | 
				
			||||||
            print('Reported name: {}'.format(pkg.reported_manifest.name))
 | 
					            print('Reported name: {}'.format(pkg.reported_manifest.name))
 | 
				
			||||||
            print('Actual name:   {}'.format(pkg.actual_manifest.name))
 | 
					            print('Actual name:   {}'.format(pkg.actual_manifest.name))
 | 
				
			||||||
 | 
					            if color:
 | 
				
			||||||
 | 
					                print(colors.END, end='')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if not mismatch:
 | 
					    if not mismatch:
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.GREEN, end='')
 | 
				
			||||||
        print('No mismatch detected for {}.'.format(pkg.name))
 | 
					        print('No mismatch detected for {}.'.format(pkg.name))
 | 
				
			||||||
 | 
					        if color:
 | 
				
			||||||
 | 
					            print(colors.END, end='')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return mismatch
 | 
					    return mismatch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -138,11 +186,12 @@ def main():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    parser = argparse.ArgumentParser(prog='npm-manifest-check', description='Check NPM packages for manifest mismatches')
 | 
					    parser = argparse.ArgumentParser(prog='npm-manifest-check', description='Check NPM packages for manifest mismatches')
 | 
				
			||||||
    parser.add_argument('-b', '--brief', action='store_true', help='do not show detailed comparisons of mismatching values')
 | 
					    parser.add_argument('-b', '--brief', action='store_true', help='do not show detailed comparisons of mismatching values')
 | 
				
			||||||
 | 
					    parser.add_argument('-c', '--color', action='store_true', help='colorize the output')
 | 
				
			||||||
    parser.add_argument('package', type=str, help='name of the NPM package')
 | 
					    parser.add_argument('package', type=str, help='name of the NPM package')
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    args = parser.parse_args()
 | 
					    args = parser.parse_args()
 | 
				
			||||||
    package = Package(args.package)
 | 
					    package = Package(args.package)
 | 
				
			||||||
    mismatching = compare_manifests(package, brief=args.brief)
 | 
					    mismatching = compare_manifests(package, brief=args.brief, color=args.color)
 | 
				
			||||||
    if mismatching:
 | 
					    if mismatching:
 | 
				
			||||||
        sys.exit(1)
 | 
					        sys.exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user