jawanndenn


Namejawanndenn JSON
Version 2.6.0 PyPI version JSON
download
home_pagehttps://github.com/hartwork/jawanndenn
SummaryLibre alternative to Doodle
upload_time2023-04-23 01:56:47
maintainer
docs_urlNone
authorSebastian Pipping
requires_python>=3.6
licenseAGPLv3+
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit
   :target: https://github.com/pre-commit/pre-commit
   :alt: pre-commit
.. image:: https://github.com/hartwork/jawanndenn/workflows/Build%20and%20test%20using%20Docker/badge.svg
    :target: https://github.com/hartwork/jawanndenn/actions


What is jawanndenn?
===================

.. figure:: https://raw.githubusercontent.com/hartwork/jawanndenn/master/jawanndenn-setup.png
   :alt: Screenshot of poll creation in jawanndenn

*jawanndenn* is a simple web application to schedule meetings and run
polls, a libre alternative to Doodle.  It is using the following technology:

- Python
    - `Docker Compose`_
    - `Django`_
        - `Django Extensions`_
        - `Django Ratelimit`_ + `msgpack-python`_
        - `django-redis`_
        - `Django REST framework`_
        - `Factory Boy`_
    - `Gunicorn`_ + `gunicorn-color-logger`_
    - `parameterized`_
    - `pre-commit`_
    - `python-rapidjson`_
    - `sentry-python`_
    - `wait-for-it`_

- JavaScript / CSS / Fonts
    - `Google Webfonts Helper`_
    - `jQuery`_
    - `jQuery noty`_
    - `Materialize`_
    - `Roboto`_

- Storage
    - `PostgreSQL`_
    - `Redis`_
    - `SQLite`_

- Scheduling
    - `Supercronic`_

*jawanndenn* is `libre software`_ developed by `Sebastian Pipping`_. The
server code is licensed under the `GNU Affero GPL license`_ version 3
or later whereas the client code is licensed under the `GNU GPL
license`_ version 3 or later.

Please `report bugs`_ and let me know if you `like`_ it.


Poll Setup Format
=================

The textarea titled "Setup (JSON)" uses
a simple `JSON`_-based format that knows the following keys:

- ``equal_width`` — a bool to control whether all options are pumped up
  to the same width (``true`` or ``false``) to counter potential voter bias
- ``lifetime`` — duration after which this poll will be deleted;
  can be ``"week"`` or ``"month"``; an enum-like string
- ``options`` — a list of strings, one for each option;
  supports `Markdown`_-like syntax for: bold, italic, inline code
- ``title`` — the title or headline of the poll to run;
  supports `Markdown`_-like syntax for: bold, italic, inline code


Installation
============

To install the latest release without cloning the Git repository:

::

    # pip3 install jawanndenn --user

To install from a Git clone:

::

    # ./setup.py install --user


Deployment with docker-compose
==============================

Create a simple file ``.env`` like this one:

::

    JAWANNDENN_POSTGRES_NAME=jawanndenn
    JAWANNDENN_POSTGRES_USER=jawanndenn
    JAWANNDENN_POSTGRES_PASSWORD=dEb2PIcinemA8poH
    JAWANNDENN_SECRET_KEY=606ea88f183a27919d5c27ec7f948906d23fdd7821684eb59e8bcf7377e3853b

Make sure to **adjust these values** after copy and paste!

You can then build and run a docker image using ``docker-compose up --build``.

The app is served on ``localhost:54080``.
PostgreSQL data is saved to ``~/.jawanndenn-docker-pgdata/`` on the host system.
There is also an instance of Redis used for cross-process rate limiting,
and a "cron" housekeeping container that will go delete polls that have exceeded their
configured lifetime, every 60 minutes.

(If you need a low-maintenance SSL reverse proxy in front of jawanndenn,
`docker-ssl-reverse-proxy <https://github.com/hartwork/docker-ssl-reverse-proxy>`_
could be of interest.)

There is a few more environment variables that you could want to adjust in your environment.
Altogether, there are these variables:


Environment variables
---------------------

``DJANGO_SETTINGS_MODULE``
~~~~~~~~~~~~~~~~~~~~~~~~~~
Django settings module to use, leave as is, defaults to ``jawanndenn.settings``
(see ``docker-compose.yml``)


