"""Logic module that works with asset location info.""" import ipaddress import os from assets import config from assets.constants import asset_types from assets.utils.slice_formatter import SliceFormatter def get_path( ip, initial_folder, path_structure, params, filename, path_structure_type): """Return full path for asset from asset location params. If path_structure_type equals 'file', path_structure is a full template for the path to file; otherwise, it is structure template for folders. Args: ip (int): Encoded IP address initial_folder (string): Initial folder name path_structure (string): Folders or file path structure template params (dict): Params for folders structure replacement filename (string): Asset filename path_structure_type (str): type of path structure (folder, directory) Returns: string: Generated path """ formatter = SliceFormatter() internal_path = formatter.format(path_structure, **params) if path_structure_type == asset_types.TYPE_PATH_STRUCTURE_DIRECTORY: internal_path = ''.join([internal_path, '/', filename]) path = '//{ip_address}/{initial_folder}{internal_path}'.format( ip_address=ipaddress.ip_address(ip), initial_folder=initial_folder, internal_path=internal_path) return path.replace('/', '\\') def get_track_url( storage_id, initial_folder, folder_structure, params, filename): """Return streaming url for track asset. Args: storage_id (int): Storage id initial_folder (string): Initial folder name folder_structure (string): Folders structure template params (dict): Params for folders structure replacement filename (string): Asset filename Returns: string: Generated streaming url """ formatter = SliceFormatter() folders = formatter.format(folder_structure, **params) filename = os.path.splitext(filename)[0] path = os.path.join( config.STREAM_URL_PREFIX, str(storage_id), initial_folder, folders, filename) return path