<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _create_or_update_partition(self, org_name, part_name, desc, dci_id=UNKNOWN_DCI_ID, vrf_prof=None, service_node_ip=UNKNOWN_SRVN_NODE_IP, operation='POST'):
 """Send create or update partition request to the DCNM. :param org_name: name of organization :param part_name: name of partition :param desc: description of partition :dci_id: DCI ID for inter-DC :vrf_prof: VRF Profile Name :service_node_ip: Service Node's Address """

        if part_name is None:
            part_name = self._part_name
        if vrf_prof is None or dci_id == UNKNOWN_DCI_ID or (
           service_node_ip == UNKNOWN_SRVN_NODE_IP):
            part_info = self._get_partition(org_name, part_name)
        if vrf_prof is None:
            vrf_prof = self.get_partition_vrfProf(org_name, part_name,
                                                  part_info=part_info)
        if dci_id == UNKNOWN_DCI_ID:
            dci_id = self.get_partition_dciId(org_name, part_name,
                                              part_info=part_info)
        if service_node_ip == UNKNOWN_SRVN_NODE_IP:
            service_node_ip = self.get_partition_serviceNodeIp(
                org_name, part_name, part_info=part_info)
        url = ((self._create_part_url % (org_name)) if operation == 'POST' else
               self._update_part_url % (org_name, part_name))

        payload = {
            "partitionName": part_name,
            "description": part_name if len(desc) == 0 else desc,
            "serviceNodeIpAddress": service_node_ip,
            "organizationName": org_name}

        # Check the DCNM version and find out whether it is need to have
        # extra payload for the new version when creating/updating a partition.
        if self._is_iplus:
            # Need to add extra payload for the new version.
            enable_dci = "true" if dci_id and int(dci_id) != 0 else "false"
            extra_payload = {
                "vrfProfileName": vrf_prof,
                "vrfName": ':'.join((org_name, part_name)),
                "dciId": dci_id,
                "enableDCIExtension": enable_dci}
            payload.update(extra_payload)

        return self._send_request(operation, url, payload, 'partition')