``JAWANNDENN_ALLOWED_HOSTS``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Hostnames to serve jawanndenn at, list separated by comma,
is set to ``jawanndenn.de,www.jawanndenn.de`` on the main production server,
defaults to ``127.0.0.1,0.0.0.0,localhost``
(see ``jawanndenn/settings.py``)


``JAWANNDENN_DEBUG``
~~~~~~~~~~~~~~~~~~~~
Debug mode, disabled for all values but ``True``, disabled by default,
should never be enabled in production for security
(see ``jawanndenn/settings.py``)


``JAWANNDENN_MAX_POLLS``
~~~~~~~~~~~~~~~~~~~~~~~~
Maximum total number of polls to store, denial of service protection,
defaults to ``1000``
(see ``jawanndenn/settings.py`` and ``docker-compose.yml``)


``JAWANNDENN_MAX_VOTES_PER_POLL``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Maximum total number of polls to store, denial of service protection,
defaults to ``40``
(see ``jawanndenn/settings.py``)


``JAWANNDENN_POSTGRES_HOST``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Hostname of the PostgreSQL database to connect to; defaults to ``postgres``
(see ``docker-compose.yml``)


``JAWANNDENN_POSTGRES_NAME``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Database name of the PostgreSQL database to connect to;
no default, always required


``JAWANNDENN_POSTGRES_PASSWORD``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Password for log-in with the PostgreSQL database;
no default, always required


``JAWANNDENN_POSTGRES_PORT``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Port of the PostgreSQL database to connect to; defaults to ``5432``
(see ``docker-compose.yml``)


``JAWANNDENN_POSTGRES_USER``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Username for log-in with the PostgreSQL database;
no default, always required


``JAWANNDENN_REDIS_HOST``
~~~~~~~~~~~~~~~~~~~~~~~~~
Hostname of the Redis database to connect to; defaults to ``redis``
(see ``docker-compose.yml``)


``JAWANNDENN_REDIS_PORT``
~~~~~~~~~~~~~~~~~~~~~~~~~
Port of the Redis database to connect to; defaults to ``6379``
(see ``docker-compose.yml``)


``JAWANNDENN_SECRET_KEY``
~~~~~~~~~~~~~~~~~~~~~~~~~
`Django secret key <https://docs.djangoproject.com/en/4.0/ref/settings/#secret-key>`_;
should be long, generated, not used elsewhere; no default, always required


``JAWANNDENN_SENTRY_DSN``
~~~~~~~~~~~~~~~~~~~~~~~~~
`Data source name (DSN) <https://docs.sentry.io/product/sentry-basics/dsn-explainer/>`_
for use with `Sentry <https://sentry.io/>`_, disabled/empty by default
(see ``jawanndenn/settings.py``)


``JAWANNDENN_URL_PREFIX``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Prefix string to insert into URLs rather after the domain name
to help with hosting multiple apps under the same domain side by side;
e.g. prefix ``prefix123`` will result in URLs like ``https://<domain>/prefix123/poll/<id>``;
empty by default
(see ``jawanndenn/settings.py``)


Command line usage
==================

When installed, invocation is as simple as

::

    # jawanndenn

During development, you may want to run *jawanndenn* from the Git clone
using

::

    # PYTHONPATH=. python3 -m jawanndenn --debug

Currently supported arguments are:

::

    # jawanndenn --help
    usage: jawanndenn [-h] [--debug] [--host HOST] [--port PORT]
                      [--url-prefix PATH] [--database-sqlite3 FILE]
                      [--django-secret-key-file FILE] [--max-polls COUNT]
                      [--max-votes-per-poll COUNT] [--dumpdata]
                      [--loaddata FILE.json]

    optional arguments:
      -h, --help            show this help message and exit
      --debug               Enable debug mode (default: disabled)
      --host HOST           Hostname or IP address to listen at (default:
                            127.0.0.1)
      --port PORT           Port to listen at (default: 8080)
      --url-prefix PATH     Path to prepend to URLs (default: "")
      --database-sqlite3 FILE
                            File to write the database to (default:
                            ~/jawanndenn.sqlite3)
      --django-secret-key-file FILE
                            File to use for Django secret key data (default:
                            ~/jawanndenn.secret_key)

    limit configuration:
      --max-polls COUNT     Maximum number of polls total (default: 1000)
      --max-votes-per-poll COUNT
                            Maximum number of votes per poll (default: 40)

    data import/export arguments:
      --dumpdata            Dump a JSON export of the database to standard output,
                            then quit.
      --loaddata FILE.json  Load a JSON export of the database from FILE.json,
                            then quit.


