1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/weblate_ynh.git synced 2024-10-01 13:35:04 +02:00

upgrade to 3.7

upgrade to 3.7
This commit is contained in:
Jean-Baptiste 2019-06-25 22:38:08 +02:00 committed by GitHub
commit 31b8295095
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 1211 additions and 102 deletions

View file

@ -19,8 +19,8 @@
setup_private=1
setup_public=1
upgrade=1
upgrade=1 from_commit=f14080cbe65c8b2a8e0cda1c34affe0123a6540d
upgrade=1 from_commit=565bfc66719f55b9c6a03cba8ac9991111992c9b
upgrade=1 from_commit=73a808f7a93e063e652533244fa1657fbc41c4f3
backup_restore=1
multi_instance=1
incorrect_path=1
@ -43,9 +43,9 @@
Email=jean-baptiste@holcroft.fr
Notification=all
;;; Upgrade options
; commit=f14080cbe65c8b2a8e0cda1c34affe0123a6540d
name=Upgrade from 3.1.1
manifest_arg=domain=DOMAIN&path=PATH&admin=USER&is_public=1&github_account=fake&github_token=fake
; commit=565bfc66719f55b9c6a03cba8ac9991111992c9b
name=Upgrade from 3.5.1
manifest_arg=domain=DOMAIN&path=PATH&admin=USER&is_public=1&github_account=fake&github_token=fake
; commit=73a808f7a93e063e652533244fa1657fbc41c4f3
name=Upgrade from 3.6.1
manifest_arg=domain=DOMAIN&path=PATH&admin=USER&is_public=1&github_account=fake&github_token=fake

View file

@ -0,0 +1,879 @@
# -*- coding: utf-8 -*-
#
# Copyright © 2012 - 2019 Michal Čihař <michal@cihar.com>
#
# This file is part of Weblate <https://weblate.org/>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
from __future__ import unicode_literals
import os
import platform
from logging.handlers import SysLogHandler
#
# Django settings for Weblate project.
#
DEBUG = True
ADMINS = (
# ('Your Name', 'your_email@example.com'),
)
MANAGERS = ADMINS
DATABASES = {
'default': {
# Use 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'ENGINE': 'django.db.backends.postgresql_psycopg2',
# Database name or path to database file if using sqlite3.
'NAME': '__NAME__',
# Database user, not used with sqlite3.
'USER': '__NAME__',
# Database password, not used with sqlite3.
'PASSWORD': '__DB_PWD__',
# Set to empty string for localhost. Not used with sqlite3.
'HOST': 'localhost',
# Set to empty string for default. Not used with sqlite3.
'PORT': '5432',
# Customizations for databases
'OPTIONS': {
# In case of using an older MySQL server, which has MyISAM as a default storage
# 'init_command': 'SET storage_engine=INNODB',
# Uncomment for MySQL older than 5.7:
# 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
# Set emoji capable charset for MySQL:
# 'charset': 'utf8mb4',
'sslmode': 'disable'
},
}
}
BASE_DIR = '__FINALPATH__'
# Data directory
DATA_DIR = os.path.join(BASE_DIR, 'data')
TTF_PATH = '__FINALPATH__/venv/lib/python3.5/site-packages/weblate/ttf/'
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'UTC'
# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
('ar', 'العربية'),
('az', 'Azərbaycan'),
('be', 'Беларуская'),
('be@latin', 'Biełaruskaja'),
('bg', 'Български'),
('br', 'Brezhoneg'),
('ca', 'Català'),
('cs', 'Čeština'),
('da', 'Dansk'),
('de', 'Deutsch'),
('en', 'English'),
('en-gb', 'English (United Kingdom)'),
('el', 'Ελληνικά'),
('es', 'Español'),
('fi', 'Suomi'),
('fr', 'Français'),
('fy', 'Frysk'),
('gl', 'Galego'),
('he', 'עברית'),
('hu', 'Magyar'),
('id', 'Indonesia'),
('it', 'Italiano'),
('ja', '日本語'),
('kk', 'Қазақ тілі'),
('ko', '한국어'),
('ksh', 'Kölsch'),
('nb', 'Norsk bokmål'),
('nl', 'Nederlands'),
('pl', 'Polski'),
('pt', 'Português'),
('pt-br', 'Português brasileiro'),
('ru', 'Русский'),
('sk', 'Slovenčina'),
('sl', 'Slovenščina'),
('sr', 'Српски'),
('sv', 'Svenska'),
('tr', 'Türkçe'),
('uk', 'Українська'),
('zh-hans', '简体字'),
('zh-hant', '正體字'),
)
SITE_ID = 1
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True
# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True
# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True
# URL prefix to use, please see documentation for more details
URL_PREFIX = '__PATHURL__'
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = os.path.join(DATA_DIR, 'media')
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = '{0}/media/'.format(URL_PREFIX)
# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = os.path.join(DATA_DIR, 'static')
# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '{0}/static/'.format(URL_PREFIX)
# Additional locations of static files
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder',
)
# Make this unique, and don't share it with anybody.
# You can generate it using weblate/examples/generate-secret-key
SECRET_KEY = '__KEY__' # noqa
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR, 'weblate', 'templates'),
],
'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',
]),
],
},
},
]
# GitHub username for sending pull requests.
# Please see the documentation for more details.
GITHUB_USERNAME = "__GITHUBUSER__"
# Authentication configuration
AUTHENTICATION_BACKENDS = (
'social_core.backends.email.EmailAuth',
# 'social_core.backends.google.GoogleOAuth2',
# 'social_core.backends.github.GithubOAuth2',
# 'social_core.backends.bitbucket.BitbucketOAuth',
'social_core.backends.suse.OpenSUSEOpenId',
'social_core.backends.ubuntu.UbuntuOpenId',
'social_core.backends.fedora.FedoraOpenId',
# 'social_core.backends.facebook.FacebookOAuth2',
'weblate.accounts.auth.WeblateUserBackend',
)
# Custom user model
AUTH_USER_MODEL = 'weblate_auth.User'
# Social auth backends setup
SOCIAL_AUTH_GITHUB_KEY = ''
SOCIAL_AUTH_GITHUB_SECRET = ''
SOCIAL_AUTH_GITHUB_SCOPE = ['user:email']
SOCIAL_AUTH_BITBUCKET_KEY = ''
SOCIAL_AUTH_BITBUCKET_SECRET = ''
SOCIAL_AUTH_BITBUCKET_VERIFIED_EMAILS_ONLY = True
SOCIAL_AUTH_FACEBOOK_KEY = ''
SOCIAL_AUTH_FACEBOOK_SECRET = ''
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email', 'public_profile']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {'fields': 'id,name,email'}
SOCIAL_AUTH_FACEBOOK_API_VERSION = '3.1'
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = ''
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = ''
# Social auth settings
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_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',
)
# Custom authentication strategy
SOCIAL_AUTH_STRATEGY = 'weblate.accounts.strategy.WeblateStrategy'
# Raise exceptions so that we can handle them later
SOCIAL_AUTH_RAISE_EXCEPTIONS = True
SOCIAL_AUTH_EMAIL_VALIDATION_FUNCTION = \
'weblate.accounts.pipeline.send_validation'
SOCIAL_AUTH_EMAIL_VALIDATION_URL = \
'{0}/accounts/email-sent/'.format(URL_PREFIX)
SOCIAL_AUTH_LOGIN_ERROR_URL = \
'{0}/accounts/login/'.format(URL_PREFIX)
SOCIAL_AUTH_EMAIL_FORM_URL = \
'{0}/accounts/email/'.format(URL_PREFIX)
SOCIAL_AUTH_NEW_ASSOCIATION_REDIRECT_URL = \
'{0}/accounts/profile/#account'.format(URL_PREFIX)
SOCIAL_AUTH_PROTECTED_USER_FIELDS = ('email',)
SOCIAL_AUTH_SLUGIFY_USERNAMES = True
SOCIAL_AUTH_SLUGIFY_FUNCTION = 'weblate.accounts.pipeline.slugify_username'
# Password validation configuration
AUTH_PASSWORD_VALIDATORS = [
{
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', # noqa: E501, pylint: disable=line-too-long
},
{
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
'OPTIONS': {
'min_length': 6,
}
},
{
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
},
{
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
},
{
'NAME': 'weblate.accounts.password_validation.CharsPasswordValidator',
},
{
'NAME': 'weblate.accounts.password_validation.PastPasswordsValidator',
},
# Optional password strength validation by django-zxcvbn-password
# {
# 'NAME': 'zxcvbn_password.ZXCVBNValidator',
# 'OPTIONS': {
# 'min_score': 3,
# 'user_attributes': ('username', 'email', 'full_name')
# }
# },
]
# Allow new user registrations
REGISTRATION_OPEN = True
# Middleware
MIDDLEWARE = [
'weblate.middleware.ProxyMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.locale.LocaleMiddleware',
'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.middleware.SecurityMiddleware',
]
ROOT_URLCONF = 'weblate.urls'
# Django and Weblate apps
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin.apps.SimpleAdminConfig',
'django.contrib.admindocs',
'django.contrib.sitemaps',
'social_django',
'crispy_forms',
'compressor',
'rest_framework',
'rest_framework.authtoken',
'weblate.addons',
'weblate.auth',
'weblate.checks',
'weblate.formats',
'weblate.machinery',
'weblate.trans',
'weblate.lang',
'weblate.langdata',
'weblate.memory',
'weblate.screenshots',
'weblate.fonts',
'weblate.accounts',
'weblate.utils',
'weblate.vcs',
'weblate.wladmin',
'weblate',
# Optional: Git exporter
# 'weblate.gitexport',
)
# Path to locales
LOCALE_PATHS = (os.path.join(BASE_DIR, 'weblate', 'locale'), )
# Custom exception reporter to include some details
DEFAULT_EXCEPTION_REPORTER_FILTER = \
'weblate.trans.debug.WeblateExceptionReporterFilter'
# Default logging of Weblate messages
# - to syslog in production (if available)
# - otherwise to console
# - you can also choose 'logfile' to log into separate file
# after configuring it below
# Detect if we can connect to syslog
HAVE_SYSLOG = False
if platform.system() != 'Windows':
try:
handler = SysLogHandler(
address='/dev/log', facility=SysLogHandler.LOG_LOCAL2
)
handler.close()
HAVE_SYSLOG = True
except IOError:
HAVE_SYSLOG = False
if DEBUG or not HAVE_SYSLOG:
DEFAULT_LOG = 'console'
else:
DEFAULT_LOG = 'syslog'
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/stable/topics/logging for
# more details on how to customize your logging configuration.
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': '%(levelname)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': SysLogHandler.LOG_LOCAL2,
},
# Logging to a file
# 'logfile': {
# 'level':'DEBUG',
# 'class':'logging.handlers.RotatingFileHandler',
# 'filename': "/var/log/weblate/weblate.log",
# 'maxBytes': 100000,
# 'backupCount': 3,
# 'formatter': 'logfile',
# },
},
'loggers': {
'django.request': {
'handlers': ['mail_admins', DEFAULT_LOG],
'level': 'ERROR',
'propagate': True,
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
# Logging database queries
# 'django.db.backends': {
# 'handlers': [DEFAULT_LOG],
# 'level': 'DEBUG',
# },
'weblate': {
'handlers': [DEFAULT_LOG],
'level': 'DEBUG',
},
# Logging search operations
'weblate.search': {
'handlers': [DEFAULT_LOG],
'level': 'INFO',
},
# Logging VCS operations
'weblate.vcs': {
'handlers': [DEFAULT_LOG],
'level': 'WARNING',
},
# Python Social Auth logging
# 'social': {
# 'handlers': [DEFAULT_LOG],
# 'level': 'DEBUG',
# },
}
}
# Logging of management commands to console
if (os.environ.get('DJANGO_IS_MANAGEMENT_COMMAND', False)
and 'console' not in LOGGING['loggers']['weblate']['handlers']):
LOGGING['loggers']['weblate']['handlers'].append('console')
# Remove syslog setup if it's not present
if not HAVE_SYSLOG:
del LOGGING['handlers']['syslog']
# List of machine translations
# MT_SERVICES = (
# 'weblate.machinery.apertium.ApertiumAPYTranslation',
# 'weblate.machinery.baidu.BaiduTranslation',
# 'weblate.machinery.deepl.DeepLTranslation',
# 'weblate.machinery.glosbe.GlosbeTranslation',
# 'weblate.machinery.google.GoogleTranslation',
# 'weblate.machinery.microsoft.MicrosoftCognitiveTranslation',
# 'weblate.machinery.microsoftterminology.MicrosoftTerminologyService',
# 'weblate.machinery.mymemory.MyMemoryTranslation',
# 'weblate.machinery.netease.NeteaseSightTranslation',
# 'weblate.machinery.tmserver.AmagamaTranslation',
# 'weblate.machinery.tmserver.TMServerTranslation',
# 'weblate.machinery.yandex.YandexTranslation',
# 'weblate.machinery.weblatetm.WeblateTranslation',
# 'weblate.machinery.saptranslationhub.SAPTranslationHub',
# 'weblate.machinery.youdao.YoudaoTranslation',
# 'weblate.memory.machine.WeblateMemory',
# )
# Machine translation API keys
# URL of the Apertium APy server
MT_APERTIUM_APY = None
# DeepL API key
MT_DEEPL_KEY = None
# Microsoft Cognitive Services Translator API, register at
# https://portal.azure.com/
MT_MICROSOFT_COGNITIVE_KEY = None
# MyMemory identification email, see
# https://mymemory.translated.net/doc/spec.php
MT_MYMEMORY_EMAIL = None
# Optional MyMemory credentials to access private translation memory
MT_MYMEMORY_USER = None
MT_MYMEMORY_KEY = None
# Google API key for Google Translate API
MT_GOOGLE_KEY = None
# Baidu app key and secret
MT_BAIDU_ID = None
MT_BAIDU_SECRET = None
# Youdao Zhiyun app key and secret
MT_YOUDAO_ID = None
MT_YOUDAO_SECRET = None
# Netease Sight (Jianwai) app key and secret
MT_NETEASE_KEY = None
MT_NETEASE_SECRET = None
# API key for Yandex Translate API
MT_YANDEX_KEY = None
# tmserver URL
MT_TMSERVER = None
# SAP Translation Hub
MT_SAP_BASE_URL = None
MT_SAP_SANDBOX_APIKEY = None
MT_SAP_USERNAME = None
MT_SAP_PASSWORD = None
MT_SAP_USE_MT = True
# Title of site to use
SITE_TITLE = 'Weblate'
# Whether site uses https
ENABLE_HTTPS = True
# Use HTTPS when creating redirect URLs for social authentication, see
# documentation for more details:
# https://python-social-auth-docs.readthedocs.io/en/latest/configuration/settings.html#processing-redirects-and-urlopen
SOCIAL_AUTH_REDIRECT_IS_HTTPS = ENABLE_HTTPS
# Make CSRF cookie HttpOnly, see documentation for more details:
# https://docs.djangoproject.com/en/1.11/ref/settings/#csrf-cookie-httponly
CSRF_COOKIE_HTTPONLY = True
CSRF_COOKIE_SECURE = ENABLE_HTTPS
# Store CSRF token in session
CSRF_USE_SESSIONS = True
# Customize CSRF failure view
CSRF_FAILURE_VIEW = 'weblate.trans.views.error.csrf_failure'
SESSION_COOKIE_SECURE = ENABLE_HTTPS
# SSL redirect
SECURE_SSL_REDIRECT = ENABLE_HTTPS
# Session cookie age (in seconds)
SESSION_COOKIE_AGE = 1209600
# Some security headers
SECURE_BROWSER_XSS_FILTER = True
X_FRAME_OPTIONS = 'DENY'
SECURE_CONTENT_TYPE_NOSNIFF = True
# Optionally enable HSTS
SECURE_HSTS_SECONDS = 0
SECURE_HSTS_PRELOAD = False
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
# URL of login
LOGIN_URL = '{0}/accounts/login/'.format(URL_PREFIX)
# URL of logout
LOGOUT_URL = '{0}/accounts/logout/'.format(URL_PREFIX)
# Default location for login
LOGIN_REDIRECT_URL = '{0}/'.format(URL_PREFIX)
# Anonymous user name
ANONYMOUS_USER_NAME = 'anonymous'
# Reverse proxy settings
IP_PROXY_HEADER = 'HTTP_X_FORWARDED_FOR'
IP_BEHIND_REVERSE_PROXY = False
IP_PROXY_OFFSET = 0
# Sending HTML in mails
EMAIL_SEND_HTML = True
# Subject of emails includes site title
EMAIL_SUBJECT_PREFIX = '[{0}] '.format(SITE_TITLE)
EMAIL_BACKEND = 'django_sendmail_backend.backends.EmailBackend'
# Enable remote hooks
ENABLE_HOOKS = True
# Number of nearby messages to show in each direction
NEARBY_MESSAGES = 5
# By default the length of a given translation is limited to the length of
# the source string * 10 characters. Set this option to False to allow longer
# translations (up to 10.000 characters)
LIMIT_TRANSLATION_LENGTH_BY_SOURCE_LENGTH = True
# Use simple language codes for default language/country combinations
SIMPLIFY_LANGUAGES = True
# Render forms using bootstrap
CRISPY_TEMPLATE_PACK = 'bootstrap3'
# List of quality checks
# 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.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.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.angularjs.AngularJSInterpolationCheck',
# 'weblate.checks.consistency.PluralsCheck',
# 'weblate.checks.consistency.SamePluralsCheck',
# 'weblate.checks.consistency.ConsistencyCheck',
# 'weblate.checks.consistency.TranslatedCheck',
# 'weblate.checks.chars.NewlineCountingCheck',
# '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.source.OptionalPluralCheck',
# 'weblate.checks.source.EllipsisCheck',
# 'weblate.checks.source.MultipleFailingCheck',
# )
# List of automatic fixups
# AUTOFIX_LIST = (
# 'weblate.trans.autofixes.whitespace.SameBookendingWhitespace',
# 'weblate.trans.autofixes.chars.ReplaceTrailingDotsWithEllipsis',
# 'weblate.trans.autofixes.chars.RemoveZeroSpace',
# 'weblate.trans.autofixes.chars.RemoveControlChars',
# )
# List of enabled addons
# 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.consistency.LangaugeConsistencyAddon',
# 'weblate.addons.discovery.DiscoveryAddon',
# 'weblate.addons.flags.SourceEditAddon',
# 'weblate.addons.flags.TargetEditAddon',
# 'weblate.addons.flags.SameEditAddon',
# 'weblate.addons.generate.GenerateFileAddon',
# 'weblate.addons.json.JSONCustomizeAddon',
# 'weblate.addons.properties.PropertiesSortAddon',
# 'weblate.addons.git.GitSquashAddon',
# 'weblate.addons.removal.RemoveComments',
# 'weblate.addons.removal.RemoveSuggestions',
# )
# E-mail address that error messages come from.
SERVER_EMAIL = 'noreply@__DOMAIN__'
# Default email address to use for various automated correspondence from
# the site managers. Used for registration emails.
DEFAULT_FROM_EMAIL = '__ADMINMAIL__'
# List of URLs your site is supposed to serve
ALLOWED_HOSTS = ['__DOMAIN__']
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://127.0.0.1:6379/__REDIS_DB__',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
'PARSER_CLASS': 'redis.connection.HiredisParser',
}
},
'avatar': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': os.path.join(BASE_DIR, 'avatar-cache'),
'TIMEOUT': 3600,
'OPTIONS': {
'MAX_ENTRIES': 1000,
},
}
}
# Example configuration for caching
# CACHES = {
# 'default': {
# 'BACKEND': 'django_redis.cache.RedisCache',
# 'LOCATION': 'redis://127.0.0.1:6379/0',
# # If redis is running on same host as Weblate, you might
# # want to use unix sockets instead:
# # 'LOCATION': 'unix:///var/run/redis/redis.sock?db=0',
# 'OPTIONS': {
# 'CLIENT_CLASS': 'django_redis.client.DefaultClient',
# 'PARSER_CLASS': 'redis.connection.HiredisParser',
# }
# },
# 'avatar': {
# 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
# 'LOCATION': os.path.join(DATA_DIR, 'avatar-cache'),
# 'TIMEOUT': 3600,
# 'OPTIONS': {
# 'MAX_ENTRIES': 1000,
# },
# }
# }
# REST framework settings for API
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'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': (
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
),
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',
'user': '1000/day'
},
'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',
}
# Example for restricting access to logged in users
# LOGIN_REQUIRED_URLS = (
# r'/(.*)$',
# )
# In such case you will want to include some of the exceptions
# LOGIN_REQUIRED_URLS_EXCEPTIONS = (
# r'/accounts/(.*)$', # Required for login
# r'/admin/login/(.*)$', # Required for admin login
# r'/static/(.*)$', # Required for development mode
# r'/widgets/(.*)$', # Allowing public access to widgets
# r'/data/(.*)$', # Allowing public access to data exports
# r'/hooks/(.*)$', # Allowing public access to notification hooks
# r'/healthz/$', # Allowing public access to health check
# r'/api/(.*)$', # Allowing access to API
# r'/js/i18n/$', # JavaScript localization
# r'/contact/$', # Optional for contact form
# r'/legal/(.*)$', # Optional for legal app
# )
# Silence some of the Django system checks
SILENCED_SYSTEM_CHECKS = [
# We have modified django.contrib.auth.middleware.AuthenticationMiddleware
# as weblate.accounts.middleware.AuthenticationMiddleware
'admin.E408',
]
# Celery worker configuration for testing
# CELERY_TASK_ALWAYS_EAGER = True
# CELERY_BROKER_URL = 'memory://'
# CELERY_TASK_EAGER_PROPAGATES = True
# Celery worker configuration for production
CELERY_TASK_ALWAYS_EAGER = False
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/__REDIS_DB__'
CELERY_RESULT_BACKEND = CELERY_BROKER_URL
# Celery settings, it is not recommended to change these
CELERY_WORKER_PREFETCH_MULTIPLIER = 0
CELERY_WORKER_MAX_MEMORY_PER_CHILD = 200000
CELERY_BEAT_SCHEDULE_FILENAME = os.path.join(
DATA_DIR, 'celery', 'beat-schedule'
)
CELERY_TASK_ROUTES = {
'weblate.trans.search.*': {'queue': 'search'},
'weblate.trans.tasks.optimize_fulltext': {'queue': 'search'},
'weblate.trans.tasks.cleanup_fulltext': {'queue': 'search'},
'weblate.memory.tasks.*': {'queue': 'memory'},
'weblate.accounts.tasks.notify_change': {'queue': 'notify'},
}

