code: def save(self):
          
  
          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
docs: 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.