mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2024-10-01 08:25:44 -04:00
Add experimental support for PyPy. (#9123)
* Adds proper dependencies. * Minor fixes in database layer.
This commit is contained in:
parent
b0f4119b8b
commit
2814028ce5
1
changelog.d/9123.misc
Normal file
1
changelog.d/9123.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
Add experimental support for running Synapse with PyPy.
|
@ -86,8 +86,12 @@ REQUIREMENTS = [
|
|||||||
|
|
||||||
CONDITIONAL_REQUIREMENTS = {
|
CONDITIONAL_REQUIREMENTS = {
|
||||||
"matrix-synapse-ldap3": ["matrix-synapse-ldap3>=0.1"],
|
"matrix-synapse-ldap3": ["matrix-synapse-ldap3>=0.1"],
|
||||||
|
"postgres": [
|
||||||
# we use execute_values with the fetch param, which arrived in psycopg 2.8.
|
# we use execute_values with the fetch param, which arrived in psycopg 2.8.
|
||||||
"postgres": ["psycopg2>=2.8"],
|
"psycopg2>=2.8 ; platform_python_implementation != 'PyPy'",
|
||||||
|
"psycopg2cffi>=2.8 ; platform_python_implementation == 'PyPy'",
|
||||||
|
"psycopg2cffi-compat==1.1 ; platform_python_implementation == 'PyPy'",
|
||||||
|
],
|
||||||
# ACME support is required to provision TLS certificates from authorities
|
# ACME support is required to provision TLS certificates from authorities
|
||||||
# that use the protocol, such as Let's Encrypt.
|
# that use the protocol, such as Let's Encrypt.
|
||||||
"acme": [
|
"acme": [
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
import platform
|
|
||||||
|
|
||||||
from ._base import BaseDatabaseEngine, IncorrectDatabaseSetup
|
from ._base import BaseDatabaseEngine, IncorrectDatabaseSetup
|
||||||
from .postgres import PostgresEngine
|
from .postgres import PostgresEngine
|
||||||
@ -28,10 +27,7 @@ def create_engine(database_config) -> BaseDatabaseEngine:
|
|||||||
return Sqlite3Engine(sqlite3, database_config)
|
return Sqlite3Engine(sqlite3, database_config)
|
||||||
|
|
||||||
if name == "psycopg2":
|
if name == "psycopg2":
|
||||||
# pypy requires psycopg2cffi rather than psycopg2
|
# Note that psycopg2cffi-compat provides the psycopg2 module on pypy.
|
||||||
if platform.python_implementation() == "PyPy":
|
|
||||||
import psycopg2cffi as psycopg2 # type: ignore
|
|
||||||
else:
|
|
||||||
import psycopg2 # type: ignore
|
import psycopg2 # type: ignore
|
||||||
|
|
||||||
return PostgresEngine(psycopg2, database_config)
|
return PostgresEngine(psycopg2, database_config)
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
import platform
|
||||||
import struct
|
import struct
|
||||||
import threading
|
import threading
|
||||||
import typing
|
import typing
|
||||||
@ -30,6 +31,11 @@ class Sqlite3Engine(BaseDatabaseEngine["sqlite3.Connection"]):
|
|||||||
database = database_config.get("args", {}).get("database")
|
database = database_config.get("args", {}).get("database")
|
||||||
self._is_in_memory = database in (None, ":memory:",)
|
self._is_in_memory = database in (None, ":memory:",)
|
||||||
|
|
||||||
|
if platform.python_implementation() == "PyPy":
|
||||||
|
# pypy's sqlite3 module doesn't handle bytearrays, convert them
|
||||||
|
# back to bytes.
|
||||||
|
database_module.register_adapter(bytearray, lambda array: bytes(array))
|
||||||
|
|
||||||
# The current max state_group, or None if we haven't looked
|
# The current max state_group, or None if we haven't looked
|
||||||
# in the DB yet.
|
# in the DB yet.
|
||||||
self._current_state_group_id = None
|
self._current_state_group_id = None
|
||||||
|
Loading…
Reference in New Issue
Block a user