Database storage profile passes mypy (#11342)

It already seems to pass mypy. I wonder what changed, given that it was
on the exclusion list. So this commit consists of me ensuring
`--disallow-untyped-defs` passes and a minor fixup to a function that
returned either `True` or `None`.
pull/11347/head
David Robertson 2021-11-15 12:59:33 +00:00 committed by GitHub
parent 5562ce6a53
commit e605e4b8f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 8 deletions

1
changelog.d/11342.misc Normal file
View File

@ -0,0 +1 @@
Add type hints to storage classes.

View File

@ -38,7 +38,6 @@ exclude = (?x)
|synapse/storage/databases/main/metrics.py |synapse/storage/databases/main/metrics.py
|synapse/storage/databases/main/monthly_active_users.py |synapse/storage/databases/main/monthly_active_users.py
|synapse/storage/databases/main/presence.py |synapse/storage/databases/main/presence.py
|synapse/storage/databases/main/profile.py
|synapse/storage/databases/main/purge_events.py |synapse/storage/databases/main/purge_events.py
|synapse/storage/databases/main/push_rule.py |synapse/storage/databases/main/push_rule.py
|synapse/storage/databases/main/receipts.py |synapse/storage/databases/main/receipts.py
@ -182,6 +181,9 @@ disallow_untyped_defs = True
[mypy-synapse.storage.databases.main.room_batch] [mypy-synapse.storage.databases.main.room_batch]
disallow_untyped_defs = True disallow_untyped_defs = True
[mypy-synapse.storage.databases.main.profile]
disallow_untyped_defs = True
[mypy-synapse.storage.databases.main.state_deltas] [mypy-synapse.storage.databases.main.state_deltas]
disallow_untyped_defs = True disallow_untyped_defs = True
@ -284,6 +286,9 @@ disallow_untyped_defs = True
[mypy-tests.handlers.test_user_directory] [mypy-tests.handlers.test_user_directory]
disallow_untyped_defs = True disallow_untyped_defs = True
[mypy-tests.storage.test_profile]
disallow_untyped_defs = True
[mypy-tests.storage.test_user_directory] [mypy-tests.storage.test_user_directory]
disallow_untyped_defs = True disallow_untyped_defs = True

View File

@ -15,6 +15,7 @@ from typing import Any, Dict, List, Optional
from synapse.api.errors import StoreError from synapse.api.errors import StoreError
from synapse.storage._base import SQLBaseStore from synapse.storage._base import SQLBaseStore
from synapse.storage.database import LoggingTransaction
from synapse.storage.databases.main.roommember import ProfileInfo from synapse.storage.databases.main.roommember import ProfileInfo
@ -104,7 +105,7 @@ class ProfileWorkerStore(SQLBaseStore):
desc="update_remote_profile_cache", desc="update_remote_profile_cache",
) )
async def maybe_delete_remote_profile_cache(self, user_id): async def maybe_delete_remote_profile_cache(self, user_id: str) -> None:
"""Check if we still care about the remote user's profile, and if we """Check if we still care about the remote user's profile, and if we
don't then remove their profile from the cache don't then remove their profile from the cache
""" """
@ -116,9 +117,9 @@ class ProfileWorkerStore(SQLBaseStore):
desc="delete_remote_profile_cache", desc="delete_remote_profile_cache",
) )
async def is_subscribed_remote_profile_for_user(self, user_id): async def is_subscribed_remote_profile_for_user(self, user_id: str) -> bool:
"""Check whether we are interested in a remote user's profile.""" """Check whether we are interested in a remote user's profile."""
res = await self.db_pool.simple_select_one_onecol( res: Optional[str] = await self.db_pool.simple_select_one_onecol(
table="group_users", table="group_users",
keyvalues={"user_id": user_id}, keyvalues={"user_id": user_id},
retcol="user_id", retcol="user_id",
@ -139,13 +140,16 @@ class ProfileWorkerStore(SQLBaseStore):
if res: if res:
return True return True
return False
async def get_remote_profile_cache_entries_that_expire( async def get_remote_profile_cache_entries_that_expire(
self, last_checked: int self, last_checked: int
) -> List[Dict[str, str]]: ) -> List[Dict[str, str]]:
"""Get all users who haven't been checked since `last_checked`""" """Get all users who haven't been checked since `last_checked`"""
def _get_remote_profile_cache_entries_that_expire_txn(txn): def _get_remote_profile_cache_entries_that_expire_txn(
txn: LoggingTransaction,
) -> List[Dict[str, str]]:
sql = """ sql = """
SELECT user_id, displayname, avatar_url SELECT user_id, displayname, avatar_url
FROM remote_profile_cache FROM remote_profile_cache

View File

@ -11,19 +11,22 @@
# 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.
from twisted.test.proto_helpers import MemoryReactor
from synapse.server import HomeServer
from synapse.types import UserID from synapse.types import UserID
from synapse.util import Clock
from tests import unittest from tests import unittest
class ProfileStoreTestCase(unittest.HomeserverTestCase): class ProfileStoreTestCase(unittest.HomeserverTestCase):
def prepare(self, reactor, clock, hs): def prepare(self, reactor: MemoryReactor, clock: Clock, hs: HomeServer) -> None:
self.store = hs.get_datastore() self.store = hs.get_datastore()
self.u_frank = UserID.from_string("@frank:test") self.u_frank = UserID.from_string("@frank:test")
def test_displayname(self): def test_displayname(self) -> None:
self.get_success(self.store.create_profile(self.u_frank.localpart)) self.get_success(self.store.create_profile(self.u_frank.localpart))
self.get_success( self.get_success(
@ -48,7 +51,7 @@ class ProfileStoreTestCase(unittest.HomeserverTestCase):
self.get_success(self.store.get_profile_displayname(self.u_frank.localpart)) self.get_success(self.store.get_profile_displayname(self.u_frank.localpart))
) )
def test_avatar_url(self): def test_avatar_url(self) -> None:
self.get_success(self.store.create_profile(self.u_frank.localpart)) self.get_success(self.store.create_profile(self.u_frank.localpart))
self.get_success( self.get_success(