Small Python module to aid developers in getting file extensions from files securely.
Project description
python-magic-file
Small Python module to aid developers in getting file extensions from files.
Purpose
The main motivation behind this package is to easily get the file extension from given file instead of trusting the arbitrary file extension in the filename, for example in a web application which accepts file uploads.
Usage
Some examples on how to use this module.
Get extension from file
from python_magic_file import MagicFile
file_path = 'path/to/file'
with open(file_path 'rb') as f:
magic_file = MagicFile(f)
extension = magic_file.get_extension()
Get extensions from file
from python_magic_file import MagicFile
file_path = 'path/to/file'
with open(file_path 'rb') as f:
magic_file = MagicFile(f)
extensions = magic_file.get_extensions()
Register unknown/non-standard mimetypes
There may be some cases where get_extension() emits a following warning:
UserWarning: File extension for mimetype "video/x-m4v" is None, consider adding an extension for this mimetype using MagicFile.
We have to register file extension using MagicFile.add_type_to_mimetypes_module for video/x-m4v so get_extension() returns the registered extension instead of None.
MagicFile.add_type_to_mimetypes_module simply just calls mimetypes.add_type.
from python_magic_file import MagicFile
# A dictionary of mimetype/extension pairs
new_types = {'video/x-m4v': '.m4v'}
for mimetype, extension in new_types.items():
MagicFile.add_type_to_mimetypes_module(mimetype, extension)
with open('path/to/m4v-file.m4v', 'rb') as f:
magic_file = MagicFile(f)
extension = magic_file.get_extension() # .m4v
Get human readable name for file
from python_magic_file import MagicFile
file_path = 'path/to/file.txt'
with open(file_path 'rb') as f:
magic_file = MagicFile(f)
human_readable_name = magic_file.get_name() # ASCII text, with no line terminators
Usage with Flask
import os
from flask import Flask, request, abort
from python_magic_file import MagicFile
from werkzeug.utils import secure_filename
from werkzeug.security import safe_join
app = Flask(__name__)
# Allowed extensions for file uplaod
UPLOAD_ALLOWED_EXTENSIONS = ('.jpg', '.jpeg', '.png')
@app.post('/upload')
def upload_file():
uploaded_file = request.files.get('file')
if uploaded_file is None:
abort(400)
extension = MagicFile(uploaded_file.stream).get_extension()
if extension not in UPLOAD_ALLOWED_EXTENSIONS:
abort(400)
filename, _ = os.path.splitext(secure_filename(uploaded_file.filename))
save_path = safe_join(os.getcwd(), filename + extension)
uploaded_file.save(save_path)
return 'OK'
if __name__ == '__main__':
app.run()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_magic_file-0.0.7.tar.gz.
File metadata
- Download URL: python_magic_file-0.0.7.tar.gz
- Upload date:
- Size: 4.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63c66fed3e5aefef446bc3ecb3241b881754259b2fa0ecc13c8d2f24cbbf5b04
|
|
| MD5 |
f0b880dcf981ca3639ba360121d464d4
|
|
| BLAKE2b-256 |
5b692c54fa330d3c9dad26c8e96c7cf13d458d7830c7162adceebea9eda62595
|
File details
Details for the file python_magic_file-0.0.7-py3-none-any.whl.
File metadata
- Download URL: python_magic_file-0.0.7-py3-none-any.whl
- Upload date:
- Size: 5.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.10.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
665145d4fb90ae86fae70a7ec9a6b55a33186cc89b4cd8886328ea275babc84a
|
|
| MD5 |
a088431d9721ad75c451340c53a397c7
|
|
| BLAKE2b-256 |
2a0b09794283427d234adea80145c06b0ec14e2ba7f403d496e56e8d52c9e793
|