Revamp and fix options
This commit is contained in:
		
							parent
							
								
									01b47c8c40
								
							
						
					
					
						commit
						573a63998e
					
				
							
								
								
									
										20
									
								
								ordigi.conf
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								ordigi.conf
									
									
									
									
									
								
							| @ -1,5 +1,17 @@ | |||||||
|  | [Exif] | ||||||
|  | #album_from_folder=False | ||||||
|  | fill_date_original=True | ||||||
|  | #cache=True | ||||||
|  | #ignore_tags=None | ||||||
|  | use_date_filename=True | ||||||
|  | #use_file_dates=False | ||||||
|  | 
 | ||||||
| [Filters] | [Filters] | ||||||
| exclude= ["**/.directory", "**/.DS_Store"] | exclude=["**/.directory", "**/.DS_Store"] | ||||||
|  | #extensions=None | ||||||
|  | #glob=**/* | ||||||
|  | #max_deep=None | ||||||
|  | remove_duplicates=True | ||||||
| 
 | 
 | ||||||
| [Geolocation] | [Geolocation] | ||||||
| geocoder=Nominatim | geocoder=Nominatim | ||||||
| @ -15,5 +27,9 @@ day_begins=4 | |||||||
| 
 | 
 | ||||||
| # Path format | # Path format | ||||||
| dirs_path=<%Y>/<%m-%b>_<location>_<folder> | dirs_path=<%Y>/<%m-%b>_<location>_<folder> | ||||||
| name=<%Y%m%d-%H%M%S>_<<original_name>|<name>>.%l<ext> | name=<%Y%m%d-%H%M%S>_<<name>.%l<ext>|<original_name>> | ||||||
| # name=<%Y%m%d-%H%M%S>-%u<original_name>.%l<ext> | # name=<%Y%m%d-%H%M%S>-%u<original_name>.%l<ext> | ||||||
|  | 
 | ||||||
|  | [Terminal] | ||||||
|  | dry_run=False | ||||||
|  | interactive=False | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ import click | |||||||
| 
 | 
 | ||||||
| from ordigi import log, LOG | from ordigi import log, LOG | ||||||
| from ordigi.collection import Collection | from ordigi.collection import Collection | ||||||
|  | from ordigi import constants | ||||||
| from ordigi.geolocation import GeoLocation | from ordigi.geolocation import GeoLocation | ||||||
| from ordigi import utils | from ordigi import utils | ||||||
| 
 | 
 | ||||||
| @ -85,7 +86,7 @@ _sort_options = [ | |||||||
|     click.option( |     click.option( | ||||||
|         '--path-format', |         '--path-format', | ||||||
|         '-p', |         '-p', | ||||||
|         default=None, |         default=constants.DEFAULT_PATH_FORMAT, | ||||||
|         help='Custom featured path format', |         help='Custom featured path format', | ||||||
|     ), |     ), | ||||||
|     click.option( |     click.option( | ||||||
| @ -147,15 +148,10 @@ def _cli_get_location(collection): | |||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def _cli_sort(collection, src_paths, import_mode, remove_duplicates): | def _cli_sort(collection, src_paths, import_mode): | ||||||
|     loc = _cli_get_location(collection) |     loc = _cli_get_location(collection) | ||||||
| 
 | 
 | ||||||
|     path_format = collection.opt['Path']['path_format'] |     return collection.sort_files(src_paths, loc, import_mode) | ||||||
|     LOG.debug(f'path_format: {path_format}') |  | ||||||
| 
 |  | ||||||
|     return collection.sort_files( |  | ||||||
|         src_paths, path_format, loc, import_mode, remove_duplicates |  | ||||||
|     ) |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @click.group() | @click.group() | ||||||
| @ -231,24 +227,21 @@ def _clean(**kwargs): | |||||||
|     collection = Collection( |     collection = Collection( | ||||||
|         root, |         root, | ||||||
|         { |         { | ||||||
|             "dry_run": kwargs['dry_run'], |             'dry_run': kwargs['dry_run'], | ||||||
|             "extensions": kwargs['ext'], |             'extensions': kwargs['ext'], | ||||||
|             "glob": kwargs['glob'], |             'glob': kwargs['glob'], | ||||||
|  |             'remove_duplicates': kwargs['remove_duplicates'], | ||||||
|         }, |         }, | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     # os.path.join( |     # os.path.join( | ||||||
|     # TODO make function to remove duplicates |     # TODO make function to remove duplicates | ||||||
|     # path_format = collection.opt['Path']['path_format'] |     # path_format = collection.opt['Path']['path_format'] | ||||||
|     # summary = collection.sort_files( |     # summary = collection.sort_files(paths, None) | ||||||
|     #     paths, path_format, None, remove_duplicates=kwargs['remove_duplicates'] |  | ||||||
|     # ) |  | ||||||
| 
 | 
 | ||||||
|     if kwargs['path_string']: |     if kwargs['path_string']: | ||||||
|         dedup_regex = set(kwargs['dedup_regex']) |         dedup_regex = set(kwargs['dedup_regex']) | ||||||
|         collection.dedup_path( |         collection.dedup_path(paths, dedup_regex) | ||||||
|             paths, dedup_regex, kwargs['remove_duplicates'] |  | ||||||
|         ) |  | ||||||
| 
 | 
 | ||||||
|     for path in paths: |     for path in paths: | ||||||
|         if folders: |         if folders: | ||||||
| @ -334,9 +327,10 @@ def _compare(**kwargs): | |||||||
|     collection = Collection( |     collection = Collection( | ||||||
|         root, |         root, | ||||||
|         { |         { | ||||||
|             "extensions": kwargs['ext'], |             'extensions': kwargs['ext'], | ||||||
|             "glob": kwargs['glob'], |             'glob': kwargs['glob'], | ||||||
|             "dry_run": kwargs['dry_run'], |             'dry_run': kwargs['dry_run'], | ||||||
|  |             'remove_duplicates': kwargs['remove_duplicates'], | ||||||
|         }, |         }, | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
| @ -515,7 +509,7 @@ def _import(**kwargs): | |||||||
|             'dry_run': kwargs['dry_run'], |             'dry_run': kwargs['dry_run'], | ||||||
|             'interactive': kwargs['interactive'], |             'interactive': kwargs['interactive'], | ||||||
|             'path_format': kwargs['path_format'], |             'path_format': kwargs['path_format'], | ||||||
| 
 |             'remove_duplicates': kwargs['remove_duplicates'], | ||||||
|         } |         } | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
| @ -523,7 +517,7 @@ def _import(**kwargs): | |||||||
|         import_mode = 'copy' |         import_mode = 'copy' | ||||||
|     else: |     else: | ||||||
|         import_mode = 'move' |         import_mode = 'move' | ||||||
|     summary = _cli_sort(collection, src_paths, import_mode, kwargs['remove_duplicates']) |     summary = _cli_sort(collection, src_paths, import_mode) | ||||||
| 
 | 
 | ||||||
|     if log_level < 30: |     if log_level < 30: | ||||||
|         summary.print() |         summary.print() | ||||||
| @ -572,10 +566,11 @@ def _sort(**kwargs): | |||||||
|             'glob': kwargs['glob'], |             'glob': kwargs['glob'], | ||||||
|             'dry_run': kwargs['dry_run'], |             'dry_run': kwargs['dry_run'], | ||||||
|             'interactive': kwargs['interactive'], |             'interactive': kwargs['interactive'], | ||||||
|  |             'remove_duplicates': kwargs['remove_duplicates'], | ||||||
|         } |         } | ||||||
|     ) |     ) | ||||||
| 
 | 
 | ||||||
|     summary = _cli_sort(collection, paths, False, kwargs['remove_duplicates']) |     summary = _cli_sort(collection, paths, False) | ||||||
| 
 | 
 | ||||||
|     if kwargs['clean']: |     if kwargs['clean']: | ||||||
|         collection.remove_empty_folders(root) |         collection.remove_empty_folders(root) | ||||||
|  | |||||||
| @ -477,6 +477,7 @@ class SortMedias: | |||||||
|         db=None, |         db=None, | ||||||
|         dry_run=False, |         dry_run=False, | ||||||
|         interactive=False, |         interactive=False, | ||||||
|  |         remove_duplicates=False, | ||||||
|     ): |     ): | ||||||
| 
 | 
 | ||||||
|         # Arguments |         # Arguments | ||||||
| @ -489,6 +490,7 @@ class SortMedias: | |||||||
|         self.dry_run = dry_run |         self.dry_run = dry_run | ||||||
|         self.interactive = interactive |         self.interactive = interactive | ||||||
|         self.log = LOG.getChild(self.__class__.__name__) |         self.log = LOG.getChild(self.__class__.__name__) | ||||||
|  |         self.remove_duplicates = remove_duplicates | ||||||
|         self.summary = Summary(self.root) |         self.summary = Summary(self.root) | ||||||
| 
 | 
 | ||||||
