Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

remove child links (collections) in landing page response #798

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

vincentsarago
Copy link
Member

closes #797

Comment on lines -418 to -430
# Add Collections links
collections = self.all_collections(request=kwargs["request"])

for collection in collections["collections"]:
landing_page["links"].append(
{
"rel": Relations.child.value,
"type": MimeTypes.json.value,
"title": collection.get("title") or collection.get("id"),
"href": urljoin(base_url, f"collections/{collection['id']}"),
}
)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How much extra complexity does it add to make this configurable? Smaller catalogs might want to keep these links — I know that I like seeing them when I hit an unfamiliar API, since the /collections endpoint can be kinda huge.

Copy link
Member Author

@vincentsarago vincentsarago Feb 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what we could do is to not show the collections if the collection-search extension is enables 🤷‍♂️

with the assumption that smaller catalog do not need collection-search 😅

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I should also point out that removing the all_collections call makes it easier to customize the all_collections method https://github.com/developmentseed/eoapi-devseed/pull/17/files#diff-035276bc260c2e34aa0886659327fe1950d424a2342a58879aa180f4e62e4d77R210-R223

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a user, those two things aren't obviously related — that feels like a pgstac implementation detail leaking into this general API framework library?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

with the assumption that smaller catalog do not need collection-search 😅

That's a fair point. I think as long as it was documented it'd make sense.

Copy link
Contributor

@m-mohr m-mohr Feb 6, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The childs added to the landing page is kinda inconsistent anyway, or does the implementation also add all the item links to the collections, too? As the latter is not done (for good reasons), the former should also not be done by default, I think. It's a somewhat weird mix of API and static for an unknown usecase ;-) Ideally it's configurable though.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that feels like a pgstac implementation detail leaking into this general API framework library?

I agree but at the same time if your catalog is big (whatever your backend) the landing page will have way too much link.

I feel will be really easy to customize your client to add back the links if you want them

import attr
from fastapi import Request
from stac_fastapi.pgstac.core import CoreCrudClient
from stac_fastapi.types.stac import LandingPage

@attr.s
class CustomClient(CoreCrudClient):

    async def landing_page(
        self,
        request: Request,
        **kwargs,
    ) -> LandingPage:
        landing_page = super().landing_page(request, **kwargs)

        collections = self.all_collections(request=kwargs["request"])

        for collection in collections["collections"]:
            landing_page["links"].append(
                {
                    "rel": Relations.child.value,
                    "type": MimeTypes.json.value,
                    "title": collection.get("title") or collection.get("id"),
                    "href": urljoin(base_url, f"collections/{collection['id']}"),
                }
            )

        return landing_page

While if we keep it like it is right now, to remove the call to the all_collections() method, implementer need to re-write the whole method 🤷

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so I'm not sure what we should do ...

IMO

  • make it configurable will add complexity to stac-fastapi
  • removing it enable customization of the all_collections method
  • keep it as it is now can be annoying for large catalog

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

removing it enable customization of the all_collections method

👍🏼

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Proposal] Remove Child links (collections) in Landing page
3 participants