Fix part
This commit is contained in:
parent
e60dab7f3b
commit
27587468ba
|
@ -43,9 +43,9 @@ class FPath:
|
|||
'camera_make': '{camera_make}',
|
||||
'camera_model': '{camera_model}',
|
||||
'city': '{city}',
|
||||
'custom': '{".*"}',
|
||||
'custom': r'{".*"}',
|
||||
'country': '{country}',
|
||||
'date': '{(%[a-zA-Z][^a-zA-Z]*){1,8}}', # search for date format string
|
||||
'date': r'{(%[a-zA-Z][^a-zA-Z]*){1,8}}', # search for date format string
|
||||
'ext': '{ext}',
|
||||
'folder': '{folder}',
|
||||
'folders': r'{folders(\[[0-9:]{0,3}\])?}',
|
||||
|
@ -144,13 +144,14 @@ class FPath:
|
|||
date = metadata['date_media']
|
||||
# early morning photos can be grouped with previous day
|
||||
if date is not None:
|
||||
part = self.get_early_morning_photos_date(date, mask)
|
||||
elif item == 'folder':
|
||||
folder = os.path.basename(metadata['subdirs'])
|
||||
if folder != metadata['src_dir']:
|
||||
part = folder
|
||||
elif item == 'folders':
|
||||
part = str(self.get_early_morning_photos_date(date, mask))
|
||||
elif item in ('folder', 'folders'):
|
||||
folders = Path(metadata['subdirs']).parts
|
||||
if folders:
|
||||
if item == 'folder':
|
||||
folder = folders[-1]
|
||||
part = folder
|
||||
else:
|
||||
folders = self._get_folders(folders, mask)
|
||||
part = os.path.join(*folders)
|
||||
|
||||
|
@ -169,14 +170,14 @@ class FPath:
|
|||
mask = 'default'
|
||||
|
||||
if metadata[mask]:
|
||||
part = metadata[mask]
|
||||
part = str(metadata[mask])
|
||||
elif item in 'custom':
|
||||
# Fallback string
|
||||
part = mask[1:-1]
|
||||
|
||||
return part
|
||||
|
||||
def _set_case(self, regex, part, this_part):
|
||||
def _substitute(self, regex, part, this_part):
|
||||
# Capitalization
|
||||
u_regex = '%u' + regex
|
||||
l_regex = '%l' + regex
|
||||
|
@ -193,7 +194,9 @@ class FPath:
|
|||
for item, regex in self.items.items():
|
||||
matched = re.search(regex, this_part)
|
||||
if matched:
|
||||
self.log.debug(f'item: {item}, mask: {matched.group()[1:-1]}')
|
||||
part = self.get_part(item, matched.group()[1:-1], metadata)
|
||||
self.log.debug(f'part: {part}')
|
||||
|
||||
part = part.strip()
|
||||
|
||||
|
@ -207,7 +210,7 @@ class FPath:
|
|||
this_part = re.sub(
|
||||
self.whitespace_regex, self.whitespace_sub, this_part
|
||||
)
|
||||
this_part = self._set_case(regex, part, this_part)
|
||||
this_part = self._substitute(regex, part, this_part)
|
||||
|
||||
# remove alternate parts inside bracket separated by |
|
||||
regex = r'[-_ .]?\(\|\)'
|
||||
|
@ -228,6 +231,9 @@ class FPath:
|
|||
if re.match(regex, this_part[0]):
|
||||
this_part = this_part[1:]
|
||||
|
||||
# Remove unwanted chars in filename
|
||||
this_part = utils.filename_filter(this_part)
|
||||
|
||||
return this_part
|
||||
|
||||
def get_path(self, metadata: dict) -> list:
|
||||
|
@ -256,7 +262,7 @@ class FPath:
|
|||
|
||||
# If last path is empty or start with dot
|
||||
if part == '' or re.match(r'^\..*', part):
|
||||
path.append(metadata['filename'])
|
||||
path.append(utils.filename_filter(metadata['filename']))
|
||||
|
||||
return os.path.join(*path)
|
||||
|
||||
|
|
|
@ -42,6 +42,21 @@ def empty_dir(dir_path):
|
|||
return not next(os.scandir(dir_path), None)
|
||||
|
||||
|
||||
def filename_filter(filename):
|
||||
"""
|
||||
Take a string and return a valid filename constructed from the string.
|
||||
"""
|
||||
blacklist = '/\\:*"<>|'
|
||||
if filename is None:
|
||||
return filename
|
||||
|
||||
# Remove blacklisted chars.
|
||||
for char in blacklist:
|
||||
filename = filename.replace(char, '')
|
||||
|
||||
return filename
|
||||
|
||||
|
||||
def get_date_regex(user_regex=None):
|
||||
"""Return date regex generator"""
|
||||
if user_regex:
|
||||
|
@ -146,7 +161,6 @@ def camel2snake(name):
|
|||
r'(?!^)[A-Z]', lambda x: '_' + x.group(0).lower(), name[1:]
|
||||
)
|
||||
|
||||
|
||||
import os
|
||||
import platform
|
||||
import subprocess
|
||||
|
|
Loading…
Reference in New Issue