Skip to content

Instantly share code, notes, and snippets.

@alanmatiasdev
Forked from yebt/get_composer_deps.py
Created September 5, 2023 22:49
Show Gist options
  • Save alanmatiasdev/c50894ccc080e4842e17b8e826c1b889 to your computer and use it in GitHub Desktop.
Save alanmatiasdev/c50894ccc080e4842e17b8e826c1b889 to your computer and use it in GitHub Desktop.

Revisions

  1. @yebt yebt revised this gist May 19, 2022. 2 changed files with 5 additions and 9 deletions.
    8 changes: 3 additions & 5 deletions get_composer_deps.py
    Original file line number Diff line number Diff line change
    @@ -18,9 +18,7 @@
    print(f"Error!! -- The file '{filename}' dont exist" )
    exit()


    # load the json file
    #with open(filename, 'r') as json_file:
    # get the data
    json_load = json.load(json_file)

    # interactive vars
    @@ -66,9 +64,9 @@ def manage_indirect_deps( ind_deps_list :list) -> None:
    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] + '\"'
    str_req_dev += '\n \"'+dep + '\": \"^' + direct_dependences_dict[dep][0] + '\"'
    else:
    str_req += '\n \"'+dep + '\": \"' + direct_dependences_dict[dep][0] + '\"'
    str_req += '\n \"'+dep + '\": \"^' + direct_dependences_dict[dep][0] + '\"'

    str_req += '\n},'
    str_req_dev += '\n}'
    6 changes: 2 additions & 4 deletions get_composer_deps_colorfull.py
    Original file line number Diff line number Diff line change
    @@ -68,11 +68,9 @@ def manage_indirect_deps( ind_deps_list :list) -> None:

    for dep in direct_dependences_dict:
    if direct_dependences_dict[dep][1]:
    req_dev_json_dic[dep] = direct_dependences_dict[dep][0]
    # str_req_dev += '\n \"'+dep + '\": \"' + direct_dependences_dict[dep][0] + '\"'
    req_dev_json_dic[dep] = "^" + direct_dependences_dict[dep][0]
    else:
    req_json_dic[dep] = direct_dependences_dict[dep][0]
    # str_req += '\n \"'+dep + '\": \"' + direct_dependences_dict[dep][0] + '\"'
    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}
  2. @yebt yebt revised this gist May 19, 2022. 1 changed file with 91 additions and 0 deletions.
    91 changes: 91 additions & 0 deletions get_composer_deps_colorfull.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,91 @@
    #!/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 <path/to/vendor/composer/installed.json>')
    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]
    # str_req_dev += '\n \"'+dep + '\": \"' + direct_dependences_dict[dep][0] + '\"'
    else:
    req_json_dic[dep] = direct_dependences_dict[dep][0]
    # str_req += '\n \"'+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)
  3. @yebt yebt created this gist May 19, 2022.
    77 changes: 77 additions & 0 deletions get_composer_deps.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,77 @@
    #!/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 <path/to/vendor/composer/installed.json>')
    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()


    # load the json file
    #with open(filename, 'r') as json_file:
    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)