-
Notifications
You must be signed in to change notification settings - Fork 106
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
base: main
Are you sure you want to change the base?
Conversation
# 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']}"), | ||
} | ||
) | ||
|
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 😅
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 🤷
There was a problem hiding this comment.
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
There was a problem hiding this comment.
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
👍🏼
closes #797