Refactoring media class (2), create ReadExif and WriteExif class
This commit is contained in:
		
							parent
							
								
									a693e6018a
								
							
						
					
					
						commit
						8fd65fda34
					
				| @ -15,7 +15,7 @@ from pathlib import Path, PurePath | ||||
| import inquirer | ||||
| 
 | ||||
| from ordigi.database import Sqlite | ||||
| from ordigi.media import Media, Medias | ||||
| from ordigi.media import Medias | ||||
| from ordigi.images import Image, Images | ||||
| from ordigi import request | ||||
| from ordigi.summary import Summary | ||||
| @ -319,7 +319,7 @@ class Paths: | ||||
| 
 | ||||
|         if extensions and '%media' in extensions: | ||||
|             extensions.remove('%media') | ||||
|             self.extensions = extensions.union(Media.extensions) | ||||
|             self.extensions = extensions.union(Medias.extensions) | ||||
|         else: | ||||
|             self.extensions = extensions | ||||
| 
 | ||||
| @ -362,8 +362,8 @@ class Paths: | ||||
|     def get_files(self, path): | ||||
|         """Recursively get files which match a path and extension. | ||||
| 
 | ||||
|         :param str path string: Path to start recursive file listing | ||||
|         :returns: Path file_path, Path subdirs | ||||
|         :param Path path: Path to start recursive file listing | ||||
|         :returns: Path generator File | ||||
|         """ | ||||
|         for path0 in path.glob(self.glob): | ||||
|             if path0.is_dir(): | ||||
|  | ||||
							
								
								
									
										391
									
								
								ordigi/media.py
									
									
									
									
									
								
							
							
						
						
									
										391
									
								
								ordigi/media.py
									
									
									
									
									
								
							| @ -1,7 +1,3 @@ | ||||
| """ | ||||
| Media :class:`Media` class to get file metadata | ||||
| """ | ||||
| 
 | ||||
| import logging | ||||
| import mimetypes | ||||
| import os | ||||
| @ -16,20 +12,14 @@ from ordigi import utils | ||||
| from ordigi import request | ||||
| 
 | ||||
| 
 | ||||
| class Metadata: | ||||
| 
 | ||||
|     def __init__(self, ignore_tags=None): | ||||
| class ExifMetadata: | ||||
| 
 | ||||
|         # Options | ||||
|     def __init__(self, file_path, ignore_tags=None): | ||||
|         self.file_path = file_path | ||||
|         if ignore_tags is None: | ||||
|             ignore_tags = set() | ||||
| 
 | ||||
|         self.exif_metadata = [] | ||||
|         self.metadata = {} | ||||
|         # self.datas = {} | ||||
|         self.ignore_tags = ignore_tags | ||||
| 
 | ||||
|         # Attributes | ||||
|         self.tags_keys = self.get_tags() | ||||
| 
 | ||||
|     def get_tags(self) -> dict: | ||||
| @ -77,33 +67,72 @@ class Metadata: | ||||
| 
 | ||||
|         return tags_keys | ||||
| 
 | ||||
|     def _del_ignored_tags(self): | ||||
|         for tag_regex in self.ignore_tags: | ||||
|             ignored_tags = set() | ||||
|             for tag in self.exif_metadata: | ||||
|                 if re.search(tag_regex, tag) is not None: | ||||
|                     ignored_tags.add(tag) | ||||
|             for ignored_tag in ignored_tags: | ||||
|                 del self.exif_metadata[ignored_tag] | ||||
| 
 | ||||
| class WriteExif(Metadata): | ||||
| class ReadExif(ExifMetadata): | ||||
| 
 | ||||
|     def __init__( | ||||
|             self, | ||||
|             file_path, | ||||
|             exif_metadata=None, | ||||
|             ignore_tags=None, | ||||
|             logger=logging.getLogger(), | ||||
|         ): | ||||
| 
 | ||||
|         super().__init__(file_path, ignore_tags) | ||||
| 
 | ||||
|         # Options | ||||
|         self.logger = logger.getChild(self.__class__.__name__) | ||||
| 
 | ||||
|         if exif_metadata: | ||||
|             self.exif_metadata = exif_metadata | ||||
|         else: | ||||
|             self.exif_metadata = self.get_exif_metadata() | ||||
| 
 | ||||
| 
 | ||||
|     def get_exif_metadata(self): | ||||
|         """Get metadata from exiftool.""" | ||||
| 
 | ||||
|         return ExifToolCaching(self.file_path, logger=self.logger).asdict() | ||||
| 
 | ||||
|     def _get_key_values(self, key): | ||||
|         """ | ||||
|         Get the first value of a tag set | ||||
|         :returns: str or None if no exif tag | ||||
|         """ | ||||
|         if self.exif_metadata is None: | ||||
|             return None | ||||
| 
 | ||||
|         for tag in self.tags_keys[key]: | ||||
|             if tag in self.exif_metadata: | ||||
|                 yield self.exif_metadata[tag] | ||||
| 
 | ||||
|     def get_value(self, tag): | ||||
|         """ | ||||
|         Get given value from EXIF. | ||||
|         :returns: str or None | ||||
|         """ | ||||
|         if self.exif_metadata is None: | ||||
|             return None | ||||
|         if tag not in self.exif_metadata: | ||||
|             return None | ||||
| 
 | ||||
|         return self.exif_metadata[tag] | ||||
| 
 | ||||
| 
 | ||||
| class WriteExif(ExifMetadata): | ||||
| 
 | ||||
|     def __init__( | ||||
|             self, | ||||
|             file_path, | ||||
|             metadata, | ||||
|             exif_metadata=None, | ||||
|             ignore_tags=None, | ||||
|             logger=logging.getLogger(), | ||||
|             ): | ||||
|         super().__init__(ignore_tags) | ||||
|         self.file_path = file_path | ||||
| 
 | ||||
|         super().__init__(file_path, ignore_tags) | ||||
| 
 | ||||
|         self.metadata = metadata | ||||
| 
 | ||||
|         if not exif_metadata: | ||||
|             exif_metadata = [] | ||||
| 
 | ||||
|         self.exif_metadata = exif_metadata | ||||
|         self.logger = logger.getChild(self.__class__.__name__) | ||||
| 
 | ||||
|     def set_value(self, tag, value): | ||||
| @ -116,13 +145,9 @@ class WriteExif(Metadata): | ||||
|     def set_key_values(self, key, value): | ||||
|         """Set tags values for given key""" | ||||
|         status = True | ||||
|         if self.exif_metadata is None: | ||||
|             return False | ||||
| 
 | ||||
|         for tag in self.tags_keys[key]: | ||||
|             if tag in self.exif_metadata: | ||||
|                 if not self.set_value(tag, value): | ||||
|                     status = False | ||||
|             if not self.set_value(tag, value): | ||||
|                 status = False | ||||
| 
 | ||||
|         return status | ||||
| 
 | ||||
| @ -137,7 +162,7 @@ class WriteExif(Metadata): | ||||
| 
 | ||||
|         formatted_time = time.strftime('%Y:%m:%d %H:%M:%S') | ||||
|         status = self.set_value('date_original', formatted_time) | ||||
|         if status == False: | ||||
|         if not status: | ||||
|             # exif attribute date_original d'ont exist | ||||
|             status = self.set_value('date_created', formatted_time) | ||||
| 
 | ||||
| @ -173,38 +198,16 @@ class WriteExif(Metadata): | ||||
| 
 | ||||
