redis-om-python icon indicating copy to clipboard operation
redis-om-python copied to clipboard

When using hashmodel, 'id' appears to be a reserved name?

Open rkulagowski opened this issue 2 years ago • 2 comments

from redis_om import Field, HashModel, Migrator
from pydantic import PositiveInt, ValidationError
from typing import Optional

class RatingBody(HashModel):
    id: PositiveInt = Field(index=True)
    name: str
    country: str
    language: str
    code: str
    description: Optional[str]
    update_ID: PositiveInt
    update_date: str

def lambda_handler(event, context):
    try:
        c_v = RatingBody(
            id=1,
            name='abcd',
            country='usa',
            language='en',
            code='2134',
            description='test value',
            update_ID=9876554,
            update_date='2022-04-29'
        )
        c_v.save()
    except ValidationError as e:
        print(f'validation error: {e}')
    Migrator().run()
    a = RatingBody.find(RatingBody.id == 1).all()
    print ("Breakpoint here")


if __name__ == '__main__':
    lambda_handler(None, None)
    print ("Done")

Will result in the following error:

pydantic.error_wrappers.ValidationError: 1 validation error for RatingBody
id
  field required (type=value_error.missing)

Changing from 'id' to anything else causes the code to work.

rkulagowski avatar Apr 29 '22 20:04 rkulagowski

It's because RedisModel.from_redis() intentionally removes id from fields, so later pyndantic validation fails: https://github.com/redis/redis-om-python/blob/main/aredis_om/model/model.py#L1211

No clue why so far, didn't find mentions in code/docs

dadwin avatar Jul 04 '22 12:07 dadwin

fixed in pull/337.

wiseaidev avatar Aug 11 '22 21:08 wiseaidev

@simonprickett fix has been merged so we can close this out

sav-norem avatar Sep 09 '22 18:09 sav-norem