mirror of https://gitlab.com/bashrc2/epicyon
				
				
				
			
		
			
				
	
	
		
			145 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
| __filename__ = "formats.py"
 | |
| __author__ = "Bob Mottram"
 | |
| __license__ = "AGPL3+"
 | |
| __version__ = "1.6.0"
 | |
| __maintainer__ = "Bob Mottram"
 | |
| __email__ = "bob@libreserver.org"
 | |
| __status__ = "Production"
 | |
| __module_group__ = "Core"
 | |
| 
 | |
| 
 | |
| def get_video_extensions() -> []:
 | |
|     """Returns a list of the possible video file extensions
 | |
|     """
 | |
|     return ('mp4', 'webm', 'ogv')
 | |
| 
 | |
| 
 | |
| def get_audio_extensions() -> []:
 | |
|     """Returns a list of the possible audio file extensions
 | |
|     """
 | |
|     return ('mp3', 'ogg', 'flac', 'opus', 'spx', 'wav')
 | |
| 
 | |
| 
 | |
| def get_image_extensions() -> []:
 | |
|     """Returns a list of the possible image file extensions
 | |
|     """
 | |
|     return ('jpg', 'jpeg', 'gif', 'webp', 'avif', 'heic',
 | |
|             'svg', 'ico', 'jxl', 'png')
 | |
| 
 | |
| 
 | |
| def image_mime_types_dict() -> {}:
 | |
|     """Returns a dict of image mime types
 | |
|     """
 | |
|     return {
 | |
|         'png': 'png',
 | |
|         'jpg': 'jpeg',
 | |
|         'jpeg': 'jpeg',
 | |
|         'jxl': 'jxl',
 | |
|         'gif': 'gif',
 | |
|         'avif': 'avif',
 | |
|         'heic': 'heic',
 | |
|         'svg': 'svg+xml',
 | |
|         'webp': 'webp',
 | |
|         'ico': 'x-icon'
 | |
|     }
 | |
| 
 | |
| 
 | |
| def get_image_mime_type(image_filename: str) -> str:
 | |
|     """Returns the mime type for the given image filename
 | |
|     """
 | |
|     extensions_to_mime = image_mime_types_dict()
 | |
|     for ext, mime_ext in extensions_to_mime.items():
 | |
|         if image_filename.endswith('.' + ext):
 | |
|             return 'image/' + mime_ext
 | |
|     return 'image/png'
 | |
| 
 | |
| 
 | |
| def get_image_extension_from_mime_type(content_type: str) -> str:
 | |
|     """Returns the image extension from a mime type, such as image/jpeg
 | |
|     """
 | |
|     image_media = {
 | |
|         'png': 'png',
 | |
|         'jpeg': 'jpg',
 | |
|         'jxl': 'jxl',
 | |
|         'gif': 'gif',
 | |
|         'svg+xml': 'svg',
 | |
|         'webp': 'webp',
 | |
|         'avif': 'avif',
 | |
|         'heic': 'heic',
 | |
|         'x-icon': 'ico'
 | |
|     }
 | |
|     for mime_ext, ext in image_media.items():
 | |
|         if content_type.endswith(mime_ext):
 | |
|             return ext
 | |
|     return 'png'
 | |
| 
 | |
| 
 | |
| def get_media_extensions() -> []:
 | |
|     """Returns a list of the possible media file extensions
 | |
|     """
 | |
|     return get_image_extensions() + \
 | |
|         get_video_extensions() + get_audio_extensions()
 | |
| 
 | |
| 
 | |
| def get_image_formats() -> str:
 | |
|     """Returns a string of permissable image formats
 | |
|     used when selecting an image for a new post
 | |
|     """
 | |
|     image_ext = get_image_extensions()
 | |
| 
 | |
|     image_formats = ''
 | |
|     for ext in image_ext:
 | |
|         if image_formats:
 | |
|             image_formats += ', '
 | |
|         image_formats += '.' + ext
 | |
|     return image_formats
 | |
| 
 | |
| 
 | |
| def get_media_formats() -> str:
 | |
|     """Returns a string of permissable media formats
 | |
|     used when selecting an attachment for a new post
 | |
|     """
 | |
|     media_ext = get_media_extensions()
 | |
| 
 | |
|     media_formats = ''
 | |
|     for ext in media_ext:
 | |
|         if media_formats:
 | |
|             media_formats += ', '
 | |
|         media_formats += '.' + ext
 | |
|     return media_formats
 | |
| 
 | |
| 
 | |
| def media_file_mime_type(filename: str) -> str:
 | |
|     """Given a media filename return its mime type
 | |
|     """
 | |
|     if '.' not in filename:
 | |
|         return 'image/png'
 | |
|     extensions = {
 | |
|         'json': 'application/json',
 | |
|         'png': 'image/png',
 | |
|         'jpg': 'image/jpeg',
 | |
|         'jxl': 'image/jxl',
 | |
|         'jpeg': 'image/jpeg',
 | |
|         'gif': 'image/gif',
 | |
|         'svg': 'image/svg+xml',
 | |
|         'webp': 'image/webp',
 | |
|         'avif': 'image/avif',
 | |
|         'heic': 'image/heic',
 | |
|         'ico': 'image/x-icon',
 | |
|         'mp3': 'audio/mpeg',
 | |
|         'ogg': 'audio/ogg',
 | |
|         'audio/wav': 'wav',
 | |
|         'audio/x-wav': 'wav',
 | |
|         'audio/x-pn-wave': 'wav',
 | |
|         'wav': 'audio/vnd.wave',
 | |
|         'opus': 'audio/opus',
 | |
|         'spx': 'audio/speex',
 | |
|         'flac': 'audio/flac',
 | |
|         'mp4': 'video/mp4',
 | |
|         'ogv': 'video/ogv'
 | |
|     }
 | |
|     file_ext = filename.split('.')[-1]
 | |
|     if not extensions.get(file_ext):
 | |
|         return 'image/png'
 | |
|     return extensions[file_ext]
 |