# Copyright (C) 2016-2020 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 . # # 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/ import io import uuid import pathlib def get_file_storage(settings): from rhodecode.apps.file_store.backends.local_store import LocalFileStorage from rhodecode.apps.file_store import config_keys store_path = settings.get(config_keys.store_path) return LocalFileStorage(base_path=store_path) def splitext(filename): ext = ''.join(pathlib.Path(filename).suffixes) return filename, ext def uid_filename(filename, randomized=True): """ Generates a randomized or stable (uuid) filename, preserving the original extension. :param filename: the original filename :param randomized: define if filename should be stable (sha1 based) or randomized """ _, ext = splitext(filename) if randomized: uid = uuid.uuid4() else: hash_key = '{}.{}'.format(filename, 'store') uid = uuid.uuid5(uuid.NAMESPACE_URL, hash_key) return str(uid) + ext.lower() def bytes_to_file_obj(bytes_data): return io.StringIO(bytes_data)