vxorg/python_refonly/vxorg.py
Lily Tsuru af49206a16 Rewrite it in C++
rust people are going to be very mad at me now /j
2024-10-21 12:22:35 -04:00

69 lines
1.4 KiB
Python

#!/usr/bin/env python
# simple script to organize the vxheaven collection
#
# Usage:
# Create input list
# Run this script
# ... Watch it go?
import os
import sys
from pathlib import Path, PurePath
import tree
import vxheaven_parse
# tree used to hold samples
sample_tree = tree.Tree()
def get_sample_name_from_tree_node(node):
sample_name = ''
if not node.is_sample:
return sample_name
parent_list = []
parent = node.parent
while parent is not None:
# reached the root node of the tree
if parent.item is None:
break
parent_list.append(parent.item)
parent = parent.parent
for item in reversed(parent_list):
sample_name += f'{item}.'
sample_name += node.item
return sample_name
# python doesn't have true anonymous functions.
# I really regret writing this in python but i've sunk too much
# in to rewrite this in C++ or something
def walk_cb(node):
node_name = '(root)'
sample_name = get_sample_name_from_tree_node(node)
if node.item is not None:
node_name = node.item
# Tab the list for clarity
tab = ''
for i in range(0, node.get_parent_count()):
tab += '\t'
leaf = ''
if node.is_sample:
leaf = f' (sample {sample_name})'
print(f"{tab}{node_name}{leaf}")
# Parse sample tree from vxheaven list
vxheaven_parse.parse_into_tree(sample_tree, './samples.sort')
# Walk the sample tree (currently, just dumps it for debugging)
sample_tree.walk(walk_cb)