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

79 lines
2.1 KiB

#!/usr/bin/python
import sqlite3
import functools
def hash_file(path,hash_if_less,sample):
return _imohash(path,hash_if_less,sample)
def hashify(top,hashfunc):
old_dir = os.getcwd()
os.chdir(top)
ret = []
for root,dirs,files in os.walk('.'):
try:
for file in files:
filepath = os.path.join(root,file)
hash = hashfunc(filepath)
ret.append(
(
filepath,
hash
)
)
except PermissionError:
print('Access denied:',root)
except Exception as e:
print(e,file)
os.chdir(old_dir)
return ret
def __init_database__(con):
cur = con.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS `PATHS` (
`PATH` TEXT,
`HASH` BLOB,
`ID` INTEGER)''')
cur.execute('''CREATE TABLE IF NOT EXISTS `BACKUPS` (
`ID` INTEGER,
`HASH_THRESHOLD` INTEGER,
`SAMPLE_SIZE` INTEGER)''')
con.commit()
class fs:
def __init__(self,top,db_path=None,hash_threshold=1024**2,sample_size=128*1024,id=None):
self.top=top
self.hash_threshold=hash_threshold
self.sample_size=sample_size
self.hashfunc = functools.partial(
hashfile,
hash_if_less=self.hash_threshold,
sample=self.sample
)
if db_path is None:
self.db_path = 'fs.db'
else:
self.db_path=db_path
self.con = sqlite3.connect(self.db_path)
__init_database__(self.con)
self.cur = self.con.cursor()
self.hash_files = {}
if id is None:
self.cur.execute('SELECT MAX(id) FROM backups')
id=self.cur.fetchone()
if id[0] is None:
self.id = 0
else:
self.id = id[0]+1
else:
self.id = id
def write_to_db(self):
pass
def morph(self,other):
pass
def backup(self,other):
if __name__ == "__main__":
import os
test = fs(os.getcwd())