Skip to content

Commit

Permalink
add basic search REST API
Browse files Browse the repository at this point in the history
  • Loading branch information
ciur committed Aug 4, 2023
1 parent 365e254 commit 06b640b
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 95 deletions.
8 changes: 6 additions & 2 deletions docker/dev/config/asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,12 @@
)

def init(app: FastAPI):
from papermerge.core.routers import register_routers
from papermerge.core.routers import \
register_routers as register_core_routes
from papermerge.search.routers import \
register_routers as register_search_routes

register_routers(app)
register_core_routes(app)
register_search_routes(app)

init(fastapp)
9 changes: 9 additions & 0 deletions papermerge/search/routers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from fastapi import FastAPI

from .search import router as search_router

__all__ = ("register_routers",)


def register_routers(app: FastAPI):
app.include_router(search_router)
24 changes: 24 additions & 0 deletions papermerge/search/routers/search.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from typing import List

from django.conf import settings
from fastapi import APIRouter
from salinic import Search, Session, create_engine

from papermerge.search.schema import IndexEntity

router = APIRouter(
prefix="/search",
tags=["search"]
)

engine = create_engine(settings.SEARCH_URL)


@router.get("/")
def search(q: str) -> List[IndexEntity]:
session = Session(engine)
sq = Search(IndexEntity).query(q)

results: List[IndexEntity] = session.exec(sq)

return results
19 changes: 10 additions & 9 deletions papermerge/search/schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from typing import Optional

from salinic.field import IdField, KeywordField, NumericField, TextField
from salinic import types
from salinic.field import IdField
from salinic.schema import Schema
from typing_extensions import Annotated

Expand All @@ -17,20 +18,20 @@ class IndexEntity(Schema):
"""
id: Annotated[str, IdField(primary_key=True)] # page id | node_id
# document ID to whom this page belongs
document_id: Annotated[Optional[str], IdField()]
document_id: Annotated[Optional[str], IdField()] = None
# ID of the document version
document_version_id: Annotated[Optional[str], IdField()]
document_version_id: Annotated[Optional[str], IdField()] = None
user_id: str
parent_id: str
title: Annotated[str, TextField()] # document or folder title
title: types.Text # document or folder title
# text is None in case folder entity
text: Annotated[Optional[str], TextField()]
entity_type: Annotated[str, KeywordField()] # Folder | Page
tags: Annotated[Optional[list[str]], KeywordField()]
text: types.OptionalText = None
entity_type: types.Keyword # Folder | Page
tags: types.OptionalKeyword = []
# None in case of folder entity
page_number: Annotated[Optional[int], NumericField()]
page_number: types.OptionalNumeric = None
# None in case of folder entity
page_count: Annotated[Optional[int], NumericField()]
page_count: types.OptionalNumeric = None

def __str__(self):
return f'IndexEntity(id={self.id}, title={self.title}, '\
Expand Down
Loading

0 comments on commit 06b640b

Please sign in to comment.