Update backup file flow, strip out path for listing data
When we list data I strip out the path because if there are any CJK files inside it will break the layout [TODO: fix this better] The backup file creates a new backup file each time the file gets written with ".BK.n." where n is a number starting from 1
This commit is contained in:
@@ -10,7 +10,7 @@
|
|||||||
# MUST HAVE: Python XMP Toolkit (http://python-xmp-toolkit.readthedocs.io/)
|
# MUST HAVE: Python XMP Toolkit (http://python-xmp-toolkit.readthedocs.io/)
|
||||||
|
|
||||||
import argparse, sqlite3, requests, configparser, textwrap
|
import argparse, sqlite3, requests, configparser, textwrap
|
||||||
import os, sys, re
|
import glob, os, sys, re
|
||||||
# Note XMPFiles does not work with sidecar files, need to read via XMPMeta
|
# Note XMPFiles does not work with sidecar files, need to read via XMPMeta
|
||||||
from libxmp import XMPMeta, XMPError, consts
|
from libxmp import XMPMeta, XMPError, consts
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
@@ -334,9 +334,10 @@ def checkOverwrite(data, key, field_controls):
|
|||||||
# DESC : shortes a path from the left so it fits into lenght
|
# DESC : shortes a path from the left so it fits into lenght
|
||||||
def shortenPath(path, length = 30):
|
def shortenPath(path, length = 30):
|
||||||
length = length - 3;
|
length = length - 3;
|
||||||
|
# I assume the XMP file name has no CJK characters inside, so I strip out the path
|
||||||
|
# The reason is that if there are CJK characters inside it will screw up the formatting
|
||||||
|
path = os.path.split(path)[1]
|
||||||
if len(path) > length:
|
if len(path) > length:
|
||||||
# print("PA: {}/{}".format(sum([2 if is_asian(x) else 1 for x in path]), len(path)))
|
|
||||||
# path = "{} {}".format("..", path[sum([2 if is_asian(x) else 1 for x in path]) - length:])
|
|
||||||
path = "{} {}".format("..", path[len(path) - length:])
|
path = "{} {}".format("..", path[len(path) - length:])
|
||||||
return path;
|
return path;
|
||||||
|
|
||||||
@@ -351,13 +352,13 @@ def printHeader(header, lines = 0, header_line = 0):
|
|||||||
lines += 1
|
lines += 1
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
IDEOGRAPHIC_SPACE = 0x3000
|
# METHOD: fileSortNumber
|
||||||
def is_asian(char):
|
# PARAMS: file name
|
||||||
"""Is the character Asian?"""
|
# RETURN: number found in the BK string or 0 for none
|
||||||
|
# DESC : gets the BK number for sorting in the file list
|
||||||
# 0x3000 is ideographic space (i.e. double-byte space)
|
def fileSortNumber(file):
|
||||||
# Anything over is an Asian character
|
m = re.match('.*\.BK\.(\d+)\.xmp$', file)
|
||||||
return ord(char) > IDEOGRAPHIC_SPACE
|
return int(m.group(1)) if m is not None else 0
|
||||||
|
|
||||||
##############################################################
|
##############################################################
|
||||||
### ARGUMENT PARSNING
|
### ARGUMENT PARSNING
|
||||||
@@ -868,9 +869,31 @@ for xmp_file in work_files:
|
|||||||
if write_file:
|
if write_file:
|
||||||
if not args.test:
|
if not args.test:
|
||||||
# use copyfile to create a backup copy
|
# use copyfile to create a backup copy
|
||||||
# TODO: do add a number after BK +1 for each new one
|
|
||||||
if not args.no_xmp_backup:
|
if not args.no_xmp_backup:
|
||||||
copyfile(xmp_file, "{}.BK{}".format(os.path.splitext(xmp_file)[0], os.path.splitext(xmp_file)[1]))
|
# check if there is another file with .BK. already there, if yes, get the max number and +1 it, if not set to 1
|
||||||
|
# set to 1 for if we have no backups yet
|
||||||
|
bk_file_counter = 1
|
||||||
|
# get PATH from file and look for .BK. data in this folder matching, output is sorted per BK counter key
|
||||||
|
for bk_file in sorted(
|
||||||
|
glob.glob("{path}}/{file}*.xmp".format(
|
||||||
|
path = os.path.split(xmp_file)[0],
|
||||||
|
file = "{}.BK.".format(os.path.splitext(os.path.split(xmp_file)[1])[0])
|
||||||
|
)
|
||||||
|
),
|
||||||
|
key = lambda pos: fileSortNumber(pos),
|
||||||
|
reverse = True
|
||||||
|
):
|
||||||
|
# BK.1, etc -> get the number
|
||||||
|
bk_pos = fileSortNumber(bk_file)
|
||||||
|
if bk_pos > 0:
|
||||||
|
if args.debug:
|
||||||
|
print("#### **** File: {}, Counter: {} -> {}".format(bk_file, bk_pos, bk_pos + 1))
|
||||||
|
# check if found + 1 is bigger than set, if yes, set to new bk counter
|
||||||
|
if bk_pos + 1 > bk_file_counter:
|
||||||
|
bk_file_counter = bk_pos + 1
|
||||||
|
break
|
||||||
|
# copy to new backup file
|
||||||
|
copyfile(xmp_file, "{}.BK.{}{}".format(os.path.splitext(xmp_file)[0], bk_file_counter, os.path.splitext(xmp_file)[1]))
|
||||||
# write back to riginal file
|
# write back to riginal file
|
||||||
with open(xmp_file, 'w') as fptr:
|
with open(xmp_file, 'w') as fptr:
|
||||||
fptr.write(xmp.serialize_to_str(omit_packet_wrapper=True))
|
fptr.write(xmp.serialize_to_str(omit_packet_wrapper=True))
|
||||||
|
|||||||
Reference in New Issue
Block a user