Skip to content

Commit

Permalink
chore: lazily import some external dependencies
Browse files Browse the repository at this point in the history
These contribute considerably to startup time and are not always needed.
  • Loading branch information
nijel committed Oct 2, 2024
1 parent 404a3c1 commit ee1bb4a
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 6 deletions.
8 changes: 6 additions & 2 deletions weblate/formats/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,12 @@
from django.utils.translation import gettext_lazy
from translate.convert.po2html import po2html
from translate.convert.po2idml import translate_idml, write_idml
from translate.convert.po2md import MarkdownTranslator
from translate.convert.po2rc import rerc
from translate.convert.po2txt import po2txt
from translate.convert.rc2po import rc2po
from translate.convert.xliff2odf import translate_odf, write_odf
from translate.storage.html import htmlfile
from translate.storage.idml import INLINE_ELEMENTS, NO_TRANSLATE_ELEMENTS, open_idml
from translate.storage.markdown import MarkdownFile
from translate.storage.odf_io import open_odf
from translate.storage.odf_shared import inline_elements, no_translate_content_elements
from translate.storage.po import pofile
Expand Down Expand Up @@ -315,12 +313,18 @@ class MarkdownFormat(ConvertFormat):
check_flags = ("safe-html", "strict-same", "md-text")

def convertfile(self, storefile, template_store):
# Lazy import as mistletoe is expensive
from translate.storage.markdown import MarkdownFile

# Fake input file with a blank filename
mdparser = MarkdownFile(inputfile=NamedBytesIO("", storefile.read()))
return self.convert_to_po(mdparser, template_store, use_location=False)

def save_content(self, handle) -> None:
"""Store content to file."""
# Lazy import as mistletoe is expensive
from translate.convert.po2md import MarkdownTranslator

converter = MarkdownTranslator(
inputstore=self.store, includefuzzy=True, outputthreshold=None, maxlength=80
)
Expand Down
6 changes: 4 additions & 2 deletions weblate/memory/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@
from django.db.models.functions import MD5
from django.utils.encoding import force_str
from django.utils.translation import gettext, pgettext
from jsonschema import validate
from jsonschema.exceptions import ValidationError
from translate.misc.xml_helpers import getXMLlang, getXMLspace
from translate.storage.tmx import tmxfile
from weblate_schemas import load_schema
Expand Down Expand Up @@ -170,6 +168,10 @@ def import_file(
def import_json(
self, request: AuthenticatedHttpRequest, fileobj, origin=None, **kwargs
):
# Lazily import as this is expensive
from jsonschema import validate
from jsonschema.exceptions import ValidationError

content = fileobj.read()
try:
data = json.loads(force_str(content))
Expand Down
5 changes: 3 additions & 2 deletions weblate/utils/request.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@

from typing import TYPE_CHECKING

import user_agents

if TYPE_CHECKING:
from weblate.auth.models import AuthenticatedHttpRequest

Expand All @@ -30,6 +28,9 @@ def get_user_agent_raw(request: AuthenticatedHttpRequest) -> str:

def get_user_agent(request: AuthenticatedHttpRequest, max_length: int = 200) -> str:
"""Return formatted user agent for request."""
# Lazily import as this is expensive
import user_agents

raw = get_user_agent_raw(request)
if not raw:
return ""
Expand Down

0 comments on commit ee1bb4a

Please sign in to comment.