""" Return list of pipe instance starting from pipedir.
"""
lstpipe=[]
found=False
dircontent=glob.glob(path.join(pipedir,"seg_*"))
## visit each segment's repository
forcindircontent:
## this is a node
ifpath.isdir(c):
lstpipe.append(c)
lstpipe+=parse_disk(c)
returnlstpipe
defrebuild_db_from_disk(pipedir,sqlfile=None):
""" Rebuild db from disk.
Parameters
----------
pipedir: string, a pipeline prefix
sqlfile: string, sql file name (default is pipedir/.sqlstatus)
"""
## set sqlfile
ifsqlfileisNone:
sqlfile=os.path.join(pipedir,".sqlstatus")
## 1---: create all tables
## taken from sqlite tracker constructor
conn=sqlite3.connect(sqlfile)
conn.text_factory=str
cur=conn.execute('select tbl_name from sqlite_master where tbl_name == "tasks"')
ifnotcur.fetchone():
withconn:
conn.execute('create table segments (seg_id INTEGER PRIMARY KEY, seg TEXT NOT NULL, curr_dir TEXT NOT NULL UNIQUE, param TEXT, tag TEXT, comment TEXT)')
conn.execute('create table tasks (task_id INTEGER PRIMARY KEY, seg_id INTEGER NOT NULL, status TEXT NOT NULL, input BLOB NOT NULL, output BLOB, str_input NOT NULL, queued_on TEXT, begun_on TEXT, ended_on TEXT)')
conn.execute('create table task_relations (father_id INTEGER NOT NULL, child_id INTEGER NOT NULL)')
conn.execute('create table segment_relations (father_id INTEGER NOT NULL, child_id INTEGER NOT NULL)')
conn.row_factory=sqlite3.Row
## 2---: segments table from curr_dir
lst_dir=parse_disk(pipedir)## list curr_dir
seg_id_cache={}## store new seg_id for each curr_dir
seg_depend_cache={}## store parents for each curr_dir