@@ -57,6 +57,9 @@ class Meta:
5757 TODO - where is this in R pins?
5858 user:
5959 A dictionary of additional metadata that may be specified by the user.
60+ local:
61+ A dictionary of additional metadata that may be added by the board, depending
62+ on the backend used. E.g. RStudio Connect content id, url, etc..
6063
6164 """
6265
@@ -81,6 +84,7 @@ class Meta:
8184
8285 name : Optional [str ] = None
8386 user : Mapping = field (default_factory = dict )
87+ local : Mapping = field (default_factory = dict )
8488
8589 def to_dict (self ) -> Mapping :
8690 data = asdict (self )
@@ -89,18 +93,22 @@ def to_dict(self) -> Mapping:
8993
9094 def to_pin_dict (self ):
9195 d = self .to_dict ()
96+
9297 del d ["name" ]
9398 del d ["version" ]
99+ del d ["local" ]
100+
94101 return d
95102
96103 @classmethod
97- def from_pin_dict (cls , data , pin_name , version ) -> "Meta" :
104+ def from_pin_dict (cls , data , pin_name , version , local = None ) -> "Meta" :
98105
99106 # TODO: re-arrange Meta argument positions to reflect what's been
100107 # learned about default arguments. e.g. title was not used at some
101108 # point in api_version 1
102109 extra = {"title" : None } if "title" not in data else {}
103- return cls (** data , ** extra , name = pin_name , version = version )
110+ local = {} if local is None else local
111+ return cls (** data , ** extra , name = pin_name , version = version , local = local )
104112
105113 def to_pin_yaml (self , f : Optional [IOBase ] = None ) -> "str | None" :
106114 data = self .to_pin_dict ()
@@ -121,6 +129,7 @@ class MetaV0:
121129 # holds raw data.txt contents
122130 original_fields : dict = field (default_factory = dict )
123131 user : dict = field (default_factory = dict , init = False )
132+ local : Mapping = field (default_factory = dict )
124133
125134 title : ClassVar [None ] = None
126135 created : ClassVar [None ] = None
@@ -132,15 +141,22 @@ def to_dict(self):
132141 return asdict (self )
133142
134143 @classmethod
135- def from_pin_dict (cls , data , pin_name , version ) -> "MetaV0" :
144+ def from_pin_dict (cls , data , pin_name , version , local = None ) -> "MetaV0" :
136145 # could infer from dataclasses.fields(), but seems excessive.
137146 req_fields = {"type" , "description" }
138147
139148 # Note that we need to .get(), since fields may not be in metadata
140149 req_inputs = {k : data .get (k ) for k in req_fields }
141150 req_inputs ["file" ] = data ["path" ]
142151
143- return cls (** req_inputs , name = pin_name , original_fields = data , version = version )
152+ local = {} if local is None else local
153+ return cls (
154+ ** req_inputs ,
155+ name = pin_name ,
156+ original_fields = data ,
157+ version = version ,
158+ local = local ,
159+ )
144160
145161 def to_pin_dict (self ):
146162 raise NotImplementedError ("v0 pins metadata are read only." )
@@ -216,7 +232,11 @@ def create_raw(self, files: Sequence[StrOrFile], type: str, name: str) -> MetaRa
216232 return MetaRaw (files , type , name )
217233
218234 def read_pin_yaml (
219- self , f : IOBase , pin_name : str , version : "str | VersionRaw"
235+ self ,
236+ f : IOBase ,
237+ pin_name : str ,
238+ version : "str | VersionRaw" ,
239+ local = None ,
220240 ) -> Meta :
221241 if isinstance (version , str ):
222242 version_obj = guess_version (version )
@@ -235,4 +255,4 @@ def read_pin_yaml(
235255 else :
236256 cls_meta = Meta
237257
238- return cls_meta .from_pin_dict (data , pin_name , version = version_obj )
258+ return cls_meta .from_pin_dict (data , pin_name , version = version_obj , local = local )
0 commit comments