parameters: (candidates, cygwin_lib, name,
                          win_cls=None, cygwin_cls=None, others_cls=None,
                          find_library=None, check_symbols=None)
docstring: Locates and loads a library.
  
      Returns: the loaded library
  
      arguments:
      * candidates    -- candidates list for locate_library()
      * cygwin_lib    -- name of the cygwin library
      * name          -- lib identifier (for logging). Defaults to None.
      * win_cls       -- class that is used to instantiate the library on
                         win32 platforms. Defaults to None (-> ctypes.CDLL).
      * cygwin_cls    -- library class for cygwin platforms.
                         Defaults to None (-> ctypes.CDLL).
      * others_cls    -- library class for all other platforms.
                         Defaults to None (-> ctypes.CDLL).
      * find_library  -- see locate_library(). Defaults to None.
      * check_symbols -- either None or a list of symbols that the loaded lib
                         must provide (hasattr(<>)) in order to be considered
                         valid. LibraryMissingSymbolsException is raised if
                         any symbol is missing.
  
      raises:
      * NoLibraryCandidatesException
      * LibraryNotFoundException
      * LibraryNotLoadedException
      * LibraryMissingSymbolsException
docstring_summary: Locates and loads a library.
docstring_tokens: Locates and loads a library .
function: def load_locate_library(candidates, cygwin_lib, name,
                          win_cls=None, cygwin_cls=None, others_cls=None,
                          find_library=None, check_symbols=None):
      """Locates and loads a library.
  
      Returns: the loaded library
  
      arguments:
      * candidates    -- candidates list for locate_library()
      * cygwin_lib    -- name of the cygwin library
      * name          -- lib identifier (for logging). Defaults to None.
      * win_cls       -- class that is used to instantiate the library on
                         win32 platforms. Defaults to None (-> ctypes.CDLL).
      * cygwin_cls    -- library class for cygwin platforms.
                         Defaults to None (-> ctypes.CDLL).
      * others_cls    -- library class for all other platforms.
                         Defaults to None (-> ctypes.CDLL).
      * find_library  -- see locate_library(). Defaults to None.
      * check_symbols -- either None or a list of symbols that the loaded lib
                         must provide (hasattr(<>)) in order to be considered
                         valid. LibraryMissingSymbolsException is raised if
                         any symbol is missing.
  
      raises:
      * NoLibraryCandidatesException
      * LibraryNotFoundException
      * LibraryNotLoadedException
      * LibraryMissingSymbolsException
      """
      if sys.platform == 'cygwin':
          if cygwin_lib:
              loaded_lib = load_library(cygwin_lib, name, cygwin_cls)
          else:
              raise NoLibraryCandidatesException(name)
      elif candidates:
          lib = locate_library(candidates, find_library)
          if lib:
              if sys.platform == 'win32':
                  loaded_lib = load_library(lib, name, win_cls)
              else:
                  loaded_lib = load_library(lib, name, others_cls)
          else:
              _LOGGER.error('%r could not be found', (name or candidates))
              raise LibraryNotFoundException(name)
      else:
          raise NoLibraryCandidatesException(name)
  
      if loaded_lib is None:
          raise LibraryNotLoadedException(name)
      elif check_symbols:
          symbols_missing = [
                      s for s in check_symbols if not hasattr(loaded_lib, s)
          ]
          if symbols_missing:
              msg = ('%r, missing symbols: %r', lib, symbols_missing )
              _LOGGER.error(msg)
              raise LibraryMissingSymbolsException(lib)
          else:
              return loaded_lib
      else:
          return loaded_lib
function_tokens: def load_locate_library ( candidates , cygwin_lib , name , win_cls = None , cygwin_cls = None , others_cls = None , find_library = None , check_symbols = None ) : if sys . platform == 'cygwin' : if cygwin_lib : loaded_lib = load_library ( cygwin_lib , name , cygwin_cls ) else : raise NoLibraryCandidatesException ( name ) elif candidates : lib = locate_library ( candidates , find_library ) if lib : if sys . platform == 'win32' : loaded_lib = load_library ( lib , name , win_cls ) else : loaded_lib = load_library ( lib , name , others_cls ) else : _LOGGER . error ( '%r could not be found' , ( name or candidates ) ) raise LibraryNotFoundException ( name ) else : raise NoLibraryCandidatesException ( name ) if loaded_lib is None : raise LibraryNotLoadedException ( name ) elif check_symbols : symbols_missing = [ s for s in check_symbols if not hasattr ( loaded_lib , s ) ] if symbols_missing : msg = ( '%r, missing symbols: %r' , lib , symbols_missing ) _LOGGER . error ( msg ) raise LibraryMissingSymbolsException ( lib ) else : return loaded_lib else : return loaded_lib