Skip to content

Commit

Permalink
fix(operator_capabilities): operator emulation wasn't expose to front…
Browse files Browse the repository at this point in the history
… end (#301)
  • Loading branch information
jbarreau authored Dec 20, 2024
1 parent 91422fe commit 0e95a58
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 11 deletions.
2 changes: 1 addition & 1 deletion .github/actions/isort/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ runs:
with:
sortPaths: ${{ inputs.current_package }}
requirementsFiles: "requirements.txt ../../requirements.txt"
configurations: "--settings-file=../../.isort.cfg"
configuration: "--settings-file=./.isort.cfg"
4 changes: 2 additions & 2 deletions src/_example/django/django_demo/.forestadmin-schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -3542,10 +3542,10 @@
],
"meta": {
"liana": "agent-python",
"liana_version": "1.18.5",
"liana_version": "1.17.0",
"stack": {
"engine": "python",
"engine_version": "3.11.11"
"engine_version": "3.12.4"
}
}
}
2 changes: 2 additions & 0 deletions src/agent_toolkit/forestadmin/agent_toolkit/agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ async def __mk_resources(self):
self._resources: Resources = {
"capabilities": CapabilitiesResource(
self.customizer.composite_datasource,
await self.customizer.get_datasource(),
self._permission_service,
self._ip_white_list_service,
self.options,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

from forestadmin.agent_toolkit.forest_logger import ForestLogger
from forestadmin.agent_toolkit.options import Options
from forestadmin.agent_toolkit.resources.collections.base_collection_resource import BaseCollectionResource
from forestadmin.agent_toolkit.resources.collections.decorators import authenticate, check_method, ip_white_list
from forestadmin.agent_toolkit.resources.ip_white_list_resource import IpWhitelistResource
from forestadmin.agent_toolkit.services.permissions.ip_whitelist_service import IpWhiteListService
from forestadmin.agent_toolkit.services.permissions.permission_service import PermissionService
from forestadmin.agent_toolkit.utils.context import HttpResponseBuilder, Request, RequestMethod, Response
from forestadmin.agent_toolkit.utils.forest_schema.generator_field import SchemaFieldGenerator
from forestadmin.datasource_toolkit.datasource_customizer.datasource_composite import CompositeDatasource
Expand All @@ -17,14 +18,16 @@
DatasourceAlias = Union[Datasource[BoundCollection], DatasourceCustomizer]


class CapabilitiesResource(IpWhitelistResource):
class CapabilitiesResource(BaseCollectionResource):
def __init__(
self,
composite_datasource: CompositeDatasource,
datasource: Union[Datasource, DatasourceCustomizer],
permission: PermissionService,
ip_white_list_service: IpWhiteListService,
options: Options,
):
super().__init__(ip_white_list_service, options)
super().__init__(datasource, permission, ip_white_list_service, options)
self.composite_datasource: CompositeDatasource = composite_datasource

@ip_white_list
Expand Down Expand Up @@ -52,7 +55,7 @@ async def capabilities(self, request: Request) -> Response:
return HttpResponseBuilder.build_success_response(ret)

def _get_collection_capability(self, collection_name: str) -> Dict[str, Any]:
collection = self.composite_datasource.get_collection(collection_name)
collection = self.datasource.get_collection(collection_name)
fields = []
for field_name, field_schema in collection.schema["fields"].items():
if is_column(field_schema):
Expand Down
51 changes: 48 additions & 3 deletions src/agent_toolkit/tests/resources/test_capabilities_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
from forestadmin.agent_toolkit.services.permissions.permission_service import PermissionService
from forestadmin.agent_toolkit.utils.context import Request, RequestMethod, Response, User
from forestadmin.datasource_toolkit.collections import Collection
from forestadmin.datasource_toolkit.datasource_customizer.datasource_customizer import DatasourceCustomizer
from forestadmin.datasource_toolkit.datasources import Datasource
from forestadmin.datasource_toolkit.interfaces.fields import FieldType, Operator, PrimitiveType

Expand Down Expand Up @@ -94,6 +95,12 @@ def setUpClass(cls) -> None:
"type": FieldType.COLUMN,
"filter_operators": set([]),
},
"created_at": {
"column_type": PrimitiveType.DATE,
"is_primary_key": False,
"type": FieldType.COLUMN,
"filter_operators": set([Operator.EQUAL, Operator.GREATER_THAN, Operator.LESS_THAN]),
},
} # type:ignore
)
cls.datasource.add_collection(cls.book_collection)
Expand All @@ -108,9 +115,17 @@ def setUpClass(cls) -> None:
timezone=zoneinfo.ZoneInfo("Europe/Paris"),
request={"ip": "127.0.0.1"},
)
cls.datasource_customizer = DatasourceCustomizer()
cls.datasource_customizer.add_datasource(cls.datasource)

def setUp(self) -> None:
self.capabilities_resource = CapabilitiesResource(self.datasource, self.ip_white_list_service, self.options)
self.capabilities_resource = CapabilitiesResource(
self.datasource_customizer.composite_datasource,
self.loop.run_until_complete(self.datasource_customizer.get_datasource()),
self.permission_service,
self.ip_white_list_service,
self.options,
)

def test_dispatch_should_not_dispatch_to_capabilities_when_no_post_request(self):
for method in [RequestMethod.DELETE, RequestMethod.OPTIONS, RequestMethod.PUT]:
Expand All @@ -127,7 +142,7 @@ def test_dispatch_should_not_dispatch_to_capabilities_when_no_post_request(self)

self.assertEqual(response.status, 405)

def test_dispatch_should_return_correct_collection_and_fields_capabilities(self):
def test_dispatch_should_return_correct_collection_and_fields_capabilities_with_emulated_operators(self):
request = Request(
method=RequestMethod.POST,
query={},
Expand All @@ -148,10 +163,40 @@ def test_dispatch_should_return_correct_collection_and_fields_capabilities(self)
{
"name": "id",
"type": "Number",
"operators": ["equal", "greater_than", "in", "less_than"],
"operators": ["blank", "equal", "greater_than", "in", "less_than", "missing"],
},
{"name": "name", "type": "String", "operators": []},
{"name": "cost", "type": "Number", "operators": []},
{
"name": "created_at",
"type": "Date",
"operators": [
"after",
"after_x_hours_ago",
"before",
"before_x_hours_ago",
"blank",
"equal",
"future",
"greater_than",
"in",
"less_than",
"missing",
"past",
"previous_month",
"previous_month_to_date",
"previous_quarter",
"previous_quarter_to_date",
"previous_week",
"previous_week_to_date",
"previous_x_days",
"previous_x_days_to_date",
"previous_year",
"previous_year_to_date",
"today",
"yesterday",
],
},
],
}
],
Expand Down
6 changes: 5 additions & 1 deletion src/agent_toolkit/tests/test_agent_toolkit.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,11 @@ def test_property_resources(

mocked_authentication_resource.assert_called_once_with(agent._ip_white_list_service, agent.options)
mocked_capabilities_resource.assert_called_once_with(
agent.customizer.composite_datasource, agent._ip_white_list_service, agent.options
agent.customizer.composite_datasource,
"fake_datasource",
agent._permission_service,
agent._ip_white_list_service,
agent.options,
)
mocked_crud_resource.assert_called_once_with(
agent.customizer.composite_datasource,
Expand Down

0 comments on commit 0e95a58

Please sign in to comment.