gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] [taler-donations] branch master updated (f80d6a2 -> 9c282aa


From: gnunet
Subject: [GNUnet-SVN] [taler-donations] branch master updated (f80d6a2 -> 9c282aa)
Date: Thu, 29 Aug 2019 19:03:30 +0200

This is an automated email from the git hooks/post-receive script.

dold pushed a change to branch master
in repository donations.

    from f80d6a2  5667: move jsmin dep to setup.py.
     new ea2a0c9  simplify build system
     new 4557557  yapf style file
     new 9c282aa  make pretty

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .style.yapf                           |   5 +
 Makefile.in                           |  56 ---
 bootstrap                             |  12 -
 configure.ac                          |  66 ----
 Doxyfile => contrib/Doxyfile          |   0
 frontend-donations.wsgi.in            |  21 --
 m4/ax_compare_version.m4              | 177 ----------
 m4/python.m4                          | 646 ----------------------------------
 setup.py                              |  51 ++-
 taler-merchant-donations.in           | 118 -------
 talerdonations/donations/donations.py |  78 ++--
 talerdonations/talerconfig.py         | 112 ++++--
 talerdonations/tests.py               |   1 +
 13 files changed, 164 insertions(+), 1179 deletions(-)
 create mode 100644 .style.yapf
 delete mode 100644 Makefile.in
 delete mode 100755 bootstrap
 delete mode 100644 configure.ac
 rename Doxyfile => contrib/Doxyfile (100%)
 delete mode 100644 frontend-donations.wsgi.in
 delete mode 100644 m4/ax_compare_version.m4
 delete mode 100644 m4/python.m4
 delete mode 100644 taler-merchant-donations.in

diff --git a/.style.yapf b/.style.yapf
new file mode 100644
index 0000000..3b39780
--- /dev/null
+++ b/.style.yapf
@@ -0,0 +1,5 @@
+[style]
+based_on_style = pep8
+coalesce_brackets=True
+column_limit=80
+dedent_closing_brackets=True
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index c19386a..0000000
--- a/Makefile.in
+++ /dev/null
@@ -1,56 +0,0 @@
-INSTALL = install
-INSTALL_PROGRAM = $(INSTALL)
-INSTALL_DATA = $(INSTALL) -m 644
-prefix = @prefix@
-srcdir = @srcdir@
-
-script_templates = taler-merchant-donations frontend-donations.wsgi
-templates = Makefile $(script_templates)
-
-edit = sed -e 's|@prefix[@]|$(prefix)|g'
-
-.PHONY: all
-all: $(templates)
-       cd talerdonations/donations/static/web-common && make && cd -
-
-Makefile: Makefile.in
-       ./config.status $@
-
-$(script_templates): %: Makefile %.in
-       rm -f $@ $@.tmp
-       $(edit) '$(srcdir)/$@.in' >$@.tmp
-       mv $@.tmp $@
-
-
-.PHONY: install-data
-install-data: $(templates)
-       @$(INSTALL_DATA) -Dt $(prefix)/share/taler/ frontend-donations.wsgi
-       @$(INSTALL_DATA) -Dt $(prefix)/share/taler/config.d/ donations.conf
-
-#      @test -n "$$(ls -A talerbank/app/static/web-common/)" || \
-#      (echo "please check out git submodules"; exit 1)
-
-
-
-# link package under prefix to source tree
-.PHONY: devinstall
-devinstall: $(templates) install-data
-       @pip3 install -e . --install-option="--prefix=@prefix@"
-
-
-# install into prefix
-.PHONY: install
-install: $(templates) install-data
-       @pip3 install . @DEBIAN_PIP3_SYSTEM@ 
--install-option="--prefix=@prefix@"
-       @# force update when sources changed
-       @pip3 install . @DEBIAN_PIP3_SYSTEM@ 
--install-option="--prefix=@prefix@" --upgrade --no-deps
-       cd talerdonations/donations/static/web-common && make install && cd -
-
-# run testcases
-.PHONY: check
-check:
-       @export TALER_CONFIG_FILE=@abs_srcdir@/talerdonations/tests.conf; \
-        python3 setup.py test
-
-pylint:
-       @pylint talerdonations/
diff --git a/bootstrap b/bootstrap
deleted file mode 100755
index 373e5f5..0000000
--- a/bootstrap
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh
-
-if ! git --version >/dev/null; then
-  echo "git not installed"
-  exit 1
-fi
-
-echo "$0: Updating submodules"
-echo | git submodule update --init
-
-echo "$0: Running autoreconf"
-autoreconf -if
diff --git a/configure.ac b/configure.ac
deleted file mode 100644
index e2ecfbe..0000000
--- a/configure.ac
+++ /dev/null
@@ -1,66 +0,0 @@
-AC_INIT([talerdonations], [0.1.0], [address@hidden])
-
-AC_CONFIG_MACRO_DIR([m4])
-AM_INIT_AUTOMAKE
-AC_PROG_AWK
-AC_PROG_SED
-
-#
-# Check for Python
-#
-
-PC_INIT([3.4])
-pyheaders=0
-PC_PYTHON_CHECK_HEADERS([pyheaders=1])
-PC_PYTHON_CHECK_VERSION()
-
-#
-# Check for pip3
-#
-
-AC_MSG_CHECKING([pip3])
-pip3 --version >/dev/null
-if test $? -ne 0;
-  then
-  AC_MSG_ERROR([Please install pip3>=6.0])
-fi
-
-VERSION=$(pip3 --version | $AWK '{ print $2 }')
-
-AC_MSG_RESULT([$VERSION])
-
-AX_COMPARE_VERSION([$VERSION],[lt],[6.0], [AC_MSG_ERROR([Please install 
pip3>=6.0])])
-
-# On Debian systems, we may need to pass "--system" to pip3 to get
-# to the desired installation target directory
-pip3 install --help | grep '\-\-system' >> /dev/null
-if test $? -ne 0;
-then
-   DEBIAN_PIP3_SYSTEM=""
-else
-   DEBIAN_PIP3_SYSTEM="--system"
-fi
-AC_SUBST(DEBIAN_PIP3_SYSTEM)
-
-#
-# Check for tsc
-#
-AC_CHECK_PROG([tsc],[tsc],[yes],[no])
-AM_CONDITIONAL([HAVE_TSC], [test "x$tsc" = xyes])
-
-#
-# Report
-#
-if test x$pyheaders != x1; then
-  AC_MSG_WARN([Python headers not installed, might be required to build uwsgi])
-fi
-
-
-#
-# Finish
-#
-
-AC_CONFIG_FILES([Makefile
-  talerdonations/donations/static/web-common/Makefile])
-
-AC_OUTPUT
diff --git a/Doxyfile b/contrib/Doxyfile
similarity index 100%
rename from Doxyfile
rename to contrib/Doxyfile
diff --git a/frontend-donations.wsgi.in b/frontend-donations.wsgi.in
deleted file mode 100644
index 8007866..0000000
--- a/frontend-donations.wsgi.in
+++ /dev/null
@@ -1,21 +0,0 @@
-import sys
-
-if sys.version_info.major < 3:
-    print("The taler bank needs to run with Python>=3.4")
-    sys.exit(1)
-
-import site
-import os
-import logging
-
-logging.basicConfig(level=logging.INFO)
-
-os.environ.setdefault("TALER_PREFIX", "@prefix@")
-site.addsitedir("%s/lib/python%d.%d/site-packages" % (
-    "@prefix@", 
-    sys.version_info.major,
-    sys.version_info.minor))
-
-import talerdonations.donations
-
-application = talerdonations.donations.app
diff --git a/m4/ax_compare_version.m4 b/m4/ax_compare_version.m4
deleted file mode 100644
index 74dc0fd..0000000
--- a/m4/ax_compare_version.m4
+++ /dev/null
@@ -1,177 +0,0 @@
-# ===========================================================================
-#    http://www.gnu.org/software/autoconf-archive/ax_compare_version.html
-# ===========================================================================
-#
-# SYNOPSIS
-#
-#   AX_COMPARE_VERSION(VERSION_A, OP, VERSION_B, [ACTION-IF-TRUE], 
[ACTION-IF-FALSE])
-#
-# DESCRIPTION
-#
-#   This macro compares two version strings. Due to the various number of
-#   minor-version numbers that can exist, and the fact that string
-#   comparisons are not compatible with numeric comparisons, this is not
-#   necessarily trivial to do in a autoconf script. This macro makes doing
-#   these comparisons easy.
-#
-#   The six basic comparisons are available, as well as checking equality
-#   limited to a certain number of minor-version levels.
-#
-#   The operator OP determines what type of comparison to do, and can be one
-#   of:
-#
-#    eq  - equal (test A == B)
-#    ne  - not equal (test A != B)
-#    le  - less than or equal (test A <= B)
-#    ge  - greater than or equal (test A >= B)
-#    lt  - less than (test A < B)
-#    gt  - greater than (test A > B)
-#
-#   Additionally, the eq and ne operator can have a number after it to limit
-#   the test to that number of minor versions.
-#
-#    eq0 - equal up to the length of the shorter version
-#    ne0 - not equal up to the length of the shorter version
-#    eqN - equal up to N sub-version levels
-#    neN - not equal up to N sub-version levels
-#
-#   When the condition is true, shell commands ACTION-IF-TRUE are run,
-#   otherwise shell commands ACTION-IF-FALSE are run. The environment
-#   variable 'ax_compare_version' is always set to either 'true' or 'false'
-#   as well.
-#
-#   Examples:
-#
-#     AX_COMPARE_VERSION([3.15.7],[lt],[3.15.8])
-#     AX_COMPARE_VERSION([3.15],[lt],[3.15.8])
-#
-#   would both be true.
-#
-#     AX_COMPARE_VERSION([3.15.7],[eq],[3.15.8])
-#     AX_COMPARE_VERSION([3.15],[gt],[3.15.8])
-#
-#   would both be false.
-#
-#     AX_COMPARE_VERSION([3.15.7],[eq2],[3.15.8])
-#
-#   would be true because it is only comparing two minor versions.
-#
-#     AX_COMPARE_VERSION([3.15.7],[eq0],[3.15])
-#
-#   would be true because it is only comparing the lesser number of minor
-#   versions of the two values.
-#
-#   Note: The characters that separate the version numbers do not matter. An
-#   empty string is the same as version 0. OP is evaluated by autoconf, not
-#   configure, so must be a string, not a variable.
-#
-#   The author would like to acknowledge Guido Draheim whose advice about
-#   the m4_case and m4_ifvaln functions make this macro only include the
-#   portions necessary to perform the specific comparison specified by the
-#   OP argument in the final configure script.
-#
-# LICENSE
-#
-#   Copyright (c) 2008 Tim Toolan <address@hidden>
-#
-#   Copying and distribution of this file, with or without modification, are
-#   permitted in any medium without royalty provided the copyright notice
-#   and this notice are preserved. This file is offered as-is, without any
-#   warranty.
-
-#serial 11
-
-dnl #########################################################################
-AC_DEFUN([AX_COMPARE_VERSION], [
-  AC_REQUIRE([AC_PROG_AWK])
-
-  # Used to indicate true or false condition
-  ax_compare_version=false
-
-  # Convert the two version strings to be compared into a format that
-  # allows a simple string comparison.  The end result is that a version
-  # string of the form 1.12.5-r617 will be converted to the form
-  # 0001001200050617.  In other words, each number is zero padded to four
-  # digits, and non digits are removed.
-  AS_VAR_PUSHDEF([A],[ax_compare_version_A])
-  A=`echo "$1" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
-                     -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/[[^0-9]]//g'`
-
-  AS_VAR_PUSHDEF([B],[ax_compare_version_B])
-  B=`echo "$3" | sed -e 's/\([[0-9]]*\)/Z\1Z/g' \
-                     -e 's/Z\([[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([[0-9]][[0-9]][[0-9]]\)Z/Z0\1Z/g' \
-                     -e 's/[[^0-9]]//g'`
-
-  dnl # In the case of le, ge, lt, and gt, the strings are sorted as necessary
-  dnl # then the first line is used to determine if the condition is true.
-  dnl # The sed right after the echo is to remove any indented white space.
-  m4_case(m4_tolower($2),
-  [lt],[
-    ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/false/;s/x${B}/true/;1q"`
-  ],
-  [gt],[
-    ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort | sed "s/x${A}/false/;s/x${B}/true/;1q"`
-  ],
-  [le],[
-    ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort | sed "s/x${A}/true/;s/x${B}/false/;1q"`
-  ],
-  [ge],[
-    ax_compare_version=`echo "x$A
-x$B" | sed 's/^ *//' | sort -r | sed "s/x${A}/true/;s/x${B}/false/;1q"`
-  ],[
-    dnl Split the operator from the subversion count if present.
-    m4_bmatch(m4_substr($2,2),
-    [0],[
-      # A count of zero means use the length of the shorter version.
-      # Determine the number of characters in A and B.
-      ax_compare_version_len_A=`echo "$A" | $AWK '{print(length)}'`
-      ax_compare_version_len_B=`echo "$B" | $AWK '{print(length)}'`
-
-      # Set A to no more than B's length and B to no more than A's length.
-      A=`echo "$A" | sed "s/\(.\{$ax_compare_version_len_B\}\).*/\1/"`
-      B=`echo "$B" | sed "s/\(.\{$ax_compare_version_len_A\}\).*/\1/"`
-    ],
-    [[0-9]+],[
-      # A count greater than zero means use only that many subversions
-      A=`echo "$A" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
-      B=`echo "$B" | sed "s/\(\([[0-9]]\{4\}\)\{m4_substr($2,2)\}\).*/\1/"`
-    ],
-    [.+],[
-      AC_WARNING(
-        [illegal OP numeric parameter: $2])
-    ],[])
-
-    # Pad zeros at end of numbers to make same length.
-    ax_compare_version_tmp_A="$A`echo $B | sed 's/./0/g'`"
-    B="$B`echo $A | sed 's/./0/g'`"
-    A="$ax_compare_version_tmp_A"
-
-    # Check for equality or inequality as necessary.
-    m4_case(m4_tolower(m4_substr($2,0,2)),
-    [eq],[
-      test "x$A" = "x$B" && ax_compare_version=true
-    ],
-    [ne],[
-      test "x$A" != "x$B" && ax_compare_version=true
-    ],[
-      AC_WARNING([illegal OP parameter: $2])
-    ])
-  ])
-
-  AS_VAR_POPDEF([A])dnl
-  AS_VAR_POPDEF([B])dnl
-
-  dnl # Execute ACTION-IF-TRUE / ACTION-IF-FALSE.
-  if test "$ax_compare_version" = "true" ; then
-    m4_ifvaln([$4],[$4],[:])dnl
-    m4_ifvaln([$5],[else $5])dnl
-  fi
-]) dnl AX_COMPARE_VERSION
diff --git a/m4/python.m4 b/m4/python.m4
deleted file mode 100644
index 98a68b8..0000000
--- a/m4/python.m4
+++ /dev/null
@@ -1,646 +0,0 @@
-# Copyright 2012, 2013, 2014 Brandon Invergo <address@hidden>
-#
-# This file is part of pyconfigure.  This program is free
-# software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the
-# Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# Under Section 7 of GPL version 3, you are granted additional
-# permissions described in the Autoconf Configure Script Exception,
-# version 3.0, as published by the Free Software Foundation.
-#
-# You should have received a copy of the GNU General Public License
-# and a copy of the Autoconf Configure Script Exception along with
-# this program; see the files COPYINGv3 and COPYING.EXCEPTION
-# respectively.  If not, see <http://www.gnu.org/licenses/>.
-
-
-# Many of these macros were adapted from ones written by Andrew Dalke
-# and James Henstridge and are included with the Automake utility
-# under the following copyright terms:
-#
-# Copyright (C) 1999-2012 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# Table of Contents:
-#
-# 1. Language selection
-#    and routines to produce programs in a given language.
-#
-# 2. Producing programs in a given language.
-#
-# 3. Looking for a compiler
-#    And possibly the associated preprocessor.
-#
-# 4. Looking for specific libs & functionality
-
-
-## ----------------------- ##
-## 1. Language selection.  ##
-## ----------------------- ##
-
-
-# AC_LANG(Python)
-# ---------------
-AC_LANG_DEFINE([Python], [py], [PY], [PYTHON], [],
-[ac_ext=py
-ac_compile='chmod +x conftest.$ac_ext >&AS_MESSAGE_LOG_FD'
-ac_link='chmod +x conftest.$ac_ext && cp conftest.$ac_ext conftest 
>&AS_MESSAGE_LOG_FD'
-])
-
-
-# AC_LANG_PYTHON
-# --------------
-AU_DEFUN([AC_LANG_PYTHON], [AC_LANG(Python)])
-
-
-## ----------------------- ##
-## 2. Producing programs.  ##
-## ----------------------- ##
-
-
-# AC_LANG_PROGRAM(Python)([PROLOGUE], [BODY])
-# -------------------------------------------
-m4_define([AC_LANG_PROGRAM(Python)], [dnl
-@%:@!$PYTHON
-$1
-m4_if([$2], [], [], [dnl
-if __name__ == '__main__':
-$2])])
-
-
-# _AC_LANG_IO_PROGRAM(Python)
-# ---------------------------
-# Produce source that performs I/O.
-m4_define([_AC_LANG_IO_PROGRAM(Python)],
-[AC_LANG_PROGRAM([dnl
-import sys
-try:
-    h = open('conftest.out')
-except:
-    sys.exit(1)
-else:
-    close(h)
-    sys.exit(0)
-], [])])
-
-
-# _AC_LANG_CALL(Python)([PROLOGUE], [FUNCTION])
-# ---------------------
-# Produce source that calls FUNCTION
-m4_define([_AC_LANG_CALL(Python)],
-[AC_LANG_PROGRAM([$1], [$2])])
-
-
-## -------------------------------------------- ##
-## 3. Looking for Compilers and Interpreters.   ##
-## -------------------------------------------- ##
-
-
-AC_DEFUN([AC_LANG_COMPILER(Python)],
-[AC_REQUIRE([PC_PROG_PYTHON])])
-
-
-# PC_INIT([MIN-VERSION], [MAX-VERSION]) 
-# -----------------------------
-# Initialize pyconfigure, finding a Python interpreter with a given
-# minimum and/or maximum version. 
-AC_DEFUN([PC_INIT],
-[PC_PROG_PYTHON([], [$1], [$2])
-dnl If we found something, do a sanity check that the interpreter really
-dnl has the version its name would suggest.
-m4_ifval([PYTHON],
-        [PC_PYTHON_VERIFY_VERSION([>=], [pc_min_ver], [],
-                  [AC_MSG_FAILURE([No compatible Python interpreter found. If 
you're sure that you have one, try setting the PYTHON environment variable to 
the location of the interpreter.])])])
-m4_ifval([PYTHON],
-        [PC_PYTHON_VERIFY_VERSION([<=], [pc_max_ver], [],
-                  [AC_MSG_FAILURE([No compatible Python interpreter found. If 
you're sure that you have one, try setting the PYTHON environment variable to 
the location of the interpreter.])])])
-])# PC_INIT
-
-# PC_PROG_PYTHON([PROG-TO-CHECK-FOR], [MIN-VERSION], [MAX-VERSION])
-# ---------------------------------
-# Find a Python interpreter.  Python versions prior to 2.0 are not
-# supported. (2.0 was released on October 16, 2000).
-AC_DEFUN_ONCE([PC_PROG_PYTHON],
-[AC_ARG_VAR([PYTHON], [the Python interpreter])
-dnl The default minimum version is 2.0
-m4_define_default([pc_min_ver], m4_ifval([$2], [$2], [2.0]))
-dnl The default maximum version is 3.3
-m4_define_default([pc_max_ver], m4_ifval([$3], [$3], [4.0]))
-dnl Build up a list of possible interpreter names. 
-m4_define_default([_PC_PYTHON_INTERPRETER_LIST],
-    [dnl If we want some Python 3 versions (max version >= 3.0), 
-dnl also search for "python3"
-     m4_if(m4_version_compare(pc_max_ver, [2.9]), [1], [python3], []) \
-dnl If we want some Python 2 versions (min version <= 2.7),
-dnl also search for "python2".
-     m4_if(m4_version_compare(pc_min_ver, [2.8]), [-1], [python2], []) \
-dnl Construct a comma-separated list of interpreter names (python2.6, 
-dnl python2.7, etc). We only care about the first 3 characters of the
-dnl version strings (major-dot-minor; not 
-dnl major-dot-minor-dot-bugfix[-dot-whatever])
-     m4_foreach([pc_ver], 
-                    m4_esyscmd_s(seq -s[[", "]] -f["[[%.1f]]"] 
m4_substr(pc_max_ver, [0], [3]) -0.1 m4_substr(pc_min_ver, [0], [3])),
-dnl Remove python2.8 and python2.9 since they will never exist
-                    [m4_bmatch(pc_ver, [2.[89]], [], [python]pc_ver)]) \
-     [python]])
-dnl Do the actual search at last.
-m4_ifval([$1],
-       [AC_PATH_PROGS(PYTHON, [$1 _PC_PYTHON_INTERPRETER_LIST])],
-       [AC_PATH_PROGS(PYTHON, [_PC_PYTHON_INTERPRETER_LIST])])
-])# PC_PROG_PYTHON
-  
-
-# PC_PYTHON_PROG_PYTHON_CONFIG(PROG-TO-CHECK-FOR)
-# ----------------------------------------------
-# Find the python-config program
-AC_DEFUN([PC_PYTHON_PROG_PYTHON_CONFIG],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-AC_ARG_VAR([PYTHON_CONFIG], [the Python-config program])
-dnl python-config's binary name is normally based on the Python interpreter's
-dnl binary name (i.e. python2.7 -> python2.7-config)
-m4_define([_PYTHON_BASENAME], [`basename $PYTHON`])
-m4_ifval([$1],
-       [AC_PATH_PROGS(PYTHON_CONFIG, [$1 _PYTHON_BASENAME-config])],
-       [AC_PATH_PROG(PYTHON_CONFIG, _PYTHON_BASENAME-config)])
-]) # PC_PYTHON_PROG_PYTHON_CONFIG
-
-
-# PC_PYTHON_VERIFY_VERSION([RELATION], [VERSION], [ACTION-IF-TRUE], 
[ACTION-IF-FALSE])
-# ---------------------------------------------------------------------------
-# Run ACTION-IF-TRUE if the Python interpreter PROG has version [RELATION] 
VERSION.
-# i.e if RELATION is "<", check if PROG has a version number less than VERSION.
-# Run ACTION-IF-FALSE otherwise.
-# Specify RELATION as any mathematical comparison "<", ">", "<=", ">=", "==" 
or "!="
-# This test uses sys.hexversion instead of the string equivalent (first
-# word of sys.version), in order to cope with versions such as 2.2c1.
-# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000).
-AC_DEFUN([PC_PYTHON_VERIFY_VERSION],
-[m4_define([pc_python_safe_ver], m4_bpatsubsts($2, [\.], [_]))
-AC_CACHE_CHECK([if Python $1 '$2'],
-    [[pc_cv_python_req_version_]pc_python_safe_ver],
-    [AC_LANG_PUSH(Python)[]dnl
-     AC_RUN_IFELSE(
-        [AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
-    # split strings by '.' and convert to numeric.  Append some zeros
-    # because we need at least 4 digits for the hex conversion.
-    # map returns an iterator in Python 3.0 and a list in 2.x
-    reqver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]]
-    reqverhex = 0
-    # xrange is not present in Python 3.0 and range returns an iterator
-    for i in list(range(4)):
-        reqverhex = (reqverhex << 8) + reqver[[i]]
-    # the final 8 bits are "0xf0" for final versions, which are all
-    # we'll test against, since it's doubtful that a released software
-    # will depend on an alpha- or beta-state Python.
-    reqverhex += 0xf0
-    if sys.hexversion $1 reqverhex:
-        sys.exit()
-    else:
-        sys.exit(1)
-])], 
-         [[pc_cv_python_req_version_]pc_python_safe_ver=yes], 
-         [[pc_cv_python_req_version_]pc_python_safe_ver=no])
-     AC_LANG_POP(Python)[]dnl
-    ])
-AS_IF([test "$[pc_cv_python_req_version_]pc_python_safe_ver" = "no"], [$4], 
[$3])
-])# PC_PYTHON_VERIFY_VERSION
-
-
-# PC_PYTHON_CHECK_VERSION
-# -----------------------
-# Query Python for its version number.  Getting [:3] seems to be
-# the best way to do this; it's what "site.py" does in the standard
-# library.
-AC_DEFUN([PC_PYTHON_CHECK_VERSION],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-AC_CACHE_CHECK([for $1 version], 
-    [pc_cv_python_version],
-    [AC_LANG_PUSH(Python)[]dnl
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
-    sys.stdout.write(sys.version[[:3]])
-])],
-                   [pc_cv_python_version=`./conftest`],
-                   [AC_MSG_FAILURE([failed to run Python program])])
-     AC_LANG_POP(Python)[]dnl
-    ])
-AC_SUBST([PYTHON_VERSION], [$pc_cv_python_version])
-])# PC_PYTHON_CHECK_VERSION
-
-
-# PC_PYTHON_CHECK_PREFIX
-# ----------------------
-# Use the value of $prefix for the corresponding value of
-# PYTHON_PREFIX. This is made a distinct variable so it can be
-# overridden if need be.  However, general consensus is that you
-# shouldn't need this ability. 
-AC_DEFUN([PC_PYTHON_CHECK_PREFIX],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to get it with python-config otherwise do it from within Python
-AC_CACHE_CHECK([for Python prefix], [pc_cv_python_prefix],
-[if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_prefix=`$PYTHON_CONFIG --prefix 2>&AS_MESSAGE_LOG_FD`
-else
-    AC_LANG_PUSH(Python)[]dnl
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
-    sys.stdout.write(sys.prefix)
-])], [pc_cv_python_prefix=`./conftest`;
-      if test $? != 0; then
-         AC_MSG_FAILURE([could not determine Python prefix])
-      fi],
-      [AC_MSG_FAILURE([failed to run Python program])])
-    AC_LANG_POP(Python)[]dnl
-fi])
-AC_SUBST([PYTHON_PREFIX], [$pc_cv_python_prefix])])
-
-
-# PC_PYTHON_CHECK_EXEC_PREFIX
-# --------------------------
-# Like above, but for $exec_prefix
-AC_DEFUN([PC_PYTHON_CHECK_EXEC_PREFIX],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to get it with python-config otherwise do it from within Python
-AC_CACHE_CHECK([for Python exec-prefix], [pc_cv_python_exec_prefix],
-[if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_exec_prefix=`$PYTHON_CONFIG --exec-prefix 
2>&AS_MESSAGE_LOG_FD`
-else
-    AC_LANG_PUSH(Python)[]dnl
-    AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
-    sys.stdout.write(sys.exec_prefix)
-])],
-        [pc_cv_python_exec_prefix=`./conftest`;
-         if test $? != 0; then
-            AC_MSG_FAILURE([could not determine Python exec_prefix])
-         fi],
-         [AC_MSG_FAILURE([failed to run Python program])])
-    AC_LANG_POP(Python)[]dnl
-fi
-])
-AC_SUBST([PYTHON_EXEC_PREFIX], [$pc_cv_python_exec_prefix])])
-
-
-# PC_PYTHON_CHECK_INCLUDES
-# ------------------------
-# Find the Python header file include flags (ie
-# '-I/usr/include/python')
-AC_DEFUN([PC_PYTHON_CHECK_INCLUDES],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the headers location with python-config otherwise guess
-AC_CACHE_CHECK([for Python includes], [pc_cv_python_includes],
-[if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_includes=`$PYTHON_CONFIG --includes 2>&AS_MESSAGE_LOG_FD`
-else
-    
pc_cv_python_includes="[-I$includedir/$_PYTHON_BASENAME]m4_ifdef(PYTHON_ABI_FLAGS,
-    PYTHON_ABI_FLAGS,)"
-fi
-])
-AC_SUBST([PYTHON_INCLUDES], [$pc_cv_python_includes])])
-
-
-# PC_PYTHON_CHECK_HEADERS([ACTION-IF-PRESENT], [ACTION-IF-ABSENT])
-# -----------------------
-# Check for the presence and usability of Python.h
-AC_DEFUN([PC_PYTHON_CHECK_HEADERS],
-[AC_REQUIRE([PC_PYTHON_CHECK_INCLUDES])[]dnl
-pc_cflags_store=$CPPFLAGS
-CPPFLAGS="$CFLAGS $PYTHON_INCLUDES"
-AC_CHECK_HEADER([Python.h], [$1], [$2])
-CPPFLAGS=$pc_cflags_store
-])
-
-
-# PC_PYTHON_CHECK_LIBS
-# --------------------
-# Find the Python lib flags (ie '-lpython')
-AC_DEFUN([PC_PYTHON_CHECK_LIBS],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the lib flags with python-config otherwise guess
-AC_CACHE_CHECK([for Python libs], [pc_cv_python_libs],
-[if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_libs=`$PYTHON_CONFIG --libs 2>&AS_MESSAGE_LOG_FD`
-else
-    pc_cv_python_libs="[-l$_PYTHON_BASENAME]m4_ifdef(PYTHON_ABI_FLAGS, 
PYTHON_ABI_FLAGS,)"
-fi
-])
-AC_SUBST([PYTHON_LIBS], [$pc_cv_python_libs])])
-
-
-# PC_PYTHON_TEST_LIBS(LIBRARY-FUNCTION, [ACTION-IF-PRESENT], 
[ACTION-IF-ABSENT])
-# -------------------
-# Verify that the Python libs can be loaded
-AC_DEFUN([PC_PYTHON_TEST_LIBS],
-[AC_REQUIRE([PC_PYTHON_CHECK_LIBS])[]dnl
-pc_libflags_store=$LIBS
-for lflag in $PYTHON_LIBS; do
-    case $lflag in
-        -lpython*@:}@
-               LIBS="$LIBS $lflag"
-               pc_libpython=`echo $lflag | sed -e 's/^-l//'`
-               ;;
-         *@:}@;;
-    esac
-done
-AC_CHECK_LIB([$pc_libpython], [$1], [$2], [$3])])
-
-
-# PC_PYTHON_CHECK_CFLAGS
-# ----------------------
-# Find the Python CFLAGS
-AC_DEFUN([PC_PYTHON_CHECK_CFLAGS],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the CFLAGS with python-config otherwise give up
-AC_CACHE_CHECK([for Python CFLAGS], [pc_cv_python_cflags],
-[if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_cflags=`$PYTHON_CONFIG --cflags 2>&AS_MESSAGE_LOG_FD`
-else
-    pc_cv_python_cflags=
-fi
-])
-AC_SUBST([PYTHON_CFLAGS], [$pc_cv_python_cflags])])
-
-
-# PC_PYTHON_CHECK_LDFLAGS
-# -----------------------
-# Find the Python LDFLAGS
-AC_DEFUN([PC_PYTHON_CHECK_LDFLAGS],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the LDFLAGS with python-config otherwise give up
-AC_CACHE_CHECK([for Python LDFLAGS], [pc_cv_python_ldflags],
-[if test -x "$PYTHON_CONFIG"; then
-    pc_cv_python_ldflags=`$PYTHON_CONFIG --ldflags 2>&AS_MESSAGE_LOG_FD`
-else
-    pc_cv_python_ldflags=
-fi
-])
-AC_SUBST([PYTHON_LDFLAGS], [$pc_cv_python_ldflags])])
-
-
-# PC_PYTHON_CHECK_EXTENSION_SUFFIX
-# --------------------------------
-# Find the Python extension suffix (i.e. '.cpython-32.so')
-AC_DEFUN([PC_PYTHON_CHECK_EXTENSION_SUFFIX],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the suffix with python-config otherwise give up
-AC_CACHE_CHECK([for Python extension suffix], [pc_cv_python_extension_suffix],
-[if test -x "$PYTHON_CONFIG"; then
-     pc_cv_python_extension_suffix=`$PYTHON_CONFIG --extension-suffix 
2>&AS_MESSAGE_LOG_FD`
-else
-    pc_cv_python_extension_suffix=
-fi
-])
-AC_SUBST([PYTHON_EXTENSION_SUFFIX], [$pc_cv_python_extension_suffix])])
-
-
-# PC_PYTHON_CHECK_ABI_FLAGS
-# -------------------------
-# Find the Python ABI flags
-AC_DEFUN([PC_PYTHON_CHECK_ABI_FLAGS],
-[AC_REQUIRE([PC_PYTHON_PROG_PYTHON_CONFIG])[]dnl
-dnl Try to find the ABI flags with python-config otherwise give up
-AC_CACHE_CHECK([for Python ABI flags], [pc_cv_python_abi_flags],
-[if test -x "$PYTHON_CONFIG"; then
-     pc_cv_python_abi_flags=`$PYTHON_CONFIG --abiflags 2>&AS_MESSAGE_LOG_FD`
-else
-    pc_cv_python_abi_flags=
-fi
-])
-AC_SUBST([PYTHON_ABI_FLAGS], [$pc_cv_python_abi_flags])])
-
-
-# PC_PYTHON_CHECK_PLATFORM
-# ------------------------
-# At times (like when building shared libraries) you may want
-# to know which OS platform Python thinks this is.
-AC_DEFUN([PC_PYTHON_CHECK_PLATFORM],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-dnl Get the platform from within Python (sys.platform)
-AC_CACHE_CHECK([for Python platform], [pc_cv_python_platform],
-    [AC_LANG_PUSH(Python)[]dnl
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-], [dnl
-    sys.stdout.write(sys.platform)
-])], [pc_cv_python_platform=`./conftest`;
-     if test $? != 0; then
-        AC_MSG_FAILURE([could not determine Python platform])
-     fi],
-     [AC_MSG_FAILURE([failed to run Python program])])
-    AC_LANG_POP(Python)[]dnl
-   ])
-AC_SUBST([PYTHON_PLATFORM], [$pc_cv_python_platform])
-])
-
-
-# PC_PYTHON_CHECK_SITE_DIR
-# ---------------------
-# The directory to which new libraries are installed (i.e. the
-# "site-packages" directory.
-AC_DEFUN([PC_PYTHON_CHECK_SITE_DIR],
-[AC_REQUIRE([PC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_PREFIX])[]dnl
-AC_CACHE_CHECK([for Python site-packages directory],
-    [pc_cv_python_site_dir],
-    [AC_LANG_PUSH(Python)[]dnl
-    if test "x$prefix" = xNONE
-     then
-       pc_py_prefix=$ac_default_prefix
-     else
-       pc_py_prefix=$prefix
-     fi
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-from platform import python_implementation
-# sysconfig in CPython 2.7 doesn't work in virtualenv
-# <https://github.com/pypa/virtualenv/issues/118>
-try:
-    import sysconfig
-except:
-    can_use_sysconfig = False
-else:
-    can_use_sysconfig = True
-if can_use_sysconfig:
-    if python_implementation() == "CPython" and sys.version[[:3]] == '2.7':
-        can_use_sysconfig = False
-if not can_use_sysconfig:        
-    from distutils import sysconfig
-    sitedir = sysconfig.get_python_lib(False, False, prefix='$pc_py_prefix')
-else:
-    sitedir = sysconfig.get_path('purelib', vars={'base':'$pc_py_prefix'})
-], [dnl
-    sys.stdout.write(sitedir)
-])], [pc_cv_python_site_dir=`./conftest`],
-     [AC_MSG_FAILURE([failed to run Python program])])
-     AC_LANG_POP(Python)[]dnl
-     case $pc_cv_python_site_dir in
-     $pc_py_prefix*)
-       pc__strip_prefix=`echo "$pc_py_prefix" | sed 's|.|.|g'`
-       pc_cv_python_site_dir=`echo "$pc_cv_python_site_dir" | sed 
"s,^$pc__strip_prefix/,,"`
-       ;;
-     *)
-       case $pc_py_prefix in
-         /usr|/System*) ;;
-         *)
-         pc_cv_python_site_dir=lib/python$PYTHON_VERSION/site-packages
-         ;;
-       esac
-       ;;
-     esac
-     ])
-AC_SUBST([pythondir], [\${prefix}/$pc_cv_python_site_dir])])# 
PC_PYTHON_CHECK_SITE_DIR
-
-# PC_PYTHON_SITE_PACKAGE_DIR
-# --------------------------
-# $PACKAGE directory under PYTHON_SITE_DIR
-AC_DEFUN([PC_PYTHON_SITE_PACKAGE_DIR],
-[AC_REQUIRE([PC_PYTHON_CHECK_SITE_DIR])[]dnl
-AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE_NAME])])
-
-
-# PC_PYTHON_CHECK_EXEC_DIR
-# ------------------------
-# directory for installing python extension modules (shared libraries)
-AC_DEFUN([PC_PYTHON_CHECK_EXEC_DIR],
-[AC_REQUIRE([PC_PROG_PYTHON])AC_REQUIRE([PC_PYTHON_CHECK_EXEC_PREFIX])[]dnl
-  AC_CACHE_CHECK([for Python extension module directory],
-    [pc_cv_python_exec_dir],
-    [AC_LANG_PUSH(Python)[]dnl
-    if test "x$pc_cv_python_exec_prefix" = xNONE
-     then
-       pc_py_exec_prefix=$pc_cv_python_prefix
-     else
-       pc_py_exec_prefix=$pc_cv_python_exec_prefix
-     fi
-     AC_LINK_IFELSE([AC_LANG_PROGRAM([dnl
-import sys
-from platform import python_implementation
-# sysconfig in CPython 2.7 doesn't work in virtualenv
-# <https://github.com/pypa/virtualenv/issues/118>
-try:
-    import sysconfig
-except:
-    can_use_sysconfig = False
-else:
-    can_use_sysconfig = True
-if can_use_sysconfig:
-    if python_implementation() == "CPython" and sys.version[[:3]] == '2.7':
-        can_use_sysconfig = False
-if not can_use_sysconfig:        
-    from distutils import sysconfig
-    sitedir = sysconfig.get_python_lib(False, False, 
prefix='$pc_py__exec_prefix')
-else:
-    sitedir = sysconfig.get_path('purelib', 
vars={'platbase':'$pc_py_exec_prefix'})
-], [dnl
-    sys.stdout.write(sitedir)
-])], [pc_cv_python_exec_dir=`./conftest`],
-     [AC_MSG_FAILURE([failed to run Python program])])
-     AC_LANG_POP(Python)[]dnl
-     case $pc_cv_python_exec_dir in
-     $pc_py_exec_prefix*)
-       pc__strip_prefix=`echo "$pc_py_exec_prefix" | sed 's|.|.|g'`
-       pc_cv_python_exec_dir=`echo "$pc_cv_python_exec_dir" | sed 
"s,^$pc__strip_prefix/,,"`
-       ;;
-     *)
-       case $pc_py_exec_prefix in
-         /usr|/System*) ;;
-         *)
-          pc_cv_python_exec_dir=lib/python$PYTHON_VERSION/site-packages
-          ;;
-       esac
-       ;;
-     esac
-    ])
-AC_SUBST([pyexecdir], [\${exec_prefix}/$pc_cv_python_pyexecdir])]) 
#PY_PYTHON_CHECK_EXEC_LIB_DIR
-
-
-# PC_PYTHON_EXEC_PACKAGE_DIR
-# --------------------------
-# $PACKAGE directory under PYTHON_SITE_DIR
-AC_DEFUN([PC_PYTHON_EXEC_PACKAGE_DIR],
-[AC_REQUIRE([PC_PYTHON_CHECK_EXEC_DIR])[]dnl
-AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE_NAME])])
-
-
-## -------------------------------------------- ##
-## 4. Looking for specific libs & functionality ##
-## -------------------------------------------- ##
-
-
-# PC_PYTHON_CHECK_MODULE(LIBRARY, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-# ----------------------------------------------------------------------
-# Macro for checking if a Python library is installed
-AC_DEFUN([PC_PYTHON_CHECK_MODULE],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
-AC_CACHE_CHECK([for Python '$1' library],
-    [[pc_cv_python_module_]pc_python_safe_mod],
-    [AC_LANG_PUSH(Python)[]dnl
-     AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM([dnl
-import sys
-try:
-    import $1
-except:
-    sys.exit(1)
-else:
-    sys.exit(0)
-], [])],
-       [[pc_cv_python_module_]pc_python_safe_mod="yes"],
-       [[pc_cv_python_module_]pc_python_safe_mod="no"])
-     AC_LANG_POP(Python)[]dnl
-    ])
-AS_IF([test "$[pc_cv_python_module_]pc_python_safe_mod" = "no"], [$3], [$2])
-])# PC_PYTHON_CHECK_MODULE
-
-
-# PC_PYTHON_CHECK_FUNC([LIBRARY], FUNCTION, ARGS, [ACTION-IF-FOUND], 
[ACTION-IF-NOT-FOUND])
-# 
---------------------------------------------------------------------------------------
-# Check to see if a given function call, optionally from a module, can
-# be successfully called
-AC_DEFUN([PC_PYTHON_CHECK_FUNC],
-[AC_REQUIRE([PC_PROG_PYTHON])[]dnl
-m4_define([pc_python_safe_mod], m4_bpatsubsts($1, [\.], [_]))
-AC_CACHE_CHECK([for Python m4_ifnblank($1, '$1.$2()', '$2()') function],
-    [[pc_cv_python_func_]pc_python_safe_mod[_$2]],
-    [AC_LANG_PUSH(Python)[]dnl
-     AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM([dnl
-import sys
-m4_ifnblank([$1], [dnl
-try:
-    import $1
-except:
-    sys.exit(1)
-], [])], 
-[
-m4_ifnblank([$1], [
-    try:
-        $1.$2($3)], [
-    try:
-        $2($3)])
-    except:
-        sys.exit(1)
-    else:
-        sys.exit(0)
-])],
-       [[pc_cv_python_func_]pc_python_safe_mod[_$2]="yes"],
-       [[pc_cv_python_func_]pc_python_safe_mod[_$2]="no"])
-     AC_LANG_POP(Python)[]dnl
-    ])
-AS_IF([test "$[pc_cv_python_func_]pc_python_safe_mod[_$2]" = "no"], [$5], [$4])
-])# PC_PYTHON_CHECK_FUNC
diff --git a/setup.py b/setup.py
index a917c11..906567c 100755
--- a/setup.py
+++ b/setup.py
@@ -1,28 +1,27 @@
 from setuptools import setup, find_packages
 
-setup(name='talerdonations',
-      version='0.0',
-      description='Example donations site for GNU Taler',
-      url='git://taler.net/donations',
-      author='Marcello Stanisci',
-      author_email='address@hidden',
-      license='GPL',
-      packages=find_packages(),
-      install_requires=["Flask>=0.10",
-                        "requests",
-                        "uwsgi",
-                        "jsmin"],
-      tests_require=["mock", "nose"],
-      test_suite="nose.collector",
-      package_data={
-          '':[
-              "donations/templates/*.html",
-              "donations/static/*.svg",
-              "donations/static/*.css",
-              "donations/static/web-common/*.png",
-              "donations/static/web-common/*.css",
-              "donations/static/web-common/*.html",
-      ]
-      },
-      scripts=['taler-merchant-donations'],
-      zip_safe=False)
+setup(
+    name='talerdonations',
+    version='0.6.0pre1',
+    description='Example donations site for GNU Taler',
+    url='git://taler.net/donations',
+    author=['Marcello Stanisci', 'Florian Dold'],
+    author_email=['address@hidden', 'address@hidden'],
+    license='GPL',
+    packages=find_packages(),
+    install_requires=["Flask>=0.10", "requests", "uwsgi", "jsmin"],
+    tests_require=["mock", "nose"],
+    test_suite="nose.collector",
+    package_data={
+        '': [
+            "donations/templates/*.html",
+            "donations/static/*.svg",
+            "donations/static/*.css",
+            "donations/static/web-common/*.png",
+            "donations/static/web-common/*.css",
+            "donations/static/web-common/*.html",
+        ]
+    },
+    scripts=['./bin/taler-merchant-donations'],
+    zip_safe=False
+)
diff --git a/taler-merchant-donations.in b/taler-merchant-donations.in
deleted file mode 100644
index 691f7d4..0000000
--- a/taler-merchant-donations.in
+++ /dev/null
@@ -1,118 +0,0 @@
-#!/usr/bin/env python3
-
-##
-# This file is part of TALER
-# (C) 2017 INRIA
-#
-# TALER is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Affero General Public
-# License as published by the Free Software Foundation; either
-# version 3, or (at your option) any later version.
-#
-# TALER is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty
-# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public
-# License along with TALER; see the file COPYING.  If not,
-# see <http://www.gnu.org/licenses/>
-#
-#  @author Florian Dold
-#  @file Standalone script to run the donations site.
-
-import argparse
-import sys
-import os
-import site
-import logging
-from talerdonations.talerconfig import TalerConfig
-
-
-os.environ.setdefault("TALER_PREFIX", "@prefix@")
-site.addsitedir("%s/lib/python%d.%d/site-packages" % (
-    "@prefix@",
-    sys.version_info.major,
-    sys.version_info.minor))
-
-# No perfect match to our logging format, but good enough ...
-UWSGI_LOGFMT = "%(ltime) %(proto) %(method) %(uri) %(proto) => %(status)"
-
-
-##
-# This function interprets the 'serve-http' subcommand.
-# The effect it to launch the donations HTTP service.
-#
-# @param args command line options.
-def handle_serve_http(args):
-    port = args.port
-    if port is None:
-        port = TC["donations"]["http_port"].value_int(required=True)
-    spec = ":%d" % (port,)
-    os.execlp("uwsgi", "uwsgi",
-              "--master",
-              "--die-on-term",
-              "--log-format", UWSGI_LOGFMT,
-              "--http", spec,
-              "--wsgi-file", "@prefix@/share/taler/frontend-donations.wsgi")
-
-
-##
-# This function interprets the 'serve-uwsgi' subcommand.
-# The effect is to launch the donations UWSGI service.  This
-# type of service is usually used when the HTTP donations interface
-# is accessed via a reverse proxy (like Nginx, for example).
-#
-# @param command line options.
-def handle_serve_uwsgi(args):
-    del args # pacify PEP checkers
-    serve_uwsgi = 
TC["donations"]["uwsgi_serve"].value_string(required=True).lower()
-    params = ["uwsgi", "uwsgi",
-              "--master",
-              "--die-on-term",
-              "--log-format", UWSGI_LOGFMT,
-              "--wsgi-file", "@prefix@/share/taler/frontend-donations.wsgi"]
-    if serve_uwsgi == "tcp":
-        port = TC["donations"]["uwsgi_port"].value_int(required=True)
-        spec = ":%d" % (port,)
-        params.extend(["--socket", spec])
-    elif serve_uwsgi == "unix":
-        spec = TC["donations"]["uwsgi_unixpath"].value_filename(required=True)
-        mode = 
TC["donations"]["uwsgi_unixpath_mode"].value_filename(required=True)
-        params.extend(["--socket", spec])
-        params.extend(["--chmod-socket="+mode])
-        os.makedirs(os.path.dirname(spec), exist_ok=True)
-    logging.info("launching uwsgi with argv %s", params[1:])
-    os.execlp(*params)
-
-
-## @cond
-PARSER = argparse.ArgumentParser()
-PARSER.set_defaults(func=None)
-PARSER.add_argument('--config', '-c',
-                    help="configuration file to use",
-                    metavar="CONFIG", type=str,
-                    dest="config", default=None)
-SUB = PARSER.add_subparsers()
-
-P = SUB.add_parser('serve-http', help="Serve over HTTP")
-P.add_argument("--port", "-p", dest="port",
-               type=int, default=None, metavar="PORT")
-P.set_defaults(func=handle_serve_http)
-
-P = SUB.add_parser('serve-uwsgi', help="Serve over UWSGI")
-P.set_defaults(func=handle_serve_uwsgi)
-
-ARGS = PARSER.parse_args()
-## @endcond
-
-
-if getattr(ARGS, 'func', None) is None:
-    PARSER.print_help()
-    sys.exit(1)
-
-if ARGS.config is not None:
-    os.environ["TALER_CONFIG_FILE"] = ARGS.config
-
-TC = TalerConfig.from_file(os.environ.get("TALER_CONFIG_FILE"))
-ARGS.func(ARGS)
diff --git a/talerdonations/donations/donations.py 
b/talerdonations/donations/donations.py
index f0f97c5..220fbb7 100644
--- a/talerdonations/donations/donations.py
+++ b/talerdonations/donations/donations.py
@@ -53,6 +53,7 @@ app.config.from_object(__name__)
 def utility_processor():
     def env(name, default=None):
         return os.environ.get(name, default)
+
     return dict(env=env)
 
 
@@ -76,7 +77,9 @@ def err_abort(abort_status_code, **params):
 def backend_get(endpoint, params):
     headers = {"Authorization": "ApiKey " + APIKEY}
     try:
-        resp = requests.get(urljoin(BACKEND_URL, endpoint), params=params, 
headers=headers)
+        resp = requests.get(
+            urljoin(BACKEND_URL, endpoint), params=params, headers=headers
+        )
     except requests.ConnectionError:
         err_abort(500, message="Could not establish connection to backend")
     try:
@@ -84,8 +87,12 @@ def backend_get(endpoint, params):
     except ValueError:
         err_abort(500, message="Could not parse response from backend")
     if resp.status_code != 200:
-        err_abort(500, message="Backend returned error status",
-                  json=response_json, status_code=resp.status_code)
+        err_abort(
+            500,
+            message="Backend returned error status",
+            json=response_json,
+            status_code=resp.status_code
+        )
     return response_json
 
 
@@ -100,21 +107,29 @@ def backend_get(endpoint, params):
 def backend_post(endpoint, json):
     headers = {"Authorization": "ApiKey " + APIKEY}
     try:
-        resp = requests.post(urljoin(BACKEND_URL, endpoint), json=json, 
headers=headers)
+        resp = requests.post(
+            urljoin(BACKEND_URL, endpoint), json=json, headers=headers
+        )
     except requests.ConnectionError:
         err_abort(500, message="Could not establish connection to backend")
     try:
         response_json = resp.json()
     except ValueError:
-        err_abort(500, message="Could not parse response from backend",
-                  status_code=resp.status_code)
+        err_abort(
+            500,
+            message="Could not parse response from backend",
+            status_code=resp.status_code
+        )
     if resp.status_code != 200:
-        err_abort(500, message="Backend returned error status",
-                  json=response_json, status_code=resp.status_code)
+        err_abort(
+            500,
+            message="Backend returned error status",
+            json=response_json,
+            status_code=resp.status_code
+        )
     return response_json
 
 
-
 ##
 # Inspect GET arguments in the look for a parameter.
 #
@@ -126,6 +141,7 @@ def expect_parameter(name):
         return err_abort(400, message="parameter '{}' required".format(name))
     return val
 
+
 ##
 # "Fallback" exception handler to capture all the unmanaged errors.
 #
@@ -134,9 +150,12 @@ def expect_parameter(name):
 #         (and execution stack!).
 @app.errorhandler(Exception)
 def internal_error(e):
-    return flask.render_template("templates/error.html",
-                                 message="Internal error",
-                                 stack=traceback.format_exc())
+    return flask.render_template(
+        "templates/error.html",
+        message="Internal error",
+        stack=traceback.format_exc()
+    )
+
 
 ##
 # Serve the main index page.
@@ -144,7 +163,10 @@ def internal_error(e):
 # @return response object of the index page.
 @app.route("/")
 def index():
-    return flask.render_template("templates/index.html", 
merchant_currency=CURRENCY)
+    return flask.render_template(
+        "templates/index.html", merchant_currency=CURRENCY
+    )
+
 
 ##
 # Serve the "/javascript" page.
@@ -155,7 +177,6 @@ def javascript_licensing():
     return flask.render_template("templates/javascript.html")
 
 
-
 ##
 # Serve the "/checkout" page.  This page lets the
 # user pick the payment method they want to use,
@@ -172,7 +193,8 @@ def checkout():
         donation_amount=amount,
         donation_receiver=donation_receiver,
         donation_donor=donation_donor,
-        merchant_currency=CURRENCY)
+        merchant_currency=CURRENCY
+    )
 
 
 ##
@@ -182,8 +204,7 @@ def checkout():
 # @return response object about the mentioned impossibility.
 @app.route("/provider-not-supported")
 def provider_not_supported():
-    return flask.render_template( "templates/provider-not-supported.html")
-
+    return flask.render_template("templates/provider-not-supported.html")
 
 
 ##
@@ -201,18 +222,27 @@ def donate():
     payment_system = expect_parameter("payment_system")
     if payment_system != "taler":
         return flask.redirect(flask.url_for("provider_not_supported"))
-    fulfillment_url = flask.url_for("fulfillment", receiver=donation_receiver, 
_external=True)
+    fulfillment_url = flask.url_for(
+        "fulfillment", receiver=donation_receiver, _external=True
+    )
     order = dict(
         amount=donation_amount,
-        extra=dict(donor=donation_donor, receiver=donation_receiver, 
amount=donation_amount),
+        extra=dict(
+            donor=donation_donor,
+            receiver=donation_receiver,
+            amount=donation_amount
+        ),
         fulfillment_url=fulfillment_url,
         instance=donation_receiver,
         summary="Donation to {}".format(donation_receiver),
     )
     order_resp = backend_post("order", dict(order=order))
     order_id = order_resp["order_id"]
-    return flask.redirect(flask.url_for("fulfillment", 
receiver=donation_receiver, order_id=order_id))
-
+    return flask.redirect(
+        flask.url_for(
+            "fulfillment", receiver=donation_receiver, order_id=order_id
+        )
+    )
 
 
 ##
@@ -226,8 +256,7 @@ def donate():
 @app.route("/donation/<receiver>")
 def fulfillment(receiver):
     order_id = expect_parameter("order_id")
-    pay_params = dict(instance=receiver,
-                      order_id=order_id)
+    pay_params = dict(instance=receiver, order_id=order_id)
     pay_status = backend_get("check-payment", pay_params)
 
     if pay_status.get("payment_redirect_url"):
@@ -241,7 +270,8 @@ def fulfillment(receiver):
             donation_amount=extra["amount"],
             donation_donor=extra["donor"],
             order_id=order_id,
-            currency=CURRENCY)
+            currency=CURRENCY
+        )
 
     # no pay_redirect but article not paid, this should never happen!
     err_abort(500, message="Internal error, invariant failed", json=pay_status)
diff --git a/talerdonations/talerconfig.py b/talerdonations/talerconfig.py
index 4a44c97..1a33294 100644
--- a/talerdonations/talerconfig.py
+++ b/talerdonations/talerconfig.py
@@ -38,17 +38,20 @@ try:
 except ImportError:
     pass
 
+
 ##
 # Exception class for a any configuration error.
 class ConfigurationError(Exception):
     pass
 
+
 ##
 # Exception class for malformed strings having with parameter
 # expansion.
 class ExpansionSyntaxError(Exception):
     pass
 
+
 ##
 # Do shell-style parameter expansion.
 # Supported syntax:
@@ -80,7 +83,7 @@ def expand(var: str, getter: Callable[[str], str]) -> str:
                 end += 1
             if balance != 0:
                 raise ExpansionSyntaxError("unbalanced parentheses")
-            piece = var[start+2:end-1]
+            piece = var[start + 2:end - 1]
             if piece.find(":-") > 0:
                 varname, alt = piece.split(":-", 1)
                 replace = getter(varname)
@@ -93,9 +96,9 @@ def expand(var: str, getter: Callable[[str], str]) -> str:
                     replace = var[start:end]
         else:
             end = start + 2
-            while end < len(var) and var[start+1:end+1].isalnum():
+            while end < len(var) and var[start + 1:end + 1].isalnum():
                 end += 1
-            varname = var[start+1:end]
+            varname = var[start + 1:end]
             replace = getter(varname)
             if replace is None:
                 replace = var[start:end]
@@ -104,6 +107,7 @@ def expand(var: str, getter: Callable[[str], str]) -> str:
 
     return result + var[pos:]
 
+
 ##
 # A configuration entry.
 class Entry:
@@ -164,11 +168,16 @@ class Entry:
         if self.value is None:
             if warn:
                 if default is not None:
-                    LOGGER.warning("Configuration is missing option '%s' in 
section '%s',\
-                                   falling back to '%s'", self.option, 
self.section, default)
+                    LOGGER.warning(
+                        "Configuration is missing option '%s' in section '%s',\
+                                   falling back to '%s'", self.option,
+                        self.section, default
+                    )
                 else:
-                    LOGGER.warning("Configuration ** is missing option '%s' in 
section '%s'",
-                                   self.option.upper(), self.section.upper())
+                    LOGGER.warning(
+                        "Configuration ** is missing option '%s' in section 
'%s'",
+                        self.option.upper(), self.section.upper()
+                    )
             return default
         return self.value
 
@@ -190,6 +199,7 @@ class Entry:
         except ValueError:
             raise ConfigurationError("Expected number for option '%s' in 
section '%s'" \
                                      % (self.option.upper(), 
self.section.upper()))
+
     ##
     # Fetch value to substitute to expansion variables.
     #
@@ -231,6 +241,7 @@ class Entry:
             return "<unknown>"
         return "%s:%s" % (self.filename, self.lineno)
 
+
 ##
 # Represent a section by inheriting from 'defaultdict'.
 class OptionDict(collections.defaultdict):
@@ -280,6 +291,7 @@ class OptionDict(collections.defaultdict):
     def __setitem__(self, chunk: str, value: Entry) -> None:
         super().__setitem__(chunk.lower(), value)
 
+
 ##
 # Collection of all the (@a OptionDict) sections.
 class SectionDict(collections.defaultdict):
@@ -313,6 +325,7 @@ class SectionDict(collections.defaultdict):
     def __setitem__(self, chunk: str, value: OptionDict) -> None:
         super().__setitem__(chunk.lower(), value)
 
+
 ##
 # One loaded taler configuration, including base configuration
 # files and included files.
@@ -323,7 +336,7 @@ class TalerConfig:
     #
     # @param self the object itself.
     def __init__(self) -> None:
-        self.sections = SectionDict() # just plain dict
+        self.sections = SectionDict()  # just plain dict
 
     ##
     # Load a configuration file, instantiating a config object.
@@ -362,7 +375,8 @@ class TalerConfig:
     #         a error occurs).
     def value_string(self, section, option, **kwargs) -> str:
         return self.sections[section][option].value_string(
-            kwargs.get("default"), kwargs.get("required"), kwargs.get("warn"))
+            kwargs.get("default"), kwargs.get("required"), kwargs.get("warn")
+        )
 
     ##
     # Get a value from the config that should be a filename.
@@ -377,7 +391,8 @@ class TalerConfig:
     #         a error occurs).
     def value_filename(self, section, option, **kwargs) -> str:
         return self.sections[section][option].value_filename(
-            kwargs.get("default"), kwargs.get("required"), kwargs.get("warn"))
+            kwargs.get("default"), kwargs.get("required"), kwargs.get("warn")
+        )
 
     ##
     # Get a integer value from the config.
@@ -391,7 +406,8 @@ class TalerConfig:
     #         a error occurs).
     def value_int(self, section, option, **kwargs) -> int:
         return self.sections[section][option].value_int(
-            kwargs.get("default"), kwargs.get("required"), kwargs.get("warn"))
+            kwargs.get("default"), kwargs.get("required"), kwargs.get("warn")
+        )
 
     ##
     # Load default values from canonical locations.
@@ -465,36 +481,59 @@ class TalerConfig:
                     if line.startswith("@INLINE@"):
                         pair = line.split()
                         if 2 != len(pair):
-                            LOGGER.error("invalid inlined config filename 
given ('%s')" % line)
-                            continue 
+                            LOGGER.error(
+                                "invalid inlined config filename given ('%s')" 
%
+                                line
+                            )
+                            continue
                         if pair[1].startswith("/"):
                             self.load_file(pair[1])
                         else:
-                            
self.load_file(os.path.join(os.path.dirname(filename), pair[1]))
+                            self.load_file(
+                                os.path.join(
+                                    os.path.dirname(filename), pair[1]
+                                )
+                            )
                         continue
                     if line.startswith("["):
                         if not line.endswith("]"):
-                            LOGGER.error("invalid section header in line %s: 
%s",
-                                         lineno, repr(line))
+                            LOGGER.error(
+                                "invalid section header in line %s: %s", 
lineno,
+                                repr(line)
+                            )
                         section_name = line.strip("[]").strip().strip('"')
                         current_section = section_name
                         continue
                     if current_section is None:
-                        LOGGER.error("option outside of section in line %s: 
%s", lineno, repr(line))
+                        LOGGER.error(
+                            "option outside of section in line %s: %s", lineno,
+                            repr(line)
+                        )
                         continue
                     pair = line.split("=", 1)
                     if len(pair) != 2:
-                        LOGGER.error("invalid option in line %s: %s", lineno, 
repr(line))
+                        LOGGER.error(
+                            "invalid option in line %s: %s", lineno, repr(line)
+                        )
                     key = pair[0].strip()
                     value = pair[1].strip()
                     if value.startswith('"'):
                         value = value[1:]
                         if not value.endswith('"'):
-                            LOGGER.error("mismatched quotes in line %s: %s", 
lineno, repr(line))
+                            LOGGER.error(
+                                "mismatched quotes in line %s: %s", lineno,
+                                repr(line)
+                            )
                         else:
                             value = value[:-1]
-                    entry = Entry(self.sections, current_section, key,
-                                  value=value, filename=filename, 
lineno=lineno)
+                    entry = Entry(
+                        self.sections,
+                        current_section,
+                        key,
+                        value=value,
+                        filename=filename,
+                        lineno=lineno
+                    )
                     sections[current_section][key] = entry
         except FileNotFoundError:
             # not logging here, as this interests the final user mostly.
@@ -503,23 +542,22 @@ class TalerConfig:
 
     ##
     # Dump the textual representation of a config object.
-    # 
+    #
     # Format:
-    # 
+    #
     # [section]
     # option = value # FIXME (what is location?)
     #
     # @param self the object itself, that will be dumped.
     def dump(self) -> None:
         for kv_section in self.sections.items():
-            print("[%s]" % (kv_section[1].section_name,))
+            print("[%s]" % (kv_section[1].section_name, ))
             for kv_option in kv_section[1].items():
                 print("%s = %s # %s" % \
                       (kv_option[1].option,
                        kv_option[1].value,
                        kv_option[1].location()))
 
-
     ##
     # Return a whole section from this object.
     #
@@ -538,14 +576,22 @@ if __name__ == "__main__":
     import argparse
 
     PARSER = argparse.ArgumentParser()
-    PARSER.add_argument("--section", "-s", dest="section",
-                        default=None, metavar="SECTION")
-    PARSER.add_argument("--option", "-o", dest="option",
-                        default=None, metavar="OPTION")
-    PARSER.add_argument("--config", "-c", dest="config",
-                        default=None, metavar="FILE")
-    PARSER.add_argument("--filename", "-f", dest="expand_filename",
-                        default=False, action='store_true')
+    PARSER.add_argument(
+        "--section", "-s", dest="section", default=None, metavar="SECTION"
+    )
+    PARSER.add_argument(
+        "--option", "-o", dest="option", default=None, metavar="OPTION"
+    )
+    PARSER.add_argument(
+        "--config", "-c", dest="config", default=None, metavar="FILE"
+    )
+    PARSER.add_argument(
+        "--filename",
+        "-f",
+        dest="expand_filename",
+        default=False,
+        action='store_true'
+    )
     ARGS = PARSER.parse_args()
 
     TC = TalerConfig.from_file(ARGS.config)
diff --git a/talerdonations/tests.py b/talerdonations/tests.py
index c9918c2..2e95b60 100644
--- a/talerdonations/tests.py
+++ b/talerdonations/tests.py
@@ -27,6 +27,7 @@ from talerdonations.talerconfig import TalerConfig
 TC = TalerConfig.from_env()
 CURRENCY = TC["taler"]["currency"].value_string(required=True)
 
+
 ##
 # Main class that gathers all the tests.
 class DonationsTestCase(unittest.TestCase):

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]