code: def update_or_create(cls, external_gateway, name, site_element=None,
              with_status=False):
          
          site_element = [] if not site_element else site_element
          site_elements = [element_resolver(element) for element in site_element]
          vpn_site = external_gateway.vpn_site.get_exact(name)
          updated = False
          created = False
          if vpn_site: # If difference, reset
              if set(site_elements) != set(vpn_site.data.get('site_element', [])):
                  vpn_site.data['site_element'] = site_elements
                  vpn_site.update()
                  updated = True
              
          else:
              vpn_site = external_gateway.vpn_site.create(
                  name=name, site_element=site_elements)
              created = True
          
          if with_status:
              return vpn_site, updated, created
          return vpn_site
docs: Update or create a VPN Site elements or modify an existing VPN
          site based on value of provided site_element list. The resultant
          VPN site end result will be what is provided in the site_element
          argument (can also be an empty list to clear existing).
          
          :param ExternalGateway external_gateway: The external gateway for
              this VPN site
          :param str name: name of the VPN site
          :param list(str,Element) site_element: list of resolved Elements to
              add to the VPN site
          :param bool with_status: If set to True, returns a 3-tuple of
              (VPNSite, modified, created), where modified and created
              is the boolean status for operations performed.
          :raises ElementNotFound: ExternalGateway or unresolved site_element