Enums
Enumeration types for gallery configuration options.
ViewMode
def ViewMode(
args:VAR_POSITIONAL, kwds:VAR_KEYWORD
):
Display modes for media gallery.
SelectionMode
def SelectionMode(
args:VAR_POSITIONAL, kwds:VAR_KEYWORD
):
File selection modes.
CardSize
def CardSize(
args:VAR_POSITIONAL, kwds:VAR_KEYWORD
):
Card size presets for grid view.
ListColumn
def ListColumn(
args:VAR_POSITIONAL, kwds:VAR_KEYWORD
):
Available columns for list view.
# Test enums
assert ViewMode.GRID.value == "grid"
assert ViewMode.LIST == "list"
assert SelectionMode.SINGLE.value == "single"
assert CardSize.MEDIUM.value == "medium"
assert ListColumn.NAME.value == "name"
print("Enum tests passed!")
GridConfig
Configuration for the grid view layout.
GridConfig
def GridConfig(
columns:int=4, card_size:CardSize=<CardSize.MEDIUM: 'medium'>, show_thumbnails:bool=True,
show_file_size:bool=True, show_file_type:bool=True
)->None:
Grid view display configuration.
# Test GridConfig defaults
grid_config = GridConfig()
assert grid_config.columns == 4
assert grid_config.card_size == CardSize.MEDIUM
assert grid_config.show_thumbnails == True
# Test custom config
custom_grid = GridConfig(
columns=6,
card_size=CardSize.SMALL,
show_thumbnails=False
)
assert custom_grid.columns == 6
assert custom_grid.card_size == CardSize.SMALL
assert custom_grid.show_thumbnails == False
print("GridConfig tests passed!")
ListConfig
Configuration for the list view layout.
ListConfig
def ListConfig(
columns:List=<factory>, show_icons:bool=True, striped:bool=False, compact:bool=False
)->None:
List view display configuration.
# Test ListConfig defaults
list_config = ListConfig()
assert ListColumn.NAME in list_config.columns
assert ListColumn.SIZE in list_config.columns
assert list_config.show_icons == True
assert list_config.striped == False
# Test custom config
custom_list = ListConfig(
columns=[ListColumn.NAME, ListColumn.TYPE],
striped=True,
compact=True
)
assert len(custom_list.columns) == 2
assert custom_list.striped == True
assert custom_list.compact == True
print("ListConfig tests passed!")
FilterConfig
Configuration for filtering displayed media files.
FilterConfig
def FilterConfig(
enabled_types:List=<factory>, allow_type_filter:bool=True, show_hidden:bool=False, custom_filter:Optional=None
)->None:
Filter configuration for media gallery.
# Test FilterConfig
filter_config = FilterConfig()
# Test default (media types enabled)
audio_file = FileInfo(
name="song.mp3", path="/song.mp3", is_directory=False,
file_type=FileType.AUDIO
)
assert filter_config.matches(audio_file) == True
# Test hidden file filtering
hidden_file = FileInfo(
name=".hidden.mp3", path="/.hidden.mp3", is_directory=False,
file_type=FileType.AUDIO
)
assert filter_config.matches(hidden_file) == False
filter_with_hidden = FilterConfig(show_hidden=True)
assert filter_with_hidden.matches(hidden_file) == True
# Test type filtering
code_file = FileInfo(
name="script.py", path="/script.py", is_directory=False,
file_type=FileType.CODE
)
assert filter_config.matches(code_file) == False # CODE not in default enabled
# Test enabled types
audio_only_filter = FilterConfig(enabled_types=[FileType.AUDIO])
video_file = FileInfo(
name="video.mp4", path="/video.mp4", is_directory=False,
file_type=FileType.VIDEO
)
assert audio_only_filter.matches(audio_file) == True
assert audio_only_filter.matches(video_file) == False
# Test custom filter
def size_filter(f: FileInfo) -> bool:
return f.size is None or f.size < 1000000 # Under 1MB
custom_filter = FilterConfig(custom_filter=size_filter)
small_file = FileInfo(
name="small.mp3", path="/small.mp3", is_directory=False,
file_type=FileType.AUDIO, size=500
)
large_file = FileInfo(
name="large.mp3", path="/large.mp3", is_directory=False,
file_type=FileType.AUDIO, size=10000000
)
assert custom_filter.matches(small_file) == True
assert custom_filter.matches(large_file) == False
print("FilterConfig tests passed!")
FilterConfig tests passed!
PreviewConfig
Configuration for the preview modal.
PreviewConfig
def PreviewConfig(
enable_preview:bool=True, show_download_button:bool=True, show_info_panel:bool=True, show_navigation:bool=True,
autoplay_video:bool=False, autoplay_audio:bool=False
)->None:
Preview modal configuration.
# Test PreviewConfig
preview = PreviewConfig()
assert preview.enable_preview == True
assert preview.show_download_button == True
assert preview.autoplay_video == False
custom_preview = PreviewConfig(
show_navigation=False,
autoplay_video=True
)
assert custom_preview.show_navigation == False
assert custom_preview.autoplay_video == True
print("PreviewConfig tests passed!")
PreviewConfig tests passed!
GalleryCallbacks
Optional callbacks for customizing gallery behavior.
GalleryCallbacks
def GalleryCallbacks(
on_select:Optional=None, on_selection_change:Optional=None, on_preview:Optional=None, on_download:Optional=None,
validate_selection:Optional=None
)->None:
Event callbacks for gallery customization.
# Test GalleryCallbacks
selected_files = []
def track_select(path: str):
selected_files.append(path)
def validate_audio_only(path: str) -> Tuple[bool, str]:
if path.endswith('.mp3') or path.endswith('.wav'):
return (True, "")
return (False, "Only audio files allowed")
callbacks = GalleryCallbacks(
on_select=track_select,
validate_selection=validate_audio_only
)
# Test callback works
callbacks.on_select("/test/song.mp3")
assert selected_files == ["/test/song.mp3"]
# Test validation
valid, msg = callbacks.validate_selection("/test.mp3")
assert valid == True
valid, msg = callbacks.validate_selection("/test.mp4")
assert valid == False
assert "Only audio" in msg
print("GalleryCallbacks tests passed!")
GalleryCallbacks tests passed!
GalleryConfig
Main configuration for the media gallery component.
GalleryConfig
def GalleryConfig(
default_view:ViewMode=<ViewMode.GRID: 'grid'>, allow_view_toggle:bool=True, grid:GridConfig=<factory>,
list:ListConfig=<factory>, filter:FilterConfig=<factory>, pagination:PaginationConfig=<factory>,
preview:PreviewConfig=<factory>, selection_mode:SelectionMode=<SelectionMode.NONE: 'none'>,
max_selections:Optional=None, gallery_id:str='media-gallery', content_id:str='media-gallery-content',
controls_id:str='media-gallery-controls', preview_modal_id:str='media-preview-modal',
keyboard_config:Optional=None
)->None:
Main configuration for media gallery.
# Test GalleryConfig
config = GalleryConfig()
# Test defaults
assert config.default_view == ViewMode.GRID
assert config.allow_view_toggle == True
assert config.selection_mode == SelectionMode.NONE
assert config.gallery_id == "media-gallery"
assert isinstance(config.grid, GridConfig)
assert isinstance(config.list, ListConfig)
assert isinstance(config.filter, FilterConfig)
assert isinstance(config.pagination, PaginationConfig)
assert isinstance(config.preview, PreviewConfig)
# Test can_select
file = FileInfo(name="test.mp3", path="/test.mp3", is_directory=False, file_type=FileType.AUDIO)
folder = FileInfo(name="folder", path="/folder", is_directory=True)
# Default: no selection
assert config.can_select(file) == False
assert config.can_select(folder) == False
# With selection enabled
select_config = GalleryConfig(selection_mode=SelectionMode.SINGLE)
assert select_config.can_select(file) == True
assert select_config.can_select(folder) == False # Folders never selectable
# Test with custom IDs
custom_config = GalleryConfig(
gallery_id="my-gallery",
content_id="my-content",
grid=GridConfig(columns=6),
pagination=PaginationConfig(items_per_page=48)
)
assert custom_config.gallery_id == "my-gallery"
assert custom_config.grid.columns == 6
assert custom_config.pagination.items_per_page == 48
print("GalleryConfig tests passed!")
GalleryConfig tests passed!