redis / redis-om-python

Object mapping, and more, for Redis and Python

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Error is thrown with Pydantic `PositiveInt` and `index=True` fields

i-arindam opened this issue · comments

If i have a JsonModel with a field that has pydantic's PositiveInt as the type, i am not able to use index=True in the field setting. Given a simple model

from redis_om import JsonModel, Field
from pydantic import PositiveInt

class JModel(JsonModel):
    age: PositiveInt = Field(index=True) 

when i try to import this in my django project's shell, i get the following errors

>>> from path.to.model.jmodel import Jmodel
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/arindam.chakraborty/Documents/projects/algo_trading/algo_trading/models/live_order_manager/models/check_jmodel.py", line 4, in <module>
    class JModel(JsonModel):
  File "/Users/arindam.chakraborty/Documents/projects/algo_trading/venv/lib/python3.9/site-packages/redis_om/model/model.py", line 1195, in __new__
    new_class = super().__new__(cls, name, bases, attrs, **kwargs)
  File "/Users/arindam.chakraborty/Documents/projects/algo_trading/venv/lib/python3.9/site-packages/pydantic/v1/main.py", line 282, in __new__
    cls = super().__new__(mcs, name, bases, new_namespace, **kwargs)
  File "/usr/local/Cellar/python@3.9/3.9.18_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/abc.py", line 106, in __new__
    cls = super().__new__(mcls, name, bases, namespace, **kwargs)
  File "/Users/arindam.chakraborty/Documents/projects/algo_trading/venv/lib/python3.9/site-packages/redis_om/model/model.py", line 1675, in __init_subclass__
    cls.redisearch_schema()
  File "/Users/arindam.chakraborty/Documents/projects/algo_trading/venv/lib/python3.9/site-packages/redis_om/model/model.py", line 1742, in redisearch_schema
    schema_parts = [schema_prefix] + cls.schema_for_fields()
  File "/Users/arindam.chakraborty/Documents/projects/algo_trading/venv/lib/python3.9/site-packages/redis_om/model/model.py", line 1753, in schema_for_fields
    cls.schema_for_type(json_path, name, "", _type, field.field_info)
  File "/Users/arindam.chakraborty/Documents/projects/algo_trading/venv/lib/python3.9/site-packages/redis_om/model/model.py", line 1890, in schema_for_type
    elif any(issubclass(typ, t) for t in NUMERIC_TYPES):
  File "/Users/arindam.chakraborty/Documents/projects/algo_trading/venv/lib/python3.9/site-packages/redis_om/model/model.py", line 1890, in <genexpr>
    elif any(issubclass(typ, t) for t in NUMERIC_TYPES):
TypeError: issubclass() arg 1 must be a class

If I change the type to either int or str the import works fine.