|         # Attributes |         # Attributes | ||||||
| @ -600,7 +602,7 @@ class SortMedias: | |||||||
|                 directory_path.mkdir(parents=True, exist_ok=True) |                 directory_path.mkdir(parents=True, exist_ok=True) | ||||||
|             self.log.info(f'Create {directory_path}') |             self.log.info(f'Create {directory_path}') | ||||||
| 
 | 
 | ||||||
|     def check_conflicts(self, src_path, dest_path, remove_duplicates=False): |     def check_conflicts(self, src_path, dest_path): | ||||||
|         """ |         """ | ||||||
|         Check if file can be copied or moved file to dest_path. |         Check if file can be copied or moved file to dest_path. | ||||||
|         """ |         """ | ||||||
| @ -616,7 +618,7 @@ class SortMedias: | |||||||
| 
 | 
 | ||||||
|         if dest_path.is_file(): |         if dest_path.is_file(): | ||||||
|             self.log.info(f"File {dest_path} already exist") |             self.log.info(f"File {dest_path} already exist") | ||||||
|             if remove_duplicates: |             if self.remove_duplicates: | ||||||
|                 if filecmp.cmp(src_path, dest_path): |                 if filecmp.cmp(src_path, dest_path): | ||||||
|                     self.log.info( |                     self.log.info( | ||||||
|                         "File in source and destination are identical. Duplicate will be ignored." |                         "File in source and destination are identical. Duplicate will be ignored." | ||||||
| @ -633,13 +635,13 @@ class SortMedias: | |||||||
| 
 | 
 | ||||||
|         return 0 |         return 0 | ||||||
| 
 | 
 | ||||||
|     def _solve_conflicts(self, conflicts, remove_duplicates): |     def _solve_conflicts(self, conflicts): | ||||||
|         unresolved_conflicts = [] |         unresolved_conflicts = [] | ||||||
|         while conflicts != []: |         while conflicts != []: | ||||||
|             src_path, dest_path, metadata = conflicts.pop() |             src_path, dest_path, metadata = conflicts.pop() | ||||||
|             # Check for conflict status again in case is has changed |             # Check for conflict status again in case is has changed | ||||||
| 
 | 
 | ||||||
|             conflict = self.check_conflicts(src_path, dest_path, remove_duplicates) |             conflict = self.check_conflicts(src_path, dest_path) | ||||||
| 
 | 
 | ||||||
|             for i in range(1, 1000): |             for i in range(1, 1000): | ||||||
|                 if conflict != 1: |                 if conflict != 1: | ||||||
| @ -652,7 +654,7 @@ class SortMedias: | |||||||
|                 else: |                 else: | ||||||
|                     stem = dest_path.stem |                     stem = dest_path.stem | ||||||
|                 dest_path = dest_path.parent / (stem + '_' + str(i) + suffix) |                 dest_path = dest_path.parent / (stem + '_' + str(i) + suffix) | ||||||
|                 conflict = self.check_conflicts(src_path, dest_path, remove_duplicates) |                 conflict = self.check_conflicts(src_path, dest_path) | ||||||
| 
 | 
 | ||||||
|             if conflict == 1: |             if conflict == 1: | ||||||
|                 # i = 100: |                 # i = 100: | ||||||
| @ -663,7 +665,7 @@ class SortMedias: | |||||||
| 
 | 
 | ||||||
|             yield (src_path, dest_path, metadata), conflict |             yield (src_path, dest_path, metadata), conflict | ||||||
| 
 | 
 | ||||||
|     def sort_medias(self, imp=False, remove_duplicates=False): |     def sort_medias(self, imp=False): | ||||||
|         """ |         """ | ||||||
|         sort files and solve conflicts |         sort files and solve conflicts | ||||||
|         """ |         """ | ||||||
| @ -674,7 +676,7 @@ class SortMedias: | |||||||
|         for src_path, metadata in self.medias.datas.items(): |         for src_path, metadata in self.medias.datas.items(): | ||||||
|             dest_path = self.root / metadata['file_path'] |             dest_path = self.root / metadata['file_path'] | ||||||
| 
 | 
 | ||||||
|             conflict = self.check_conflicts(src_path, dest_path, remove_duplicates) |             conflict = self.check_conflicts(src_path, dest_path) | ||||||
| 
 | 
 | ||||||
|             if not conflict: |             if not conflict: | ||||||
|                 self.sort_file( |                 self.sort_file( | ||||||
| @ -692,9 +694,7 @@ class SortMedias: | |||||||
|                 pass |                 pass | ||||||
| 
 | 
 | ||||||
|         if conflicts != []: |         if conflicts != []: | ||||||
|             for files_data, conflict in self._solve_conflicts( |             for files_data, conflict in self._solve_conflicts(conflicts): | ||||||
|                 conflicts, remove_duplicates |  | ||||||
|             ): |  | ||||||
| 
 | 
 | ||||||
|                 src_path, dest_path, metadata = files_data |                 src_path, dest_path, metadata = files_data | ||||||
|                 if not conflict: |                 if not conflict: | ||||||
| @ -727,13 +727,13 @@ class Collection(SortMedias): | |||||||
|         self.log = LOG.getChild(self.__class__.__name__) |         self.log = LOG.getChild(self.__class__.__name__) | ||||||
| 
 | 
 | ||||||
|         # Get config options |         # Get config options | ||||||
|         self.opt = self.get_config_options() |         self.opt, default_options = self.get_config_options() | ||||||
| 
 | 
 | ||||||
|         # Set client options |         # Set client options | ||||||
|         for option, value in cli_options.items(): |         for option, value in cli_options.items(): | ||||||
|             if value not in (None, set()): |             for section in self.opt: | ||||||
|                 for section in self.opt: |                 if option in self.opt[section]: | ||||||
|                     if option in self.opt[section]: |                     if value != default_options[section][option]: | ||||||
|                         if option == 'exclude': |                         if option == 'exclude': | ||||||
|                             self.opt[section][option].union(set(value)) |                             self.opt[section][option].union(set(value)) | ||||||
|                         elif option in ('ignore_tags', 'extensions'): |                         elif option in ('ignore_tags', 'extensions'): | ||||||
| @ -772,6 +772,7 @@ class Collection(SortMedias): | |||||||
|             self.db, |             self.db, | ||||||
|             self.opt['Terminal']['dry_run'], |             self.opt['Terminal']['dry_run'], | ||||||
|             self.opt['Terminal']['interactive'], |             self.opt['Terminal']['interactive'], | ||||||
|  |             self.opt['Filters']['remove_duplicates'], | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         # Attributes |         # Attributes | ||||||
| @ -792,7 +793,7 @@ class Collection(SortMedias): | |||||||
|         """Get collection config""" |         """Get collection config""" | ||||||
|         config = Config(self.root.joinpath('.ordigi', 'ordigi.conf')) |         config = Config(self.root.joinpath('.ordigi', 'ordigi.conf')) | ||||||
| 
 | 
 | ||||||
|         return config.get_config_options() |         return config.get_config_options(), config.get_default_options() | ||||||
| 
 | 
 | ||||||
|     def _set_option(self, section, option, cli_option): |     def _set_option(self, section, option, cli_option): | ||||||
|         """if client option is set overwrite collection option value""" |         """if client option is set overwrite collection option value""" | ||||||
| @ -1003,17 +1004,15 @@ class Collection(SortMedias): | |||||||
| 
 | 
 | ||||||
|         return self.summary |         return self.summary | ||||||
| 
 | 
 | ||||||
|     def sort_files( |     def sort_files(self, src_dirs, loc, imp=False): | ||||||
|         self, src_dirs, path_format, loc, imp=False, remove_duplicates=False |  | ||||||
|     ): |  | ||||||
|         """ |         """ | ||||||
|         Sort files into appropriate folder |         Sort files into appropriate folder | ||||||
|         """ |         """ | ||||||
|         # Check db |         # Check db | ||||||
|         self._init_check_db(loc) |         self._init_check_db(loc) | ||||||
| 
 | 
 | ||||||
|         # if path format client option is set overwrite it |         path_format = self.opt['Path']['path_format'] | ||||||
|         self._set_option('Path', 'path_format', path_format) |         self.log.debug(f'path_format: {path_format}') | ||||||
| 
 | 
 | ||||||
|         # Get medias data |         # Get medias data | ||||||
|         subdirs = set() |         subdirs = set() | ||||||
| @ -1027,7 +1026,7 @@ class Collection(SortMedias): | |||||||
|             self.medias.datas[src_path] = copy(metadata) |             self.medias.datas[src_path] = copy(metadata) | ||||||
| 
 | 
 | ||||||
|         # Sort files and solve conflicts |         # Sort files and solve conflicts | ||||||
|         self.summary = self.sort_medias(imp, remove_duplicates) |         self.summary = self.sort_medias(imp) | ||||||
| 
 | 
 | ||||||
|         if imp != 'copy': |         if imp != 'copy': | ||||||
|             self.remove_empty_subdirs(subdirs, src_dirs) |             self.remove_empty_subdirs(subdirs, src_dirs) | ||||||
| @ -1037,7 +1036,7 @@ class Collection(SortMedias): | |||||||
| 
 | 
 | ||||||
|         return self.summary |         return self.summary | ||||||
| 
 | 
 | ||||||
|     def dedup_path(self, paths, dedup_regex=None, remove_duplicates=False): |     def dedup_path(self, paths, dedup_regex=None): | ||||||
|         """Deduplicate file path parts""" |         """Deduplicate file path parts""" | ||||||
| 
 | 
 | ||||||
|         # Check db |         # Check db | ||||||
| @ -1078,7 +1077,7 @@ class Collection(SortMedias): | |||||||
|             self.medias.datas[src_path] = copy(metadata) |             self.medias.datas[src_path] = copy(metadata) | ||||||
| 
 | 
 | ||||||
|         # Sort files and solve conflicts |         # Sort files and solve conflicts | ||||||
|         self.sort_medias(remove_duplicates=remove_duplicates) |         self.sort_medias() | ||||||
| 
 | 
 | ||||||
|         if not self.check_db(): |         if not self.check_db(): | ||||||
|             self.summary.append('check', False) |             self.summary.append('check', False) | ||||||
| @ -1110,7 +1109,7 @@ class Collection(SortMedias): | |||||||
| 
 | 
 | ||||||
|         return True |         return True | ||||||
| 
 | 
 | ||||||
|     def sort_similar_images(self, path, similarity=80, remove_duplicates=False): |     def sort_similar_images(self, path, similarity=80): | ||||||
|         """Sort similar images using imagehash library""" |         """Sort similar images using imagehash library""" | ||||||
|         # Check db |         # Check db | ||||||
|         self._init_check_db() |         self._init_check_db() | ||||||
| @ -1129,7 +1128,7 @@ class Collection(SortMedias): | |||||||
|             ) |             ) | ||||||
|             if similar_images: |             if similar_images: | ||||||
|                 # Move the simlars file into the destination directory |                 # Move the simlars file into the destination directory | ||||||
|                 self.sort_medias(remove_duplicates=remove_duplicates) |                 self.sort_medias() | ||||||
| 
 | 
 | ||||||
|         nb_row_end = self.db.sqlite.len('metadata') |         nb_row_end = self.db.sqlite.len('metadata') | ||||||
|         if nb_row_ini and nb_row_ini != nb_row_end: |         if nb_row_ini and nb_row_ini != nb_row_end: | ||||||
|  | |||||||
| @ -53,9 +53,9 @@ class Config: | |||||||
|         else: |         else: | ||||||
|             self.conf = conf |             self.conf = conf | ||||||
| 
 | 
 | ||||||
|         self.options = self.set_default_options() |         self.options = self.get_default_options() | ||||||
| 
 | 
 | ||||||
|     def set_default_options(self) -> dict: |     def get_default_options(self) -> dict: | ||||||
|         # Initialize with default options |         # Initialize with default options | ||||||
|         return { |         return { | ||||||
|             'Exif': { |             'Exif': { | ||||||
| @ -71,6 +71,7 @@ class Config: | |||||||
|                 'extensions': None, |                 'extensions': None, | ||||||
|                 'glob': '**/*', |                 'glob': '**/*', | ||||||
|                 'max_deep': None, |                 'max_deep': None, | ||||||
|  |                 'remove_duplicates': False, | ||||||
|             }, |             }, | ||||||
|             'Geolocation': { |             'Geolocation': { | ||||||
|                 'geocoder': constants.DEFAULT_GEOCODER, |                 'geocoder': constants.DEFAULT_GEOCODER, | ||||||
| @ -137,6 +138,7 @@ class Config: | |||||||
|             'dry_run', |             'dry_run', | ||||||
|             'interactive', |             'interactive', | ||||||
|             'prefer_english_names', |             'prefer_english_names', | ||||||
|  |             'remove_duplicates', | ||||||
|             'use_date_filename', |             'use_date_filename', | ||||||
|             'use_file_dates', |             'use_file_dates', | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -207,7 +207,6 @@ class TestOrdigi: | |||||||
|             ('--exclude', '.DS_Store'), |             ('--exclude', '.DS_Store'), | ||||||
|             *self.filter_options, |             *self.filter_options, | ||||||
|             ('--path-format', '{%Y}/{folder}/{stem}.{ext}'), |             ('--path-format', '{%Y}/{folder}/{stem}.{ext}'), | ||||||
| 
 |  | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
|         paths = (str(self.src_path), str(tmp_path)) |         paths = (str(self.src_path), str(tmp_path)) | ||||||
|  | |||||||
| @ -137,11 +137,12 @@ class TestCollection: | |||||||
|         assert summary.success_table.sum('sort') == nb |         assert summary.success_table.sum('sort') == nb | ||||||
| 
 | 
 | ||||||
|     def test_sort_files(self, tmp_path): |     def test_sort_files(self, tmp_path): | ||||||
|         cli_options = {'album_from_folder': True, 'cache': False} |         cli_options = { | ||||||
|  |             'album_from_folder': True, 'cache': False, 'path_format': self.path_format | ||||||
|  |         } | ||||||
|         collection = Collection(tmp_path, cli_options=cli_options) |         collection = Collection(tmp_path, cli_options=cli_options) | ||||||
|         loc = GeoLocation() |         loc = GeoLocation() | ||||||
|         summary = collection.sort_files([self.src_path], |         summary = collection.sort_files([self.src_path], loc, imp='copy') | ||||||
|                 self.path_format, loc, imp='copy') |  | ||||||
| 
 | 
 | ||||||
|         self.assert_import(summary, 29) |         self.assert_import(summary, 29) | ||||||
| 
 | 
 | ||||||
| @ -166,16 +167,16 @@ class TestCollection: | |||||||
|         collection = Collection(tmp_path, cli_options=cli_options) |         collection = Collection(tmp_path, cli_options=cli_options) | ||||||
|         # Try to change path format and sort files again |         # Try to change path format and sort files again | ||||||
|         path_format = 'test_exif/<city>/<%Y>-<name>.%l<ext>' |         path_format = 'test_exif/<city>/<%Y>-<name>.%l<ext>' | ||||||
|         summary = collection.sort_files([tmp_path], path_format, loc) |         summary = collection.sort_files([tmp_path], loc) | ||||||
| 
 | 
 | ||||||
|         self.assert_sort(summary, 27) |         self.assert_sort(summary, 23) | ||||||
| 
 | 
 | ||||||
|         shutil.copytree(tmp_path / 'test_exif', tmp_path / 'test_exif_copy') |         shutil.copytree(tmp_path / 'test_exif', tmp_path / 'test_exif_copy') | ||||||
|         collection.summary = Summary(tmp_path) |         collection.summary = Summary(tmp_path) | ||||||
|         assert collection.summary.success_table.sum() == 0 |         assert collection.summary.success_table.sum() == 0 | ||||||
|         summary = collection.update(loc) |         summary = collection.update(loc) | ||||||
|         assert summary.success_table.sum('update') == 29 |         assert summary.success_table.sum('update') == 2 | ||||||
|         assert summary.success_table.sum() == 29 |         assert summary.success_table.sum() == 2 | ||||||
|         assert not summary.errors |         assert not summary.errors | ||||||
|         collection.summary = Summary(tmp_path) |         collection.summary = Summary(tmp_path) | ||||||
|         summary = collection.update(loc) |         summary = collection.update(loc) | ||||||
| @ -195,12 +196,11 @@ class TestCollection: | |||||||
|         assert not summary.errors |         assert not summary.errors | ||||||
| 
 | 
 | ||||||
|     def test_sort_files_invalid_db(self, tmp_path): |     def test_sort_files_invalid_db(self, tmp_path): | ||||||
|         collection = Collection(tmp_path) |         collection = Collection(tmp_path, {'path_format': self.path_format}) | ||||||
|         loc = GeoLocation() |         loc = GeoLocation() | ||||||
|         randomize_db(tmp_path) |         randomize_db(tmp_path) | ||||||
|         with pytest.raises(sqlite3.DatabaseError) as e: |         with pytest.raises(sqlite3.DatabaseError) as e: | ||||||
|             summary = collection.sort_files([self.src_path], |             summary = collection.sort_files([self.src_path], loc, imp='copy') | ||||||
|                     self.path_format, loc, imp='copy') |  | ||||||
| 
 | 
 | ||||||
|     def test_sort_file(self, tmp_path): |     def test_sort_file(self, tmp_path): | ||||||
|         for imp in ('copy', 'move', False): |         for imp in ('copy', 'move', False): | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user