# Buggy code
def register():
    if not config.config_public_reg:
        abort(404)
    if current_user is not None and current_user.is_authenticated:
        return redirect(url_for("index"))

    if request.method == "POST":
        to_save = request.form.to_dict()
        if not to_save["nickname"] or not to_save["email"]:
            flash(_("Please fill out all fields!"), category="error")
            return render_title_template(
                "register.html", title=_("register"), page="register"
            )

        existing_user = (
            ub.session.query(ub.User)
            .filter(func.lower(ub.User.nickname) == to_save["nickname"].lower())
            .first()
        )
        existing_email = (
            ub.session.query(ub.User)
            .filter(ub.User.email == to_save["email"].lower())
            .first()
        )
        if not existing_user and not existing_email:
            content = ub.User()
            # content.password = generate_password_hash(to_save["password"])
            if check_valid_domain(to_save["email"]):
                content.nickname = to_save["nickname"]
                content.email = to_save["email"]
                password = helper.generate_random_password()
                content.password = generate_password_hash(password)
                content.role = config.config_default_role
                content.sidebar_view = config.config_default_show
                try:
                    ub.session.add(content)
                    ub.session.commit()
                    helper.send_registration_mail(
                        to_save["email"], to_save["nickname"], password
                    )
                except Exception:
                    ub.session.rollback()
                    flash(
                        _("An unknown error occurred. Please try again later."),
                        category="error",
                    )
                    return render_title_template(
                        "register.html", title=_("register"), page="register"
                    )
            else:
                flash(_("Your e-mail is not allowed to register"), category="error")
                app.logger.info(
                    'Registering failed for user "'
                    + to_save["nickname"]
                    + '" e-mail adress: '
                    + to_save["email"]
                )
                return render_title_template(
                    "register.html", title=_("register"), page="register"
                )
            flash(
                _("Confirmation e-mail was send to your e-mail account."),
                category="success",
            )
            return redirect(url_for("login"))
        else:
            flash(
                _("This username or e-mail address is already in use."),
                category="error",
            )
            return render_title_template(
                "register.html", title=_("register"), page="register"
            )

    return render_title_template("register.html", title=_("register"), page="register")


# Traceback (OperationalError)
ERROR:cps.web:Exception on /book/125 [GET]
Traceback (most recent call last):
File "/Users/jgillman/Code/calibre-web/vendor/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/Users/jgillman/Code/calibre-web/vendor/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/Users/jgillman/Code/calibre-web/vendor/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/Users/jgillman/Code/calibre-web/vendor/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/Users/jgillman/Code/calibre-web/vendor/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/Users/jgillman/Code/calibre-web/vendor/flask_login.py", line 717, in decorated_view
return func(*args, **kwargs)
File "/Users/jgillman/Code/calibre-web/cps/web.py", line 381, in show_book
return render_template('detail.html', entry=entries,  cc=cc, title=entries.title, books_shelfs=book_in_shelfs)
File "/Users/jgillman/Code/calibre-web/vendor/flask/templating.py", line 128, in render_template
context, ctx.app)
File "/Users/jgillman/Code/calibre-web/vendor/flask/templating.py", line 110, in _render
rv = template.render(context)
File "/Users/jgillman/Code/calibre-web/vendor/jinja2/environment.py", line 969, in render
return self.environment.handle_exception(exc_info, True)
File "/Users/jgillman/Code/calibre-web/vendor/jinja2/environment.py", line 742, in handle_exception
reraise(exc_type, exc_value, tb)
File "/Users/jgillman/Code/calibre-web/cps/templates/detail.html", line 1, in top-level template code
{% extends "layout.html" %}
File "/Users/jgillman/Code/calibre-web/cps/templates/layout.html", line 136, in top-level template code
{% block body %}{% endblock %}
File "/Users/jgillman/Code/calibre-web/cps/templates/detail.html", line 66, in block "body"
{% if entry['custom_column_' ~ c.id]|length > 0 %}
File "/Users/jgillman/Code/calibre-web/vendor/jinja2/environment.py", line 387, in getitem
return getattr(obj, attr)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/orm/attributes.py", line 316, in __get__
return self.impl.get(instance_state(instance), dict_)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/orm/attributes.py", line 613, in get
value = self.callable_(state, passive)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/orm/strategies.py", line 524, in _load_for_state
return self._emit_lazyload(session, state, ident_key, passive)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/orm/strategies.py", line 585, in _emit_lazyload
result = q.all()
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/orm/query.py", line 2241, in all
return list(self)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/orm/query.py", line 2353, in __iter__
return self._execute_and_instances(context)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/orm/query.py", line 2368, in _execute_and_instances
result = conn.execute(querycontext.statement, self._params)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/engine/base.py", line 662, in execute
params)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/engine/base.py", line 761, in _execute_clauseelement
compiled_sql, distilled_params
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/engine/base.py", line 874, in _execute_context
context)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/engine/base.py", line 1024, in _handle_dbapi_exception
exc_info
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/util/compat.py", line 196, in raise_from_cause
reraise(type(exception), exception, tb=exc_tb)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/engine/base.py", line 867, in _execute_context
context)
File "/Users/jgillman/Code/calibre-web/vendor/sqlalchemy/engine/default.py", line 324, in do_execute
cursor.execute(statement, parameters)
OperationalError: (OperationalError) no such table: books_custom_column_1_link u'SELECT custom_column_1.id AS custom_column_1_id, custom_column_1.value AS custom_column_1_value \
nFROM custom_column_1, books_custom_column_1_link \nWHERE ? = books_custom_column_1_link.book AND custom_column_1.id = books_custom_column_1_link.value' (125,)
ERROR:tornado.access:500 GET /book/125 (::1) 89.60ms

# Fixed code
def register():
    if not config.config_public_reg:
        abort(404)
    if current_user is not None and current_user.is_authenticated:
        return redirect(url_for("index"))

    if request.method == "POST":
        to_save = request.form.to_dict()
        if not to_save["nickname"] or not to_save["email"]:
            flash(_("Please fill out all fields!"), category="error")
            return render_title_template(
                "register.html", title=_("register"), page="register"
            )

        existing_user = (
            ub.session.query(ub.User)
            .filter(func.lower(ub.User.nickname) == to_save["nickname"].lower())
            .first()
        )
        existing_email = (
            ub.session.query(ub.User)
            .filter(ub.User.email == to_save["email"].lower())
            .first()
        )
        if not existing_user and not existing_email:
            content = ub.User()
            # content.password = generate_password_hash(to_save["password"])
            if check_valid_domain(to_save["email"]):
                content.nickname = to_save["nickname"]
                content.email = to_save["email"]
                password = helper.generate_random_password()
                content.password = generate_password_hash(password)
                content.role = config.config_default_role
                content.sidebar_view = config.config_default_show
                content.mature_content = bool(
                    config.config_default_show & ub.MATURE_CONTENT
                )
                try:
                    ub.session.add(content)
                    ub.session.commit()
                    helper.send_registration_mail(
                        to_save["email"], to_save["nickname"], password
                    )
                except Exception:
                    ub.session.rollback()
                    flash(
                        _("An unknown error occurred. Please try again later."),
                        category="error",
                    )
                    return render_title_template(
                        "register.html", title=_("register"), page="register"
                    )
            else:
                flash(_("Your e-mail is not allowed to register"), category="error")
                app.logger.info(
                    'Registering failed for user "'
                    + to_save["nickname"]
                    + '" e-mail adress: '
                    + to_save["email"]
                )
                return render_title_template(
                    "register.html", title=_("register"), page="register"
                )
            flash(
                _("Confirmation e-mail was send to your e-mail account."),
                category="success",
            )
            return redirect(url_for("login"))
        else:
            flash(
                _("This username or e-mail address is already in use."),
                category="error",
            )
            return render_title_template(
                "register.html", title=_("register"), page="register"
            )

    return render_title_template("register.html", title=_("register"), page="register")