"""CioWarehouse2 route definitions."""
from __future__ import annotations
from pyramid.request import Request
from pyramid.config import Configurator
from .lib.ciotype import CioType
from .lib.ciopath import CioPath
WAREHOUSE_REFRESH_PATH = 'warehouse/refresh'
HOME_PAGES = ['warehouse_index', 'search_favorite']
ADVANCED_SEARCH_ROUTE = '/search/favorite'
# =============================================================================
[docs]
def includeme(configurator: Configurator):
"""Function to include routes.
:type configurator: pyramid.config.Configurator
:param configurator:
Object used to do configuration declaration within the application.
"""
# Configuration
configurator.add_route('ciowarehouse2_view', '/ciowarehouse2/view')
configurator.add_route('ciowarehouse2_edit', '/ciowarehouse2/edit')
# Seed
configurator.add_route('seed_index', '/seed/index')
configurator.add_route('seed_index_filter', '/seed/index/filter')
configurator.add_route('seed_create', '/seed/create')
configurator.add_route('seed_edit', '/seed/edit/{seed_id}')
configurator.add_route('seed_view', '/seed/view/{seed_id}')
# Warehouse
configurator.add_route('warehouse_index', '/warehouse/index')
configurator.add_route('warehouse_index_filter', '/warehouse/index/filter')
configurator.add_route('warehouse_create', '/warehouse/create')
configurator.add_route('warehouse_edit', '/warehouse/edit/{warehouse_id}')
configurator.add_route('warehouse_view', '/warehouse/view/{warehouse_id}')
configurator.add_route('warehouse_refresh', f'/{WAREHOUSE_REFRESH_PATH}')
# Browse
configurator.add_route('browse', '/browse/*ciopath')
configurator.add_route('glance', '/glance/*ciopath')
# Files
configurator.add_route('file_view', '/file/view/{ciotype}/*ciopath')
configurator.add_route('file_edit', '/file/edit/{ciotype}/*ciopath')
configurator.add_route('file_preview', '/file/preview/{ciotype}/*ciopath')
configurator.add_route('file_download', '/file/download/*ciopath')
configurator.add_route('file_get', '/file/get/*ciopath')
configurator.add_route(
'file_thumbnail',
'/file/thumbnail/{size}/{extension}/{ciotype}/*ciopath')
configurator.add_route('file_save', '/file/save/{ciotype}/*ciopath')
configurator.add_route('file_move', '/file/move')
# Suggest
configurator.add_route('suggest_all', '/suggest/all')
configurator.add_route('suggest_favorite', '/suggest/favorite')
configurator.add_route('suggest_warehouse', '/suggest/warehouse/*ciopath')
configurator.add_route('suggest_directory', '/suggest/directory/*ciopath')
# Search
configurator.add_route('search_all', '/search/all')
configurator.add_route('search_favorite', ADVANCED_SEARCH_ROUTE)
configurator.add_route('search_warehouse', '/search/warehouse/*ciopath')
# Sharings
configurator.add_route(
'sharing_download', '/sharing/download/{sharing_id}')
configurator.add_route(
'sharing_download_one', '/sharing/download_one/{sharing_id}/*ciopath')
# =============================================================================
[docs]
def route_thumbnail(
request: Request,
ciopath: CioPath,
ciotype: CioType,
icon: str,
thumbnail_ext: str | None,
size: str = 'medium') -> str:
"""Return the route path to the thumbnail of the given `CioPath`.
:type request: pyramid.request.Request
:param request:
Current request.
:type ciopath: .lib.ciopath.CioPath
:param ciopath:
The `CioPath` representing the file.
:type ciotype: .lib.ciotype.CioType
:param ciotype:
The `CioType` representing the file.
:param str icon:
File name of the icon.
:param str thumbnail_ext:
Thumnbnail extension.
:param str size: (``'medium'`` [default] or ``'large'``)
The wanted size.
:rtype: str
"""
# No known thumbnail => icon
if thumbnail_ext is None:
return route_icon(icon, 'medium')
# Thumbnail
return request.route_path(
'file_thumbnail',
size=size,
extension=thumbnail_ext,
ciotype=ciotype.route(),
ciopath=ciopath.route())
# =============================================================================
[docs]
def route_icon(icon: str, size: str = 'medium') -> str:
"""Return the route path to the icon.
:param str icon:
File name of the icon.
:param str size: (``'medium'`` [default] or ``'small'`` )
The wanted size.
"""
return f"/{__package__.split('.', maxsplit=1)[0]}/home/icons"\
f'/{size}/{icon}'