docs: def match_app_version(self, app=None, label=None, version=None, default=False):
          """Match app version against a semantic version string.
  
          Checks if a KE-chain app matches a version comparison. Uses the `semver` matcher to check.
  
          `match("2.0.0", ">=1.0.0")` => `True`
          `match("1.0.0", ">1.0.0")` => `False`
  
          Examples
          --------
          >>> client.match_app_version(label='wim', version=">=1.99")
          >>> True
  
          >>> client.match_app_version(app='kechain2.core.pim', version=">=1.0.0")
          >>> True
  
          :param app: (optional) appname eg. 'kechain.core.wim'
          :type app: basestring or None
          :param label: (optional) app label (last part of the app name) eb 'wim'
          :type label: basestring or None
          :param version: semantic version string to match appname version against eg '2.0.0' or '>=2.0.0'
          :type version: basestring
          :param default: (optional) boolean to return if the version of the app is not set but the app found.
                          Set to None to return a NotFoundError when a version if not found in the app.
          :type default: bool or None
          :return: True if the version of the app matches against the match_version, otherwise False
          :raises IllegalArgumentError: if no app nor a label is provided
          :raises NotFoundError: if the app is not found
          :raises ValueError: if the version provided is not parseable by semver,
                              should contain (<operand><major>.<minor>.<patch) where <operand> is '>,<,>=,<=,=='
  
          """
          if not app or not label and not (app and label):
              target_app = [a for a in self.app_versions if a.get('app') == app or a.get('label') == label]
              if not target_app and not isinstance(default, bool):
                  raise NotFoundError("Could not find the app or label provided")
              elif not target_app and isinstance(default, bool):
                  return default
          else:
              raise IllegalArgumentError("Please provide either app or label")
  
          if not version:
              raise IllegalArgumentError("Please provide semantic version string including operand eg: `>=1.0.0`")
  
          app_version = target_app[0].get('version')
  
          if target_app and app_version and version:
              import semver
              return semver.match(app_version, version)
          elif not app_version:
              if isinstance(default, bool):
                  return default
              else:
                  raise NotFoundError("No version found on the app '{}'".format(target_app[0].get('app')))