|
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