|         :returns: bool | ||||
|         """ | ||||
|         return self.set_value('album', self.file_path.parent.name) | ||||
|         return self.set_value('Album', self.file_path.parent.name) | ||||
| 
 | ||||
| 
 | ||||
| class ReadExif(Metadata): | ||||
|     def __init__( | ||||
|         self, | ||||
|         file_path, | ||||
|         src_dir, | ||||
|         album_from_folder=False, | ||||
|         ignore_tags=None, | ||||
|         interactive=False, | ||||
|         logger=logging.getLogger(), | ||||
|         use_date_filename=False, | ||||
|         use_file_dates=False, | ||||
|     ): | ||||
|         super().__init__(ignore_tags) | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| class Media: | ||||
| class Media(ReadExif): | ||||
|     """ | ||||
|     Extract matadatas from exiftool and sort them to dict structure | ||||
|     """ | ||||
| 
 | ||||
|     d_coordinates = {'latitude': 'latitude_ref', 'longitude': 'longitude_ref'} | ||||
| 
 | ||||
|     PHOTO = ('arw', 'cr2', 'dng', 'gif', 'heic', 'jpeg', 'jpg', 'nef', 'png', 'rw2') | ||||
|     AUDIO = ('m4a',) | ||||
|     VIDEO = ('avi', 'm4v', 'mov', 'mp4', 'mpg', 'mpeg', '3gp', 'mts') | ||||
| 
 | ||||
|     extensions = PHOTO + AUDIO + VIDEO | ||||
| 
 | ||||
|     def __init__( | ||||
|         self, | ||||
|         file_path, | ||||
| @ -216,84 +219,28 @@ class Media: | ||||
|         use_date_filename=False, | ||||
|         use_file_dates=False, | ||||
|     ): | ||||
|         """ | ||||
|         :params: Path, Path, bool, set, bool, Logger | ||||
|         """ | ||||
|         self.file_path = file_path | ||||
|         super().__init__( | ||||
|             file_path, | ||||
|             ignore_tags=ignore_tags, | ||||
|             logger=logger, | ||||
|         ) | ||||
| 
 | ||||
|         self.src_dir = src_dir | ||||
| 
 | ||||
|         self.album_from_folder = album_from_folder | ||||
|         self.exif_metadata = None | ||||
| 
 | ||||
|         if ignore_tags is None: | ||||
|             ignore_tags = set() | ||||
|         self.ignore_tags = ignore_tags | ||||
|         self.interactive = interactive | ||||
|         self.logger = logger.getChild(self.__class__.__name__) | ||||
|         self.metadata = None | ||||
|         self.tags_keys = self.get_tags() | ||||
|         self.use_date_filename = use_date_filename | ||||
|         self.use_file_dates = use_file_dates | ||||
| 
 | ||||
|         self.theme = request.load_theme() | ||||
| 
 | ||||
|     def get_tags(self) -> dict: | ||||
|         """Get exif tags groups in dict""" | ||||
|         tags_keys = {} | ||||
|         tags_keys['date_original'] = [ | ||||
|             'EXIF:DateTimeOriginal', | ||||
|             'H264:DateTimeOriginal', | ||||
|             'QuickTime:ContentCreateDate', | ||||
|         ] | ||||
|         tags_keys['date_created'] = [ | ||||
|             'EXIF:CreateDate', | ||||
|             'QuickTime:CreationDate', | ||||
|             'QuickTime:CreateDate', | ||||
|             'QuickTime:CreationDate-und-US', | ||||
|             'QuickTime:MediaCreateDate', | ||||
|         ] | ||||
|         tags_keys['date_modified'] = ['File:FileModifyDate', 'QuickTime:ModifyDate'] | ||||
|         tags_keys['camera_make'] = ['EXIF:Make', 'QuickTime:Make'] | ||||
|         tags_keys['camera_model'] = ['EXIF:Model', 'QuickTime:Model'] | ||||
|         tags_keys['album'] = ['XMP-xmpDM:Album', 'XMP:Album'] | ||||
|         tags_keys['title'] = ['XMP:Title', 'XMP:DisplayName'] | ||||
|         tags_keys['latitude'] = [ | ||||
|             'EXIF:GPSLatitude', | ||||
|             'XMP:GPSLatitude', | ||||
|             # 'QuickTime:GPSLatitude', | ||||
|             'Composite:GPSLatitude', | ||||
|         ] | ||||
|         tags_keys['longitude'] = [ | ||||
|             'EXIF:GPSLongitude', | ||||
|             'XMP:GPSLongitude', | ||||
|             # 'QuickTime:GPSLongitude', | ||||
|             'Composite:GPSLongitude', | ||||
|         ] | ||||
|         tags_keys['latitude_ref'] = ['EXIF:GPSLatitudeRef'] | ||||
|         tags_keys['longitude_ref'] = ['EXIF:GPSLongitudeRef'] | ||||
|         tags_keys['original_name'] = ['XMP:OriginalFileName'] | ||||
| 
 | ||||
|         # Remove ignored tag from list | ||||
|         for tag_regex in self.ignore_tags: | ||||
|             for key, tags in tags_keys.items(): | ||||
|                 for i, tag in enumerate(tags): | ||||
|                     if re.match(tag_regex, tag): | ||||
|                         del tags_keys[key][i] | ||||
| 
 | ||||
|         return tags_keys | ||||
| 
 | ||||
|     def _del_ignored_tags(self, exif_metadata): | ||||
|         for tag_regex in self.ignore_tags: | ||||
|             ignored_tags = set() | ||||
|             for tag in exif_metadata: | ||||
|                 if re.search(tag_regex, tag) is not None: | ||||
|                     ignored_tags.add(tag) | ||||
|             for ignored_tag in ignored_tags: | ||||
|                 del exif_metadata[ignored_tag] | ||||
|         # get self.metadata | ||||
|         self.get_metadata(self.file_path) | ||||
| 
 | ||||
|     def get_mimetype(self): | ||||
|         """Get the mimetype of the file. | ||||
| 
 | ||||
