[tool.poetry] name = "funkwhale-api" version = "1.4.0" description = "Funkwhale API" authors = ["Funkwhale Collective"] homepage = "https://funkwhale.audio" repository = "https://dev.funkwhale.audio/funkwhale/funkwhale" documentation = "https://docs.funkwhale.audio" license = "AGPL-3.0-only" packages = [ { include = "funkwhale_api" }, { include = "config" }, ] include = [ { path = "*.html" }, { path = "*.json" }, { path = "*.png" }, { path = "*.txt" }, ] exclude = ["tests"] [tool.poetry.scripts] funkwhale-manage = 'funkwhale_api.main:main' [tool.poetry.dependencies] python = "^3.8,<3.13" # Django dj-rest-auth = "5.0.2" django = "4.2.9" django-allauth = "0.55.2" django-cache-memoize = "0.1.10" django-cacheops = "==7.0.2" django-cleanup = "==8.1.0" django-cors-headers = "==4.3.1" django-dynamic-preferences = "==1.14.0" django-environ = "==0.10.0" django-filter = "==23.5" django-oauth-toolkit = "2.2.0" django-redis = "==5.2.0" django-storages = "==1.13.2" django-versatileimagefield = "==3.1" djangorestframework = "==3.14.0" drf-spectacular = "==0.26.5" markdown = "==3.4.4" persisting-theory = "==1.0" psycopg2 = "==2.9.9" redis = "==5.0.1" # Django LDAP django-auth-ldap = "==4.1.0" python-ldap = "==3.4.4" # Channels channels = { extras = ["daphne"], version = "==4.0.0" } channels-redis = "==4.1.0" # Celery kombu = "5.3.4" celery = "5.3.6" # Deployment gunicorn = "==21.2.0" uvicorn = { version = "==0.20.0", extras = ["standard"] } # Libs aiohttp = "3.9.1" arrow = "==1.2.3" backports-zoneinfo = { version = "==0.2.1", python = "<3.9" } bleach = "==6.1.0" boto3 = "==1.26.161" click = "==8.1.7" cryptography = "==41.0.7" feedparser = "==6.0.10" liblistenbrainz = "==0.5.5" musicbrainzngs = "==0.7.1" mutagen = "==1.46.0" pillow = "==10.2.0" pydub = "==0.25.1" pyld = "==2.0.3" python-magic = "==0.4.27" requests = "==2.31.0" requests-http-message-signatures = "==0.3.1" sentry-sdk = "==1.19.1" watchdog = "==4.0.0" troi = "==2024.1.26.0" lb-matching-tools = "==2024.1.25.0rc1" unidecode = "==1.3.7" pycountry = "23.12.11" # Typesense typesense = { version = "==0.15.1", optional = true } # Dependencies pinning ipython = "==8.12.3" pluralizer = "==1.2.0" service-identity = "==24.1.0" unicode-slugify = "==0.1.5" [tool.poetry.group.dev.dependencies] aioresponses = "==0.7.6" asynctest = "==0.13.0" black = "==24.1.1" coverage = { version = "==7.4.1", extras = ["toml"] } debugpy = "==1.6.7.post1" django-coverage-plugin = "==3.0.0" django-debug-toolbar = "==4.2.0" factory-boy = "==3.2.1" faker = "==23.2.1" flake8 = "==3.9.2" ipdb = "==0.13.13" pytest = "==8.0.0" pytest-asyncio = "==0.21.0" prompt-toolkit = "==3.0.41" pytest-cov = "==4.0.0" pytest-django = "==4.5.2" pytest-env = "==1.1.3" pytest-mock = "==3.10.0" pytest-randomly = "==3.12.0" pytest-sugar = "==1.0.0" requests-mock = "==1.10.0" pylint = "==3.0.3" pylint-django = "==2.5.5" django-extensions = "==3.2.3" [tool.poetry.extras] typesense = ["typesense"] [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" [tool.pylint.master] load-plugins = ["pylint_django"] django-settings-module = "config.settings.testing" [tool.pylint.messages_control] disable = [ "invalid-name", "missing-class-docstring", "missing-function-docstring", "missing-module-docstring", ] [tool.pylint.design] max-parents = 13 [tool.pylint.format] max-line-length = 120 [tool.pytest.ini_options] python_files = [ "tests.py", "test_*.py", "*_tests.py", ] testpaths = ["tests"] addopts = "-p no:warnings" env = [ "SECRET_KEY=test", "EMAIL_CONFIG=consolemail://", "CELERY_BROKER_URL=memory://", "CELERY_TASK_ALWAYS_EAGER=True", "FUNKWHALE_HOSTNAME_SUFFIX=", "FUNKWHALE_HOSTNAME_PREFIX=", "FUNKWHALE_HOSTNAME=test.federation", "FEDERATION_HOSTNAME=test.federation", "FUNKWHALE_URL=https://test.federation", "DEBUG_TOOLBAR_ENABLED=False", "DEBUG=False", "WEAK_PASSWORDS=True", "CREATE_IMAGE_THUMBNAILS=False", "FORCE_HTTPS_URLS=False", "FUNKWHALE_SPA_HTML_ROOT=http://noop/", "PROXY_MEDIA=true", "MUSIC_USE_DENORMALIZATION=true", "EXTERNAL_MEDIA_PROXY_ENABLED=true", "DISABLE_PASSWORD_VALIDATORS=false", "DISABLE_PASSWORD_VALIDATORS=false", "FUNKWHALE_PLUGINS=", "MUSIC_DIRECTORY_PATH=/music", ] [tool.coverage.run] plugins = ["django_coverage_plugin"] source = ["funkwhale_api"] omit = [ "*migrations*", "*tests*", "funkwhale_api/schema.py", ]