#!/bin/python # -*- coding: utf-8 -*- import json import sys from pygments import highlight from pygments.formatters.terminal256 import Terminal256Formatter from pygments.lexers.web import JsonLexer # Constant vars if len(sys.argv) != 2: print('Error!! -- No file specified ') print('\t get_composer_deps.py ') exit() filename ='' try: filename = sys.argv[1] json_file= open(filename, 'r') except Exception as e: print(f"Error!! -- The file '{filename}' dont exist" ) exit() # get the data json_load = json.load(json_file) # interactive vars direct_dependences_dict = {} indirect_dependences_list = [] # This manage the indirect dependences and # delete or add this from dictionary or list def manage_indirect_deps( ind_deps_list :list) -> None: # traverse list of indirect dependences for inddep in ind_deps_list: if not(inddep in indirect_dependences_list): # delete 'direct' dependence calls from 'indirect' dependences if inddep in direct_dependences_dict: del direct_dependences_dict[inddep] # add 'indirect' dependence to list indirect_dependences_list.append(inddep) # traverse the data list for obj in json_load: # get the dep data dep_name = obj['name'] dep_version = obj['version_normalized'] dep_dev = (lambda x: ((lambda y: y.get('dev-master') if y else None ) (x.get('branch-alias'))) if x else None ) ( obj.get('extra') ) # verify direct dependeces if not (dep_name in indirect_dependences_list): direct_dependences_dict[dep_name] = (dep_version, dep_dev) # get indeirect dependecnes ind_deps_reqs = obj.get('require') ind_deps_reqs_dev = obj.get('require-dev') # manage indirect dependences manage_indirect_deps(ind_deps_reqs if ind_deps_reqs else [] ) manage_indirect_deps(ind_deps_reqs_dev if ind_deps_reqs_dev else []) # traverse the obtained direct dependencies req_json_dic = {} req_dev_json_dic = {} for dep in direct_dependences_dict: if direct_dependences_dict[dep][1]: req_dev_json_dic[dep] = "^" + direct_dependences_dict[dep][0] else: req_json_dic[dep] = "^" + direct_dependences_dict[dep][0] # get all deps compser_json_dic = {"require": req_json_dic, "require-dev":req_dev_json_dic} # Generate JSON raw_json = json.dumps(compser_json_dic, indent=4) # Colorize it colorful = highlight( raw_json, lexer=JsonLexer(), formatter=Terminal256Formatter(), ) # Print to console print(colorful)