148 lines
3.4 KiB
Python
148 lines
3.4 KiB
Python
import logging
|
|
import traceback
|
|
from .select.select import findall
|
|
from .order.path_specifier import get_path_specifier, placeholders as ph
|
|
from .order.order import order
|
|
from .write.paths import create_paths
|
|
from .write.files import write_files
|
|
|
|
|
|
def placeholders():
|
|
for p in sorted(ph):
|
|
print(p)
|
|
|
|
return 0
|
|
|
|
def select(db, src_path, stop_on_error, walk, postfix, dryrun):
|
|
logger = logging.getLogger(__name__)
|
|
extensions = postfix.split(",")
|
|
try:
|
|
findall(src_path, walk, extensions, db, stop_on_error)
|
|
except Exception as e:
|
|
logger.error(e)
|
|
logger.debug(traceback.format_exc())
|
|
return 1
|
|
|
|
cursor = db.cursor()
|
|
result = cursor.execute(
|
|
'''SELECT * FROM FILES'''
|
|
)
|
|
|
|
for line in result:
|
|
print(line[0])
|
|
for k,v in zip(("DateTime"
|
|
, "DateTimeDigitized"
|
|
, "DateTimeOriginal"
|
|
, "Model"
|
|
, "Make"
|
|
, "Software"),line[1:]):
|
|
print("\t", k, ":", v)
|
|
|
|
cursor.execute(
|
|
'''SELECT COUNT(name) FROM FILES'''
|
|
)
|
|
print("found {} files".format(cursor.fetchone()[0]))
|
|
return 0
|
|
|
|
def copy(db
|
|
, src_path
|
|
, dst_path
|
|
, path_template
|
|
, stop_on_error
|
|
, walk
|
|
, postfix
|
|
, dryrun):
|
|
|
|
return do_copy_or_move(db
|
|
, src_path
|
|
, dst_path
|
|
, path_template
|
|
, stop_on_error
|
|
, walk
|
|
, postfix
|
|
, dryrun
|
|
, False)
|
|
|
|
def move(db
|
|
, src_path
|
|
, dst_path
|
|
, path_template
|
|
, stop_on_error
|
|
, walk
|
|
, postfix
|
|
, dryrun):
|
|
|
|
return do_copy_or_move(db
|
|
, src_path
|
|
, dst_path
|
|
, path_template
|
|
, stop_on_error
|
|
, walk
|
|
, postfix
|
|
, dryrun
|
|
, True)
|
|
|
|
|
|
def do_copy_or_move(db
|
|
, src_path
|
|
, dst_path
|
|
, path_template
|
|
, stop_on_error
|
|
, walk
|
|
, postfix
|
|
, dryrun
|
|
, move):
|
|
|
|
logger = logging.getLogger(__name__)
|
|
extensions = postfix.split(",")
|
|
try:
|
|
findall(src_path, walk, extensions, db, stop_on_error)
|
|
except Exception as e:
|
|
logger.error(e)
|
|
logger.debug(traceback.format_exc())
|
|
return 1
|
|
cursor = db.cursor()
|
|
cursor.execute(
|
|
'''SELECT COUNT(name) FROM FILES'''
|
|
)
|
|
print("found {} files".format(cursor.fetchone()[0]))
|
|
|
|
try:
|
|
path_specifier = get_path_specifier(path_template)
|
|
except Exception as e:
|
|
logger.error(str(e))
|
|
logger.debug(traceback.format_exc())
|
|
return 2
|
|
|
|
|
|
order(db, path_specifier)
|
|
cursor.execute(
|
|
'''SELECT COUNT(rowid) FROM ASSOCIATIONS'''
|
|
)
|
|
print("created {} associations between files and directories".format(cursor.fetchone()[0]))
|
|
cursor.execute(
|
|
'''SELECT COUNT(name) FROM DIRECTORIES'''
|
|
)
|
|
print("will create {} new directories".format(cursor.fetchone()[0]))
|
|
|
|
for line in db._db.iterdump():
|
|
logging.debug(line)
|
|
|
|
|
|
try:
|
|
create_paths(db, dst_path, dryrun)
|
|
except Exception as e:
|
|
logger.error(str(e))
|
|
logger.debug(traceback.format_exc())
|
|
return 3
|
|
|
|
try:
|
|
write_files(db, dst_path, src_path, move, dryrun)
|
|
except Exception as e:
|
|
logger.error(str(e))
|
|
logger.debug(traceback.format_exc())
|
|
return 3
|
|
|
|
print("done")
|
|
|