#!/bin/python # -*- coding: utf-8 -*- import json import sys # 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 str_req = '"require": {' str_req_dev = '"require-dev": {' for dep in direct_dependences_dict: if direct_dependences_dict[dep][1]: str_req_dev += '\n \"'+dep + '\": \"^' + direct_dependences_dict[dep][0] + '\"' else: str_req += '\n \"'+dep + '\": \"^' + direct_dependences_dict[dep][0] + '\"' str_req += '\n},' str_req_dev += '\n}' print(str_req) print(str_req_dev)