locks/app/storage/mongo/locks.py
emmatveev 31d98b67cf
All checks were successful
Deploy Dev / Build (pull_request) Successful in 6s
Deploy Dev / Push (pull_request) Successful in 8s
Deploy Dev / Deploy dev (pull_request) Successful in 11s
fix
2024-12-02 21:41:37 +03:00

27 lines
640 B
Python

import datetime
from app.storage.mongo import database
from app.utils import time
from bson import codec_options
from pymongo import errors
class ConflictException(Exception):
pass
collection = database.get_collection("locks", codec_options=codec_options.CodecOptions(tz_aware=True))
async def acquire(name: str, ttl: int):
locked_until = time.now() + datetime.timedelta(seconds=ttl)
try:
await collection.insert_one({'name': name, 'locked_until': locked_until})
except errors.DuplicateKeyError:
raise ConflictException
async def release(name: str):
await collection.delete_one({'name': name})