mirror of
https://github.com/DMOJ/online-judge.git
synced 2024-11-25 16:32:37 +08:00
24 lines
692 B
Python
24 lines
692 B
Python
from itertools import chain
|
|
|
|
from django.db import connection, transaction
|
|
|
|
|
|
class LockModel(object):
|
|
def __init__(self, write, read=()):
|
|
self.tables = ', '.join(chain(
|
|
('`%s` WRITE' % model._meta.db_table for model in write),
|
|
('`%s` READ' % model._meta.db_table for model in read),
|
|
))
|
|
self.cursor = connection.cursor()
|
|
|
|
def __enter__(self):
|
|
self.cursor.execute('LOCK TABLES ' + self.tables)
|
|
|
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
|
if exc_type is None:
|
|
transaction.commit()
|
|
else:
|
|
transaction.rollback()
|
|
self.cursor.execute('UNLOCK TABLES')
|
|
self.cursor.close()
|