mirror of
https://gitlab.freedesktop.org/libfprint/libfprint.git
synced 2026-06-10 18:24:19 +00:00
110 lines
2.9 KiB
Python
110 lines
2.9 KiB
Python
#!/usr/bin/python3
|
|
import traceback
|
|
|
|
import sys
|
|
import gi
|
|
|
|
gi.require_version('FPrint', '2.0')
|
|
from gi.repository import FPrint, GLib
|
|
|
|
# Exit with error on any exception, included those happening in async callbacks
|
|
sys.excepthook = lambda *args: (traceback.print_exception(*args), sys.exit(1))
|
|
|
|
ctx = GLib.main_context_default()
|
|
|
|
c = FPrint.Context()
|
|
c.enumerate()
|
|
devices = c.get_devices()
|
|
|
|
d = devices[0]
|
|
del devices
|
|
|
|
assert d.get_driver() == "egis_etu905"
|
|
assert not d.has_feature(FPrint.DeviceFeature.CAPTURE)
|
|
assert d.has_feature(FPrint.DeviceFeature.IDENTIFY)
|
|
assert d.has_feature(FPrint.DeviceFeature.VERIFY)
|
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE)
|
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_LIST)
|
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_DELETE)
|
|
assert d.has_feature(FPrint.DeviceFeature.STORAGE_CLEAR)
|
|
|
|
d.open_sync()
|
|
|
|
def enroll_progress(*args):
|
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.PRESENT
|
|
print("enroll progress stage: " + str(args[1]))
|
|
|
|
def identify_done(dev, res):
|
|
global identified
|
|
identified = True
|
|
identify_match, identify_print = dev.identify_finish(res)
|
|
print("MATCH FOUND!" if identify_match else "NO MATCH FOUND")
|
|
assert identify_match.equal(identify_print)
|
|
|
|
# List
|
|
print("--- LISTING ---")
|
|
stored = d.list_prints_sync()
|
|
prints1 = len(stored)
|
|
print(f"--- LIST DONE: Found {prints1} prints before enroll---")
|
|
|
|
# Enroll
|
|
print("--- ENROLLING ---")
|
|
template = FPrint.Print.new(d)
|
|
|
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
p = d.enroll_sync(template, None, enroll_progress, None)
|
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
print("--- ENROLL DONE ---")
|
|
del template
|
|
|
|
# List
|
|
print("--- LISTING ---")
|
|
stored = d.list_prints_sync()
|
|
prints2 = len(stored)
|
|
print(f"--- LIST DONE: Found {prints2} prints after enroll---")
|
|
assert (prints2 - prints1) == 1
|
|
|
|
# Verify
|
|
print("--- VERIFYING ---")
|
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
verify_res, verify_print = d.verify_sync(p)
|
|
assert d.get_finger_status() == FPrint.FingerStatusFlags.NONE
|
|
print(f"--- VERIFY DONE: Result {verify_res} ---")
|
|
|
|
# Identify
|
|
print("--- ASYNC IDENTIFYING ---")
|
|
identified = False
|
|
deserialized_prints = []
|
|
for p in stored:
|
|
deserialized_prints.append(FPrint.Print.deserialize(p.serialize()))
|
|
assert deserialized_prints[-1].equal(p)
|
|
|
|
d.identify(deserialized_prints, callback=identify_done)
|
|
del deserialized_prints
|
|
|
|
while not identified:
|
|
ctx.iteration(True)
|
|
print("--- IDENTIFY DONE ---")
|
|
|
|
# Delete
|
|
print("--- DELETING ---")
|
|
p_to_delete = next((sp for sp in stored if sp.equal(p)), None)
|
|
if p_to_delete:
|
|
d.delete_print_sync(p_to_delete)
|
|
print("--- DELETE DONE ---")
|
|
del p_to_delete
|
|
del p
|
|
|
|
# List
|
|
print("--- LISTING ---")
|
|
stored = d.list_prints_sync()
|
|
prints3 = len(stored)
|
|
print(f"--- LIST DONE: Found {prints3} prints after deleting---")
|
|
assert (prints2 - prints3) == 1
|
|
del stored
|
|
|
|
d.close_sync()
|
|
|
|
del d
|
|
del c
|