Example #1
0
    def set_root(self, root, link_type=None):
        """Sets the root :class:`~pystac.Catalog` or :class:`~pystac.Collection`
        for this object.

        Args:
            root (Catalog, Collection or None): The root
                object to set. Passing in None will clear the root.
            link_type (str): The link type (see :class:`~pystac.LinkType`)
        """
        # Remove from old root resolution cache
        root_link = self.get_root_link()
        if root_link is not None:
            if root_link.is_resolved():
                root_link.target._resolved_objects.remove(self)

        if not link_type:
            prev = self.get_single_link('root')
            if prev is not None:
                link_type = prev.link_type
            else:
                link_type = LinkType.ABSOLUTE

        self.remove_links('root')
        if root is not None:
            self.add_link(Link.root(root, link_type=link_type))
            root._resolved_objects.cache(self)
        return self
Example #2
0
    def __init__(
        self,
        id: str,
        description: str,
        title: Optional[str] = None,
        stac_extensions: Optional[List[str]] = None,
        extra_fields: Optional[Dict[str, Any]] = None,
        href: Optional[str] = None,
        catalog_type: CatalogType = CatalogType.ABSOLUTE_PUBLISHED,
    ):
        super().__init__(stac_extensions or [])

        self.id = id
        self.description = description
        self.title = title
        if extra_fields is None:
            self.extra_fields = {}
        else:
            self.extra_fields = extra_fields

        self._resolved_objects = ResolvedObjectCache()

        self.add_link(Link.root(self))

        if href is not None:
            self.set_self_href(href)

        self.catalog_type: CatalogType = catalog_type

        self._resolved_objects.cache(self)
Example #3
0
    def __init__(self,
                 id,
                 description,
                 title=None,
                 stac_extensions=None,
                 extra_fields=None,
                 href=None,
                 catalog_type=None):
        super().__init__(stac_extensions)

        self.id = id
        self.description = description
        self.title = title
        if extra_fields is None:
            self.extra_fields = {}
        else:
            self.extra_fields = extra_fields

        self._resolved_objects = ResolvedObjectCache()

        self.add_link(Link.root(self))

        if href is not None:
            self.set_self_href(href)

        self.catalog_type = catalog_type

        self._resolved_objects.cache(self)
Example #4
0
    def set_root(self, root: Optional["Catalog_Type"]) -> None:
        """Sets the root :class:`~pystac.Catalog` or :class:`~pystac.Collection`
        for this object.

        Args:
            root : The root
                object to set. Passing in None will clear the root.
        """
        root_link_index = next(
            iter([
                i for i, link in enumerate(self.links)
                if link.rel == pystac.RelType.ROOT
            ]),
            None,
        )

        # Remove from old root resolution cache
        if root_link_index is not None:
            root_link = self.links[root_link_index]
            if root_link.is_resolved():
                cast(pystac.Catalog,
                     root_link.target)._resolved_objects.remove(self)

        if root is None:
            self.remove_links(pystac.RelType.ROOT)
        else:
            new_root_link = Link.root(root)
            if root_link_index is not None:
                self.links[root_link_index] = new_root_link
                new_root_link.set_owner(self)
            else:
                self.add_link(new_root_link)
            root._resolved_objects.cache(self)
Example #5
0
    def __init__(self, id, description, title=None, href=None):
        self.id = id
        self.description = description
        self.title = title
        self.links = [Link.root(self)]

        if href is not None:
            self.set_self_href(href)

        self._resolved_objects = ResolvedObjectCache()
Example #6
0
    def __init__(self, id, description, title=None, stac_extensions=None, href=None):
        self.id = id
        self.description = description
        self.title = title
        self.stac_extensions = stac_extensions
        self.links = []
        self.add_link(Link.root(self))

        if href is not None:
            self.set_self_href(href)

        self._resolved_objects = ResolvedObjectCache()
        self._resolved_objects.cache(self)
Example #7
0
    def set_root(self, root, link_type=None):
        """Sets the root :class:`~pystac.Catalog` or :class:`~pystac.Collection`
        for this object.

        Args:
            root (Catalog or Collection): The root
                object to set.
            link_type (str): The link type (see :class:`~pystac.LinkType`)
        """
        if not link_type:
            prev = self.get_single_link('root')
            if prev is not None:
                link_type = prev.link_type
            else:
                link_type = LinkType.ABSOLUTE
        self.remove_links('root')
        self.add_link(Link.root(root, link_type=link_type))
        return self
Example #8
0
    def set_root(self, root, link_type=None):
        """Sets the root :class:`~pystac.Catalog` or :class:`~pystac.Collection`
        for this object.

        Args:
            root (Catalog, Collection or None): The root
                object to set. Passing in None will clear the root.
            link_type (str): The link type (see :class:`~pystac.LinkType`)
        """
        root_link_index = next(
            iter([
                i for i, link in enumerate(self.links) if link.rel == 'root'
            ]), None)

        # Remove from old root resolution cache
        if root_link_index is not None:
            root_link = self.links[root_link_index]
            if root_link.is_resolved():
                root_link.target._resolved_objects.remove(self)

            if link_type is None:
                link_type = root_link.link_type

        if link_type is None:
            link_type = LinkType.ABSOLUTE

        if root is None:
            self.remove_links('root')
        else:
            new_root_link = Link.root(root, link_type=link_type)
            if root_link_index is not None:
                self.links[root_link_index] = new_root_link
                new_root_link.set_owner(self)
            else:
                self.add_link(new_root_link)
            root._resolved_objects.cache(self)

        return self
Example #9
0
 def set_root(self, root):
     self.links = [l for l in self.links if l.rel != 'root']
     self.links.append(Link.root(root))