音楽で楽しみましょう!-Let's have fun with music!-

Signed-off-by: Shin'ya Minazuki <shinyoukai@laidback.moe>
This commit is contained in:
Shin'ya Minazuki 2026-01-24 16:16:49 -03:00
commit 54c6d22102
517 changed files with 637 additions and 639 deletions

View file

@ -19,7 +19,7 @@ LOGLEVEL = (
"DEBUG" if env.bool("DEBUG", False) else env("LOGLEVEL", default="info").upper()
)
"""
Default logging level for the Funkwhale processes.
Default logging level for the FunQuail processes.
.. note::
The `DEBUG` variable overrides the `LOGLEVEL` if it is set to `TRUE`.
@ -39,7 +39,7 @@ Available levels:
IS_DOCKER_SETUP = env.bool("IS_DOCKER_SETUP", False)
if env("FUNKWHALE_SENTRY_DSN", default=None) is not None:
if env("FUNQUAIL_SENTRY_DSN", default=None) is not None:
import sentry_sdk
from sentry_sdk.integrations.celery import CeleryIntegration
from sentry_sdk.integrations.django import DjangoIntegration
@ -47,15 +47,15 @@ if env("FUNKWHALE_SENTRY_DSN", default=None) is not None:
from funkwhale_api import __version__ as version
sentry_sdk.init(
dsn=env("FUNKWHALE_SENTRY_DSN"),
dsn=env("FUNQUAIL_SENTRY_DSN"),
integrations=[DjangoIntegration(), CeleryIntegration()],
traces_sample_rate=env("FUNKWHALE_SENTRY_SR", default=0.25),
traces_sample_rate=env("FUNQUAIL_SENTRY_SR", default=0.25),
send_default_pii=False,
environment="api",
debug=env.bool("DEBUG", False),
release=version,
)
sentry_sdk.set_tag("instance", env("FUNKWHALE_HOSTNAME"))
sentry_sdk.set_tag("instance", env("FUNQUAIL_HOSTNAME"))
LOGGING_CONFIG = None
logging.config.dictConfig(
@ -114,24 +114,24 @@ else:
logger.info("Loaded env file at %s/.env", path)
break
FUNKWHALE_PLUGINS_PATH = env(
"FUNKWHALE_PLUGINS_PATH", default="/srv/funkwhale/plugins/"
FUNQUAIL_PLUGINS_PATH = env(
"FUNQUAIL_PLUGINS_PATH", default="/srv/funkwhale/plugins/"
)
"""
Path to a directory containing Funkwhale plugins.
Path to a directory containing FunQuail plugins.
These are imported at runtime.
"""
sys.path.append(FUNKWHALE_PLUGINS_PATH)
sys.path.append(FUNQUAIL_PLUGINS_PATH)
CORE_PLUGINS = [
"funkwhale_api.contrib.scrobbler",
"funkwhale_api.contrib.listenbrainz",
"funkwhale_api.contrib.maloja",
]
LOAD_CORE_PLUGINS = env.bool("FUNKWHALE_LOAD_CORE_PLUGINS", default=True)
PLUGINS = [p for p in env.list("FUNKWHALE_PLUGINS", default=[]) if p]
LOAD_CORE_PLUGINS = env.bool("FUNQUAIL_LOAD_CORE_PLUGINS", default=True)
PLUGINS = [p for p in env.list("FUNQUAIL_PLUGINS", default=[]) if p]
"""
List of Funkwhale plugins to load.
List of FunQuail plugins to load.
"""
if LOAD_CORE_PLUGINS:
PLUGINS = CORE_PLUGINS + PLUGINS
@ -149,40 +149,40 @@ from .. import plugins # noqa
plugins.startup.autodiscover([p + ".funkwhale_startup" for p in PLUGINS])
DEPENDENCIES = plugins.trigger_filter(plugins.PLUGINS_DEPENDENCIES, [], enabled=True)
plugins.install_dependencies(DEPENDENCIES)
FUNKWHALE_HOSTNAME = None
FUNKWHALE_HOSTNAME_SUFFIX = env("FUNKWHALE_HOSTNAME_SUFFIX", default=None)
FUNKWHALE_HOSTNAME_PREFIX = env("FUNKWHALE_HOSTNAME_PREFIX", default=None)
if FUNKWHALE_HOSTNAME_PREFIX and FUNKWHALE_HOSTNAME_SUFFIX:
FUNQUAIL_HOSTNAME = None
FUNQUAIL_HOSTNAME_SUFFIX = env("FUNQUAIL_HOSTNAME_SUFFIX", default=None)
FUNQUAIL_HOSTNAME_PREFIX = env("FUNQUAIL_HOSTNAME_PREFIX", default=None)
if FUNQUAIL_HOSTNAME_PREFIX and FUNQUAIL_HOSTNAME_SUFFIX:
# We're in traefik case, in development
FUNKWHALE_HOSTNAME = "{}.{}".format(
FUNKWHALE_HOSTNAME_PREFIX, FUNKWHALE_HOSTNAME_SUFFIX
FUNQUAIL_HOSTNAME = "{}.{}".format(
FUNQUAIL_HOSTNAME_PREFIX, FUNQUAIL_HOSTNAME_SUFFIX
)
FUNKWHALE_PROTOCOL = env("FUNKWHALE_PROTOCOL", default="https")
FUNQUAIL_PROTOCOL = env("FUNQUAIL_PROTOCOL", default="https")
else:
try:
FUNKWHALE_HOSTNAME = env("FUNKWHALE_HOSTNAME")
FUNQUAIL_HOSTNAME = env("FUNQUAIL_HOSTNAME")
"""
Hostname of your Funkwhale pod, e.g. ``mypod.audio``.
Hostname of your FunQuail pod, e.g. ``mypod.audio``.
"""
FUNKWHALE_PROTOCOL = env("FUNKWHALE_PROTOCOL", default="https")
FUNQUAIL_PROTOCOL = env("FUNQUAIL_PROTOCOL", default="https")
"""
Protocol end users will use to access your pod, either
``http`` or ``https``.
"""
except Exception:
FUNKWHALE_URL = env("FUNKWHALE_URL")
_parsed = urlsplit(FUNKWHALE_URL)
FUNKWHALE_HOSTNAME = _parsed.netloc
FUNKWHALE_PROTOCOL = _parsed.scheme
FUNQUAIL_URL = env("FUNQUAIL_URL")
_parsed = urlsplit(FUNQUAIL_URL)
FUNQUAIL_HOSTNAME = _parsed.netloc
FUNQUAIL_PROTOCOL = _parsed.scheme
FUNKWHALE_PROTOCOL = FUNKWHALE_PROTOCOL.lower()
FUNKWHALE_HOSTNAME = FUNKWHALE_HOSTNAME.lower()
FUNKWHALE_URL = f"{FUNKWHALE_PROTOCOL}://{FUNKWHALE_HOSTNAME}"
FUNKWHALE_SPA_HTML_ROOT = env("FUNKWHALE_SPA_HTML_ROOT", default=FUNKWHALE_URL)
FUNQUAIL_PROTOCOL = FUNQUAIL_PROTOCOL.lower()
FUNQUAIL_HOSTNAME = FUNQUAIL_HOSTNAME.lower()
FUNQUAIL_URL = f"{FUNQUAIL_PROTOCOL}://{FUNQUAIL_HOSTNAME}"
FUNQUAIL_SPA_HTML_ROOT = env("FUNQUAIL_SPA_HTML_ROOT", default=FUNQUAIL_URL)
"""
URL or path to the Web Application files.
Funkwhale needs access to it so that it can inject <meta> tags relevant
FunQuail needs access to it so that it can inject <meta> tags relevant
to the given page (e.g page title, cover, etc.).
If a URL is specified, the index.html file will be fetched through HTTP.
@ -193,20 +193,20 @@ Use something like ``/srv/funkwhale/front/dist/`` if the web processes shows
request errors related to this.
"""
FUNKWHALE_SPA_HTML_CACHE_DURATION = env.int(
"FUNKWHALE_SPA_HTML_CACHE_DURATION", default=60 * 15
FUNQUAIL_SPA_HTML_CACHE_DURATION = env.int(
"FUNQUAIL_SPA_HTML_CACHE_DURATION", default=60 * 15
)
FUNKWHALE_EMBED_URL = env("FUNKWHALE_EMBED_URL", default=FUNKWHALE_URL + "/embed.html")
FUNKWHALE_SPA_REWRITE_MANIFEST = env.bool(
"FUNKWHALE_SPA_REWRITE_MANIFEST", default=True
FUNQUAIL_EMBED_URL = env("FUNQUAIL_EMBED_URL", default=FUNQUAIL_URL + "/embed.html")
FUNQUAIL_SPA_REWRITE_MANIFEST = env.bool(
"FUNQUAIL_SPA_REWRITE_MANIFEST", default=True
)
FUNKWHALE_SPA_REWRITE_MANIFEST_URL = env.bool(
"FUNKWHALE_SPA_REWRITE_MANIFEST_URL", default=None
FUNQUAIL_SPA_REWRITE_MANIFEST_URL = env.bool(
"FUNQUAIL_SPA_REWRITE_MANIFEST_URL", default=None
)
APP_NAME = "Funkwhale"
APP_NAME = "FunQuail"
FEDERATION_HOSTNAME = env("FEDERATION_HOSTNAME", default=FUNKWHALE_HOSTNAME).lower()
FEDERATION_HOSTNAME = env("FEDERATION_HOSTNAME", default=FUNQUAIL_HOSTNAME).lower()
FEDERATION_SERVICE_ACTOR_USERNAME = env(
"FEDERATION_SERVICE_ACTOR_USERNAME", default="service"
)
@ -219,9 +219,9 @@ actor or channel.
More pages means more content will be loaded, but will require more resources.
"""
ALLOWED_HOSTS = env.list("DJANGO_ALLOWED_HOSTS", default=[]) + [FUNKWHALE_HOSTNAME]
ALLOWED_HOSTS = env.list("DJANGO_ALLOWED_HOSTS", default=[]) + [FUNQUAIL_HOSTNAME]
"""
List of allowed hostnames for which the Funkwhale server will answer.
List of allowed hostnames for which the FunQuail server will answer.
"""
# APP CONFIGURATION
@ -286,7 +286,7 @@ LOCAL_APPS = (
ADDITIONAL_APPS = env.list("ADDITIONAL_APPS", default=[])
"""
List of Django apps to load in addition to Funkwhale plugins and apps.
List of Django apps to load in addition to FunQuail plugins and apps.
"""
INSTALLED_APPS = (
LOCAL_APPS
@ -341,11 +341,11 @@ FIXTURE_DIRS = (str(APPS_DIR.path("fixtures")),)
# EMAIL
# ------------------------------------------------------------------------------
DEFAULT_FROM_EMAIL = env(
"DEFAULT_FROM_EMAIL", default=f"Funkwhale <noreply@{FUNKWHALE_HOSTNAME}>"
"DEFAULT_FROM_EMAIL", default=f"FunQuail <noreply@{FUNQUAIL_HOSTNAME}>"
)
"""
The name and email address used to send system emails.
Defaults to ``Funkwhale <noreply@yourdomain>``.
Defaults to ``FunQuail <noreply@yourdomain>``.
Available formats:
@ -353,7 +353,7 @@ Available formats:
- ``<Email address>``
"""
EMAIL_SUBJECT_PREFIX = env("EMAIL_SUBJECT_PREFIX", default="[Funkwhale] ")
EMAIL_SUBJECT_PREFIX = env("EMAIL_SUBJECT_PREFIX", default="[FunQuail] ")
"""
Subject prefix for system emails.
"""
@ -542,7 +542,7 @@ STATIC_ROOT = env("STATIC_ROOT", default=str(ROOT_DIR("staticfiles")))
The path where static files are collected.
"""
# See: https://docs.djangoproject.com/en/dev/ref/settings/#static-url
STATIC_URL = env("STATIC_URL", default=FUNKWHALE_URL + "/staticfiles/")
STATIC_URL = env("STATIC_URL", default=FUNQUAIL_URL + "/staticfiles/")
DEFAULT_FILE_STORAGE = "funkwhale_api.common.storage.ASCIIFileSystemStorage"
PROXY_MEDIA = env.bool("PROXY_MEDIA", default=True)
@ -652,10 +652,10 @@ The path where you store media files (such as album covers or audio tracks)
on your system. Make sure this directory actually exists.
"""
# See: https://docs.djangoproject.com/en/dev/ref/settings/#media-url
MEDIA_URL = env("MEDIA_URL", default=FUNKWHALE_URL + "/media/")
MEDIA_URL = env("MEDIA_URL", default=FUNQUAIL_URL + "/media/")
"""
The URL from which your pod serves media files. Change this if you're hosting media
files on a separate domain, or if you host Funkwhale on a non-standard port.
files on a separate domain, or if you host FunQuail on a non-standard port.
"""
FILE_UPLOAD_PERMISSIONS = 0o644
@ -663,7 +663,7 @@ ATTACHMENTS_UNATTACHED_PRUNE_DELAY = env.int(
"ATTACHMENTS_UNATTACHED_PRUNE_DELAY", default=3600 * 24
)
"""
The delay in seconds before Funkwhale prunes uploaded but detached attachments
The delay in seconds before FunQuail prunes uploaded but detached attachments
from the system.
"""
@ -991,7 +991,7 @@ Validators include password length, common words, similarity with username.
"""
if DISABLE_PASSWORD_VALIDATORS:
AUTH_PASSWORD_VALIDATORS = []
ACCOUNT_ADAPTER = "funkwhale_api.users.adapters.FunkwhaleAccountAdapter"
ACCOUNT_ADAPTER = "funkwhale_api.users.adapters.FunQuailAccountAdapter"
CORS_ORIGIN_ALLOW_ALL = True
# CORS_ORIGIN_WHITELIST = (
# 'localhost',
@ -1000,7 +1000,7 @@ CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
REST_FRAMEWORK = {
"DEFAULT_PAGINATION_CLASS": "funkwhale_api.common.pagination.FunkwhalePagination",
"DEFAULT_PAGINATION_CLASS": "funkwhale_api.common.pagination.FunQuailPagination",
"PAGE_SIZE": 25,
"DEFAULT_PARSER_CLASSES": (
"rest_framework.parsers.JSONParser",
@ -1034,7 +1034,7 @@ of the service, especially on public pods .
if THROTTLING_ENABLED:
REST_FRAMEWORK["DEFAULT_THROTTLE_CLASSES"] = env.list(
"THROTTLE_CLASSES",
default=["funkwhale_api.common.throttling.FunkwhaleThrottle"],
default=["funkwhale_api.common.throttling.FunQuailThrottle"],
)
THROTTLING_SCOPES = {
@ -1296,7 +1296,7 @@ Default timeout for external requests.
MUSIC_DIRECTORY_PATH = env("MUSIC_DIRECTORY_PATH", default=None)
"""
The path on your server where Funkwhale places
The path on your server where FunQuail places
files from in-place imports. This path needs to be
readable by the webserver and ``api`` and ``worker``
processes.
@ -1408,9 +1408,9 @@ INSTANCE_SUPPORT_MESSAGE_DELAY = env.int("INSTANCE_SUPPORT_MESSAGE_DELAY", defau
The number of days before your pod shows the "support your pod" message.
The timer starts after the user signs up.
"""
FUNKWHALE_SUPPORT_MESSAGE_DELAY = env.int("FUNKWHALE_SUPPORT_MESSAGE_DELAY", default=15)
FUNQUAIL_SUPPORT_MESSAGE_DELAY = env.int("FUNQUAIL_SUPPORT_MESSAGE_DELAY", default=15)
"""
The number of days before your pod shows the "support Funkwhale" message.
The number of days before your pod shows the "support FunQuail" message.
The timer starts after the user signs up.
"""
@ -1466,7 +1466,7 @@ IGNORE_FORWARDED_HOST_AND_PROTO = env.bool(
"IGNORE_FORWARDED_HOST_AND_PROTO", default=True
)
"""
Use :attr:`FUNKWHALE_HOSTNAME` and :attr:`FUNKWHALE_PROTOCOL`
Use :attr:`FUNQUAIL_HOSTNAME` and :attr:`FUNQUAIL_PROTOCOL`
instead of request header.
"""

View file

@ -100,7 +100,7 @@ CSRF_TRUSTED_ORIGINS = [o for o in ALLOWED_HOSTS]
REST_FRAMEWORK["DEFAULT_SCHEMA_CLASS"] = "funkwhale_api.schema.CustomAutoSchema"
SPECTACULAR_SETTINGS = {
"TITLE": "Funkwhale API",
"TITLE": "FunQuail API",
"DESCRIPTION": open("Readme.md").read(),
"VERSION": funkwhale_version,
"SCHEMA_PATH_PREFIX": "/api/(v[0-9])?",
@ -112,7 +112,7 @@ SPECTACULAR_SETTINGS = {
"SERVERS": [
{"url": "https://demo.funkwhale.audio", "description": "Demo Server"},
{
"url": "https://funkwhale.audio",
"url": "https://funquail.laidback.moe",
"description": "Read server with real content",
},
{
@ -121,7 +121,7 @@ SPECTACULAR_SETTINGS = {
"variables": {
"domain": {
"default": "yourdomain",
"description": "Your Funkwhale Domain",
"description": "Your FunQuail Domain",
},
"protocol": {"enum": ["http", "https"], "default": "https"},
},

View file

@ -1,6 +1,6 @@
import os
os.environ.setdefault("FUNKWHALE_URL", "http://funkwhale.dev")
os.environ.setdefault("FUNQUAIL_URL", "http://funkwhale.dev")
from .common import * # noqa