31C3 Fahrplan conflict resolution service
This repository has been archived on 2026-09-07. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
  • CSS 39.5%
  • JavaScript 33.5%
  • Python 16.4%
  • HTML 9.2%
  • Shell 0.8%
  • Other 0.6%
Find a file
2018-11-12 22:54:45 +01:00
backend Add forgotten dependency 2018-11-12 22:53:49 +01:00
deployment Switched to new jail for 35C3 2018-11-12 22:54:45 +01:00
frontend New frontend features for 34C3 2017-12-15 17:15:09 +01:00
LICENSE add licence information (fixes #9) 2015-11-20 11:06:15 +01:00
README.rst fix github markdown 2014-12-10 16:47:16 +01:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Halfnarp
--------

A simple REST-based companion to the `frab conference management system <https://github.com/frab/frab>`_ that allows users to register which talks they want to attend in order for the organizers to arrange a schedule (a.k.a. *Fahrplan*) with as few conflicts as possible.

Client usage
============

Clients can perform a ``GET`` request against a given installation at the path ``/-/talkpreferences`` and will receive a JSON list of available talks that they may present to their users. Notably, each entry contains a ``event_id`` value.

A client may then ``POST`` against the same URL with a JSON body consisting of a dictionary with a key ``talk_ids`` which contains one or more of the talk ids received during the ``GET``.

The server will respond with a dictionary containing an entry named ``update_url`` containing a unique id.

Clients can then ``PUT`` against that URL using the same schema of a dictionary with a list of ``talk_ids`` thus updating their user's preference.

Note, that any updates against this URL will **not** update the previous ids but instead completely **replace** them with the new values. I.e. if the user has added another talk to his wishlist, the client must send the entire list, not just the new talk.

If  for some reason  the client can or wants to only remember the *url* but not the vote it has cast, it can retrieve them by issuing a ``GET`` on the URL it received (the same one used to ``PUT`` updates.)

Admin usage
===========

As administrator you can dump the current votes by running ``bin/export-talks`` which will output a CSV list of all votes (without their ``uid`` or IP hashes) to ``stdout``.