fix uuid column to char(36)
This commit is contained in:
@ -1,3 +1,9 @@
|
||||
# 0.5.4
|
||||
|
||||
* Fixed bug in `UUID` field that was trimmed to 32 chars instead of 36 (with dashes).
|
||||
* Since first 32 characters of uuid should still be unique I consider this as non-breaking, but if you
|
||||
were using UUID field before you might consider re-generating the ids.
|
||||
|
||||
# 0.5.3
|
||||
|
||||
* Fixed bug in `Model.dict()` method that was ignoring exclude parameter and not include dictionary argument.
|
||||
|
||||
@ -30,7 +30,7 @@ class UndefinedType: # pragma no cover
|
||||
|
||||
Undefined = UndefinedType()
|
||||
|
||||
__version__ = "0.5.3"
|
||||
__version__ = "0.5.4"
|
||||
__all__ = [
|
||||
"Integer",
|
||||
"BigInteger",
|
||||
|
||||
@ -28,7 +28,7 @@ class UUID(TypeDecorator): # pragma nocover
|
||||
return ret_value
|
||||
|
||||
def load_dialect_impl(self, dialect: DefaultDialect) -> Any:
|
||||
return dialect.type_descriptor(CHAR(32))
|
||||
return dialect.type_descriptor(CHAR(36))
|
||||
|
||||
def process_bind_param(
|
||||
self, value: Union[str, int, bytes, uuid.UUID, None], dialect: DefaultDialect
|
||||
|
||||
@ -73,7 +73,7 @@ def test_dumping_to_dict_no_exclusion(sample_data):
|
||||
dict1 = item1.dict()
|
||||
assert dict1["name"] == "Teddy Bear"
|
||||
assert dict1["category"]["name"] == "Toys"
|
||||
assert dict1["category"]["tier"]['name'] == "Tier I"
|
||||
assert dict1["category"]["tier"]["name"] == "Tier I"
|
||||
assert dict1["created_by"]["email"] == "test@test.com"
|
||||
|
||||
dict2 = item2.dict()
|
||||
@ -114,26 +114,29 @@ def test_dumping_to_dict_exclude_nested_dict(sample_data):
|
||||
dict1 = item2.dict(exclude={"category": {"tier": {"name"}}, "name": ...})
|
||||
assert "name" not in dict1
|
||||
assert "category" in dict1
|
||||
assert dict1["category"]['name'] == 'Weapons'
|
||||
assert dict1["category"]["name"] == "Weapons"
|
||||
assert dict1["created_by"]["email"] == "test@test.com"
|
||||
assert dict1["category"]["tier"].get('name') is None
|
||||
assert dict1["category"]["tier"].get("name") is None
|
||||
|
||||
|
||||
def test_dumping_to_dict_exclude_and_include_nested_dict(sample_data):
|
||||
item1, item2 = sample_data
|
||||
dict1 = item2.dict(exclude={"category": {"tier": {"name"}}},
|
||||
include={'name', 'category'})
|
||||
assert dict1.get('name') == 'M16'
|
||||
dict1 = item2.dict(
|
||||
exclude={"category": {"tier": {"name"}}}, include={"name", "category"}
|
||||
)
|
||||
assert dict1.get("name") == "M16"
|
||||
assert "category" in dict1
|
||||
assert dict1["category"]['name'] == 'Weapons'
|
||||
assert dict1["category"]["name"] == "Weapons"
|
||||
assert "created_by" not in dict1
|
||||
assert dict1["category"]["tier"].get('name') is None
|
||||
assert dict1["category"]["tier"].get("name") is None
|
||||
|
||||
dict2 = item1.dict(exclude={"id": ...},
|
||||
include={'name': ..., 'category': {'name': ..., 'tier': {'id'}}})
|
||||
assert dict2.get('name') == 'Teddy Bear'
|
||||
assert dict2.get('id') is None # models not saved
|
||||
assert dict2["category"]['name'] == 'Toys'
|
||||
dict2 = item1.dict(
|
||||
exclude={"id": ...},
|
||||
include={"name": ..., "category": {"name": ..., "tier": {"id"}}},
|
||||
)
|
||||
assert dict2.get("name") == "Teddy Bear"
|
||||
assert dict2.get("id") is None # models not saved
|
||||
assert dict2["category"]["name"] == "Toys"
|
||||
assert "created_by" not in dict1
|
||||
assert dict1["category"]["tier"].get('name') is None
|
||||
assert dict1["category"]["tier"]['id'] is None
|
||||
assert dict1["category"]["tier"].get("name") is None
|
||||
assert dict1["category"]["tier"]["id"] is None
|
||||
|
||||
@ -66,9 +66,11 @@ class RandomModel(ormar.Model):
|
||||
|
||||
id: int = ormar.Integer(primary_key=True)
|
||||
password: str = ormar.String(max_length=255, default=gen_pass)
|
||||
first_name: str = ormar.String(max_length=255, default='John')
|
||||
first_name: str = ormar.String(max_length=255, default="John")
|
||||
last_name: str = ormar.String(max_length=255)
|
||||
created_date: datetime.datetime = ormar.DateTime(server_default=sqlalchemy.func.now())
|
||||
created_date: datetime.datetime = ormar.DateTime(
|
||||
server_default=sqlalchemy.func.now()
|
||||
)
|
||||
|
||||
|
||||
class User(ormar.Model):
|
||||
@ -115,7 +117,7 @@ async def create_user(user: User):
|
||||
@app.post("/users2/", response_model=User)
|
||||
async def create_user2(user: User):
|
||||
user = await user.save()
|
||||
return user.dict(exclude={'password'})
|
||||
return user.dict(exclude={"password"})
|
||||
|
||||
|
||||
@app.post("/users3/", response_model=UserBase)
|
||||
@ -126,7 +128,7 @@ async def create_user3(user: User2):
|
||||
@app.post("/users4/")
|
||||
async def create_user4(user: User2):
|
||||
user = await user.save()
|
||||
return user.dict(exclude={'password'})
|
||||
return user.dict(exclude={"password"})
|
||||
|
||||
|
||||
@app.post("/random/", response_model=RandomModel)
|
||||
@ -166,13 +168,23 @@ def test_all_endpoints():
|
||||
|
||||
# response has only 3 fields from UserBase
|
||||
response = client.post("/users3/", json=user)
|
||||
assert list(response.json().keys()) == ['email', 'first_name', 'last_name']
|
||||
assert list(response.json().keys()) == ["email", "first_name", "last_name"]
|
||||
|
||||
response = client.post("/users4/", json=user)
|
||||
assert list(response.json().keys()) == ['id', 'email', 'first_name', 'last_name', 'category']
|
||||
assert list(response.json().keys()) == [
|
||||
"id",
|
||||
"email",
|
||||
"first_name",
|
||||
"last_name",
|
||||
"category",
|
||||
]
|
||||
|
||||
user3 = {
|
||||
'last_name': 'Test'
|
||||
}
|
||||
user3 = {"last_name": "Test"}
|
||||
response = client.post("/random/", json=user3)
|
||||
assert list(response.json().keys()) == ['id', 'password', 'first_name', 'last_name', 'created_date']
|
||||
assert list(response.json().keys()) == [
|
||||
"id",
|
||||
"password",
|
||||
"first_name",
|
||||
"last_name",
|
||||
"created_date",
|
||||
]
|
||||
|
||||
@ -145,6 +145,11 @@ async def test_uuid_column():
|
||||
item = await UUIDSample.objects.filter(id=u1.id).get()
|
||||
assert item.id == u1.id
|
||||
|
||||
item2 = await UUIDSample.objects.first()
|
||||
item3 = await UUIDSample.objects.get(pk=item2.id)
|
||||
assert item2.id == item3.id
|
||||
assert isinstance(item3.id, uuid.UUID)
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_model_crud():
|
||||
|
||||
Reference in New Issue
Block a user