Introduction
FileViewer
widget in Supervisely is a useful tool for inspecting and easily navigation through files in specific directory in Team files.
Function signature
Copy FileViewer (
files_list = files_list,
selection_type = None ,
extended_selection = False ,
widget_id = None ,
)
Parameters
Parameters Type Description List of dicts with files and folders info
Literal[None, "file", "folder"]
If True
method get_selected_items()
returns a list
of dict
's, instead of list
with paths
files_list
Determine pathes to files.
type: List[dict]
Copy files = api . file . list (team_id, path)
tree_items = []
for file in files :
path = file [ "path" ]
tree_items . append ({ "path" : path})
file_viewer = FileViewer (files_list = tree_items)
selection_type
Type of data to select. If set to 'file'
- only files can be selected, if set to 'folder'
- only folders can be selected. If set to None
- both files and folders can be selected.
type: Literal[None, "file", "folder"]
default value: None
Copy file_viewer = FileViewer (
files_list = tree_items,
selection_type = "file" ,
)
extended_selection
If True
method get_selected_items()
returns a list
of dict
's, instead of list
with paths.
type: bool
default value: False
Copy file_viewer = FileViewer (
files_list = tree_items,
extended_selection = True ,
)
file = file_viewer . get_selected_path ()
print (file)
>>> { "path" : "some/path" , "type" : "file or folder" }
widget_id
ID of the widget.
type: str
default value: None
Methods and attributes
Attributes and Methods Description Get or set loading
property.
Return current path to files.
update_file_tree(files_list: List[dict])
Update files tree by given files list.
Decorator function is handled then input path changed.
Decorator function is handled then input value changed.
Mini App Example
You can find this example in our Github repository:
supervisely-ecosystem/ui-widgets-demos/selection/013_file_viewer/src/main.py
Import libraries
Copy import os
import supervisely as sly
from dotenv import load_dotenv
from supervisely . app . widgets import FileViewer , Container , Card , Text
Init API client
First, we load environment variables with credentials and init API for communicating with Supervisely Instance:
Copy load_dotenv ( "local.env" )
load_dotenv (os.path. expanduser ( "~/supervisely.env" ))
api = sly . Api ()
Get Team ID from environment variables
Copy team_id = sly . env . team_id ()
Prepare file pathes
Copy path = "/" # root of Team Files or specify your directory
files = api . file . list (team_id, path)
tree_items = []
for file in files :
path = file [ "path" ]
tree_items . append ({ "path" : path, "size" : file[ "meta" ][ "size" ]})
Initialize FileViewer
widget
Copy file_viewer = FileViewer (files_list = tree_items)
Create Text
widgets we will use
Copy selected_values = Text ()
curr_path = Text ()
Create app layout
Prepare a layout for app using Card
widget with the content
parameter and place widget that we've just created in the Container
widget.
Copy layout = Card (
content = Container (widgets = [curr_path, selected_values, file_viewer]),
title = "File Viewer" ,
)
Create app using layout
Create an app object with layout parameter.
Copy app = sly . Application (layout = layout)
Add function to control widgets from python code
Copy @file_viewer . path_changed
def refresh_tree ( current_path ):
curr_path . set (
text = f "Current path: { current_path } " ,
status = "text" ,
)
@file_viewer . value_changed
def print_selected ( selected_items ):
selected_values . set (
text = f "Selected items: { ', ' . join (selected_items) } " ,
status = "text" ,
)