bug fixes

This commit is contained in:
collerek
2021-06-22 12:58:39 +02:00
parent f197df0ecd
commit 172a6a2be6
7 changed files with 188 additions and 31 deletions

View File

@ -0,0 +1,63 @@
import uuid
from typing import ClassVar
import databases
import pytest
import sqlalchemy
from pydantic import root_validator
import ormar
from tests.settings import DATABASE_URL
database = databases.Database(DATABASE_URL, force_rollback=True)
metadata = sqlalchemy.MetaData()
class BaseMeta(ormar.ModelMeta):
database = database
metadata = metadata
class Mol(ormar.Model):
# fixed namespace to generate always unique uuid from the smiles
_UUID_NAMESPACE: ClassVar[uuid.UUID] = uuid.UUID(
"12345678-abcd-1234-abcd-123456789abc"
)
class Meta(BaseMeta):
tablename = "mols"
id: str = ormar.UUID(primary_key=True, index=True, uuid_format="hex")
smiles: str = ormar.String(nullable=False, unique=True, max_length=256)
def __init__(self, **kwargs):
# this is required to generate id from smiles in init, if id is not given
if "id" not in kwargs:
kwargs["id"] = self._UUID_NAMESPACE
super().__init__(**kwargs)
@root_validator()
def make_canonical_smiles_and_uuid(cls, values):
values["id"], values["smiles"] = cls.uuid(values["smiles"])
return values
@classmethod
def uuid(cls, smiles):
id = uuid.uuid5(cls._UUID_NAMESPACE, smiles)
return id, smiles
@pytest.fixture(autouse=True, scope="module")
def create_test_database():
engine = sqlalchemy.create_engine(DATABASE_URL)
metadata.create_all(engine)
yield
metadata.drop_all(engine)
@pytest.mark.asyncio
async def test_json_column():
async with database:
await Mol.objects.create(smiles="Cc1ccccc1")
count = await Mol.objects.count()
assert count == 1

View File

@ -199,7 +199,7 @@ async def test_binary_column():
async def test_binary_str_column():
async with database:
async with database.transaction(force_rollback=True):
await LargeBinaryStr.objects.create(test_binary=blob3)
await LargeBinaryStr(test_binary=blob3).save()
await LargeBinaryStr.objects.create(test_binary=blob4)
items = await LargeBinaryStr.objects.all()