|         """ | ||||
|         Get the mimetype of the file. | ||||
|         :returns: str or None | ||||
|         """ | ||||
|         mimetype = mimetypes.guess_type(self.file_path) | ||||
| @ -302,50 +249,6 @@ class Media: | ||||
| 
 | ||||
|         return mimetype[0] | ||||
| 
 | ||||
|     def _get_key_values(self, key): | ||||
|         """ | ||||
|         Get the first value of a tag set | ||||
|         :returns: str or None if no exif tag | ||||
|         """ | ||||
|         if self.exif_metadata is None: | ||||
|             return None | ||||
| 
 | ||||
|         for tag in self.tags_keys[key]: | ||||
|             if tag in self.exif_metadata: | ||||
|                 yield self.exif_metadata[tag] | ||||
| 
 | ||||
|     def get_value(self, tag): | ||||
|         """ | ||||
|         Get given value from EXIF. | ||||
|         :returns: str or None | ||||
|         """ | ||||
|         if self.exif_metadata is None: | ||||
|             return None | ||||
|         if tag not in self.exif_metadata: | ||||
|             return None | ||||
| 
 | ||||
|         return self.exif_metadata[tag] | ||||
| 
 | ||||
|     def get_date_format(self, value): | ||||
|         """Formatting date attribute. | ||||
|         :returns: datetime object or None | ||||
|         """ | ||||
|         # We need to parse a string to datetime format. | ||||
|         # EXIF DateTimeOriginal and EXIF DateTime are both stored | ||||
|         #   in %Y:%m:%d %H:%M:%S format | ||||
|         if value is None: | ||||
|             return None | ||||
| 
 | ||||
|         try: | ||||
|             # correct nasty formated date | ||||
|             regex = re.compile(r'(\d{4}):(\d{2}):(\d{2})') | ||||
|             if re.match(regex, value) is not None:  # noqa | ||||
|                 value = re.sub(regex, r'\g<1>-\g<2>-\g<3>', value) | ||||
|             return parser.parse(value) | ||||
|         except BaseException or parser._parser.ParserError as e: | ||||
|             self.logger.warning(e.args, value) | ||||
|             return None | ||||
| 
 | ||||
