kopia lustrzana https://github.com/bugout-dev/moonstream
Add interfaces response.
rodzic
0a7a5a7d99
commit
39047c8022
|
@ -302,3 +302,7 @@ class QueryInfoResponse(BaseModel):
|
||||||
class QueryCopy(BaseModel):
|
class QueryCopy(BaseModel):
|
||||||
query_id: str
|
query_id: str
|
||||||
name: str
|
name: str
|
||||||
|
|
||||||
|
class SuggestedQueriesResponse(BaseModel):
|
||||||
|
interfaces: Dict[str, Any] = Field(default_factory=dict)
|
||||||
|
queries: List[Any] = Field(default_factory=list)
|
|
@ -155,6 +155,67 @@ async def create_query_handler(
|
||||||
return entry
|
return entry
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@router.get("/templates", tags=["queries"])
|
||||||
|
def get_suggested_queries(
|
||||||
|
request: Request,
|
||||||
|
supported_interfaces: Optional[List[str]] = None,
|
||||||
|
address: Optional[str] = None,
|
||||||
|
title: Optional[str] = None,
|
||||||
|
limit: int = 10,
|
||||||
|
) -> data.SuggestedQueriesResponse:
|
||||||
|
"""
|
||||||
|
Return set of suggested queries for user
|
||||||
|
"""
|
||||||
|
|
||||||
|
filters = ["tag:approved", "tag:query_template"]
|
||||||
|
|
||||||
|
if supported_interfaces:
|
||||||
|
filters.extend(
|
||||||
|
[f"?#interface:{interface}" for interface in supported_interfaces]
|
||||||
|
)
|
||||||
|
|
||||||
|
if address:
|
||||||
|
filters.append(f"?#address:{address}")
|
||||||
|
|
||||||
|
if title:
|
||||||
|
filters.append(title)
|
||||||
|
|
||||||
|
query = " ".join(filters)
|
||||||
|
|
||||||
|
try:
|
||||||
|
queries = bc.search(
|
||||||
|
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
||||||
|
journal_id=MOONSTREAM_QUERIES_JOURNAL_ID,
|
||||||
|
query=query,
|
||||||
|
limit=100,
|
||||||
|
timeout=5,
|
||||||
|
)
|
||||||
|
except BugoutResponseException as e:
|
||||||
|
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
||||||
|
except Exception as e:
|
||||||
|
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
||||||
|
|
||||||
|
# make split by interfaces
|
||||||
|
|
||||||
|
interfaces: Dict[str, Any] = {}
|
||||||
|
|
||||||
|
for entry in queries.results:
|
||||||
|
for tag in entry.tags:
|
||||||
|
if tag.startswith("interface:"):
|
||||||
|
interface = tag.split(":")[1]
|
||||||
|
|
||||||
|
if interface not in interfaces:
|
||||||
|
interfaces[interface] = []
|
||||||
|
|
||||||
|
interfaces[interface].append(entry)
|
||||||
|
|
||||||
|
return data.SuggestedQueriesResponse(
|
||||||
|
queries=queries.results,
|
||||||
|
interfaces=interfaces,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/{query_name}/query", tags=["queries"])
|
@router.get("/{query_name}/query", tags=["queries"])
|
||||||
async def get_query_handler(
|
async def get_query_handler(
|
||||||
request: Request, query_name: str
|
request: Request, query_name: str
|
||||||
|
@ -516,63 +577,6 @@ async def remove_query_handler(
|
||||||
return entry
|
return entry
|
||||||
|
|
||||||
|
|
||||||
@router.get("/templates", tags=["queries"])
|
|
||||||
def get_suggested_queries(
|
|
||||||
request: Request,
|
|
||||||
supported_interfaces: Optional[List[str]] = None,
|
|
||||||
address: Optional[str] = None,
|
|
||||||
title: Optional[str] = None,
|
|
||||||
limit: int = 10,
|
|
||||||
) -> Any:
|
|
||||||
"""
|
|
||||||
Return set of suggested queries for user
|
|
||||||
"""
|
|
||||||
|
|
||||||
filters = ["tag:approved", "tag:query_template"]
|
|
||||||
|
|
||||||
if supported_interfaces:
|
|
||||||
filters.extend(
|
|
||||||
[f"?#interface:{interface}" for interface in supported_interfaces]
|
|
||||||
)
|
|
||||||
|
|
||||||
if address:
|
|
||||||
filters.append(f"?#address:{address}")
|
|
||||||
|
|
||||||
if title:
|
|
||||||
filters.append(title)
|
|
||||||
|
|
||||||
query = " ".join(filters)
|
|
||||||
|
|
||||||
try:
|
|
||||||
queries = bc.search(
|
|
||||||
token=MOONSTREAM_ADMIN_ACCESS_TOKEN,
|
|
||||||
journal_id=MOONSTREAM_QUERIES_JOURNAL_ID,
|
|
||||||
query=query,
|
|
||||||
limit=100,
|
|
||||||
timeout=5,
|
|
||||||
)
|
|
||||||
except BugoutResponseException as e:
|
|
||||||
raise MoonstreamHTTPException(status_code=e.status_code, detail=e.detail)
|
|
||||||
except Exception as e:
|
|
||||||
raise MoonstreamHTTPException(status_code=500, internal_error=e)
|
|
||||||
|
|
||||||
# make split by interfaces
|
|
||||||
|
|
||||||
interfaces: Dict[str, Any] = {}
|
|
||||||
|
|
||||||
for entry in queries.results:
|
|
||||||
for tag in entry.tags:
|
|
||||||
if tag.startswith("interface:"):
|
|
||||||
interface = tag.split(":")[1]
|
|
||||||
|
|
||||||
if interface not in interfaces:
|
|
||||||
interfaces[interface] = []
|
|
||||||
|
|
||||||
interfaces[interface].append(entry)
|
|
||||||
|
|
||||||
return interfaces
|
|
||||||
|
|
||||||
|
|
||||||
@router.post("/copy", tags=["queries"])
|
@router.post("/copy", tags=["queries"])
|
||||||
def copy_query(request: Request, query_copy: data.QueryCopy) -> BugoutJournalEntry:
|
def copy_query(request: Request, query_copy: data.QueryCopy) -> BugoutJournalEntry:
|
||||||
"""
|
"""
|
||||||
|
|
Ładowanie…
Reference in New Issue