Repository: WeblateOrg/weblate

Issue:
Cannot commit pending changes
<!--
Thank you for reporting an issue on Weblate! Here are a few things to note:

* This template will guide you to create a useful issue report, so please do NOT delete it.
* The description blocks like this one are comments and won't be shown in the issue once it’s created.
* Please write your text outside them or replace them.
* In case you are pasting logs, please place them inside tripple backticks:

```
log content
```
-->

**Describe the issue**

We're running a weblate instance on https://l10n.xwiki.org on which we have a project with 87 linked components. Recently a new language has been added to the root component which is also the biggest in term of number of keys (3609 keys). Since then is seems that we cannot commit the pending changes on this project: at first we had "only" 2Gb of RAM on the server, and we kept getting the process killed by OOM, so we started to increase the memory, we now have 5Gb of RAM and 5Gb of swap on the server. 
Now the process is not killed anymore apparently, but whenever I try to commit the pending changes nothing happens and/or I obtain the following error:
```
Timeout at /js/git/xwiki-platform/
The file lock '/var/weblate/data/vcs/xwiki-platform/xwiki-core-resources.lock' could not be acquired.
```

**I already tried**

As explained I already tried to put more memory on the server, without much success. I also try to disable celery to only trigger the commit changes synchronously, but without much success. 
I did not find any errors in the logs, except the one concerning the lock. 
Note that I checked the repository manually I rebased it already without any issue, and nothing is committed besides what's in https://github.com/xwiki/xwiki-platform/pull/1621 which I cannot really merge right now. Anyway I don't think that's an issue here. 
Also I noticed that the repository contained uncommitted files such as: `ApplicationResources_id.propertiesfor1d8o6`, where my filemask is `ApplicationResources_*.properties` and the new language is indeed indonesian. I tried several times to delete those files (which are empty), but apparently it doesn't change anything. 

So far the only move I can think of, would be to add more memory, but I don't know how much memory I'd need and usually we manage to run our Weblate server with only 2Gb so that's a bit worrying to need that much memory for adding a new language.

- [x] I've read and searched [the docs](https://docs.weblate.org/) and did not find the answer there.
      If you didn’t try already, try to search there what you wrote above.

**Exception traceback**

<!--
In case you observed server error or crash, please see
<https://docs.weblate.org/en/latest/contributing/debugging.html>
for information how to obtain that.
-->

