docs: def requires(self, *names):
          """ Declare what block will be used in this engine.
  
          It should be call before adding or setting any component.
          Blocks order will be preserved for runnning task.
          """
          if len(names) == 0:
              raise ValueError("You should give at least one block name")
      
          if self._blocks is not None and len(self._blocks) > 0:
              raise ReliureError("Method 'requires' should be called only once before adding any composant")
          for name in names:
              if name in self._blocks:
                  raise ValueError("Duplicate block name %s" % name)
              self._blocks[name] = Block(name)
          self._logger.info(" ** requires ** %s", names)