def save(self):
        """ Save changes made to pool to NIPAP.

            If the object represents a new pool unknown to NIPAP (attribute
            `id` is `None`) this function maps to the function
            :py:func:`nipap.backend.Nipap.add_pool` in the backend, used to
            create a new pool. Otherwise it maps to the function
            :py:func:`nipap.backend.Nipap.edit_pool` in the backend, used to
            modify the pool. Please see the documentation for the backend
            functions for information regarding input arguments and return
            values.
        """

        xmlrpc = XMLRPCConnection()
        data = {
            'name': self.name,
            'description': self.description,
            'default_type': self.default_type,
            'ipv4_default_prefix_length': self.ipv4_default_prefix_length,
            'ipv6_default_prefix_length': self.ipv6_default_prefix_length,
            'tags': [],
            'avps': self.avps
        }
        for tag_name in self.tags:
            data['tags'].append(tag_name)

        if self.id is None:
            # New object, create
            try:
                pool = xmlrpc.connection.add_pool(
                    {
                        'attr': data,
                        'auth': self._auth_opts.options
                    })
            except xmlrpclib.Fault as xml_fault:
                raise _fault_to_exception(xml_fault)

        else:
            # Old object, edit
            try:
                pools = xmlrpc.connection.edit_pool(
                    {
                        'pool': { 'id': self.id },
                        'attr': data,
                        'auth': self._auth_opts.options
                    })
            except xmlrpclib.Fault as xml_fault:
                raise _fault_to_exception(xml_fault)

            if len(pools) != 1:
                raise NipapError('Pool edit returned %d entries, should be 1.' % len(pools))
            pool = pools[0]

        # Refresh object data with attributes from add/edit operation
        Pool.from_dict(pool, self)

        _cache['Pool'][self.id] = self
Save changes made to pool to NIPAP.

            If the object represents a new pool unknown to NIPAP (attribute
            `id` is `None`) this function maps to the function
            :py:func:`nipap.backend.Nipap.add_pool` in the backend, used to
            create a new pool. Otherwise it maps to the function
            :py:func:`nipap.backend.Nipap.edit_pool` in the backend, used to
            modify the pool. Please see the documentation for the backend
            functions for information regarding input arguments and return
            values.