redis / redis-om-python

Object mapping, and more, for Redis and Python
MIT License
1.12k stars 112 forks source link

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

Closed rkulagowski closed 2 years ago

rkulagowski commented 2 years ago
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.

dadwin commented 2 years ago

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

wiseaidev commented 2 years ago

fixed in pull/337.

sav-norem commented 2 years ago

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