|     def get_coordinates(self, key, value): | ||||
|         """Get latitude or longitude value | ||||
| 
 | ||||
| @ -382,6 +285,27 @@ class Media: | ||||
| 
 | ||||
|         return None | ||||
| 
 | ||||
|     def get_date_format(self, value): | ||||
|         """ | ||||
|         Formatting date attribute. | ||||
|         :returns: datetime object or None | ||||
|         """ | ||||
|         # We need to parse a string to datetime format. | ||||
|         # EXIF DateTimeOriginal and EXIF DateTime are both stored | ||||
|         #   in %Y:%m:%d %H:%M:%S format | ||||
|         if value is None: | ||||
|             return None | ||||
| 
 | ||||
|         try: | ||||
|             # correct nasty formated date | ||||
|             regex = re.compile(r'(\d{4}):(\d{2}):(\d{2})') | ||||
|             if re.match(regex, value) is not None:  # noqa | ||||
|                 value = re.sub(regex, r'\g<1>-\g<2>-\g<3>', value) | ||||
|             return parser.parse(value) | ||||
|         except BaseException or parser._parser.ParserError as e: | ||||
|             self.logger.warning(e.args, value) | ||||
|             return None | ||||
| 
 | ||||
|     def _get_date_media_interactive(self, choices, default): | ||||
|         print(f"Date conflict for file: {self.file_path}") | ||||
|         choices_list = [ | ||||
| @ -483,12 +407,6 @@ class Media: | ||||
|             default = date_filename | ||||
|             return self._get_date_media_interactive(choices, default) | ||||
| 
 | ||||
|     def get_exif_metadata(self): | ||||
|         # Get metadata from exiftool. | ||||
|         self.exif_metadata = ExifToolCaching( | ||||
|             self.file_path, logger=self.logger | ||||
|         ).asdict() | ||||
| 
 | ||||
|     def _set_album(self, album, folder): | ||||
|         print(f"Metadata conflict for file: {self.file_path}") | ||||
|         choices_list = [ | ||||
| @ -511,23 +429,15 @@ class Media: | ||||
|         if not answers['album']: | ||||
|             answers = inquirer.prompt(prompt, theme=self.theme) | ||||
|             return answers['custom'] | ||||
|         else: | ||||
|             return answers['album'] | ||||
| 
 | ||||
|         return answers['album'] | ||||
| 
 | ||||
|     def _set_metadata_from_exif(self): | ||||
| 
 | ||||
|         self.metadata['src_dir'] = str(self.src_dir) | ||||
|         self.metadata['subdirs'] = str( | ||||
|             self.file_path.relative_to(self.src_dir).parent | ||||
|         ) | ||||
|         self.metadata['filename'] = self.file_path.name | ||||
|         # Get metadata from exif | ||||
| 
 | ||||
|         self.get_exif_metadata() | ||||
| 
 | ||||
|         # Retrieve selected metadata to dict | ||||
|         """ | ||||
|         Get selected metadata from exif to dict structure | ||||
|         """ | ||||
|         if not self.exif_metadata: | ||||
|             return self.metadata | ||||
|             return | ||||
| 
 | ||||
|         for key in self.tags_keys: | ||||
|             formated_data = None | ||||
| @ -655,7 +565,7 @@ class Media: | ||||
|         if not album or album == '': | ||||
|             self.metadata['album'] = folder | ||||
| 
 | ||||
|     def get_metadata(self, root, loc=None, db=None, cache=False) -> dict: | ||||
|     def get_metadata(self, root, loc=None, db=None, cache=False): | ||||
|         """ | ||||
|         Get a dictionary of metadata from exif. | ||||
|         All keys will be present and have a value of None if not obtained. | ||||
| @ -670,6 +580,12 @@ class Media: | ||||
|         if db_checksum: | ||||
|             location_id = self._set_metadata_from_db(db, relpath) | ||||
|         else: | ||||
|             self.metadata['src_dir'] = str(self.src_dir) | ||||
|             self.metadata['subdirs'] = str( | ||||
|                 self.file_path.relative_to(self.src_dir).parent | ||||
|             ) | ||||
|             self.metadata['filename'] = self.file_path.name | ||||
| 
 | ||||
|             self._set_metadata_from_exif() | ||||
| 
 | ||||
|         self.metadata['date_media'] = self.get_date_media() | ||||
| @ -679,8 +595,6 @@ class Media: | ||||
|         if self.album_from_folder: | ||||
|             self._set_album_from_folder() | ||||
| 
 | ||||
|         return self.metadata | ||||
| 
 | ||||
