You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
class KnowledgeSource(Base):
__tablename__ = 'knowledge_sources'
__table_args__ = (PrimaryKeyConstraint('knowledge_ingestion_profile_id', 'uri'),
)
knowledge_ingestion_profile_id = Column(ForeignKey('knowledge_ingestion_profiles.id', ondelete='SET NULL', onupdate='CASCADE'))
knowledge_ingestion_profile = relationship('KnowledgeIngestionProfile')
uri = Column(Text)
status = Column(Enum(KnowledgeSourceState, name='KnowledgeSourceState'), server_default=text("'PENDING'::\"KnowledgeSourceState\""))
# do we need an ID for it after being incorporated? Or is the URI the ID itself?
# scenario: The user excludes it, and we need to exclude all the chunks in the vector database
updated_at = Column(TIMESTAMP(timezone=True, precision=3), nullable=False, server_default=text("CURRENT_TIMESTAMP"))
In 0.11.2 I cannot show it in the admin UI, it gives me an error on startup:
Traceback (most recent call last):
File "...app/main.py", line 46, in <module>
create_admin(engine, base_url="/").mount_to(app)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...app/admin/adminviews.py", line 406, in create_admin
admin.add_view(KnowledgeSourceAdminView(model=KnowledgeSource, icon="fa fa-file"))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette_admin/contrib/sqla/view.py", line 54, in __init__
assert len(mapper.primary_key) == 1, (
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: Multiple PK columns not supported, A possible solution is to override BaseModelView class and put your own logic
With 0.13.1 I get something different:
File ".../venv/lib/python3.11/site-packages/starlette/convertors.py", line 26, in to_string
assert "/" not in value, "May not contain path separators"
^^^^^^^^^^^^^^^^
and it comes from here:
File ".../venv/lib/python3.11/site-packages/starlette_admin/views.py", line 760, in serialize
request.url_for(route_name + ":detail", identity=self.identity, pk=pk)
This is the source:
def to_string(self, value: str) -> str:
value = str(value)
assert "/" not in value, "May not contain path separators"
assert value, "Must not be empty"
return value
NOTE: obviously my entity has a slot/column named "uri" and values ALWAYS do contain "/".
To Reproduce
Have an entity like mine, above. Insert entities via code and try to look at them in the admin. It will cause the error in the console. I suspect you need a string slot and insert something with an "/" in it.
Environment (please complete the following information):
Starlette-Admin version: 0.13.1
ORM/ODMs: SQLAlchemy, psycopg2-binary==2.9.9
SQLAlchemy-serializer==1.4.1
Additional context
I have another regular entity, simple primary key, and it does have uri slot/column. No indues with it. I suspect the problem is related to dual-column PKs. The value of the columns cannot have "/" in the current implementation.
Full stack trace:
Traceback (most recent call last):
File "...venv/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 419, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 78, in __call__
return await self.app(scope, receive, send)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/fastapi/applications.py", line 284, in __call__
await super().__call__(scope, receive, send)
File "...venv/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
await self.middleware_stack(scope, receive, send)
File "...venv/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
raise exc
File "...venv/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "...venv/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 86, in __call__
await self.app(scope, receive, send_wrapper)
File "...venv/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 86, in __call__
await self.app(scope, receive, send_wrapper)
File "...venv/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
raise exc
File "...venv/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
await self.app(scope, receive, sender)
File "...venv/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
raise e
File "...venv/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
await self.app(scope, receive, send)
File "...venv/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
await route.handle(scope, receive, send)
File "...venv/lib/python3.11/site-packages/starlette/routing.py", line 443, in handle
await self.app(scope, receive, send)
File "...venv/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
await self.middleware_stack(scope, receive, send)
File "...venv/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
raise exc
File "...venv/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
await self.app(scope, receive, _send)
File "...venv/lib/python3.11/site-packages/starlette/middleware/base.py", line 108, in __call__
response = await self.dispatch_func(request, call_next)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette_admin/contrib/sqla/middleware.py", line 28, in dispatch
return await call_next(request)
^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette/middleware/base.py", line 84, in call_next
raise app_exc
File "...venv/lib/python3.11/site-packages/starlette/middleware/base.py", line 70, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
File "...venv/lib/python3.11/site-packages/starlette_admin/i18n.py", line 162, in __call__
await self.app(scope, receive, send)
File "...venv/lib/python3.11/site-packages/starlette/middleware/sessions.py", line 86, in __call__
await self.app(scope, receive, send_wrapper)
File "...venv/lib/python3.11/site-packages/starlette/middleware/base.py", line 108, in __call__
response = await self.dispatch_func(request, call_next)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette_admin/auth.py", line 360, in dispatch
return await call_next(request)
^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette/middleware/base.py", line 84, in call_next
raise app_exc
File "...venv/lib/python3.11/site-packages/starlette/middleware/base.py", line 70, in coro
await self.app(scope, receive_or_disconnect, send_no_error)
File "...venv/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
raise exc
File "...venv/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
await self.app(scope, receive, sender)
File "...venv/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
await route.handle(scope, receive, send)
File "...venv/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
await self.app(scope, receive, send)
File "...venv/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
response = await func(request)
^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette_admin/base.py", line 299, in _render_api
serialized_items = [
^
File "...venv/lib/python3.11/site-packages/starlette_admin/base.py", line 301, in <listcomp>
await model.serialize(
File "...venv/lib/python3.11/site-packages/starlette_admin/views.py", line 760, in serialize
request.url_for(route_name + ":detail", identity=self.identity, pk=pk)
File "...venv/lib/python3.11/site-packages/starlette/requests.py", line 178, in url_for
url_path = router.url_path_for(__name, **path_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette/routing.py", line 643, in url_path_for
return route.url_path_for(__name, **path_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette/routing.py", line 434, in url_path_for
url = route.url_path_for(remaining_name, **remaining_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette/routing.py", line 259, in url_path_for
path, remaining_params = replace_params(
^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette/routing.py", line 101, in replace_params
value = convertor.to_string(value)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "...venv/lib/python3.11/site-packages/starlette/convertors.py", line 26, in to_string
assert "/" not in value, "May not contain path separators"
^^^^^^^^^^^^^^^^
AssertionError: May not contain path separators
The text was updated successfully, but these errors were encountered:
My workaround was to add a hash field and use a trigger to compute&set this hash field. I changed the composite primary key to use this hash of the URI instead of the URI itself. This way I avoid "/"/
Describe the bug
I have this entity:
In 0.11.2 I cannot show it in the admin UI, it gives me an error on startup:
With 0.13.1 I get something different:
and it comes from here:
This is the source:
NOTE: obviously my entity has a slot/column named "uri" and values ALWAYS do contain "/".
To Reproduce
Have an entity like mine, above. Insert entities via code and try to look at them in the admin. It will cause the error in the console. I suspect you need a string slot and insert something with an "/" in it.
Environment (please complete the following information):
Additional context
I have another regular entity, simple primary key, and it does have uri slot/column. No indues with it. I suspect the problem is related to dual-column PKs. The value of the columns cannot have "/" in the current implementation.
Full stack trace:
The text was updated successfully, but these errors were encountered: