From bd100c30065a2fc0b5885251524cc0cb09482c60 Mon Sep 17 00:00:00 2001 From: Jonathan Zernik Date: Tue, 21 Jul 2020 17:42:19 -0700 Subject: [PATCH] Add get profile by address rpc method (#112) --- itests/test.py | 11 +++++++++++ proto/squeak_admin.proto | 14 ++++++++++++++ squeakserver/admin/squeak_admin_server_handler.py | 5 +++++ squeakserver/admin/squeak_admin_server_servicer.py | 8 ++++++++ squeakserver/node/squeak_node.py | 3 +++ squeakserver/server/postgres_db.py | 11 +++++++++++ 6 files changed, 52 insertions(+) diff --git a/itests/test.py b/itests/test.py index adf191c0..353aa558 100644 --- a/itests/test.py +++ b/itests/test.py @@ -353,6 +353,17 @@ def run(): len(get_address_squeak_display_response.squeak_display_entries) == 2 ) + # Get squeak profile by address + get_profile_by_address_response = admin_stub.GetSqueakProfileByAddress( + squeak_admin_pb2.GetSqueakProfileByAddressRequest( + address=squeak_profile_address + ) + ) + print("Get profile by address response: " + str(get_profile_by_address_response)) + assert ( + get_profile_by_address_response.squeak_profile.profile_name == "bob" + ) + if __name__ == "__main__": logging.basicConfig() diff --git a/proto/squeak_admin.proto b/proto/squeak_admin.proto index 55c26d0b..17351b03 100644 --- a/proto/squeak_admin.proto +++ b/proto/squeak_admin.proto @@ -34,6 +34,10 @@ service SqueakAdmin { */ rpc GetSqueakProfile (GetSqueakProfileRequest) returns (GetSqueakProfileReply) {} + /** sqkadmin: `getsqueakprofilebyaddress` + */ + rpc GetSqueakProfileByAddress (GetSqueakProfileByAddressRequest) returns (GetSqueakProfileByAddressReply) {} + /** sqkadmin: `makesqueak` */ rpc MakeSqueak (MakeSqueakRequest) returns (MakeSqueakReply) {} @@ -88,6 +92,16 @@ message GetSqueakProfileReply { SqueakProfile squeak_profile = 1; } +message GetSqueakProfileByAddressRequest { + /// The address + string address = 4; +} + +message GetSqueakProfileByAddressReply { + /// The squeak profile + SqueakProfile squeak_profile = 1; +} + message SqueakProfile { /// The profile id int32 profile_id = 1; diff --git a/squeakserver/admin/squeak_admin_server_handler.py b/squeakserver/admin/squeak_admin_server_handler.py index 5f3e3b1b..738b4a4d 100644 --- a/squeakserver/admin/squeak_admin_server_handler.py +++ b/squeakserver/admin/squeak_admin_server_handler.py @@ -41,6 +41,11 @@ class SqueakAdminServerHandler(object): squeak_profile = self.squeak_node.get_squeak_profile(profile_id) return squeak_profile + def handle_get_squeak_profile_by_address(self, address): + logger.info("Handle get squeak profile with address: {}".format(address)) + squeak_profile = self.squeak_node.get_squeak_profile_by_address(address) + return squeak_profile + def handle_make_squeak(self, profile_id, content_str, replyto_hash): logger.info("Handle make squeak profile with id: {}".format(profile_id)) inserted_squeak_hash = self.squeak_node.make_squeak( diff --git a/squeakserver/admin/squeak_admin_server_servicer.py b/squeakserver/admin/squeak_admin_server_servicer.py index 350f879d..383330e3 100644 --- a/squeakserver/admin/squeak_admin_server_servicer.py +++ b/squeakserver/admin/squeak_admin_server_servicer.py @@ -53,6 +53,14 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer): squeak_profile=squeak_profile_msg ) + def GetSqueakProfileByAddress(self, request, context): + address = request.address + squeak_profile = self.handler.handle_get_squeak_profile_by_address(address) + squeak_profile_msg = self._squeak_profile_to_message(squeak_profile) + return squeak_admin_pb2.GetSqueakProfileReply( + squeak_profile=squeak_profile_msg + ) + def MakeSqueak(self, request, context): profile_id = request.profile_id content_str = request.content diff --git a/squeakserver/node/squeak_node.py b/squeakserver/node/squeak_node.py index 1d58778f..6220bdae 100644 --- a/squeakserver/node/squeak_node.py +++ b/squeakserver/node/squeak_node.py @@ -117,6 +117,9 @@ class SqueakNode: def get_squeak_profile(self, profile_id): return self.postgres_db.get_profile(profile_id) + def get_squeak_profile_by_address(self, address): + return self.postgres_db.get_profile_by_address(address) + def make_squeak(self, profile_id, content_str, replyto_hash): squeak_profile = self.postgres_db.get_profile(profile_id) squeak_maker = SqueakMaker(self.lightning_client) diff --git a/squeakserver/server/postgres_db.py b/squeakserver/server/postgres_db.py index 38b24e0d..5b1fbb5a 100644 --- a/squeakserver/server/postgres_db.py +++ b/squeakserver/server/postgres_db.py @@ -209,6 +209,17 @@ class PostgresDb: row = curs.fetchone() return self._parse_squeak_profile(row) + def get_profile_by_address(self, address): + """ Get a profile by address. """ + sql = """ + SELECT * FROM profile + WHERE address=%s; + """ + with self.get_cursor() as curs: + curs.execute(sql, (address,)) + row = curs.fetchone() + return self._parse_squeak_profile(row) + def get_unverified_block_squeaks(self): """ Get all squeaks without block header. """ sql = """