matrix-synapse 1.142.0rc3__cp314-abi3-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of matrix-synapse might be problematic. Click here for more details.

Files changed (1057) hide show
  1. matrix_synapse-1.142.0rc3.dist-info/AUTHORS.rst +51 -0
  2. matrix_synapse-1.142.0rc3.dist-info/LICENSE-AGPL-3.0 +661 -0
  3. matrix_synapse-1.142.0rc3.dist-info/LICENSE-COMMERCIAL +6 -0
  4. matrix_synapse-1.142.0rc3.dist-info/METADATA +375 -0
  5. matrix_synapse-1.142.0rc3.dist-info/RECORD +1057 -0
  6. matrix_synapse-1.142.0rc3.dist-info/WHEEL +4 -0
  7. matrix_synapse-1.142.0rc3.dist-info/entry_points.txt +14 -0
  8. matrix_synapse.libs/libgcc_s-2d945d6c.so.1 +0 -0
  9. synapse/__init__.py +97 -0
  10. synapse/_scripts/__init__.py +0 -0
  11. synapse/_scripts/export_signing_key.py +109 -0
  12. synapse/_scripts/generate_config.py +83 -0
  13. synapse/_scripts/generate_log_config.py +56 -0
  14. synapse/_scripts/generate_signing_key.py +55 -0
  15. synapse/_scripts/generate_workers_map.py +318 -0
  16. synapse/_scripts/hash_password.py +95 -0
  17. synapse/_scripts/move_remote_media_to_new_store.py +128 -0
  18. synapse/_scripts/register_new_matrix_user.py +374 -0
  19. synapse/_scripts/review_recent_signups.py +212 -0
  20. synapse/_scripts/synapse_port_db.py +1603 -0
  21. synapse/_scripts/synctl.py +365 -0
  22. synapse/_scripts/update_synapse_database.py +130 -0
  23. synapse/api/__init__.py +20 -0
  24. synapse/api/auth/__init__.py +207 -0
  25. synapse/api/auth/base.py +406 -0
  26. synapse/api/auth/internal.py +299 -0
  27. synapse/api/auth/mas.py +457 -0
  28. synapse/api/auth/msc3861_delegated.py +617 -0
  29. synapse/api/auth_blocking.py +144 -0
  30. synapse/api/constants.py +362 -0
  31. synapse/api/errors.py +907 -0
  32. synapse/api/filtering.py +539 -0
  33. synapse/api/presence.py +104 -0
  34. synapse/api/ratelimiting.py +482 -0
  35. synapse/api/room_versions.py +535 -0
  36. synapse/api/urls.py +119 -0
  37. synapse/app/__init__.py +60 -0
  38. synapse/app/_base.py +866 -0
  39. synapse/app/admin_cmd.py +388 -0
  40. synapse/app/appservice.py +30 -0
  41. synapse/app/client_reader.py +30 -0
  42. synapse/app/complement_fork_starter.py +206 -0
  43. synapse/app/event_creator.py +29 -0
  44. synapse/app/federation_reader.py +30 -0
  45. synapse/app/federation_sender.py +30 -0
  46. synapse/app/frontend_proxy.py +30 -0
  47. synapse/app/generic_worker.py +475 -0
  48. synapse/app/homeserver.py +504 -0
  49. synapse/app/media_repository.py +30 -0
  50. synapse/app/phone_stats_home.py +296 -0
  51. synapse/app/pusher.py +30 -0
  52. synapse/app/synchrotron.py +30 -0
  53. synapse/app/user_dir.py +31 -0
  54. synapse/appservice/__init__.py +461 -0
  55. synapse/appservice/api.py +569 -0
  56. synapse/appservice/scheduler.py +567 -0
  57. synapse/config/__init__.py +27 -0
  58. synapse/config/__main__.py +62 -0
  59. synapse/config/_base.py +1108 -0
  60. synapse/config/_base.pyi +217 -0
  61. synapse/config/_util.py +99 -0
  62. synapse/config/account_validity.py +116 -0
  63. synapse/config/api.py +141 -0
  64. synapse/config/appservice.py +210 -0
  65. synapse/config/auth.py +80 -0
  66. synapse/config/auto_accept_invites.py +43 -0
  67. synapse/config/background_updates.py +44 -0
  68. synapse/config/cache.py +231 -0
  69. synapse/config/captcha.py +90 -0
  70. synapse/config/cas.py +116 -0
  71. synapse/config/consent.py +73 -0
  72. synapse/config/database.py +184 -0
  73. synapse/config/emailconfig.py +367 -0
  74. synapse/config/experimental.py +595 -0
  75. synapse/config/federation.py +114 -0
  76. synapse/config/homeserver.py +141 -0
  77. synapse/config/jwt.py +55 -0
  78. synapse/config/key.py +447 -0
  79. synapse/config/logger.py +390 -0
  80. synapse/config/mas.py +191 -0
  81. synapse/config/matrixrtc.py +66 -0
  82. synapse/config/metrics.py +84 -0
  83. synapse/config/modules.py +40 -0
  84. synapse/config/oembed.py +185 -0
  85. synapse/config/oidc.py +509 -0
  86. synapse/config/password_auth_providers.py +82 -0
  87. synapse/config/push.py +64 -0
  88. synapse/config/ratelimiting.py +254 -0
  89. synapse/config/redis.py +74 -0
  90. synapse/config/registration.py +296 -0
  91. synapse/config/repository.py +311 -0
  92. synapse/config/retention.py +162 -0
  93. synapse/config/room.py +88 -0
  94. synapse/config/room_directory.py +165 -0
  95. synapse/config/saml2.py +251 -0
  96. synapse/config/server.py +1170 -0
  97. synapse/config/server_notices.py +84 -0
  98. synapse/config/spam_checker.py +66 -0
  99. synapse/config/sso.py +121 -0
  100. synapse/config/stats.py +54 -0
  101. synapse/config/third_party_event_rules.py +40 -0
  102. synapse/config/tls.py +192 -0
  103. synapse/config/tracer.py +71 -0
  104. synapse/config/user_directory.py +47 -0
  105. synapse/config/user_types.py +44 -0
  106. synapse/config/voip.py +59 -0
  107. synapse/config/workers.py +642 -0
  108. synapse/crypto/__init__.py +20 -0
  109. synapse/crypto/context_factory.py +278 -0
  110. synapse/crypto/event_signing.py +194 -0
  111. synapse/crypto/keyring.py +931 -0
  112. synapse/event_auth.py +1266 -0
  113. synapse/events/__init__.py +668 -0
  114. synapse/events/auto_accept_invites.py +216 -0
  115. synapse/events/builder.py +387 -0
  116. synapse/events/presence_router.py +245 -0
  117. synapse/events/snapshot.py +559 -0
  118. synapse/events/utils.py +928 -0
  119. synapse/events/validator.py +305 -0
  120. synapse/federation/__init__.py +22 -0
  121. synapse/federation/federation_base.py +383 -0
  122. synapse/federation/federation_client.py +2134 -0
  123. synapse/federation/federation_server.py +1544 -0
  124. synapse/federation/persistence.py +71 -0
  125. synapse/federation/send_queue.py +532 -0
  126. synapse/federation/sender/__init__.py +1165 -0
  127. synapse/federation/sender/per_destination_queue.py +884 -0
  128. synapse/federation/sender/transaction_manager.py +210 -0
  129. synapse/federation/transport/__init__.py +28 -0
  130. synapse/federation/transport/client.py +1201 -0
  131. synapse/federation/transport/server/__init__.py +334 -0
  132. synapse/federation/transport/server/_base.py +429 -0
  133. synapse/federation/transport/server/federation.py +912 -0
  134. synapse/federation/units.py +133 -0
  135. synapse/handlers/__init__.py +20 -0
  136. synapse/handlers/account.py +162 -0
  137. synapse/handlers/account_data.py +362 -0
  138. synapse/handlers/account_validity.py +361 -0
  139. synapse/handlers/admin.py +618 -0
  140. synapse/handlers/appservice.py +991 -0
  141. synapse/handlers/auth.py +2494 -0
  142. synapse/handlers/cas.py +413 -0
  143. synapse/handlers/deactivate_account.py +363 -0
  144. synapse/handlers/delayed_events.py +635 -0
  145. synapse/handlers/device.py +1873 -0
  146. synapse/handlers/devicemessage.py +399 -0
  147. synapse/handlers/directory.py +554 -0
  148. synapse/handlers/e2e_keys.py +1834 -0
  149. synapse/handlers/e2e_room_keys.py +455 -0
  150. synapse/handlers/event_auth.py +390 -0
  151. synapse/handlers/events.py +201 -0
  152. synapse/handlers/federation.py +2043 -0
  153. synapse/handlers/federation_event.py +2420 -0
  154. synapse/handlers/identity.py +812 -0
  155. synapse/handlers/initial_sync.py +528 -0
  156. synapse/handlers/jwt.py +120 -0
  157. synapse/handlers/message.py +2347 -0
  158. synapse/handlers/oidc.py +1803 -0
  159. synapse/handlers/pagination.py +768 -0
  160. synapse/handlers/password_policy.py +102 -0
  161. synapse/handlers/presence.py +2638 -0
  162. synapse/handlers/profile.py +655 -0
  163. synapse/handlers/push_rules.py +164 -0
  164. synapse/handlers/read_marker.py +79 -0
  165. synapse/handlers/receipts.py +351 -0
  166. synapse/handlers/register.py +1060 -0
  167. synapse/handlers/relations.py +624 -0
  168. synapse/handlers/reports.py +98 -0
  169. synapse/handlers/room.py +2447 -0
  170. synapse/handlers/room_list.py +632 -0
  171. synapse/handlers/room_member.py +2365 -0
  172. synapse/handlers/room_member_worker.py +146 -0
  173. synapse/handlers/room_policy.py +186 -0
  174. synapse/handlers/room_summary.py +1057 -0
  175. synapse/handlers/saml.py +524 -0
  176. synapse/handlers/search.py +723 -0
  177. synapse/handlers/send_email.py +209 -0
  178. synapse/handlers/set_password.py +71 -0
  179. synapse/handlers/sliding_sync/__init__.py +1701 -0
  180. synapse/handlers/sliding_sync/extensions.py +970 -0
  181. synapse/handlers/sliding_sync/room_lists.py +2266 -0
  182. synapse/handlers/sliding_sync/store.py +128 -0
  183. synapse/handlers/sso.py +1292 -0
  184. synapse/handlers/state_deltas.py +82 -0
  185. synapse/handlers/stats.py +322 -0
  186. synapse/handlers/sync.py +3109 -0
  187. synapse/handlers/thread_subscriptions.py +190 -0
  188. synapse/handlers/typing.py +606 -0
  189. synapse/handlers/ui_auth/__init__.py +48 -0
  190. synapse/handlers/ui_auth/checkers.py +332 -0
  191. synapse/handlers/user_directory.py +783 -0
  192. synapse/handlers/worker_lock.py +365 -0
  193. synapse/http/__init__.py +106 -0
  194. synapse/http/additional_resource.py +62 -0
  195. synapse/http/client.py +1360 -0
  196. synapse/http/connectproxyclient.py +309 -0
  197. synapse/http/federation/__init__.py +19 -0
  198. synapse/http/federation/matrix_federation_agent.py +490 -0
  199. synapse/http/federation/srv_resolver.py +196 -0
  200. synapse/http/federation/well_known_resolver.py +367 -0
  201. synapse/http/matrixfederationclient.py +1875 -0
  202. synapse/http/proxy.py +290 -0
  203. synapse/http/proxyagent.py +497 -0
  204. synapse/http/replicationagent.py +203 -0
  205. synapse/http/request_metrics.py +309 -0
  206. synapse/http/server.py +1114 -0
  207. synapse/http/servlet.py +1019 -0
  208. synapse/http/site.py +825 -0
  209. synapse/http/types.py +27 -0
  210. synapse/logging/__init__.py +31 -0
  211. synapse/logging/_remote.py +261 -0
  212. synapse/logging/_terse_json.py +95 -0
  213. synapse/logging/context.py +1211 -0
  214. synapse/logging/formatter.py +63 -0
  215. synapse/logging/handlers.py +99 -0
  216. synapse/logging/loggers.py +25 -0
  217. synapse/logging/opentracing.py +1132 -0
  218. synapse/logging/scopecontextmanager.py +161 -0
  219. synapse/media/_base.py +827 -0
  220. synapse/media/filepath.py +417 -0
  221. synapse/media/media_repository.py +1580 -0
  222. synapse/media/media_storage.py +704 -0
  223. synapse/media/oembed.py +277 -0
  224. synapse/media/preview_html.py +559 -0
  225. synapse/media/storage_provider.py +195 -0
  226. synapse/media/thumbnailer.py +833 -0
  227. synapse/media/url_previewer.py +875 -0
  228. synapse/metrics/__init__.py +754 -0
  229. synapse/metrics/_gc.py +219 -0
  230. synapse/metrics/_reactor_metrics.py +171 -0
  231. synapse/metrics/_types.py +38 -0
  232. synapse/metrics/background_process_metrics.py +556 -0
  233. synapse/metrics/common_usage_metrics.py +94 -0
  234. synapse/metrics/jemalloc.py +248 -0
  235. synapse/module_api/__init__.py +2154 -0
  236. synapse/module_api/callbacks/__init__.py +50 -0
  237. synapse/module_api/callbacks/account_validity_callbacks.py +106 -0
  238. synapse/module_api/callbacks/media_repository_callbacks.py +160 -0
  239. synapse/module_api/callbacks/ratelimit_callbacks.py +79 -0
  240. synapse/module_api/callbacks/spamchecker_callbacks.py +1113 -0
  241. synapse/module_api/callbacks/third_party_event_rules_callbacks.py +599 -0
  242. synapse/module_api/errors.py +42 -0
  243. synapse/notifier.py +972 -0
  244. synapse/push/__init__.py +212 -0
  245. synapse/push/bulk_push_rule_evaluator.py +637 -0
  246. synapse/push/clientformat.py +126 -0
  247. synapse/push/emailpusher.py +333 -0
  248. synapse/push/httppusher.py +564 -0
  249. synapse/push/mailer.py +1012 -0
  250. synapse/push/presentable_names.py +216 -0
  251. synapse/push/push_tools.py +114 -0
  252. synapse/push/push_types.py +141 -0
  253. synapse/push/pusher.py +87 -0
  254. synapse/push/pusherpool.py +501 -0
  255. synapse/push/rulekinds.py +33 -0
  256. synapse/py.typed +0 -0
  257. synapse/replication/__init__.py +20 -0
  258. synapse/replication/http/__init__.py +68 -0
  259. synapse/replication/http/_base.py +468 -0
  260. synapse/replication/http/account_data.py +297 -0
  261. synapse/replication/http/deactivate_account.py +81 -0
  262. synapse/replication/http/delayed_events.py +62 -0
  263. synapse/replication/http/devices.py +254 -0
  264. synapse/replication/http/federation.py +334 -0
  265. synapse/replication/http/login.py +106 -0
  266. synapse/replication/http/membership.py +364 -0
  267. synapse/replication/http/presence.py +133 -0
  268. synapse/replication/http/push.py +156 -0
  269. synapse/replication/http/register.py +172 -0
  270. synapse/replication/http/send_events.py +182 -0
  271. synapse/replication/http/state.py +82 -0
  272. synapse/replication/http/streams.py +101 -0
  273. synapse/replication/tcp/__init__.py +56 -0
  274. synapse/replication/tcp/client.py +552 -0
  275. synapse/replication/tcp/commands.py +569 -0
  276. synapse/replication/tcp/context.py +41 -0
  277. synapse/replication/tcp/external_cache.py +156 -0
  278. synapse/replication/tcp/handler.py +942 -0
  279. synapse/replication/tcp/protocol.py +608 -0
  280. synapse/replication/tcp/redis.py +509 -0
  281. synapse/replication/tcp/resource.py +348 -0
  282. synapse/replication/tcp/streams/__init__.py +96 -0
  283. synapse/replication/tcp/streams/_base.py +766 -0
  284. synapse/replication/tcp/streams/events.py +287 -0
  285. synapse/replication/tcp/streams/federation.py +92 -0
  286. synapse/replication/tcp/streams/partial_state.py +80 -0
  287. synapse/res/providers.json +29 -0
  288. synapse/res/templates/_base.html +29 -0
  289. synapse/res/templates/account_previously_renewed.html +6 -0
  290. synapse/res/templates/account_renewed.html +6 -0
  291. synapse/res/templates/add_threepid.html +8 -0
  292. synapse/res/templates/add_threepid.txt +6 -0
  293. synapse/res/templates/add_threepid_failure.html +7 -0
  294. synapse/res/templates/add_threepid_success.html +6 -0
  295. synapse/res/templates/already_in_use.html +12 -0
  296. synapse/res/templates/already_in_use.txt +10 -0
  297. synapse/res/templates/auth_success.html +21 -0
  298. synapse/res/templates/invalid_token.html +6 -0
  299. synapse/res/templates/mail-Element.css +7 -0
  300. synapse/res/templates/mail-Vector.css +7 -0
  301. synapse/res/templates/mail-expiry.css +4 -0
  302. synapse/res/templates/mail.css +156 -0
  303. synapse/res/templates/notice_expiry.html +46 -0
  304. synapse/res/templates/notice_expiry.txt +7 -0
  305. synapse/res/templates/notif.html +51 -0
  306. synapse/res/templates/notif.txt +22 -0
  307. synapse/res/templates/notif_mail.html +59 -0
  308. synapse/res/templates/notif_mail.txt +10 -0
  309. synapse/res/templates/password_reset.html +10 -0
  310. synapse/res/templates/password_reset.txt +7 -0
  311. synapse/res/templates/password_reset_confirmation.html +15 -0
  312. synapse/res/templates/password_reset_failure.html +7 -0
  313. synapse/res/templates/password_reset_success.html +6 -0
  314. synapse/res/templates/recaptcha.html +42 -0
  315. synapse/res/templates/registration.html +12 -0
  316. synapse/res/templates/registration.txt +10 -0
  317. synapse/res/templates/registration_failure.html +6 -0
  318. synapse/res/templates/registration_success.html +6 -0
  319. synapse/res/templates/registration_token.html +18 -0
  320. synapse/res/templates/room.html +33 -0
  321. synapse/res/templates/room.txt +9 -0
  322. synapse/res/templates/sso.css +129 -0
  323. synapse/res/templates/sso_account_deactivated.html +25 -0
  324. synapse/res/templates/sso_auth_account_details.html +186 -0
  325. synapse/res/templates/sso_auth_account_details.js +116 -0
  326. synapse/res/templates/sso_auth_bad_user.html +26 -0
  327. synapse/res/templates/sso_auth_confirm.html +27 -0
  328. synapse/res/templates/sso_auth_success.html +26 -0
  329. synapse/res/templates/sso_error.html +71 -0
  330. synapse/res/templates/sso_footer.html +19 -0
  331. synapse/res/templates/sso_login_idp_picker.html +60 -0
  332. synapse/res/templates/sso_new_user_consent.html +30 -0
  333. synapse/res/templates/sso_partial_profile.html +19 -0
  334. synapse/res/templates/sso_redirect_confirm.html +39 -0
  335. synapse/res/templates/style.css +33 -0
  336. synapse/res/templates/terms.html +27 -0
  337. synapse/rest/__init__.py +197 -0
  338. synapse/rest/admin/__init__.py +390 -0
  339. synapse/rest/admin/_base.py +72 -0
  340. synapse/rest/admin/background_updates.py +171 -0
  341. synapse/rest/admin/devices.py +221 -0
  342. synapse/rest/admin/event_reports.py +173 -0
  343. synapse/rest/admin/events.py +69 -0
  344. synapse/rest/admin/experimental_features.py +137 -0
  345. synapse/rest/admin/federation.py +243 -0
  346. synapse/rest/admin/media.py +540 -0
  347. synapse/rest/admin/registration_tokens.py +358 -0
  348. synapse/rest/admin/rooms.py +1061 -0
  349. synapse/rest/admin/scheduled_tasks.py +70 -0
  350. synapse/rest/admin/server_notice_servlet.py +132 -0
  351. synapse/rest/admin/statistics.py +132 -0
  352. synapse/rest/admin/username_available.py +58 -0
  353. synapse/rest/admin/users.py +1608 -0
  354. synapse/rest/client/__init__.py +20 -0
  355. synapse/rest/client/_base.py +113 -0
  356. synapse/rest/client/account.py +930 -0
  357. synapse/rest/client/account_data.py +319 -0
  358. synapse/rest/client/account_validity.py +103 -0
  359. synapse/rest/client/appservice_ping.py +125 -0
  360. synapse/rest/client/auth.py +218 -0
  361. synapse/rest/client/auth_metadata.py +122 -0
  362. synapse/rest/client/capabilities.py +121 -0
  363. synapse/rest/client/delayed_events.py +111 -0
  364. synapse/rest/client/devices.py +587 -0
  365. synapse/rest/client/directory.py +211 -0
  366. synapse/rest/client/events.py +116 -0
  367. synapse/rest/client/filter.py +112 -0
  368. synapse/rest/client/initial_sync.py +65 -0
  369. synapse/rest/client/keys.py +678 -0
  370. synapse/rest/client/knock.py +104 -0
  371. synapse/rest/client/login.py +754 -0
  372. synapse/rest/client/login_token_request.py +127 -0
  373. synapse/rest/client/logout.py +93 -0
  374. synapse/rest/client/matrixrtc.py +52 -0
  375. synapse/rest/client/media.py +286 -0
  376. synapse/rest/client/mutual_rooms.py +93 -0
  377. synapse/rest/client/notifications.py +137 -0
  378. synapse/rest/client/openid.py +109 -0
  379. synapse/rest/client/password_policy.py +69 -0
  380. synapse/rest/client/presence.py +131 -0
  381. synapse/rest/client/profile.py +291 -0
  382. synapse/rest/client/push_rule.py +331 -0
  383. synapse/rest/client/pusher.py +181 -0
  384. synapse/rest/client/read_marker.py +104 -0
  385. synapse/rest/client/receipts.py +165 -0
  386. synapse/rest/client/register.py +1067 -0
  387. synapse/rest/client/relations.py +138 -0
  388. synapse/rest/client/rendezvous.py +76 -0
  389. synapse/rest/client/reporting.py +207 -0
  390. synapse/rest/client/room.py +1669 -0
  391. synapse/rest/client/room_keys.py +426 -0
  392. synapse/rest/client/room_upgrade_rest_servlet.py +112 -0
  393. synapse/rest/client/sendtodevice.py +85 -0
  394. synapse/rest/client/sync.py +1131 -0
  395. synapse/rest/client/tags.py +129 -0
  396. synapse/rest/client/thirdparty.py +130 -0
  397. synapse/rest/client/thread_subscriptions.py +247 -0
  398. synapse/rest/client/tokenrefresh.py +52 -0
  399. synapse/rest/client/transactions.py +149 -0
  400. synapse/rest/client/user_directory.py +90 -0
  401. synapse/rest/client/versions.py +191 -0
  402. synapse/rest/client/voip.py +88 -0
  403. synapse/rest/consent/__init__.py +0 -0
  404. synapse/rest/consent/consent_resource.py +210 -0
  405. synapse/rest/health.py +38 -0
  406. synapse/rest/key/__init__.py +20 -0
  407. synapse/rest/key/v2/__init__.py +40 -0
  408. synapse/rest/key/v2/local_key_resource.py +125 -0
  409. synapse/rest/key/v2/remote_key_resource.py +302 -0
  410. synapse/rest/media/__init__.py +0 -0
  411. synapse/rest/media/config_resource.py +53 -0
  412. synapse/rest/media/create_resource.py +90 -0
  413. synapse/rest/media/download_resource.py +110 -0
  414. synapse/rest/media/media_repository_resource.py +113 -0
  415. synapse/rest/media/preview_url_resource.py +77 -0
  416. synapse/rest/media/thumbnail_resource.py +142 -0
  417. synapse/rest/media/upload_resource.py +187 -0
  418. synapse/rest/media/v1/__init__.py +39 -0
  419. synapse/rest/media/v1/_base.py +23 -0
  420. synapse/rest/media/v1/media_storage.py +23 -0
  421. synapse/rest/media/v1/storage_provider.py +23 -0
  422. synapse/rest/synapse/__init__.py +20 -0
  423. synapse/rest/synapse/client/__init__.py +93 -0
  424. synapse/rest/synapse/client/federation_whitelist.py +66 -0
  425. synapse/rest/synapse/client/jwks.py +77 -0
  426. synapse/rest/synapse/client/new_user_consent.py +115 -0
  427. synapse/rest/synapse/client/oidc/__init__.py +45 -0
  428. synapse/rest/synapse/client/oidc/backchannel_logout_resource.py +42 -0
  429. synapse/rest/synapse/client/oidc/callback_resource.py +48 -0
  430. synapse/rest/synapse/client/password_reset.py +129 -0
  431. synapse/rest/synapse/client/pick_idp.py +107 -0
  432. synapse/rest/synapse/client/pick_username.py +153 -0
  433. synapse/rest/synapse/client/rendezvous.py +58 -0
  434. synapse/rest/synapse/client/saml2/__init__.py +42 -0
  435. synapse/rest/synapse/client/saml2/metadata_resource.py +46 -0
  436. synapse/rest/synapse/client/saml2/response_resource.py +52 -0
  437. synapse/rest/synapse/client/sso_register.py +56 -0
  438. synapse/rest/synapse/client/unsubscribe.py +88 -0
  439. synapse/rest/synapse/mas/__init__.py +71 -0
  440. synapse/rest/synapse/mas/_base.py +55 -0
  441. synapse/rest/synapse/mas/devices.py +239 -0
  442. synapse/rest/synapse/mas/users.py +469 -0
  443. synapse/rest/well_known.py +148 -0
  444. synapse/server.py +1258 -0
  445. synapse/server_notices/__init__.py +0 -0
  446. synapse/server_notices/consent_server_notices.py +136 -0
  447. synapse/server_notices/resource_limits_server_notices.py +215 -0
  448. synapse/server_notices/server_notices_manager.py +388 -0
  449. synapse/server_notices/server_notices_sender.py +67 -0
  450. synapse/server_notices/worker_server_notices_sender.py +46 -0
  451. synapse/spam_checker_api/__init__.py +31 -0
  452. synapse/state/__init__.py +1022 -0
  453. synapse/state/v1.py +370 -0
  454. synapse/state/v2.py +985 -0
  455. synapse/static/client/login/index.html +47 -0
  456. synapse/static/client/login/js/jquery-3.4.1.min.js +2 -0
  457. synapse/static/client/login/js/login.js +291 -0
  458. synapse/static/client/login/spinner.gif +0 -0
  459. synapse/static/client/login/style.css +79 -0
  460. synapse/static/index.html +63 -0
  461. synapse/storage/__init__.py +43 -0
  462. synapse/storage/_base.py +245 -0
  463. synapse/storage/admin_client_config.py +26 -0
  464. synapse/storage/background_updates.py +1189 -0
  465. synapse/storage/controllers/__init__.py +57 -0
  466. synapse/storage/controllers/persist_events.py +1239 -0
  467. synapse/storage/controllers/purge_events.py +456 -0
  468. synapse/storage/controllers/state.py +954 -0
  469. synapse/storage/controllers/stats.py +119 -0
  470. synapse/storage/database.py +2720 -0
  471. synapse/storage/databases/__init__.py +175 -0
  472. synapse/storage/databases/main/__init__.py +424 -0
  473. synapse/storage/databases/main/account_data.py +1060 -0
  474. synapse/storage/databases/main/appservice.py +473 -0
  475. synapse/storage/databases/main/cache.py +911 -0
  476. synapse/storage/databases/main/censor_events.py +225 -0
  477. synapse/storage/databases/main/client_ips.py +817 -0
  478. synapse/storage/databases/main/delayed_events.py +560 -0
  479. synapse/storage/databases/main/deviceinbox.py +1272 -0
  480. synapse/storage/databases/main/devices.py +2581 -0
  481. synapse/storage/databases/main/directory.py +212 -0
  482. synapse/storage/databases/main/e2e_room_keys.py +690 -0
  483. synapse/storage/databases/main/end_to_end_keys.py +1896 -0
  484. synapse/storage/databases/main/event_federation.py +2509 -0
  485. synapse/storage/databases/main/event_push_actions.py +1937 -0
  486. synapse/storage/databases/main/events.py +3746 -0
  487. synapse/storage/databases/main/events_bg_updates.py +2910 -0
  488. synapse/storage/databases/main/events_forward_extremities.py +126 -0
  489. synapse/storage/databases/main/events_worker.py +2784 -0
  490. synapse/storage/databases/main/experimental_features.py +130 -0
  491. synapse/storage/databases/main/filtering.py +231 -0
  492. synapse/storage/databases/main/keys.py +291 -0
  493. synapse/storage/databases/main/lock.py +553 -0
  494. synapse/storage/databases/main/media_repository.py +1070 -0
  495. synapse/storage/databases/main/metrics.py +460 -0
  496. synapse/storage/databases/main/monthly_active_users.py +443 -0
  497. synapse/storage/databases/main/openid.py +61 -0
  498. synapse/storage/databases/main/presence.py +511 -0
  499. synapse/storage/databases/main/profile.py +541 -0
  500. synapse/storage/databases/main/purge_events.py +511 -0
  501. synapse/storage/databases/main/push_rule.py +972 -0
  502. synapse/storage/databases/main/pusher.py +794 -0
  503. synapse/storage/databases/main/receipts.py +1342 -0
  504. synapse/storage/databases/main/registration.py +3076 -0
  505. synapse/storage/databases/main/rejections.py +38 -0
  506. synapse/storage/databases/main/relations.py +1118 -0
  507. synapse/storage/databases/main/room.py +2781 -0
  508. synapse/storage/databases/main/roommember.py +2112 -0
  509. synapse/storage/databases/main/search.py +941 -0
  510. synapse/storage/databases/main/session.py +151 -0
  511. synapse/storage/databases/main/signatures.py +94 -0
  512. synapse/storage/databases/main/sliding_sync.py +603 -0
  513. synapse/storage/databases/main/state.py +1006 -0
  514. synapse/storage/databases/main/state_deltas.py +329 -0
  515. synapse/storage/databases/main/stats.py +791 -0
  516. synapse/storage/databases/main/stream.py +2580 -0
  517. synapse/storage/databases/main/tags.py +360 -0
  518. synapse/storage/databases/main/task_scheduler.py +225 -0
  519. synapse/storage/databases/main/thread_subscriptions.py +591 -0
  520. synapse/storage/databases/main/transactions.py +681 -0
  521. synapse/storage/databases/main/ui_auth.py +420 -0
  522. synapse/storage/databases/main/user_directory.py +1331 -0
  523. synapse/storage/databases/main/user_erasure_store.py +117 -0
  524. synapse/storage/databases/state/__init__.py +22 -0
  525. synapse/storage/databases/state/bg_updates.py +499 -0
  526. synapse/storage/databases/state/deletion.py +558 -0
  527. synapse/storage/databases/state/store.py +949 -0
  528. synapse/storage/engines/__init__.py +70 -0
  529. synapse/storage/engines/_base.py +154 -0
  530. synapse/storage/engines/postgres.py +261 -0
  531. synapse/storage/engines/sqlite.py +199 -0
  532. synapse/storage/invite_rule.py +112 -0
  533. synapse/storage/keys.py +40 -0
  534. synapse/storage/prepare_database.py +731 -0
  535. synapse/storage/push_rule.py +28 -0
  536. synapse/storage/roommember.py +89 -0
  537. synapse/storage/schema/README.md +4 -0
  538. synapse/storage/schema/__init__.py +182 -0
  539. synapse/storage/schema/common/delta/25/00background_updates.sql +40 -0
  540. synapse/storage/schema/common/delta/35/00background_updates_add_col.sql +36 -0
  541. synapse/storage/schema/common/delta/58/00background_update_ordering.sql +38 -0
  542. synapse/storage/schema/common/full_schemas/72/full.sql.postgres +8 -0
  543. synapse/storage/schema/common/full_schemas/72/full.sql.sqlite +6 -0
  544. synapse/storage/schema/common/schema_version.sql +60 -0
  545. synapse/storage/schema/main/delta/12/v12.sql +82 -0
  546. synapse/storage/schema/main/delta/13/v13.sql +38 -0
  547. synapse/storage/schema/main/delta/14/v14.sql +42 -0
  548. synapse/storage/schema/main/delta/15/appservice_txns.sql +50 -0
  549. synapse/storage/schema/main/delta/15/presence_indices.sql +2 -0
  550. synapse/storage/schema/main/delta/15/v15.sql +24 -0
  551. synapse/storage/schema/main/delta/16/events_order_index.sql +4 -0
  552. synapse/storage/schema/main/delta/16/remote_media_cache_index.sql +2 -0
  553. synapse/storage/schema/main/delta/16/remove_duplicates.sql +9 -0
  554. synapse/storage/schema/main/delta/16/room_alias_index.sql +3 -0
  555. synapse/storage/schema/main/delta/16/unique_constraints.sql +72 -0
  556. synapse/storage/schema/main/delta/16/users.sql +56 -0
  557. synapse/storage/schema/main/delta/17/drop_indexes.sql +37 -0
  558. synapse/storage/schema/main/delta/17/server_keys.sql +43 -0
  559. synapse/storage/schema/main/delta/17/user_threepids.sql +9 -0
  560. synapse/storage/schema/main/delta/18/server_keys_bigger_ints.sql +51 -0
  561. synapse/storage/schema/main/delta/19/event_index.sql +38 -0
  562. synapse/storage/schema/main/delta/20/dummy.sql +1 -0
  563. synapse/storage/schema/main/delta/20/pushers.py +93 -0
  564. synapse/storage/schema/main/delta/21/end_to_end_keys.sql +53 -0
  565. synapse/storage/schema/main/delta/21/receipts.sql +57 -0
  566. synapse/storage/schema/main/delta/22/receipts_index.sql +41 -0
  567. synapse/storage/schema/main/delta/22/user_threepids_unique.sql +19 -0
  568. synapse/storage/schema/main/delta/24/stats_reporting.sql +37 -0
  569. synapse/storage/schema/main/delta/25/fts.py +81 -0
  570. synapse/storage/schema/main/delta/25/guest_access.sql +44 -0
  571. synapse/storage/schema/main/delta/25/history_visibility.sql +44 -0
  572. synapse/storage/schema/main/delta/25/tags.sql +57 -0
  573. synapse/storage/schema/main/delta/26/account_data.sql +36 -0
  574. synapse/storage/schema/main/delta/27/account_data.sql +55 -0
  575. synapse/storage/schema/main/delta/27/forgotten_memberships.sql +45 -0
  576. synapse/storage/schema/main/delta/27/ts.py +61 -0
  577. synapse/storage/schema/main/delta/28/event_push_actions.sql +46 -0
  578. synapse/storage/schema/main/delta/28/events_room_stream.sql +39 -0
  579. synapse/storage/schema/main/delta/28/public_roms_index.sql +39 -0
  580. synapse/storage/schema/main/delta/28/receipts_user_id_index.sql +41 -0
  581. synapse/storage/schema/main/delta/28/upgrade_times.sql +40 -0
  582. synapse/storage/schema/main/delta/28/users_is_guest.sql +41 -0
  583. synapse/storage/schema/main/delta/29/push_actions.sql +54 -0
  584. synapse/storage/schema/main/delta/30/alias_creator.sql +35 -0
  585. synapse/storage/schema/main/delta/30/as_users.py +82 -0
  586. synapse/storage/schema/main/delta/30/deleted_pushers.sql +44 -0
  587. synapse/storage/schema/main/delta/30/presence_stream.sql +49 -0
  588. synapse/storage/schema/main/delta/30/public_rooms.sql +42 -0
  589. synapse/storage/schema/main/delta/30/push_rule_stream.sql +57 -0
  590. synapse/storage/schema/main/delta/30/threepid_guest_access_tokens.sql +43 -0
  591. synapse/storage/schema/main/delta/31/invites.sql +61 -0
  592. synapse/storage/schema/main/delta/31/local_media_repository_url_cache.sql +46 -0
  593. synapse/storage/schema/main/delta/31/pushers_0.py +92 -0
  594. synapse/storage/schema/main/delta/31/pushers_index.sql +41 -0
  595. synapse/storage/schema/main/delta/31/search_update.py +65 -0
  596. synapse/storage/schema/main/delta/32/events.sql +35 -0
  597. synapse/storage/schema/main/delta/32/openid.sql +9 -0
  598. synapse/storage/schema/main/delta/32/pusher_throttle.sql +42 -0
  599. synapse/storage/schema/main/delta/32/remove_indices.sql +52 -0
  600. synapse/storage/schema/main/delta/32/reports.sql +44 -0
  601. synapse/storage/schema/main/delta/33/access_tokens_device_index.sql +36 -0
  602. synapse/storage/schema/main/delta/33/devices.sql +40 -0
  603. synapse/storage/schema/main/delta/33/devices_for_e2e_keys.sql +38 -0
  604. synapse/storage/schema/main/delta/33/devices_for_e2e_keys_clear_unknown_device.sql +39 -0
  605. synapse/storage/schema/main/delta/33/event_fields.py +61 -0
  606. synapse/storage/schema/main/delta/33/remote_media_ts.py +43 -0
  607. synapse/storage/schema/main/delta/33/user_ips_index.sql +36 -0
  608. synapse/storage/schema/main/delta/34/appservice_stream.sql +42 -0
  609. synapse/storage/schema/main/delta/34/cache_stream.py +50 -0
  610. synapse/storage/schema/main/delta/34/device_inbox.sql +43 -0
  611. synapse/storage/schema/main/delta/34/push_display_name_rename.sql +39 -0
  612. synapse/storage/schema/main/delta/34/received_txn_purge.py +36 -0
  613. synapse/storage/schema/main/delta/35/contains_url.sql +36 -0
  614. synapse/storage/schema/main/delta/35/device_outbox.sql +58 -0
  615. synapse/storage/schema/main/delta/35/device_stream_id.sql +40 -0
  616. synapse/storage/schema/main/delta/35/event_push_actions_index.sql +36 -0
  617. synapse/storage/schema/main/delta/35/public_room_list_change_stream.sql +52 -0
  618. synapse/storage/schema/main/delta/35/stream_order_to_extrem.sql +56 -0
  619. synapse/storage/schema/main/delta/36/readd_public_rooms.sql +45 -0
  620. synapse/storage/schema/main/delta/37/remove_auth_idx.py +89 -0
  621. synapse/storage/schema/main/delta/37/user_threepids.sql +71 -0
  622. synapse/storage/schema/main/delta/38/postgres_fts_gist.sql +38 -0
  623. synapse/storage/schema/main/delta/39/appservice_room_list.sql +48 -0
  624. synapse/storage/schema/main/delta/39/device_federation_stream_idx.sql +35 -0
  625. synapse/storage/schema/main/delta/39/event_push_index.sql +36 -0
  626. synapse/storage/schema/main/delta/39/federation_out_position.sql +41 -0
  627. synapse/storage/schema/main/delta/39/membership_profile.sql +39 -0
  628. synapse/storage/schema/main/delta/40/current_state_idx.sql +36 -0
  629. synapse/storage/schema/main/delta/40/device_inbox.sql +40 -0
  630. synapse/storage/schema/main/delta/40/device_list_streams.sql +79 -0
  631. synapse/storage/schema/main/delta/40/event_push_summary.sql +57 -0
  632. synapse/storage/schema/main/delta/40/pushers.sql +58 -0
  633. synapse/storage/schema/main/delta/41/device_list_stream_idx.sql +36 -0
  634. synapse/storage/schema/main/delta/41/device_outbound_index.sql +35 -0
  635. synapse/storage/schema/main/delta/41/event_search_event_id_idx.sql +36 -0
  636. synapse/storage/schema/main/delta/41/ratelimit.sql +41 -0
  637. synapse/storage/schema/main/delta/42/current_state_delta.sql +48 -0
  638. synapse/storage/schema/main/delta/42/device_list_last_id.sql +52 -0
  639. synapse/storage/schema/main/delta/42/event_auth_state_only.sql +36 -0
  640. synapse/storage/schema/main/delta/42/user_dir.py +88 -0
  641. synapse/storage/schema/main/delta/43/blocked_rooms.sql +40 -0
  642. synapse/storage/schema/main/delta/43/quarantine_media.sql +36 -0
  643. synapse/storage/schema/main/delta/43/url_cache.sql +35 -0
  644. synapse/storage/schema/main/delta/43/user_share.sql +52 -0
  645. synapse/storage/schema/main/delta/44/expire_url_cache.sql +60 -0
  646. synapse/storage/schema/main/delta/45/group_server.sql +186 -0
  647. synapse/storage/schema/main/delta/45/profile_cache.sql +47 -0
  648. synapse/storage/schema/main/delta/46/drop_refresh_tokens.sql +36 -0
  649. synapse/storage/schema/main/delta/46/drop_unique_deleted_pushers.sql +54 -0
  650. synapse/storage/schema/main/delta/46/group_server.sql +51 -0
  651. synapse/storage/schema/main/delta/46/local_media_repository_url_idx.sql +43 -0
  652. synapse/storage/schema/main/delta/46/user_dir_null_room_ids.sql +54 -0
  653. synapse/storage/schema/main/delta/46/user_dir_typos.sql +43 -0
  654. synapse/storage/schema/main/delta/47/last_access_media.sql +35 -0
  655. synapse/storage/schema/main/delta/47/postgres_fts_gin.sql +36 -0
  656. synapse/storage/schema/main/delta/47/push_actions_staging.sql +47 -0
  657. synapse/storage/schema/main/delta/48/add_user_consent.sql +37 -0
  658. synapse/storage/schema/main/delta/48/add_user_ips_last_seen_index.sql +36 -0
  659. synapse/storage/schema/main/delta/48/deactivated_users.sql +44 -0
  660. synapse/storage/schema/main/delta/48/group_unique_indexes.py +67 -0
  661. synapse/storage/schema/main/delta/48/groups_joinable.sql +41 -0
  662. synapse/storage/schema/main/delta/49/add_user_consent_server_notice_sent.sql +39 -0
  663. synapse/storage/schema/main/delta/49/add_user_daily_visits.sql +40 -0
  664. synapse/storage/schema/main/delta/49/add_user_ips_last_seen_only_index.sql +36 -0
  665. synapse/storage/schema/main/delta/50/add_creation_ts_users_index.sql +38 -0
  666. synapse/storage/schema/main/delta/50/erasure_store.sql +40 -0
  667. synapse/storage/schema/main/delta/50/make_event_content_nullable.py +102 -0
  668. synapse/storage/schema/main/delta/51/e2e_room_keys.sql +58 -0
  669. synapse/storage/schema/main/delta/51/monthly_active_users.sql +46 -0
  670. synapse/storage/schema/main/delta/52/add_event_to_state_group_index.sql +38 -0
  671. synapse/storage/schema/main/delta/52/device_list_streams_unique_idx.sql +55 -0
  672. synapse/storage/schema/main/delta/52/e2e_room_keys.sql +72 -0
  673. synapse/storage/schema/main/delta/53/add_user_type_to_users.sql +38 -0
  674. synapse/storage/schema/main/delta/53/drop_sent_transactions.sql +35 -0
  675. synapse/storage/schema/main/delta/53/event_format_version.sql +35 -0
  676. synapse/storage/schema/main/delta/53/user_dir_populate.sql +49 -0
  677. synapse/storage/schema/main/delta/53/user_ips_index.sql +49 -0
  678. synapse/storage/schema/main/delta/53/user_share.sql +63 -0
  679. synapse/storage/schema/main/delta/53/user_threepid_id.sql +48 -0
  680. synapse/storage/schema/main/delta/53/users_in_public_rooms.sql +47 -0
  681. synapse/storage/schema/main/delta/54/account_validity_with_renewal.sql +49 -0
  682. synapse/storage/schema/main/delta/54/add_validity_to_server_keys.sql +42 -0
  683. synapse/storage/schema/main/delta/54/delete_forward_extremities.sql +42 -0
  684. synapse/storage/schema/main/delta/54/drop_legacy_tables.sql +49 -0
  685. synapse/storage/schema/main/delta/54/drop_presence_list.sql +35 -0
  686. synapse/storage/schema/main/delta/54/relations.sql +46 -0
  687. synapse/storage/schema/main/delta/54/stats.sql +99 -0
  688. synapse/storage/schema/main/delta/54/stats2.sql +47 -0
  689. synapse/storage/schema/main/delta/55/access_token_expiry.sql +37 -0
  690. synapse/storage/schema/main/delta/55/track_threepid_validations.sql +50 -0
  691. synapse/storage/schema/main/delta/55/users_alter_deactivated.sql +38 -0
  692. synapse/storage/schema/main/delta/56/add_spans_to_device_lists.sql +39 -0
  693. synapse/storage/schema/main/delta/56/current_state_events_membership.sql +41 -0
  694. synapse/storage/schema/main/delta/56/current_state_events_membership_mk2.sql +43 -0
  695. synapse/storage/schema/main/delta/56/delete_keys_from_deleted_backups.sql +44 -0
  696. synapse/storage/schema/main/delta/56/destinations_failure_ts.sql +44 -0
  697. synapse/storage/schema/main/delta/56/destinations_retry_interval_type.sql.postgres +18 -0
  698. synapse/storage/schema/main/delta/56/device_stream_id_insert.sql +39 -0
  699. synapse/storage/schema/main/delta/56/devices_last_seen.sql +43 -0
  700. synapse/storage/schema/main/delta/56/drop_unused_event_tables.sql +39 -0
  701. synapse/storage/schema/main/delta/56/event_expiry.sql +40 -0
  702. synapse/storage/schema/main/delta/56/event_labels.sql +49 -0
  703. synapse/storage/schema/main/delta/56/event_labels_background_update.sql +36 -0
  704. synapse/storage/schema/main/delta/56/fix_room_keys_index.sql +37 -0
  705. synapse/storage/schema/main/delta/56/hidden_devices.sql +37 -0
  706. synapse/storage/schema/main/delta/56/hidden_devices_fix.sql.sqlite +42 -0
  707. synapse/storage/schema/main/delta/56/nuke_empty_communities_from_db.sql +48 -0
  708. synapse/storage/schema/main/delta/56/public_room_list_idx.sql +35 -0
  709. synapse/storage/schema/main/delta/56/redaction_censor.sql +35 -0
  710. synapse/storage/schema/main/delta/56/redaction_censor2.sql +41 -0
  711. synapse/storage/schema/main/delta/56/redaction_censor3_fix_update.sql.postgres +25 -0
  712. synapse/storage/schema/main/delta/56/redaction_censor4.sql +35 -0
  713. synapse/storage/schema/main/delta/56/remove_tombstoned_rooms_from_directory.sql +38 -0
  714. synapse/storage/schema/main/delta/56/room_key_etag.sql +36 -0
  715. synapse/storage/schema/main/delta/56/room_membership_idx.sql +37 -0
  716. synapse/storage/schema/main/delta/56/room_retention.sql +52 -0
  717. synapse/storage/schema/main/delta/56/signing_keys.sql +75 -0
  718. synapse/storage/schema/main/delta/56/signing_keys_nonunique_signatures.sql +41 -0
  719. synapse/storage/schema/main/delta/56/stats_separated.sql +175 -0
  720. synapse/storage/schema/main/delta/56/unique_user_filter_index.py +46 -0
  721. synapse/storage/schema/main/delta/56/user_external_ids.sql +43 -0
  722. synapse/storage/schema/main/delta/56/users_in_public_rooms_idx.sql +36 -0
  723. synapse/storage/schema/main/delta/57/delete_old_current_state_events.sql +41 -0
  724. synapse/storage/schema/main/delta/57/device_list_remote_cache_stale.sql +44 -0
  725. synapse/storage/schema/main/delta/57/local_current_membership.py +111 -0
  726. synapse/storage/schema/main/delta/57/remove_sent_outbound_pokes.sql +40 -0
  727. synapse/storage/schema/main/delta/57/rooms_version_column.sql +43 -0
  728. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.postgres +35 -0
  729. synapse/storage/schema/main/delta/57/rooms_version_column_2.sql.sqlite +22 -0
  730. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.postgres +39 -0
  731. synapse/storage/schema/main/delta/57/rooms_version_column_3.sql.sqlite +23 -0
  732. synapse/storage/schema/main/delta/58/02remove_dup_outbound_pokes.sql +41 -0
  733. synapse/storage/schema/main/delta/58/03persist_ui_auth.sql +55 -0
  734. synapse/storage/schema/main/delta/58/05cache_instance.sql.postgres +30 -0
  735. synapse/storage/schema/main/delta/58/06dlols_unique_idx.py +83 -0
  736. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.postgres +33 -0
  737. synapse/storage/schema/main/delta/58/07add_method_to_thumbnail_constraint.sql.sqlite +44 -0
  738. synapse/storage/schema/main/delta/58/07persist_ui_auth_ips.sql +44 -0
  739. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.postgres +18 -0
  740. synapse/storage/schema/main/delta/58/08_media_safe_from_quarantine.sql.sqlite +18 -0
  741. synapse/storage/schema/main/delta/58/09shadow_ban.sql +37 -0
  742. synapse/storage/schema/main/delta/58/10_pushrules_enabled_delete_obsolete.sql +47 -0
  743. synapse/storage/schema/main/delta/58/10drop_local_rejections_stream.sql +41 -0
  744. synapse/storage/schema/main/delta/58/10federation_pos_instance_name.sql +41 -0
  745. synapse/storage/schema/main/delta/58/11dehydration.sql +39 -0
  746. synapse/storage/schema/main/delta/58/11fallback.sql +43 -0
  747. synapse/storage/schema/main/delta/58/11user_id_seq.py +38 -0
  748. synapse/storage/schema/main/delta/58/12room_stats.sql +51 -0
  749. synapse/storage/schema/main/delta/58/13remove_presence_allow_inbound.sql +36 -0
  750. synapse/storage/schema/main/delta/58/14events_instance_name.sql +35 -0
  751. synapse/storage/schema/main/delta/58/14events_instance_name.sql.postgres +28 -0
  752. synapse/storage/schema/main/delta/58/15_catchup_destination_rooms.sql +61 -0
  753. synapse/storage/schema/main/delta/58/15unread_count.sql +45 -0
  754. synapse/storage/schema/main/delta/58/16populate_stats_process_rooms_fix.sql +41 -0
  755. synapse/storage/schema/main/delta/58/17_catchup_last_successful.sql +40 -0
  756. synapse/storage/schema/main/delta/58/18stream_positions.sql +41 -0
  757. synapse/storage/schema/main/delta/58/19instance_map.sql.postgres +25 -0
  758. synapse/storage/schema/main/delta/58/19txn_id.sql +59 -0
  759. synapse/storage/schema/main/delta/58/20instance_name_event_tables.sql +36 -0
  760. synapse/storage/schema/main/delta/58/20user_daily_visits.sql +37 -0
  761. synapse/storage/schema/main/delta/58/21as_device_stream.sql +36 -0
  762. synapse/storage/schema/main/delta/58/21drop_device_max_stream_id.sql +1 -0
  763. synapse/storage/schema/main/delta/58/22puppet_token.sql +36 -0
  764. synapse/storage/schema/main/delta/58/22users_have_local_media.sql +2 -0
  765. synapse/storage/schema/main/delta/58/23e2e_cross_signing_keys_idx.sql +36 -0
  766. synapse/storage/schema/main/delta/58/24drop_event_json_index.sql +38 -0
  767. synapse/storage/schema/main/delta/58/25user_external_ids_user_id_idx.sql +36 -0
  768. synapse/storage/schema/main/delta/58/26access_token_last_validated.sql +37 -0
  769. synapse/storage/schema/main/delta/58/27local_invites.sql +37 -0
  770. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.postgres +16 -0
  771. synapse/storage/schema/main/delta/58/28drop_last_used_column.sql.sqlite +62 -0
  772. synapse/storage/schema/main/delta/59/01ignored_user.py +85 -0
  773. synapse/storage/schema/main/delta/59/02shard_send_to_device.sql +37 -0
  774. synapse/storage/schema/main/delta/59/03shard_send_to_device_sequence.sql.postgres +25 -0
  775. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql +71 -0
  776. synapse/storage/schema/main/delta/59/04_event_auth_chains.sql.postgres +16 -0
  777. synapse/storage/schema/main/delta/59/04drop_account_data.sql +36 -0
  778. synapse/storage/schema/main/delta/59/05cache_invalidation.sql +36 -0
  779. synapse/storage/schema/main/delta/59/06chain_cover_index.sql +36 -0
  780. synapse/storage/schema/main/delta/59/06shard_account_data.sql +39 -0
  781. synapse/storage/schema/main/delta/59/06shard_account_data.sql.postgres +32 -0
  782. synapse/storage/schema/main/delta/59/07shard_account_data_fix.sql +37 -0
  783. synapse/storage/schema/main/delta/59/08delete_pushers_for_deactivated_accounts.sql +39 -0
  784. synapse/storage/schema/main/delta/59/08delete_stale_pushers.sql +39 -0
  785. synapse/storage/schema/main/delta/59/09rejected_events_metadata.sql +45 -0
  786. synapse/storage/schema/main/delta/59/10delete_purged_chain_cover.sql +36 -0
  787. synapse/storage/schema/main/delta/59/11add_knock_members_to_stats.sql +39 -0
  788. synapse/storage/schema/main/delta/59/11drop_thumbnail_constraint.sql.postgres +22 -0
  789. synapse/storage/schema/main/delta/59/12account_validity_token_used_ts_ms.sql +37 -0
  790. synapse/storage/schema/main/delta/59/12presence_stream_instance.sql +37 -0
  791. synapse/storage/schema/main/delta/59/12presence_stream_instance_seq.sql.postgres +20 -0
  792. synapse/storage/schema/main/delta/59/13users_to_send_full_presence_to.sql +53 -0
  793. synapse/storage/schema/main/delta/59/14refresh_tokens.sql +53 -0
  794. synapse/storage/schema/main/delta/59/15locks.sql +56 -0
  795. synapse/storage/schema/main/delta/59/16federation_inbound_staging.sql +51 -0
  796. synapse/storage/schema/main/delta/60/01recreate_stream_ordering.sql.postgres +45 -0
  797. synapse/storage/schema/main/delta/60/02change_stream_ordering_columns.sql.postgres +30 -0
  798. synapse/storage/schema/main/delta/61/01change_appservices_txns.sql.postgres +23 -0
  799. synapse/storage/schema/main/delta/61/01insertion_event_lookups.sql +68 -0
  800. synapse/storage/schema/main/delta/61/02drop_redundant_room_depth_index.sql +37 -0
  801. synapse/storage/schema/main/delta/61/03recreate_min_depth.py +74 -0
  802. synapse/storage/schema/main/delta/62/01insertion_event_extremities.sql +43 -0
  803. synapse/storage/schema/main/delta/63/01create_registration_tokens.sql +42 -0
  804. synapse/storage/schema/main/delta/63/02delete_unlinked_email_pushers.sql +39 -0
  805. synapse/storage/schema/main/delta/63/02populate-rooms-creator.sql +36 -0
  806. synapse/storage/schema/main/delta/63/03session_store.sql +42 -0
  807. synapse/storage/schema/main/delta/63/04add_presence_stream_not_offline_index.sql +37 -0
  808. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.postgres +23 -0
  809. synapse/storage/schema/main/delta/64/01msc2716_chunk_to_batch_rename.sql.sqlite +37 -0
  810. synapse/storage/schema/main/delta/65/01msc2716_insertion_event_edges.sql +38 -0
  811. synapse/storage/schema/main/delta/65/03remove_hidden_devices_from_device_inbox.sql +41 -0
  812. synapse/storage/schema/main/delta/65/04_local_group_updates.sql +37 -0
  813. synapse/storage/schema/main/delta/65/05_remove_room_stats_historical_and_user_stats_historical.sql +38 -0
  814. synapse/storage/schema/main/delta/65/06remove_deleted_devices_from_device_inbox.sql +53 -0
  815. synapse/storage/schema/main/delta/65/07_arbitrary_relations.sql +37 -0
  816. synapse/storage/schema/main/delta/65/08_device_inbox_background_updates.sql +37 -0
  817. synapse/storage/schema/main/delta/65/10_expirable_refresh_tokens.sql +47 -0
  818. synapse/storage/schema/main/delta/65/11_devices_auth_provider_session.sql +46 -0
  819. synapse/storage/schema/main/delta/67/01drop_public_room_list_stream.sql +37 -0
  820. synapse/storage/schema/main/delta/68/01event_columns.sql +45 -0
  821. synapse/storage/schema/main/delta/68/02_msc2409_add_device_id_appservice_stream_type.sql +40 -0
  822. synapse/storage/schema/main/delta/68/03_delete_account_data_for_deactivated_accounts.sql +39 -0
  823. synapse/storage/schema/main/delta/68/04_refresh_tokens_index_next_token_id.sql +47 -0
  824. synapse/storage/schema/main/delta/68/04partial_state_rooms.sql +60 -0
  825. synapse/storage/schema/main/delta/68/05_delete_non_strings_from_event_search.sql.sqlite +22 -0
  826. synapse/storage/schema/main/delta/68/05partial_state_rooms_triggers.py +80 -0
  827. synapse/storage/schema/main/delta/68/06_msc3202_add_device_list_appservice_stream_type.sql +42 -0
  828. synapse/storage/schema/main/delta/69/01as_txn_seq.py +54 -0
  829. synapse/storage/schema/main/delta/69/01device_list_oubound_by_room.sql +57 -0
  830. synapse/storage/schema/main/delta/69/02cache_invalidation_index.sql +37 -0
  831. synapse/storage/schema/main/delta/70/01clean_table_purged_rooms.sql +39 -0
  832. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.postgres +43 -0
  833. synapse/storage/schema/main/delta/71/01rebuild_event_edges.sql.sqlite +47 -0
  834. synapse/storage/schema/main/delta/71/01remove_noop_background_updates.sql +80 -0
  835. synapse/storage/schema/main/delta/71/02event_push_summary_unique.sql +37 -0
  836. synapse/storage/schema/main/delta/72/01add_room_type_to_state_stats.sql +38 -0
  837. synapse/storage/schema/main/delta/72/01event_push_summary_receipt.sql +54 -0
  838. synapse/storage/schema/main/delta/72/02event_push_actions_index.sql +38 -0
  839. synapse/storage/schema/main/delta/72/03bg_populate_events_columns.py +57 -0
  840. synapse/storage/schema/main/delta/72/03drop_event_reference_hashes.sql +36 -0
  841. synapse/storage/schema/main/delta/72/03remove_groups.sql +50 -0
  842. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.postgres +17 -0
  843. synapse/storage/schema/main/delta/72/04drop_column_application_services_state_last_txn.sql.sqlite +40 -0
  844. synapse/storage/schema/main/delta/72/05receipts_event_stream_ordering.sql +38 -0
  845. synapse/storage/schema/main/delta/72/05remove_unstable_private_read_receipts.sql +38 -0
  846. synapse/storage/schema/main/delta/72/06add_consent_ts_to_users.sql +35 -0
  847. synapse/storage/schema/main/delta/72/06thread_notifications.sql +49 -0
  848. synapse/storage/schema/main/delta/72/07force_update_current_state_events_membership.py +67 -0
  849. synapse/storage/schema/main/delta/72/07thread_receipts.sql.postgres +30 -0
  850. synapse/storage/schema/main/delta/72/07thread_receipts.sql.sqlite +70 -0
  851. synapse/storage/schema/main/delta/72/08begin_cache_invalidation_seq_at_2.sql.postgres +23 -0
  852. synapse/storage/schema/main/delta/72/08thread_receipts.sql +39 -0
  853. synapse/storage/schema/main/delta/72/09partial_indices.sql.sqlite +56 -0
  854. synapse/storage/schema/main/delta/73/01event_failed_pull_attempts.sql +48 -0
  855. synapse/storage/schema/main/delta/73/02add_pusher_enabled.sql +35 -0
  856. synapse/storage/schema/main/delta/73/02room_id_indexes_for_purging.sql +41 -0
  857. synapse/storage/schema/main/delta/73/03pusher_device_id.sql +39 -0
  858. synapse/storage/schema/main/delta/73/03users_approved_column.sql +39 -0
  859. synapse/storage/schema/main/delta/73/04partial_join_details.sql +42 -0
  860. synapse/storage/schema/main/delta/73/04pending_device_list_updates.sql +47 -0
  861. synapse/storage/schema/main/delta/73/05old_push_actions.sql.postgres +22 -0
  862. synapse/storage/schema/main/delta/73/05old_push_actions.sql.sqlite +24 -0
  863. synapse/storage/schema/main/delta/73/06thread_notifications_thread_id_idx.sql +42 -0
  864. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.postgres +23 -0
  865. synapse/storage/schema/main/delta/73/08thread_receipts_non_null.sql.sqlite +76 -0
  866. synapse/storage/schema/main/delta/73/09partial_joined_via_destination.sql +37 -0
  867. synapse/storage/schema/main/delta/73/09threads_table.sql +49 -0
  868. synapse/storage/schema/main/delta/73/10_update_sqlite_fts4_tokenizer.py +71 -0
  869. synapse/storage/schema/main/delta/73/10login_tokens.sql +54 -0
  870. synapse/storage/schema/main/delta/73/11event_search_room_id_n_distinct.sql.postgres +33 -0
  871. synapse/storage/schema/main/delta/73/12refactor_device_list_outbound_pokes.sql +72 -0
  872. synapse/storage/schema/main/delta/73/13add_device_lists_index.sql +39 -0
  873. synapse/storage/schema/main/delta/73/20_un_partial_stated_room_stream.sql +51 -0
  874. synapse/storage/schema/main/delta/73/21_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  875. synapse/storage/schema/main/delta/73/22_rebuild_user_dir_stats.sql +48 -0
  876. synapse/storage/schema/main/delta/73/22_un_partial_stated_event_stream.sql +53 -0
  877. synapse/storage/schema/main/delta/73/23_fix_thread_index.sql +52 -0
  878. synapse/storage/schema/main/delta/73/23_un_partial_stated_room_stream_seq.sql.postgres +20 -0
  879. synapse/storage/schema/main/delta/73/24_events_jump_to_date_index.sql +36 -0
  880. synapse/storage/schema/main/delta/73/25drop_presence.sql +36 -0
  881. synapse/storage/schema/main/delta/74/01_user_directory_stale_remote_users.sql +58 -0
  882. synapse/storage/schema/main/delta/74/02_set_device_id_for_pushers_bg_update.sql +38 -0
  883. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.postgres +29 -0
  884. synapse/storage/schema/main/delta/74/03_membership_tables_event_stream_ordering.sql.sqlite +23 -0
  885. synapse/storage/schema/main/delta/74/03_room_membership_index.sql +38 -0
  886. synapse/storage/schema/main/delta/74/04_delete_e2e_backup_keys_for_deactivated_users.sql +36 -0
  887. synapse/storage/schema/main/delta/74/04_membership_tables_event_stream_ordering_triggers.py +87 -0
  888. synapse/storage/schema/main/delta/74/05_events_txn_id_device_id.sql +72 -0
  889. synapse/storage/schema/main/delta/74/90COMMENTS_destinations.sql.postgres +52 -0
  890. synapse/storage/schema/main/delta/76/01_add_profiles_full_user_id_column.sql +39 -0
  891. synapse/storage/schema/main/delta/76/02_add_user_filters_full_user_id_column.sql +39 -0
  892. synapse/storage/schema/main/delta/76/03_per_user_experimental_features.sql +46 -0
  893. synapse/storage/schema/main/delta/76/04_add_room_forgetter.sql +43 -0
  894. synapse/storage/schema/main/delta/77/01_add_profiles_not_valid_check.sql.postgres +16 -0
  895. synapse/storage/schema/main/delta/77/02_add_user_filters_not_valid_check.sql.postgres +16 -0
  896. synapse/storage/schema/main/delta/77/03bg_populate_full_user_id_profiles.sql +35 -0
  897. synapse/storage/schema/main/delta/77/04bg_populate_full_user_id_user_filters.sql +35 -0
  898. synapse/storage/schema/main/delta/77/05thread_notifications_backfill.sql +67 -0
  899. synapse/storage/schema/main/delta/77/06thread_notifications_not_null.sql.sqlite +102 -0
  900. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions.sql.postgres +27 -0
  901. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_actions_staging.sql.postgres +27 -0
  902. synapse/storage/schema/main/delta/77/06thread_notifications_not_null_event_push_summary.sql.postgres +29 -0
  903. synapse/storage/schema/main/delta/77/14bg_indices_event_stream_ordering.sql +39 -0
  904. synapse/storage/schema/main/delta/78/01_validate_and_update_profiles.py +99 -0
  905. synapse/storage/schema/main/delta/78/02_validate_and_update_user_filters.py +100 -0
  906. synapse/storage/schema/main/delta/78/03_remove_unused_indexes_user_filters.py +72 -0
  907. synapse/storage/schema/main/delta/78/03event_extremities_constraints.py +65 -0
  908. synapse/storage/schema/main/delta/78/04_add_full_user_id_index_user_filters.py +32 -0
  909. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.postgres +102 -0
  910. synapse/storage/schema/main/delta/79/03_read_write_locks_triggers.sql.sqlite +72 -0
  911. synapse/storage/schema/main/delta/79/04_mitigate_stream_ordering_update_race.py +70 -0
  912. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.postgres +69 -0
  913. synapse/storage/schema/main/delta/79/05_read_write_locks_triggers.sql.sqlite +65 -0
  914. synapse/storage/schema/main/delta/80/01_users_alter_locked.sql +35 -0
  915. synapse/storage/schema/main/delta/80/02_read_write_locks_unlogged.sql.postgres +30 -0
  916. synapse/storage/schema/main/delta/80/02_scheduled_tasks.sql +47 -0
  917. synapse/storage/schema/main/delta/80/03_read_write_locks_triggers.sql.postgres +37 -0
  918. synapse/storage/schema/main/delta/80/04_read_write_locks_deadlock.sql.postgres +71 -0
  919. synapse/storage/schema/main/delta/82/02_scheduled_tasks_index.sql +35 -0
  920. synapse/storage/schema/main/delta/82/04_add_indices_for_purging_rooms.sql +39 -0
  921. synapse/storage/schema/main/delta/82/05gaps.sql +44 -0
  922. synapse/storage/schema/main/delta/83/01_drop_old_tables.sql +43 -0
  923. synapse/storage/schema/main/delta/83/03_instance_name_receipts.sql.sqlite +17 -0
  924. synapse/storage/schema/main/delta/83/05_cross_signing_key_update_grant.sql +34 -0
  925. synapse/storage/schema/main/delta/83/06_event_push_summary_room.sql +36 -0
  926. synapse/storage/schema/main/delta/84/01_auth_links_stats.sql.postgres +20 -0
  927. synapse/storage/schema/main/delta/84/02_auth_links_index.sql +16 -0
  928. synapse/storage/schema/main/delta/84/03_auth_links_analyze.sql.postgres +16 -0
  929. synapse/storage/schema/main/delta/84/04_access_token_index.sql +15 -0
  930. synapse/storage/schema/main/delta/85/01_add_suspended.sql +14 -0
  931. synapse/storage/schema/main/delta/85/02_add_instance_names.sql +27 -0
  932. synapse/storage/schema/main/delta/85/03_new_sequences.sql.postgres +54 -0
  933. synapse/storage/schema/main/delta/85/04_cleanup_device_federation_outbox.sql +15 -0
  934. synapse/storage/schema/main/delta/85/05_add_instance_names_converted_pos.sql +16 -0
  935. synapse/storage/schema/main/delta/85/06_add_room_reports.sql +20 -0
  936. synapse/storage/schema/main/delta/86/01_authenticate_media.sql +15 -0
  937. synapse/storage/schema/main/delta/86/02_receipts_event_id_index.sql +15 -0
  938. synapse/storage/schema/main/delta/87/01_sliding_sync_memberships.sql +169 -0
  939. synapse/storage/schema/main/delta/87/02_per_connection_state.sql +81 -0
  940. synapse/storage/schema/main/delta/87/03_current_state_index.sql +19 -0
  941. synapse/storage/schema/main/delta/88/01_add_delayed_events.sql +43 -0
  942. synapse/storage/schema/main/delta/88/01_custom_profile_fields.sql +15 -0
  943. synapse/storage/schema/main/delta/88/02_fix_sliding_sync_membership_snapshots_forgotten_column.sql +21 -0
  944. synapse/storage/schema/main/delta/88/03_add_otk_ts_added_index.sql +18 -0
  945. synapse/storage/schema/main/delta/88/04_current_state_delta_index.sql +18 -0
  946. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.postgres +19 -0
  947. synapse/storage/schema/main/delta/88/05_drop_old_otks.sql.sqlite +19 -0
  948. synapse/storage/schema/main/delta/88/05_sliding_sync_room_config_index.sql +20 -0
  949. synapse/storage/schema/main/delta/88/06_events_received_ts_index.sql +17 -0
  950. synapse/storage/schema/main/delta/89/01_sliding_sync_membership_snapshot_index.sql +15 -0
  951. synapse/storage/schema/main/delta/90/01_add_column_participant_room_memberships_table.sql +16 -0
  952. synapse/storage/schema/main/delta/91/01_media_hash.sql +28 -0
  953. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.postgres +16 -0
  954. synapse/storage/schema/main/delta/92/01_remove_trigger.sql.sqlite +16 -0
  955. synapse/storage/schema/main/delta/92/02_remove_populate_participant_bg_update.sql +17 -0
  956. synapse/storage/schema/main/delta/92/04_ss_membership_snapshot_idx.sql +16 -0
  957. synapse/storage/schema/main/delta/92/04_thread_subscriptions.sql +59 -0
  958. synapse/storage/schema/main/delta/92/04_thread_subscriptions_seq.sql.postgres +19 -0
  959. synapse/storage/schema/main/delta/92/05_fixup_max_depth_cap.sql +17 -0
  960. synapse/storage/schema/main/delta/92/05_thread_subscriptions_comments.sql.postgres +18 -0
  961. synapse/storage/schema/main/delta/92/06_device_federation_inbox_index.sql +16 -0
  962. synapse/storage/schema/main/delta/92/06_threads_last_sent_stream_ordering_comments.sql.postgres +24 -0
  963. synapse/storage/schema/main/delta/92/07_add_user_reports.sql +22 -0
  964. synapse/storage/schema/main/delta/92/07_event_txn_id_device_id_txn_id2.sql +15 -0
  965. synapse/storage/schema/main/delta/92/08_room_ban_redactions.sql +21 -0
  966. synapse/storage/schema/main/delta/92/08_thread_subscriptions_seq_fixup.sql.postgres +19 -0
  967. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql +20 -0
  968. synapse/storage/schema/main/delta/92/09_thread_subscriptions_update.sql.postgres +18 -0
  969. synapse/storage/schema/main/full_schemas/72/full.sql.postgres +1344 -0
  970. synapse/storage/schema/main/full_schemas/72/full.sql.sqlite +646 -0
  971. synapse/storage/schema/state/delta/23/drop_state_index.sql +35 -0
  972. synapse/storage/schema/state/delta/32/remove_state_indices.sql +38 -0
  973. synapse/storage/schema/state/delta/35/add_state_index.sql +36 -0
  974. synapse/storage/schema/state/delta/35/state.sql +41 -0
  975. synapse/storage/schema/state/delta/35/state_dedupe.sql +36 -0
  976. synapse/storage/schema/state/delta/47/state_group_seq.py +38 -0
  977. synapse/storage/schema/state/delta/56/state_group_room_idx.sql +36 -0
  978. synapse/storage/schema/state/delta/61/02state_groups_state_n_distinct.sql.postgres +34 -0
  979. synapse/storage/schema/state/delta/70/08_state_group_edges_unique.sql +36 -0
  980. synapse/storage/schema/state/delta/89/01_state_groups_deletion.sql +39 -0
  981. synapse/storage/schema/state/delta/90/02_delete_unreferenced_state_groups.sql +16 -0
  982. synapse/storage/schema/state/delta/90/03_remove_old_deletion_bg_update.sql +15 -0
  983. synapse/storage/schema/state/full_schemas/72/full.sql.postgres +30 -0
  984. synapse/storage/schema/state/full_schemas/72/full.sql.sqlite +20 -0
  985. synapse/storage/types.py +185 -0
  986. synapse/storage/util/__init__.py +20 -0
  987. synapse/storage/util/id_generators.py +909 -0
  988. synapse/storage/util/partial_state_events_tracker.py +194 -0
  989. synapse/storage/util/sequence.py +315 -0
  990. synapse/streams/__init__.py +43 -0
  991. synapse/streams/config.py +92 -0
  992. synapse/streams/events.py +203 -0
  993. synapse/synapse_rust/__init__.pyi +3 -0
  994. synapse/synapse_rust/acl.pyi +20 -0
  995. synapse/synapse_rust/events.pyi +136 -0
  996. synapse/synapse_rust/http_client.pyi +32 -0
  997. synapse/synapse_rust/push.pyi +86 -0
  998. synapse/synapse_rust/rendezvous.pyi +30 -0
  999. synapse/synapse_rust/segmenter.pyi +1 -0
  1000. synapse/synapse_rust.abi3.so +0 -0
  1001. synapse/types/__init__.py +1600 -0
  1002. synapse/types/handlers/__init__.py +93 -0
  1003. synapse/types/handlers/policy_server.py +16 -0
  1004. synapse/types/handlers/sliding_sync.py +909 -0
  1005. synapse/types/rest/__init__.py +25 -0
  1006. synapse/types/rest/client/__init__.py +415 -0
  1007. synapse/types/state.py +635 -0
  1008. synapse/types/storage/__init__.py +66 -0
  1009. synapse/util/__init__.py +170 -0
  1010. synapse/util/async_helpers.py +1067 -0
  1011. synapse/util/batching_queue.py +202 -0
  1012. synapse/util/caches/__init__.py +300 -0
  1013. synapse/util/caches/cached_call.py +143 -0
  1014. synapse/util/caches/deferred_cache.py +530 -0
  1015. synapse/util/caches/descriptors.py +694 -0
  1016. synapse/util/caches/dictionary_cache.py +350 -0
  1017. synapse/util/caches/expiringcache.py +251 -0
  1018. synapse/util/caches/lrucache.py +977 -0
  1019. synapse/util/caches/response_cache.py +323 -0
  1020. synapse/util/caches/stream_change_cache.py +370 -0
  1021. synapse/util/caches/treecache.py +189 -0
  1022. synapse/util/caches/ttlcache.py +197 -0
  1023. synapse/util/cancellation.py +63 -0
  1024. synapse/util/check_dependencies.py +335 -0
  1025. synapse/util/clock.py +500 -0
  1026. synapse/util/constants.py +22 -0
  1027. synapse/util/daemonize.py +165 -0
  1028. synapse/util/distributor.py +159 -0
  1029. synapse/util/events.py +134 -0
  1030. synapse/util/file_consumer.py +164 -0
  1031. synapse/util/frozenutils.py +57 -0
  1032. synapse/util/gai_resolver.py +180 -0
  1033. synapse/util/hash.py +38 -0
  1034. synapse/util/httpresourcetree.py +108 -0
  1035. synapse/util/iterutils.py +189 -0
  1036. synapse/util/json.py +56 -0
  1037. synapse/util/linked_list.py +156 -0
  1038. synapse/util/logcontext.py +46 -0
  1039. synapse/util/logformatter.py +28 -0
  1040. synapse/util/macaroons.py +325 -0
  1041. synapse/util/manhole.py +191 -0
  1042. synapse/util/metrics.py +340 -0
  1043. synapse/util/module_loader.py +116 -0
  1044. synapse/util/msisdn.py +51 -0
  1045. synapse/util/patch_inline_callbacks.py +250 -0
  1046. synapse/util/pydantic_models.py +56 -0
  1047. synapse/util/ratelimitutils.py +420 -0
  1048. synapse/util/retryutils.py +339 -0
  1049. synapse/util/rlimit.py +42 -0
  1050. synapse/util/rust.py +134 -0
  1051. synapse/util/sentinel.py +21 -0
  1052. synapse/util/stringutils.py +293 -0
  1053. synapse/util/task_scheduler.py +493 -0
  1054. synapse/util/templates.py +126 -0
  1055. synapse/util/threepids.py +123 -0
  1056. synapse/util/wheel_timer.py +112 -0
  1057. synapse/visibility.py +836 -0
