mirror of
https://github.com/yzernik/squeaknode.git
synced 2026-08-13 12:33:25 +02:00
Add get squeaks for address rpc method (#108)
This commit is contained in:
parent
08af3e1679
commit
cb282d9af3
7 changed files with 81 additions and 0 deletions
2
.dockerignore
Normal file
2
.dockerignore
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
node_modules
|
||||
npm-debug.log
|
||||
|
|
@ -267,6 +267,7 @@ def run():
|
|||
)
|
||||
print("Get squeak profile response: " + str(get_squeak_profile_response))
|
||||
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
|
||||
make_squeak_content = "Hello from the profile on the server!"
|
||||
|
|
@ -341,6 +342,17 @@ def run():
|
|||
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__":
|
||||
logging.basicConfig()
|
||||
|
|
|
|||
|
|
@ -46,6 +46,10 @@ service SqueakAdmin {
|
|||
*/
|
||||
rpc GetFollowedSqueakDisplays (GetFollowedSqueakDisplaysRequest) returns (GetFollowedSqueakDisplaysReply) {}
|
||||
|
||||
/** sqkadmin: `getaddresssqueakdisplays`
|
||||
*/
|
||||
rpc GetAddressSqueakDisplays (GetAddressSqueakDisplaysRequest) returns (GetAddressSqueakDisplaysReply) {}
|
||||
|
||||
}
|
||||
|
||||
message HelloRequest {
|
||||
|
|
@ -166,3 +170,13 @@ message GetFollowedSqueakDisplaysReply {
|
|||
/// Multiple squeak display entries
|
||||
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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,3 +69,12 @@ class SqueakAdminServerHandler(object):
|
|||
)
|
||||
)
|
||||
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
|
||||
|
|
|
|||
|
|
@ -1,3 +1,5 @@
|
|||
import sys
|
||||
|
||||
import logging
|
||||
from concurrent import futures
|
||||
|
||||
|
|
@ -81,6 +83,24 @@ class SqueakAdminServerServicer(squeak_admin_pb2_grpc.SqueakAdminServicer):
|
|||
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):
|
||||
squeak_entry = squeak_entry_with_profile.squeak_entry
|
||||
squeak = squeak_entry.squeak
|
||||
|
|
|
|||
|
|
@ -128,3 +128,10 @@ class SqueakNode:
|
|||
|
||||
def get_followed_squeak_entries_with_profile(self):
|
||||
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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -124,6 +124,23 @@ class PostgresDb:
|
|||
rows = curs.fetchall()
|
||||
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):
|
||||
""" Lookup squeaks. """
|
||||
sql = """
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue