Alias resource class to Model

This commit is contained in:
richard-dds 2019-09-16 16:54:49 -04:00
parent 5012c5a4d3
commit c0a629ae9a

View File

@ -51,24 +51,26 @@ class ClaimFailedException(Exception):
@contextmanager @contextmanager
def claim_for_update(resource): def claim_for_update(resource):
Model = resource.__class__
rows_updated = ( rows_updated = (
db.session.query(resource.__class__) db.session.query(Model)
.filter_by(id=resource.id, claimed_at=None) .filter_by(id=resource.id, claimed_at=None)
.update({"claimed_at": func.now()}, synchronize_session=False) .update({"claimed_at": func.now()}, synchronize_session=False)
) )
if rows_updated < 1: if rows_updated < 1:
raise ClaimFailedException( raise ClaimFailedException(
f"Could not acquire claim for {resource.__class__.__name__} {resource.id}." f"Could not acquire claim for {Model.__name__} {resource.id}."
) )
claimed = db.session.query(resource.__class__).filter_by(id=resource.id).one() claimed = db.session.query(Model).filter_by(id=resource.id).one()
try: try:
yield claimed yield claimed
finally: finally:
db.session.query(resource.__class__).filter( db.session.query(Model).filter(
resource.__class__.id == resource.id Model.id == resource.id
).filter(resource.__class__.claimed_at != None).update( ).filter(Model.claimed_at != None).update(
{"claimed_at": sql.null()}, synchronize_session=False {"claimed_at": sql.null()}, synchronize_session=False
) )