Add trivial CLI tool for calculating identicons
This commit is contained in:
parent
0dd22bd7bc
commit
5e4ac9681b
52
main.py
Normal file
52
main.py
Normal file
@ -0,0 +1,52 @@
|
||||
from sys import argv, stdin
|
||||
from sys import exit as sysexit
|
||||
from select import select
|
||||
from hashlib import blake2b
|
||||
from io import BytesIO
|
||||
|
||||
from identicon import Identicon
|
||||
|
||||
|
||||
DIGEST_SIZE = 20
|
||||
BUF_SIZE = 4096
|
||||
|
||||
|
||||
def main():
|
||||
if not (stream := get_input_stream()):
|
||||
print_usage_and_exit()
|
||||
|
||||
i = Identicon(get_digest(stream))
|
||||
i.calculate()
|
||||
print(i)
|
||||
|
||||
|
||||
def get_input_stream():
|
||||
io = None
|
||||
if len(argv) == 2:
|
||||
io = BytesIO(argv[1].encode())
|
||||
elif stdin_has_data():
|
||||
io = stdin.buffer
|
||||
return io
|
||||
|
||||
|
||||
def stdin_has_data():
|
||||
return bool(select([stdin], [], [], 0.0)[0])
|
||||
|
||||
|
||||
def print_usage_and_exit():
|
||||
print('Usage: identicon [TEXT]')
|
||||
print('Print OpenSSH style randomart identicon for arbitrary data.\n')
|
||||
print('If TEXT is not supplied, data is read from STDIN.')
|
||||
sysexit(1)
|
||||
|
||||
|
||||
def get_digest(stream):
|
||||
hasher = blake2b(digest_size=DIGEST_SIZE)
|
||||
while data := stream.read(BUF_SIZE):
|
||||
hasher.update(data)
|
||||
return hasher.digest()
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue
Block a user