parameters: (self, alogger)
docstring: Ensure that there are either loggers or placeholders all the way
          from the specified logger to the root of the logger hierarchy.
docstring_summary: Ensure that there are either loggers or placeholders all the way
          from the specified logger to the root of the logger hierarchy.
docstring_tokens: Ensure that there are either loggers or placeholders all the way from the specified logger to the root of the logger hierarchy .
function: def _fixupParents(self, alogger):
          """
          Ensure that there are either loggers or placeholders all the way
          from the specified logger to the root of the logger hierarchy.
          """
          name = alogger.name
          i = name.rfind(".")
          rv = None
          while (i > 0) and not rv:
              substr = name[:i]
              if substr not in self.loggerDict:
                  self.loggerDict[substr] = PlaceHolder(alogger)
              else:
                  obj = self.loggerDict[substr]
                  if isinstance(obj, Logger):
                      rv = obj
                  else:
                      assert isinstance(obj, PlaceHolder)
                      obj.append(alogger)
              i = name.rfind(".", 0, i - 1)
          if not rv:
              rv = self.root
          alogger.parent = rv
function_tokens: def _fixupParents ( self , alogger ) : name = alogger . name i = name . rfind ( "." ) rv = None while ( i > 0 ) and not rv : substr = name [ : i ] if substr not in self . loggerDict : self . loggerDict [ substr ] = PlaceHolder ( alogger ) else : obj = self . loggerDict [ substr ] if isinstance ( obj , Logger ) : rv = obj else : assert isinstance ( obj , PlaceHolder ) obj . append ( alogger ) i = name . rfind ( "." , 0 , i - 1 ) if not rv : rv = self . root alogger . parent = rv