docs: def resolve_path( self, path,
  			root_id='0', objects=False ):
  		'''Return id (or metadata) of an object, specified by chain
  				(iterable or fs-style path string) of "name" attributes of it's ancestors,
  				or raises DoesNotExists error.
  			Requires a lot of calls to resolve each name in path, so use with care.
  			root_id parameter allows to specify path
  				 relative to some folder_id (default: 0).'''
  		if path:
  			if isinstance(path, types.StringTypes):
  				path = filter(None, path.split(os.sep))
  			if path:
  				try:
  					for i, name in enumerate(path):
  						root_id = dict(it.imap(
  							op.itemgetter('name', 'id'), (yield self.listdir(root_id)) ))[name]
  				except (KeyError, ProtocolError) as err:
  					if isinstance(err, ProtocolError) and err.code != 404: raise
  					raise DoesNotExists(root_id, path[i:])
  		defer.returnValue(root_id if not objects else (yield self.info(root_id)))