def from_dict( cls, d: Dict[str, Any], href: Optional[str] = None, root: Optional[Catalog] = None, migrate: bool = False, preserve_dict: bool = True, ) -> "Item": if migrate: info = identify_stac_object(d) d = migrate_to_latest(d, info) if not cls.matches_object_type(d): raise pystac.STACTypeError( f"{d} does not represent a {cls.__name__} instance") if preserve_dict: d = deepcopy(d) id = d.pop("id") geometry = d.pop("geometry") properties = d.pop("properties") bbox = d.pop("bbox", None) stac_extensions = d.get("stac_extensions") collection_id = d.pop("collection", None) datetime = properties.get("datetime") if datetime is not None: datetime = str_to_datetime(datetime) links = d.pop("links") assets = d.pop("assets") d.pop("type") d.pop("stac_version") item = cls( id=id, geometry=geometry, bbox=bbox, datetime=datetime, properties=properties, stac_extensions=stac_extensions, collection=collection_id, extra_fields=d, assets={k: Asset.from_dict(v) for k, v in assets.items()}, ) has_self_link = False for link in links: has_self_link |= link["rel"] == pystac.RelType.SELF item.add_link(Link.from_dict(link)) if not has_self_link and href is not None: item.add_link(Link.self_href(href)) if root: item.set_root(root) return item
def from_dict(cls, d, href=None, root=None): d = deepcopy(d) id = d.pop('id') description = d.pop('description') title = d.pop('title', None) stac_extensions = d.pop('stac_extensions', None) links = d.pop('links') d.pop('stac_version') cat = Catalog(id=id, description=description, title=title, stac_extensions=stac_extensions, extra_fields=d) has_self_link = False for link in links: has_self_link |= link['rel'] == 'self' if link['rel'] == 'root': # Remove the link that's generated in Catalog's constructor. cat.remove_links('root') cat.add_link(Link.from_dict(link)) if not has_self_link and href is not None: cat.add_link(Link.self_href(href)) return cat
def set_self_href(self, href): """Sets the absolute HREF that is represented by the ``rel == 'self'`` :class:`~pystac.Link`. Args: str: The absolute HREF of this object. If the given HREF is not absolute, it will be transformed to an absolute HREF based on the current working directory. """ self.remove_links('self') self.add_link(Link.self_href(href)) return self
def from_dict(cls, d, href=None, root=None): d = deepcopy(d) id = d.pop('id') description = d.pop('description') license = d.pop('license') extent = Extent.from_dict(d.pop('extent')) title = d.get('title') stac_extensions = d.get('stac_extensions') keywords = d.get('keywords') providers = d.get('providers') if providers is not None: providers = list(map(lambda x: Provider.from_dict(x), providers)) properties = d.get('properties') summaries = d.get('summaries') links = d.pop('links') d.pop('stac_version') collection = Collection(id=id, description=description, extent=extent, title=title, stac_extensions=stac_extensions, extra_fields=d, license=license, keywords=keywords, providers=providers, properties=properties, summaries=summaries) has_self_link = False for link in links: has_self_link |= link['rel'] == 'self' if link['rel'] == 'root': # Remove the link that's generated in Catalog's constructor. collection.remove_links('root') collection.add_link(Link.from_dict(link)) if not has_self_link and href is not None: collection.add_link(Link.self_href(href)) return collection
def from_dict(cls, d, href=None, root=None): id = d['id'] description = d['description'] title = d.get('title') cat = Catalog(id=id, description=description, title=title) has_self_link = False for link in d['links']: has_self_link |= link['rel'] == 'self' if link['rel'] == 'root': # Remove the link that's generated in Catalog's constructor. cat.remove_links('root') cat.add_link(Link.from_dict(link)) if not has_self_link and href is not None: cat.add_link(Link.self_href(href)) return cat
def from_dict(cls, d, href=None, root=None): d = deepcopy(d) id = d.pop('id') geometry = d.pop('geometry') properties = d.pop('properties') bbox = d.pop('bbox', None) stac_extensions = d.get('stac_extensions') collection_id = d.pop('collection', None) datetime = properties.get('datetime') if datetime is not None: datetime = dateutil.parser.parse(datetime) links = d.pop('links') assets = d.pop('assets') d.pop('type') d.pop('stac_version') item = Item(id=id, geometry=geometry, bbox=bbox, datetime=datetime, properties=properties, stac_extensions=stac_extensions, collection=collection_id, extra_fields=d) has_self_link = False for link in links: has_self_link |= link['rel'] == 'self' item.add_link(Link.from_dict(link)) if not has_self_link and href is not None: item.add_link(Link.self_href(href)) for k, v in assets.items(): asset = Asset.from_dict(v) asset.set_owner(item) item.assets[k] = asset return item
def set_self_href(self, href): """Sets the absolute HREF that is represented by the ``rel == 'self'`` :class:`~pystac.Link`. Args: href (str): The absolute HREF of this object. If the given HREF is not absolute, it will be transformed to an absolute HREF based on the current working directory. If this is None the call will clear the self HREF link. """ root_link = self.get_root_link() if root_link is not None and root_link.is_resolved(): root_link.target._resolved_objects.remove(self) self.remove_links('self') if href is not None: self.add_link(Link.self_href(href)) if root_link is not None and root_link.is_resolved(): root_link.target._resolved_objects.cache(self) return self
def from_dict(cls, d, href=None, root=None): id = d['id'] geometry = d['geometry'] bbox = d['bbox'] properties = d['properties'] stac_extensions = d.get('stac_extensions') collection_id = None if 'collection' in d.keys(): collection_id = d['collection'] datetime = properties.get('datetime') if datetime is None: raise STACError( 'Item dict is missing a "datetime" property in the "properties" field' ) datetime = dateutil.parser.parse(datetime) item = Item(id=id, geometry=geometry, bbox=bbox, datetime=datetime, properties=properties, stac_extensions=stac_extensions, collection=collection_id) has_self_link = False for link in d['links']: has_self_link |= link['rel'] == 'self' item.add_link(Link.from_dict(link)) if not has_self_link and href is not None: item.add_link(Link.self_href(href)) for k, v in d['assets'].items(): asset = Asset.from_dict(v) asset.set_owner(item) item.assets[k] = asset return item
def set_self_href(self, href): self.links = [l for l in self.links if l.rel != 'self'] self.links.append(Link.self_href(href))