Files
django-ram/ram/portal/utils.py

75 lines
2.5 KiB
Python

import os
import json
import uuid
from django.apps import apps
from django.conf import settings
from django.http import HttpResponse
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.decorators import login_required
from django.core.files.storage import default_storage
from django.core.files.base import ContentFile
from martor.utils import LazyEncoder
@login_required
def markdown_uploader(request):
"""
Makdown image upload for locale storage
and represent as json to markdown editor.
"""
if request.META.get("HTTP_X_REQUESTED_WITH") == "XMLHttpRequest":
if "markdown-image-upload" in request.FILES:
image = request.FILES["markdown-image-upload"]
image_types = [
"image/png",
"image/jpg",
"image/jpeg",
"image/pjpeg",
"image/gif",
]
if image.content_type not in image_types:
data = json.dumps(
{"status": 405, "error": _("Bad image format.")},
cls=LazyEncoder,
)
return HttpResponse(
data, content_type="application/json", status=405
)
if image.size > settings.MAX_IMAGE_UPLOAD_SIZE:
to_MB = settings.MAX_IMAGE_UPLOAD_SIZE / (1024 * 1024)
data = json.dumps(
{
"status": 405,
"error": _("Maximum image file is %(size)s MB.")
% {"size": to_MB},
},
cls=LazyEncoder,
)
return HttpResponse(
data, content_type="application/json", status=405
)
img_uuid = "{0}-{1}".format(
uuid.uuid4().hex[:10], image.name.replace(" ", "-")
)
tmp_file = os.path.join(settings.MARTOR_UPLOAD_PATH, img_uuid)
def_path = default_storage.save(
tmp_file, ContentFile(image.read())
)
img_url = os.path.join(settings.MEDIA_URL, def_path)
data = json.dumps(
{"status": 200, "link": img_url, "name": image.name}
)
return HttpResponse(data, content_type="application/json")
return HttpResponse(_("Invalid request!"))
return HttpResponse(_("Invalid request!"))
def get_site_conf():
SiteConfiguration = apps.get_model("portal", "SiteConfiguration")
return SiteConfiguration.get_solo()