mirror of
https://github.com/onyx-dot-app/onyx.git
synced 2026-10-23 11:53:08 -05:00
* first cut at redis * some new helper functions for the db * ignore kombu tables in alembic migrations (used by celery) * multiline commands for readability, add vespa_metadata_sync queue to worker * typo fix * fix returning tuple fields * add constants * fix _get_access_for_document * docstrings! * fix double function declaration and typing * fix type hinting * add a global redis pool * Add get_document function * use task_logger in various celery tasks * add celeryconfig.py to simplify configuration. Will be used in a subsequent commit * Add celery redis helper. used in a subsequent PR * kombu warning getting spammy since celery is not self managing its queue in Postgres any more * add last_modified and last_synced to documents * fix task naming convention * use celeryconfig.py * the big one. adds queues and tasks, updates functions to use the queues with priorities, etc * change vespa index log line to debug * mypy fixes * update alembic migration * fix fence ordering, rename to "monitor", fix fetch_versioned_implementation call * mypy * switch to monotonic time * fix startup dependencies on redis * rebase alembic migration * kombu cleanup - fail silently * mypy * add redis_host environment override * update REDIS_HOST env var in docker-compose.dev.yml * update the rest of the docker files * harden indexing-status endpoint against db changes happening in the background. Needs further improvement but OK for now. * allow no task syncs to run because we create certain objects with no entries but initially marked as out of date * add back writing to vespa on indexing * update contributing guide * backporting fixes from background_deletion * renaming cache to cache_volume * add redis password to various deployments * try setting up pr testing for helm * fix indent * hopefully this release version actually exists * fix command line option to --chart-dirs * fetch-depth 0 * edit values.yaml * try setting ct working directory * bypass testing only on change for now * move files and lint them * update helm testing * some issues suggest using --config works * add vespa repo * add postgresql repo * increase timeout * try amd64 runner * fix redis password reference * add comment to helm chart testing workflow * rename helm testing workflow to disable it * adding clarifying comments * address code review * missed a file * remove commented warning ... just not needed --------- Co-authored-by: Richard Kuo <rkuo@rkuo.com>
82 lines
2.7 KiB
Python
82 lines
2.7 KiB
Python
from sqlalchemy.orm import Session
|
|
|
|
from danswer.access.models import DocumentAccess
|
|
from danswer.access.utils import prefix_user
|
|
from danswer.configs.constants import PUBLIC_DOC_PAT
|
|
from danswer.db.document import get_access_info_for_document
|
|
from danswer.db.document import get_access_info_for_documents
|
|
from danswer.db.models import User
|
|
from danswer.utils.variable_functionality import fetch_versioned_implementation
|
|
|
|
|
|
def _get_access_for_document(
|
|
document_id: str,
|
|
db_session: Session,
|
|
) -> DocumentAccess:
|
|
info = get_access_info_for_document(
|
|
db_session=db_session,
|
|
document_id=document_id,
|
|
)
|
|
|
|
if not info:
|
|
return DocumentAccess.build(user_ids=[], user_groups=[], is_public=False)
|
|
|
|
return DocumentAccess.build(user_ids=info[1], user_groups=[], is_public=info[2])
|
|
|
|
|
|
def get_access_for_document(
|
|
document_id: str,
|
|
db_session: Session,
|
|
) -> DocumentAccess:
|
|
versioned_get_access_for_document_fn = fetch_versioned_implementation(
|
|
"danswer.access.access", "_get_access_for_document"
|
|
)
|
|
return versioned_get_access_for_document_fn(document_id, db_session) # type: ignore
|
|
|
|
|
|
def _get_access_for_documents(
|
|
document_ids: list[str],
|
|
db_session: Session,
|
|
) -> dict[str, DocumentAccess]:
|
|
document_access_info = get_access_info_for_documents(
|
|
db_session=db_session,
|
|
document_ids=document_ids,
|
|
)
|
|
return {
|
|
document_id: DocumentAccess.build(
|
|
user_ids=user_ids, user_groups=[], is_public=is_public
|
|
)
|
|
for document_id, user_ids, is_public in document_access_info
|
|
}
|
|
|
|
|
|
def get_access_for_documents(
|
|
document_ids: list[str],
|
|
db_session: Session,
|
|
) -> dict[str, DocumentAccess]:
|
|
"""Fetches all access information for the given documents."""
|
|
versioned_get_access_for_documents_fn = fetch_versioned_implementation(
|
|
"danswer.access.access", "_get_access_for_documents"
|
|
)
|
|
return versioned_get_access_for_documents_fn(
|
|
document_ids, db_session
|
|
) # type: ignore
|
|
|
|
|
|
def _get_acl_for_user(user: User | None, db_session: Session) -> set[str]:
|
|
"""Returns a list of ACL entries that the user has access to. This is meant to be
|
|
used downstream to filter out documents that the user does not have access to. The
|
|
user should have access to a document if at least one entry in the document's ACL
|
|
matches one entry in the returned set.
|
|
"""
|
|
if user:
|
|
return {prefix_user(str(user.id)), PUBLIC_DOC_PAT}
|
|
return {PUBLIC_DOC_PAT}
|
|
|
|
|
|
def get_acl_for_user(user: User | None, db_session: Session | None = None) -> set[str]:
|
|
versioned_acl_for_user_fn = fetch_versioned_implementation(
|
|
"danswer.access.access", "_get_acl_for_user"
|
|
)
|
|
return versioned_acl_for_user_fn(user, db_session) # type: ignore
|