|     def has_exif_data(self): | ||||
|         """Check if file has metadata, date original""" | ||||
|         if not self.metadata: | ||||
| @ -692,78 +606,17 @@ class Media: | ||||
| 
 | ||||
|         return False | ||||
| 
 | ||||
|     def set_value(self, tag, value): | ||||
|         """Set value of a tag. | ||||
| 
 | ||||
|         :returns: value (str) | ||||
|         """ | ||||
|         return ExifTool(self.file_path, logger=self.logger).setvalue(tag, value) | ||||
| 
 | ||||
|     def set_key_values(self, key, value): | ||||
|         """Set tags values for given key""" | ||||
|         status = True | ||||
|         if self.exif_metadata is None: | ||||
|             return False | ||||
| 
 | ||||
|         for tag in self.tags_keys[key]: | ||||
|             if tag in self.exif_metadata: | ||||
|                 if not self.set_value(tag, value): | ||||
|                     status = False | ||||
| 
 | ||||
|         return status | ||||
| 
 | ||||
|     def set_date_media(self, time): | ||||
|         """Set the date/time a photo was taken. | ||||
| 
 | ||||
|         :param datetime time: datetime object of when the photo was taken | ||||
|         :returns: bool | ||||
|         """ | ||||
|         if time is None: | ||||
|             return False | ||||
| 
 | ||||
|         formatted_time = time.strftime('%Y:%m:%d %H:%M:%S') | ||||
|         status = self.set_value('date_original', formatted_time) | ||||
|         if status == False: | ||||
|             # exif attribute date_original d'ont exist | ||||
|             status = self.set_value('date_created', formatted_time) | ||||
| 
 | ||||
|         return status | ||||
| 
 | ||||
|     def set_coordinates(self, latitude, longitude): | ||||
|         status = [] | ||||
|         if self.metadata['latitude_ref']: | ||||
|             latitude = abs(latitude) | ||||
|             if latitude > 0: | ||||
|                 status.append(self.set_value('latitude_ref', 'N')) | ||||
|             else: | ||||
|                 status.append(self.set_value('latitude_ref', 'S')) | ||||
| 
 | ||||
|         status.append(self.set_value('latitude', latitude)) | ||||
| 
 | ||||
|         if self.metadata['longitude_ref']: | ||||
|             longitude = abs(longitude) | ||||
|             if longitude > 0: | ||||
|                 status.append(self.set_value('latitude_ref', 'E')) | ||||
|             else: | ||||
|                 status.append(self.set_value('longitude_ref', 'W')) | ||||
| 
 | ||||
|         status.append(self.set_value('longitude', longitude)) | ||||
| 
 | ||||
|         if all(status): | ||||
|             return True | ||||
|         else: | ||||
|             return False | ||||
| 
 | ||||
|     def set_album_from_folder(self): | ||||
|         """Set the album attribute based on the leaf folder name | ||||
| 
 | ||||
|         :returns: bool | ||||
|         """ | ||||
|         return self.set_value('album', self.file_path.parent.name) | ||||
| 
 | ||||
| 
 | ||||
| class Medias: | ||||
|     """Get media data in collection or source path""" | ||||
|     """ | ||||
|     Extract matadatas from exiftool in paths and sort them to dict structure | ||||
|     """ | ||||
| 
 | ||||
|     PHOTO = ('arw', 'cr2', 'dng', 'gif', 'heic', 'jpeg', 'jpg', 'nef', 'png', 'rw2') | ||||
|     AUDIO = ('m4a',) | ||||
|     VIDEO = ('avi', 'm4v', 'mov', 'mp4', 'mpg', 'mpeg', '3gp', 'mts') | ||||
| 
 | ||||
|     extensions = PHOTO + AUDIO + VIDEO | ||||
| 
 | ||||
