1
0

Use new tables

This commit is contained in:
Erik Johnston
2016-10-31 15:00:19 +00:00
parent 2fba160589
commit babfa01cc7
7 changed files with 87 additions and 89 deletions

View File

@@ -202,8 +202,13 @@ class MessageHandler(BaseHandler):
content = builder.content
try:
content["displayname"] = yield profile.get_displayname(target)
content["avatar_url"] = yield profile.get_avatar_url(target)
display_name = yield profile.get_displayname(target)
if display_name:
content["displayname"] = display_name
avatar_url = yield profile.get_avatar_url(target)
if avatar_url:
content["avatar_url"] = avatar_url
except Exception as e:
logger.info(
"Failed to get profile information for %r: %s",

View File

@@ -39,11 +39,11 @@ class ProfileHandler(BaseHandler):
@defer.inlineCallbacks
def get_displayname(self, target_user):
if self.hs.is_mine(target_user):
displayname = yield self.store.get_profile_displayname(
target_user.localpart
display_name = yield self.store.get_profile_displayname(
target_user.to_string(),
)
defer.returnValue(displayname)
defer.returnValue(display_name)
else:
try:
result = yield self.federation.make_query(
@@ -78,19 +78,7 @@ class ProfileHandler(BaseHandler):
new_displayname = None
yield self.store.set_profile_displayname(
target_user.localpart, new_displayname
)
if new_displayname:
content = {"rows": [{
"display_name": new_displayname
}]}
else:
# TODO: Delete in this case
content = {}
yield self.store.update_profile_key(
target_user.to_string(), "default", "m.display_name", content
target_user.to_string(), new_displayname
)
yield self._update_join_states(requester)
@@ -99,7 +87,7 @@ class ProfileHandler(BaseHandler):
def get_avatar_url(self, target_user):
if self.hs.is_mine(target_user):
avatar_url = yield self.store.get_profile_avatar_url(
target_user.localpart
target_user.to_string(),
)
defer.returnValue(avatar_url)
@@ -133,19 +121,7 @@ class ProfileHandler(BaseHandler):
raise AuthError(400, "Cannot set another user's avatar_url")
yield self.store.set_profile_avatar_url(
target_user.localpart, new_avatar_url
)
if new_avatar_url:
content = {"rows": [{
"url": new_avatar_url
}]}
else:
# TODO: Delete in this case
content = {}
yield self.store.update_profile_key(
target_user.to_string(), "default", "m.avatar_url", content
target_user.to_string(), new_avatar_url
)
yield self._update_join_states(requester)
@@ -161,13 +137,13 @@ class ProfileHandler(BaseHandler):
response = {}
if just_field is None or just_field == "displayname":
response["displayname"] = yield self.store.get_profile_displayname(
user.localpart
response["displayname"] = yield self.get_displayname(
user
)
if just_field is None or just_field == "avatar_url":
response["avatar_url"] = yield self.store.get_profile_avatar_url(
user.localpart
response["avatar_url"] = yield self.get_avatar_url(
user
)
defer.returnValue(response)

View File

@@ -245,8 +245,14 @@ class RoomMemberHandler(BaseHandler):
content["membership"] = Membership.JOIN
profile = self.hs.get_handlers().profile_handler
content["displayname"] = yield profile.get_displayname(target)
content["avatar_url"] = yield profile.get_avatar_url(target)
display_name = yield profile.get_displayname(target)
if display_name:
content["displayname"] = display_name
avatar_url = yield profile.get_avatar_url(target)
if avatar_url:
content["avatar_url"] = avatar_url
if requester.is_guest:
content["kind"] = "guest"

View File

@@ -25,7 +25,6 @@ from synapse.util.async import concurrently_execute
from synapse.push.presentable_names import (
calculate_room_name, name_from_member_event, descriptor_from_member_events
)
from synapse.types import UserID
from synapse.api.errors import StoreError
from synapse.api.constants import EventTypes
from synapse.visibility import filter_events_for_client
@@ -130,7 +129,7 @@ class Mailer(object):
try:
user_display_name = yield self.store.get_profile_displayname(
UserID.from_string(user_id).localpart
user_id
)
if user_display_name is None:
user_display_name = user_id

View File

@@ -22,42 +22,64 @@ import ujson
class ProfileStore(SQLBaseStore):
def create_profile(self, user_localpart):
return self._simple_insert(
table="profiles",
values={"user_id": user_localpart},
desc="create_profile",
return defer.succeed(None)
@defer.inlineCallbacks
def get_profile_displayname(self, user_id):
profile = yield self.get_profile_key(
user_id, "default", "m.display_name"
)
def get_profile_displayname(self, user_localpart):
return self._simple_select_one_onecol(
table="profiles",
keyvalues={"user_id": user_localpart},
retcol="displayname",
desc="get_profile_displayname",
if profile:
try:
display_name = profile["rows"][0]["display_name"]
except (KeyError, IndexError):
display_name = None
else:
display_name = None
defer.returnValue(display_name)
def set_profile_displayname(self, user_id, new_displayname):
if new_displayname:
content = {"rows": [{
"display_name": new_displayname
}]}
else:
# TODO: Delete in this case
content = {}
return self.update_profile_key(
user_id, "default", "m.display_name", content
)
def set_profile_displayname(self, user_localpart, new_displayname):
return self._simple_update_one(
table="profiles",
keyvalues={"user_id": user_localpart},
updatevalues={"displayname": new_displayname},
desc="set_profile_displayname",
@defer.inlineCallbacks
def get_profile_avatar_url(self, user_id):
profile = yield self.get_profile_key(
user_id, "default", "m.avatar_url"
)
def get_profile_avatar_url(self, user_localpart):
return self._simple_select_one_onecol(
table="profiles",
keyvalues={"user_id": user_localpart},
retcol="avatar_url",
desc="get_profile_avatar_url",
)
if profile:
try:
avatar_url = profile["rows"][0]["avatar_url"]
except (KeyError, IndexError):
avatar_url = None
else:
avatar_url = None
def set_profile_avatar_url(self, user_localpart, new_avatar_url):
return self._simple_update_one(
table="profiles",
keyvalues={"user_id": user_localpart},
updatevalues={"avatar_url": new_avatar_url},
desc="set_profile_avatar_url",
defer.returnValue(avatar_url)
def set_profile_avatar_url(self, user_id, new_avatar_url):
if new_avatar_url:
content = {"rows": [{
"avatar_url": new_avatar_url
}]}
else:
# TODO: Delete in this case
content = {}
return self.update_profile_key(
user_id, "default", "m.avatar_url", content
)
@defer.inlineCallbacks

View File

@@ -76,7 +76,7 @@ class ProfileTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_get_my_name(self):
yield self.store.set_profile_displayname(
self.frank.localpart, "Frank"
self.frank.to_string(), "Frank"
)
displayname = yield self.handler.get_displayname(self.frank)
@@ -92,7 +92,7 @@ class ProfileTestCase(unittest.TestCase):
)
self.assertEquals(
(yield self.store.get_profile_displayname(self.frank.localpart)),
(yield self.store.get_profile_displayname(self.frank.to_string())),
"Frank Jr."
)
@@ -123,8 +123,7 @@ class ProfileTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_incoming_fed_query(self):
yield self.store.create_profile("caroline")
yield self.store.set_profile_displayname("caroline", "Caroline")
yield self.store.set_profile_displayname("@caroline:test", "Caroline")
response = yield self.query_handlers["profile"](
{"user_id": "@caroline:test", "field": "displayname"}
@@ -135,7 +134,7 @@ class ProfileTestCase(unittest.TestCase):
@defer.inlineCallbacks
def test_get_my_avatar(self):
yield self.store.set_profile_avatar_url(
self.frank.localpart, "http://my.server/me.png"
self.frank.to_string(), "http://my.server/me.png"
)
avatar_url = yield self.handler.get_avatar_url(self.frank)
@@ -150,6 +149,6 @@ class ProfileTestCase(unittest.TestCase):
)
self.assertEquals(
(yield self.store.get_profile_avatar_url(self.frank.localpart)),
(yield self.store.get_profile_avatar_url(self.frank.to_string())),
"http://my.server/pic.gif"
)

View File

@@ -17,7 +17,6 @@
from tests import unittest
from twisted.internet import defer
from synapse.storage.profile import ProfileStore
from synapse.types import UserID
from tests.utils import setup_test_homeserver
@@ -29,36 +28,28 @@ class ProfileStoreTestCase(unittest.TestCase):
def setUp(self):
hs = yield setup_test_homeserver()
self.store = ProfileStore(hs)
self.store = hs.get_datastore()
self.u_frank = UserID.from_string("@frank:test")
@defer.inlineCallbacks
def test_displayname(self):
yield self.store.create_profile(
self.u_frank.localpart
)
yield self.store.set_profile_displayname(
self.u_frank.localpart, "Frank"
self.u_frank.to_string(), "Frank"
)
self.assertEquals(
"Frank",
(yield self.store.get_profile_displayname(self.u_frank.localpart))
(yield self.store.get_profile_displayname(self.u_frank.to_string()))
)
@defer.inlineCallbacks
def test_avatar_url(self):
yield self.store.create_profile(
self.u_frank.localpart
)
yield self.store.set_profile_avatar_url(
self.u_frank.localpart, "http://my.site/here"
self.u_frank.to_string(), "http://my.site/here"
)
self.assertEquals(
"http://my.site/here",
(yield self.store.get_profile_avatar_url(self.u_frank.localpart))
(yield self.store.get_profile_avatar_url(self.u_frank.to_string()))
)