def update_udhr(udhr_dir, fetch_dir, in_repo): """Delete udhr_dir and rebuild with files extracted from udhr_xml.zip in fetch_dir. Stage if udhr_dir is in the repo.""" zippath = os.path.join(fetch_dir, UDHR_XML_ZIP_NAME) tool_utils.check_file_exists(zippath) if in_repo and os.path.isdir( udhr_dir) and not tool_utils.git_is_clean(udhr_dir): raise ValueError('Please clean %s.' % udhr_dir) if os.path.isdir(udhr_dir): shutil.rmtree(udhr_dir) os.makedirs(udhr_dir) tool_utils.zip_extract_with_timestamp(zippath, udhr_dir) # dos line endings, sheesh tool_utils.dos2unix(udhr_dir, ['*.xml', '*.rnc', '*.rng']) if in_repo: tool_utils.git_add_all(udhr_dir) date = datetime.datetime.now().strftime('%Y-%m-%d') dst = 'in %s ' % udhr_dir if not in_repo else '' print 'Update UDHR files %sfrom %s as of %s.' % (dst, fetch_dir, date)
def update_samples(sample_dir, udhr_dir, bcp_to_code_attrib, in_repo): """Create samples in sample_dir from the sources in udhr_dir, based on the bcp_to_code mapping. Stage if sample_dir is in the repo.""" tool_utils.check_dir_exists(udhr_dir) if in_repo and os.path.isdir(sample_dir) and not tool_utils.git_is_clean(sample_dir): raise ValueError('Please clean %s.' % sample_dir) comments = [ '# Attributions for sample excerpts:', '# original - in the public domain, no attribution', '# UN - UN, OHCHR, or affiliate, attribute to UN', '# other - not a UN translation', '# none - not on ohchr, not a UN translation' ] sample_attrib_list = [] sample_dir = tool_utils.ensure_dir_exists(sample_dir) count = 0 for bcp, (code, attrib) in bcp_to_code_attrib.iteritems(): text = None src_file = 'udhr_%s.xml' % code dst_file = '%s.txt' % bcp src_path = os.path.join(udhr_dir, src_file) dst_path = os.path.join(sample_dir, dst_file) sample = extract_para(src_path) sample = fix_sample(sample, bcp) if not sample: print 'unable to get sample from %s' % src_file return else: with codecs.open(dst_path, 'w', 'utf8') as f: f.write(sample) print 'created sample %s from %s' % (dst_file, src_file) sample_attrib_list.append('%s: %s' % (bcp, attrib)) count += 1 print 'Created %d samples' % count # Some existing samples that we don't overwrite are not in bcp_to_code_attrib, # so they're not listed. Readers of the attributions.txt file will need to # default these to 'none'. attrib_data = '\n'.join(comments + sorted(sample_attrib_list)) with open(os.path.join(sample_dir, 'attributions.txt'), 'w') as f: f.write(attrib_data) if in_repo: tool_utils.git_add_all(sample_dir) date = datetime.datetime.now().strftime('%Y-%m-%d') dst = 'in %s ' % sample_dir if not in_repo else '' print 'Update sample files %sfrom %s as of %s.' % (dst, udhr_dir, date)
def update_cldr(noto_repo, cldr_repo, update=False, cldr_tag=''): """Copy needed directories/files from cldr_repo to noto_repo/third_party/cldr.""" noto_repo = os.path.abspath(noto_repo) cldr_repo = os.path.abspath(cldr_repo) noto_cldr = os.path.join(noto_repo, 'third_party/cldr') tool_utils.check_dir_exists(noto_cldr) tool_utils.check_dir_exists(cldr_repo) if not tool_utils.git_is_clean(noto_repo): print 'Please fix' return if update: tool_utils.svn_update(cldr_repo) # get version of cldr. Unfortunately, this doesn't know about tags. cldr_version = tool_utils.svn_get_version(cldr_repo) # prepare and create README.third_party readme_text = string.Template(README_TEMPLATE).substitute(version=cldr_version, tag=cldr_tag) with open(os.path.join(noto_cldr, 'README.third_party'), 'w') as f: f.write(readme_text) # remove/replace directories for subdir in CLDR_SUBDIRS: src = os.path.join(cldr_repo, subdir) dst = os.path.join(noto_cldr, subdir) print 'replacing directory %s...' % subdir shutil.rmtree(dst) shutil.copytree(src, dst) # replace files for f in CLDR_FILES: print 'replacing file %s...' % f src = os.path.join(cldr_repo, f) dst = os.path.join(noto_cldr, f) shutil.copy(src, dst) # git can now add everything, even removed files with tool_utils.temp_chdir(noto_cldr): subprocess.check_call(['git', 'add', '--', '.']) # print commit message tag_string = (' tag %s' % cldr_tag) if cldr_tag else '' print 'Update CLDR data to SVN r%s%s.' % (cldr_version, tag_string)
def update_cldr(noto_repo, cldr_repo, update=False, cldr_tag=''): """Copy needed directories/files from cldr_repo to noto_repo/third_party/cldr.""" noto_repo = os.path.abspath(noto_repo) cldr_repo = os.path.abspath(cldr_repo) noto_cldr = os.path.join(noto_repo, 'third_party/cldr') tool_utils.check_dir_exists(noto_cldr) tool_utils.check_dir_exists(cldr_repo) if not tool_utils.git_is_clean(noto_repo): print 'Please fix' return if update: tool_utils.svn_update(cldr_repo) # get version of cldr. Unfortunately, this doesn't know about tags. cldr_version = tool_utils.svn_get_version(cldr_repo) # prepare and create README.third_party readme_text = string.Template(README_TEMPLATE).substitute( version=cldr_version, tag=cldr_tag) with open(os.path.join(noto_cldr, 'README.third_party'), 'w') as f: f.write(readme_text) # remove/replace directories for subdir in CLDR_SUBDIRS: src = os.path.join(cldr_repo, subdir) dst = os.path.join(noto_cldr, subdir) print 'replacing directory %s...' % subdir shutil.rmtree(dst) shutil.copytree(src, dst) # replace files for f in CLDR_FILES: print 'replacing file %s...' % f src = os.path.join(cldr_repo, f) dst = os.path.join(noto_cldr, f) shutil.copy(src, dst) # stage changes in cldr dir tool_utils.git_add_all(noto_cldr) # print commit message tag_string = (' tag %s' % cldr_tag) if cldr_tag else '' print 'Update CLDR data to SVN r%s%s.' % (cldr_version, tag_string)
def update_repo(repo_samples, new_samples): # Verify directory is clean. if not tool_utils.git_is_clean(new_samples): print 'Please fix.' return # Copy samples into git repo for filename in os.listdir(new_samples): filepath = os.path.join(new_samples, filename) if not os.path.isfile(filepath): continue shutil.copy2(filename, repo_samples) # Stage changes. tool_utils.git_add_all(new_samples) # Sample commit message. print 'Update UDHR sample data.'
def update_udhr(udhr_dir, fetch_dir, in_repo): """Delete udhr_dir and rebuild with files extracted from udhr_xml.zip in fetch_dir. Stage if udhr_dir is in the repo.""" zippath = os.path.join(fetch_dir, UDHR_XML_ZIP_NAME) tool_utils.check_file_exists(zippath) if in_repo and os.path.isdir(udhr_dir) and not tool_utils.git_is_clean(udhr_dir): raise ValueError('Please clean %s.' % udhr_dir) if os.path.isdir(udhr_dir): shutil.rmtree(udhr_dir) os.makedirs(udhr_dir) tool_utils.zip_extract_with_timestamp(zippath, udhr_dir) if in_repo: tool_utils.git_add_all(udhr_dir) date = datetime.datetime.now().strftime('%Y-%m-%d') dst = 'in %s ' % udhr_dir if not in_repo else '' print 'Update UDHR files %sfrom %s as of %s.' % (dst, fetch_dir, date)
def update_udhr(udhr_dir, fetch_dir, in_repo): """Delete udhr_dir and rebuild with files extracted from udhr_xml.zip in fetch_dir. Stage if udhr_dir is in the repo.""" zippath = os.path.join(fetch_dir, UDHR_XML_ZIP_NAME) tool_utils.check_file_exists(zippath) if in_repo and os.path.isdir(udhr_dir) and not tool_utils.git_is_clean(udhr_dir): raise ValueError("Please clean %s." % udhr_dir) if os.path.isdir(udhr_dir): shutil.rmtree(udhr_dir) os.makedirs(udhr_dir) tool_utils.zip_extract_with_timestamp(zippath, udhr_dir) # dos line endings, sheesh tool_utils.dos2unix(udhr_dir, ["*.xml", "*.rnc", "*.rng"]) if in_repo: tool_utils.git_add_all(udhr_dir) date = datetime.datetime.now().strftime("%Y-%m-%d") dst = "in %s " % udhr_dir if not in_repo else "" print "Update UDHR files %sfrom %s as of %s." % (dst, fetch_dir, date)
def update_samples(sample_dir, udhr_dir, bcp_to_code_attrib, in_repo): """Create samples in sample_dir from the sources in udhr_dir, based on the bcp_to_code mapping. Stage if sample_dir is in the repo. If sample_dir is in the repo, don't overwrite samples whose most recent log entry does not start with 'Updated by tool'""" tool_utils.check_dir_exists(udhr_dir) if in_repo and os.path.isdir(sample_dir) and not tool_utils.git_is_clean(sample_dir): raise ValueError('Please clean %s.' % sample_dir) if in_repo: repo, subdir = os.path.split(sample_dir) tool_samples = frozenset(tool_utils.get_tool_generated(repo, subdir)) print 'only allowing overwrite of:\n %s' % '\n '.join(sorted(tool_samples)) comments = [ '# Attributions for sample excerpts:', '# original - in the public domain, no attribution', '# UN - UN, OHCHR, or affiliate, attribute to UN', '# other - not a UN translation', '# none - not on ohchr, not a UN translation' ] sample_attrib_list = [] sample_dir = tool_utils.ensure_dir_exists(sample_dir) count = 0 for bcp, (code, attrib) in bcp_to_code_attrib.iteritems(): text = None src_file = 'udhr_%s.xml' % code dst_file = '%s_udhr.txt' % bcp src_path = os.path.join(udhr_dir, src_file) dst_path = os.path.join(sample_dir, dst_file) sample = extract_para(src_path) if not sample: print 'unable to get sample from %s' % src_file return if in_repo and os.path.isfile(dst_path) and dst_file not in tool_samples: print 'Not overwriting modified file %s' % dst_file else: sample = fix_sample(sample, bcp) with codecs.open(dst_path, 'w', 'utf8') as f: f.write(sample) print 'created sample %s from %s' % (dst_file, src_file) count += 1 sample_attrib_list.append('%s: %s' % (dst_file, attrib)) print 'Created %d samples' % count # Some existing samples that we don't overwrite are not in bcp_to_code_attrib, # so they're not listed. Readers of the attributions.txt file will need to # default these to 'none'. attrib_data = '\n'.join(comments + sorted(sample_attrib_list)) + '\n' with open(os.path.join(sample_dir, 'attributions.txt'), 'w') as f: f.write(attrib_data) if in_repo: tool_utils.git_add_all(sample_dir) date = datetime.datetime.now().strftime('%Y-%m-%d') dst = 'in %s ' % sample_dir if not in_repo else '' noto_ix = udhr_dir.find('nototools') src = udhr_dir if noto_ix == -1 else udhr_dir[noto_ix:] # prefix of this sample commit message indicates that these were tool-generated print 'Updated by tool - sample files %sfrom %s as of %s.' % (dst, src, date)