11import tempfile
22import os
3+ import warnings
4+ from typing import List
35from .vetiver_model import VetiverModel
46from .meta import VetiverMeta
57
68
79def load_pkgs (model : VetiverModel = None , packages : list = None , path = "" ):
810 """Load packages necessary for predictions
911
10- Args
11- ----
12- model: VetiverModel
13- VetiverModel to extract packages from
14- packages: list
15- List of extra packages to include
16- path: str
17- Where to save output file
12+ Parameters
13+ ----------
14+ model: VetiverModel
15+ VetiverModel to extract packages from
16+ packages: list
17+ List of extra packages to include
18+ path: str
19+ Where to save output file
1820 """
1921
2022 required_pkgs = ["vetiver" ]
2123 if packages :
22- required_pkgs = list ( set ( required_pkgs + packages ))
24+ required_pkgs += packages
2325
2426 if isinstance (model .metadata , dict ):
2527 model .metadata = VetiverMeta .from_dict (model .metadata )
2628
2729 if model .metadata .required_pkgs :
28- required_pkgs = list ( set ( required_pkgs + model .metadata .required_pkgs ))
30+ required_pkgs += model .metadata .required_pkgs
2931
3032 tmp = tempfile .NamedTemporaryFile (suffix = ".in" , delete = False )
3133 tmp .close ()
@@ -36,3 +38,37 @@ def load_pkgs(model: VetiverModel = None, packages: list = None, path=""):
3638
3739 os .system (f"pip-compile { tmp .name } --output-file={ path } requirements.txt" )
3840 os .remove (tmp .name )
41+
42+
43+ def get_board_pkgs (board ) -> List [str ]:
44+ """
45+ Extract packages required for pin board authorization
46+
47+ Parameters
48+ ----------
49+ board:
50+ A pin board, created by `pins.board_folder()` or another `board_` function.
51+
52+ Returns
53+ --------
54+ list[str]
55+ """
56+ prot = board .fs .protocol
57+
58+ if prot == "rsc" :
59+ return ["rsconnect-python" ]
60+ elif prot == "file" :
61+ return []
62+ elif prot == ["s3" , "s3a" ]:
63+ return ["s3fs" ]
64+ elif prot == "abfs" :
65+ return ["adlfs" ]
66+ elif prot == ("gcs" , "gs" ):
67+ return ["gcsfs" ]
68+ else :
69+ warnings .warn (
70+ f"required packages unknown for board protocol: { prot } , "
71+ "add to model's metadata to export" ,
72+ UserWarning ,
73+ )
74+ return []
0 commit comments