def _to_patchrequest()

in libcloud/dns/drivers/rcodezero.py [0:0]


    def _to_patchrequest(self, zone, record, name, type, data, extra, action):
        rrset = {}

        cur_records = self.list_records(
            Zone(id=zone, domain=None, type=None, ttl=None, driver=self)
        )

        if name != "":
            rrset["name"] = name + "." + zone + "."
        else:
            rrset["name"] = zone + "."

        rrset["type"] = type
        rrset["changetype"] = action
        rrset["records"] = []

        if not (extra is None or extra.get("ttl", None) is None):
            rrset["ttl"] = extra["ttl"]

        content = {}

        if not action == "delete":
            content["content"] = data

            if not (extra is None or extra.get("disabled", None) is None):
                content["disabled"] = extra["disabled"]
            rrset["records"].append(content)
        id = hashlib.md5(str(name + " " + data).encode("utf-8")).hexdigest()  # nosec
        # check if rrset contains more than one record. if yes we need to create an
        # update request

        for r in cur_records:
            if action == "update" and r.id == record.id:
                # do not include records which should be updated in the update
                # request

                continue

            if name == r.name and r.id != id:
                # we have other records with the same name so make an update
                # request
                rrset["changetype"] = "update"
                content = {}
                content["content"] = r.data

                if not (r.extra is None or r.extra.get("disabled", None) is None):
                    content["disabled"] = r.extra["disabled"]
                rrset["records"].append(content)
        request = list()
        request.append(rrset)

        return request