def collection(self) -> Link:
     """Create the `collection` link."""
     return Link(
         rel=Relations.collection,
         type=MimeTypes.json,
         href=urljoin(self.base_url, f"/collections/{self.collection_id}"),
     )
def test_api_paging_extension():
    item_collection = request(ITEM_COLLECTION)
    item_collection["stac_version"] = STAC_VERSION
    for feat in item_collection["features"]:
        feat["stac_version"] = STAC_VERSION
    item_collection["links"] += [
        {
            "title": "next page",
            "rel": "next",
            "method": "GET",
            "href": "http://next"
        },
        {
            "title": "previous page",
            "rel": "previous",
            "method": "POST",
            "href": "http://prev",
            "body": {
                "key": "value"
            },
        },
    ]
    model = ItemCollection(**item_collection)
    links = model.to_dict()["links"]

    # Make sure we can mix links and pagination links
    normal_link = Link(**links[0])
    assert normal_link.rel == "self"
    next_link = PaginationLink(**links[1])
    assert next_link.rel == "next"
    previous_link = PaginationLink(**links[2])
    assert previous_link.rel == "previous"
    assert previous_link.body == {"key": "value"}
 def item(self) -> Link:
     """Create the `item` link."""
     return Link(
         rel=Relations.item,
         type=MimeTypes.geojson,
         href=urljoin(self.base_url, f"/collections/{self.collection_id}/items"),
     )
def test_api_landing_page():
    LandingPage(
        id="test-landing-page",
        description="stac-api landing page",
        stac_extensions=["eo", "proj"],
        links=[Link(
            href="http://link",
            rel="self",
        )],
    )
def test_resolve_pagination_link():
    normal_link = Link(href="/hello/world", type="image/jpeg", rel="test")
    page_link = PaginationLink(href="/next/page",
                               type="image/jpeg",
                               method="POST",
                               rel="next")
    links = Links.parse_obj([normal_link, page_link])
    links.resolve(base_url="http://base_url.com")
    for link in links:
        if isinstance(link, PaginationLink):
            assert link.href == "http://base_url.com/next/page"
def test_api_landing_page_is_catalog():
    landing_page = LandingPage(
        id="test-landing-page",
        description="stac-api landing page",
        stac_extensions=["eo", "proj"],
        links=[Link(
            href="http://link",
            rel="self",
        )],
    )
    catalog = Catalog(**landing_page.dict())
 def another_link(self) -> Link:
     return Link(
         rel="another-link",
         type="application/json",
         href=urljoin(self.base_url, "/another-link"),
     )
def test_resolve_links():
    links = Links.parse_obj(
        [Link(href="/hello/world", type="image/jpeg", rel="test")])
    links.resolve(base_url="http://base_url.com")
    for link in links:
        assert link.href == "http://base_url.com/hello/world"
def test_resolve_link():
    link = Link(href="/hello/world", type="image/jpeg", rel="test")
    link.resolve(base_url="http://base_url.com")
    assert link.href == "http://base_url.com/hello/world"
 def parent(self) -> Link:
     """Create the `parent` link."""
     return Link(
         rel=Relations.parent, type=MimeTypes.json, href=urljoin(self.base_url, "/")
     )
 def root(self) -> Link:
     """Return the catalog root."""
     return Link(
         rel=Relations.root, type=MimeTypes.json, href=urljoin(self.base_url, "/")
     )