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))
|
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()
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -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 = """
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue