# Convert html links of a tags and src of img tags from bs4 import BeautifulSoup import os import re import sys if sys.version_info.major == 3: unicode = str try: reload(sys) # Python 2.7 sys.setdefaultencoding('utf-8') except NameError: pass abs_hyper_link_pattern = re.compile(r'https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}') image_rel_src_pattern = re.compile(r'^[\.\/]*media\/') doc_version_pattern = re.compile(r'\/(v\d+\.\d+|stable|dev)') docs_type_pattern = re.compile(r'(docs|docs-cn)\/(tidb-in-kubernetes|tidb-data-migration)') file_path = sys.argv[1] folder = sys.argv[2] default_version = '' if file_path == "dist/docs/index.html" or file_path == "dist/docs-cn/index.html": default_version = '/stable' with open(file_path, 'r') as f: soup = BeautifulSoup(f.read(), 'lxml') for link in soup.find_all('a'): href = link['href'] if href: if (not abs_hyper_link_pattern.match(href)) and href.rfind('.md') > 0: href = href.replace('.md', '') href = re.sub(r'^[\.\/]*', '/', href, count=0, flags=0) # process links in dm/operator docs, which need to flat url if (docs_type_pattern.match(folder)) and len(href.split('/')) > 2: length = len(href.split('/')) href = href.split('/')[length - 1] href = os.path.normpath('/' + folder + default_version + '/' + href) link['href'] = href for img in soup.find_all('img'): src = img['src'] if src: if (not abs_hyper_link_pattern.match(src)) and image_rel_src_pattern.match(src): _src = re.sub(r'[\.\/]*media\/', '/', src, count=0, flags=0) if (doc_version_pattern.search(folder)): folder = re.sub(r'\/(v\d+\.\d+|stable|dev)', '', folder) if (docs_type_pattern.match(folder)): folder = re.sub(r'(docs|docs-cn)\/', '', folder) _src = 'https://download.pingcap.com/images/' + folder + _src img['data-original']= _src img['src'] = '/images/svgs/loader-spinner.svg' img['class'] = 'lazy' elif abs_hyper_link_pattern.match(src): img['data-original']= src img['src'] = '/images/svgs/loader-spinner.svg' img['class'] = 'lazy' # Write html with open(file_path, 'w') as f: f.write(unicode(soup))