|     def __init__( | ||||
|         self, | ||||
| @ -801,7 +654,7 @@ class Medias: | ||||
|         self.theme = request.load_theme() | ||||
| 
 | ||||
|     def get_media(self, file_path, src_dir, loc=None): | ||||
|         media = Media( | ||||
|         return Media( | ||||
|             file_path, | ||||
|             src_dir, | ||||
|             self.album_from_folder, | ||||
| @ -811,9 +664,6 @@ class Medias: | ||||
|             self.use_date_filename, | ||||
|             self.use_file_dates, | ||||
|         ) | ||||
|         media.get_metadata(self.root, loc, self.db.sqlite, self.cache) | ||||
| 
 | ||||
|         return media | ||||
| 
 | ||||
|     def get_medias(self, src_dirs, imp=False, loc=None): | ||||
|         """Get medias data""" | ||||
| @ -837,7 +687,12 @@ class Medias: | ||||
|     def update_exif_data(self, metadata): | ||||
| 
 | ||||
|         file_path = self.root / metadata['file_path'] | ||||
|         exif = WriteExif(file_path, metadata, self.ignore_tags) | ||||
|         exif = WriteExif( | ||||
|             file_path, | ||||
|             metadata, | ||||
|             ignore_tags=self.ignore_tags, | ||||
|             logger=self.logger | ||||
|         ) | ||||
| 
 | ||||
|         updated = False | ||||
|         if self.album_from_folder: | ||||
|  | ||||
| @ -65,7 +65,7 @@ class TestFPath: | ||||
| 
 | ||||
|             exif_data = ExifToolCaching(str(file_path)).asdict() | ||||
|             loc = GeoLocation() | ||||
|             metadata = media.get_metadata(self.src_path, loc) | ||||
|             metadata = media.metadata | ||||
|             for item, regex in items.items(): | ||||
|                 for mask in masks: | ||||
|                     matched = re.search(regex, mask) | ||||
| @ -153,10 +153,10 @@ class TestCollection: | ||||
|         assert not summary.errors | ||||
| 
 | ||||
|         # check if album value are set | ||||
|         for file_path in tmp_path.glob('**/*'): | ||||
|         paths = Paths(glob='**/*').get_files(tmp_path) | ||||
|         for file_path in paths: | ||||
|             if '.db' not in str(file_path): | ||||
|                 media = Media(file_path, tmp_path, album_from_folder=True) | ||||
|                 media.get_exif_metadata() | ||||
|                 for value in media._get_key_values('album'): | ||||
|                     assert value != '' or None | ||||
| 
 | ||||
| @ -206,7 +206,6 @@ class TestCollection: | ||||
|             # copy mode | ||||
|             src_path = Path(self.src_path, 'test_exif', 'photo.png') | ||||
|             media = Media(src_path, self.src_path) | ||||
|             media.get_metadata(tmp_path) | ||||
|             name = 'photo_' + str(imp) + '.png' | ||||
|             media.metadata['file_path'] = name | ||||
|             dest_path = Path(tmp_path, name) | ||||
|  | ||||
| @ -14,7 +14,7 @@ from ordigi.utils import get_date_from_string | ||||
| ORDIGI_PATH = Path(__file__).parent.parent | ||||
| CACHING = True | ||||
| 
 | ||||
| class TestMetadata: | ||||
| class TestMedia: | ||||
| 
 | ||||
|     @pytest.fixture(autouse=True) | ||||
|     def setup_class(cls, sample_files_paths): | ||||
| @ -31,8 +31,7 @@ class TestMetadata: | ||||
|         for file_path, media in self.get_media(): | ||||
|             # test get metadata from cache or exif | ||||
|             for root in self.src_path, tmp_path: | ||||
|                 result = media.get_metadata(root) | ||||
|                 assert result | ||||
|                 media.get_metadata(root) | ||||
|                 assert isinstance(media.metadata, dict), media.metadata | ||||
|                 #check if all tags key are present | ||||
|                 for tags_key, tags in media.tags_keys.items(): | ||||
| @ -77,7 +76,6 @@ class TestMetadata: | ||||
|             exif_data = ExifToolCaching(str(file_path)).asdict() | ||||
|             media = Media(file_path, self.src_path, use_date_filename=True, | ||||
|                     use_file_dates=True) | ||||
|             metadata = media.get_metadata(self.src_path) | ||||
|             date_media = media.get_date_media() | ||||
| 
 | ||||
|             date_filename = None | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user