Add Photo.relocate for fixing external renames
This commit is contained in:
parent
fc5c33c918
commit
d35011c083
1 changed files with 31 additions and 0 deletions
|
@ -720,6 +720,37 @@ class Photo(ObjectBase):
|
|||
self.photodb.log.debug('Committing - reload metadata')
|
||||
self.photodb.commit()
|
||||
|
||||
def relocate(self, new_filepath, *, allow_duplicates=False, commit=True):
|
||||
'''
|
||||
Point the Photo object to a different filepath.
|
||||
|
||||
DOES NOT MOVE THE FILE, only acknowledges a move that was performed
|
||||
outside of the system.
|
||||
To rename or move the file, use `rename_file`.
|
||||
|
||||
allow_duplicates:
|
||||
Allow even if there is another Photo for that path.
|
||||
'''
|
||||
new_filepath = pathclass.Path(new_filepath)
|
||||
if not new_filepath.is_file:
|
||||
raise FileNotFoundError(new_filepath.absolute_path)
|
||||
cur = self.photodb.sql.cursor()
|
||||
if not allow_duplicates:
|
||||
try:
|
||||
existing = self.photodb.get_photo_by_path(new_filepath)
|
||||
except exceptions.NoSuchPhoto:
|
||||
# Good.
|
||||
pass
|
||||
else:
|
||||
raise exceptions.PhotoExists(existing)
|
||||
cur.execute(
|
||||
'UPDATE photos SET filepath = ? WHERE id == ?',
|
||||
[new_filepath.absolute_path, self.id]
|
||||
)
|
||||
if commit:
|
||||
self.photodb.log.debug('Commit - relocate photo')
|
||||
self.photodb.commit()
|
||||
|
||||
def remove_tag(self, tag, *, commit=True):
|
||||
if not self.photodb.config['enable_photo_add_remove_tag']:
|
||||
raise exceptions.FeatureDisabled('photo.add_tag, photo.remove_tag')
|
||||
|
|
Loading…
Reference in a new issue