Migrating data from jawanndenn 1.x to 2.x
=========================================

Migration takes four steps:

1. Update to the latest version of jawanndenn 1.x, e.g. by running:
   ``pip2 install --upgrade 'jawanndenn<2'``;
   the JSON data export was first introduced with release 1.6.3.

2. Export existing polls:

   a) If you're using the commend line app:
      ``python2 -m jawanndenn --dumpdata > dump.json``

   b) If you're using docker-compose:
      ``docker-compose run -T jawanndenn --database-pickle /data/polls.pickle --dumpdata > dump.json``

3. Deploy latest jawanndenn 2.x somewhere (as described above) or just
   ``pip3 install 'jawanndenn>=2'``
   it somewhere

4. Import the JSON dump created in step (2):

   a) If you're using the commend line app:
      ``python3 -m jawanndenn --loaddata dump.json``

   b) If you're using docker-compose:
      ``docker-compose run -T jawanndenn sh -c 'cat > /tmp/dump.json && DJANGO_SETTINGS_MODULE=jawanndenn.settings python3 -m django loaddata /tmp/dump.json' < dump.json``


Goals
=====

-  Libre software to host yourself, unlike Doodle
-  More simplistic, sexy and/or fun than `libre alternatives`_, in alphabetic order:

   -  `Bitpoll`_ (ex. `Dudel`_)
   -  `Croodle`_
   -  `Dudle`_
   -  (`Drupal Date picker formatter`_)
   -  (`Foodle`_ (discontinued; `on GitHub`_, ex. `DFN scheduler`_, ex. `DFN Terminplaner+`_))
   -  `Framadata`_ (`Sources`_, ex. `OpenSondage`_, ex. `STUdS`_)
   -  `Nextcloud Polls`_
   -  `Noodle`_
   -  `Nuages`_
   -  `Pleft`_
   -  `Rallly`_
   -  `RDVz`_
   -  `sowhenthen`_

-  Keep things simple, usable, maintainable
-  Support invocation from the command line, e.g. for spontaneous polls in a LAN
-  Have security in mind

Please check out the `list of upcoming features`_.


Non-goals
=========

-  Use of heavy frontend frameworks: building blocks only
-  Read availability from calendars


Thanks
======

Special thanks to Arne Maier (`@KordonDev`_) for reporting
an XSS vulnerability, responsibly.