Here's the full trace I obtain in case of lock error:
```
Internal Server Error: /js/git/xwiki-platform/

Timeout at /js/git/xwiki-platform/
The file lock '/var/weblate/data/vcs/xwiki-platform/xwiki-core-resources.lock' could not be acquired.

Request Method: GET
Request URL: https://l10n.xwiki.org/js/git/xwiki-platform/
Django Version: 3.1.5
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.7.3
Python Path: ['/home/weblate/weblate-env/lib/python3.7/site-packages/git/ext/gitdb', '/', '.', '', '/home/weblate/weblate-env/lib/python37.zip', '/home/weblate/weblate-env/lib/python3.7', '/home/weblate/weblate-env/lib/python3.7/lib-dynload', '/usr/lib/python3.7', '/home/weblate/weblate-env/lib/python3.7/site-packages', '/home/weblate/weblate-env/lib/python3.7/site-packages/gitdb/ext/smmap']
Server time: Wed, 19 May 2021 08:09:11 +0000
Installed Applications:
['weblate.addons',
 'weblate.auth',
 'weblate.checks',
 'weblate.configuration',
 'weblate.formats',
 'weblate.glossary',
 'weblate.machinery',
 'weblate.trans',
 'weblate.lang',
 'weblate_language_data',
 'weblate.memory',
 'weblate.screenshots',
 'weblate.fonts',
 'weblate.accounts',
 'weblate.utils',
 'weblate.vcs',
 'weblate.wladmin',
 'weblate',
 'weblate.gitexport',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin.apps.SimpleAdminConfig',
 'django.contrib.admindocs',
 'django.contrib.sitemaps',
 'django.contrib.humanize',
 'social_django',
 'crispy_forms',
 'compressor',
 'rest_framework',
 'rest_framework.authtoken',
 'django_filters']
Installed Middleware:
['weblate.middleware.RedirectMiddleware',
 'weblate.middleware.ProxyMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'weblate.accounts.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'social_django.middleware.SocialAuthExceptionMiddleware',
 'weblate.accounts.middleware.RequireLoginMiddleware',
 'weblate.api.middleware.ThrottlingMiddleware',
 'weblate.middleware.SecurityMiddleware']


Traceback (most recent call last):
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/trans/views/js.py", line 177, in git_status_project
    return git_status_shared(request, obj, obj.all_repo_components)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/trans/views/js.py", line 168, in git_status_shared
    "missing_commits": sum(repo.count_repo_missing for repo in repositories),
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/shortcuts.py", line 19, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/defaulttags.py", line 516, in render
    return self.nodelist.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/defaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 988, in render
    output = self.filter_expression.resolve(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 671, in resolve
    obj = self.var.resolve(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 796, in resolve
    value = self._resolve_lookup(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 858, in _resolve_lookup
    current = current()
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/vcs/base.py", line 276, in status
    with self.lock:
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/filelock.py", line 323, in __enter__
    self.acquire()
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/filelock.py", line 278, in acquire
    raise Timeout(self._lock_file)

Exception Type: Timeout at /js/git/xwiki-platform/
Exception Value: The file lock '/var/weblate/data/vcs/xwiki-platform/xwiki-core-resources.lock' could not be acquired.
Request information:
USER: Simon Urli

GET: No GET data

POST: No POST data

FILES: No FILES data

COOKIES:[COOKIE INFO]

META:
CONTENT_LENGTH = ''
CONTENT_TYPE = ''
CSRF_COOKIE = 'DCP9uKKJxpmzjz9k0etf8EyinNQ61b0vsxxMM7U7cJzo2WHu6HaoCK9bI2ws7KBa'
CSRF_COOKIE_USED = True
DOCUMENT_ROOT = '/var/www/html'
HTTPS = 'on'
HTTP_ACCEPT = 'text/html, */*; q=0.01'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'fr,en-US;q=0.7,en;q=0.3'
HTTP_CONNECTION = 'keep-alive'
HTTP_COOKIE = '[COOKIE INFO]'
HTTP_DNT = '1'
HTTP_HOST = 'l10n.xwiki.org'
HTTP_REFERER = 'https://l10n.xwiki.org/'
HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0'
HTTP_X_REQUESTED_WITH = 'XMLHttpRequest'
PATH_INFO = '/js/git/xwiki-platform/'
QUERY_STRING = ''
REMOTE_ADDR = '212.198.27.104'
REMOTE_PORT = '51150'
REQUEST_METHOD = 'GET'
REQUEST_SCHEME = 'https'
REQUEST_URI = '/js/git/xwiki-platform/'
SCRIPT_NAME = ''
SERVER_NAME = 'l10n.xwiki.org'
SERVER_PORT = '443'
SERVER_PROTOCOL = 'HTTP/1.1'
WEBLATE_LANGUAGE = ''
WEBLATE_USER = "'surli'"
WEBLATE_VERSION:Cython = '0.29.21'
WEBLATE_VERSION:Django = '3.1.5'
WEBLATE_VERSION:Git = '2.20.1'
WEBLATE_VERSION:GitPython = '3.1.8'
WEBLATE_VERSION:Pillow = '7.1.2'
WEBLATE_VERSION:PostgreSQL server = '11.11'
WEBLATE_VERSION:Python = '3.7.3'
WEBLATE_VERSION:Redis server = '5.0.3'
WEBLATE_VERSION:Weblate = '4.4.2'
WEBLATE_VERSION:Whoosh = '2.7.4'
WEBLATE_VERSION:bleach = '3.1.5'
WEBLATE_VERSION:borgbackup = '1.1.13'
WEBLATE_VERSION:celery = '4.4.7'
WEBLATE_VERSION:chardet = '3.0.4'
WEBLATE_VERSION:diff-match-patch = '20200713'
WEBLATE_VERSION:django-appconf = '1.0.4'
WEBLATE_VERSION:django-compressor = '2.4'
WEBLATE_VERSION:django-crispy-forms = '1.9.2'
WEBLATE_VERSION:django-filter = '2.4.0'
WEBLATE_VERSION:django-redis = '4.12.1'
WEBLATE_VERSION:djangorestframework = '3.11.1'
WEBLATE_VERSION:filelock = '3.0.12'
WEBLATE_VERSION:hiredis = '1.0.1'
WEBLATE_VERSION:html2text = '2020.1.16'
WEBLATE_VERSION:jellyfish = '0.8.2'
WEBLATE_VERSION:kombu = '4.6.11'
WEBLATE_VERSION:lxml = '4.5.2'
WEBLATE_VERSION:misaka = '2.1.1'
WEBLATE_VERSION:oauthlib = '3.1.0'
WEBLATE_VERSION:openpyxl = '3.0.5'
WEBLATE_VERSION:psycopg2-binary = '2.8.6'
WEBLATE_VERSION:pycairo = '1.19.1'
WEBLATE_VERSION:pygobject = '3.38.0'
WEBLATE_VERSION:pyparsing = '2.4.7'
WEBLATE_VERSION:python-dateutil = '2.8.1'
WEBLATE_VERSION:requests = '2.24.0'
WEBLATE_VERSION:ruamel.yaml = '0.16.12'
WEBLATE_VERSION:sentry_sdk = '0.15.1'
WEBLATE_VERSION:setuptools = '50.3.0'
WEBLATE_VERSION:siphashc = '1.3'
WEBLATE_VERSION:social-auth-app-django = '4.0.0'
WEBLATE_VERSION:social-auth-core = '4.0.3'
WEBLATE_VERSION:translate-toolkit = '3.3.0'
WEBLATE_VERSION:translation-finder = '2.7'
WEBLATE_VERSION:user-agents = '2.1'
WEBLATE_VERSION:weblate-language-data = '2020.13'
uwsgi.node = b'l10n-prod'
uwsgi.version = b'2.0.18-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = <built-in function uwsgi_sendfile>
wsgi.input = <uwsgi._Input object at 0x7fa2ac98ffd8>
wsgi.multiprocess = True
wsgi.multithread = False
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'

Settings:
Using settings module weblate.settings
ABSOLUTE_URL_OVERRIDES = {}
ADMINS = "(('XWiki.org Infra', 'simon.urli+weblate@xwiki.com'),)"
ADMINS_BILLING = []
ADMINS_CONTACT = []
ADMINS_HOSTING = []
AKISMET_API_KEY = '********************'
ALLOWED_HOSTS = ['l10n.xwiki.org', 'l10n-new.xwiki.org', '[IP]', '*']
ANONYMOUS_USER_NAME = 'anonymous'
APPEND_SLASH = True
AUDITLOG_EXPIRY = 180
AUTHENTICATION_BACKENDS = "('social_core.backends.email.EmailAuth', 'social_core.backends.github.GithubOAuth2', 'social_core.backends.suse.OpenSUSEOpenId', 'social_core.backends.ubuntu.UbuntuOpenId', 'social_core.backends.fedora.FedoraOpenId', 'weblate.accounts.auth.WeblateUserBackend', 'weblate.auth.xwiki.XWikiOAuth2')"
AUTH_LOCK_ATTEMPTS = 10
AUTH_PASSWORD_DAYS = '********************'
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_RESTRICT_ADMINS = {}
AUTH_TOKEN_VALID = '********************'
AUTH_USER_MODEL = 'weblate_auth.User'
AUTH_VALIDATE_PERMS = False
AUTOFIX_LIST = "('weblate.trans.autofixes.whitespace.SameBookendingWhitespace', 'weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis', 'weblate.trans.autofixes.chars.RemoveZeroSpace', 'weblate.trans.autofixes.chars.RemoveControlChars', 'weblate.trans.autofixes.html.BleachHTML')"
AUTO_UPDATE = True
AVATAR_DEFAULT_IMAGE = 'identicon'
AVATAR_URL_PREFIX = 'https://www.gravatar.com/'
BASE_DIR = '/home/weblate/weblate-env/lib/python3.7/site-packages'
BASIC_LANGUAGES = None
CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'PARSER_CLASS': 'redis.connection.HiredisParser', 'PASSWORD': '********************', 'CONNECTION_POOL_KWARGS': {}}, 'KEY_PREFIX': '********************'}, 'avatar': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/weblate/data/avatar-cache', 'TIMEOUT': 86400, 'OPTIONS': {'MAX_ENTRIES': 1000}}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
CELERY_BEAT_SCHEDULE_FILENAME = '/var/weblate/data/celery/beat-schedule'
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_TASK_ALWAYS_EAGER = False
CELERY_TASK_ROUTES = {'weblate.trans.tasks.auto_translate': {'queue': 'translate'}, 'weblate.accounts.tasks.notify_*': {'queue': 'notify'}, 'weblate.accounts.tasks.send_mails': {'queue': 'notify'}, 'weblate.utils.tasks.settings_backup': {'queue': 'backup'}, 'weblate.utils.tasks.database_backup': {'queue': 'backup'}, 'weblate.wladmin.tasks.backup': {'queue': 'backup'}, 'weblate.wladmin.tasks.backup_service': {'queue': 'backup'}, 'weblate.memory.tasks.*': {'queue': 'memory'}}
CELERY_WORKER_MAX_MEMORY_PER_CHILD = 200000
CHECK_LIST = "('weblate.checks.same.SameCheck', 'weblate.checks.chars.BeginNewlineCheck', 'weblate.checks.chars.EndNewlineCheck', 'weblate.checks.chars.BeginSpaceCheck', 'weblate.checks.chars.EndSpaceCheck', 'weblate.checks.chars.DoubleSpaceCheck', 'weblate.checks.chars.EndStopCheck', 'weblate.checks.chars.EndColonCheck', 'weblate.checks.chars.EndQuestionCheck', 'weblate.checks.chars.EndExclamationCheck', 'weblate.checks.chars.EndEllipsisCheck', 'weblate.checks.chars.EndSemicolonCheck', 'weblate.checks.chars.MaxLengthCheck', 'weblate.checks.chars.KashidaCheck', 'weblate.checks.chars.PunctuationSpacingCheck', 'weblate.checks.format.PythonFormatCheck', 'weblate.checks.format.PythonBraceFormatCheck', 'weblate.checks.format.PHPFormatCheck', 'weblate.checks.format.CFormatCheck', 'weblate.checks.format.PerlFormatCheck', 'weblate.checks.format.JavaScriptFormatCheck', 'weblate.checks.format.CSharpFormatCheck', 'weblate.checks.format.JavaFormatCheck', 'weblate.checks.format.JavaMessageFormatCheck', 'weblate.checks.format.PercentPlaceholdersCheck', 'weblate.checks.format.VueFormattingCheck', 'weblate.checks.format.I18NextInterpolationCheck', 'weblate.checks.format.ESTemplateLiteralsCheck', 'weblate.checks.angularjs.AngularJSInterpolationCheck', 'weblate.checks.qt.QtFormatCheck', 'weblate.checks.qt.QtPluralCheck', 'weblate.checks.ruby.RubyFormatCheck', 'weblate.checks.consistency.PluralsCheck', 'weblate.checks.consistency.SamePluralsCheck', 'weblate.checks.consistency.ConsistencyCheck', 'weblate.checks.consistency.TranslatedCheck', 'weblate.checks.chars.EscapedNewlineCountingCheck', 'weblate.checks.chars.NewLineCountCheck', 'weblate.checks.markup.BBCodeCheck', 'weblate.checks.chars.ZeroWidthSpaceCheck', 'weblate.checks.render.MaxSizeCheck', 'weblate.checks.markup.XMLValidityCheck', 'weblate.checks.markup.XMLTagsCheck', 'weblate.checks.markup.MarkdownRefLinkCheck', 'weblate.checks.markup.MarkdownLinkCheck', 'weblate.checks.markup.MarkdownSyntaxCheck', 'weblate.checks.markup.URLCheck', 'weblate.checks.markup.SafeHTMLCheck', 'weblate.checks.placeholders.PlaceholderCheck', 'weblate.checks.placeholders.RegexCheck', 'weblate.checks.duplicate.DuplicateCheck', 'weblate.checks.source.OptionalPluralCheck', 'weblate.checks.source.EllipsisCheck', 'weblate.checks.source.MultipleFailingCheck', 'weblate.checks.source.LongUntranslatedCheck', 'weblate.checks.format.MultipleUnnamedFormatsCheck')"
COMMENT_CLEANUP_DAYS = None
COMMIT_PENDING_HOURS = 1
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 'js': ['compressor.filters.jsmin.JSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7fa2aef0f9d8>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = [{'fonts_cdn_url': None, 'STATIC_URL': '/static/', 'LANGUAGE_BIDI': True}, {'fonts_cdn_url': None, 'STATIC_URL': '/static/', 'LANGUAGE_BIDI': False}]
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = '()'
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/weblate/data/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CRISPY_TEMPLATE_PACK = 'bootstrap3'
CSP_CONNECT_SRC = []
CSP_FONT_SRC = []
CSP_IMG_SRC = []
CSP_SCRIPT_SRC = []
CSP_STYLE_SRC = []
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = True
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = True
CSRF_FAILURE_VIEW = 'weblate.trans.views.error.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = True
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'weblate', 'USER': 'weblate', 'PASSWORD': '********************', 'HOST': '127.0.0.1', 'PORT': '', 'OPTIONS': {}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_BACKUP = 'plain'
DATABASE_ROUTERS = []
DATA_DIR = '/var/weblate/data'
DATA_UPLOAD_MAX_MEMORY_SIZE = 50000000
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_ACCESS_CONTROL = 0
DEFAULT_ADDONS = {}
DEFAULT_ADDON_MESSAGE = 'Update translation files\n\nUpdated by "{{ addon_name }}" hook in Weblate.\n\nTranslation: {{ project_name }}/{{ component_name }}\nTranslate-URL: {{ url }}'
DEFAULT_ADD_MESSAGE = 'Added translation using Weblate ({{ language_name }})\n\n'
DEFAULT_AUTO_LOCK_ERROR = True
DEFAULT_CHARSET = 'utf-8'
DEFAULT_COMMITER_EMAIL = 'noreply@weblate.org'
DEFAULT_COMMITER_NAME = 'Weblate'
DEFAULT_COMMIT_MESSAGE = 'Translated using Weblate ({{ language_name }})\n\nCurrently translated at {{ stats.translated_percent }}% ({{ stats.translated }} of {{ stats.all }} strings)\n\nTranslation: {{ project_name }}/{{ component_name }}\nTranslate-URL: {{ url }}'
DEFAULT_DELETE_MESSAGE = 'Deleted translation using Weblate ({{ language_name }})\n\n'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'weblate.trans.debug.WeblateExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'noreply-weblate@xwiki.org'
DEFAULT_HASHING_ALGORITHM = 'sha256'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_LANGUAGE = 'en'
DEFAULT_LOG = 'syslog'
DEFAULT_LOGLEVEL = 'INFO'
DEFAULT_MERGE_MESSAGE = "Merge branch '{{ component_remote_branch }}' into Weblate.\n\n"
DEFAULT_MERGE_STYLE = 'rebase'
DEFAULT_PULL_MESSAGE = 'Translations update from Weblate\n\nTranslations update from [Weblate]({{url}}) for {{ project_name }}/{{ component_name }}.\n\n{% if component.linked_childs %}\nIt also includes following components:\n{% for linked in component.linked_child %}\n{{ component.project.name }}/{{ component.name }}\n{% endfor %}\n{% endif %}\n\nCurrent translation status:\n\n![Weblate translation status]({{widget_url}})\n\nIf a new locale is introduced by this pull request make sure to follow https://dev.xwiki.org/xwiki/bin/view/Community/L10N/SupportedLocales/#HNewlocalechecklist before applying it.\n'
DEFAULT_PUSH_ON_COMMIT = True
DEFAULT_RESTRICTED_COMPONENT = False
DEFAULT_SHARED_TM = True
DEFAULT_TABLESPACE = ''
DEFAULT_TRANSLATION_PROPAGATION = True
DEFAULT_VCS = 'git'
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SEND_HTML = True
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Weblate XWiki.org] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
ENABLE_AVATARS = True
ENABLE_HOOKS = True
ENABLE_HTTPS = True
ENABLE_SHARING = True
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FONTS_CDN_URL = None
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
GITHUB_CREDENTIALS = {}
GITHUB_TOKEN = '********************'
GITHUB_USERNAME = 'xwikiorgci'
GITLAB_CREDENTIALS = {}
GITLAB_TOKEN = '********************'
GITLAB_USERNAME = None
GOOGLE_ANALYTICS_ID = None
HAVE_SYSLOG = True
HIDE_REPO_CREDENTIALS = True
HIDE_VERSION = False
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['weblate.addons', 'weblate.auth', 'weblate.checks', 'weblate.configuration', 'weblate.formats', 'weblate.glossary', 'weblate.machinery', 'weblate.trans', 'weblate.lang', 'weblate_language_data', 'weblate.memory', 'weblate.screenshots', 'weblate.fonts', 'weblate.accounts', 'weblate.utils', 'weblate.vcs', 'weblate.wladmin', 'weblate', 'weblate.gitexport', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin.apps.SimpleAdminConfig', 'django.contrib.admindocs', 'django.contrib.sitemaps', 'django.contrib.humanize', 'social_django', 'crispy_forms', 'compressor', 'rest_framework', 'rest_framework.authtoken', 'django_filters']
INTERNAL_IPS = []
INVOICE_PATH = ''
IP_BEHIND_REVERSE_PROXY = False
IP_PROXY_HEADER = 'HTTP_X_FORWARDED_FOR'
IP_PROXY_OFFSET = 0
LANGUAGES = "(('ar', 'العربية'), ('az', 'Azərbaycan'), ('be', 'Беларуская'), ('be@latin', 'Biełaruskaja'), ('bg', 'Български'), ('br', 'Brezhoneg'), ('ca', 'Català'), ('cs', 'Čeština'), ('da', 'Dansk'), ('de', 'Deutsch'), ('en', 'English'), ('el', 'Ελληνικά'), ('en-gb', 'English (United Kingdom)'), ('es', 'Español'), ('fi', 'Suomi'), ('fr', 'Français'), ('gl', 'Galego'), ('he', 'עברית'), ('hu', 'Magyar'), ('hr', 'Hrvatski'), ('id', 'Indonesia'), ('is', 'Íslenska'), ('it', 'Italiano'), ('ja', '日本語'), ('kab', 'Taqbaylit'), ('kk', 'Қазақ тілі'), ('ko', '한국어'), ('nb', 'Norsk bokmål'), ('nl', 'Nederlands'), ('pl', 'Polski'), ('pt', 'Português'), ('pt-br', 'Português brasileiro'), ('ru', 'Русский'), ('sk', 'Slovenčina'), ('sl', 'Slovenščina'), ('sq', 'Shqip'), ('sr', 'Српски'), ('sv', 'Svenska'), ('tr', 'Türkçe'), ('uk', 'Українська'), ('zh-hans', '简体字'), ('zh-hant', '正體字'))"
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = 12096000
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = True
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = True
LEGAL_URL = None
LICENSE_EXTRA = []
LICENSE_FILTER = None
LICENSE_REQUIRED = False
LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH = True
LOCALE_PATHS = []
LOCALIZE_CDN_PATH = None
LOCALIZE_CDN_URL = None
LOGGING = {'version': 1, 'disable_existing_loggers': True, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'formatters': {'syslog': {'format': 'weblate[%(process)d]: %(levelname)s %(message)s'}, 'simple': {'format': '[%(asctime)s: %(levelname)s/%(process)s] %(message)s'}, 'logfile': {'format': '%(asctime)s %(levelname)s %(message)s'}, 'django.server': {'()': 'django.utils.log.ServerFormatter', 'format': '[%(server_time)s] %(message)s'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler', 'include_html': True}, 'console': {'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple'}, 'django.server': {'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'django.server'}, 'syslog': {'level': 'DEBUG', 'class': 'logging.handlers.SysLogHandler', 'formatter': 'syslog', 'address': '/dev/log', 'facility': 18}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'syslog'], 'level': 'ERROR', 'propagate': True}, 'django.server': {'handlers': ['django.server'], 'level': 'INFO', 'propagate': False}, 'weblate': {'handlers': ['syslog'], 'level': 'INFO'}, 'weblate.vcs': {'handlers': ['syslog'], 'level': 'INFO'}, 'social': {'handlers': ['syslog'], 'level': 'INFO'}, 'django_auth_ldap': {'handlers': ['syslog'], 'level': 'INFO'}, 'djangosaml2idp': {'handlers': ['syslog'], 'level': 'INFO'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = '/'
LOGIN_REQUIRED_URLS = []
LOGIN_REQUIRED_URLS_EXCEPTIONS = "('{URL_PREFIX}/accounts/(.*)$', '{URL_PREFIX}/admin/login/(.*)$', '{URL_PREFIX}/static/(.*)$', '{URL_PREFIX}/widgets/(.*)$', '{URL_PREFIX}/data/(.*)$', '{URL_PREFIX}/hooks/(.*)$', '{URL_PREFIX}/healthz/$', '{URL_PREFIX}/api/(.*)$', '{URL_PREFIX}/js/i18n/$', '{URL_PREFIX}/contact/$', '{URL_PREFIX}/legal/(.*)$')"
LOGIN_URL = '/accounts/login/'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = '/accounts/logout/'
MANAGERS = "(('XWiki.org Infra', 'simon.urli+weblate@xwiki.com'),)"
MATOMO_SITE_ID = None
MATOMO_URL = None
MEDIA_ROOT = '/var/weblate/data/media'
MEDIA_URL = '/media/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
MIDDLEWARE = ['weblate.middleware.RedirectMiddleware', 'weblate.middleware.ProxyMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'weblate.accounts.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'social_django.middleware.SocialAuthExceptionMiddleware', 'weblate.accounts.middleware.RequireLoginMiddleware', 'weblate.api.middleware.ThrottlingMiddleware', 'weblate.middleware.SecurityMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
MT_APERTIUM_APY = None
MT_AWS_ACCESS_KEY_ID = '********************'
MT_AWS_REGION = None
MT_AWS_SECRET_ACCESS_KEY = '********************'
MT_BAIDU_ID = None
MT_BAIDU_SECRET = '********************'
MT_DEEPL_API_VERSION = '********************'
MT_DEEPL_KEY = '********************'
MT_GOOGLE_CREDENTIALS = None
MT_GOOGLE_KEY = '********************'
MT_GOOGLE_LOCATION = 'global'
MT_GOOGLE_PROJECT = None
MT_MICROSOFT_BASE_URL = 'api.cognitive.microsofttranslator.com'
MT_MICROSOFT_COGNITIVE_KEY = '********************'
MT_MICROSOFT_ENDPOINT_URL = 'api.cognitive.microsoft.com'
MT_MICROSOFT_REGION = None
MT_MODERNMT_KEY = '********************'
MT_MODERNMT_URL = 'https://api.modernmt.com/'
MT_MYMEMORY_EMAIL = None
MT_MYMEMORY_KEY = '********************'
MT_MYMEMORY_USER = None
MT_NETEASE_KEY = '********************'
MT_NETEASE_SECRET = '********************'
MT_SAP_BASE_URL = None
MT_SAP_PASSWORD = '********************'
MT_SAP_SANDBOX_APIKEY = '********************'
MT_SAP_USERNAME = None
MT_SAP_USE_MT = True
MT_SERVICES = "('weblate.machinery.weblatetm.WeblateTranslation', 'weblate.memory.machine.WeblateMemory')"
MT_TMSERVER = None
MT_YANDEX_KEY = '********************'
MT_YOUDAO_ID = None
MT_YOUDAO_SECRET = '********************'
NEARBY_MESSAGES = 15
NUMBER_GROUPING = 0
OFFER_HOSTING = False
PAGURE_CREDENTIALS = {}
PAGURE_TOKEN = '********************'
PAGURE_USERNAME = None
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
PREPEND_WWW = False
RATELIMIT_ATTEMPTS = 5
RATELIMIT_COMMENT_ATTEMPTS = 30
RATELIMIT_COMMENT_WINDOW = 60
RATELIMIT_GLOSSARY_ATTEMPTS = 30
RATELIMIT_GLOSSARY_WINDOW = 60
RATELIMIT_LOCKOUT = 600
RATELIMIT_SEARCH_ATTEMPTS = 30
RATELIMIT_SEARCH_LOCKOUT = 60
RATELIMIT_SEARCH_WINDOW = 60
RATELIMIT_TRANSLATE_ATTEMPTS = 30
RATELIMIT_TRANSLATE_WINDOW = 60
RATELIMIT_WINDOW = 300
REGISTRATION_ALLOW_BACKENDS = []
REGISTRATION_CAPTCHA = True
REGISTRATION_EMAIL_MATCH = '.*'
REGISTRATION_OPEN = True
REPOSITORY_ALERT_THRESHOLD = 25
REQUIRE_LOGIN = False
REST_FRAMEWORK = {'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticatedOrReadOnly'], 'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.TokenAuthentication', 'weblate.api.authentication.BearerAuthentication', 'rest_framework.authentication.SessionAuthentication'), 'DEFAULT_THROTTLE_CLASSES': ('weblate.api.throttling.UserRateThrottle', 'weblate.api.throttling.AnonRateThrottle'), 'DEFAULT_THROTTLE_RATES': {'anon': '100/day', 'user': '5000/hour'}, 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 20, 'VIEW_DESCRIPTION_FUNCTION': 'weblate.api.views.get_view_description', 'UNAUTHENTICATED_USER': 'weblate.auth.models.get_anonymous'}
ROOT_URLCONF = 'weblate.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_SECONDS = 31536000
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = "('healthz/$',)"
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = True
SENTRY_DSN = None
SENTRY_ENVIRONMENT = 'devel'
SENTRY_EXTRA_ARGS = {}
SENTRY_ORGANIZATION = 'weblate'
SENTRY_PROJECTS = ['weblate']
SENTRY_SECURITY = None
SENTRY_TOKEN = '********************'
SERVER_EMAIL = 'noreply-weblate@xwiki.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1000
SESSION_COOKIE_AGE_AUTHENTICATED = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = True
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'weblate.settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = ['admin.E408']
SIMILAR_MESSAGES = 5
SIMPLIFY_LANGUAGES = True
SINGLE_PROJECT = False
SITE_DOMAIN = 'l10n.xwiki.org'
SITE_ID = 1
SITE_TITLE = 'Weblate XWiki.org'
SOCIAL_AUTH_AUTH0_IMAGE = 'auth0.svg'
SOCIAL_AUTH_AUTH0_TITLE = 'Auth0'
SOCIAL_AUTH_BITBUCKET_KEY = '********************'
SOCIAL_AUTH_BITBUCKET_SECRET = '********************'
SOCIAL_AUTH_BITBUCKET_VERIFIED_EMAILS_ONLY = True
SOCIAL_AUTH_DISCONNECT_PIPELINE = "('social_core.pipeline.disconnect.allowed_to_disconnect', 'social_core.pipeline.disconnect.get_entries', 'social_core.pipeline.disconnect.revoke_tokens', 'weblate.accounts.pipeline.cycle_session', 'weblate.accounts.pipeline.adjust_primary_mail', 'weblate.accounts.pipeline.notify_disconnect', 'social_core.pipeline.disconnect.disconnect', 'weblate.accounts.pipeline.cleanup_next')"
SOCIAL_AUTH_EMAIL_FORM_URL = '/accounts/email/'
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'weblate.accounts.pipeline.send_validation'
SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/accounts/email-sent/'
SOCIAL_AUTH_FACEBOOK_KEY = '********************'
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {'fields': 'id,name,email'}
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'public_profile']
SOCIAL_AUTH_FACEBOOK_SECRET = '********************'
SOCIAL_AUTH_GITHUB_KEY = '********************'
SOCIAL_AUTH_GITHUB_SCOPE = ['user:email']
SOCIAL_AUTH_GITHUB_SECRET = '********************'
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '********************'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '********************'
SOCIAL_AUTH_LOGIN_ERROR_URL = '/accounts/login/'
SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/accounts/profile/#account'
SOCIAL_AUTH_PIPELINE = "('social_core.pipeline.social_auth.social_details', 'social_core.pipeline.social_auth.social_uid', 'social_core.pipeline.social_auth.auth_allowed', 'social_core.pipeline.social_auth.social_user', 'weblate.accounts.pipeline.store_params', 'weblate.accounts.pipeline.verify_open', 'social_core.pipeline.user.get_username', 'weblate.accounts.pipeline.require_email', 'social_core.pipeline.mail.mail_validation', 'weblate.accounts.pipeline.revoke_mail_code', 'weblate.accounts.pipeline.ensure_valid', 'weblate.accounts.pipeline.remove_account', 'social_core.pipeline.social_auth.associate_by_email', 'weblate.accounts.pipeline.reauthenticate', 'weblate.accounts.pipeline.verify_username', 'social_core.pipeline.user.create_user', 'social_core.pipeline.social_auth.associate_user', 'social_core.pipeline.social_auth.load_extra_data', 'weblate.accounts.pipeline.cleanup_next', 'weblate.accounts.pipeline.user_full_name', 'weblate.accounts.pipeline.store_email', 'weblate.accounts.pipeline.notify_connect', 'weblate.accounts.pipeline.password_reset')"
SOCIAL_AUTH_PROTECTED_USER_FIELDS = "('email',)"
SOCIAL_AUTH_RAISE_EXCEPTIONS = True
SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
SOCIAL_AUTH_SAML_IMAGE = 'saml.svg'
SOCIAL_AUTH_SAML_TITLE = 'SAML'
SOCIAL_AUTH_SLUGIFY_FUNCTION = 'weblate.accounts.pipeline.slugify_username'
SOCIAL_AUTH_SLUGIFY_USERNAMES = True
SOCIAL_AUTH_STRATEGY = 'weblate.accounts.strategy.WeblateStrategy'
SOCIAL_AUTH_XWIKI_KEY = '********************'
SPECIAL_CHARS = "('\\t', '\\n', '\\xa0', '…')"
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/weblate/data/static'
STATIC_URL = '/static/'
STATUS_URL = None
SUGGESTION_CLEANUP_DAYS = None
SUPPORT_API_URL = '********************'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'OPTIONS': {'context_processors': ['django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.request', 'django.template.context_processors.csrf', 'django.contrib.messages.context_processors.messages', 'weblate.trans.context_processors.weblate_context'], 'loaders': [('django.template.loaders.cached.Loader', ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'])]}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
UPDATE_LANGUAGES = True
URL_PREFIX = ''
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
VAT_RATE = 1.21
VCS_BACKENDS = "('weblate.vcs.git.GitRepository', 'weblate.vcs.git.GitWithGerritRepository', 'weblate.vcs.git.SubversionRepository', 'weblate.vcs.git.GithubRepository', 'weblate.vcs.git.GitLabRepository', 'weblate.vcs.git.PagureRepository', 'weblate.vcs.git.LocalRepository', 'weblate.vcs.git.GitForcePushRepository', 'weblate.vcs.mercurial.HgRepository')"
VCS_CLONE_DEPTH = 1
WEBLATE_ADDONS = "('weblate.addons.gettext.GenerateMoAddon', 'weblate.addons.gettext.UpdateLinguasAddon', 'weblate.addons.gettext.UpdateConfigureAddon', 'weblate.addons.gettext.MsgmergeAddon', 'weblate.addons.gettext.GettextCustomizeAddon', 'weblate.addons.gettext.GettextAuthorComments', 'weblate.addons.cleanup.CleanupAddon', 'weblate.addons.cleanup.RemoveBlankAddon', 'weblate.addons.consistency.LangaugeConsistencyAddon', 'weblate.addons.discovery.DiscoveryAddon', 'weblate.addons.autotranslate.AutoTranslateAddon', 'weblate.addons.flags.SourceEditAddon', 'weblate.addons.flags.TargetEditAddon', 'weblate.addons.flags.SameEditAddon', 'weblate.addons.flags.BulkEditAddon', 'weblate.addons.generate.GenerateFileAddon', 'weblate.addons.json.JSONCustomizeAddon', 'weblate.addons.properties.PropertiesSortAddon', 'weblate.addons.git.GitSquashAddon', 'weblate.addons.removal.RemoveComments', 'weblate.addons.removal.RemoveSuggestions', 'weblate.addons.resx.ResxUpdateAddon', 'weblate.addons.yaml.YAMLCustomizeAddon', 'weblate.addons.cdn.CDNJSAddon')"
WEBLATE_EXPORTERS = "('weblate.formats.exporters.PoExporter', 'weblate.formats.exporters.PoXliffExporter', 'weblate.formats.exporters.XliffExporter', 'weblate.formats.exporters.TBXExporter', 'weblate.formats.exporters.TMXExporter', 'weblate.formats.exporters.MoExporter', 'weblate.formats.exporters.CSVExporter', 'weblate.formats.exporters.XlsxExporter', 'weblate.formats.exporters.JSONExporter', 'weblate.formats.exporters.AndroidResourceExporter', 'weblate.formats.exporters.StringsExporter')"
WEBLATE_FORMATS = "('weblate.formats.ttkit.PoFormat', 'weblate.formats.ttkit.PoMonoFormat', 'weblate.formats.ttkit.TSFormat', 'weblate.formats.ttkit.XliffFormat', 'weblate.formats.ttkit.PoXliffFormat', 'weblate.formats.ttkit.StringsFormat', 'weblate.formats.ttkit.StringsUtf8Format', 'weblate.formats.ttkit.PropertiesUtf8Format', 'weblate.formats.ttkit.PropertiesUtf16Format', 'weblate.formats.ttkit.PropertiesFormat', 'weblate.formats.ttkit.JoomlaFormat', 'weblate.formats.ttkit.GWTFormat', 'weblate.formats.ttkit.PhpFormat', 'weblate.formats.ttkit.LaravelPhpFormat', 'weblate.formats.ttkit.RESXFormat', 'weblate.formats.ttkit.AndroidFormat', 'weblate.formats.ttkit.JSONFormat', 'weblate.formats.ttkit.JSONNestedFormat', 'weblate.formats.ttkit.WebExtensionJSONFormat', 'weblate.formats.ttkit.I18NextFormat', 'weblate.formats.ttkit.GoI18JSONFormat', 'weblate.formats.ttkit.ARBFormat', 'weblate.formats.ttkit.CSVFormat', 'weblate.formats.ttkit.CSVSimpleFormat', 'weblate.formats.ttkit.CSVSimpleFormatISO', 'weblate.formats.ttkit.YAMLFormat', 'weblate.formats.ttkit.RubyYAMLFormat', 'weblate.formats.ttkit.SubRipFormat', 'weblate.formats.ttkit.MicroDVDFormat', 'weblate.formats.ttkit.AdvSubStationAlphaFormat', 'weblate.formats.ttkit.SubStationAlphaFormat', 'weblate.formats.ttkit.DTDFormat', 'weblate.formats.ttkit.FlatXMLFormat', 'weblate.formats.ttkit.INIFormat', 'weblate.formats.ttkit.InnoSetupINIFormat', 'weblate.formats.external.XlsxFormat', 'weblate.formats.txt.AppStoreFormat', 'weblate.formats.convert.HTMLFormat', 'weblate.formats.convert.IDMLFormat', 'weblate.formats.convert.OpenDocumentFormat', 'weblate.formats.convert.WindowsRCFormat', 'weblate.formats.ttkit.XWikiPropertiesFormat', 'weblate.formats.ttkit.XWikiPagePropertiesFormat', 'weblate.formats.ttkit.XWikiFullPageFormat')"
WEBLATE_GPG_ALGO = 'default'
WEBLATE_GPG_IDENTITY = None
WSGI_APPLICATION = None
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
_TEMPLATE_LOADERS = [('django.template.loaders.cached.Loader', ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'])]
```

