#!/usr/bin/env python # Copyright 2016 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import json import os import sys ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) METADATA_FILENAME = 'METADATA' METADATA_TEMPLATE_PATH = os.path.join(ROOT_PATH, 'METADATA.template') BASE_NODE_MODULES = os.path.join(ROOT_PATH, 'third_party/node_modules') NODE_MODULES_COUNT = 0 def main(): check_directory(BASE_NODE_MODULES) print('\n\n RESULTS - node modules visited {}'.format(NODE_MODULES_COUNT)) def check_directory(path): files = os.listdir(path) parent_dir = os.path.basename(os.path.dirname(path)) if 'package.json' in files and parent_dir == 'node_modules': process_node_module(path) for f in files: file_path = os.path.join(path, f) if os.path.isdir(file_path): check_directory(file_path) def process_node_module(path): global NODE_MODULES_COUNT # not real node modules, these are test fixtures blacklist_paths = [ '/resolve/test/resolver/biz/node_modules/garply', '/resolve/test/subdirs/node_modules/a', '/resolve/test/pathfilter/deep_ref/node_modules/deep' ] if any(blacklist_path in path for blacklist_path in blacklist_paths): return NODE_MODULES_COUNT += 1 check_license_file(path) generate_metadata(path) def check_license_file(path): for f in os.listdir(path): if f != 'LICENSE' and f.lower() in ['license', 'license.txt', 'license.md', 'licence', 'license.bsd', 'license-mit', 'license.apache2', 'license.closure-compiler', 'mit.license']: src = os.path.join(path, f) dest = os.path.join(path, 'LICENSE') os.rename(src, dest) if 'LICENSE' not in os.listdir(path): print('Invalid license for module:', path) def generate_metadata(path): template_lines = [] with open(METADATA_TEMPLATE_PATH, 'r') as f: for line in f: template_lines.append(line) package_path = os.path.join(path, 'package.json') with open(package_path) as file: data = json.load(file) name = data['name'] version = data['version'] tarball_address = 'https://registry.npmjs.org/%s/-/%s-%s.tgz' % (name, name, version) output_lines = [] for line in template_lines: replace_line = line.replace('@@name@@', name)\ .replace('@@tarball_address@@', tarball_address)\ .replace('@@version@@', version) output_lines.append(replace_line) dest = os.path.join(path, METADATA_FILENAME) with open(dest, 'w') as f: for line in output_lines: try: f.write(line) except UnicodeEncodeError as error: print('Error writing metadata for module:', path, error) if __name__ == '__main__': sys.exit(main())