| 
3 | 3 | from typing import overload  | 
4 | 4 | 
 
  | 
5 | 5 | from .._utils import wrap_async  | 
 | 6 | +from ..types import MISSING_TYPE  | 
6 | 7 | from ._types import (  | 
7 | 8 |     BookmarkDirFn,  | 
8 | 9 |     BookmarkDirFnAsync,  | 
9 | 10 |     BookmarkRestoreDirFn,  | 
10 | 11 |     BookmarkSaveDirFn,  | 
11 | 12 | )  | 
12 | 13 | 
 
  | 
13 |  | -# WARNING! This file contains global state!  | 
 | 14 | +# WARNING! This file contains global default values!  | 
 | 15 | + | 
 | 16 | + | 
14 | 17 | # During App initialization, the save_dir and restore_dir functions are conventionally set  | 
15 | 18 | # to read-only on the App.  | 
 | 19 | +# If nothing is set on the `app` object, the global default bookmark functions are found and used during every save/restore.  | 
 | 20 | +_default_bookmark_save_dir_fn: BookmarkSaveDirFn | None = None  | 
 | 21 | +_default_bookmark_restore_dir_fn: BookmarkRestoreDirFn | None = None  | 
 | 22 | + | 
 | 23 | + | 
 | 24 | +def get_bookmark_save_dir_fn(  | 
 | 25 | +    save_dir_fn: BookmarkSaveDirFn | None | MISSING_TYPE,  | 
 | 26 | +) -> BookmarkSaveDirFn | None:  | 
 | 27 | +    if isinstance(save_dir_fn, MISSING_TYPE):  | 
 | 28 | +        # Allow for default bookmark function to be utilized after app initialization.  | 
 | 29 | +        # Sometimes the app is created before hooks are registered.  | 
 | 30 | +        return _default_bookmark_save_dir_fn  | 
 | 31 | +    else:  | 
 | 32 | +        return save_dir_fn  | 
16 | 33 | 
 
  | 
17 | 34 | 
 
  | 
18 |  | -bookmark_save_dir: BookmarkSaveDirFn | None = None  | 
19 |  | -bookmark_restore_dir: BookmarkRestoreDirFn | None = None  | 
 | 35 | +def get_bookmark_restore_dir_fn(  | 
 | 36 | +    restore_dir_fn: BookmarkRestoreDirFn | None | MISSING_TYPE,  | 
 | 37 | +) -> BookmarkRestoreDirFn | None:  | 
 | 38 | +    if isinstance(restore_dir_fn, MISSING_TYPE):  | 
 | 39 | +        # Allow for default bookmark function to be utilized after app initialization.  | 
 | 40 | +        # Sometimes the app is created before hooks are registered.  | 
 | 41 | +        return _default_bookmark_restore_dir_fn  | 
 | 42 | +    else:  | 
 | 43 | +        return restore_dir_fn  | 
20 | 44 | 
 
  | 
21 | 45 | 
 
  | 
22 | 46 | @overload  | 
@@ -74,9 +98,9 @@ def restore_bookmark_dir(id: str) -> Path:  | 
74 | 98 |     --------  | 
75 | 99 |     * `~shiny.bookmark.set_global_restore_dir_fn` : Set the global bookmark restore directory function  | 
76 | 100 |     """  | 
77 |  | -    global bookmark_save_dir  | 
 | 101 | +    global _default_bookmark_save_dir_fn  | 
78 | 102 | 
 
  | 
79 |  | -    bookmark_save_dir = as_bookmark_dir_fn(fn)  | 
 | 103 | +    _default_bookmark_save_dir_fn = as_bookmark_dir_fn(fn)  | 
80 | 104 |     return fn  | 
81 | 105 | 
 
  | 
82 | 106 | 
 
  | 
@@ -118,7 +142,7 @@ def restore_bookmark_dir(id: str) -> Path:  | 
118 | 142 |     --------  | 
119 | 143 |     * `~shiny.bookmark.set_global_save_dir_fn` : Set the global bookmark save directory function.  | 
120 | 144 |     """  | 
121 |  | -    global bookmark_restore_dir  | 
 | 145 | +    global _default_bookmark_restore_dir_fn  | 
122 | 146 | 
 
  | 
123 |  | -    bookmark_restore_dir = as_bookmark_dir_fn(fn)  | 
 | 147 | +    _default_bookmark_restore_dir_fn = as_bookmark_dir_fn(fn)  | 
124 | 148 |     return fn  | 
0 commit comments