Spaces:
Running
Running
Download build.py from HuggingFaceBio/carbon-a-release: direct link, hf CLI and curl.
- Browser
- Download file 2.11 kB
-
https://huggingface.co/spaces/HuggingFaceBio/carbon-a-release/resolve/main/build.py
- Command line
-
hf download hf://spaces/HuggingFaceBio/carbon-a-release/build.py
-
curl -L -o build.py https://huggingface.co/spaces/HuggingFaceBio/carbon-a-release/resolve/main/build.py
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)) | |