def get_paths_html(folder): paths_html = [] folder_raw = os.path.join(folder,'raw') if not os.path.isdir(folder_raw): status.important(NAME,( 'Folder `{}` must contain a `raw/` subfolder'.format(folder) )) status.stop(NAME) for path_folder, subfolders, files in os.walk(folder_raw): for subfolder in subfolders: if subfolder == '__MACOSX': path_MACOSX = os.path.join(path_folder, subfolder) status.important(NAME,( "Removing `{}`\n - Not needed (this is no big deal)" ).format(path_MACOSX)) shutil.rmtree(path_MACOSX) for path_folder, subfolders, files in os.walk(folder_raw): for f in files: if f.endswith('.html'): path_html = os.path.join(path_folder,f) paths_html.append(path_html) if not paths_html: status.important(NAME,( 'No .html files located inside `{}`'.format(folder) )) status.stop(NAME) return paths_html
def get_paths_html(folder): paths_html = [] folder_raw = os.path.join(folder, 'raw') if not os.path.isdir(folder_raw): status.important( NAME, ('Folder `{}` must contain a `raw/` subfolder'.format(folder))) status.stop(NAME) for path_folder, subfolders, files in os.walk(folder_raw): for subfolder in subfolders: if subfolder == '__MACOSX': path_MACOSX = os.path.join(path_folder, subfolder) status.important( NAME, ("Removing `{}`\n - Not needed (this is no big deal)" ).format(path_MACOSX)) shutil.rmtree(path_MACOSX) for path_folder, subfolders, files in os.walk(folder_raw): for f in files: if f.endswith('.html'): path_html = os.path.join(path_folder, f) paths_html.append(path_html) if not paths_html: status.important(NAME, ('No .html files located inside `{}`'.format(folder))) status.stop(NAME) return paths_html
def get_args(): _args = sys.argv[1:] if not _args: print ( "[{NAME}]\n\n" "Usage:\n" "python {NAME}.py folder\n" "python {NAME}.py path/to/folder\n" "python {NAME}.py folder1 folder2 ... folderN\n" ).format(NAME=NAME) status.stop(NAME) elif not all(os.path.isdir(_arg) for _arg in _args): dirs_available = [i for i in os.listdir(os.getcwd()) if (os.path.isdir(i) and not i.startswith('.') and not i.startswith('_'))] status.important(NAME,( 'Arguments must be directories from the repo root.\n\n' 'The available directories are:\n' ' {}'.format('\n '.join(dirs_available)) )) status.stop(NAME) else: args = [os.path.dirname(_arg+'/') for _arg in _args] return args
def get_args(): _args = sys.argv[1:] if not _args: print ( "[{NAME}]\n\n" "Usage:\n" "python {NAME}.py path/to/file\n" "python {NAME}.py path/to/file1 path/to/file2 " "... path/to/fileN\n" ).format(NAME=NAME) status.stop(NAME) return _args
def check_translate(folder, paths_html, translate_filename_url): files_html_translate = translate_filename_url.keys() files_html = [os.path.split(path_html)[1] for path_html in paths_html] # Case 0: if .json and raw/ align, return paths_html if set(files_html_translate) == set(files_html): return paths_html # Case 1: if .json < raw/, return part of paths_html contained in .json elif len(files_html_translate) < len(files_html): diff = list(set(files_html) - set(files_html_translate)) to_be = 'was' if len(diff) == 1 else 'were' to_have = 'has' if len(diff) == 1 else 'have' status.important(NAME, ("File(s): \n\n {diff}\n\n" "{to_be} found from `{folder}/raw/` but {to_have} " "no correspondence\n" "in `{folder}/translate_filename_url.json`.\n\n" "Note that files not listed in " "`{folder}/translate_filename_url.json`\n" "will NOT be published").format(diff='\n'.join(diff), folder=folder, to_be=to_be, to_have=to_have)) return [ path_html for path_html in paths_html if (os.path.split(path_html)[1] in files_html_translate) ] # Case 2: if .json > raw/, stop execution else: diff = list(set(files_html_translate) - set(files_html)) to_be = 'is' if len(diff) == 1 else 'are' to_have = 'has' if len(diff) == 1 else 'have' status.important( NAME, ("File(s): \n\n {diff}\n\n" "{to_be} listed in " "`{folder}/translate_filename_url.json` but {to_have} " "no correspondence\n" "in `{folder}/raw/`.\n\n" "Note that files not found in " "`{folder}/raw` CANNOT be published").format(diff='\n'.join(diff), folder=folder, to_be=to_be, to_have=to_have)) status.stop(NAME) return
def get_translate_filename_url(folder): file_path = os.path.join(folder, 'translate_filename_url.json') with open(file_path) as f: translate = json.load(f) translate_filename_url = dict() translate_redirects = dict() for k, v in translate.items(): if isinstance(v, list) and isinstance(v[-1], (str, unicode)): translate_filename_url[k] = v[-1] translate_redirects[v[-1]] = v[0:-1] elif isinstance(v, (str, unicode)): translate_filename_url[k] = v else: status.important(NAME, ( "object values in {}/translate_filename_url.json\n" "must be either a string (the urls)\n" "or a list of strings (to handle redirects)" ).format(folder)) status.stop(NAME) return translate_filename_url, translate_redirects
def get_translate_filename_url(folder): file_path = os.path.join(folder, 'translate_filename_url.json') with open(file_path) as f: translate = json.load(f, object_pairs_hook=OrderedDict) translate_filename_url = OrderedDict() translate_redirects = OrderedDict() for k, v in translate.items(): if isinstance(v, list) and isinstance(v[-1], (str, unicode)): translate_filename_url[k] = v[-1] translate_redirects[v[-1]] = v[0:-1] elif isinstance(v, (str, unicode)): translate_filename_url[k] = v else: status.important(NAME, ( "object values in {}/translate_filename_url.json\n" "must be either a string (the urls)\n" "or a list of strings (to handle redirects)" ).format(folder)) status.stop(NAME) return translate_filename_url, translate_redirects
def check_translate(folder, paths_html, translate_filename_url): files_html_translate = translate_filename_url.keys() files_html = [os.path.split(path_html)[1] for path_html in paths_html] # Case 0: if .json and raw/ align, return paths_html if set(files_html_translate) == set(files_html): return paths_html # Case 1: if .json < raw/, return part of paths_html contained in .json elif len(files_html_translate) < len(files_html): diff = list(set(files_html) - set(files_html_translate)) to_be = 'was' if len(diff)==1 else 'were' to_have = 'has' if len(diff)==1 else 'have' status.important(NAME,( "File(s): \n\n {diff}\n\n" "{to_be} found from `{folder}/raw/` but {to_have} " "no correspondence\n" "in `{folder}/translate_filename_url.json`.\n\n" "Note that files not listed in " "`{folder}/translate_filename_url.json`\n" "will NOT be published" ).format(diff='\n'.join(diff),folder=folder, to_be=to_be,to_have=to_have)) return [path_html for path_html in paths_html if (os.path.split(path_html)[1] in files_html_translate)] # Case 2: if .json > raw/, stop execution else: diff = list(set(files_html_translate) - set(files_html)) to_be = 'is' if len(diff)==1 else 'are' to_have = 'has' if len(diff)==1 else 'have' status.important(NAME,( "File(s): \n\n {diff}\n\n" "{to_be} listed in " "`{folder}/translate_filename_url.json` but {to_have} " "no correspondence\n" "in `{folder}/raw/`.\n\n" "Note that files not found in " "`{folder}/raw` CANNOT be published" ).format(diff='\n'.join(diff),folder=folder, to_be=to_be,to_have=to_have)) status.stop(NAME) return
def get_args(): _args = sys.argv[1:] if not _args: print( "[{NAME}]\n\n" "Usage:\n" "python {NAME}.py folder\n" "python {NAME}.py path/to/folder\n" "python {NAME}.py folder1 folder2 ... folderN\n").format(NAME=NAME) status.stop(NAME) elif not all(os.path.isdir(_arg) for _arg in _args): dirs_available = [ i for i in os.listdir(os.getcwd()) if (os.path.isdir(i) and not i.startswith('.') and not i.startswith('_')) ] status.important( NAME, ('Arguments must be directories from the repo root.\n\n' 'The available directories are:\n' ' {}'.format('\n '.join(dirs_available)))) status.stop(NAME) else: args = [os.path.dirname(_arg + '/') for _arg in _args] return args