You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
catcli/catcli/walker.py

45 lines
1.3 KiB
Python

"""
author: deadc0de6 (https://github.com/deadc0de6)
Copyright (c) 2017, deadc0de6
Catcli filesystem indexer
"""
import os
import anytree
# local imports
from catcli.noder import Noder
from catcli.logger import Logger
class Walker:
def __init__(self, noder, nohash=False):
self.noder = noder
self.noder.set_hashing(not nohash)
def index(self, path, name, parentpath=None, parent=None, isdir=False):
''' index a folder and store in tree '''
if not parent:
parent = noder.dir_node(name, path, parent)
cnt = 0
for (root, dirs, files) in os.walk(path):
for f in files:
sub = os.path.join(root, f)
Logger.progr('indexing: {:80}'.format(f))
self.noder.file_node(os.path.basename(f), sub,
parent, parentpath)
cnt += 1
for d in dirs:
base = os.path.basename(d)
sub = os.path.join(root, d)
dummy = self.noder.dir_node(base, sub, parent, parentpath)
_, cnt2 = self.index(sub, base,
parent=dummy, parentpath=parentpath)
cnt += cnt2
break
return parent, cnt