We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Not all Backend-Signals are displayed in documentation
I'm not sure why, but when looking at https://docs.pretix.eu/en/latest/development/api/general.html#backend, it seems to me like quite a few signals are not being displayed here...

Comparing to https://github.com/pretix/pretix/blob/master/doc/development/api/general.rst#backend, for example all the `html` and `navbar`-signals are missing...

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/pretix/presale/signals.py`
Content:
```
1 from pretix.base.signals import EventPluginSignal
2 
3 html_head = EventPluginSignal(
4     providing_args=["request"]
5 )
6 """
7 This signal allows you to put code inside the HTML ``<head>`` tag
8 of every page in the frontend. You will get the request as the keyword argument
9 ``request`` and are expected to return plain HTML.
10 
11 As with all plugin signals, the ``sender`` keyword argument will contain the event.
12 """
13 
14 html_footer = EventPluginSignal(
15     providing_args=["request"]
16 )
17 """
18 This signal allows you to put code before the end of the HTML ``<body>`` tag
19 of every page in the frontend. You will get the request as the keyword argument
20 ``request`` and are expected to return plain HTML.
21 
22 As with all plugin signals, the ``sender`` keyword argument will contain the event.
23 """
24 
25 footer_link = EventPluginSignal(
26     providing_args=["request"]
27 )
28 """
29 The signal ``pretix.presale.signals.footer_links`` allows you to add links to the footer of an event page. You
30 are expected to return a dictionary containing the keys ``label`` and ``url``.
31 
32 As with all plugin signals, the ``sender`` keyword argument will contain the event.
33 """
34 
35 checkout_confirm_messages = EventPluginSignal()
36 """
37 This signal is sent out to retrieve short messages that need to be acknowledged by the user before the
38 order can be completed. This is typically used for something like "accept the terms and conditions".
39 Receivers are expected to return a dictionary where the keys are globally unique identifiers for the
40 message and the values can be arbitrary HTML.
41 
42 As with all plugin signals, the ``sender`` keyword argument will contain the event.
43 """
44 
45 checkout_flow_steps = EventPluginSignal()
46 """
47 This signal is sent out to retrieve pages for the checkout flow
48 
49 As with all plugin signals, the ``sender`` keyword argument will contain the event.
50 """
51 
52 voucher_redeem_info = EventPluginSignal(
53     providing_args=["voucher"]
54 )
55 """
56 This signal is sent out to display additional information on the "redeem a voucher" page
57 
58 As with all plugin signals, the ``sender`` keyword argument will contain the event.
59 """
60 
61 order_meta_from_request = EventPluginSignal(
62     providing_args=["request"]
63 )
64 """
65 This signal is sent before an order is created through the pretixpresale frontend. It allows you
66 to return a dictionary that will be merged in the meta_info attribute of the order.
67 You will receive the request triggering the order creation as the ``request`` keyword argument.
68 
69 As with all event-plugin signals, the ``sender`` keyword argument will contain the event.
70 """
71 checkout_confirm_page_content = EventPluginSignal(
72     providing_args=['request']
73 )
74 """
75 This signals allows you to add HTML content to the confirmation page that is presented at the
76 end of the checkout process, just before the order is being created.
77 
78 As with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``
79 argument will contain the request object.
80 """
81 
82 fee_calculation_for_cart = EventPluginSignal(
83     providing_args=['request', 'invoice_address', 'total']
84 )
85 """
86 This signals allows you to add fees to a cart. You are expected to return a list of ``OrderFee``
87 objects that are not yet saved to the database (because there is no order yet).
88 
89 As with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``
90 argument will contain the request object and ``invoice_address`` the invoice address (useful for
91 tax calculation). The ``total`` keyword argument will contain the total cart sum without any fees.
92 You should not rely on this ``total`` value for fee calculations as other fees might interfere.
93 """
94 
95 contact_form_fields = EventPluginSignal(
96     providing_args=[]
97 )
98 """
99 This signals allows you to add form fields to the contact form that is presented during checkout
100 and by default only asks for the email address. You are supposed to return a dictionary of
101 form fields with globally unique keys. The validated form results will be saved into the
102 ``contact_form_data`` entry of the order's meta_info dictionary.
103 
104 As with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``
105 argument will contain the request object.
106 """
107 
108 question_form_fields = EventPluginSignal(
109     providing_args=["position"]
110 )
111 """
112 This signals allows you to add form fields to the questions form that is presented during checkout
113 and by default asks for the questions configured in the backend. You are supposed to return a dictionary
114 of form fields with globally unique keys. The validated form results will be saved into the
115 ``question_form_data`` entry of the position's meta_info dictionary.
116 
117 The ``position`` keyword argument will contain either a ``CartPosition`` object or an ``OrderPosition``
118 object, depending on whether the form is called as part of the order checkout or for changing an order
119 later.
120 
121 As with all plugin signals, the ``sender`` keyword argument will contain the event.
122 """
123 
124 order_info = EventPluginSignal(
125     providing_args=["order"]
126 )
127 """
128 This signal is sent out to display additional information on the order detail page
129 
130 As with all plugin signals, the ``sender`` keyword argument will contain the event.
131 """
132 
133 process_request = EventPluginSignal(
134     providing_args=["request"]
135 )
136 """
137 This signal is sent out whenever a request is made to a event presale page. Most of the
138 time, this will be called from the middleware layer (except on plugin-provided pages
139 this will be called by the @event_view decorator). Similarly to Django's process_request
140 middleware method, if you return a Response, that response will be used and the request
141 won't be processed any further down the stack.
142 
143 WARNING: Be very careful about using this signal as listening to it makes it really
144 easy to cause serious performance problems.
145 
146 As with all plugin signals, the ``sender`` keyword argument will contain the event.
147 """
148 
149 process_response = EventPluginSignal(
150     providing_args=["request", "response"]
151 )
152 """
153 This signal is sent out whenever a response is sent from a event presale page. Most of
154 the time, this will be called from the middleware layer (except on plugin-provided pages
155 this will be called by the @event_view decorator). Similarly to Django's process_response
156 middleware method you must return a response object, that will be passed further up the
157 stack to other handlers of the signal. If you do not want to alter the response, just
158 return the ``response`` parameter.
159 
160 WARNING: Be very careful about using this signal as listening to it makes it really
161 easy to cause serious performance problems.
162 
163 As with all plugin signals, the ``sender`` keyword argument will contain the event.
164 """
165 
166 front_page_top = EventPluginSignal(
167     providing_args=[]
168 )
169 """
170 This signal is sent out to display additional information on the frontpage above the list
171 of products and but below a custom frontpage text.
172 
173 As with all plugin signals, the ``sender`` keyword argument will contain the event. The
174 receivers are expected to return HTML.
175 """
176 
177 front_page_bottom = EventPluginSignal(
178     providing_args=[]
179 )
180 """
181 This signal is sent out to display additional information on the frontpage below the list
182 of products.
183 
184 As with all plugin signals, the ``sender`` keyword argument will contain the event. The
185 receivers are expected to return HTML.
186 """
187 
188 checkout_all_optional = EventPluginSignal(
189     providing_args=['request']
190 )
191 """
192 If any receiver of this signal returns ``True``, all input fields during checkout (contact data,
193 invoice address, confirmations) will be optional, except for questions. Use with care!
194 
195 As with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``
196 argument will contain the request object.
197 """
198
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/src/pretix/presale/signals.py b/src/pretix/presale/signals.py
--- a/src/pretix/presale/signals.py
+++ b/src/pretix/presale/signals.py
@@ -26,7 +26,7 @@
     providing_args=["request"]
 )
 """
-The signal ``pretix.presale.signals.footer_links`` allows you to add links to the footer of an event page. You
+The signal ``pretix.presale.signals.footer_link`` allows you to add links to the footer of an event page. You
 are expected to return a dictionary containing the keys ``label`` and ``url``.
 
 As with all plugin signals, the ``sender`` keyword argument will contain the event.

{"golden_diff": "diff --git a/src/pretix/presale/signals.py b/src/pretix/presale/signals.py\n--- a/src/pretix/presale/signals.py\n+++ b/src/pretix/presale/signals.py\n@@ -26,7 +26,7 @@\n     providing_args=[\"request\"]\n )\n \"\"\"\n-The signal ``pretix.presale.signals.footer_links`` allows you to add links to the footer of an event page. You\n+The signal ``pretix.presale.signals.footer_link`` allows you to add links to the footer of an event page. You\n are expected to return a dictionary containing the keys ``label`` and ``url``.\n \n As with all plugin signals, the ``sender`` keyword argument will contain the event.\n", "issue": "Not all Backend-Signals are displayed in documentation\nI'm not sure why, but when looking at https://docs.pretix.eu/en/latest/development/api/general.html#backend, it seems to me like quite a few signals are not being displayed here...\r\n\r\nComparing to https://github.com/pretix/pretix/blob/master/doc/development/api/general.rst#backend, for example all the `html` and `navbar`-signals are missing...\n", "before_files": [{"content": "from pretix.base.signals import EventPluginSignal\n\nhtml_head = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThis signal allows you to put code inside the HTML ``<head>`` tag\nof every page in the frontend. You will get the request as the keyword argument\n``request`` and are expected to return plain HTML.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nhtml_footer = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThis signal allows you to put code before the end of the HTML ``<body>`` tag\nof every page in the frontend. You will get the request as the keyword argument\n``request`` and are expected to return plain HTML.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nfooter_link = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThe signal ``pretix.presale.signals.footer_links`` allows you to add links to the footer of an event page. You\nare expected to return a dictionary containing the keys ``label`` and ``url``.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\ncheckout_confirm_messages = EventPluginSignal()\n\"\"\"\nThis signal is sent out to retrieve short messages that need to be acknowledged by the user before the\norder can be completed. This is typically used for something like \"accept the terms and conditions\".\nReceivers are expected to return a dictionary where the keys are globally unique identifiers for the\nmessage and the values can be arbitrary HTML.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\ncheckout_flow_steps = EventPluginSignal()\n\"\"\"\nThis signal is sent out to retrieve pages for the checkout flow\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nvoucher_redeem_info = EventPluginSignal(\n    providing_args=[\"voucher\"]\n)\n\"\"\"\nThis signal is sent out to display additional information on the \"redeem a voucher\" page\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\norder_meta_from_request = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThis signal is sent before an order is created through the pretixpresale frontend. It allows you\nto return a dictionary that will be merged in the meta_info attribute of the order.\nYou will receive the request triggering the order creation as the ``request`` keyword argument.\n\nAs with all event-plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\ncheckout_confirm_page_content = EventPluginSignal(\n    providing_args=['request']\n)\n\"\"\"\nThis signals allows you to add HTML content to the confirmation page that is presented at the\nend of the checkout process, just before the order is being created.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``\nargument will contain the request object.\n\"\"\"\n\nfee_calculation_for_cart = EventPluginSignal(\n    providing_args=['request', 'invoice_address', 'total']\n)\n\"\"\"\nThis signals allows you to add fees to a cart. You are expected to return a list of ``OrderFee``\nobjects that are not yet saved to the database (because there is no order yet).\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``\nargument will contain the request object and ``invoice_address`` the invoice address (useful for\ntax calculation). The ``total`` keyword argument will contain the total cart sum without any fees.\nYou should not rely on this ``total`` value for fee calculations as other fees might interfere.\n\"\"\"\n\ncontact_form_fields = EventPluginSignal(\n    providing_args=[]\n)\n\"\"\"\nThis signals allows you to add form fields to the contact form that is presented during checkout\nand by default only asks for the email address. You are supposed to return a dictionary of\nform fields with globally unique keys. The validated form results will be saved into the\n``contact_form_data`` entry of the order's meta_info dictionary.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``\nargument will contain the request object.\n\"\"\"\n\nquestion_form_fields = EventPluginSignal(\n    providing_args=[\"position\"]\n)\n\"\"\"\nThis signals allows you to add form fields to the questions form that is presented during checkout\nand by default asks for the questions configured in the backend. You are supposed to return a dictionary\nof form fields with globally unique keys. The validated form results will be saved into the\n``question_form_data`` entry of the position's meta_info dictionary.\n\nThe ``position`` keyword argument will contain either a ``CartPosition`` object or an ``OrderPosition``\nobject, depending on whether the form is called as part of the order checkout or for changing an order\nlater.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\norder_info = EventPluginSignal(\n    providing_args=[\"order\"]\n)\n\"\"\"\nThis signal is sent out to display additional information on the order detail page\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nprocess_request = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThis signal is sent out whenever a request is made to a event presale page. Most of the\ntime, this will be called from the middleware layer (except on plugin-provided pages\nthis will be called by the @event_view decorator). Similarly to Django's process_request\nmiddleware method, if you return a Response, that response will be used and the request\nwon't be processed any further down the stack.\n\nWARNING: Be very careful about using this signal as listening to it makes it really\neasy to cause serious performance problems.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nprocess_response = EventPluginSignal(\n    providing_args=[\"request\", \"response\"]\n)\n\"\"\"\nThis signal is sent out whenever a response is sent from a event presale page. Most of\nthe time, this will be called from the middleware layer (except on plugin-provided pages\nthis will be called by the @event_view decorator). Similarly to Django's process_response\nmiddleware method you must return a response object, that will be passed further up the\nstack to other handlers of the signal. If you do not want to alter the response, just\nreturn the ``response`` parameter.\n\nWARNING: Be very careful about using this signal as listening to it makes it really\neasy to cause serious performance problems.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nfront_page_top = EventPluginSignal(\n    providing_args=[]\n)\n\"\"\"\nThis signal is sent out to display additional information on the frontpage above the list\nof products and but below a custom frontpage text.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. The\nreceivers are expected to return HTML.\n\"\"\"\n\nfront_page_bottom = EventPluginSignal(\n    providing_args=[]\n)\n\"\"\"\nThis signal is sent out to display additional information on the frontpage below the list\nof products.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. The\nreceivers are expected to return HTML.\n\"\"\"\n\ncheckout_all_optional = EventPluginSignal(\n    providing_args=['request']\n)\n\"\"\"\nIf any receiver of this signal returns ``True``, all input fields during checkout (contact data,\ninvoice address, confirmations) will be optional, except for questions. Use with care!\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``\nargument will contain the request object.\n\"\"\"\n", "path": "src/pretix/presale/signals.py"}], "after_files": [{"content": "from pretix.base.signals import EventPluginSignal\n\nhtml_head = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThis signal allows you to put code inside the HTML ``<head>`` tag\nof every page in the frontend. You will get the request as the keyword argument\n``request`` and are expected to return plain HTML.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nhtml_footer = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThis signal allows you to put code before the end of the HTML ``<body>`` tag\nof every page in the frontend. You will get the request as the keyword argument\n``request`` and are expected to return plain HTML.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nfooter_link = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThe signal ``pretix.presale.signals.footer_link`` allows you to add links to the footer of an event page. You\nare expected to return a dictionary containing the keys ``label`` and ``url``.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\ncheckout_confirm_messages = EventPluginSignal()\n\"\"\"\nThis signal is sent out to retrieve short messages that need to be acknowledged by the user before the\norder can be completed. This is typically used for something like \"accept the terms and conditions\".\nReceivers are expected to return a dictionary where the keys are globally unique identifiers for the\nmessage and the values can be arbitrary HTML.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\ncheckout_flow_steps = EventPluginSignal()\n\"\"\"\nThis signal is sent out to retrieve pages for the checkout flow\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nvoucher_redeem_info = EventPluginSignal(\n    providing_args=[\"voucher\"]\n)\n\"\"\"\nThis signal is sent out to display additional information on the \"redeem a voucher\" page\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\norder_meta_from_request = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThis signal is sent before an order is created through the pretixpresale frontend. It allows you\nto return a dictionary that will be merged in the meta_info attribute of the order.\nYou will receive the request triggering the order creation as the ``request`` keyword argument.\n\nAs with all event-plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\ncheckout_confirm_page_content = EventPluginSignal(\n    providing_args=['request']\n)\n\"\"\"\nThis signals allows you to add HTML content to the confirmation page that is presented at the\nend of the checkout process, just before the order is being created.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``\nargument will contain the request object.\n\"\"\"\n\nfee_calculation_for_cart = EventPluginSignal(\n    providing_args=['request', 'invoice_address', 'total']\n)\n\"\"\"\nThis signals allows you to add fees to a cart. You are expected to return a list of ``OrderFee``\nobjects that are not yet saved to the database (because there is no order yet).\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``\nargument will contain the request object and ``invoice_address`` the invoice address (useful for\ntax calculation). The ``total`` keyword argument will contain the total cart sum without any fees.\nYou should not rely on this ``total`` value for fee calculations as other fees might interfere.\n\"\"\"\n\ncontact_form_fields = EventPluginSignal(\n    providing_args=[]\n)\n\"\"\"\nThis signals allows you to add form fields to the contact form that is presented during checkout\nand by default only asks for the email address. You are supposed to return a dictionary of\nform fields with globally unique keys. The validated form results will be saved into the\n``contact_form_data`` entry of the order's meta_info dictionary.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``\nargument will contain the request object.\n\"\"\"\n\nquestion_form_fields = EventPluginSignal(\n    providing_args=[\"position\"]\n)\n\"\"\"\nThis signals allows you to add form fields to the questions form that is presented during checkout\nand by default asks for the questions configured in the backend. You are supposed to return a dictionary\nof form fields with globally unique keys. The validated form results will be saved into the\n``question_form_data`` entry of the position's meta_info dictionary.\n\nThe ``position`` keyword argument will contain either a ``CartPosition`` object or an ``OrderPosition``\nobject, depending on whether the form is called as part of the order checkout or for changing an order\nlater.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\norder_info = EventPluginSignal(\n    providing_args=[\"order\"]\n)\n\"\"\"\nThis signal is sent out to display additional information on the order detail page\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nprocess_request = EventPluginSignal(\n    providing_args=[\"request\"]\n)\n\"\"\"\nThis signal is sent out whenever a request is made to a event presale page. Most of the\ntime, this will be called from the middleware layer (except on plugin-provided pages\nthis will be called by the @event_view decorator). Similarly to Django's process_request\nmiddleware method, if you return a Response, that response will be used and the request\nwon't be processed any further down the stack.\n\nWARNING: Be very careful about using this signal as listening to it makes it really\neasy to cause serious performance problems.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nprocess_response = EventPluginSignal(\n    providing_args=[\"request\", \"response\"]\n)\n\"\"\"\nThis signal is sent out whenever a response is sent from a event presale page. Most of\nthe time, this will be called from the middleware layer (except on plugin-provided pages\nthis will be called by the @event_view decorator). Similarly to Django's process_response\nmiddleware method you must return a response object, that will be passed further up the\nstack to other handlers of the signal. If you do not want to alter the response, just\nreturn the ``response`` parameter.\n\nWARNING: Be very careful about using this signal as listening to it makes it really\neasy to cause serious performance problems.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event.\n\"\"\"\n\nfront_page_top = EventPluginSignal(\n    providing_args=[]\n)\n\"\"\"\nThis signal is sent out to display additional information on the frontpage above the list\nof products and but below a custom frontpage text.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. The\nreceivers are expected to return HTML.\n\"\"\"\n\nfront_page_bottom = EventPluginSignal(\n    providing_args=[]\n)\n\"\"\"\nThis signal is sent out to display additional information on the frontpage below the list\nof products.\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. The\nreceivers are expected to return HTML.\n\"\"\"\n\ncheckout_all_optional = EventPluginSignal(\n    providing_args=['request']\n)\n\"\"\"\nIf any receiver of this signal returns ``True``, all input fields during checkout (contact data,\ninvoice address, confirmations) will be optional, except for questions. Use with care!\n\nAs with all plugin signals, the ``sender`` keyword argument will contain the event. A ``request``\nargument will contain the request object.\n\"\"\"\n", "path": "src/pretix/presale/signals.py"}]}