From a5730c658fa0883e33bca98e7a6180ad26e09a40 Mon Sep 17 00:00:00 2001 From: Kerstin Humm Date: Mon, 22 Jul 2024 17:10:33 +0200 Subject: [PATCH] weblate: init at 5.6.2 --- pkgs/by-name/we/weblate/cache.lock.patch | 22 +++ pkgs/by-name/we/weblate/package.nix | 180 +++++++++++++++++++++++ 2 files changed, 202 insertions(+) create mode 100644 pkgs/by-name/we/weblate/cache.lock.patch create mode 100644 pkgs/by-name/we/weblate/package.nix diff --git a/pkgs/by-name/we/weblate/cache.lock.patch b/pkgs/by-name/we/weblate/cache.lock.patch new file mode 100644 index 000000000000..dc5c50cdf77e --- /dev/null +++ b/pkgs/by-name/we/weblate/cache.lock.patch @@ -0,0 +1,22 @@ +diff --git a/weblate/utils/lock.py b/weblate/utils/lock.py +index 53c1486bc9..a0a5fc5a74 100644 +--- a/weblate/utils/lock.py ++++ b/weblate/utils/lock.py +@@ -43,8 +43,6 @@ class WeblateLock: + self._name = self._format_template(cache_template) + self._lock = cache.lock( + key=self._name, +- expire=3600, +- auto_renewal=True, + ) + self._enter_implementation = self._enter_redis + else: +@@ -62,7 +60,7 @@ class WeblateLock: + + def _enter_redis(self): + try: +- lock_result = self._lock.acquire(timeout=self._timeout) ++ lock_result = self._lock.acquire() + except AlreadyAcquired: + return + diff --git a/pkgs/by-name/we/weblate/package.nix b/pkgs/by-name/we/weblate/package.nix new file mode 100644 index 000000000000..3b499ce31ada --- /dev/null +++ b/pkgs/by-name/we/weblate/package.nix @@ -0,0 +1,180 @@ +{ + lib, + python3, + fetchFromGitHub, + pango, + harfbuzz, + librsvg, + gdk-pixbuf, + glib, + borgbackup, + writeText, + nixosTests, +}: + +let + python = python3.override { + packageOverrides = final: prev: { + django = prev.django_5.overridePythonAttrs (old: { + dependencies = old.dependencies ++ prev.django_5.optional-dependencies.argon2; + }); + sentry-sdk = prev.sentry-sdk_2; + djangorestframework = prev.djangorestframework.overridePythonAttrs (old: { + # https://github.com/encode/django-rest-framework/discussions/9342 + disabledTests = (old.disabledTests or [ ]) ++ [ "test_invalid_inputs" ]; + }); + celery = prev.celery.overridePythonAttrs (old: { + dependencies = old.dependencies ++ prev.celery.optional-dependencies.redis; + }); + python-redis-lock = prev.python-redis-lock.overridePythonAttrs (old: { + dependencies = old.dependencies ++ prev.python-redis-lock.optional-dependencies.django; + }); + }; + }; +in +python.pkgs.buildPythonApplication rec { + pname = "weblate"; + version = "5.6.2"; + + pyproject = true; + + outputs = [ + "out" + "static" + ]; + + src = fetchFromGitHub { + owner = "WeblateOrg"; + repo = "weblate"; + rev = "weblate-${version}"; + sha256 = "sha256-t/hnigsKjdWCkUd8acNWhYVFmZ7oGn74+12347MkFgM="; + }; + + patches = [ + # FIXME This shouldn't be necessary and probably has to do with some dependency mismatch. + ./cache.lock.patch + ]; + + # Relax dependency constraints + # mistletoe: https://github.com/WeblateOrg/weblate/commit/50df46a25dda2b7b39de86d4c65ecd7a685f62e6 + # borgbackup: https://github.com/WeblateOrg/weblate/commit/355c81c977c59948535a98a35a5c05d7e6909703 + # django-crispy-forms: https://github.com/WeblateOrg/weblate/commit/7b341c523ed9b3b41ecfbc5c92dd6156992e4f32 + postPatch = '' + substituteInPlace pyproject.toml \ + --replace '"mistletoe>=1.3.0,<1.4"' '"mistletoe>=1.3.0,<1.5"' \ + --replace '"borgbackup>=1.2.5,<1.3"' '"borgbackup>=1.2.5,<1.5"' \ + --replace '"django-crispy-forms>=2.1,<2.3"' '"django-crispy-forms>=2.1,<2.4"' + ''; + + build-system = with python.pkgs; [ setuptools ]; + + # Build static files into a separate output + postBuild = + let + staticSettings = writeText "static_settings.py" '' + STATIC_ROOT = os.environ["static"] + "/static" + COMPRESS_ENABLED = True + COMPRESS_OFFLINE = True + COMPRESS_ROOT = os.environ["static"] + "/compressor-cache" + # So we don't need postgres dependencies + DATABASES = {} + ''; + in + '' + mkdir $static + cat weblate/settings_example.py ${staticSettings} > weblate/settings_static.py + export DJANGO_SETTINGS_MODULE="weblate.settings_static" + ${python.pythonOnBuildForHost.interpreter} manage.py collectstatic --no-input + ${python.pythonOnBuildForHost.interpreter} manage.py compress + ''; + + dependencies = with python.pkgs; [ + aeidon + ahocorasick-rs + borgbackup + celery + certifi + charset-normalizer + django-crispy-bootstrap3 + cryptography + cssselect + cython + diff-match-patch + django-appconf + django-celery-beat + django-compressor + django-cors-headers + django-crispy-forms + django-filter + django-redis + django + djangorestframework + filelock + fluent-syntax + gitpython + hiredis + html2text + iniparse + jsonschema + lxml + misaka + mistletoe + nh3 + openpyxl + packaging + phply + pillow + pycairo + pygments + pygobject3 + pyicumessageformat + pyparsing + python-dateutil + python-redis-lock + rapidfuzz + redis + requests + ruamel-yaml + sentry-sdk + siphashc + social-auth-app-django + social-auth-core + tesserocr + translate-toolkit + translation-finder + user-agents + weblate-language-data + weblate-schemas + ]; + + optional-dependencies = { + postgres = with python.pkgs; [ psycopg ]; + }; + + # We don't just use wrapGAppsNoGuiHook because we need to expose GI_TYPELIB_PATH + GI_TYPELIB_PATH = lib.makeSearchPathOutput "out" "lib/girepository-1.0" [ + pango + harfbuzz + librsvg + gdk-pixbuf + glib + ]; + makeWrapperArgs = [ "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\"" ]; + + passthru = { + inherit python; + # We need to expose this so weblate can work outside of calling its bin output + inherit GI_TYPELIB_PATH; + tests = { + inherit (nixosTests) weblate; + }; + }; + + meta = with lib; { + description = "Web based translation tool with tight version control integration"; + homepage = "https://weblate.org/"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = with maintainers; [ erictapen ]; + }; +}