Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,6 @@ numpy = [
{ version = ">=1.21.0,<2.1.0", python = "<3.10" },
{ version = ">=2.1.0,<3.0", python = ">=3.10" },
]

[tool.ruff.lint]
extend-select = ["I"]
6 changes: 3 additions & 3 deletions src/sqlalchemy_oso_cloud/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
See the [README](https://github.com/osohq/sqlalchemy-oso-cloud) for more information.
"""
from . import orm
from .session import Session
from .auth import _apply_authorization_options, authorized
from .oso import get_oso, init
from .query import Query
from .oso import init, get_oso
from .select_impl import Select, select
from .auth import authorized, _apply_authorization_options
from .session import Session

__all__ = ["orm", "Session", "Query", "init", "get_oso", "Select", "select", "authorized", "_apply_authorization_options"]
8 changes: 5 additions & 3 deletions src/sqlalchemy_oso_cloud/auth.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from sqlalchemy import literal_column, ColumnClause
from sqlalchemy.orm import with_loader_criteria, LoaderCriteriaOption
from typing import TYPE_CHECKING, Callable, List, Optional, Set, Type, Union

from oso_cloud import Value
from typing import List, Set, Type, Callable, Union, Optional, TYPE_CHECKING
from sqlalchemy import ColumnClause, literal_column
from sqlalchemy.orm import LoaderCriteriaOption, with_loader_criteria

from .orm import Resource
from .oso import get_oso

Expand Down
5 changes: 3 additions & 2 deletions src/sqlalchemy_oso_cloud/orm.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
[authorization data](https://www.osohq.com/docs/authorization-data) in your ORM models.
"""

from typing import Callable, Optional, Protocol, Any
from typing_extensions import ParamSpec, TypeVar, Concatenate
from typing import Any, Callable, Optional, Protocol

from sqlalchemy.orm import MappedColumn, Relationship, mapped_column, relationship
from typing_extensions import Concatenate, ParamSpec, TypeVar


class Resource:
"""
Expand Down
16 changes: 11 additions & 5 deletions src/sqlalchemy_oso_cloud/oso.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
import os
import yaml
from tempfile import NamedTemporaryFile
from typing import Optional, TypedDict, Union

from typing import TypedDict, Optional, Union
import yaml
from oso_cloud import Oso
from sqlalchemy import select
from sqlalchemy.orm import Mapper, RelationshipProperty, registry, ColumnProperty
from sqlalchemy.orm import ColumnProperty, Mapper, RelationshipProperty, registry
from sqlalchemy.sql.elements import NamedColumn
from sqlalchemy.sql.sqltypes import Boolean, Integer, String, TypeEngine
from tempfile import NamedTemporaryFile

from .orm import _ATTRIBUTE_INFO_KEY, Resource, _RELATION_INFO_KEY, _REMOTE_RELATION_INFO_KEY
from .orm import (
_ATTRIBUTE_INFO_KEY,
_RELATION_INFO_KEY,
_REMOTE_RELATION_INFO_KEY,
Resource,
)


class FactConfig(TypedDict):
query: str
Expand Down
3 changes: 2 additions & 1 deletion src/sqlalchemy_oso_cloud/query.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from typing import Optional, Type, TypeVar

import sqlalchemy.orm
from oso_cloud import Value
from typing import Type, TypeVar, Optional

from .auth import _apply_authorization_options
from .oso import get_oso
Expand Down
4 changes: 3 additions & 1 deletion src/sqlalchemy_oso_cloud/select_impl.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
from typing import TypeVar

import sqlalchemy.sql
from oso_cloud import Value
from typing import TypeVar

from .auth import _apply_authorization_options

Self = TypeVar("Self", bound="Select")
Expand Down
6 changes: 4 additions & 2 deletions src/sqlalchemy_oso_cloud/session.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
from typing import Any, Tuple, Type, TypeVar, Union, overload

import sqlalchemy.orm
from .query import Query
from sqlalchemy.engine import Row
from sqlalchemy.orm.attributes import InstrumentedAttribute
from typing import Type, TypeVar, overload, Any, Tuple, Union

from .query import Query

T = TypeVar("T")
T1 = TypeVar("T1")
Expand Down
16 changes: 10 additions & 6 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,20 @@
import socket
from testcontainers.core.container import DockerContainer # type: ignore
from testcontainers.postgres import PostgresContainer # type: ignore
from testcontainers.core.waiting_utils import wait_for, wait_container_is_ready # type: ignore

import pytest
from oso_cloud import Oso, Value
from sqlalchemy import Engine, create_engine, text
from sqlalchemy.exc import OperationalError
import pytest
from sqlalchemy.orm import Session
from oso_cloud import Oso, Value
from testcontainers.core.container import DockerContainer # type: ignore
from testcontainers.core.waiting_utils import ( # type: ignore
wait_container_is_ready,
wait_for,
)
from testcontainers.postgres import PostgresContainer # type: ignore

import sqlalchemy_oso_cloud

from .models import Base, Organization, Document
from .models import Base, Document, Organization


@pytest.fixture(scope="session")
Expand Down
8 changes: 5 additions & 3 deletions tests/models.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
from pgvector.sqlalchemy import Vector # type: ignore
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from pgvector.sqlalchemy import Vector # type: ignore
from sqlalchemy import ForeignKey
from sqlalchemy_oso_cloud.orm import Resource, relation, attribute, remote_relation
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

from sqlalchemy_oso_cloud.orm import Resource, attribute, relation, remote_relation


class Base(DeclarativeBase):
pass
Expand Down
12 changes: 7 additions & 5 deletions tests/test_main.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import yaml
from oso_cloud import Oso, Value
from sqlalchemy import text, func, select as sqla_select
from sqlalchemy import func, text
from sqlalchemy import select as sqla_select
from sqlalchemy.orm import Session, joinedload
from .models import Document, Base, Organization
import yaml


import sqlalchemy_oso_cloud
from sqlalchemy_oso_cloud import select, authorized
from sqlalchemy_oso_cloud import authorized, select

from .models import Base, Document, Organization


# This is the part our goal is to make nicer
def test_manual(oso: Oso, session: Session, alice: Value, bob: Value):
Expand Down
8 changes: 6 additions & 2 deletions tests/test_pgvector.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,12 @@
import numpy as np
import pytest
from oso_cloud import Value
from sqlalchemy import select as sqla_select, text
from sqlalchemy_oso_cloud import select, authorized, Session as OsoSession
from sqlalchemy import select as sqla_select
from sqlalchemy import text

from sqlalchemy_oso_cloud import Session as OsoSession
from sqlalchemy_oso_cloud import authorized, select

from .models import Document, Organization

if not hasattr(Document, 'embedding'):
Expand Down
Loading