def render_paper(source, output_path, webhook_url=None):
"""
Render a source directory using Engrafo.
"""
try:
os.makedirs(output_path)
except FileExistsError:
pass
client = create_client()
labels = {}
environment = {}
volumes = {}
network = None
# Production
if settings.MEDIA_USE_S3:
source = f"s3://{settings.AWS_STORAGE_BUCKET_NAME}/{source}"
output_path = f"s3://{settings.AWS_STORAGE_BUCKET_NAME}/{output_path}"
environment['AWS_ACCESS_KEY_ID'] = settings.AWS_ACCESS_KEY_ID
environment['AWS_SECRET_ACCESS_KEY'] = settings.AWS_SECRET_ACCESS_KEY
environment['AWS_S3_REGION_NAME'] = settings.AWS_S3_REGION_NAME
# Development
else:
# HACK(bfirsh): MEDIA_ROOT is an absolute path to something on
# the host machine. We need to make this relative to a mount inside the
# Docker container.
docker_media_root = os.path.join(
'/mnt',
os.path.basename(settings.MEDIA_ROOT)
)
source = os.path.join(docker_media_root, source)
output_path = os.path.join(docker_media_root, output_path)
# HOST_PWD is set in docker-compose.yml
volumes[os.environ['HOST_PWD']] = {'bind': '/mnt', 'mode': 'rw'}
network = 'arxivvanity_default'
if settings.ENGRAFO_USE_HYPER_SH:
labels['sh_hyper_instancetype'] = settings.HYPER_INSTANCE_TYPE
container = client.containers.run(
settings.ENGRAFO_IMAGE,
'sh -c ' + shlex.quote('; '.join(make_command(source, output_path, webhook_url))),
volumes=volumes,
environment=environment,
labels=labels,
network=network,
detach=True,
)
return container.id
评论列表
文章目录