* Add benchmarking test suite * Improve amortized time of model relation loads with a large number of rows * Improve performance of loading models with many related models * Improve performance of loading models with many related models to O(N)ish * Fix bug where N model creation with shared related model would build in N^2 time * Lower blocking time for queryset results * Add docstrings and streamline hash code Co-authored-by: haydeec1 <Eric.Haydel@jhuapl.edu>
53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
from typing import Optional, Type
|
|
|
|
import databases
|
|
import pytest
|
|
import pytest_asyncio
|
|
import sqlalchemy
|
|
|
|
import ormar
|
|
from tests.settings import DATABASE_URL
|
|
|
|
database = databases.Database(DATABASE_URL)
|
|
metadata = sqlalchemy.MetaData()
|
|
|
|
|
|
class Band(ormar.Model):
|
|
class Meta:
|
|
tablename = "bands"
|
|
metadata = metadata
|
|
database = database
|
|
|
|
id: int = ormar.Integer(primary_key=True)
|
|
name: str = ormar.String(max_length=100)
|
|
|
|
|
|
class Artist(ormar.Model):
|
|
class Meta:
|
|
tablename = "artists"
|
|
metadata = metadata
|
|
database = database
|
|
|
|
id: int = ormar.Integer(primary_key=True)
|
|
name: str = ormar.String(max_length=100)
|
|
|
|
band: Band = ormar.ForeignKey(Band)
|
|
|
|
|
|
def test_weakref_init():
|
|
band = Band(name="Band")
|
|
artist1 = Artist(name="Artist 1", band=band)
|
|
artist2 = Artist(name="Artist 2", band=band)
|
|
artist3 = Artist(name="Artist 3", band=band)
|
|
|
|
del artist1
|
|
Artist(
|
|
name="Artist 2", band=band
|
|
) # Force it to check for weakly-referenced objects
|
|
del artist3
|
|
|
|
band.artists # Force it to clean
|
|
|
|
assert len(band.artists) == 1
|
|
assert band.artists[0].name == "Artist 2"
|