@@ -0,0 +1,1067 @@
1
+ #
2
+ # This file is licensed under the Affero General Public License (AGPL) version 3.
3
+ #
4
+ # Copyright 2014-2016 OpenMarket Ltd
5
+ # Copyright (C) 2023 New Vector, Ltd
6
+ #
7
+ # This program is free software: you can redistribute it and/or modify
8
+ # it under the terms of the GNU Affero General Public License as
9
+ # published by the Free Software Foundation, either version 3 of the
10
+ # License, or (at your option) any later version.
11
+ #
12
+ # See the GNU Affero General Public License for more details:
13
+ # <https://www.gnu.org/licenses/agpl-3.0.html>.
14
+ #
15
+ # Originally licensed under the Apache License, Version 2.0:
16
+ # <http://www.apache.org/licenses/LICENSE-2.0>.
17
+ #
18
+ # [This file includes modifications made by New Vector Limited]
19
+ #
20
+ #
21
+
22
+ import abc
23
+ import asyncio
24
+ import collections
25
+ import inspect
26
+ import itertools
27
+ import logging
28
+ import typing
29
+ from contextlib import asynccontextmanager
30
+ from typing import (
31
+ Any,
32
+ AsyncContextManager,
33
+ AsyncIterator,
34
+ Awaitable,
35
+ Callable,
36
+ Collection,
37
+ Coroutine,
38
+ Generator,
39
+ Generic,
40
+ Hashable,
41
+ Iterable,
42
+ Literal,
43
+ Optional,
44
+ TypeVar,
45
+ Union,
46
+ overload,
47
+ )
48
+
49
+ import attr
50
+ from typing_extensions import Concatenate, ParamSpec, Unpack
51
+
52
+ from twisted.internet import defer
53
+ from twisted.internet.defer import CancelledError
54
+ from twisted.python.failure import Failure
55
+
56
+ from synapse.logging.context import (
57
+ PreserveLoggingContext,
58
+ make_deferred_yieldable,
59
+ run_coroutine_in_background,
60
+ run_in_background,
61
+ )
62
+ from synapse.util.clock import Clock
63
+
64
+ logger = logging.getLogger(__name__)
65
+
66
+ _T = TypeVar("_T")
67
+
68
+
69
+ class AbstractObservableDeferred(Generic[_T], metaclass=abc.ABCMeta):
70
+ """Abstract base class defining the consumer interface of ObservableDeferred"""
71
+
72
+ __slots__ = ()
73
+
74
+ @abc.abstractmethod
75
+ def observe(self) -> "defer.Deferred[_T]":
76
+ """Add a new observer for this ObservableDeferred
77
+
78
+ This returns a brand new deferred that is resolved when the underlying
79
+ deferred is resolved. Interacting with the returned deferred does not
80
+ effect the underlying deferred.
81
+
82
+ Note that the returned Deferred doesn't follow the Synapse logcontext rules -
83
+ you will probably want to `make_deferred_yieldable` it.
84
+ """
85
+ ...
86
+
87
+
88
+ class ObservableDeferred(Generic[_T], AbstractObservableDeferred[_T]):
89
+ """Wraps a deferred object so that we can add observer deferreds. These
90
+ observer deferreds do not affect the callback chain of the original
91
+ deferred.
92
+
93
+ If consumeErrors is true errors will be captured from the origin deferred.
94
+
95
+ Cancelling or otherwise resolving an observer will not affect the original
96
+ ObservableDeferred.
97
+
98
+ NB that it does not attempt to do anything with logcontexts; in general
99
+ you should probably make_deferred_yieldable the deferreds
100
+ returned by `observe`, and ensure that the original deferred runs its
101
+ callbacks in the sentinel logcontext.
102
+ """
103
+
104
+ __slots__ = ["_deferred", "_observers", "_result"]
105
+
106
+ _deferred: "defer.Deferred[_T]"
107
+ _observers: Union[list["defer.Deferred[_T]"], tuple[()]]
108
+ _result: Union[None, tuple[Literal[True], _T], tuple[Literal[False], Failure]]
109
+
110
+ def __init__(self, deferred: "defer.Deferred[_T]", consumeErrors: bool = False):
111
+ object.__setattr__(self, "_deferred", deferred)
112
+ object.__setattr__(self, "_result", None)
113
+ object.__setattr__(self, "_observers", [])
114
+
115
+ def callback(r: _T) -> _T:
116
+ object.__setattr__(self, "_result", (True, r))
117
+
118
+ # once we have set _result, no more entries will be added to _observers,
119
+ # so it's safe to replace it with the empty tuple.
120
+ observers = self._observers
121
+ object.__setattr__(self, "_observers", ())
122
+
123
+ for observer in observers:
124
+ try:
125
+ observer.callback(r)
126
+ except Exception as e:
127
+ logger.exception(
128
+ "%r threw an exception on .callback(%r), ignoring...",
129
+ observer,
130
+ r,
131
+ exc_info=e,
132
+ )
133
+ return r
134
+
135
+ def errback(f: Failure) -> Optional[Failure]:
136
+ object.__setattr__(self, "_result", (False, f))
137
+
138
+ # once we have set _result, no more entries will be added to _observers,
139
+ # so it's safe to replace it with the empty tuple.
140
+ observers = self._observers
141
+ object.__setattr__(self, "_observers", ())
142
+
143
+ for observer in observers:
144
+ # This is a little bit of magic to correctly propagate stack
145
+ # traces when we `await` on one of the observer deferreds.
146
+ f.value.__failure__ = f
147
+ try:
148
+ observer.errback(f)
149
+ except Exception as e:
150
+ logger.exception(
151
+ "%r threw an exception on .errback(%r), ignoring...",
152
+ observer,
153
+ f,
154
+ exc_info=e,
155
+ )
156
+
157
+ if consumeErrors:
158
+ return None
159
+ else:
160
+ return f
161
+
162
+ deferred.addCallbacks(callback, errback)
163
+
164
+ def observe(self) -> "defer.Deferred[_T]":
165
+ """Observe the underlying deferred.
166
+
167
+ This returns a brand new deferred that is resolved when the underlying
168
+ deferred is resolved. Interacting with the returned deferred does not
169
+ effect the underlying deferred.
170
+ """
171
+ if not self._result:
172
+ assert isinstance(self._observers, list)
173
+ d: "defer.Deferred[_T]" = defer.Deferred()
174
+ self._observers.append(d)
175
+ return d
176
+ elif self._result[0]:
177
+ return defer.succeed(self._result[1])
178
+ else:
179
+ return defer.fail(self._result[1])
180
+
181
+ def observers(self) -> "Collection[defer.Deferred[_T]]":
182
+ return self._observers
183
+
184
+ def has_called(self) -> bool:
185
+ return self._result is not None
186
+
187
+ def has_succeeded(self) -> bool:
188
+ return self._result is not None and self._result[0] is True
189
+
190
+ def get_result(self) -> Union[_T, Failure]:
191
+ if self._result is None:
192
+ raise ValueError(f"{self!r} has no result yet")
193
+ return self._result[1]
194
+
195
+ def __getattr__(self, name: str) -> Any:
196
+ return getattr(self._deferred, name)
197
+
198
+ def __setattr__(self, name: str, value: Any) -> None:
199
+ setattr(self._deferred, name, value)
200
+
201
+ def __repr__(self) -> str:
202
+ return "<ObservableDeferred object at %s, result=%r, _deferred=%r>" % (
203
+ id(self),
204
+ self._result,
205
+ self._deferred,
206
+ )
207
+
208
+
209
+ T = TypeVar("T")
210
+
211
+
212
+ async def concurrently_execute(
213
+ func: Callable[[T], Any],
214
+ args: Iterable[T],
215
+ limit: int,
216
+ delay_cancellation: bool = False,
217
+ ) -> None:
218
+ """Executes the function with each argument concurrently while limiting
219
+ the number of concurrent executions.
220
+
221
+ Args:
222
+ func: Function to execute, should return a deferred or coroutine.
223
+ args: List of arguments to pass to func, each invocation of func
224
+ gets a single argument.
225
+ limit: Maximum number of conccurent executions.
226
+ delay_cancellation: Whether to delay cancellation until after the invocations
227
+ have finished.
228
+
229
+ Returns:
230
+ None, when all function invocations have finished. The return values
231
+ from those functions are discarded.
232
+ """
233
+ it = iter(args)
234
+
235
+ async def _concurrently_execute_inner(value: T) -> None:
236
+ try:
237
+ while True:
238
+ await maybe_awaitable(func(value))
239
+ value = next(it)
240
+ except StopIteration:
241
+ pass
242
+
243
+ # We use `itertools.islice` to handle the case where the number of args is
244
+ # less than the limit, avoiding needlessly spawning unnecessary background
245
+ # tasks.
246
+ if delay_cancellation:
247
+ await yieldable_gather_results_delaying_cancellation(
248
+ _concurrently_execute_inner,
249
+ (value for value in itertools.islice(it, limit)),
250
+ )
251
+ else:
252
+ await yieldable_gather_results(
253
+ _concurrently_execute_inner,
254
+ (value for value in itertools.islice(it, limit)),
255
+ )
256
+
257
+
258
+ P = ParamSpec("P")
259
+ R = TypeVar("R")
260
+
261
+
262
+ async def yieldable_gather_results(
263
+ func: Callable[Concatenate[T, P], Awaitable[R]],
264
+ iter: Iterable[T],
265
+ *args: P.args,
266
+ **kwargs: P.kwargs,
267
+ ) -> list[R]:
268
+ """Executes the function with each argument concurrently.
269
+
270
+ Args:
271
+ func: Function to execute that returns a Deferred
272
+ iter: An iterable that yields items that get passed as the first
273
+ argument to the function
274
+ *args: Arguments to be passed to each call to func
275
+ **kwargs: Keyword arguments to be passed to each call to func
276
+
277
+ Returns
278
+ A list containing the results of the function
279
+ """
280
+ try:
281
+ return await make_deferred_yieldable(
282
+ defer.gatherResults(
283
+ [run_in_background(func, item, *args, **kwargs) for item in iter],
284
+ consumeErrors=True,
285
+ )
286
+ )
287
+ except defer.FirstError as dfe:
288
+ # unwrap the error from defer.gatherResults.
289
+
290
+ # The raised exception's traceback only includes func() etc if
291
+ # the 'await' happens before the exception is thrown - ie if the failure
292
+ # happens *asynchronously* - otherwise Twisted throws away the traceback as it
293
+ # could be large.
294
+ #
295
+ # We could maybe reconstruct a fake traceback from Failure.frames. Or maybe
296
+ # we could throw Twisted into the fires of Mordor.
297
+
298
+ # suppress exception chaining, because the FirstError doesn't tell us anything
299
+ # very interesting.
300
+ assert isinstance(dfe.subFailure.value, BaseException)
301
+ raise dfe.subFailure.value from None
302
+
303
+
304
+ async def yieldable_gather_results_delaying_cancellation(
305
+ func: Callable[Concatenate[T, P], Awaitable[R]],
306
+ iter: Iterable[T],
307
+ *args: P.args,
308
+ **kwargs: P.kwargs,
309
+ ) -> list[R]:
310
+ """Executes the function with each argument concurrently.
311
+ Cancellation is delayed until after all the results have been gathered.
312
+
313
+ See `yieldable_gather_results`.
314
+
315
+ Args:
316
+ func: Function to execute that returns a Deferred
317
+ iter: An iterable that yields items that get passed as the first
318
+ argument to the function
319
+ *args: Arguments to be passed to each call to func
320
+ **kwargs: Keyword arguments to be passed to each call to func
321
+
322
+ Returns
323
+ A list containing the results of the function
324
+ """
325
+ try:
326
+ return await make_deferred_yieldable(
327
+ delay_cancellation(
328
+ defer.gatherResults(
329
+ [run_in_background(func, item, *args, **kwargs) for item in iter],
330
+ consumeErrors=True,
331
+ )
332
+ )
333
+ )
334
+ except defer.FirstError as dfe:
335
+ assert isinstance(dfe.subFailure.value, BaseException)
336
+ raise dfe.subFailure.value from None
337
+
338
+
339
+ T1 = TypeVar("T1")
340
+ T2 = TypeVar("T2")
341
+ T3 = TypeVar("T3")
342
+ T4 = TypeVar("T4")
343
+ T5 = TypeVar("T5")
344
+ T6 = TypeVar("T6")
345
+
346
+
347
+ @overload
348
+ def gather_results(
349
+ deferredList: tuple[()], consumeErrors: bool = ...
350
+ ) -> "defer.Deferred[tuple[()]]": ...
351
+
352
+
353
+ @overload
354
+ def gather_results(
355
+ deferredList: tuple["defer.Deferred[T1]"],
356
+ consumeErrors: bool = ...,
357
+ ) -> "defer.Deferred[tuple[T1]]": ...
358
+
359
+
360
+ @overload
361
+ def gather_results(
362
+ deferredList: tuple["defer.Deferred[T1]", "defer.Deferred[T2]"],
363
+ consumeErrors: bool = ...,
364
+ ) -> "defer.Deferred[tuple[T1, T2]]": ...
365
+
366
+
367
+ @overload
368
+ def gather_results(
369
+ deferredList: tuple[
370
+ "defer.Deferred[T1]", "defer.Deferred[T2]", "defer.Deferred[T3]"
371
+ ],
372
+ consumeErrors: bool = ...,
373
+ ) -> "defer.Deferred[tuple[T1, T2, T3]]": ...
374
+
375
+
376
+ @overload
377
+ def gather_results(
378
+ deferredList: tuple[
379
+ "defer.Deferred[T1]",
380
+ "defer.Deferred[T2]",
381
+ "defer.Deferred[T3]",
382
+ "defer.Deferred[T4]",
383
+ ],
384
+ consumeErrors: bool = ...,
385
+ ) -> "defer.Deferred[tuple[T1, T2, T3, T4]]": ...
386
+
387
+
388
+ def gather_results( # type: ignore[misc]
389
+ deferredList: tuple["defer.Deferred[T1]", ...],
390
+ consumeErrors: bool = False,
391
+ ) -> "defer.Deferred[tuple[T1, ...]]":
392
+ """Combines a tuple of `Deferred`s into a single `Deferred`.
393
+
394
+ Wraps `defer.gatherResults` to provide type annotations that support heterogenous
395
+ lists of `Deferred`s.
396
+ """
397
+ # The `type: ignore[misc]` above suppresses
398
+ # "Overloaded function implementation cannot produce return type of signature 1/2/3"
399
+ deferred = defer.gatherResults(deferredList, consumeErrors=consumeErrors)
400
+ return deferred.addCallback(tuple)
401
+
402
+
403
+ @overload
404
+ async def gather_optional_coroutines(
405
+ *coroutines: Unpack[tuple[Optional[Coroutine[Any, Any, T1]]]],
406
+ ) -> tuple[Optional[T1]]: ...
407
+
408
+
409
+ @overload
410
+ async def gather_optional_coroutines(
411
+ *coroutines: Unpack[
412
+ tuple[
413
+ Optional[Coroutine[Any, Any, T1]],
414
+ Optional[Coroutine[Any, Any, T2]],
415
+ ]
416
+ ],
417
+ ) -> tuple[Optional[T1], Optional[T2]]: ...
418
+
419
+
420
+ @overload
421
+ async def gather_optional_coroutines(
422
+ *coroutines: Unpack[
423
+ tuple[
424
+ Optional[Coroutine[Any, Any, T1]],
425
+ Optional[Coroutine[Any, Any, T2]],
426
+ Optional[Coroutine[Any, Any, T3]],
427
+ ]
428
+ ],
429
+ ) -> tuple[Optional[T1], Optional[T2], Optional[T3]]: ...
430
+
431
+
432
+ @overload
433
+ async def gather_optional_coroutines(
434
+ *coroutines: Unpack[
435
+ tuple[
436
+ Optional[Coroutine[Any, Any, T1]],
437
+ Optional[Coroutine[Any, Any, T2]],
438
+ Optional[Coroutine[Any, Any, T3]],
439
+ Optional[Coroutine[Any, Any, T4]],
440
+ ]
441
+ ],
442
+ ) -> tuple[Optional[T1], Optional[T2], Optional[T3], Optional[T4]]: ...
443
+
444
+
445
+ @overload
446
+ async def gather_optional_coroutines(
447
+ *coroutines: Unpack[
448
+ tuple[
449
+ Optional[Coroutine[Any, Any, T1]],
450
+ Optional[Coroutine[Any, Any, T2]],
451
+ Optional[Coroutine[Any, Any, T3]],
452
+ Optional[Coroutine[Any, Any, T4]],
453
+ Optional[Coroutine[Any, Any, T5]],
454
+ ]
455
+ ],
456
+ ) -> tuple[Optional[T1], Optional[T2], Optional[T3], Optional[T4], Optional[T5]]: ...
457
+
458
+
459
+ @overload
460
+ async def gather_optional_coroutines(
461
+ *coroutines: Unpack[
462
+ tuple[
463
+ Optional[Coroutine[Any, Any, T1]],
464
+ Optional[Coroutine[Any, Any, T2]],
465
+ Optional[Coroutine[Any, Any, T3]],
466
+ Optional[Coroutine[Any, Any, T4]],
467
+ Optional[Coroutine[Any, Any, T5]],
468
+ Optional[Coroutine[Any, Any, T6]],
469
+ ]
470
+ ],
471
+ ) -> tuple[
472
+ Optional[T1], Optional[T2], Optional[T3], Optional[T4], Optional[T5], Optional[T6]
473
+ ]: ...
474
+
475
+
476
+ async def gather_optional_coroutines(
477
+ *coroutines: Unpack[tuple[Optional[Coroutine[Any, Any, T1]], ...]],
478
+ ) -> tuple[Optional[T1], ...]:
479
+ """Helper function that allows waiting on multiple coroutines at once.
480
+
481
+ The return value is a tuple of the return values of the coroutines in order.
482
+
483
+ If a `None` is passed instead of a coroutine, it will be ignored and a None
484
+ is returned in the tuple.
485
+
486
+ Note: For typechecking we need to have an explicit overload for each
487
+ distinct number of coroutines passed in. If you see type problems, it's
488
+ likely because you're using many arguments and you need to add a new
489
+ overload above.
490
+ """
491
+
492
+ try:
493
+ results = await make_deferred_yieldable(
494
+ defer.gatherResults(
495
+ [
496
+ run_coroutine_in_background(coroutine)
497
+ for coroutine in coroutines
498
+ if coroutine is not None
499
+ ],
500
+ consumeErrors=True,
501
+ )
502
+ )
503
+
504
+ results_iter = iter(results)
505
+ return tuple(
506
+ next(results_iter) if coroutine is not None else None
507
+ for coroutine in coroutines
508
+ )
509
+ except defer.FirstError as dfe:
510
+ # unwrap the error from defer.gatherResults.
511
+
512
+ # The raised exception's traceback only includes func() etc if
513
+ # the 'await' happens before the exception is thrown - ie if the failure
514
+ # happens *asynchronously* - otherwise Twisted throws away the traceback as it
515
+ # could be large.
516
+ #
517
+ # We could maybe reconstruct a fake traceback from Failure.frames. Or maybe
518
+ # we could throw Twisted into the fires of Mordor.
519
+
520
+ # suppress exception chaining, because the FirstError doesn't tell us anything
521
+ # very interesting.
522
+ assert isinstance(dfe.subFailure.value, BaseException)
523
+ raise dfe.subFailure.value from None
524
+
525
+
526
+ @attr.s(slots=True, auto_attribs=True)
527
+ class _LinearizerEntry:
528
+ # The number of things executing.
529
+ count: int
530
+ # Deferreds for the things blocked from executing.
531
+ deferreds: typing.OrderedDict["defer.Deferred[None]", Literal[1]]
532
+
533
+
534
+ class Linearizer:
535
+ """Limits concurrent access to resources based on a key. Useful to ensure
536
+ only a few things happen at a time on a given resource.
537
+
538
+ Example:
539
+
540
+ async with limiter.queue("test_key"):
541
+ # do some work.
542
+
543
+ """
544
+
545
+ def __init__(
546
+ self,
547
+ name: str,
548
+ clock: Clock,
549
+ max_count: int = 1,
550
+ ):
551
+ """
552
+ Args:
553
+ name: TODO
554
+ max_count: The maximum number of concurrent accesses
555
+ clock: (ideally, the homeserver clock `hs.get_clock()`)
556
+ """
557
+ self.name = name
558
+ self.max_count = max_count
559
+ self._clock = clock
560
+
561
+ # key_to_defer is a map from the key to a _LinearizerEntry.
562
+ self.key_to_defer: dict[Hashable, _LinearizerEntry] = {}
563
+
564
+ def is_queued(self, key: Hashable) -> bool:
565
+ """Checks whether there is a process queued up waiting"""
566
+ entry = self.key_to_defer.get(key)
567
+ if not entry:
568
+ # No entry so nothing is waiting.
569
+ return False
570
+
571
+ # There are waiting deferreds only in the OrderedDict of deferreds is
572
+ # non-empty.
573
+ return bool(entry.deferreds)
574
+
575
+ def queue(self, key: Hashable) -> AsyncContextManager[None]:
576
+ @asynccontextmanager
577
+ async def _ctx_manager() -> AsyncIterator[None]:
578
+ entry = await self._acquire_lock(key)
579
+ try:
580
+ yield
581
+ finally:
582
+ self._release_lock(key, entry)
583
+
584
+ return _ctx_manager()
585
+
586
+ async def _acquire_lock(self, key: Hashable) -> _LinearizerEntry:
587
+ """Acquires a linearizer lock, waiting if necessary.
588
+
589
+ Returns once we have secured the lock.
590
+ """
591
+ entry = self.key_to_defer.setdefault(
592
+ key, _LinearizerEntry(0, collections.OrderedDict())
593
+ )
594
+
595
+ if entry.count < self.max_count:
596
+ # The number of things executing is less than the maximum.
597
+ logger.debug(
598
+ "Acquired uncontended linearizer lock %r for key %r", self.name, key
599
+ )
600
+ entry.count += 1
601
+ return entry
602
+
603
+ # Otherwise, the number of things executing is at the maximum and we have to
604
+ # add a deferred to the list of blocked items.
605
+ # When one of the things currently executing finishes it will callback
606
+ # this item so that it can continue executing.
607
+ logger.debug("Waiting to acquire linearizer lock %r for key %r", self.name, key)
608
+
609
+ new_defer: "defer.Deferred[None]" = make_deferred_yieldable(defer.Deferred())
610
+ entry.deferreds[new_defer] = 1
611
+
612
+ try:
613
+ await new_defer
614
+ except Exception as e:
615
+ logger.info("defer %r got err %r", new_defer, e)
616
+ if isinstance(e, CancelledError):
617
+ logger.debug(
618
+ "Cancelling wait for linearizer lock %r for key %r",
619
+ self.name,
620
+ key,
621
+ )
622
+ else:
623
+ logger.warning(
624
+ "Unexpected exception waiting for linearizer lock %r for key %r",
625
+ self.name,
626
+ key,
627
+ )
628
+
629
+ # we just have to take ourselves back out of the queue.
630
+ del entry.deferreds[new_defer]
631
+ raise
632
+
633
+ logger.debug("Acquired linearizer lock %r for key %r", self.name, key)
634
+ entry.count += 1
635
+
636
+ # if the code holding the lock completes synchronously, then it
637
+ # will recursively run the next claimant on the list. That can
638
+ # relatively rapidly lead to stack exhaustion. This is essentially
639
+ # the same problem as http://twistedmatrix.com/trac/ticket/9304.
640
+ #
641
+ # In order to break the cycle, we add a cheeky sleep(0) here to
642
+ # ensure that we fall back to the reactor between each iteration.
643
+ #
644
+ # This needs to happen while we hold the lock. We could put it on the
645
+ # exit path, but that would slow down the uncontended case.
646
+ try:
647
+ await self._clock.sleep(0)
648
+ except CancelledError:
649
+ self._release_lock(key, entry)
650
+ raise
651
+
652
+ return entry
653
+
654
+ def _release_lock(self, key: Hashable, entry: _LinearizerEntry) -> None:
655
+ """Releases a held linearizer lock."""
656
+ logger.debug("Releasing linearizer lock %r for key %r", self.name, key)
657
+
658
+ # We've finished executing so check if there are any things
659
+ # blocked waiting to execute and start one of them
660
+ entry.count -= 1
661
+
662
+ if entry.deferreds:
663
+ (next_def, _) = entry.deferreds.popitem(last=False)
664
+
665
+ # we need to run the next thing in the sentinel context.
666
+ with PreserveLoggingContext():
667
+ next_def.callback(None)
668
+ elif entry.count == 0:
669
+ # We were the last thing for this key: remove it from the
670
+ # map.
671
+ del self.key_to_defer[key]
672
+
673
+
674
+ class ReadWriteLock:
675
+ """An async read write lock.
676
+
677
+ Example:
678
+
679
+ async with read_write_lock.read("test_key"):
680
+ # do some work
681
+ """
682
+
683
+ # IMPLEMENTATION NOTES
684
+ #
685
+ # We track the most recent queued reader and writer deferreds (which get
686
+ # resolved when they release the lock).
687
+ #
688
+ # Read: We know its safe to acquire a read lock when the latest writer has
689
+ # been resolved. The new reader is appended to the list of latest readers.
690
+ #
691
+ # Write: We know its safe to acquire the write lock when both the latest
692
+ # writers and readers have been resolved. The new writer replaces the latest
693
+ # writer.
694
+
695
+ def __init__(self) -> None:
696
+ # Latest readers queued
697
+ self.key_to_current_readers: dict[str, set[defer.Deferred]] = {}
698
+
699
+ # Latest writer queued
700
+ self.key_to_current_writer: dict[str, defer.Deferred] = {}
701
+
702
+ def read(self, key: str) -> AsyncContextManager:
703
+ @asynccontextmanager
704
+ async def _ctx_manager() -> AsyncIterator[None]:
705
+ new_defer: "defer.Deferred[None]" = defer.Deferred()
706
+
707
+ curr_readers = self.key_to_current_readers.setdefault(key, set())
708
+ curr_writer = self.key_to_current_writer.get(key, None)
709
+
710
+ curr_readers.add(new_defer)
711
+
712
+ try:
713
+ # We wait for the latest writer to finish writing. We can safely ignore
714
+ # any existing readers... as they're readers.
715
+ # May raise a `CancelledError` if the `Deferred` wrapping us is
716
+ # cancelled. The `Deferred` we are waiting on must not be cancelled,
717
+ # since we do not own it.
718
+ if curr_writer:
719
+ await make_deferred_yieldable(stop_cancellation(curr_writer))
720
+ yield
721
+ finally:
722
+ with PreserveLoggingContext():
723
+ new_defer.callback(None)
724
+ self.key_to_current_readers.get(key, set()).discard(new_defer)
725
+
726
+ return _ctx_manager()
727
+
728
+ def write(self, key: str) -> AsyncContextManager:
729
+ @asynccontextmanager
730
+ async def _ctx_manager() -> AsyncIterator[None]:
731
+ new_defer: "defer.Deferred[None]" = defer.Deferred()
732
+
733
+ curr_readers = self.key_to_current_readers.get(key, set())
734
+ curr_writer = self.key_to_current_writer.get(key, None)
735
+
736
+ # We wait on all latest readers and writer.
737
+ to_wait_on = list(curr_readers)
738
+ if curr_writer:
739
+ to_wait_on.append(curr_writer)
740
+
741
+ # We can clear the list of current readers since `new_defer` waits
742
+ # for them to finish.
743
+ curr_readers.clear()
744
+ self.key_to_current_writer[key] = new_defer
745
+
746
+ to_wait_on_defer = defer.gatherResults(to_wait_on)
747
+ try:
748
+ # Wait for all current readers and the latest writer to finish.
749
+ # May raise a `CancelledError` immediately after the wait if the
750
+ # `Deferred` wrapping us is cancelled. We must only release the lock
751
+ # once we have acquired it, hence the use of `delay_cancellation`
752
+ # rather than `stop_cancellation`.
753
+ await make_deferred_yieldable(delay_cancellation(to_wait_on_defer))
754
+ yield
755
+ finally:
756
+ # Release the lock.
757
+ with PreserveLoggingContext():
758
+ new_defer.callback(None)
759
+ # `self.key_to_current_writer[key]` may be missing if there was another
760
+ # writer waiting for us and it completed entirely within the
761
+ # `new_defer.callback()` call above.
762
+ if self.key_to_current_writer.get(key) == new_defer:
763
+ self.key_to_current_writer.pop(key)
764
+
765
+ return _ctx_manager()
766
+
767
+
768
+ def timeout_deferred(
769
+ *,
770
+ deferred: "defer.Deferred[_T]",
771
+ timeout: float,
772
+ cancel_on_shutdown: bool = True,
773
+ clock: Clock,
774
+ ) -> "defer.Deferred[_T]":
775
+ """The in built twisted `Deferred.addTimeout` fails to time out deferreds
776
+ that have a canceller that throws exceptions. This method creates a new
777
+ deferred that wraps and times out the given deferred, correctly handling
778
+ the case where the given deferred's canceller throws.
779
+
780
+ (See https://twistedmatrix.com/trac/ticket/9534)
781
+
782
+ NOTE: Unlike `Deferred.addTimeout`, this function returns a new deferred.
783
+
784
+ NOTE: the TimeoutError raised by the resultant deferred is
785
+ twisted.internet.defer.TimeoutError, which is *different* to the built-in
786
+ TimeoutError, as well as various other TimeoutErrors you might have imported.
787
+
788
+ Args:
789
+ deferred: The Deferred to potentially timeout.
790
+ timeout: Timeout in seconds
791
+ cancel_on_shutdown: Whether this call should be tracked for cleanup during
792
+ shutdown. In general, all calls should be tracked. There may be a use case
793
+ not to track calls with a `timeout` of 0 (or similarly short) since tracking
794
+ them may result in rapid insertions and removals of tracked calls
795
+ unnecessarily. But unless a specific instance of tracking proves to be an
796
+ issue, we can just track all delayed calls.
797
+ clock: The `Clock` instance used to track delayed calls.
798
+
799
+
800
+ Returns:
801
+ A new Deferred, which will errback with defer.TimeoutError on timeout.
802
+ """
803
+ new_d: "defer.Deferred[_T]" = defer.Deferred()
804
+
805
+ timed_out = [False]
806
+
807
+ def time_it_out() -> None:
808
+ timed_out[0] = True
809
+
810
+ try:
811
+ with PreserveLoggingContext():
812
+ deferred.cancel()
813
+ except Exception: # if we throw any exception it'll break time outs
814
+ logger.exception("Canceller failed during timeout")
815
+
816
+ # the cancel() call should have set off a chain of errbacks which
817
+ # will have errbacked new_d, but in case it hasn't, errback it now.
818
+
819
+ if not new_d.called:
820
+ new_d.errback(defer.TimeoutError("Timed out after %gs" % (timeout,)))
821
+
822
+ # We don't track these calls since they are short.
823
+ delayed_call = clock.call_later(
824
+ timeout, time_it_out, call_later_cancel_on_shutdown=cancel_on_shutdown
825
+ )
826
+
827
+ def convert_cancelled(value: Failure) -> Failure:
828
+ # if the original deferred was cancelled, and our timeout has fired, then
829
+ # the reason it was cancelled was due to our timeout. Turn the CancelledError
830
+ # into a TimeoutError.
831
+ if timed_out[0] and value.check(CancelledError):
832
+ raise defer.TimeoutError("Timed out after %gs" % (timeout,))
833
+ return value
834
+
835
+ deferred.addErrback(convert_cancelled)
836
+
837
+ def cancel_timeout(result: _T) -> _T:
838
+ # stop the pending call to cancel the deferred if it's been fired
839
+ if delayed_call.active():
840
+ delayed_call.cancel()
841
+ return result
842
+
843
+ deferred.addBoth(cancel_timeout)
844
+
845
+ def success_cb(val: _T) -> None:
846
+ if not new_d.called:
847
+ new_d.callback(val)
848
+
849
+ def failure_cb(val: Failure) -> None:
850
+ if not new_d.called:
851
+ new_d.errback(val)
852
+
853
+ deferred.addCallbacks(success_cb, failure_cb)
854
+
855
+ return new_d
856
+
857
+
858
+ @attr.s(slots=True, frozen=True, auto_attribs=True)
859
+ class DoneAwaitable(Awaitable[R]):
860
+ """Simple awaitable that returns the provided value."""
861
+
862
+ value: R
863
+
864
+ def __await__(self) -> Generator[Any, None, R]:
865
+ yield None
866
+ return self.value
867
+
868
+
869
+ def maybe_awaitable(value: Union[Awaitable[R], R]) -> Awaitable[R]:
870
+ """Convert a value to an awaitable if not already an awaitable."""
871
+ if inspect.isawaitable(value):
872
+ return value
873
+
874
+ # For some reason mypy doesn't deduce that value is not Awaitable here, even though
875
+ # inspect.isawaitable returns a TypeGuard.
876
+ assert not isinstance(value, Awaitable)
877
+ return DoneAwaitable(value)
878
+
879
+
880
+ def stop_cancellation(deferred: "defer.Deferred[T]") -> "defer.Deferred[T]":
881
+ """Prevent a `Deferred` from being cancelled by wrapping it in another `Deferred`.
882
+
883
+ Args:
884
+ deferred: The `Deferred` to protect against cancellation. Must not follow the
885
+ Synapse logcontext rules.
886
+
887
+ Returns:
888
+ A new `Deferred`, which will contain the result of the original `Deferred`.
889
+ The new `Deferred` will not propagate cancellation through to the original.
890
+ When cancelled, the new `Deferred` will fail with a `CancelledError`.
891
+
892
+ The new `Deferred` will not follow the Synapse logcontext rules and should be
893
+ wrapped with `make_deferred_yieldable`.
894
+ """
895
+ new_deferred: "defer.Deferred[T]" = defer.Deferred()
896
+ deferred.chainDeferred(new_deferred)
897
+ return new_deferred
898
+
899
+
900
+ @overload
901
+ def delay_cancellation(awaitable: "defer.Deferred[T]") -> "defer.Deferred[T]": ...
902
+
903
+
904
+ @overload
905
+ def delay_cancellation(awaitable: Coroutine[Any, Any, T]) -> "defer.Deferred[T]": ...
906
+
907
+
908
+ @overload
909
+ def delay_cancellation(awaitable: Awaitable[T]) -> Awaitable[T]: ...
910
+
911
+
912
+ def delay_cancellation(awaitable: Awaitable[T]) -> Awaitable[T]:
913
+ """Delay cancellation of a coroutine or `Deferred` awaitable until it resolves.
914
+
915
+ Has the same effect as `stop_cancellation`, but the returned `Deferred` will not
916
+ resolve with a `CancelledError` until the original awaitable resolves.
917
+
918
+ Args:
919
+ deferred: The coroutine or `Deferred` to protect against cancellation. May
920
+ optionally follow the Synapse logcontext rules.
921
+
922
+ Returns:
923
+ A new `Deferred`, which will contain the result of the original coroutine or
924
+ `Deferred`. The new `Deferred` will not propagate cancellation through to the
925
+ original coroutine or `Deferred`.
926
+
927
+ When cancelled, the new `Deferred` will wait until the original coroutine or
928
+ `Deferred` resolves before failing with a `CancelledError`.
929
+
930
+ The new `Deferred` will follow the Synapse logcontext rules if `awaitable`
931
+ follows the Synapse logcontext rules. Otherwise the new `Deferred` should be
932
+ wrapped with `make_deferred_yieldable`.
933
+ """
934
+
935
+ # First, convert the awaitable into a `Deferred`.
936
+ if isinstance(awaitable, defer.Deferred):
937
+ deferred = awaitable
938
+ elif asyncio.iscoroutine(awaitable):
939
+ # Ideally we'd use `Deferred.fromCoroutine()` here, to save on redundant
940
+ # type-checking, but we'd need Twisted >= 21.2.
941
+ deferred = defer.ensureDeferred(awaitable)
942
+ else:
943
+ # We have no idea what to do with this awaitable.
944
+ # We assume it's already resolved, such as `DoneAwaitable`s or `Future`s from
945
+ # `make_awaitable`, and let the caller `await` it normally.
946
+ return awaitable
947
+
948
+ def handle_cancel(new_deferred: "defer.Deferred[T]") -> None:
949
+ # before the new deferred is cancelled, we `pause` it to stop the cancellation
950
+ # propagating. we then `unpause` it once the wrapped deferred completes, to
951
+ # propagate the exception.
952
+ new_deferred.pause()
953
+ new_deferred.errback(Failure(CancelledError()))
954
+
955
+ deferred.addBoth(lambda _: new_deferred.unpause())
956
+
957
+ new_deferred: "defer.Deferred[T]" = defer.Deferred(handle_cancel)
958
+ deferred.chainDeferred(new_deferred)
959
+ return new_deferred
960
+
961
+
962
+ class AwakenableSleeper:
963
+ """Allows explicitly waking up deferreds related to an entity that are
964
+ currently sleeping.
965
+ """
966
+
967
+ def __init__(self, clock: Clock) -> None:
968
+ self._streams: dict[str, set[defer.Deferred[None]]] = {}
969
+ self._clock = clock
970
+
971
+ def wake(self, name: str) -> None:
972
+ """Wake everything related to `name` that is currently sleeping."""
973
+ stream_set = self._streams.pop(name, set())
974
+ for deferred in stream_set:
975
+ try:
976
+ with PreserveLoggingContext():
977
+ deferred.callback(None)
978
+ except Exception:
979
+ pass
980
+
981
+ async def sleep(self, name: str, delay_ms: int) -> None:
982
+ """Sleep for the given number of milliseconds, or return if the given
983
+ `name` is explicitly woken up.
984
+ """
985
+
986
+ # Create a deferred that gets called in N seconds
987
+ sleep_deferred: "defer.Deferred[None]" = defer.Deferred()
988
+ call = self._clock.call_later(
989
+ delay_ms / 1000,
990
+ sleep_deferred.callback,
991
+ None,
992
+ )
993
+
994
+ # Create a deferred that will get called if `wake` is called with
995
+ # the same `name`.
996
+ stream_set = self._streams.setdefault(name, set())
997
+ notify_deferred: "defer.Deferred[None]" = defer.Deferred()
998
+ stream_set.add(notify_deferred)
999
+
1000
+ try:
1001
+ # Wait for either the delay or for `wake` to be called.
1002
+ await make_deferred_yieldable(
1003
+ defer.DeferredList(
1004
+ [sleep_deferred, notify_deferred],
1005
+ fireOnOneCallback=True,
1006
+ fireOnOneErrback=True,
1007
+ consumeErrors=True,
1008
+ )
1009
+ )
1010
+ finally:
1011
+ # Clean up the state
1012
+ curr_stream_set = self._streams.get(name)
1013
+ if curr_stream_set is not None:
1014
+ curr_stream_set.discard(notify_deferred)
1015
+ if len(curr_stream_set) == 0:
1016
+ self._streams.pop(name)
1017
+
1018
+ # Cancel the sleep if we were woken up
1019
+ if call.active():
1020
+ call.cancel()
1021
+
1022
+
1023
+ class DeferredEvent:
1024
+ """Like threading.Event but for async code"""
1025
+
1026
+ def __init__(self, clock: Clock) -> None:
1027
+ self._clock = clock
1028
+ self._deferred: "defer.Deferred[None]" = defer.Deferred()
1029
+
1030
+ def set(self) -> None:
1031
+ if not self._deferred.called:
1032
+ self._deferred.callback(None)
1033
+
1034
+ def clear(self) -> None:
1035
+ if self._deferred.called:
1036
+ self._deferred = defer.Deferred()
1037
+
1038
+ def is_set(self) -> bool:
1039
+ return self._deferred.called
1040
+
1041
+ async def wait(self, timeout_seconds: float) -> bool:
1042
+ if self.is_set():
1043
+ return True
1044
+
1045
+ # Create a deferred that gets called in N seconds
1046
+ sleep_deferred: "defer.Deferred[None]" = defer.Deferred()
1047
+ call = self._clock.call_later(
1048
+ timeout_seconds,
1049
+ sleep_deferred.callback,
1050
+ None,
1051
+ )
1052
+
1053
+ try:
1054
+ await make_deferred_yieldable(
1055
+ defer.DeferredList(
1056
+ [sleep_deferred, self._deferred],
1057
+ fireOnOneCallback=True,
1058
+ fireOnOneErrback=True,
1059
+ consumeErrors=True,
1060
+ )
1061
+ )
1062
+ finally:
1063
+ # Cancel the sleep if we were woken up
1064
+ if call.active():
1065
+ call.cancel()
1066
+
1067
+ return self.is_set()