Metadata-Version: 2.1
Name: integreat-cms
Version: 2024.12.1
Summary: Content Management System for the Integreat App
Author-email: Tür an Tür – Digitalfabrik gGmbH <tech@integreat-app.de>
License: Apache2 2.0 License
Project-URL: Homepage, https://integreat-app.de/en/
Project-URL: Source Code, https://github.com/digitalfabrik/integreat-cms
Project-URL: Issues, https://github.com/digitalfabrik/integreat-cms/issues
Project-URL: Release Notes, https://digitalfabrik.github.io/integreat-cms/release-notes.html
Project-URL: Documentation, https://digitalfabrik.github.io/integreat-cms/
Project-URL: Funding, https://integreat-app.de/en/donation/
Keywords: integreat,cms,django,e-government,newcomers,refugees,multilingual
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 3.2
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Natural Language :: German
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Content Management System
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: NOTICE.md
Requires-Dist: aiohttp
Requires-Dist: argon2-cffi
Requires-Dist: bcrypt
Requires-Dist: celery
Requires-Dist: cffi
Requires-Dist: deepl
Requires-Dist: Django<5.0,>=4.2
Requires-Dist: django-cacheops
Requires-Dist: django-celery
Requires-Dist: django-cors-headers
Requires-Dist: django-db-mutex
Requires-Dist: django-debug-toolbar
Requires-Dist: django-import-export==3.3.9
Requires-Dist: django-linkcheck
Requires-Dist: django-polymorphic
Requires-Dist: django-redis
Requires-Dist: django-treebeard
Requires-Dist: django-webpack-loader
Requires-Dist: django-widget-tweaks
Requires-Dist: feedparser
Requires-Dist: geopy
Requires-Dist: google-auth
Requires-Dist: google-cloud-translate
Requires-Dist: icalendar
Requires-Dist: idna
Requires-Dist: ipython
Requires-Dist: jsonschema
Requires-Dist: lxml
Requires-Dist: natsort
Requires-Dist: Pillow
Requires-Dist: psycopg[binary]
Requires-Dist: pyotp
Requires-Dist: python-dateutil
Requires-Dist: python-magic
Requires-Dist: pyyaml
Requires-Dist: qrcode
Requires-Dist: requests
Requires-Dist: rules
Requires-Dist: six
Requires-Dist: webauthn
Requires-Dist: xhtml2pdf==0.2.8
Requires-Dist: reportlab<4.0.0
Requires-Dist: zammad-py
Provides-Extra: dev
Requires-Dist: black; extra == "dev"
Requires-Dist: build; extra == "dev"
Requires-Dist: bumpver; extra == "dev"
Requires-Dist: debugpy; extra == "dev"
Requires-Dist: djlint; extra == "dev"
Requires-Dist: freezegun; extra == "dev"
Requires-Dist: isort; extra == "dev"
Requires-Dist: mypy; extra == "dev"
Requires-Dist: pre-commit; extra == "dev"
Requires-Dist: pyjwt; extra == "dev"
Requires-Dist: pylint; extra == "dev"
Requires-Dist: pylint-django; extra == "dev"
Requires-Dist: pylint-per-file-ignores; extra == "dev"
Requires-Dist: pytest-circleci-parallelized; extra == "dev"
Requires-Dist: pytest-cov; extra == "dev"
Requires-Dist: pytest-django; extra == "dev"
Requires-Dist: pytest-httpserver; extra == "dev"
Requires-Dist: pytest-icdiff; extra == "dev"
Requires-Dist: pytest-order; extra == "dev"
Requires-Dist: pytest-testmon<=1.4.5; extra == "dev"
Requires-Dist: pytest-xdist; extra == "dev"
Requires-Dist: requests-mock; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Requires-Dist: shellcheck-py; extra == "dev"
Requires-Dist: sphinx; extra == "dev"
Requires-Dist: sphinx-last-updated-by-git; extra == "dev"
Requires-Dist: sphinx-rtd-theme; extra == "dev"
Requires-Dist: sphinxcontrib-django; extra == "dev"
Requires-Dist: twine; extra == "dev"
Requires-Dist: types-python-dateutil; extra == "dev"
Requires-Dist: types-PyYAML; extra == "dev"
Requires-Dist: types-requests; extra == "dev"
Provides-Extra: pinned
Requires-Dist: aiohappyeyeballs==2.4.2; extra == "pinned"
Requires-Dist: aiohttp==3.10.8; extra == "pinned"
Requires-Dist: aiosignal==1.3.1; extra == "pinned"
Requires-Dist: arabic-reshaper==3.0.0; extra == "pinned"
Requires-Dist: argon2-cffi==23.1.0; extra == "pinned"
Requires-Dist: argon2-cffi-bindings==21.2.0; extra == "pinned"
Requires-Dist: asgiref==3.8.1; extra == "pinned"
Requires-Dist: asn1crypto==1.5.1; extra == "pinned"
Requires-Dist: asttokens==2.4.1; extra == "pinned"
Requires-Dist: attrs==24.2.0; extra == "pinned"
Requires-Dist: bcrypt==4.2.0; extra == "pinned"
Requires-Dist: cachetools==5.5.0; extra == "pinned"
Requires-Dist: cbor2==5.6.4; extra == "pinned"
Requires-Dist: celery==5.2.4; extra == "pinned"
Requires-Dist: certifi==2024.8.30; extra == "pinned"
Requires-Dist: cffi==1.17.1; extra == "pinned"
Requires-Dist: charset-normalizer==3.3.2; extra == "pinned"
Requires-Dist: click==8.1.7; extra == "pinned"
Requires-Dist: cryptography==43.0.1; extra == "pinned"
Requires-Dist: cssselect2==0.7.0; extra == "pinned"
Requires-Dist: decorator==5.1.1; extra == "pinned"
Requires-Dist: deepl==1.19.1; extra == "pinned"
Requires-Dist: defusedxml==0.7.1; extra == "pinned"
Requires-Dist: diff-match-patch==20230430; extra == "pinned"
Requires-Dist: Django==4.2.16; extra == "pinned"
Requires-Dist: django-cacheops==7.0.2; extra == "pinned"
Requires-Dist: django-cors-headers==4.4.0; extra == "pinned"
Requires-Dist: django-db-mutex==3.1.0; extra == "pinned"
Requires-Dist: django-debug-toolbar==4.4.6; extra == "pinned"
Requires-Dist: django-import-export==3.3.9; extra == "pinned"
Requires-Dist: django-linkcheck==2.3.0; extra == "pinned"
Requires-Dist: django-polymorphic==3.1.0; extra == "pinned"
Requires-Dist: django-redis==5.4.0; extra == "pinned"
Requires-Dist: django-treebeard==4.7.1; extra == "pinned"
Requires-Dist: django-webpack-loader==3.1.1; extra == "pinned"
Requires-Dist: django-widget-tweaks==1.5.0; extra == "pinned"
Requires-Dist: et-xmlfile==1.1.0; extra == "pinned"
Requires-Dist: executing==2.1.0; extra == "pinned"
Requires-Dist: feedparser==6.0.11; extra == "pinned"
Requires-Dist: frozenlist==1.4.1; extra == "pinned"
Requires-Dist: funcy==2.0; extra == "pinned"
Requires-Dist: geographiclib==2.0; extra == "pinned"
Requires-Dist: geopy==2.4.1; extra == "pinned"
Requires-Dist: google-api-core==2.20.0; extra == "pinned"
Requires-Dist: googleapis-common-protos==1.65.0; extra == "pinned"
Requires-Dist: google-auth==2.35.0; extra == "pinned"
Requires-Dist: google-cloud-core==2.4.1; extra == "pinned"
Requires-Dist: google-cloud-translate==3.16.0; extra == "pinned"
Requires-Dist: grpc-google-iam-v1==0.13.1; extra == "pinned"
Requires-Dist: grpcio==1.66.2; extra == "pinned"
Requires-Dist: grpcio-status==1.66.2; extra == "pinned"
Requires-Dist: html5lib==1.1; extra == "pinned"
Requires-Dist: icalendar==6.0.0; extra == "pinned"
Requires-Dist: idna==3.10; extra == "pinned"
Requires-Dist: ipython==8.27.0; extra == "pinned"
Requires-Dist: jedi==0.19.1; extra == "pinned"
Requires-Dist: jsonschema==4.23.0; extra == "pinned"
Requires-Dist: jsonschema-specifications==2023.12.1; extra == "pinned"
Requires-Dist: lxml==5.3.0; extra == "pinned"
Requires-Dist: MarkupPy==1.14; extra == "pinned"
Requires-Dist: matplotlib-inline==0.1.7; extra == "pinned"
Requires-Dist: multidict==6.1.0; extra == "pinned"
Requires-Dist: natsort==8.4.0; extra == "pinned"
Requires-Dist: odfpy==1.4.1; extra == "pinned"
Requires-Dist: openpyxl==3.1.5; extra == "pinned"
Requires-Dist: oscrypto==1.3.0; extra == "pinned"
Requires-Dist: parso==0.8.4; extra == "pinned"
Requires-Dist: pexpect==4.9.0; extra == "pinned"
Requires-Dist: pillow==10.4.0; extra == "pinned"
Requires-Dist: pip==24.0; extra == "pinned"
Requires-Dist: prompt_toolkit==3.0.48; extra == "pinned"
Requires-Dist: protobuf==5.28.2; extra == "pinned"
Requires-Dist: proto-plus==1.24.0; extra == "pinned"
Requires-Dist: psycopg==3.2.3; extra == "pinned"
Requires-Dist: psycopg-binary==3.2.3; extra == "pinned"
Requires-Dist: ptyprocess==0.7.0; extra == "pinned"
Requires-Dist: pure_eval==0.2.3; extra == "pinned"
Requires-Dist: pyasn1==0.6.1; extra == "pinned"
Requires-Dist: pyasn1_modules==0.4.1; extra == "pinned"
Requires-Dist: pycparser==2.22; extra == "pinned"
Requires-Dist: Pygments==2.18.0; extra == "pinned"
Requires-Dist: pyHanko==0.25.1; extra == "pinned"
Requires-Dist: pyhanko-certvalidator==0.26.3; extra == "pinned"
Requires-Dist: pyOpenSSL==24.2.1; extra == "pinned"
Requires-Dist: pyotp==2.9.0; extra == "pinned"
Requires-Dist: PyPDF3==1.0.6; extra == "pinned"
Requires-Dist: pypng==0.20220715.0; extra == "pinned"
Requires-Dist: python-bidi==0.6.0; extra == "pinned"
Requires-Dist: python-dateutil==2.9.0.post0; extra == "pinned"
Requires-Dist: python-magic==0.4.27; extra == "pinned"
Requires-Dist: PyYAML==6.0.2; extra == "pinned"
Requires-Dist: qrcode==7.4.2; extra == "pinned"
Requires-Dist: redis==5.1.0; extra == "pinned"
Requires-Dist: referencing==0.35.1; extra == "pinned"
Requires-Dist: reportlab==3.6.13; extra == "pinned"
Requires-Dist: requests==2.32.3; extra == "pinned"
Requires-Dist: rpds-py==0.20.0; extra == "pinned"
Requires-Dist: rsa==4.9; extra == "pinned"
Requires-Dist: rules==3.5; extra == "pinned"
Requires-Dist: setuptools==59.6.0; extra == "pinned"
Requires-Dist: sgmllib3k==1.0.0; extra == "pinned"
Requires-Dist: six==1.16.0; extra == "pinned"
Requires-Dist: sqlparse==0.5.1; extra == "pinned"
Requires-Dist: stack-data==0.6.3; extra == "pinned"
Requires-Dist: svglib==1.5.1; extra == "pinned"
Requires-Dist: tablib==3.5.0; extra == "pinned"
Requires-Dist: tinycss2==1.3.0; extra == "pinned"
Requires-Dist: tqdm==4.66.5; extra == "pinned"
Requires-Dist: traitlets==5.14.3; extra == "pinned"
Requires-Dist: typing_extensions==4.12.2; extra == "pinned"
Requires-Dist: tzdata==2024.2; extra == "pinned"
Requires-Dist: tzlocal==5.2; extra == "pinned"
Requires-Dist: uritools==4.0.3; extra == "pinned"
Requires-Dist: urllib3==2.2.3; extra == "pinned"
Requires-Dist: wcwidth==0.2.13; extra == "pinned"
Requires-Dist: webauthn==2.2.0; extra == "pinned"
Requires-Dist: webencodings==0.5.1; extra == "pinned"
Requires-Dist: xhtml2pdf==0.2.8; extra == "pinned"
Requires-Dist: xlrd==2.0.1; extra == "pinned"
Requires-Dist: xlwt==1.3.0; extra == "pinned"
Requires-Dist: yarl==1.13.1; extra == "pinned"
Requires-Dist: zammad-py==3.0.0; extra == "pinned"
Provides-Extra: dev-pinned
Requires-Dist: alabaster==0.7.16; extra == "dev-pinned"
Requires-Dist: astroid==3.3.4; extra == "dev-pinned"
Requires-Dist: babel==2.16.0; extra == "dev-pinned"
Requires-Dist: backports.tarfile==1.2.0; extra == "dev-pinned"
Requires-Dist: black==24.8.0; extra == "dev-pinned"
Requires-Dist: build==1.2.2; extra == "dev-pinned"
Requires-Dist: bumpver==2023.1129; extra == "dev-pinned"
Requires-Dist: cfgv==3.4.0; extra == "dev-pinned"
Requires-Dist: colorama==0.4.6; extra == "dev-pinned"
Requires-Dist: coverage==7.6.1; extra == "dev-pinned"
Requires-Dist: cssbeautifier==1.15.1; extra == "dev-pinned"
Requires-Dist: dill==0.3.9; extra == "dev-pinned"
Requires-Dist: debugpy==1.8.5; extra == "dev-pinned"
Requires-Dist: distlib==0.3.8; extra == "dev-pinned"
Requires-Dist: djlint==1.35.2; extra == "dev-pinned"
Requires-Dist: docutils==0.20.1; extra == "dev-pinned"
Requires-Dist: EditorConfig==0.12.4; extra == "dev-pinned"
Requires-Dist: execnet==2.1.1; extra == "dev-pinned"
Requires-Dist: filelock==3.16.1; extra == "dev-pinned"
Requires-Dist: freezegun==1.5.1; extra == "dev-pinned"
Requires-Dist: html-tag-names==0.1.2; extra == "dev-pinned"
Requires-Dist: html-void-elements==0.1.0; extra == "dev-pinned"
Requires-Dist: icdiff==2.0.7; extra == "dev-pinned"
Requires-Dist: identify==2.6.1; extra == "dev-pinned"
Requires-Dist: imagesize==1.4.1; extra == "dev-pinned"
Requires-Dist: importlib_metadata==8.5.0; extra == "dev-pinned"
Requires-Dist: iniconfig==2.0.0; extra == "dev-pinned"
Requires-Dist: isort==5.13.2; extra == "dev-pinned"
Requires-Dist: jaraco.classes==3.4.0; extra == "dev-pinned"
Requires-Dist: jaraco.context==6.0.1; extra == "dev-pinned"
Requires-Dist: jaraco.functools==4.1.0; extra == "dev-pinned"
Requires-Dist: jeepney==0.8.0; extra == "dev-pinned"
Requires-Dist: Jinja2==3.1.4; extra == "dev-pinned"
Requires-Dist: jsbeautifier==1.15.1; extra == "dev-pinned"
Requires-Dist: json5==0.9.25; extra == "dev-pinned"
Requires-Dist: keyring==25.4.1; extra == "dev-pinned"
Requires-Dist: lexid==2021.1006; extra == "dev-pinned"
Requires-Dist: looseversion==1.3.0; extra == "dev-pinned"
Requires-Dist: markdown-it-py==3.0.0; extra == "dev-pinned"
Requires-Dist: MarkupSafe==2.1.5; extra == "dev-pinned"
Requires-Dist: mccabe==0.7.0; extra == "dev-pinned"
Requires-Dist: mdurl==0.1.2; extra == "dev-pinned"
Requires-Dist: more-itertools==10.5.0; extra == "dev-pinned"
Requires-Dist: mypy==1.11.2; extra == "dev-pinned"
Requires-Dist: mypy-extensions==1.0.0; extra == "dev-pinned"
Requires-Dist: nh3==0.2.18; extra == "dev-pinned"
Requires-Dist: nodeenv==1.9.1; extra == "dev-pinned"
Requires-Dist: packaging==24.1; extra == "dev-pinned"
Requires-Dist: pathspec==0.12.1; extra == "dev-pinned"
Requires-Dist: pkginfo==1.10.0; extra == "dev-pinned"
Requires-Dist: platformdirs==4.3.6; extra == "dev-pinned"
Requires-Dist: pluggy==1.5.0; extra == "dev-pinned"
Requires-Dist: pprintpp==0.4.0; extra == "dev-pinned"
Requires-Dist: pre-commit==3.8.0; extra == "dev-pinned"
Requires-Dist: PyJWT==2.9.0; extra == "dev-pinned"
Requires-Dist: pylint==3.3.1; extra == "dev-pinned"
Requires-Dist: pylint-django==2.5.5; extra == "dev-pinned"
Requires-Dist: pylint-per-file-ignores==1.3.2; extra == "dev-pinned"
Requires-Dist: pylint-plugin-utils==0.8.2; extra == "dev-pinned"
Requires-Dist: pyproject_hooks==1.2.0; extra == "dev-pinned"
Requires-Dist: pytest==7.4.4; extra == "dev-pinned"
Requires-Dist: pytest-circleci-parallelized==0.1.0; extra == "dev-pinned"
Requires-Dist: pytest-cov==5.0.0; extra == "dev-pinned"
Requires-Dist: pytest-django==4.9.0; extra == "dev-pinned"
Requires-Dist: pytest_httpserver==1.1.0; extra == "dev-pinned"
Requires-Dist: pytest-icdiff==0.9; extra == "dev-pinned"
Requires-Dist: pytest-order==1.3.0; extra == "dev-pinned"
Requires-Dist: pytest-testmon==1.4.5; extra == "dev-pinned"
Requires-Dist: pytest-xdist==3.6.1; extra == "dev-pinned"
Requires-Dist: readme_renderer==43.0; extra == "dev-pinned"
Requires-Dist: regex==2024.9.11; extra == "dev-pinned"
Requires-Dist: requests-mock==1.12.1; extra == "dev-pinned"
Requires-Dist: requests-toolbelt==1.0.0; extra == "dev-pinned"
Requires-Dist: rfc3986==2.0.0; extra == "dev-pinned"
Requires-Dist: rich==13.8.1; extra == "dev-pinned"
Requires-Dist: ruff==0.6.8; extra == "dev-pinned"
Requires-Dist: SecretStorage==3.3.3; extra == "dev-pinned"
Requires-Dist: shellcheck-py==0.10.0.1; extra == "dev-pinned"
Requires-Dist: snowballstemmer==2.2.0; extra == "dev-pinned"
Requires-Dist: Sphinx==7.4.7; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-applehelp==2.0.0; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-devhelp==2.0.0; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-django==2.5; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-htmlhelp==2.1.0; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-jquery==4.1; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-jsmath==1.0.1; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-qthelp==2.0.0; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-serializinghtml==2.0.0; extra == "dev-pinned"
Requires-Dist: sphinx-last-updated-by-git==0.3.8; extra == "dev-pinned"
Requires-Dist: sphinx-rtd-theme==2.0.0; extra == "dev-pinned"
Requires-Dist: toml==0.10.2; extra == "dev-pinned"
Requires-Dist: tomlkit==0.13.2; extra == "dev-pinned"
Requires-Dist: twine==5.1.1; extra == "dev-pinned"
Requires-Dist: types-python-dateutil==2.9.0.20240906; extra == "dev-pinned"
Requires-Dist: types-PyYAML==6.0.12.20240917; extra == "dev-pinned"
Requires-Dist: types-requests==2.32.0.20240914; extra == "dev-pinned"
Requires-Dist: virtualenv==20.26.6; extra == "dev-pinned"
Requires-Dist: Werkzeug==3.0.4; extra == "dev-pinned"
Requires-Dist: zipp==3.20.2; extra == "dev-pinned"

[![CircleCI](https://circleci.com/gh/digitalfabrik/integreat-cms.svg?style=shield)](https://circleci.com/gh/digitalfabrik/integreat-cms)
[![Pylint](https://img.shields.io/badge/pylint-10.00-brightgreen)](https://www.pylint.org/)
![Coverage](https://img.shields.io/codeclimate/coverage/digitalfabrik/integreat-cms)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)

# Integreat Django CMS

[![Logo](https://integreat-app.de/wp-content/themes/integreat/images/integreat-app-logo.png)](https://integreat-app.de/en/)

[Integreat - The mobile guide for newcomers.](https://integreat-app.de/en/) Multilingual. Offline. Open Source.

This content management system helps local integration experts to provide multilingual information for newcomers.

## TL;DR

### Prerequisites

Following packages are required before installing the project (install them with your package manager):

* python3.7
* python3-pip
* [PostgreSQL](https://www.postgresql.org/) database server
* [Apache2](https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/modwsgi/) server with `mod_wsgi`

### Installation

```
pip install integreat-cms
```

## Documentation

For detailed instructions, tutorials and the source code reference have a look at our great documentation:

https://digitalfabrik.github.io/integreat-cms/
