fix
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

This commit is contained in:
2024-12-02 21:41:37 +03:00
parent 6e8a1540b4
commit 31d98b67cf
11 changed files with 94 additions and 31 deletions

View File

@@ -18,3 +18,9 @@ def create_indexes():
database.get_collection('locks').create_index([
('name', 1),
], unique=True)
def remove_outdated():
client = pymongo.MongoClient(CONNECTION_STRING)
while True:

View File

@@ -1,22 +1,25 @@
import bson
import datetime
import pydantic
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))
class Lock(pydantic.BaseModel):
name: str
locked_until: pydantic.AwareDatetime
async def acquire(lock: Lock):
await collection.insert_one(lock.model_dump())
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):