unrhodecode/rhodecode/apps/file_store/extensions.py
2025-01-13 17:47:37 +01:00

66 lines
2.4 KiB
Python

# Copyright (C) 2016-2024 RhodeCode GmbH
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License, version 3
# (only), as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# This program is dual-licensed. If you wish to learn more about the
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/
ANY = []
TEXT_EXT = ["txt", "md", "rst", "log"]
DOCUMENTS_EXT = ["pdf", "rtf", "odf", "ods", "gnumeric", "abw", "doc", "docx", "xls", "xlsx"]
IMAGES_EXT = ["jpg", "jpe", "jpeg", "png", "gif", "svg", "bmp", "tiff"]
AUDIO_EXT = ["wav", "mp3", "aac", "ogg", "oga", "flac"]
VIDEO_EXT = ["mpeg", "3gp", "avi", "divx", "dvr", "flv", "mp4", "wmv"]
DATA_EXT = ["csv", "ini", "json", "plist", "xml", "yaml", "yml"]
SCRIPTS_EXT = ["js", "php", "pl", "py", "rb", "sh", "go", "c", "h"]
ARCHIVES_EXT = ["gz", "bz2", "zip", "tar", "tgz", "txz", "7z"]
EXECUTABLES_EXT = ["so", "exe", "dll"]
DEFAULT = DOCUMENTS_EXT + TEXT_EXT + IMAGES_EXT + DATA_EXT
GROUPS = dict(
(
("any", ANY),
("text", TEXT_EXT),
("documents", DOCUMENTS_EXT),
("images", IMAGES_EXT),
("audio", AUDIO_EXT),
("video", VIDEO_EXT),
("data", DATA_EXT),
("scripts", SCRIPTS_EXT),
("archives", ARCHIVES_EXT),
("executables", EXECUTABLES_EXT),
("default", DEFAULT),
)
)
def resolve_extensions(extensions, groups=None):
"""
Calculate allowed extensions based on a list of extensions provided, and optional
groups of extensions from the available lists.
:param extensions: a list of extensions e.g ['py', 'txt']
:param groups: additionally groups to extend the extensions.
"""
groups = groups or []
valid_exts = {x.lower() for x in extensions}
for group in groups:
if group in GROUPS:
valid_exts.update(GROUPS[group])
return valid_exts