Metadata-Version: 2.1
Name: integreat-cms
Version: 2024.7.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: cffi
Requires-Dist: deepl
Requires-Dist: Django<5.0,>=4.2
Requires-Dist: django-cacheops
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: 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: 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: aiohttp==3.9.5; 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==23.2.0; extra == "pinned"
Requires-Dist: bcrypt==4.1.3; extra == "pinned"
Requires-Dist: cachetools==5.3.3; extra == "pinned"
Requires-Dist: cbor2==5.6.3; extra == "pinned"
Requires-Dist: certifi==2024.6.2; extra == "pinned"
Requires-Dist: cffi==1.16.0; extra == "pinned"
Requires-Dist: charset-normalizer==3.3.2; extra == "pinned"
Requires-Dist: click==8.1.7; extra == "pinned"
Requires-Dist: cryptography==42.0.8; extra == "pinned"
Requires-Dist: cssselect2==0.7.0; extra == "pinned"
Requires-Dist: decorator==5.1.1; extra == "pinned"
Requires-Dist: deepl==1.18.0; extra == "pinned"
Requires-Dist: defusedxml==0.7.1; extra == "pinned"
Requires-Dist: diff-match-patch==20230430; extra == "pinned"
Requires-Dist: Django==4.2.13; extra == "pinned"
Requires-Dist: django-cacheops==7.0.2; extra == "pinned"
Requires-Dist: django-cors-headers==4.3.1; extra == "pinned"
Requires-Dist: django-db-mutex==3.1.0; extra == "pinned"
Requires-Dist: django-debug-toolbar==4.4.2; 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.0; 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.0.1; 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.19.0; extra == "pinned"
Requires-Dist: googleapis-common-protos==1.63.1; extra == "pinned"
Requires-Dist: google-auth==2.29.0; extra == "pinned"
Requires-Dist: google-cloud-core==2.4.1; extra == "pinned"
Requires-Dist: google-cloud-translate==3.15.3; extra == "pinned"
Requires-Dist: grpcio==1.64.1; extra == "pinned"
Requires-Dist: grpcio-status==1.62.2; extra == "pinned"
Requires-Dist: html5lib==1.1; extra == "pinned"
Requires-Dist: idna==3.7; extra == "pinned"
Requires-Dist: ipython==8.25.0; extra == "pinned"
Requires-Dist: jedi==0.19.1; extra == "pinned"
Requires-Dist: jsonschema==4.22.0; extra == "pinned"
Requires-Dist: jsonschema-specifications==2023.12.1; extra == "pinned"
Requires-Dist: lxml==5.2.2; extra == "pinned"
Requires-Dist: MarkupPy==1.14; extra == "pinned"
Requires-Dist: matplotlib-inline==0.1.7; extra == "pinned"
Requires-Dist: multidict==6.0.5; extra == "pinned"
Requires-Dist: natsort==8.4.0; extra == "pinned"
Requires-Dist: odfpy==1.4.1; extra == "pinned"
Requires-Dist: openpyxl==3.1.3; 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.3.0; extra == "pinned"
Requires-Dist: pip==24.0; extra == "pinned"
Requires-Dist: prompt_toolkit==3.0.46; extra == "pinned"
Requires-Dist: protobuf==4.25.3; extra == "pinned"
Requires-Dist: proto-plus==1.23.0; extra == "pinned"
Requires-Dist: psycopg==3.1.19; extra == "pinned"
Requires-Dist: psycopg-binary==3.1.19; extra == "pinned"
Requires-Dist: ptyprocess==0.7.0; extra == "pinned"
Requires-Dist: pure-eval==0.2.2; extra == "pinned"
Requires-Dist: pyasn1==0.6.0; extra == "pinned"
Requires-Dist: pyasn1_modules==0.4.0; extra == "pinned"
Requires-Dist: pycparser==2.22; extra == "pinned"
Requires-Dist: Pygments==2.18.0; extra == "pinned"
Requires-Dist: pyHanko==0.25.0; extra == "pinned"
Requires-Dist: pyhanko-certvalidator==0.26.3; extra == "pinned"
Requires-Dist: pyOpenSSL==24.1.0; 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.4.2; 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.1; extra == "pinned"
Requires-Dist: qrcode==7.4.2; extra == "pinned"
Requires-Dist: redis==5.0.4; 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.18.1; extra == "pinned"
Requires-Dist: rsa==4.9; extra == "pinned"
Requires-Dist: rules==3.4; extra == "pinned"
Requires-Dist: setuptools==65.5.0; extra == "pinned"
Requires-Dist: sgmllib3k==1.0.0; extra == "pinned"
Requires-Dist: six==1.16.0; extra == "pinned"
Requires-Dist: sqlparse==0.5.0; 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.4; extra == "pinned"
Requires-Dist: traitlets==5.14.3; extra == "pinned"
Requires-Dist: typing_extensions==4.12.1; extra == "pinned"
Requires-Dist: tzlocal==5.2; extra == "pinned"
Requires-Dist: uritools==4.0.3; extra == "pinned"
Requires-Dist: urllib3==2.2.1; extra == "pinned"
Requires-Dist: wcwidth==0.2.13; extra == "pinned"
Requires-Dist: webauthn==2.1.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.9.4; 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.2.2; extra == "dev-pinned"
Requires-Dist: Babel==2.15.0; extra == "dev-pinned"
Requires-Dist: backports.tarfile==1.2.0; extra == "dev-pinned"
Requires-Dist: black==24.4.2; extra == "dev-pinned"
Requires-Dist: build==1.2.1; 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.5.3; extra == "dev-pinned"
Requires-Dist: cssbeautifier==1.15.1; extra == "dev-pinned"
Requires-Dist: dill==0.3.8; extra == "dev-pinned"
Requires-Dist: distlib==0.3.8; extra == "dev-pinned"
Requires-Dist: djlint==1.34.1; 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.14.0; 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.5.36; extra == "dev-pinned"
Requires-Dist: imagesize==1.4.1; extra == "dev-pinned"
Requires-Dist: importlib_metadata==7.1.0; extra == "dev-pinned"
Requires-Dist: iniconfig==2.0.0; extra == "dev-pinned"
Requires-Dist: jaraco.classes==3.4.0; extra == "dev-pinned"
Requires-Dist: jaraco.context==5.3.0; extra == "dev-pinned"
Requires-Dist: jaraco.functools==4.0.1; 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.2.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.2.0; extra == "dev-pinned"
Requires-Dist: mypy==1.10.0; extra == "dev-pinned"
Requires-Dist: mypy-extensions==1.0.0; extra == "dev-pinned"
Requires-Dist: nh3==0.2.17; extra == "dev-pinned"
Requires-Dist: nodeenv==1.9.1; extra == "dev-pinned"
Requires-Dist: packaging==24.0; extra == "dev-pinned"
Requires-Dist: pathspec==0.12.1; extra == "dev-pinned"
Requires-Dist: pkginfo==1.11.0; extra == "dev-pinned"
Requires-Dist: platformdirs==4.2.2; 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.7.1; extra == "dev-pinned"
Requires-Dist: PyJWT==2.8.0; extra == "dev-pinned"
Requires-Dist: pylint==3.2.2; 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.1.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.8.0; extra == "dev-pinned"
Requires-Dist: pytest_httpserver==1.0.10; extra == "dev-pinned"
Requires-Dist: pytest-icdiff==0.9; extra == "dev-pinned"
Requires-Dist: pytest-order==1.2.1; 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==2023.12.25; 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.7.1; extra == "dev-pinned"
Requires-Dist: ruff==0.4.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.3.7; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-applehelp==1.0.8; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-devhelp==1.0.6; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-django==2.5; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-htmlhelp==2.0.5; 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==1.0.7; extra == "dev-pinned"
Requires-Dist: sphinxcontrib-serializinghtml==1.1.10; extra == "dev-pinned"
Requires-Dist: sphinx-last-updated-by-git==0.3.7; 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.12.5; extra == "dev-pinned"
Requires-Dist: twine==5.1.0; extra == "dev-pinned"
Requires-Dist: types-python-dateutil==2.9.0.20240316; extra == "dev-pinned"
Requires-Dist: types-PyYAML==6.0.12.20240311; extra == "dev-pinned"
Requires-Dist: types-requests==2.32.0.20240602; extra == "dev-pinned"
Requires-Dist: virtualenv==20.26.2; extra == "dev-pinned"
Requires-Dist: Werkzeug==3.0.3; extra == "dev-pinned"
Requires-Dist: zipp==3.19.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/