**Server configuration and status**

Weblate installation: PyPI

```
 * Weblate: 4.4.2
 * Django: 3.1.5
 * siphashc: 1.3
 * Whoosh: 2.7.4
 * translate-toolkit: 3.3.0
 * lxml: 4.5.2
 * Pillow: 7.1.2
 * bleach: 3.1.5
 * python-dateutil: 2.8.1
 * social-auth-core: 4.0.3
 * social-auth-app-django: 4.0.0
 * django-crispy-forms: 1.9.2
 * oauthlib: 3.1.0
 * django-compressor: 2.4
 * djangorestframework: 3.11.1
 * django-filter: 2.4.0
 * django-appconf: 1.0.4
 * user-agents: 2.1
 * filelock: 3.0.12
 * setuptools: 50.3.0
 * jellyfish: 0.8.2
 * openpyxl: 3.0.5
 * celery: 4.4.7
 * kombu: 4.6.11
 * translation-finder: 2.7
 * weblate-language-data: 2020.13
 * html2text: 2020.1.16
 * pycairo: 1.19.1
 * pygobject: 3.38.0
 * diff-match-patch: 20200713
 * requests: 2.24.0
 * django-redis: 4.12.1
 * hiredis: 1.0.1
 * sentry_sdk: 0.15.1
 * Cython: 0.29.21
 * misaka: 2.1.1
 * GitPython: 3.1.8
 * borgbackup: 1.1.13
 * pyparsing: 2.4.7
 * Python: 3.7.3
 * Git: 2.20.1
 * psycopg2-binary: 2.8.6
 * chardet: 3.0.4
 * ruamel.yaml: 0.16.12
 * Redis server: 5.0.3
 * PostgreSQL server: 11.11
 * Database backends: django.db.backends.postgresql
 * Cache backends: default:RedisCache, avatar:FileBasedCache
 * Email setup: django.core.mail.backends.smtp.EmailBackend: localhost
 * OS encoding: filesystem=utf-8, default=utf-8
 * Celery: redis://localhost:6379, redis://localhost:6379, regular
 * Platform: Linux 4.19.0-16-amd64 (x86_64)
```

