carbon-a-release / build.py
lvwerra's picture
lvwerra HF Staff
Freeze clicked strands until outside release and add verified assembly downloads
c5eee7b verified
Raw History Blame Contribute Delete
2.11 kB
from pathlib import Path
import base64,json,gzip
ROOT=Path(__file__).parent
D=json.loads((ROOT/'data/tree-data.json').read_text()); meta=json.loads((ROOT/'data/human-metadata.json').read_text());genes=[];last=None;count=0
with gzip.open(ROOT/'data/human-annotations.gff3.gz','rt') as f:
for line in f:
if line.startswith('#'):continue
r=line.rstrip().split('\t')
if r[2]=='gene':count+=1
if r[0]!='CM000663.2' or int(r[3])>1000000:continue
if r[2]=='gene':
attr=dict(x.split('=',1) for x in r[8].split(';') if '=' in x)
last={'id':attr['ID'],'start':int(r[3]),'end':int(r[4]),'strand':r[6],'cds':[]};genes.append(last)
if r[2]=='CDS' and last:last['cds'].append([int(r[3]),int(r[4])])
assert count==meta['gene_count'],(count,meta['gene_count'])
D['example']={'accession':meta['genbank_accession'],'gene_count':meta['gene_count'],'genes':genes}
counts=json.loads((ROOT/'data/locus-counts.json').read_text())
D['loci']={'counts':{a:v['loci'] for a,v in counts['records'].items()},'summary':counts['summary'],'source_field':'gene_count','retrieved_at':counts['retrieved_at']}
D['loci']['paths']={a:v['path'].rsplit('/',1)[0] for a,v in counts['records'].items()}
D['loci']['bucket']=counts['source_bucket']
D['icons']=json.loads((ROOT/'data/atlas-icons.json').read_text())
css=''.join(f"@font-face{{font-family:{n};src:url(data:font/ttf;base64,{base64.b64encode((ROOT.parent/'assets'/f'{n}.ttf').read_bytes()).decode()}) format('truetype');font-weight:100 900;font-display:swap}}" for n in ['Inter','Manrope'])
payload=base64.b64encode(gzip.compress(json.dumps(D,separators=(',',':'),ensure_ascii=False).encode(),mtime=0)).decode()
s=(ROOT/'template.html').read_text().replace('__FONTS__',css).replace('__DATA__',payload).replace('__SCRIPT__',(ROOT/'theme.js').read_text()+'\n'+(ROOT/'layers.js').read_text()+'\n'+(ROOT/'sweep.js').read_text()+'\n'+(ROOT/'access.js').read_text()+'\n'+(ROOT/'app.js').read_text())
(ROOT/'index.html').write_text(s)
(ROOT/'data/example-genes.json').write_text(json.dumps(D['example'],indent=2))
print('html',len(s),'real genes',count,'window loci',len(genes))