View file

@ -3,12 +3,12 @@
"id": "weblate",
"packaging_format": 1,
"requirements": {
"yunohost": ">= 3.4.0"
"yunohost": ">= 3.5.0"
},
"description": {
"en": "A translation platform using Git and Python"
},
"version": "3.6.1~ynh1",
"version": "3.7.0~ynh1",
"url": "https://weblate.org",
"license": "AGPL-3.0",
"maintainer": {
@ -44,6 +44,9 @@
"ask": {
"en": "Should Weblate be public accessible?"
},
"help": {
"en": "Any YunoHost user and anonymous people from the web will be able to access the application"
},
"default": "0"
},
{

View file

@ -1,7 +1,22 @@
#!/bin/bash
current_version="3.6.1"
#=================================================
# COMMON VARIABLES
#=================================================
# dependencies used by the app
pkg_dependencies="libxml2-dev libxslt-dev libfreetype6-dev \
libjpeg-dev libz-dev libyaml-dev python3-dev python3-pip python3-virtualenv \
postgresql libpq-dev uwsgi uwsgi-plugin-python3 \
libpango1.0-dev libcairo2-dev libglib2.0-dev libgirepository1.0-dev \
mailutils python-celery-common virtualenv redis-server"
# Weblate's version for PIP and settings file
current_version="3.7"
#=================================================
# PERSONAL HELPERS
#=================================================
weblate_fill_settings() {
local settings="$1"
@ -144,3 +159,74 @@ ynh_redis_remove_db() {
local db=$1
redis-cli -n "$db" flushall
}
#=================================================
# EXPERIMENTAL HELPERS
#=================================================
# Print a message as INFO and show progression during an app script
#
# usage: ynh_script_progression --message=message [--weight=weight] [--time]
# | arg: -m, --message= - The text to print
# | arg: -w, --weight= - The weight for this progression. This value is 1 by default. Use a bigger value for a longer part of the script.
# | arg: -t, --time= - Print the execution time since the last call to this helper. Especially usefull to define weights.
# | arg: -l, --last= - Use for the last call of the helper, to fill te progression bar.
increment_progression=0
previous_weight=0
ynh_script_progression () {
# Declare an array to define the options of this helper.
declare -Ar args_array=( [m]=message= [w]=weight= [t]=time [l]=last )
local message
local weight
local time
local last
# Manage arguments with getopts
ynh_handle_getopts_args "$@"
weight=${weight:-1}
time=${time:-0}
last=${last:-0}
# Get the number of occurrences of 'ynh_script_progression' in the script. Except those are commented.
local helper_calls="$(grep --count "^[^#]*ynh_script_progression" $0)"
# Get the number of call with a weight value
local weight_calls=$(grep --perl-regexp --count "^[^#]*ynh_script_progression.*(--weight|-w )" $0)
# Get the weight of each occurrences of 'ynh_script_progression' in the script using --weight
local weight_valuesA="$(grep --perl-regexp "^[^#]*ynh_script_progression.*--weight" $0 | sed 's/.*--weight[= ]\([[:digit:]].*\)/\1/g')"
# Get the weight of each occurrences of 'ynh_script_progression' in the script using -w
local weight_valuesB="$(grep --perl-regexp "^[^#]*ynh_script_progression.*-w " $0 | sed 's/.*-w[= ]\([[:digit:]].*\)/\1/g')"
# Each value will be on a different line.
# Remove each 'end of line' and replace it by a '+' to sum the values.
local weight_values=$(( $(echo "$weight_valuesA" | tr '\n' '+') + $(echo "$weight_valuesB" | tr '\n' '+') 0 ))
# max_progression is a total number of calls to this helper.
# Less the number of calls with a weight value.
# Plus the total of weight values
local max_progression=$(( $helper_calls - $weight_calls + $weight_values ))
# Increment each execution of ynh_script_progression in this script by the weight of the previous call.
increment_progression=$(( $increment_progression + $previous_weight ))
# Store the weight of the current call in $previous_weight for next call
previous_weight=$weight
# Set the scale of the progression bar
local scale=20
# progress_string(1,2) should have the size of the scale.
local progress_string1="####################"
local progress_string0="...................."
# Reduce $increment_progression to the size of the scale
if [ $last -eq 0 ]
then
local effective_progression=$(( $increment_progression * $scale / $max_progression ))
# If last is specified, fill immediately the progression_bar
else
local effective_progression=$scale
fi
# Build $progression_bar from progress_string(1,2) according to $effective_progression
local progression_bar="${progress_string1:0:$effective_progression}${progress_string0:0:$(( $scale - $effective_progression ))}"
ynh_print_info "[$progression_bar] > ${message}"
}

View file

@ -15,6 +15,8 @@ ynh_abort_if_errors
# LOAD SETTINGS
#=================================================
ynh_script_progression --message="Loading installation settings..." --time --weight=1
app=$YNH_APP_INSTANCE_NAME
final_path=$(ynh_app_setting_get "$app" final_path)
@ -23,22 +25,37 @@ db_name=$(ynh_app_setting_get "$app" db_name)
#=================================================
# STANDARD BACKUP STEPS
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Stopping systemd services..." --time --weight=1
ynh_systemd_action --service_name="$app" --action="stop"
ynh_systemd_action --service_name="$app-celery" --action="stop"
#=================================================
# BACKUP THE APP MAIN DIR
#=================================================
ynh_script_progression --message="Backing up the main app directory..." --time --weight=1
ynh_backup "$final_path"
#=================================================
# BACKUP THE NGINX CONFIGURATION
#=================================================
ynh_script_progression --message="Backing up nginx web server configuration..." --time --weight=1
ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# BACKUP THE PostgreSQL DATABASE
#=================================================
ynh_script_progression --message="Backing up the PostgreSQL database..." --time --weight=1
ynh_psql_dump_db "$db_name" > db.sql
ynh_backup "db.sql"
@ -48,18 +65,45 @@ ynh_backup "db.sql"
# BACKUP THE CRON FILE
#=================================================
ynh_script_progression --message="Backing up systemd configuration..." --time --weight=1
ynh_backup "/etc/cron.d/$app"
#=================================================
# BACKUP THE uwsgi files
#=================================================
ynh_script_progression --message="Backing up uwsgi configuration..." --time --weight=1
ynh_backup "/etc/uwsgi/apps-available/$app.ini"
ynh_backup "/etc/systemd/system/$app.service"
ynh_backup "/etc/systemd/system/$app-celery.service"
#=================================================
# BACKUP THE celery files
#=================================================
# nothing to do because it is inside $finalpath
#=================================================
# BACKUP THE hub binary file
#=================================================
ynh_script_progression --message="Backing up uwsgi configuration..." --time --weight=1
ynh_backup /usr/bin/hub
#=================================================
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Starting systemd services..." --time --weight=1
ynh_systemd_action --service_name="$app" --action="start"
ynh_systemd_action --service_name="$app-celery" --action="start"
#=================================================
# END OF SCRIPT
#=================================================
ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --time --last

View file

@ -5,7 +5,7 @@
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
set -eu
source _common.sh
source /usr/share/yunohost/helpers
@ -20,19 +20,15 @@ new_domain=$YNH_APP_NEW_DOMAIN
new_path=$YNH_APP_NEW_PATH
app=$YNH_APP_INSTANCE_NAME
final_path=/var/www/$app
#=================================================
# LOAD SETTINGS
#=================================================
ynh_script_progression --message="Loading installation settings..." --time --weight=1
final_path=$(ynh_app_setting_get "$app" final_path)
is_public=$(ynh_app_setting_get "$app" is_public)
#=================================================
# CHECK THE SYNTAX OF THE PATHS
#=================================================
test -n "$old_path" || old_path="/"
test -n "$new_path" || new_path="/"
new_path=$(ynh_normalize_url_path $new_path)
old_path=$(ynh_normalize_url_path $old_path)
#=================================================
# CHECK WHICH PARTS SHOULD BE CHANGED
#=================================================
@ -50,17 +46,15 @@ then
fi
#=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
# STANDARD MODIFICATIONS
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
# Backup the current version of the app
# ynh_backup_before_upgrade
# ynh_clean_setup () {
# # restore it if the upgrade fails
# ynh_restore_upgradebackup
# }
# # Exit if an error occurs during the execution of the script
# ynh_abort_if_errors
ynh_script_progression --message="Stopping systemd services..." --time --weight=1
ynh_systemd_action --service_name="$app" --action="stop"
ynh_systemd_action --service_name="$app-celery" --action="stop"
#=================================================
# STANDARD MODIFICATIONS
@ -68,6 +62,8 @@ fi
# MODIFY URL IN NGINX CONF
#=================================================
ynh_script_progression --message="Updating nginx web server configuration..." --time --weight=1
nginx_conf_path="/etc/nginx/conf.d/$old_domain.d/$app.conf"
finalnginxconf=$nginx_conf_path
@ -81,6 +77,7 @@ fi
# Change the domain for nginx
if [ $change_domain -eq 1 ]
then
finalnginxconf="/etc/nginx/conf.d/${new_domain}.d/${app}.conf"
mv "$nginx_conf_path" "$finalnginxconf"
fi
@ -88,8 +85,7 @@ fi
#=================================================
# Edit specific content from nginx configuration
#=================================================
settings="$final_path/venv/lib/python2.7/site-packages/weblate/settings.py"
settings="$final_path/venv/lib/python3.5/site-packages/weblate/settings.py"
if [ "$old_path" == "/" ] && [ "$new_path" != "/" ]
then
@ -99,10 +95,6 @@ then
# ynh panel is useless for public websites
ynh_replace_string " #include conf.d/" " include conf.d/" "$finalnginxconf"
fi
# root install as an empty PATHURL to prevent '//static'
ynh_replace_string "URL_PREFIX = ''" "URL_PREFIX = '$new_path'" "$settings"
ynh_store_file_checksum "$finalnginxconf"
fi
if [ "$old_path" != "/" ] && [ "$new_path" == "/" ]
@ -110,37 +102,47 @@ then
# ynh panel is only comptable with non-root installation
ynh_replace_string " include conf.d/" " #include conf.d/" "$finalnginxconf"
# root install as an empty PATHURL to prevent '//static'
ynh_replace_string "URL_PREFIX = '$old_path'" "URL_PREFIX = ''" "$settings"
ynh_store_file_checksum "$finalnginxconf"
fi
ynh_store_file_checksum "$finalnginxconf"
#=================================================
# MODIFY settings.py
#=================================================
settingspy_conf_path="$final_path/venv/lib/python2.7/site-packages/weblate/settings.py"
ynh_script_progression --message="Modify weblate's config file..." --time --weight=1
# Change the path in the nginx config file
if [ $change_path -eq 1 ]
then
ynh_replace_string "URL_PREFIX = '$old_path" "URL_PREFIX = '$new_path" "$settingspy_conf_path"
ynh_replace_string "URL_PREFIX = '$old_path" "URL_PREFIX = '$new_path" "$settings"
fi
# Change the domain for nginx
if [ $change_domain -eq 1 ]
then
# replace SERVER_EMAIL
ynh_replace_string "noreply@$old_domain" "noreply@$new_domain" "$settingspy_conf_path"
ynh_replace_string "noreply@$old_domain" "noreply@$new_domain" "$settings"
# replace ALLOWED_HOSTS
ynh_replace_string "['$old_domain']" "['$new_domain']" "$settingspy_conf_path"
ynh_replace_string "['$old_domain']" "['$new_domain']" "$settings"
fi
if [ "$old_path" == "/" ] && [ "$new_path" != "/" ]
then
ynh_replace_string "URL_PREFIX = ''" "URL_PREFIX = '$new_path'" "$settings"
fi
if [ "$old_path" != "/" ] && [ "$new_path" == "/" ]
then
# root install as an empty PATHURL to prevent '//static'
ynh_replace_string "URL_PREFIX = '$old_path'" "URL_PREFIX = ''" "$settings"
fi
ynh_store_file_checksum "$settings"
#=================================================
# ChangeSite inside weblate
#==========================================
#=================================================
ynh_script_progression --message="Run weblate's command changesite..." --time --weight=1
(
set +eu
source "${final_path}/venv/bin/activate"
@ -151,9 +153,22 @@ fi
#=================================================
# GENERIC FINALISATION
#=================================================
# RELOAD NGINX and Weblate
# START SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Starting systemd services..." --time --weight=1
ynh_systemd_action --service_name="$app" --action="start"
ynh_systemd_action --service_name="$app-celery" --action="start"
#=================================================
# RELOAD NGINX
#=================================================
ynh_script_progression --message="Reloading nginx web server..." --time --weight=1
ynh_systemd_action --service_name=nginx --action=reload
#=================================================
# END OF SCRIPT
#=================================================
systemctl reload nginx
ynh_script_progression --message="Change of URL completed for $app" --time --last

View file

@ -5,7 +5,7 @@
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
set -eu
source _common.sh
source /usr/share/yunohost/helpers
@ -42,12 +42,8 @@ app=$YNH_APP_INSTANCE_NAME
#=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#=================================================
ynh_script_progression --message="Validating installation parameters..." --time --weight=1
# Normalize the url path syntax
path_url=$(ynh_normalize_url_path "$path_url")
# Check web path availability
ynh_webpath_available "$domain" "$path_url"
# Register (book) web path
ynh_webpath_register "$app" "$domain" "$path_url"
@ -60,6 +56,8 @@ mkdir -p "$final_path"
# STORE SETTINGS FROM MANIFEST
#=================================================
ynh_script_progression --message="Storing installation settings..." --time --weight=1
ynh_app_setting_set "$app" domain "$domain"
ynh_app_setting_set "$app" path "$path_url"
ynh_app_setting_set "$app" admin "$admin"
@ -76,14 +74,14 @@ ynh_app_setting_set "$app" github_token "$github_token"
# INSTALL DEPENDENCIES
#=================================================
ynh_install_app_dependencies libxml2-dev libxslt-dev libfreetype6-dev \
libjpeg-dev libz-dev libyaml-dev python3-dev python3-pip python3-virtualenv \
postgresql libpq-dev uwsgi uwsgi-plugin-python3 \
mailutils python-celery-common virtualenv redis-server
ynh_script_progression --message="Installing dependencies..." --time --weight=1
ynh_install_app_dependencies "$pkg_dependencies"
#=================================================
# CREATE A PostgreSQL DATABASE
#=================================================
ynh_script_progression --message="Creating a PostgreSQL database..." --time --weight=1
db_name=$(ynh_sanitize_dbid "$app")
ynh_app_setting_set "$app" db_name "$db_name"
@ -93,12 +91,14 @@ ynh_psql_test_if_first_run
# Initialize database and store postgres password for upgrade
ynh_psql_setup_db "$db_name" "$app"
systemctl reload postgresql
ynh_systemd_action --service_name=postgresql --action=reload
#=================================================
# NGINX CONFIGURATION
#=================================================
ynh_script_progression --message="Configuring nginx web server..." --time --weight=1
# Create a dedicated nginx config
ynh_add_nginx_config
@ -117,6 +117,8 @@ fi
# CREATE DEDICATED USER
#=================================================
ynh_script_progression --message="Configuring system user..." --time --weight=1
# Hub needs a home directory with a config file
ynh_system_user_create "$app" "$final_path"
# Allow bash for our user, so he can use Hub
@ -126,6 +128,8 @@ chsh --shell /bin/bash "$app"
# Download and install hub
#=================================================
ynh_script_progression --message="Download and install hub..." --time --weight=1
arch=$(dpkg --print-architecture)
# Rasberry Pi: Debian armhf (ARM hard float) refers to the ARMv7
[[ $arch = "armhf" ]] && arch="arm"
@ -172,6 +176,9 @@ EOF
#=================================================
# PIP INSTALLATION
#=================================================
ynh_script_progression --message="Install weblate using PIP..." --time --weight=10
virtualenv --python=python3 "${final_path}/venv"
#run source in a 'sub shell'
(
@ -192,6 +199,9 @@ virtualenv --python=python3 "${final_path}/venv"
# https://docs.weblate.org/en/latest/admin/install.html#installation
# TODO: use --extra-search-dir=/path/to/dists
#=================================================
ynh_script_progression --message="Create weblate configuration file..." --time --weight=1
db_pwd=$(ynh_app_setting_get "$app" psqlpwd)
admin_mail=$(ynh_user_get_info "$admin" mail)
key=$(ynh_string_random 24)$(ynh_string_random 24)$(ynh_string_random 2)
@ -207,6 +217,7 @@ ynh_app_setting_set "$app" redis_db "$redis_db"
# SPECIFIC SETUP Filling up the database
# https://docs.weblate.org/en/latest/admin/install.html#filling-up-the-database
#==========================================
ynh_script_progression --message="Filling up the database..." --time --weight=1
(
set +o nounset
source "${final_path}/venv/bin/activate"
@ -226,6 +237,9 @@ ynh_app_setting_set "$app" redis_db "$redis_db"
#=================================================
# SETUP CRON
#=================================================
ynh_script_progression --message="Configure cron file..." --time --weight=1
cp ../conf/cron "/etc/cron.d/$app"
ynh_replace_string "__APP__" "$app" "/etc/cron.d/$app"
ynh_replace_string "__FINALPATH__" "$final_path/" "/etc/cron.d/$app"
@ -235,11 +249,12 @@ ynh_replace_string "__FINALPATH__" "$final_path/" "/etc/cron.d/$app"
#=================================================
# Calculate and store the config file checksum into the app settings
ynh_store_file_checksum "$final_path/venv/lib/python3.5/site-packages/weblate/settings.py"
ynh_store_file_checksum "$settings"
#=================================================
# SPECIFIC SETUP uwsgi
#=================================================
ynh_script_progression --message="Configure uwsgi..." --time --weight=1
finaluwsgiini="/etc/uwsgi/apps-available/$app.ini"
cp ../conf/uwsgi.ini "$finaluwsgiini"
@ -263,6 +278,8 @@ ynh_store_file_checksum "$finaluwsgiini"
# ACTIVATE CELERY
#=================================================
ynh_script_progression --message="Configure celery..." --time --weight=1
celeryconf="$final_path/celery-weblate"
cp ../conf/celery-weblate "$celeryconf"
@ -287,6 +304,8 @@ chown -R "$app": "$final_path/avatar-cache"
# SETUP SSOWAT
#=================================================
ynh_script_progression --message="Configuring SSOwat..." --time --weight=1
if [ "$is_public" -eq 0 ]
then # Remove the public access
ynh_app_setting_delete "$app" skipped_uris
@ -313,15 +332,18 @@ yunohost service add "$app-celery" --log "/var/log/$app-celery"
#=================================================
# Start weblate
#=================================================
ynh_script_progression --message="Starting weblate's services..." --time --weight=1
systemctl start "$app"
systemctl start "$app-celery"
ynh_systemd_action --service_name="$app" --action="start"
ynh_systemd_action --service_name="$app-celery" --action="start"
#=================================================
# RELOAD NGINX
#=================================================
systemctl reload nginx
ynh_script_progression --message="Reloading nginx web server..." --time --weight=1
ynh_systemd_action --service_name="nginx" --action="reload"
#=================================================
# SEND A README FOR THE ADMIN
@ -333,3 +355,5 @@ If you facing an issue or want to improve this app, please open a new issue in t
"
ynh_send_readme_to_admin "$message" "$admin"
ynh_script_progression --message="Installation of $app completed" --time --last

View file

@ -12,10 +12,12 @@ source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
ynh_script_progression --message="Loading installation settings..." --time --weight=1
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get "$app" domain)
db_name=$(ynh_app_setting_get "$app" db_name)
final_path=$(ynh_app_setting_get "$app" final_path)
#=================================================
# STANDARD REMOVE
@ -24,22 +26,23 @@ db_name=$(ynh_app_setting_get "$app" db_name)
#=================================================
# Remove a service from the admin panel, added by `yunohost service add`
if yunohost service status | grep -q "$app"
if yunohost service status "$app" >/dev/null 2>&1
then
echo "Remove $app service"
ynh_script_progression --message="Removing $app service..." --time --weight=1
yunohost service remove "$app"
fi
# Remove a service from the admin panel, added by `yunohost service add`
if yunohost service status | grep -q "$app-celery"
if yunohost service status "$app-celery" >/dev/null 2>&1
then
echo "Remove $app service"
ynh_script_progression --message="Removing $app-celery service..." --time --weight=1
yunohost service remove "$app-celery"
fi
#=================================================
# STOP WEBLATE'S SERVICES
#=================================================
ynh_script_progression --message="Stopping and removing systemd services..." --time --weight=1
ynh_remove_systemd_config "$app"
ynh_remove_systemd_config "$app-celery"
@ -47,6 +50,7 @@ ynh_remove_systemd_config "$app-celery"
#=================================================
# REMOVE THE PostgreSQL DATABASE
#=================================================
ynh_script_progression --message="Removing the PostgreSQL database..." --time --weight=1
# Remove a database if it exists, along with the associated user
ynh_psql_remove_db "$db_name" "$app"
@ -54,6 +58,7 @@ ynh_psql_remove_db "$db_name" "$app"
#=================================================
# REMOVE DEPENDENCIES
#=================================================
ynh_script_progression --message="Removing dependencies..." --time --weight=1
# Remove metapackage and its dependencies
ynh_remove_app_dependencies
@ -61,13 +66,15 @@ ynh_remove_app_dependencies
#=================================================
# REMOVE APP MAIN DIR
#=================================================
ynh_script_progression --message="Removing app main directory..." --time --weight=1
# Remove the app directory securely
ynh_secure_remove "/var/www/$app"
ynh_secure_remove "$final_path"
#=================================================
# REMOVE NGINX CONFIGURATION
#=================================================
ynh_script_progression --message="Removing nginx web server configuration..." --time --weight=1
# Remove the dedicated nginx config
ynh_remove_nginx_config
@ -92,6 +99,12 @@ ynh_secure_remove "/var/run/$app-celery"
#=================================================
# REMOVE DEDICATED USER
#=================================================
ynh_script_progression --message="Removing the dedicated system user..." --time --weight=1
# Delete a system user
ynh_system_user_delete "$app"
#=================================================
# END OF SCRIPT
#=================================================
ynh_script_progression --message="Removal of $app completed" --time --last

View file

@ -9,11 +9,16 @@
source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
#=================================================
# MANAGE SCRIPT FAILURE
#=================================================
ynh_abort_if_errors
#=================================================
# LOAD SETTINGS
#=================================================
ynh_script_progression --message="Loading settings..." --time --weight=1
app=$YNH_APP_INSTANCE_NAME
@ -26,11 +31,12 @@ db_pwd=$(ynh_app_setting_get "$app" psqlpwd)
#=================================================
# CHECK IF THE APP CAN BE RESTORED
#=================================================
ynh_script_progression --message="Validating restoration parameters..." --time --weight=1
# Check web path availability
ynh_webpath_available "$domain" "$path_url"
ynh_webpath_available "$domain" "$path_url" || ynh_die "Path not available: ${domain}${path_url}"
test ! -e "$final_path" || ynh_die "This path already contains a folder"
test ! -e "$final_path" || ynh_die "There is already a directory: $final_path"
#=================================================
# STANDARD RESTORATION STEPS
@ -43,12 +49,14 @@ ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# RESTORE THE APP MAIN DIR
#=================================================
ynh_script_progression --message="Restoring the app main directory..." --time --weight=1
ynh_restore_file "$final_path"
#=================================================
# RECREATE THE DEDICATED USER
#=================================================
ynh_script_progression --message="Recreating the dedicated system user..." --time --weight=1
# Create the dedicated user (if not existing)
ynh_system_user_create "$app" "/home/$app"
@ -67,23 +75,23 @@ chown -R "$app": "$final_path"
#=================================================
# REINSTALL DEPENDENCIES
#=================================================
ynh_script_progression --message="Reinstalling dependencies..." --time --weight=1
ynh_install_app_dependencies libxml2-dev libxslt-dev libfreetype6-dev \
libjpeg-dev libz-dev libyaml-dev python3-dev python3-pip python3-virtualenv \
postgresql libpq-dev uwsgi uwsgi-plugin-python3 memcached \
mailutils python-celery-common virtualenv redis-server
ynh_install_app_dependencies "$pkg_dependencies"
#=================================================
# RESTORE THE PostgreSQL DATABASE
#=================================================
ynh_script_progression --message="Restoring the PostgreSQL database..." --time --weight=1
ynh_psql_test_if_first_run
ynh_psql_create_db "$db_name" "$db_name" "$db_pwd"
ynh_psql_setup_db "$db_name" "$db_name" "$db_pwd"
ynh_psql_execute_file_as_root ./db.sql "$db_name"
#=================================================
# RESTORE Weblate service
#=================================================
ynh_script_progression --message="Restoring systemd configurations..." --time --weight=1
usermod --append --groups www-data "$app"
@ -112,7 +120,7 @@ ynh_restore_file "/etc/cron.d/$app"
#=================================================
# RESTORE THE HUB BINARY FILE
#=================================================
ynh_script_progression --message="Restore hub's binary file..." --time --weight=1
ynh_restore_file "/usr/bin/hub"
#=================================================
@ -120,12 +128,19 @@ ynh_restore_file "/usr/bin/hub"
#=================================================
# Start weblate
#=================================================
ynh_script_progression --message="Starting a systemd service..." --time --weight=1
systemctl start "$app"
systemctl start "$app-celery"
ynh_systemd_action --service_name="$app" --action="start"
ynh_systemd_action --service_name="$app-celery" --action="start"
#=================================================
# RELOAD NGINX & uwsgi
# RELOAD NGINX
#=================================================
ynh_script_progression --message="Reloading nginx web server and php-fpm..." --time --weight=1
systemctl reload nginx
ynh_systemd_action --service_name="nginx" --action="reload"
#=================================================
# END OF SCRIPT
#=================================================
ynh_script_progression --message="Restoration completed for $app" --time --last

View file

@ -11,6 +11,7 @@ source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
ynh_script_progression --message="Loading installation settings..." --time --weight=1
app=$YNH_APP_INSTANCE_NAME
@ -31,6 +32,7 @@ redis_db=$(ynh_app_setting_get "$app" redis_db)
#=================================================
# Get previous version number
#=================================================
ynh_script_progression --message="Get previous version number..." --time --weight=1
(
set +o nounset
@ -49,6 +51,7 @@ test -e "$previous_version_template" || ynh_die "Previous version unknown: $prev
#=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#=================================================
ynh_script_progression --message="Backing up the app before upgrading (may take a while)..." --time --weight=1
# Backup the current version of the app
ynh_backup_before_upgrade
@ -62,6 +65,7 @@ ynh_abort_if_errors
#=================================================
# ENSURE DOWNWARD COMPATIBILITY
#=================================================
ynh_script_progression --message="Ensuring downward compatibility..." --time --weight=1
if [ "$is_public" = "Yes" ]; then
ynh_app_setting_set "$app" is_public 1 # Fix is_public as a boolean value
@ -171,6 +175,18 @@ path_url=$(ynh_normalize_url_path "$path_url")
#=================================================
# STANDARD UPGRADE STEPS
#=================================================
# STOP SYSTEMD SERVICE
#=================================================
ynh_script_progression --message="Stopping systemd services..." --time --weight=1
ynh_systemd_action --service_name="$app" --action="stop"
ynh_systemd_action --service_name="$app-celery" --action="stop"
#=================================================
# NGINX CONFIGURATION
#=================================================
ynh_script_progression --message="Upgrading nginx web server configuration..." --time --weight=1
# Create a dedicated nginx config
ynh_add_nginx_config
@ -186,28 +202,27 @@ then
ynh_store_file_checksum "$finalnginxconf"
fi
#=================================================
# SPECIFIC UPGRADE
#=================================================
# Update dependencies
#=================================================
ynh_install_app_dependencies "$pkg_dependencies"
#=================================================
# CREATE DEDICATED USER
#=================================================
ynh_script_progression --message="Making sure dedicated system user exists..." --time --weight=1
# Create a system user
ynh_system_user_create "$app" "/home/$app"
chsh --shell /bin/bash "$app"
#=================================================
# SPECIFIC UPGRADE
#=================================================
# Update dependencies
#=================================================
ynh_install_app_dependencies libxml2-dev libxslt-dev libfreetype6-dev \
libjpeg-dev libz-dev libyaml-dev python3-dev python3-pip python3-virtualenv \
postgresql libpq-dev uwsgi uwsgi-plugin-python3 memcached \
mailutils python-celery-common virtualenv redis-server
#=================================================
# SPECIFIC SETUP uwsgi
#=================================================
ynh_script_progression --message="Configure uwsgi..." --time --weight=1
finaluwsgiini="/etc/uwsgi/apps-available/$app.ini"
cp ../conf/uwsgi.ini "$finaluwsgiini"
@ -233,11 +248,13 @@ ynh_store_file_checksum "$finaluwsgiini"
if [ "$migrate_to_python3" -eq 1 ]
then
ynh_script_progression --message="Rebuild the virtualenv with Python3..." --time --weight=1
ynh_secure_remove "${final_path}/venv"
virtualenv --python=python3 "${final_path}/venv"
fi
(
ynh_script_progression --message="Install weblate using PIP..." --time --weight=10
set +o nounset
source "${final_path}/venv/bin/activate"
set -o nounset
@ -259,7 +276,7 @@ fi
#=================================================
# CONFIG FILE UPGRADE
#=================================================
ynh_script_progression --message="Create weblate configuration file..." --time --weight=1
# save old settings file
old_settings="$final_path/settings.$previous_version.old.py"
@ -314,6 +331,7 @@ ynh_secure_remove "$old_settings"
#=================================================
# ACTIVATE CELERY
#=================================================
ynh_script_progression --message="Configure celery..." --time --weight=1
celeryconf="$final_path/celery-weblate"
cp ../conf/celery-weblate "$celeryconf"
@ -326,7 +344,7 @@ ynh_add_systemd_config "$app-celery" "celery-weblate.service"
#=================================================
# Run migration scripts
#=================================================
ynh_script_progression --message="Run migration scripts..." --time --weight=1
(
set +o nounset
source "${final_path}/venv/bin/activate"
@ -373,6 +391,8 @@ ynh_store_file_checksum "$final_path/venv/lib/python3.5/site-packages/weblate/se
#=================================================
# SETUP CRON
#=================================================
ynh_script_progression --message="Configure cron file..." --time --weight=1
cp ../conf/cron "/etc/cron.d/$app"
ynh_replace_string "__APP__" "$app" "/etc/cron.d/$app"
ynh_replace_string "__FINALPATH__" "$final_path/" "/etc/cron.d/$app"
@ -393,6 +413,7 @@ chown -R "$app": "$final_path/avatar-cache"
#=================================================
# SETUP SSOWAT
#=================================================
ynh_script_progression --message="Configuring SSOwat..." --time --weight=1
if [ $is_public -eq 0 ]
then # Remove the public access
@ -413,12 +434,21 @@ fi
#=================================================
# Restart weblate
#=================================================
ynh_script_progression --message="Starting weblate's services..." --time --weight=1
systemctl start "$app"
systemctl start "$app-celery"
ynh_systemd_action --service_name="$app" --action="start"
ynh_systemd_action --service_name="$app-celery" --action="start"
#=================================================
# RELOAD NGINX
#=================================================
systemctl reload nginx
ynh_script_progression --message="Reloading nginx web server..." --time --weight=1
ynh_systemd_action --service_name="nginx" --action="reload"
#=================================================
# END OF SCRIPT
#=================================================
ynh_script_progression --message="Upgrade of $app completed" --time --last