$OpenBSD: patch-ykman_descriptor_py,v 1.1 2020/05/23 23:01:25 sthen Exp $

From 14956068994f411c5631794deb8d0cca3488b1e7 Mon Sep 17 00:00:00 2001
From: Dennis Fokin <Dennis.Fokin@yubico.com>
Date: Fri, 31 Jan 2020 08:15:23 +0100
Subject: [PATCH] Better error handling when failing to open CCID context

Index: ykman/descriptor.py
--- ykman/descriptor.py.orig
+++ ykman/descriptor.py
@@ -35,8 +35,9 @@ from .driver_otp import open_devices as open_otp
 from .native.pyusb import get_usb_backend
 
 import logging
-import usb.core
+import smartcard
 import time
+import usb.core
 
 logger = logging.getLogger(__name__)
 
@@ -153,9 +154,13 @@ def get_descriptors():
 
 def _list_drivers(transports):
     if TRANSPORT.CCID & transports:
-        for dev in open_ccid():
-            if dev:
-                yield dev
+        try:
+            for dev in open_ccid():
+                if dev:
+                    yield dev
+        except smartcard.pcsc.PCSCExceptions.EstablishContextException:
+            logger.debug('Failed to establish CCID context. '
+                         'Is the pcscd service running?')
     if TRANSPORT.OTP & transports:
         for dev in open_otp():
             if dev:
