Add get squeaks for address rpc method (#108)

This commit is contained in:
Jonathan Zernik 2020-07-21 16:12:26 -07:00 committed by GitHub
parent 08af3e1679
commit cb282d9af3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 81 additions and 0 deletions

2
.dockerignore Normal file
View file

@ -0,0 +1,2 @@
node_modules
npm-debug.log

View file

@ -267,6 +267,7 @@ def run():
) )
print("Get squeak profile response: " + str(get_squeak_profile_response)) print("Get squeak profile response: " + str(get_squeak_profile_response))
assert get_squeak_profile_response.squeak_profile.profile_name == profile_name assert get_squeak_profile_response.squeak_profile.profile_name == profile_name
squeak_profile_address = get_squeak_profile_response.squeak_profile.address
# Create a new squeak using the new profile # Create a new squeak using the new profile
make_squeak_content = "Hello from the profile on the server!" make_squeak_content = "Hello from the profile on the server!"
@ -341,6 +342,17 @@ def run():
len(get_signing_profiles_response.squeak_profiles) == 1 len(get_signing_profiles_response.squeak_profiles) == 1
) )
# Get all squeak displays for the known address
get_address_squeak_display_response = admin_stub.GetAddressSqueakDisplays(
squeak_admin_pb2.GetAddressSqueakDisplaysRequest(
address=squeak_profile_address
)
)
print("Get address squeak displays response: " + str(get_address_squeak_display_response))
assert (
len(get_address_squeak_display_response.squeak_display_entries) == 2
)
if __name__ == "__main__": if __name__ == "__main__":
logging.basicConfig() logging.basicConfig()

View file

@ -46,6 +46,10 @@ service SqueakAdmin {
*/ */
rpc GetFollowedSqueakDisplays (GetFollowedSqueakDisplaysRequest) returns (GetFollowedSqueakDisplaysReply) {} rpc GetFollowedSqueakDisplays (GetFollowedSqueakDisplaysRequest) returns (GetFollowedSqueakDisplaysReply) {}
/** sqkadmin: `getaddresssqueakdisplays`
*/
rpc GetAddressSqueakDisplays (GetAddressSqueakDisplaysRequest) returns (GetAddressSqueakDisplaysReply) {}
} }
message HelloRequest { message HelloRequest {
@ -166,3 +170,13 @@ message GetFollowedSqueakDisplaysReply {
/// Multiple squeak display entries /// Multiple squeak display entries
repeated SqueakDisplayEntry squeak_display_entries = 1; repeated SqueakDisplayEntry squeak_display_entries = 1;
} }
message GetAddressSqueakDisplaysRequest {
/// The address
string address = 1;
}
message GetAddressSqueakDisplaysReply {
/// Multiple squeak display entries
repeated SqueakDisplayEntry squeak_display_entries = 1;
}

View file

@ -69,3 +69,12 @@ class SqueakAdminServerHandler(object):
) )
) )
return squeak_entries_with_profile return squeak_entries_with_profile
def handle_get_squeak_display_entries_for_address(self, address, min_block, max_block):
logger.info("Handle get squeak display entries for address: {}".format(address))
squeak_entries_with_profile = self.squeak_node.get_squeak_entries_with_profile_for_address(
address,
min_block,
max_block,
)
return squeak_entries_with_profile

View file

@ -1,3 +1,5 @@
import sys
import logging import logging
from concurrent import futures from concurrent import futures
@ -81,6 +83,24 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer):
squeak_display_entries=ret squeak_display_entries=ret
) )
def GetAddressSqueakDisplays(self, request, context):
address = request.address
min_block = 0
max_block = sys.maxsize
squeak_entries_with_profile = self.handler.handle_get_squeak_display_entries_for_address(
address,
min_block,
max_block,
)
# TODO: use list comprehension
ret = []
for entry in squeak_entries_with_profile:
display_message = self._squeak_entry_to_message(entry)
ret.append(display_message)
return squeak_admin_pb2.GetFollowedSqueakDisplaysReply(
squeak_display_entries=ret
)
def _squeak_entry_to_message(self, squeak_entry_with_profile): def _squeak_entry_to_message(self, squeak_entry_with_profile):
squeak_entry = squeak_entry_with_profile.squeak_entry squeak_entry = squeak_entry_with_profile.squeak_entry
squeak = squeak_entry.squeak squeak = squeak_entry.squeak

View file

@ -128,3 +128,10 @@ class SqueakNode:
def get_followed_squeak_entries_with_profile(self): def get_followed_squeak_entries_with_profile(self):
return self.postgres_db.get_followed_squeak_entries_with_profile() return self.postgres_db.get_followed_squeak_entries_with_profile()
def get_squeak_entries_with_profile_for_address(self, address, min_block, max_block):
return self.postgres_db.get_squeak_entries_with_profile_for_address(
address,
min_block,
max_block,
)

View file

@ -124,6 +124,23 @@ class PostgresDb:
rows = curs.fetchall() rows = curs.fetchall()
return [self._parse_squeak_entry_with_profile(row) for row in rows] return [self._parse_squeak_entry_with_profile(row) for row in rows]
def get_squeak_entries_with_profile_for_address(self, address, min_block, max_block):
""" Get a squeak. """
sql = """
SELECT * FROM squeak
JOIN profile
ON squeak.address=profile.address
WHERE squeak.block_header IS NOT NULL
AND squeak.address=%s
AND n_block_height >= %s
AND n_block_height <= %s
ORDER BY n_block_height DESC, n_time DESC;
"""
with self.get_cursor() as curs:
curs.execute(sql, (address, min_block, max_block))
rows = curs.fetchall()
return [self._parse_squeak_entry_with_profile(row) for row in rows]
def lookup_squeaks(self, addresses, min_block, max_block): def lookup_squeaks(self, addresses, min_block, max_block):
""" Lookup squeaks. """ """ Lookup squeaks. """
sql = """ sql = """