**Additional context**

```
weblate@l10n-prod:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:           5951        5688         103           5         159          55
Swap:          6047        4418        1629
(weblate-env) weblate@l10n-prod:~$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
Address sizes:       40 bits physical, 48 bits virtual
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           4
NUMA node(s):        1
Vendor ID:           AuthenticAMD
CPU family:          21
Model:               16
Model name:          AMD Opteron(tm) Processor 6386 SE
Stepping:            0
CPU MHz:             2800.000
```



Discussion:
Most likely there is another process accessing the repository at this time (it should be visible from the logs). Similar issue as https://github.com/WeblateOrg/weblate/issues/4666
What I should look for in logs? I can see for example in journalctl, the following: 
```
May 19 06:21:05 l10n-prod weblate[17981]: INFO xwiki-commons/xwiki-commons-extension-api: skipped push: nothing to push
May 19 09:15:10 l10n-prod weblate[35362]: INFO xwiki-platform/xwiki-core-resources/id: committing pending changes (commit)
May 19 09:29:17 l10n-prod weblate[17984]: ERROR Internal Server Error: /js/git/xwiki-platform/xwiki-core-resources/
```
So it's not clear that another process access the repo here, unless the access is done because the commitpending is not done and the UI tries to display the repo status?
Also note that for a reason that I don't understand sometime the repository status indicates "69 pending changes" sometimes it indicates "15 pending changes"



I've just noticed that you're on quite old version, can you try upgrading? There has been several changes in the locking meanwhile and it might address this...
> I've just noticed that you're on quite old version, can you try upgrading?

is it safe to upgrade while there's pending changes?
Yes, the only thing to look at are celery queues, these should be empty.<
Hi @nijel so I just upgraded to Weblate 4.6.2 and it seems I keep getting the same behaviour, even though the error is slightly different, now I get this: 
```
Internal Server Error: /js/git/xwiki-platform/

WeblateLockTimeout at /js/git/xwiki-platform/
No exception message supplied

Request Method: GET
Request URL: https://l10n.xwiki.org/js/git/xwiki-platform/
Django Version: 3.1.5
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.7.3
Python Path: ['/home/weblate/weblate-env/lib/python3.7/site-packages/git/ext/gitdb', '/', '.', '', '/home/weblate/weblate-env/lib/python37.zip', '/home/weblate/weblate-env/lib/python3.7', '/home/weblate/weblate-env/lib/python3.7/lib-dynload', '/usr/lib/python3.7', '/home/weblate/weblate-env/lib/python3.7/site-packages', '/home/weblate/weblate-env/lib/python3.7/site-packages/gitdb/ext/smmap']
Server time: Fri, 21 May 2021 08:41:13 +0000
Installed Applications:
['weblate.addons',
 'weblate.auth',
 'weblate.checks',
 'weblate.configuration',
 'weblate.formats',
 'weblate.glossary',
 'weblate.machinery',
 'weblate.trans',
 'weblate.lang',
 'weblate_language_data',
 'weblate.memory',
 'weblate.metrics',
 'weblate.screenshots',
 'weblate.fonts',
 'weblate.accounts',
 'weblate.utils',
 'weblate.vcs',
 'weblate.wladmin',
 'weblate',
 'weblate.gitexport',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin.apps.SimpleAdminConfig',
 'django.contrib.admindocs',
 'django.contrib.sitemaps',
 'django.contrib.humanize',
 'social_django',
 'crispy_forms',
 'compressor',
 'rest_framework',
 'rest_framework.authtoken',
 'django_filters']
Installed Middleware:
['weblate.middleware.RedirectMiddleware',
 'weblate.middleware.ProxyMiddleware',
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'weblate.accounts.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'social_django.middleware.SocialAuthExceptionMiddleware',
 'weblate.accounts.middleware.RequireLoginMiddleware',
 'weblate.api.middleware.ThrottlingMiddleware',
 'weblate.middleware.SecurityMiddleware']


Traceback (most recent call last):
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/trans/views/js.py", line 181, in git_status_project
    return git_status_shared(request, obj, obj.all_repo_components)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/trans/views/js.py", line 172, in git_status_shared
    "missing_commits": sum(repo.count_repo_missing for repo in repositories),
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/shortcuts.py", line 19, in render
    content = loader.render_to_string(template_name, context, request, using=using)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/loader.py", line 62, in render_to_string
    return template.render(context, request)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/defaulttags.py", line 516, in render
    return self.nodelist.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/defaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 988, in render
    output = self.filter_expression.resolve(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 671, in resolve
    obj = self.var.resolve(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 796, in resolve
    value = self._resolve_lookup(context)
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/django/template/base.py", line 858, in _resolve_lookup
    current = current()
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/vcs/base.py", line 292, in status
    with self.lock:
  File "/home/weblate/weblate-env/lib/python3.7/site-packages/weblate/utils/lock.py", line 82, in __enter__
    raise WeblateLockTimeout()

Exception Type: WeblateLockTimeout at /js/git/xwiki-platform/

Request information:
USER: Simon Urli

GET: No GET data

POST: No POST data

FILES: No FILES data

COOKIES:[COOKIE INFO]

META:
CONTENT_LENGTH = ''
CONTENT_TYPE = ''
CSRF_COOKIE = 
CSRF_COOKIE_USED = True
DOCUMENT_ROOT = '/var/www/html'
HTTPS = 'on'
HTTP_ACCEPT = 'text/html, */*; q=0.01'
HTTP_ACCEPT_ENCODING = 'gzip, deflate, br'
HTTP_ACCEPT_LANGUAGE = 'fr,en-US;q=0.7,en;q=0.3'
HTTP_CONNECTION = 'keep-alive'
HTTP_COOKIE =[COOKIE INFO]
HTTP_DNT = '1'
HTTP_HOST = 'l10n.xwiki.org'
HTTP_REFERER = 'https://l10n.xwiki.org/'
HTTP_USER_AGENT = 'Mozilla/5.0 (X11; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0'
HTTP_X_REQUESTED_WITH = 'XMLHttpRequest'
PATH_INFO = '/js/git/xwiki-platform/'
QUERY_STRING = ''
REMOTE_ADDR = '212.198.27.104'
REMOTE_PORT = '54748'
REQUEST_METHOD = 'GET'
REQUEST_SCHEME = 'https'
REQUEST_URI = '/js/git/xwiki-platform/'
SCRIPT_NAME = ''
SERVER_NAME = 'l10n.xwiki.org'
SERVER_PORT = '443'
SERVER_PROTOCOL = 'HTTP/1.1'
WEBLATE_LANGUAGE = ''
WEBLATE_USER = "'surli'"
WEBLATE_VERSION:Cython = '0.29.21'
WEBLATE_VERSION:Django = '3.1.5'
WEBLATE_VERSION:Git = '2.20.1'
WEBLATE_VERSION:GitPython = '3.1.8'
WEBLATE_VERSION:Pillow = '7.1.2'
WEBLATE_VERSION:PostgreSQL server = '11.11'
WEBLATE_VERSION:Python = '3.7.3'
WEBLATE_VERSION:Redis server = '5.0.3'
WEBLATE_VERSION:Weblate = '4.6.2'
WEBLATE_VERSION:bleach = '3.1.5'
WEBLATE_VERSION:borgbackup = '1.1.13'
WEBLATE_VERSION:celery = '4.4.7'
WEBLATE_VERSION:chardet = '3.0.4'
WEBLATE_VERSION:diff-match-patch = '20200713'
WEBLATE_VERSION:django-appconf = '1.0.4'
WEBLATE_VERSION:django-compressor = '2.4'
WEBLATE_VERSION:django-crispy-forms = '1.9.2'
WEBLATE_VERSION:django-filter = '2.4.0'
WEBLATE_VERSION:django-redis = '4.12.1'
WEBLATE_VERSION:djangorestframework = '3.11.1'
WEBLATE_VERSION:filelock = '3.0.12'
WEBLATE_VERSION:hiredis = '1.0.1'
WEBLATE_VERSION:html2text = '2020.1.16'
WEBLATE_VERSION:jellyfish = '0.8.2'
WEBLATE_VERSION:kombu = '4.6.11'
WEBLATE_VERSION:lxml = '4.6.3'
WEBLATE_VERSION:misaka = '2.1.1'
WEBLATE_VERSION:oauthlib = '3.1.0'
WEBLATE_VERSION:openpyxl = '3.0.5'
WEBLATE_VERSION:psycopg2-binary = '2.8.6'
WEBLATE_VERSION:pyahocorasick = '1.4.2'
WEBLATE_VERSION:pycairo = '1.19.1'
WEBLATE_VERSION:pygobject = '3.38.0'
WEBLATE_VERSION:pyparsing = '2.4.7'
WEBLATE_VERSION:python-dateutil = '2.8.1'
WEBLATE_VERSION:python-redis-lock = '3.7.0'
WEBLATE_VERSION:requests = '2.24.0'
WEBLATE_VERSION:ruamel.yaml = '0.16.12'
WEBLATE_VERSION:sentry_sdk = '0.15.1'
WEBLATE_VERSION:setuptools = '50.3.0'
WEBLATE_VERSION:siphashc = '1.3'
WEBLATE_VERSION:social-auth-app-django = '4.0.0'
WEBLATE_VERSION:social-auth-core = '4.1.0'
WEBLATE_VERSION:translate-toolkit = '3.3.6'
WEBLATE_VERSION:translation-finder = '2.7'
WEBLATE_VERSION:user-agents = '2.1'
WEBLATE_VERSION:weblate-language-data = '2021.4'
uwsgi.node = b'l10n-prod'
uwsgi.version = b'2.0.18-debian'
wsgi.errors = <_io.TextIOWrapper name=2 mode='w' encoding='UTF-8'>
wsgi.file_wrapper = <built-in function uwsgi_sendfile>
wsgi.input = <uwsgi._Input object at 0x7f5a7b10c120>
wsgi.multiprocess = True
wsgi.multithread = False
wsgi.run_once = False
wsgi.url_scheme = 'https'
wsgi.version = '(1, 0)'

Settings:
Using settings module weblate.settings
ABSOLUTE_URL_OVERRIDES = {}
ADMINS = "(('XWiki.org Infra', 'simon.urli+weblate@xwiki.com'),)"
ADMINS_BILLING = []
ADMINS_CONTACT = []
ADMINS_HOSTING = []
AKISMET_API_KEY = '********************'
ALLOWED_HOSTS = ['l10n.xwiki.org', 'l10n-new.xwiki.org', '*']
ANONYMOUS_USER_NAME = 'anonymous'
APPEND_SLASH = True
AUDITLOG_EXPIRY = 180
AUTHENTICATION_BACKENDS = "('social_core.backends.email.EmailAuth', 'social_core.backends.github.GithubOAuth2', 'social_core.backends.suse.OpenSUSEOpenId', 'social_core.backends.ubuntu.UbuntuOpenId', 'social_core.backends.fedora.FedoraOpenId', 'weblate.accounts.auth.WeblateUserBackend', 'weblate.auth.xwiki.XWikiOAuth2')"
AUTH_LOCK_ATTEMPTS = 10
AUTH_PASSWORD_DAYS = '********************'
AUTH_PASSWORD_VALIDATORS = '********************'
AUTH_RESTRICT_ADMINS = {}
AUTH_TOKEN_VALID = '********************'
AUTH_USER_MODEL = 'weblate_auth.User'
AUTOFIX_LIST = "('weblate.trans.autofixes.whitespace.SameBookendingWhitespace', 'weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis', 'weblate.trans.autofixes.chars.RemoveZeroSpace', 'weblate.trans.autofixes.chars.RemoveControlChars', 'weblate.trans.autofixes.html.BleachHTML')"
AUTO_UPDATE = True
AVATAR_DEFAULT_IMAGE = 'identicon'
AVATAR_URL_PREFIX = 'https://www.gravatar.com/'
BACKGROUND_TASKS = 'monthly'
BASE_DIR = '/home/weblate/weblate-env/lib/python3.7/site-packages'
BASIC_LANGUAGES = None
CACHES = {'default': {'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'PARSER_CLASS': 'redis.connection.HiredisParser', 'PASSWORD': '********************', 'CONNECTION_POOL_KWARGS': {}}, 'KEY_PREFIX': '********************'}, 'avatar': {'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/weblate/data/avatar-cache', 'TIMEOUT': 86400, 'OPTIONS': {'MAX_ENTRIES': 1000}}}
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_KEY_PREFIX = '********************'
CACHE_MIDDLEWARE_SECONDS = 600
CELERY_BEAT_SCHEDULE_FILENAME = '/var/weblate/data/celery/beat-schedule'
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_TASK_ALWAYS_EAGER = False
CELERY_TASK_ROUTES = {'weblate.trans.tasks.auto_translate': {'queue': 'translate'}, 'weblate.accounts.tasks.notify_*': {'queue': 'notify'}, 'weblate.accounts.tasks.send_mails': {'queue': 'notify'}, 'weblate.utils.tasks.settings_backup': {'queue': 'backup'}, 'weblate.utils.tasks.database_backup': {'queue': 'backup'}, 'weblate.wladmin.tasks.backup': {'queue': 'backup'}, 'weblate.wladmin.tasks.backup_service': {'queue': 'backup'}, 'weblate.memory.tasks.*': {'queue': 'memory'}}
CELERY_WORKER_MAX_MEMORY_PER_CHILD = 200000
CHECK_LIST = "('weblate.checks.same.SameCheck', 'weblate.checks.chars.BeginNewlineCheck', 'weblate.checks.chars.EndNewlineCheck', 'weblate.checks.chars.BeginSpaceCheck', 'weblate.checks.chars.EndSpaceCheck', 'weblate.checks.chars.DoubleSpaceCheck', 'weblate.checks.chars.EndStopCheck', 'weblate.checks.chars.EndColonCheck', 'weblate.checks.chars.EndQuestionCheck', 'weblate.checks.chars.EndExclamationCheck', 'weblate.checks.chars.EndEllipsisCheck', 'weblate.checks.chars.EndSemicolonCheck', 'weblate.checks.chars.MaxLengthCheck', 'weblate.checks.chars.KashidaCheck', 'weblate.checks.chars.PunctuationSpacingCheck', 'weblate.checks.format.PythonFormatCheck', 'weblate.checks.format.PythonBraceFormatCheck', 'weblate.checks.format.PHPFormatCheck', 'weblate.checks.format.CFormatCheck', 'weblate.checks.format.PerlFormatCheck', 'weblate.checks.format.JavaScriptFormatCheck', 'weblate.checks.format.LuaFormatCheck', 'weblate.checks.format.SchemeFormatCheck', 'weblate.checks.format.CSharpFormatCheck', 'weblate.checks.format.JavaFormatCheck', 'weblate.checks.format.JavaMessageFormatCheck', 'weblate.checks.format.PercentPlaceholdersCheck', 'weblate.checks.format.VueFormattingCheck', 'weblate.checks.format.I18NextInterpolationCheck', 'weblate.checks.format.ESTemplateLiteralsCheck', 'weblate.checks.angularjs.AngularJSInterpolationCheck', 'weblate.checks.qt.QtFormatCheck', 'weblate.checks.qt.QtPluralCheck', 'weblate.checks.ruby.RubyFormatCheck', 'weblate.checks.consistency.PluralsCheck', 'weblate.checks.consistency.SamePluralsCheck', 'weblate.checks.consistency.ConsistencyCheck', 'weblate.checks.consistency.TranslatedCheck', 'weblate.checks.chars.EscapedNewlineCountingCheck', 'weblate.checks.chars.NewLineCountCheck', 'weblate.checks.markup.BBCodeCheck', 'weblate.checks.chars.ZeroWidthSpaceCheck', 'weblate.checks.render.MaxSizeCheck', 'weblate.checks.markup.XMLValidityCheck', 'weblate.checks.markup.XMLTagsCheck', 'weblate.checks.markup.MarkdownRefLinkCheck', 'weblate.checks.markup.MarkdownLinkCheck', 'weblate.checks.markup.MarkdownSyntaxCheck', 'weblate.checks.markup.URLCheck', 'weblate.checks.markup.SafeHTMLCheck', 'weblate.checks.placeholders.PlaceholderCheck', 'weblate.checks.placeholders.RegexCheck', 'weblate.checks.duplicate.DuplicateCheck', 'weblate.checks.source.OptionalPluralCheck', 'weblate.checks.source.EllipsisCheck', 'weblate.checks.source.MultipleFailingCheck', 'weblate.checks.source.LongUntranslatedCheck', 'weblate.checks.format.MultipleUnnamedFormatsCheck', 'weblate.checks.glossary.GlossaryCheck')"
COMMENT_CLEANUP_DAYS = None
COMMIT_PENDING_HOURS = 1
COMPRESSORS = {'css': 'compressor.css.CssCompressor', 'js': 'compressor.js.JsCompressor'}
COMPRESS_CACHEABLE_PRECOMPILERS = '()'
COMPRESS_CACHE_BACKEND = 'default'
COMPRESS_CACHE_KEY_FUNCTION = '********************'
COMPRESS_CLEAN_CSS_ARGUMENTS = ''
COMPRESS_CLEAN_CSS_BINARY = 'cleancss'
COMPRESS_CLOSURE_COMPILER_ARGUMENTS = ''
COMPRESS_CLOSURE_COMPILER_BINARY = 'java -jar compiler.jar'
COMPRESS_CSS_HASHING_METHOD = 'mtime'
COMPRESS_DATA_URI_MAX_SIZE = 1024
COMPRESS_DEBUG_TOGGLE = None
COMPRESS_ENABLED = True
COMPRESS_FILTERS = {'css': ['compressor.filters.css_default.CssAbsoluteFilter'], 'js': ['compressor.filters.jsmin.JSMinFilter']}
COMPRESS_JINJA2_GET_ENVIRONMENT = <function CompressorConf.JINJA2_GET_ENVIRONMENT at 0x7f5a7ac38488>
COMPRESS_MINT_DELAY = 30
COMPRESS_MTIME_DELAY = 10
COMPRESS_OFFLINE = True
COMPRESS_OFFLINE_CONTEXT = [{'fonts_cdn_url': None, 'STATIC_URL': '/static/', 'LANGUAGE_BIDI': True}, {'fonts_cdn_url': None, 'STATIC_URL': '/static/', 'LANGUAGE_BIDI': False}]
COMPRESS_OFFLINE_MANIFEST = 'manifest.json'
COMPRESS_OFFLINE_TIMEOUT = 31536000
COMPRESS_OUTPUT_DIR = 'CACHE'
COMPRESS_PARSER = 'compressor.parser.AutoSelectParser'
COMPRESS_PRECOMPILERS = '()'
COMPRESS_REBUILD_TIMEOUT = 2592000
COMPRESS_ROOT = '/var/weblate/data/static'
COMPRESS_STORAGE = 'compressor.storage.CompressorFileStorage'
COMPRESS_TEMPLATE_FILTER_CONTEXT = {'STATIC_URL': '/static/'}
COMPRESS_URL = '/static/'
COMPRESS_URL_PLACEHOLDER = '/__compressor_url_placeholder__/'
COMPRESS_VERBOSE = False
COMPRESS_YUGLIFY_BINARY = 'yuglify'
COMPRESS_YUGLIFY_CSS_ARGUMENTS = '--terminal'
COMPRESS_YUGLIFY_JS_ARGUMENTS = '--terminal'
COMPRESS_YUI_BINARY = 'java -jar yuicompressor.jar'
COMPRESS_YUI_CSS_ARGUMENTS = ''
COMPRESS_YUI_JS_ARGUMENTS = ''
CONTACT_FORM = 'reply-to'
CRISPY_TEMPLATE_PACK = 'bootstrap3'
CSP_CONNECT_SRC = []
CSP_FONT_SRC = []
CSP_IMG_SRC = []
CSP_SCRIPT_SRC = []
CSP_STYLE_SRC = []
CSRF_COOKIE_AGE = 31449600
CSRF_COOKIE_DOMAIN = None
CSRF_COOKIE_HTTPONLY = True
CSRF_COOKIE_NAME = 'csrftoken'
CSRF_COOKIE_PATH = '/'
CSRF_COOKIE_SAMESITE = 'Lax'
CSRF_COOKIE_SECURE = True
CSRF_FAILURE_VIEW = 'weblate.trans.views.error.csrf_failure'
CSRF_HEADER_NAME = 'HTTP_X_CSRFTOKEN'
CSRF_TRUSTED_ORIGINS = []
CSRF_USE_SESSIONS = True
DATABASES = {'default': {'ENGINE': 'django.db.backends.postgresql', 'NAME': 'weblate', 'USER': 'weblate', 'PASSWORD': '********************', 'HOST': '127.0.0.1', 'PORT': '', 'OPTIONS': {}, 'ATOMIC_REQUESTS': False, 'AUTOCOMMIT': True, 'CONN_MAX_AGE': 0, 'TIME_ZONE': None, 'TEST': {'CHARSET': None, 'COLLATION': None, 'MIGRATE': True, 'MIRROR': None, 'NAME': None}}}
DATABASE_BACKUP = 'compress'
DATABASE_ROUTERS = []
DATA_DIR = '/var/weblate/data'
DATA_UPLOAD_MAX_MEMORY_SIZE = 50000000
DATA_UPLOAD_MAX_NUMBER_FIELDS = 1000
DATETIME_FORMAT = 'N j, Y, P'
DATETIME_INPUT_FORMATS = ['%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M:%S.%f', '%Y-%m-%d %H:%M', '%m/%d/%Y %H:%M:%S', '%m/%d/%Y %H:%M:%S.%f', '%m/%d/%Y %H:%M', '%m/%d/%y %H:%M:%S', '%m/%d/%y %H:%M:%S.%f', '%m/%d/%y %H:%M']
DATE_FORMAT = 'N j, Y'
DATE_INPUT_FORMATS = ['%Y-%m-%d', '%m/%d/%Y', '%m/%d/%y', '%b %d %Y', '%b %d, %Y', '%d %b %Y', '%d %b, %Y', '%B %d %Y', '%B %d, %Y', '%d %B %Y', '%d %B, %Y']
DEBUG = False
DEBUG_PROPAGATE_EXCEPTIONS = False
DECIMAL_SEPARATOR = '.'
DEFAULT_ACCESS_CONTROL = 0
DEFAULT_ADDONS = {}
DEFAULT_ADDON_MESSAGE = 'Update translation files\n\nUpdated by "{{ addon_name }}" hook in Weblate.\n\nTranslation: {{ project_name }}/{{ component_name }}\nTranslate-URL: {{ url }}'
DEFAULT_ADD_MESSAGE = 'Added translation using Weblate ({{ language_name }})\n\n'
DEFAULT_AUTO_LOCK_ERROR = True
DEFAULT_AUTO_WATCH = True
DEFAULT_CHARSET = 'utf-8'
DEFAULT_COMMITER_EMAIL = 'noreply@weblate.org'
DEFAULT_COMMITER_NAME = 'Weblate'
DEFAULT_COMMIT_MESSAGE = 'Translated using Weblate ({{ language_name }})\n\nCurrently translated at {{ stats.translated_percent }}% ({{ stats.translated }} of {{ stats.all }} strings)\n\nTranslation: {{ project_name }}/{{ component_name }}\nTranslate-URL: {{ url }}'
DEFAULT_DELETE_MESSAGE = 'Deleted translation using Weblate ({{ language_name }})\n\n'
DEFAULT_EXCEPTION_REPORTER = 'django.views.debug.ExceptionReporter'
DEFAULT_EXCEPTION_REPORTER_FILTER = 'weblate.trans.debug.WeblateExceptionReporterFilter'
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
DEFAULT_FROM_EMAIL = 'noreply-weblate@xwiki.org'
DEFAULT_HASHING_ALGORITHM = 'sha256'
DEFAULT_INDEX_TABLESPACE = ''
DEFAULT_LANGUAGE = 'en'
DEFAULT_LOG = 'syslog'
DEFAULT_LOGLEVEL = 'INFO'
DEFAULT_MERGE_MESSAGE = "Merge branch '{{ component_remote_branch }}' into Weblate.\n\n"
DEFAULT_MERGE_STYLE = 'rebase'
DEFAULT_PULL_MESSAGE = 'Translations update from Weblate\n\nTranslations update from [Weblate]({{url}}) for {{ project_name }}/{{ component_name }}.\n\n{% if component.linked_childs %}\nIt also includes following components:\n{% for linked in component.linked_child %}\n{{ component.project.name }}/{{ component.name }}\n{% endfor %}\n{% endif %}\n\nCurrent translation status:\n\n![Weblate translation status]({{widget_url}})\n\nIf a new locale is introduced by this pull request make sure to follow https://dev.xwiki.org/xwiki/bin/view/Community/L10N/SupportedLocales/#HNewlocalechecklist before applying it.\n'
DEFAULT_PUSH_ON_COMMIT = True
DEFAULT_RESTRICTED_COMPONENT = False
DEFAULT_SHARED_TM = True
DEFAULT_TABLESPACE = ''
DEFAULT_TRANSLATION_PROPAGATION = True
DEFAULT_VCS = 'git'
DISALLOWED_USER_AGENTS = []
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'localhost'
EMAIL_HOST_PASSWORD = '********************'
EMAIL_HOST_USER = ''
EMAIL_PORT = 25
EMAIL_SEND_HTML = True
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = '********************'
EMAIL_SUBJECT_PREFIX = '[Weblate XWiki.org] '
EMAIL_TIMEOUT = None
EMAIL_USE_LOCALTIME = False
EMAIL_USE_SSL = False
EMAIL_USE_TLS = False
ENABLE_AVATARS = True
ENABLE_HOOKS = True
ENABLE_HTTPS = True
ENABLE_SHARING = True
FILE_UPLOAD_DIRECTORY_PERMISSIONS = None
FILE_UPLOAD_HANDLERS = ['django.core.files.uploadhandler.MemoryFileUploadHandler', 'django.core.files.uploadhandler.TemporaryFileUploadHandler']
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = 420
FILE_UPLOAD_TEMP_DIR = None
FIRST_DAY_OF_WEEK = 0
FIXTURE_DIRS = []
FONTS_CDN_URL = None
FORCE_SCRIPT_NAME = None
FORMAT_MODULE_PATH = None
FORM_RENDERER = 'django.forms.renderers.DjangoTemplates'
GET_HELP_URL = None
GITHUB_CREDENTIALS = {}
GITHUB_TOKEN = '********************'
GITHUB_USERNAME = 'xwikiorgci'
GITLAB_CREDENTIALS = {}
GITLAB_TOKEN = '********************'
GITLAB_USERNAME = None
GOOGLE_ANALYTICS_ID = None
HAVE_SYSLOG = True
HIDE_REPO_CREDENTIALS = True
HIDE_VERSION = False
IGNORABLE_404_URLS = []
INSTALLED_APPS = ['weblate.addons', 'weblate.auth', 'weblate.checks', 'weblate.configuration', 'weblate.formats', 'weblate.glossary', 'weblate.machinery', 'weblate.trans', 'weblate.lang', 'weblate_language_data', 'weblate.memory', 'weblate.metrics', 'weblate.screenshots', 'weblate.fonts', 'weblate.accounts', 'weblate.utils', 'weblate.vcs', 'weblate.wladmin', 'weblate', 'weblate.gitexport', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin.apps.SimpleAdminConfig', 'django.contrib.admindocs', 'django.contrib.sitemaps', 'django.contrib.humanize', 'social_django', 'crispy_forms', 'compressor', 'rest_framework', 'rest_framework.authtoken', 'django_filters']
INTERNAL_IPS = []
INVOICE_PATH = ''
IP_BEHIND_REVERSE_PROXY = False
IP_PROXY_HEADER = 'HTTP_X_FORWARDED_FOR'
IP_PROXY_OFFSET = 0
LANGUAGES = "(('ar', 'العربية'), ('az', 'Azərbaycan'), ('be', 'Беларуская'), ('be@latin', 'Biełaruskaja'), ('bg', 'Български'), ('br', 'Brezhoneg'), ('ca', 'Català'), ('cs', 'Čeština'), ('da', 'Dansk'), ('de', 'Deutsch'), ('en', 'English'), ('el', 'Ελληνικά'), ('en-gb', 'English (United Kingdom)'), ('es', 'Español'), ('fi', 'Suomi'), ('fr', 'Français'), ('gl', 'Galego'), ('he', 'עברית'), ('hu', 'Magyar'), ('hr', 'Hrvatski'), ('id', 'Indonesia'), ('is', 'Íslenska'), ('it', 'Italiano'), ('ja', '日本語'), ('kab', 'Taqbaylit'), ('kk', 'Қазақ тілі'), ('ko', '한국어'), ('nb', 'Norsk bokmål'), ('nl', 'Nederlands'), ('pl', 'Polski'), ('pt', 'Português'), ('pt-br', 'Português brasileiro'), ('ru', 'Русский'), ('sk', 'Slovenčina'), ('sl', 'Slovenščina'), ('sq', 'Shqip'), ('sr', 'Српски'), ('sv', 'Svenska'), ('tr', 'Türkçe'), ('uk', 'Українська'), ('zh-hans', '简体字'), ('zh-hant', '正體字'))"
LANGUAGES_BIDI = ['he', 'ar', 'ar-dz', 'fa', 'ur']
LANGUAGE_CODE = 'en-us'
LANGUAGE_COOKIE_AGE = 12096000
LANGUAGE_COOKIE_DOMAIN = None
LANGUAGE_COOKIE_HTTPONLY = True
LANGUAGE_COOKIE_NAME = 'django_language'
LANGUAGE_COOKIE_PATH = '/'
LANGUAGE_COOKIE_SAMESITE = None
LANGUAGE_COOKIE_SECURE = True
LEGAL_URL = None
LICENSE_EXTRA = []
LICENSE_FILTER = None
LICENSE_REQUIRED = False
LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH = True
LOCALE_PATHS = []
LOCALIZE_CDN_PATH = None
LOCALIZE_CDN_URL = None
LOGGING = {'version': 1, 'disable_existing_loggers': True, 'filters': {'require_debug_false': {'()': 'django.utils.log.RequireDebugFalse'}}, 'formatters': {'syslog': {'format': 'weblate[%(process)d]: %(levelname)s %(message)s'}, 'simple': {'format': '[%(asctime)s: %(levelname)s/%(process)s] %(message)s'}, 'logfile': {'format': '%(asctime)s %(levelname)s %(message)s'}, 'django.server': {'()': 'django.utils.log.ServerFormatter', 'format': '[%(server_time)s] %(message)s'}}, 'handlers': {'mail_admins': {'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler', 'include_html': True}, 'console': {'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple'}, 'django.server': {'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'django.server'}, 'syslog': {'level': 'DEBUG', 'class': 'logging.handlers.SysLogHandler', 'formatter': 'syslog', 'address': '/dev/log', 'facility': 18}}, 'loggers': {'django.request': {'handlers': ['mail_admins', 'syslog'], 'level': 'ERROR', 'propagate': True}, 'django.server': {'handlers': ['django.server'], 'level': 'INFO', 'propagate': False}, 'weblate': {'handlers': ['syslog'], 'level': 'INFO'}, 'weblate.vcs': {'handlers': ['syslog'], 'level': 'INFO'}, 'social': {'handlers': ['syslog'], 'level': 'INFO'}, 'django_auth_ldap': {'handlers': ['syslog'], 'level': 'INFO'}, 'djangosaml2idp': {'handlers': ['syslog'], 'level': 'INFO'}}}
LOGGING_CONFIG = 'logging.config.dictConfig'
LOGIN_REDIRECT_URL = '/'
LOGIN_REQUIRED_URLS = []
LOGIN_REQUIRED_URLS_EXCEPTIONS = "('{URL_PREFIX}/accounts/(.*)$', '{URL_PREFIX}/admin/login/(.*)$', '{URL_PREFIX}/static/(.*)$', '{URL_PREFIX}/widgets/(.*)$', '{URL_PREFIX}/data/(.*)$', '{URL_PREFIX}/hooks/(.*)$', '{URL_PREFIX}/healthz/$', '{URL_PREFIX}/api/(.*)$', '{URL_PREFIX}/js/i18n/$', '{URL_PREFIX}/contact/$', '{URL_PREFIX}/legal/(.*)$')"
LOGIN_URL = '/accounts/login/'
LOGOUT_REDIRECT_URL = None
LOGOUT_URL = '/accounts/logout/'
MANAGERS = "(('XWiki.org Infra', 'simon.urli+weblate@xwiki.com'),)"
MATOMO_SITE_ID = None
MATOMO_URL = None
MEDIA_ROOT = '/var/weblate/data/media'
MEDIA_URL = '/media/'
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
MIDDLEWARE = ['weblate.middleware.RedirectMiddleware', 'weblate.middleware.ProxyMiddleware', 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'weblate.accounts.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'social_django.middleware.SocialAuthExceptionMiddleware', 'weblate.accounts.middleware.RequireLoginMiddleware', 'weblate.api.middleware.ThrottlingMiddleware', 'weblate.middleware.SecurityMiddleware']
MIGRATION_MODULES = {}
MONTH_DAY_FORMAT = 'F j'
MT_APERTIUM_APY = None
MT_AWS_ACCESS_KEY_ID = '********************'
MT_AWS_REGION = None
MT_AWS_SECRET_ACCESS_KEY = '********************'
MT_BAIDU_ID = None
MT_BAIDU_SECRET = '********************'
MT_DEEPL_API_VERSION = '********************'
MT_DEEPL_KEY = '********************'
MT_GOOGLE_CREDENTIALS = None
MT_GOOGLE_KEY = '********************'
MT_GOOGLE_LOCATION = 'global'
MT_GOOGLE_PROJECT = None
MT_MICROSOFT_BASE_URL = 'api.cognitive.microsofttranslator.com'
MT_MICROSOFT_COGNITIVE_KEY = '********************'
MT_MICROSOFT_ENDPOINT_URL = 'api.cognitive.microsoft.com'
MT_MICROSOFT_REGION = None
MT_MODERNMT_KEY = '********************'
MT_MODERNMT_URL = 'https://api.modernmt.com/'
MT_MYMEMORY_EMAIL = None
MT_MYMEMORY_KEY = '********************'
MT_MYMEMORY_USER = None
MT_NETEASE_KEY = '********************'
MT_NETEASE_SECRET = '********************'
MT_SAP_BASE_URL = None
MT_SAP_PASSWORD = '********************'
MT_SAP_SANDBOX_APIKEY = '********************'
MT_SAP_USERNAME = None
MT_SAP_USE_MT = True
MT_SERVICES = "('weblate.machinery.weblatetm.WeblateTranslation', 'weblate.memory.machine.WeblateMemory')"
MT_TMSERVER = None
MT_YANDEX_KEY = '********************'
MT_YOUDAO_ID = None
MT_YOUDAO_SECRET = '********************'
NEARBY_MESSAGES = 15
NUMBER_GROUPING = 0
OFFER_HOSTING = False
PAGURE_CREDENTIALS = {}
PAGURE_TOKEN = '********************'
PAGURE_USERNAME = None
PASSWORD_HASHERS = '********************'
PASSWORD_RESET_TIMEOUT = '********************'
PASSWORD_RESET_TIMEOUT_DAYS = '********************'
PREPEND_WWW = False
RATELIMIT_ATTEMPTS = 5
RATELIMIT_COMMENT_ATTEMPTS = 30
RATELIMIT_COMMENT_WINDOW = 60
RATELIMIT_GLOSSARY_ATTEMPTS = 30
RATELIMIT_GLOSSARY_WINDOW = 60
RATELIMIT_LANGUAGE_ATTEMPTS = 2
RATELIMIT_LANGUAGE_LOCKOUT = 600
RATELIMIT_LANGUAGE_WINDOW = 300
RATELIMIT_LOCKOUT = 600
RATELIMIT_SEARCH_ATTEMPTS = 30
RATELIMIT_SEARCH_LOCKOUT = 60
RATELIMIT_SEARCH_WINDOW = 60
RATELIMIT_TRANSLATE_ATTEMPTS = 30
RATELIMIT_TRANSLATE_WINDOW = 60
RATELIMIT_TRIAL_ATTEMPTS = 1
RATELIMIT_TRIAL_LOCKOUT = 600
RATELIMIT_TRIAL_WINDOW = 60
RATELIMIT_WINDOW = 300
REGISTRATION_ALLOW_BACKENDS = []
REGISTRATION_CAPTCHA = True
REGISTRATION_EMAIL_MATCH = '.*'
REGISTRATION_OPEN = True
REPOSITORY_ALERT_THRESHOLD = 25
REQUIRE_LOGIN = False
REST_FRAMEWORK = {'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticatedOrReadOnly'], 'DEFAULT_AUTHENTICATION_CLASSES': ('rest_framework.authentication.TokenAuthentication', 'weblate.api.authentication.BearerAuthentication', 'rest_framework.authentication.SessionAuthentication'), 'DEFAULT_THROTTLE_CLASSES': ('weblate.api.throttling.UserRateThrottle', 'weblate.api.throttling.AnonRateThrottle'), 'DEFAULT_THROTTLE_RATES': {'anon': '100/day', 'user': '5000/hour'}, 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 20, 'VIEW_DESCRIPTION_FUNCTION': 'weblate.api.views.get_view_description', 'UNAUTHENTICATED_USER': 'weblate.auth.models.get_anonymous'}
ROOT_URLCONF = 'weblate.urls'
SECRET_KEY = '********************'
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_HSTS_SECONDS = 31536000
SECURE_PROXY_SSL_HEADER = None
SECURE_REDIRECT_EXEMPT = "('healthz/$',)"
SECURE_REFERRER_POLICY = 'same-origin'
SECURE_SSL_HOST = None
SECURE_SSL_REDIRECT = True
SENTRY_DSN = None
SENTRY_ENVIRONMENT = 'devel'
SENTRY_EXTRA_ARGS = {}
SENTRY_ORGANIZATION = 'weblate'
SENTRY_PROJECTS = ['weblate']
SENTRY_SECURITY = None
SENTRY_TOKEN = '********************'
SERVER_EMAIL = 'noreply-weblate@xwiki.org'
SESSION_CACHE_ALIAS = 'default'
SESSION_COOKIE_AGE = 1000
SESSION_COOKIE_AGE_AUTHENTICATED = 1209600
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_SAMESITE = 'Lax'
SESSION_COOKIE_SECURE = True
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_FILE_PATH = None
SESSION_SAVE_EVERY_REQUEST = False
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.JSONSerializer'
SETTINGS_MODULE = 'weblate.settings'
SHORT_DATETIME_FORMAT = 'm/d/Y P'
SHORT_DATE_FORMAT = 'm/d/Y'
SIGNING_BACKEND = 'django.core.signing.TimestampSigner'
SILENCED_SYSTEM_CHECKS = ['admin.E408']
SIMILAR_MESSAGES = 5
SIMPLIFY_LANGUAGES = True
SINGLE_PROJECT = False
SITE_DOMAIN = 'l10n.xwiki.org'
SITE_ID = 1
SITE_TITLE = 'Weblate XWiki.org'
SOCIAL_AUTH_AUTH0_IMAGE = 'auth0.svg'
SOCIAL_AUTH_AUTH0_TITLE = 'Auth0'
SOCIAL_AUTH_BITBUCKET_KEY = '********************'
SOCIAL_AUTH_BITBUCKET_SECRET = '********************'
SOCIAL_AUTH_BITBUCKET_VERIFIED_EMAILS_ONLY = True
SOCIAL_AUTH_DISCONNECT_PIPELINE = "('social_core.pipeline.disconnect.allowed_to_disconnect', 'social_core.pipeline.disconnect.get_entries', 'social_core.pipeline.disconnect.revoke_tokens', 'weblate.accounts.pipeline.cycle_session', 'weblate.accounts.pipeline.adjust_primary_mail', 'weblate.accounts.pipeline.notify_disconnect', 'social_core.pipeline.disconnect.disconnect', 'weblate.accounts.pipeline.cleanup_next')"
SOCIAL_AUTH_EMAIL_FORM_URL = '/accounts/email/'
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = 'weblate.accounts.pipeline.send_validation'
SOCIAL_AUTH_EMAIL_VALIDATION_URL = '/accounts/email-sent/'
SOCIAL_AUTH_FACEBOOK_KEY = '********************'
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {'fields': 'id,name,email'}
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'public_profile']
SOCIAL_AUTH_FACEBOOK_SECRET = '********************'
SOCIAL_AUTH_GITHUB_KEY = '********************'
SOCIAL_AUTH_GITHUB_SCOPE = ['user:email']
SOCIAL_AUTH_GITHUB_SECRET = '********************'
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '********************'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = '********************'
SOCIAL_AUTH_LOGIN_ERROR_URL = '/accounts/login/'
SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = '/accounts/profile/#account'
SOCIAL_AUTH_PIPELINE = "('social_core.pipeline.social_auth.social_details', 'social_core.pipeline.social_auth.social_uid', 'social_core.pipeline.social_auth.auth_allowed', 'social_core.pipeline.social_auth.social_user', 'weblate.accounts.pipeline.store_params', 'weblate.accounts.pipeline.verify_open', 'social_core.pipeline.user.get_username', 'weblate.accounts.pipeline.require_email', 'social_core.pipeline.mail.mail_validation', 'weblate.accounts.pipeline.revoke_mail_code', 'weblate.accounts.pipeline.ensure_valid', 'weblate.accounts.pipeline.remove_account', 'social_core.pipeline.social_auth.associate_by_email', 'weblate.accounts.pipeline.reauthenticate', 'weblate.accounts.pipeline.verify_username', 'social_core.pipeline.user.create_user', 'social_core.pipeline.social_auth.associate_user', 'social_core.pipeline.social_auth.load_extra_data', 'weblate.accounts.pipeline.cleanup_next', 'weblate.accounts.pipeline.user_full_name', 'weblate.accounts.pipeline.store_email', 'weblate.accounts.pipeline.notify_connect', 'weblate.accounts.pipeline.password_reset')"
SOCIAL_AUTH_PROTECTED_USER_FIELDS = "('email',)"
SOCIAL_AUTH_RAISE_EXCEPTIONS = True
SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
SOCIAL_AUTH_SAML_IMAGE = 'saml.svg'
SOCIAL_AUTH_SAML_TITLE = 'SAML'
SOCIAL_AUTH_SLUGIFY_FUNCTION = 'weblate.accounts.pipeline.slugify_username'
SOCIAL_AUTH_SLUGIFY_USERNAMES = True
SOCIAL_AUTH_STRATEGY = 'weblate.accounts.strategy.WeblateStrategy'
SOCIAL_AUTH_XWIKI_KEY = '********************'
SPECIAL_CHARS = "('\\t', '\\n', '\\xa0', '…')"
STATICFILES_DIRS = '()'
STATICFILES_FINDERS = "('django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', 'compressor.finders.CompressorFinder')"
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
STATIC_ROOT = '/var/weblate/data/static'
STATIC_URL = '/static/'
STATUS_URL = None
SUGGESTION_CLEANUP_DAYS = None
SUPPORT_API_URL = '********************'
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates', 'OPTIONS': {'context_processors': ['django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.request', 'django.template.context_processors.csrf', 'django.contrib.messages.context_processors.messages', 'weblate.trans.context_processors.weblate_context'], 'loaders': [('django.template.loaders.cached.Loader', ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'])]}}]
TEST_NON_SERIALIZED_APPS = []
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
THOUSAND_SEPARATOR = ','
TIME_FORMAT = 'P'
TIME_INPUT_FORMATS = ['%H:%M:%S', '%H:%M:%S.%f', '%H:%M']
TIME_ZONE = 'UTC'
UPDATE_LANGUAGES = True
URL_PREFIX = ''
USE_I18N = True
USE_L10N = True
USE_THOUSAND_SEPARATOR = False
USE_TZ = True
USE_X_FORWARDED_HOST = False
USE_X_FORWARDED_PORT = False
VAT_RATE = 1.21
VCS_BACKENDS = "('weblate.vcs.git.GitRepository', 'weblate.vcs.git.GitWithGerritRepository', 'weblate.vcs.git.SubversionRepository', 'weblate.vcs.git.GithubRepository', 'weblate.vcs.git.GitLabRepository', 'weblate.vcs.git.PagureRepository', 'weblate.vcs.git.LocalRepository', 'weblate.vcs.git.GitForcePushRepository', 'weblate.vcs.mercurial.HgRepository')"
VCS_CLONE_DEPTH = 1
WEBLATE_ADDONS = "('weblate.addons.gettext.GenerateMoAddon', 'weblate.addons.gettext.UpdateLinguasAddon', 'weblate.addons.gettext.UpdateConfigureAddon', 'weblate.addons.gettext.MsgmergeAddon', 'weblate.addons.gettext.GettextCustomizeAddon', 'weblate.addons.gettext.GettextAuthorComments', 'weblate.addons.cleanup.CleanupAddon', 'weblate.addons.cleanup.RemoveBlankAddon', 'weblate.addons.consistency.LangaugeConsistencyAddon', 'weblate.addons.discovery.DiscoveryAddon', 'weblate.addons.autotranslate.AutoTranslateAddon', 'weblate.addons.flags.SourceEditAddon', 'weblate.addons.flags.TargetEditAddon', 'weblate.addons.flags.SameEditAddon', 'weblate.addons.flags.BulkEditAddon', 'weblate.addons.generate.GenerateFileAddon', 'weblate.addons.generate.PseudolocaleAddon', 'weblate.addons.json.JSONCustomizeAddon', 'weblate.addons.properties.PropertiesSortAddon', 'weblate.addons.git.GitSquashAddon', 'weblate.addons.removal.RemoveComments', 'weblate.addons.removal.RemoveSuggestions', 'weblate.addons.resx.ResxUpdateAddon', 'weblate.addons.yaml.YAMLCustomizeAddon', 'weblate.addons.cdn.CDNJSAddon')"
WEBLATE_EXPORTERS = "('weblate.formats.exporters.PoExporter', 'weblate.formats.exporters.PoXliffExporter', 'weblate.formats.exporters.XliffExporter', 'weblate.formats.exporters.TBXExporter', 'weblate.formats.exporters.TMXExporter', 'weblate.formats.exporters.MoExporter', 'weblate.formats.exporters.CSVExporter', 'weblate.formats.exporters.XlsxExporter', 'weblate.formats.exporters.JSONExporter', 'weblate.formats.exporters.AndroidResourceExporter', 'weblate.formats.exporters.StringsExporter')"
WEBLATE_FORMATS = "('weblate.formats.ttkit.PoFormat', 'weblate.formats.ttkit.PoMonoFormat', 'weblate.formats.ttkit.TSFormat', 'weblate.formats.ttkit.XliffFormat', 'weblate.formats.ttkit.PoXliffFormat', 'weblate.formats.ttkit.StringsFormat', 'weblate.formats.ttkit.StringsUtf8Format', 'weblate.formats.ttkit.PropertiesUtf8Format', 'weblate.formats.ttkit.PropertiesUtf16Format', 'weblate.formats.ttkit.PropertiesFormat', 'weblate.formats.ttkit.JoomlaFormat', 'weblate.formats.ttkit.GWTFormat', 'weblate.formats.ttkit.PhpFormat', 'weblate.formats.ttkit.LaravelPhpFormat', 'weblate.formats.ttkit.RESXFormat', 'weblate.formats.ttkit.AndroidFormat', 'weblate.formats.ttkit.JSONFormat', 'weblate.formats.ttkit.JSONNestedFormat', 'weblate.formats.ttkit.WebExtensionJSONFormat', 'weblate.formats.ttkit.I18NextFormat', 'weblate.formats.ttkit.GoI18JSONFormat', 'weblate.formats.ttkit.ARBFormat', 'weblate.formats.ttkit.CSVFormat', 'weblate.formats.ttkit.CSVSimpleFormat', 'weblate.formats.ttkit.CSVSimpleFormatISO', 'weblate.formats.ttkit.YAMLFormat', 'weblate.formats.ttkit.RubyYAMLFormat', 'weblate.formats.ttkit.SubRipFormat', 'weblate.formats.ttkit.MicroDVDFormat', 'weblate.formats.ttkit.AdvSubStationAlphaFormat', 'weblate.formats.ttkit.SubStationAlphaFormat', 'weblate.formats.ttkit.DTDFormat', 'weblate.formats.ttkit.FlatXMLFormat', 'weblate.formats.ttkit.INIFormat', 'weblate.formats.ttkit.InnoSetupINIFormat', 'weblate.formats.external.XlsxFormat', 'weblate.formats.txt.AppStoreFormat', 'weblate.formats.convert.HTMLFormat', 'weblate.formats.convert.IDMLFormat', 'weblate.formats.convert.OpenDocumentFormat', 'weblate.formats.convert.PlainTextFormat', 'weblate.formats.convert.DokuWikiFormat', 'weblate.formats.convert.MediaWikiFormat', 'weblate.formats.convert.WindowsRCFormat', 'weblate.formats.ttkit.XWikiPropertiesFormat', 'weblate.formats.ttkit.XWikiPagePropertiesFormat', 'weblate.formats.ttkit.XWikiFullPageFormat', 'weblate.formats.ttkit.TBXFormat')"
WEBLATE_GPG_ALGO = 'default'
WEBLATE_GPG_IDENTITY = None
WEBSITE_REQUIRED = True
WSGI_APPLICATION = None
X_FRAME_OPTIONS = 'DENY'
YEAR_MONTH_FORMAT = 'F Y'
_TEMPLATE_LOADERS = [('django.template.loaders.cached.Loader', ['django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader'])]
```
Okay, this error is while getting repository status, not while committing. That should be addressable...

