docs: def find_link(lid=None, sep_id=None, tep_id=None):
          """
          find link according to link ID.
          :param lid: link id
          :return: the link if found or None if not found
          """
          LOGGER.debug("LinkService.find_link")
          ret = None
          if (lid is None or not lid) and (sep_id is None or not sep_id) and (tep_id is None or not tep_id):
              raise exceptions.ArianeCallParametersError('id, source endpoint ID, target endpoint ID')
  
          if (lid is not None and lid) and ((sep_id is not None and sep_id) or (tep_id is not None and tep_id)):
              LOGGER.warning('LinkService.find_link - Both lid and sep_id and tep_id are defined. '
                             'Will give you search on id.')
              # traceback.print_stack()
              sep_id = None
              tep_id = None
  
          if lid is not None and lid:
              params = SessionService.complete_transactional_req({'ID': lid})
              if MappingService.driver_type != DriverFactory.DRIVER_REST:
                  params['OPERATION'] = 'getLink'
          elif sep_id is not None and sep_id and tep_id is not None and tep_id:
              params = SessionService.complete_transactional_req({'SEPID': sep_id, 'TEPID': tep_id})
              if MappingService.driver_type != DriverFactory.DRIVER_REST:
                  params['OPERATION'] = 'getLinkBySourceEPandDestinationEP'
          elif sep_id is not None and sep_id and (tep_id is None or not tep_id):
              params = SessionService.complete_transactional_req({'SEPID': sep_id})
              if MappingService.driver_type != DriverFactory.DRIVER_REST:
                  params['OPERATION'] = 'getLinksBySourceEP'
          else:
              params = SessionService.complete_transactional_req({'TEPID': tep_id})
              if MappingService.driver_type != DriverFactory.DRIVER_REST:
                  params['OPERATION'] = 'getLinksByDestinationEP'
  
          if MappingService.driver_type != DriverFactory.DRIVER_REST:
              args = {'properties': params}
          else:
              args = {'http_operation': 'GET', 'operation_path': 'get', 'parameters': params}
  
          if MappingService.driver_type != DriverFactory.DRIVER_REST:
              if lid is not None and lid:
                  response = LinkService.requester.call(args)
              else:
                  response = MappingService.requester.call(args)
          else:
              response = LinkService.requester.call(args)
  
          if MappingService.driver_type != DriverFactory.DRIVER_REST:
              response = response.get()
  
          if response.rc == 0:
              if (lid is not None and lid) or (sep_id is not None and sep_id and tep_id is not None and tep_id):
                  ret = Link.json_2_link(response.response_content)
              else:
                  ret = []
                  for link in response.response_content['links']:
                      ret.append(Link.json_2_link(link))
          elif response.rc != 404:
              err_msg = 'LinkService.find_link - Problem while searching link (id:' + str(lid) + '). ' + \
                        'Reason: ' + str(response.response_content) + ' - ' + str(response.error_message) + \
                        " (" + str(response.rc) + ")"
              if response.rc == 500 and ArianeMappingOverloadError.ERROR_MSG in response.error_message:
                  raise ArianeMappingOverloadError("LinkService.find_link",
                                                   ArianeMappingOverloadError.ERROR_MSG)
              LOGGER.warning(err_msg)
              # traceback.print_stack()
          return ret