@@ -129,47 +129,46 @@ def series_from(self, item: pystac.Item) -> pd.Series:
129129 item_dict = item .to_dict ()
130130 item_id = item_dict ["id" ]
131131
132- return pd . Series (item_dict ["properties" ], name = item_id )
132+ props = dict (item_dict ["properties" ])
133133
134+ if "item_id" in props :
135+ props ["item_id" ] = item_id
136+
137+ return pd .Series (props , name = item_id )
138+
134139 def item_from (self , series : pd .Series ) -> pystac .Item :
135140 """
136141 Convert a pandas.Series to a STAC Item.
137-
142+
138143 :param series: pandas.Series to be converted.
139- :param geometry_name: Name of the geometry column in the series.
140144 :return: pystac.Item
141145 """
142146 series_dict = series .to_dict ()
143147 item_id = str (series .name )
148+
149+ # Handle legacy item_id in properties
144150 series_dict .pop ("item_id" , None )
145- item_dict = {}
146- item_dict .setdefault ("stac_version" , pystac .get_stac_version ())
147- item_dict .setdefault ("type" , "Feature" )
148- item_dict .setdefault ("assets" , {})
149- item_dict .setdefault ("links" , [])
150- item_dict .setdefault ("properties" , series_dict )
151-
152- dt = series_dict .get ("datetime" , None )
153- if dt and item_dict ["properties" ].get ("datetime" , None ) is None :
154- dt_str = pystac .utils .datetime_to_str (dt ) if isinstance (dt , datetime .datetime ) else dt
155- item_dict ["properties" ]["datetime" ] = dt_str
156-
157- else :
151+
152+ item_dict = {
153+ "type" : "Feature" ,
154+ "stac_version" : pystac .get_stac_version (),
155+ "id" : item_id ,
156+ "properties" : series_dict ,
157+ "geometry" : series [self .geometry_column ] if self .has_geometry else None ,
158+ "links" : [],
159+ "assets" : {}
160+ }
161+
162+ # Handle datetime
163+ dt = series_dict .get ("datetime" )
164+ if not dt :
158165 item_dict ["properties" ]["datetime" ] = pystac .utils .datetime_to_str (datetime .datetime .now ())
159-
160- if self .has_geometry :
161- item_dict ["geometry" ] = series [self .geometry_column ]
162- else :
163- item_dict ["geometry" ] = None
164-
165- # from_dict handles associating any Links and Assets with the Item
166- item_dict ["id" ] = item_id
166+
167167 item = pystac .Item .from_dict (item_dict )
168168 if self .has_geometry :
169169 item .bbox = shape (series [self .geometry_column ]).bounds
170- else :
171- item .bbox = None
172170 return item
171+
173172
174173 def count_by_status (self , statuses : Iterable [str ] = ()) -> dict :
175174 if isinstance (statuses , str ):
0 commit comments