diff --git a/invenio_previewer/config.py b/invenio_previewer/config.py index f68748ffdfd37da03a457649d8caaa006e18a4b9..0790b0d0b6249c7a06cd1338f028ef3e043ffa8f 100644 --- a/invenio_previewer/config.py +++ b/invenio_previewer/config.py @@ -21,7 +21,7 @@ PREVIEWER_CHARDET_CONFIDENCE = 0.9 """Confidence threshold for character encoding detection by `cchardet`.""" PREVIEWER_MAX_FILE_SIZE_BYTES = 1 * 1024 * 1024 -"""Maximum file size in bytes for JSON/XML files.""" +"""Maximum file size in bytes for JSON/XML/CSV files.""" PREVIEWER_MAX_IMAGE_SIZE_BYTES = 0.5 * 1024 * 1024 """Maximum file size in bytes for image files.""" diff --git a/invenio_previewer/extensions/csv_papaparsejs.py b/invenio_previewer/extensions/csv_papaparsejs.py index 21a5100b5ff6d847aea70904f39bd96426e487ec..9b34b2b85144ea29d6f2da6369b923267196779f 100644 --- a/invenio_previewer/extensions/csv_papaparsejs.py +++ b/invenio_previewer/extensions/csv_papaparsejs.py @@ -15,11 +15,20 @@ from ..proxies import current_previewer previewable_extensions = ["csv", "dsv"] +def validate_csv(file): + """Return dialect information about given csv file.""" + max_file_size = current_app.config.get( + "PREVIEWER_MAX_FILE_SIZE_BYTES", 10 * 1024 * 1024 + ) + is_size_valid = file.size <= max_file_size + return is_size_valid + + def can_preview(file): """Determine if the given file can be previewed.""" - if file.is_local() and file.has_extensions(".csv", ".dsv"): - return True - return False + return ( + file.is_local() and file.has_extensions(".csv", ".dsv") and validate_csv(file) + ) def preview(file):