# Class Hierarchy

- `Exception`
  - `smartcard.Exceptions.SmartcardException` - Base class for smartcard exceptions.
    - `smartcard.Exceptions.CardConnectionException` - Raised when a CardConnection class method fails.
    - `smartcard.Exceptions.CardRequestException` - Raised when a CardRequest wait fails.
    - `smartcard.Exceptions.CardRequestTimeoutException` - Raised when a CardRequest times out.
    - `smartcard.Exceptions.CardServiceException` - Raised when a CardService class method fails.
    - `smartcard.Exceptions.CardServiceStoppedException` - Raised when the CardService was stopped
    - `smartcard.Exceptions.InvalidATRMaskLengthException` - Raised when an ATR mask does not match an ATR length.
    - `smartcard.Exceptions.InvalidReaderException` - Raised when trying to acces an invalid smartcard reader.
    - `smartcard.Exceptions.ListReadersException` - Raised when smartcard readers cannot be listed.
    - `smartcard.Exceptions.NoCardException` - Raised when no card in is present in reader.
    - `smartcard.Exceptions.NoReadersException` - Raised when the system has no smartcard reader.
    - `smartcard.reader.ReaderGroups.BadReaderGroupException` - Raised when trying to add an invalid reader group.
    - `smartcard.reader.ReaderGroups.DeleteSCardDefaultReaderGroupException` - Raised when trying to delete SCard$DefaultReaders reader group.
  - `smartcard.pcsc.PCSCExceptions.BaseSCardException` - Base class for scard (aka PCSC) exceptions.
    - `smartcard.pcsc.PCSCExceptions.AddReaderToGroupException` - Raised when scard fails to add a new reader to a PCSC reader group.
    - `smartcard.pcsc.PCSCExceptions.EstablishContextException` - Raised when scard failed to establish context with PCSC.
    - `smartcard.pcsc.PCSCExceptions.IntroduceReaderException` - Raised when scard fails to introduce a new reader to PCSC.
    - `smartcard.pcsc.PCSCExceptions.ListReadersException` - Raised when scard failed to list readers.
    - `smartcard.pcsc.PCSCExceptions.ReleaseContextException` - Raised when scard failed to release PCSC context.
    - `smartcard.pcsc.PCSCExceptions.RemoveReaderFromGroupException` - Raised when scard fails to remove a reader from a PCSC reader group.
  - `smartcard.sw.SWExceptions.SWException` - Base class for status word exceptions.
    - `smartcard.sw.SWExceptions.CheckingErrorException` - Raised when a checking error is detected from sw1, sw2. Examples of checking error: sw1=67 to 6F (ISO781604).
    - `smartcard.sw.SWExceptions.ExecutionErrorException` - Raised when an execution error is detected from sw1, sw2. Examples of execution error: sw1=64 or sw=65 (ISO7816-4).
    - `smartcard.sw.SWExceptions.SecurityRelatedException` - Raised when a security issue is detected from sw1, sw2. Examples of security issue: sw1=66 (ISO7816-4).
    - `smartcard.sw.SWExceptions.WarningProcessingException` - Raised when a warning processing is detected from sw1, sw2. Examples of warning processing exception: sw1=62 or sw=63 (ISO7816-4).
- `list`
  - `smartcard.ulist.ulist` - ulist ensures that all items are unique and provides an __onadditem__ hook to perform custom action in subclasses.
    - `smartcard.reader.ReaderGroups.innerreadergroups` - Smartcard readers groups private class.
      - `smartcard.pcsc.PCSCReaderGroups.pcscinnerreadergroups` - Smartcard PCSC readers groups inner class.
