Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Contributor Guide

Synapse is a Python application that has Rust modules via pyo3 for performance.

## Dev Environment Tips
- Source code is primarily in `synapse/`, tests are in `tests/`.
- Run `poetry install --dev` to install development python dependencies. This will also build and install the Synapse rust code.
- Use `./scripts-dev/lint.sh` to lint the codebase (this attempts to fix issues as well). This should be run and produce no errors before every commit.

## Dev Tips
- If any change creates a breaking change or requires downstream users (sysadmins) to update their environment, call it out in `docs/upgrade.md` as a new entry with the title "# Upgrading to vx.yy.z" with the details of what they should do or be aware of.
- All code comments and documentation should be written in Markdown, NOT RST.

## Testing Instructions
- Find the CI plan in the .github/workflows folder.
- Use `poetry run trial tests` to run all unit tests, or `poetry run trial tests.metrics.test_phone_home_stats.PhoneHomeStatsTestCase` (for example) to run a single test case. The commit should pass all tests before you merge.
- Some typing warnings are expected currently. Fix any test or type *errors* until the whole suite is green.
- Add or update relevant tests for the code you change, even if nobody asked.

6 changes: 3 additions & 3 deletions synapse/config/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import argparse
import errno
import importlib.resources as importlib_resources
import logging
import os
import re
Expand All @@ -46,7 +47,6 @@

import attr
import jinja2
import pkg_resources
import yaml

from synapse.types import StrSequence
Expand Down Expand Up @@ -174,8 +174,8 @@ def __init__(self, root_config: "RootConfig"):
self.root = root_config

# Get the path to the default Synapse template directory
self.default_template_dir = pkg_resources.resource_filename(
"synapse", "res/templates"
self.default_template_dir = str(
importlib_resources.files("synapse").joinpath("res", "templates")
)

@staticmethod
Expand Down
9 changes: 7 additions & 2 deletions synapse/config/oembed.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@
# [This file includes modifications made by New Vector Limited]
#
#
import importlib.resources as importlib_resources
import json
import re
from typing import Any, Dict, Iterable, List, Optional, Pattern
from urllib import parse as urlparse

import attr
import pkg_resources

from synapse.types import JsonDict, StrSequence

Expand Down Expand Up @@ -64,7 +64,12 @@ def _parse_and_validate_providers(
"""
# Whether to use the packaged providers.json file.
if not oembed_config.get("disable_default_providers") or False:
with pkg_resources.resource_stream("synapse", "res/providers.json") as s:
path = (
importlib_resources.files("synapse")
.joinpath("res")
.joinpath("providers.json")
)
with path.open("r", encoding="utf-8") as s:
providers = json.load(s)

yield from self._parse_and_validate_provider(
Expand Down
2 changes: 1 addition & 1 deletion synapse/metrics/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@
)

import attr
from pkg_resources import parse_version
from packaging.version import parse as parse_version
from prometheus_client import (
CollectorRegistry,
Counter,
Expand Down
9 changes: 5 additions & 4 deletions tests/push/test_email.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,12 @@
#
#
import email.message
import importlib.resources as importlib_resources
import os
from http import HTTPStatus
from typing import Any, Dict, List, Sequence, Tuple

import attr
import pkg_resources
from parameterized import parameterized

from twisted.internet.defer import Deferred
Expand Down Expand Up @@ -59,11 +59,12 @@ class EmailPusherTests(HomeserverTestCase):

def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
config = self.default_config()
templates = (
importlib_resources.files("synapse").joinpath("res").joinpath("templates")
)
config["email"] = {
"enable_notifs": True,
"template_dir": os.path.abspath(
pkg_resources.resource_filename("synapse", "res/templates")
),
"template_dir": os.path.abspath(str(templates)),
"expiry_template_html": "notice_expiry.html",
"expiry_template_text": "notice_expiry.txt",
"notif_template_html": "notif_mail.html",
Expand Down
17 changes: 9 additions & 8 deletions tests/rest/client/test_account.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,14 @@
# [This file includes modifications made by New Vector Limited]
#
#
import importlib.resources as importlib_resources
import os
import re
from email.parser import Parser
from http import HTTPStatus
from typing import Any, Dict, List, Optional, Union
from unittest.mock import Mock

import pkg_resources

from twisted.internet.interfaces import IReactorTCP
from twisted.internet.testing import MemoryReactor

Expand Down Expand Up @@ -59,11 +58,12 @@ def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
config = self.default_config()

# Email config.
templates = (
importlib_resources.files("synapse").joinpath("res").joinpath("templates")
)
config["email"] = {
"enable_notifs": False,
"template_dir": os.path.abspath(
pkg_resources.resource_filename("synapse", "res/templates")
),
"template_dir": os.path.abspath(str(templates)),
"smtp_host": "127.0.0.1",
"smtp_port": 20,
"require_transport_security": False,
Expand Down Expand Up @@ -798,11 +798,12 @@ def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
config = self.default_config()

# Email config.
templates = (
importlib_resources.files("synapse").joinpath("res").joinpath("templates")
)
config["email"] = {
"enable_notifs": False,
"template_dir": os.path.abspath(
pkg_resources.resource_filename("synapse", "res/templates")
),
"template_dir": os.path.abspath(str(templates)),
"smtp_host": "127.0.0.1",
"smtp_port": 20,
"require_transport_security": False,
Expand Down
10 changes: 5 additions & 5 deletions tests/rest/client/test_register.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,11 @@
#
#
import datetime
import importlib.resources as importlib_resources
import os
from typing import Any, Dict, List, Tuple
from unittest.mock import AsyncMock

import pkg_resources

from twisted.internet.testing import MemoryReactor

import synapse.rest.admin
Expand Down Expand Up @@ -981,11 +980,12 @@ def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:

# Email config.

templates = (
importlib_resources.files("synapse").joinpath("res").joinpath("templates")
)
config["email"] = {
"enable_notifs": True,
"template_dir": os.path.abspath(
pkg_resources.resource_filename("synapse", "res/templates")
),
"template_dir": os.path.abspath(str(templates)),
"expiry_template_html": "notice_expiry.html",
"expiry_template_text": "notice_expiry.txt",
"notif_template_html": "notif_mail.html",
Expand Down
Loading