printing finesse
This commit is contained in:
@@ -19,6 +19,7 @@ MIME=magic.open(magic.MAGIC_NONE)
|
|||||||
#MIME=magic.open(magic.MAGIC_MIME)
|
#MIME=magic.open(magic.MAGIC_MIME)
|
||||||
MIME.load()
|
MIME.load()
|
||||||
ANIM=['.','·',"'","'",'·','.','_']
|
ANIM=['.','·',"'","'",'·','.','_']
|
||||||
|
DEFAULT_CHUNK=1024*1024*50
|
||||||
|
|
||||||
def setup_options():
|
def setup_options():
|
||||||
parser=ArgumentParser(description="Maintains the list of images sqlite file")
|
parser=ArgumentParser(description="Maintains the list of images sqlite file")
|
||||||
@@ -70,7 +71,10 @@ def add_recurse(options):
|
|||||||
conn=sqlite3.connect(options.sqlfile)
|
conn=sqlite3.connect(options.sqlfile)
|
||||||
conn.text_factory=str
|
conn.text_factory=str
|
||||||
db=conn.cursor()
|
db=conn.cursor()
|
||||||
|
prev_path_len=0
|
||||||
for path,dirs,files in os.walk(options.startpath,followlinks=options.symlinks):
|
for path,dirs,files in os.walk(options.startpath,followlinks=options.symlinks):
|
||||||
|
sys.stdout.write("\r%s%s"%(filename_join(path,".",options),(prev_path_len-len(path))*' '))
|
||||||
|
prev_path_len=len(path)
|
||||||
dirs=clean_dirs(dirs)
|
dirs=clean_dirs(dirs)
|
||||||
dirs.sort()
|
dirs.sort()
|
||||||
files.sort()
|
files.sort()
|
||||||
@@ -94,7 +98,7 @@ def add_recurse(options):
|
|||||||
#file content changed
|
#file content changed
|
||||||
add_single(conn,filename,change=True,fullfile=options.fullfile)
|
add_single(conn,filename,change=True,fullfile=options.fullfile)
|
||||||
conn.commit()
|
conn.commit()
|
||||||
|
sys.stdout.write("\n")
|
||||||
return
|
return
|
||||||
|
|
||||||
def add_single(conn,filename,change=False,hash=None,minsize=0,fullfile=False):
|
def add_single(conn,filename,change=False,hash=None,minsize=0,fullfile=False):
|
||||||
@@ -103,7 +107,7 @@ def add_single(conn,filename,change=False,hash=None,minsize=0,fullfile=False):
|
|||||||
hsize=humanize_size(fsize)
|
hsize=humanize_size(fsize)
|
||||||
except IOError:
|
except IOError:
|
||||||
hsize=""
|
hsize=""
|
||||||
print("%s (%s)"%(filename,hsize))
|
print("\r%s (%s)"%(filename,hsize))
|
||||||
db=conn.cursor()
|
db=conn.cursor()
|
||||||
try:
|
try:
|
||||||
if hash==None:
|
if hash==None:
|
||||||
@@ -123,6 +127,7 @@ def add_single(conn,filename,change=False,hash=None,minsize=0,fullfile=False):
|
|||||||
else:
|
else:
|
||||||
db.execute("INSERT INTO list(file,date,hash,size,mime)\
|
db.execute("INSERT INTO list(file,date,hash,size,mime)\
|
||||||
VALUES(?,?,?,?,?)",(filename,ftime,hash,fsize,mime))
|
VALUES(?,?,?,?,?)",(filename,ftime,hash,fsize,mime))
|
||||||
|
sys.stdout.write('\r')
|
||||||
return
|
return
|
||||||
|
|
||||||
def checkdb(options):
|
def checkdb(options):
|
||||||
@@ -140,6 +145,7 @@ def checkdb(options):
|
|||||||
OK_count=0
|
OK_count=0
|
||||||
for row in db:
|
for row in db:
|
||||||
status='OK'
|
status='OK'
|
||||||
|
sys.stdout.write("\r%s"%(row[0],))
|
||||||
if os.path.exists(row[0]):
|
if os.path.exists(row[0]):
|
||||||
md5f=get_md5(row[0],options.fullfile)
|
md5f=get_md5(row[0],options.fullfile)
|
||||||
if row[1]!=md5f:
|
if row[1]!=md5f:
|
||||||
@@ -148,7 +154,7 @@ def checkdb(options):
|
|||||||
else:
|
else:
|
||||||
status='Not-found'
|
status='Not-found'
|
||||||
missing.append(row)
|
missing.append(row)
|
||||||
print("%s %s"%(row[0],status))
|
sys.stdout.write("\r%s %s\n"%(row[0],status))
|
||||||
if status=='OK':
|
if status=='OK':
|
||||||
OK_count+=1
|
OK_count+=1
|
||||||
if len(differing)>0:
|
if len(differing)>0:
|
||||||
@@ -311,22 +317,25 @@ def get_folder_contents(db,path):
|
|||||||
files.append(base)
|
files.append(base)
|
||||||
return files
|
return files
|
||||||
|
|
||||||
|
|
||||||
def get_md5(filename,fullfile=False):
|
def get_md5(filename,fullfile=False):
|
||||||
''' returns content based hash, only first 50Mb is read, unless user wants the whole file '''
|
''' returns content based hash, only first 50Mb is read, unless user wants the whole file '''
|
||||||
if fullfile:
|
fsize=os.path.getsize(filename)
|
||||||
|
if fullfile and fsize>DEFAULT_CHUNK:
|
||||||
anim_i=0
|
anim_i=0
|
||||||
|
anim_len=len(ANIM)
|
||||||
|
filename_len=len(filename)
|
||||||
block_size=2**24
|
block_size=2**24
|
||||||
|
chars_per_block=filename_len/(float(fsize)/block_size)
|
||||||
md5 = hashlib.md5()
|
md5 = hashlib.md5()
|
||||||
with open(filename,'rb') as f:
|
with open(filename,'rb') as f:
|
||||||
for chunk in iter(lambda: f.read(block_size), b''):
|
for chunk in iter(lambda: f.read(block_size), b''):
|
||||||
sys.stdout.write('\r'+ANIM[anim_i])
|
sys.stdout.write('\r'+(int(anim_i*chars_per_block)*'_')+ANIM[anim_i%anim_len])
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
anim_i=(anim_i+1)%len(ANIM)
|
anim_i+=1
|
||||||
md5.update(chunk)
|
md5.update(chunk)
|
||||||
sys.stdout.write('\r')
|
sys.stdout.write('\r'+filename_len*' ')
|
||||||
return md5.hexdigest()
|
return md5.hexdigest()
|
||||||
return hashlib.md5(open(filename,'rb').read(1024*1024*50)).hexdigest()
|
return hashlib.md5(open(filename,'rb').read(DEFAULT_CHUNK)).hexdigest()
|
||||||
|
|
||||||
|
|
||||||
def has_changes(options):
|
def has_changes(options):
|
||||||
|
|||||||
Reference in New Issue
Block a user