- `object`
  - `smartcard.AbstractCardRequest.AbstractCardRequest` - The base class for xxxCardRequest classes.
    - `smartcard.pcsc.PCSCCardRequest.PCSCCardRequest` - PCSC CardRequest class.
  - `smartcard.ATR.ATR` - ATR class.
  - `smartcard.Card.Card` - Card class.
  - `smartcard.CardConnectionEvent.CardConnectionEvent` - Base class for card connection events.
  - `smartcard.CardMonitoring.CardMonitor` - Class that monitors smart card insertion / removals. and notify observers
  - `smartcard.CardMonitoring.CardMonitoringThread` - Card insertion thread. This thread waits for card insertion.
  - `smartcard.CardNames.CardNames` - The CardNames organizes cards by a unique name and an associated `smartcard.CardType.CardType`.
  - `smartcard.CardRequest.CardRequest` - A CardRequest is used for waitForCard() invocations and specifies what kind of smart card an application is waited for.
  - `smartcard.CardService.CardService` - Card service abstract class.
    - `smartcard.PassThruCardService.PassThruCardService` - Pass-thru card service class.
  - `smartcard.CardType.CardType` - Abstract base class for CardTypes.
    - `smartcard.CardType.AnyCardType` - The AnyCardType matches any card.
    - `smartcard.CardType.ATRCardType` - The ATRCardType defines a card from an ATR and a mask.
  - `smartcard.Observer.Observer` - No class docstring; 1/1 method documented
    - `smartcard.CardConnectionObserver.CardConnectionObserver` - CardConnectionObserver is a base class for objects that are to be notified upon `CardConnection` events.
      - `smartcard.CardConnectionObserver.ConsoleCardConnectionObserver` - Undocumented
      - `smartcard.wx.APDUTracerPanel.APDUTracerPanel` - No class docstring; 0/1 instance variable, 2/3 methods documented
    - `smartcard.CardMonitoring.CardObserver` - CardObserver is a base abstract class for objects that are to be notified upon smart card insertion / removal.
      - `smartcard.wx.CardAndReaderTreePanel.CardAndReaderTreePanel._CardObserver` - Inner CardObserver. Gets notified of card insertion removal by the CardMonitor.
    - `smartcard.ReaderMonitoring.ReaderObserver` - ReaderObserver is a base abstract class for objects that are to be notified upon smartcard reader insertion/removal.
      - `smartcard.pyro.server.RemoteReaderServer.RemoteReaderServer` - Monitor local readers, and publish them as remote pyro readers.
      - `smartcard.wx.CardAndReaderTreePanel.CardAndReaderTreePanel._ReaderObserver` - Inner ReaderObserver. Gets notified of reader insertion/removal by the ReaderMonitor.
      - `smartcard.wx.ReaderToolbar.ReaderComboBox` - No class docstring; 0/1 instance variable, 2/2 methods documented
  - `smartcard.pcsc.PCSCContext.PCSCContext` - Manage a singleton pcsc context handle.
  - `smartcard.pyro.server.PyroDaemon.PyroDaemon` - Singleton class to wrap the pyro daemon.
  - `smartcard.reader.Reader.Reader` - Reader abstract class.
    - `smartcard.pcsc.PCSCReader.PCSCReader` - PCSC reader class.
    - `smartcard.pyro.PyroReader.PyroReader` - Remote reader class.
    - `smartcard.pyro.server.RemoteReaderServer.RemoteReader` - Remote reader class that embeds a local reader.
  - `smartcard.reader.ReaderFactory.ReaderFactory` - Class to create readers from reader type id.
  - `smartcard.reader.ReaderGroups.readergroups` - ReadersGroups organizes smart card reader as groups.
    - `smartcard.pcsc.PCSCReaderGroups.PCSCReaderGroups` - PCSC readers groups.
  - `smartcard.Session` - The Session object enables programmers to transmit APDU to smartcards.
  - `smartcard.sw.ErrorChecker.ErrorChecker` - Base class for status word error checking strategies.
    - `smartcard.sw.ISO7816_4_SW1ErrorChecker.ISO7816_4_SW1ErrorChecker` - ISO7816-4 error checker based on status word sw1 only.
    - `smartcard.sw.ISO7816_4ErrorChecker.ISO7816_4ErrorChecker` - ISO7816-4 error checking strategy.
    - `smartcard.sw.ISO7816_8ErrorChecker.ISO7816_8ErrorChecker` - ISO7816-8 error checker.
    - `smartcard.sw.ISO7816_9ErrorChecker.ISO7816_9ErrorChecker` - ISO7816-8 error checker.
    - `smartcard.sw.op21_ErrorChecker.op21_ErrorChecker` - Open platform 2.1 error checker.
  - `smartcard.sw.ErrorCheckingChain.ErrorCheckingChain` - The error checking chain is a list of response apdu status word (sw1, sw2) error check strategies. Each strategy in the chain is called until an error is detected. A `smartcard.sw.SWExceptions` exception is raised when an error is detected...
  - `smartcard.Synchronization.Synchronization` - Undocumented
    - `smartcard.CardNames.__CardNames__` - __CardNames__ inner class.
    - `smartcard.Observer.Observable` - No class docstring; 0/2 instance variable, 1/9 method documented
      - `smartcard.CardConnection.CardConnection` - Card connection abstract class.
        - `smartcard.CardConnectionDecorator.CardConnectionDecorator` - Card connection decorator class.
          - `smartcard.ExclusiveConnectCardConnection.ExclusiveConnectCardConnection` - This decorator uses exclusive access to the card during connection to prevent other processes to connect to this card.
          - `smartcard.ExclusiveTransmitCardConnection.ExclusiveTransmitCardConnection` - This decorator uses `SCardBeginTransaction`/`SCardEndTransaction` to preserve other processes of threads to access the card during transmit().
          - `smartcard.pyro.server.RemoteCardConnection.RemoteCardConnection` - Remote connection class. Handles connection with a card inserted inside a remote PC.
        - `smartcard.pcsc.PCSCCardConnection.PCSCCardConnection` - PCSCCard connection class. Handles connection with a card thru a PCSC reader.
      - `smartcard.CardMonitoring.CardMonitor.__CardMonitorSingleton` - The real smart card monitor class.
      - `smartcard.ReaderMonitoring.ReaderMonitor` - Class that monitors reader insertion/removal. and notify observers
  - `smartcard.wx.SimpleSCardAppEventObserver.SimpleSCardAppEventObserver` - This interface defines the event handlers called by the SimpleSCardApp.
    - `smartcard.wx.SimpleSCardAppFrame.BlankPanel` - A blank panel in case no panel is provided to SimpleSCardApp.
- `Pyro.core.ObjBase`
  - `smartcard.pyro.server.RemoteCardConnection.RemoteCardConnection` - Remote connection class. Handles connection with a card inserted inside a remote PC.
  - `smartcard.pyro.server.RemoteReaderServer.RemoteReader` - Remote reader class that embeds a local reader.
- `smartcard.pcsc.PCSCContext.PCSCContext.__PCSCContextSingleton` - The actual pcsc context class as a singleton.
- `smartcard.pcsc.PCSCReader.PCSCReader.Factory` - Undocumented
- `smartcard.pyro.PyroReader.PyroReader.Factory` - Undocumented
- `smartcard.pyro.server.PyroDaemon.PyroDaemon._PyroDaemon` - The pyro daemon actual wrapper class.
- `threading.Thread`
  - `smartcard.CardMonitoring.CardMonitoringThread.__CardMonitoringThreadSingleton` - The real card monitoring thread class.
  - `smartcard.pyro.server.PyroDaemon.PyroDaemonThread` - Thread running the Pyro daemon server.
  - `smartcard.pyro.server.PyroEventServer.PyroEventServer` - Thread running the Pyro Event server.
  - `smartcard.pyro.server.PyroNameServer.PyroNameServer` - Thread running the Pyro Name server.
  - `smartcard.ReaderMonitoring.ReaderMonitoringThread` - Reader insertion thread. This thread polls for pcsc reader insertion, since no reader insertion event is available in pcsc.
- `type`
  - `smartcard.scard.scard._SwigNonDynamicMeta` - Meta class to enforce nondynamic attributes (no new attributes) for a class
- `wx.App`
  - `smartcard.wx.SimpleSCardApp.SimpleSCardApp` - The SimpleSCardApp class represents the smart card application. SimpleSCardApp is a subclass of wx.App.
- `wx.ComboBox`
  - `smartcard.wx.ReaderToolbar.ReaderComboBox` - No class docstring; 0/1 instance variable, 2/2 methods documented
- `wx.Frame`
  - `smartcard.wx.SimpleSCardAppFrame.SimpleSCardAppFrame` - The main frame of the simple smartcard application.
- `wx.Panel`
  - `smartcard.wx.APDUTracerPanel.APDUTracerPanel` - No class docstring; 0/1 instance variable, 2/3 methods documented
  - `smartcard.wx.CardAndReaderTreePanel.CardAndReaderTreePanel` - Panel containing the smart card and reader tree controls.
  - `smartcard.wx.SimpleSCardAppFrame.BlankPanel` - A blank panel in case no panel is provided to SimpleSCardApp.
  - `smartcard.wx.SimpleSCardAppFrame.TreeAndUserPanelPanel` - The panel that contains the Card/Reader TreeCtrl and the user provided Panel.
- `wx.PyValidator`
  - `smartcard.wx.APDUHexValidator.APDUHexValidator` - A wxValidator that matches APDU in hexadecimal such as: A4 A0 00 00 02 A4A0000002
- `wx.ToolBar`
  - `smartcard.wx.ReaderToolbar.ReaderToolbar` - ReaderToolbar. Contains controls to select a reader from a listbox and connect to the cards.
- `wx.TreeCtrl`
  - `smartcard.wx.CardAndReaderTreePanel.BaseCardTreeCtrl` - Base class for the smart card and reader tree controls.
    - `smartcard.wx.CardAndReaderTreePanel.CardTreeCtrl` - The CardTreeCtrl monitors inserted cards and notifies the application client dialog of any card activation.
    - `smartcard.wx.CardAndReaderTreePanel.ReaderTreeCtrl` - The ReaderTreeCtrl monitors inserted cards and readers and notifies the application client dialog of any card activation.