Resolving patch:
diff --git a/weblate/vcs/base.py b/weblate/vcs/base.py
--- a/weblate/vcs/base.py
+++ b/weblate/vcs/base.py
@@ -289,8 +289,7 @@ def update_remote(self):
 
     def status(self):
         """Return status of the repository."""
-        with self.lock:
-            return self.execute(self._cmd_status)
+        return self.execute(self._cmd_status, needs_lock=False)
 
     def push(self, branch):
         """Push given branch to remote repository."""
diff --git a/weblate/vcs/git.py b/weblate/vcs/git.py
--- a/weblate/vcs/git.py
+++ b/weblate/vcs/git.py
@@ -51,6 +51,7 @@ class GitRepository(Repository):
     _cmd_last_remote_revision = ["log", "-n", "1", "--format=format:%H", "@{upstream}"]
     _cmd_list_changed_files = ["diff", "--name-status"]
     _cmd_push = ["push"]
+    _cmd_status = ["--no-optional-locks", "status"]
 
     name = "Git"
     req_version = "2.12"
@@ -197,7 +198,7 @@ def delete_branch(self, name):
 
     def needs_commit(self, filenames: Optional[List[str]] = None):
         """Check whether repository needs commit."""
-        cmd = ["status", "--porcelain"]
+        cmd = ["--no-optional-locks", "status", "--porcelain"]
         if filenames:
             cmd.extend(["--ignored=matching", "--"])
             cmd.extend(filenames)


Test patch: