docs: async def losetup(self, image, read_only=True, offset=None, size=None,
                        no_part_scan=None):
          """
          Setup a loop device.
  
          :param str image: path of the image file
          :param bool read_only:
          :param int offset:
          :param int size:
          :param bool no_part_scan:
          :returns: the device object for the loop device
          """
          try:
              device = self.udisks.find(image)
          except FileNotFoundError:
              pass
          else:
              self._log.info(_('not setting up {0}: already up', device))
              return device
          if not os.path.isfile(image):
              self._log.error(_('not setting up {0}: not a file', image))
              return None
          self._log.debug(_('setting up {0}', image))
          fd = os.open(image, os.O_RDONLY)
          device = await self.udisks.loop_setup(fd, {
              'offset': offset,
              'size': size,
              'read-only': read_only,
              'no-part-scan': no_part_scan,
          })
          self._log.info(_('set up {0} as {1}', image,
                           device.device_presentation))
          return device