mirror of https://github.com/doccano/doccano.git
pythondatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learningannotation-tool
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
1.1 KiB
33 lines
1.1 KiB
import sys
|
|
import time
|
|
|
|
from django.core.management.base import BaseCommand
|
|
from django.db import connection
|
|
from django.db.utils import OperationalError
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Blocks until the database is available"
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument("--poll_seconds", type=float, default=3)
|
|
parser.add_argument("--max_retries", type=int, default=60)
|
|
|
|
def handle(self, *args, **options):
|
|
max_retries = options["max_retries"]
|
|
poll_seconds = options["poll_seconds"]
|
|
|
|
for retry in range(max_retries):
|
|
try:
|
|
connection.ensure_connection()
|
|
except OperationalError as ex:
|
|
self.stdout.write(
|
|
"Database unavailable on attempt {attempt}/{max_retries}:"
|
|
" {error}".format(attempt=retry + 1, max_retries=max_retries, error=ex)
|
|
)
|
|
time.sleep(poll_seconds)
|
|
else:
|
|
break
|
|
else:
|
|
self.stdout.write(self.style.ERROR("Database unavailable"))
|
|
sys.exit(1)
|