.. _Python: https://www.python.org/
.. _Docker Compose: https://docs.docker.com/compose/
.. _Django: https://www.djangoproject.com/
.. _Django Extensions: https://github.com/django-extensions/django-extensions
.. _Django Ratelimit: https://github.com/jsocol/django-ratelimit
.. _msgpack-python: https://github.com/msgpack/msgpack-python
.. _django-redis: https://github.com/niwinz/django-redis
.. _Django REST framework: https://www.django-rest-framework.org/
.. _Factory Boy: https://factoryboy.readthedocs.io/en/latest/
.. _Gunicorn: https://gunicorn.org/
.. _gunicorn-color-logger: https://github.com/swistakm/gunicorn-color-logger
.. _parameterized: https://github.com/wolever/parameterized
.. _pre-commit: https://pre-commit.com/
.. _python-rapidjson: https://github.com/python-rapidjson/python-rapidjson
.. _sentry-python: https://github.com/getsentry/sentry-python
.. _wait-for-it: https://github.com/clarketm/wait-for-it
.. _Google Webfonts Helper: https://google-webfonts-helper.herokuapp.com/
.. _jQuery: http://jquery.com/
.. _jQuery noty: http://ned.im/noty/#/about
.. _Materialize: http://materializecss.com/
.. _Roboto: https://fonts.google.com/specimen/Roboto
.. _PostgreSQL: https://www.postgresql.org/
.. _Redis: https://redis.io/
.. _SQLite: https://www.sqlite.org/index.html
.. _Supercronic: https://github.com/aptible/supercronic
.. _libre software: https://www.gnu.org/philosophy/free-sw.en.html
.. _Sebastian Pipping: https://blog.hartwork.org/
.. _GNU Affero GPL license: https://www.gnu.org/licenses/agpl.en.html
.. _GNU GPL license: https://www.gnu.org/licenses/gpl.html
.. _report bugs: https://github.com/hartwork/jawanndenn/issues
.. _like: mailto:sebastian@pipping.org
.. _JSON: https://www.json.org/
.. _Markdown: https://commonmark.org/help/
.. _the related documentation of Django: https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/modwsgi/
.. _file a support ticket: https://github.com/hartwork/jawanndenn/issues/new
.. _drop me a mail: mailto:sebastian@pipping.org
.. _libre alternatives: http://alternativeto.net/software/doodle/?license=opensource
.. _Bitpoll: https://github.com/fsinfuhh/Bitpoll
.. _Croodle: https://github.com/jelhan/croodle
.. _Dudel: https://github.com/opatut/dudel
.. _Pleft: https://github.com/sander/pleft
.. _Framadata: https://framadate.org/
.. _Sources: https://git.framasoft.org/framasoft/framadate
.. _OpenSondage: https://github.com/leblanc-simon/OpenSondage
.. _STUdS: http://studs.unistra.fr/
.. _Foodle: https://foodl.org/
.. _on GitHub: https://github.com/UNINETT/Foodle
.. _DFN scheduler: https://terminplaner.dfn.de/
.. _DFN Terminplaner+: https://terminplaner2.dfn.de/
.. _Dudle: https://dudle.inf.tu-dresden.de/
.. _Nuages: https://nuages.domainepublic.net/
.. _RDVz: https://sourceforge.net/projects/rdvz/
.. _sowhenthen: https://github.com/kiyutink/sowhenthen
.. _Drupal Date picker formatter: http://alternativeto.net/software/date-picker-formatter-dudel-for-drupal/?license=opensource
.. _Nextcloud Polls: https://github.com/nextcloud/polls
.. _Noodle: https://github.com/kmerz/noodle
.. _Rallly: https://github.com/lukevella/Rallly
.. _list of upcoming features: https://github.com/hartwork/jawanndenn/issues/created_by/hartwork
.. _@KordonDev: https://github.com/KordonDev

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/hartwork/jawanndenn",
    "name": "jawanndenn",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "",
    "author": "Sebastian Pipping",
    "author_email": "sebastian@pipping.org",
    "download_url": "https://files.pythonhosted.org/packages/6f/ee/7b70f8120db8298763ff908d746f5604f0a8ed2f72033b0c1ac5a9195cae/jawanndenn-2.6.0.tar.gz",
    "platform": null,
    "description": ".. image:: https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit\n   :target: https://github.com/pre-commit/pre-commit\n   :alt: pre-commit\n.. image:: https://github.com/hartwork/jawanndenn/workflows/Build%20and%20test%20using%20Docker/badge.svg\n    :target: https://github.com/hartwork/jawanndenn/actions\n\n\nWhat is jawanndenn?\n===================\n\n.. figure:: https://raw.githubusercontent.com/hartwork/jawanndenn/master/jawanndenn-setup.png\n   :alt: Screenshot of poll creation in jawanndenn\n\n*jawanndenn* is a simple web application to schedule meetings and run\npolls, a libre alternative to Doodle.  It is using the following technology:\n\n- Python\n    - `Docker Compose`_\n    - `Django`_\n        - `Django Extensions`_\n        - `Django Ratelimit`_ + `msgpack-python`_\n        - `django-redis`_\n        - `Django REST framework`_\n        - `Factory Boy`_\n    - `Gunicorn`_ + `gunicorn-color-logger`_\n    - `parameterized`_\n    - `pre-commit`_\n    - `python-rapidjson`_\n    - `sentry-python`_\n    - `wait-for-it`_\n\n- JavaScript / CSS / Fonts\n    - `Google Webfonts Helper`_\n    - `jQuery`_\n    - `jQuery noty`_\n    - `Materialize`_\n    - `Roboto`_\n\n- Storage\n    - `PostgreSQL`_\n    - `Redis`_\n    - `SQLite`_\n\n- Scheduling\n    - `Supercronic`_\n\n*jawanndenn* is `libre software`_ developed by `Sebastian Pipping`_. The\nserver code is licensed under the `GNU Affero GPL license`_ version 3\nor later whereas the client code is licensed under the `GNU GPL\nlicense`_ version 3 or later.\n\nPlease `report bugs`_ and let me know if you `like`_ it.\n\n\nPoll Setup Format\n=================\n\nThe textarea titled \"Setup (JSON)\" uses\na simple `JSON`_-based format that knows the following keys:\n\n- ``equal_width`` \u2014 a bool to control whether all options are pumped up\n  to the same width (``true`` or ``false``) to counter potential voter bias\n- ``lifetime`` \u2014 duration after which this poll will be deleted;\n  can be ``\"week\"`` or ``\"month\"``; an enum-like string\n- ``options`` \u2014 a list of strings, one for each option;\n  supports `Markdown`_-like syntax for: bold, italic, inline code\n- ``title`` \u2014 the title or headline of the poll to run;\n  supports `Markdown`_-like syntax for: bold, italic, inline code\n\n\nInstallation\n============\n\nTo install the latest release without cloning the Git repository:\n\n::\n\n    # pip3 install jawanndenn --user\n\nTo install from a Git clone:\n\n::\n\n    # ./setup.py install --user\n\n\nDeployment with docker-compose\n==============================\n\nCreate a simple file ``.env`` like this one:\n\n::\n\n    JAWANNDENN_POSTGRES_NAME=jawanndenn\n    JAWANNDENN_POSTGRES_USER=jawanndenn\n    JAWANNDENN_POSTGRES_PASSWORD=dEb2PIcinemA8poH\n    JAWANNDENN_SECRET_KEY=606ea88f183a27919d5c27ec7f948906d23fdd7821684eb59e8bcf7377e3853b\n\nMake sure to **adjust these values** after copy and paste!\n\nYou can then build and run a docker image using ``docker-compose up --build``.\n\nThe app is served on ``localhost:54080``.\nPostgreSQL data is saved to ``~/.jawanndenn-docker-pgdata/`` on the host system.\nThere is also an instance of Redis used for cross-process rate limiting,\nand a \"cron\" housekeeping container that will go delete polls that have exceeded their\nconfigured lifetime, every 60 minutes.\n\n(If you need a low-maintenance SSL reverse proxy in front of jawanndenn,\n`docker-ssl-reverse-proxy <https://github.com/hartwork/docker-ssl-reverse-proxy>`_\ncould be of interest.)\n\nThere is a few more environment variables that you could want to adjust in your environment.\nAltogether, there are these variables:\n\n\nEnvironment variables\n---------------------\n\n``DJANGO_SETTINGS_MODULE``\n~~~~~~~~~~~~~~~~~~~~~~~~~~\nDjango settings module to use, leave as is, defaults to ``jawanndenn.settings``\n(see ``docker-compose.yml``)\n\n\n``JAWANNDENN_ALLOWED_HOSTS``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nHostnames to serve jawanndenn at, list separated by comma,\nis set to ``jawanndenn.de,www.jawanndenn.de`` on the main production server,\ndefaults to ``127.0.0.1,0.0.0.0,localhost``\n(see ``jawanndenn/settings.py``)\n\n\n``JAWANNDENN_DEBUG``\n~~~~~~~~~~~~~~~~~~~~\nDebug mode, disabled for all values but ``True``, disabled by default,\nshould never be enabled in production for security\n(see ``jawanndenn/settings.py``)\n\n\n``JAWANNDENN_MAX_POLLS``\n~~~~~~~~~~~~~~~~~~~~~~~~\nMaximum total number of polls to store, denial of service protection,\ndefaults to ``1000``\n(see ``jawanndenn/settings.py`` and ``docker-compose.yml``)\n\n\n``JAWANNDENN_MAX_VOTES_PER_POLL``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nMaximum total number of polls to store, denial of service protection,\ndefaults to ``40``\n(see ``jawanndenn/settings.py``)\n\n\n``JAWANNDENN_POSTGRES_HOST``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nHostname of the PostgreSQL database to connect to; defaults to ``postgres``\n(see ``docker-compose.yml``)\n\n\n``JAWANNDENN_POSTGRES_NAME``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nDatabase name of the PostgreSQL database to connect to;\nno default, always required\n\n\n``JAWANNDENN_POSTGRES_PASSWORD``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nPassword for log-in with the PostgreSQL database;\nno default, always required\n\n\n``JAWANNDENN_POSTGRES_PORT``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nPort of the PostgreSQL database to connect to; defaults to ``5432``\n(see ``docker-compose.yml``)\n\n\n``JAWANNDENN_POSTGRES_USER``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nUsername for log-in with the PostgreSQL database;\nno default, always required\n\n\n``JAWANNDENN_REDIS_HOST``\n~~~~~~~~~~~~~~~~~~~~~~~~~\nHostname of the Redis database to connect to; defaults to ``redis``\n(see ``docker-compose.yml``)\n\n\n``JAWANNDENN_REDIS_PORT``\n~~~~~~~~~~~~~~~~~~~~~~~~~\nPort of the Redis database to connect to; defaults to ``6379``\n(see ``docker-compose.yml``)\n\n\n``JAWANNDENN_SECRET_KEY``\n~~~~~~~~~~~~~~~~~~~~~~~~~\n`Django secret key <https://docs.djangoproject.com/en/4.0/ref/settings/#secret-key>`_;\nshould be long, generated, not used elsewhere; no default, always required\n\n\n``JAWANNDENN_SENTRY_DSN``\n~~~~~~~~~~~~~~~~~~~~~~~~~\n`Data source name (DSN) <https://docs.sentry.io/product/sentry-basics/dsn-explainer/>`_\nfor use with `Sentry <https://sentry.io/>`_, disabled/empty by default\n(see ``jawanndenn/settings.py``)\n\n\n``JAWANNDENN_URL_PREFIX``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nPrefix string to insert into URLs rather after the domain name\nto help with hosting multiple apps under the same domain side by side;\ne.g. prefix ``prefix123`` will result in URLs like ``https://<domain>/prefix123/poll/<id>``;\nempty by default\n(see ``jawanndenn/settings.py``)\n\n\nCommand line usage\n==================\n\nWhen installed, invocation is as simple as\n\n::\n\n    # jawanndenn\n\nDuring development, you may want to run *jawanndenn* from the Git clone\nusing\n\n::\n\n    # PYTHONPATH=. python3 -m jawanndenn --debug\n\nCurrently supported arguments are:\n\n::\n\n    # jawanndenn --help\n    usage: jawanndenn [-h] [--debug] [--host HOST] [--port PORT]\n                      [--url-prefix PATH] [--database-sqlite3 FILE]\n                      [--django-secret-key-file FILE] [--max-polls COUNT]\n                      [--max-votes-per-poll COUNT] [--dumpdata]\n                      [--loaddata FILE.json]\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      --debug               Enable debug mode (default: disabled)\n      --host HOST           Hostname or IP address to listen at (default:\n                            127.0.0.1)\n      --port PORT           Port to listen at (default: 8080)\n      --url-prefix PATH     Path to prepend to URLs (default: \"\")\n      --database-sqlite3 FILE\n                            File to write the database to (default:\n                            ~/jawanndenn.sqlite3)\n      --django-secret-key-file FILE\n                            File to use for Django secret key data (default:\n                            ~/jawanndenn.secret_key)\n\n    limit configuration:\n      --max-polls COUNT     Maximum number of polls total (default: 1000)\n      --max-votes-per-poll COUNT\n                            Maximum number of votes per poll (default: 40)\n\n    data import/export arguments:\n      --dumpdata            Dump a JSON export of the database to standard output,\n                            then quit.\n      --loaddata FILE.json  Load a JSON export of the database from FILE.json,\n                            then quit.\n\n\nMigrating data from jawanndenn 1.x to 2.x\n=========================================\n\nMigration takes four steps:\n\n1. Update to the latest version of jawanndenn 1.x, e.g. by running:\n   ``pip2 install --upgrade 'jawanndenn<2'``;\n   the JSON data export was first introduced with release 1.6.3.\n\n2. Export existing polls:\n\n   a) If you're using the commend line app:\n      ``python2 -m jawanndenn --dumpdata > dump.json``\n\n   b) If you're using docker-compose:\n      ``docker-compose run -T jawanndenn --database-pickle /data/polls.pickle --dumpdata > dump.json``\n\n3. Deploy latest jawanndenn 2.x somewhere (as described above) or just\n   ``pip3 install 'jawanndenn>=2'``\n   it somewhere\n\n4. Import the JSON dump created in step (2):\n\n   a) If you're using the commend line app:\n      ``python3 -m jawanndenn --loaddata dump.json``\n\n   b) If you're using docker-compose:\n      ``docker-compose run -T jawanndenn sh -c 'cat > /tmp/dump.json && DJANGO_SETTINGS_MODULE=jawanndenn.settings python3 -m django loaddata /tmp/dump.json' < dump.json``\n\n\nGoals\n=====\n\n-  Libre software to host yourself, unlike Doodle\n-  More simplistic, sexy and/or fun than `libre alternatives`_, in alphabetic order:\n\n   -  `Bitpoll`_ (ex. `Dudel`_)\n   -  `Croodle`_\n   -  `Dudle`_\n   -  (`Drupal Date picker formatter`_)\n   -  (`Foodle`_ (discontinued; `on GitHub`_, ex. `DFN scheduler`_, ex. `DFN Terminplaner+`_))\n   -  `Framadata`_ (`Sources`_, ex. `OpenSondage`_, ex. `STUdS`_)\n   -  `Nextcloud Polls`_\n   -  `Noodle`_\n   -  `Nuages`_\n   -  `Pleft`_\n   -  `Rallly`_\n   -  `RDVz`_\n   -  `sowhenthen`_\n\n-  Keep things simple, usable, maintainable\n-  Support invocation from the command line, e.g. for spontaneous polls in a LAN\n-  Have security in mind\n\nPlease check out the `list of upcoming features`_.\n\n\nNon-goals\n=========\n\n-  Use of heavy frontend frameworks: building blocks only\n-  Read availability from calendars\n\n\nThanks\n======\n\nSpecial thanks to Arne Maier (`@KordonDev`_) for reporting\nan XSS vulnerability, responsibly.\n\n\n.. _Python: https://www.python.org/\n.. _Docker Compose: https://docs.docker.com/compose/\n.. _Django: https://www.djangoproject.com/\n.. _Django Extensions: https://github.com/django-extensions/django-extensions\n.. _Django Ratelimit: https://github.com/jsocol/django-ratelimit\n.. _msgpack-python: https://github.com/msgpack/msgpack-python\n.. _django-redis: https://github.com/niwinz/django-redis\n.. _Django REST framework: https://www.django-rest-framework.org/\n.. _Factory Boy: https://factoryboy.readthedocs.io/en/latest/\n.. _Gunicorn: https://gunicorn.org/\n.. _gunicorn-color-logger: https://github.com/swistakm/gunicorn-color-logger\n.. _parameterized: https://github.com/wolever/parameterized\n.. _pre-commit: https://pre-commit.com/\n.. _python-rapidjson: https://github.com/python-rapidjson/python-rapidjson\n.. _sentry-python: https://github.com/getsentry/sentry-python\n.. _wait-for-it: https://github.com/clarketm/wait-for-it\n.. _Google Webfonts Helper: https://google-webfonts-helper.herokuapp.com/\n.. _jQuery: http://jquery.com/\n.. _jQuery noty: http://ned.im/noty/#/about\n.. _Materialize: http://materializecss.com/\n.. _Roboto: https://fonts.google.com/specimen/Roboto\n.. _PostgreSQL: https://www.postgresql.org/\n.. _Redis: https://redis.io/\n.. _SQLite: https://www.sqlite.org/index.html\n.. _Supercronic: https://github.com/aptible/supercronic\n.. _libre software: https://www.gnu.org/philosophy/free-sw.en.html\n.. _Sebastian Pipping: https://blog.hartwork.org/\n.. _GNU Affero GPL license: https://www.gnu.org/licenses/agpl.en.html\n.. _GNU GPL license: https://www.gnu.org/licenses/gpl.html\n.. _report bugs: https://github.com/hartwork/jawanndenn/issues\n.. _like: mailto:sebastian@pipping.org\n.. _JSON: https://www.json.org/\n.. _Markdown: https://commonmark.org/help/\n.. _the related documentation of Django: https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/modwsgi/\n.. _file a support ticket: https://github.com/hartwork/jawanndenn/issues/new\n.. _drop me a mail: mailto:sebastian@pipping.org\n.. _libre alternatives: http://alternativeto.net/software/doodle/?license=opensource\n.. _Bitpoll: https://github.com/fsinfuhh/Bitpoll\n.. _Croodle: https://github.com/jelhan/croodle\n.. _Dudel: https://github.com/opatut/dudel\n.. _Pleft: https://github.com/sander/pleft\n.. _Framadata: https://framadate.org/\n.. _Sources: https://git.framasoft.org/framasoft/framadate\n.. _OpenSondage: https://github.com/leblanc-simon/OpenSondage\n.. _STUdS: http://studs.unistra.fr/\n.. _Foodle: https://foodl.org/\n.. _on GitHub: https://github.com/UNINETT/Foodle\n.. _DFN scheduler: https://terminplaner.dfn.de/\n.. _DFN Terminplaner+: https://terminplaner2.dfn.de/\n.. _Dudle: https://dudle.inf.tu-dresden.de/\n.. _Nuages: https://nuages.domainepublic.net/\n.. _RDVz: https://sourceforge.net/projects/rdvz/\n.. _sowhenthen: https://github.com/kiyutink/sowhenthen\n.. _Drupal Date picker formatter: http://alternativeto.net/software/date-picker-formatter-dudel-for-drupal/?license=opensource\n.. _Nextcloud Polls: https://github.com/nextcloud/polls\n.. _Noodle: https://github.com/kmerz/noodle\n.. _Rallly: https://github.com/lukevella/Rallly\n.. _list of upcoming features: https://github.com/hartwork/jawanndenn/issues/created_by/hartwork\n.. _@KordonDev: https://github.com/KordonDev\n",
    "bugtrack_url": null,
    "license": "AGPLv3+",
    "summary": "Libre alternative to Doodle",
    "version": "2.6.0",
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "7917781354c132f55fb333f4ed3af83b366f91556e95dfe54b3660a0eb541407",
                "md5": "3c3186a866e9bff809549c37222ab725",
                "sha256": "8ee6b5d9205f97096f5b761542eb8c2c62bb4b9d42b5a6ab45af6f878e684c87"
            },
            "downloads": -1,
            "filename": "jawanndenn-2.6.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3c3186a866e9bff809549c37222ab725",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 3606428,
            "upload_time": "2023-04-23T01:56:40",
            "upload_time_iso_8601": "2023-04-23T01:56:40.912412Z",
            "url": "https://files.pythonhosted.org/packages/79/17/781354c132f55fb333f4ed3af83b366f91556e95dfe54b3660a0eb541407/jawanndenn-2.6.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6fee7b70f8120db8298763ff908d746f5604f0a8ed2f72033b0c1ac5a9195cae",
                "md5": "98f8f1d72371be99aeb348046793800b",
                "sha256": "8e22b54e6d291853c119376ad6cc692876aaa52596994a18b80a057d84bc2306"
            },
            "downloads": -1,
            "filename": "jawanndenn-2.6.0.tar.gz",
            "has_sig": false,
            "md5_digest": "98f8f1d72371be99aeb348046793800b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 3683186,
            "upload_time": "2023-04-23T01:56:47",
            "upload_time_iso_8601": "2023-04-23T01:56:47.661581Z",
            "url": "https://files.pythonhosted.org/packages/6f/ee/7b70f8120db8298763ff908d746f5604f0a8ed2f72033b0c1ac5a9195cae/jawanndenn-2.6.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-04-23 01:56:47",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "hartwork",
    "github_project": "jawanndenn",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "jawanndenn"
}
        
Elapsed time: 0.05900s