MIB compiler
************

class pysmi.compiler.MibCompiler(parser, codegen, writer)

   Top-level, user-facing, composite MIB compiler object.

   MibCompiler implements high-level MIB transformation processing
   logic. It executes its actions by calling the following specialized
   objects:

      * *readers* - to acquire ASN.1 MIB data

      * *searchers* - to see if transformed MIB already exists and no
        processing is necessary

      * *parser* - to parse ASN.1 MIB into AST

      * *code generator* - to perform actual MIB transformation

      * *borrowers* - to fetch pre-transformed MIB if transformation
        is impossible

      * *writer* - to store transformed MIB data

   Required components must be passed to MibCompiler on instantiation.
   Those components are: *parser*, *codegenerator* and *writer*.

   Optional components could be set or modified at later phases of
   MibCompiler life. Unlike singular, required components, optional
   one can be present in sequences to address many possible sources of
   data. They are *readers*, *searchers* and *borrowers*.

   Creates an instance of *MibCompiler* class.

   Parameters:
      * **parser** -- ASN.1 MIB parser object

      * **codegen** -- MIB transformation object

      * **writer** -- transformed MIB storing object

   addBorrowers(*borrowers)

      Add more transformed MIBs repositories to borrow MIBs from.

      Whenever MibCompiler.compile encounters MIB module which neither
      of the *searchers* can find or fetched ASN.1 MIB module can not
      be parsed (due to syntax errors), these *borrowers* objects will
      be invoked in order of their addition asking each if already
      transformed MIB can be fetched (borrowed).

      Parameters:
         **borrowers** -- borrower object(s)

      Returns:
         reference to itself (can be used for call chaining)

   addSearchers(*searchers)

      Add more transformed MIBs repositories.

      MibCompiler.compile will invoke each of configured searcher
      objects in order of their addition asking each if already
      transformed MIB module already exists and is more recent than
      specified.

      Parameters:
         **searchers** -- searcher object(s)

      Returns:
         reference to itself (can be used for call chaining)

   addSources(*sources)

      Add more ASN.1 MIB source repositories.

      MibCompiler.compile will invoke each of configured source
      objects in order of their addition asking each to fetch MIB
      module specified by name.

      Parameters:
         **sources** -- reader object(s)

      Returns:
         reference to itself (can be used for call chaining)

   compile(*mibnames, **options)

      Transform requested and possibly referred MIBs.

      The *compile* method should be invoked when *MibCompiler* object
      is operational meaning at least *sources* are specified.

      Once called with a MIB module name, *compile* will:

      * fetch ASN.1 MIB module with given name by calling *sources*

      * make sure no such transformed MIB already exists (with
        *searchers*)

      * parse ASN.1 MIB text with *parser*

      * perform actual MIB transformation into target format with
        *code generator*

      * may attempt to borrow pre-transformed MIB through *borrowers*

      * write transformed MIB through *writer*

      The above sequence will be performed for each MIB name given in
      *mibnames* and may be performed for all MIBs referred to from
      MIBs being processed.

      Parameters:
         * **mibnames** -- list of ASN.1 MIBs names

         * **options** -- options that affect the way PySMI components
           work

      Returns:
         A dictionary of MIB module names processed (keys) and
         *MibStatus* class instances (values)
