🔧 fix(store.py): flatten the tags in the list_components response to match the schema
🔧 fix(store.py): add user_created.id field to the list_components response to match the schema 🔧 fix(store.py): add count(downloads) field to the list_components response to match the schema 🔧 fix(store.py): add tags_id field to the TagsIdResponse schema to match the response structure 🔧 fix(service.py): add user_created.first_name and user_created.id fields to the list_components query to match the schema 🔧 fix(service.py): add count(downloads) field to the list_components query to match the schema
This commit is contained in:
parent
d0f121e662
commit
654a1de6c6
3 changed files with 33 additions and 2 deletions
|
|
@ -79,10 +79,12 @@ def list_components(
|
||||||
"name",
|
"name",
|
||||||
"description",
|
"description",
|
||||||
"user_created.first_name",
|
"user_created.first_name",
|
||||||
|
"user_created.id",
|
||||||
"is_component",
|
"is_component",
|
||||||
"tags.tags_id.name",
|
"tags.tags_id.name",
|
||||||
"tags.tags_id.id",
|
"tags.tags_id.id",
|
||||||
"count(liked_by)",
|
"count(liked_by)",
|
||||||
|
"count(downloads)",
|
||||||
"metadata",
|
"metadata",
|
||||||
]
|
]
|
||||||
result = store_service.query_components(
|
result = store_service.query_components(
|
||||||
|
|
@ -92,6 +94,9 @@ def list_components(
|
||||||
fields=fields,
|
fields=fields,
|
||||||
filter_by_user=filter_by_user,
|
filter_by_user=filter_by_user,
|
||||||
)
|
)
|
||||||
|
# tags comes as "tags" : [{"tags_id": {"name": "tag1", "id": 1}}]
|
||||||
|
# so we need to flatten it
|
||||||
|
|
||||||
return result
|
return result
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
raise HTTPException(status_code=400, detail=str(exc))
|
raise HTTPException(status_code=400, detail=str(exc))
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,10 @@ class ComponentResponse(BaseModel):
|
||||||
metadata: Optional[dict]
|
metadata: Optional[dict]
|
||||||
|
|
||||||
|
|
||||||
|
class TagsIdResponse(BaseModel):
|
||||||
|
tags_id: Optional[TagResponse]
|
||||||
|
|
||||||
|
|
||||||
class ListComponentResponse(BaseModel):
|
class ListComponentResponse(BaseModel):
|
||||||
id: UUID
|
id: UUID
|
||||||
name: Optional[str]
|
name: Optional[str]
|
||||||
|
|
@ -39,6 +43,8 @@ class ListComponentResponse(BaseModel):
|
||||||
liked_by_count: Optional[int]
|
liked_by_count: Optional[int]
|
||||||
is_component: Optional[bool]
|
is_component: Optional[bool]
|
||||||
metadata: Optional[dict]
|
metadata: Optional[dict]
|
||||||
|
user_created: Optional[dict]
|
||||||
|
tags: Optional[List[TagsIdResponse]] = None
|
||||||
|
|
||||||
|
|
||||||
class DownloadComponentResponse(BaseModel):
|
class DownloadComponentResponse(BaseModel):
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import json
|
import json
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
from bs4 import Tag
|
||||||
from langflow.services.base import Service
|
from langflow.services.base import Service
|
||||||
from typing import TYPE_CHECKING, List, Dict, Any, Optional, Union
|
from typing import TYPE_CHECKING, List, Dict, Any, Optional, Union
|
||||||
import httpx
|
import httpx
|
||||||
|
|
@ -11,6 +12,7 @@ from langflow.services.store.schema import (
|
||||||
DownloadComponentResponse,
|
DownloadComponentResponse,
|
||||||
ListComponentResponse,
|
ListComponentResponse,
|
||||||
StoreComponentCreate,
|
StoreComponentCreate,
|
||||||
|
TagResponse,
|
||||||
)
|
)
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|
@ -152,7 +154,19 @@ class StoreService(Service):
|
||||||
",".join(fields)
|
",".join(fields)
|
||||||
if fields
|
if fields
|
||||||
else ",".join(
|
else ",".join(
|
||||||
["id", "name", "description", "count(liked_by)", "is_component"]
|
[
|
||||||
|
"id",
|
||||||
|
"name",
|
||||||
|
"description",
|
||||||
|
"user_created.first_name",
|
||||||
|
"user_created.id",
|
||||||
|
"is_component",
|
||||||
|
"tags.tags_id.name",
|
||||||
|
"tags.tags_id.id",
|
||||||
|
"count(liked_by)",
|
||||||
|
"count(downloads)",
|
||||||
|
"metadata",
|
||||||
|
]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
# Only public components or the ones created by the user
|
# Only public components or the ones created by the user
|
||||||
|
|
@ -174,6 +188,7 @@ class StoreService(Service):
|
||||||
"tags.tags_id.name",
|
"tags.tags_id.name",
|
||||||
"tags.tags_id.id",
|
"tags.tags_id.id",
|
||||||
"count(liked_by)",
|
"count(liked_by)",
|
||||||
|
"count(downloads)",
|
||||||
"metadata",
|
"metadata",
|
||||||
]
|
]
|
||||||
else:
|
else:
|
||||||
|
|
@ -182,7 +197,12 @@ class StoreService(Service):
|
||||||
)
|
)
|
||||||
|
|
||||||
results = self._get(self.components_url, api_key, params)
|
results = self._get(self.components_url, api_key, params)
|
||||||
return [ListComponentResponse(**component) for component in results]
|
results_objects = [ListComponentResponse(**component) for component in results]
|
||||||
|
# Flatten the tags
|
||||||
|
for component in results_objects:
|
||||||
|
if component.tags:
|
||||||
|
component.tags = [tags_id.tags_id for tags_id in component.tags]
|
||||||
|
return results_objects
|
||||||
|
|
||||||
def download(self, api_key: str, component_id: str) -> DownloadComponentResponse:
|
def download(self, api_key: str, component_id: str) -> DownloadComponentResponse:
|
||||||
url = f"{self.components_url}/{component_id}"
|
url = f"{self.components_url}/{component_id}"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue