code: def _handle_put(self, request):
          # type: (Put) -> CallbackResponses
          
          attribute_name = request.path[1]
  
          attribute = self._block[attribute_name]
          assert isinstance(attribute, AttributeModel), \
              "Cannot Put to %s which is a %s" % (attribute.path, type(attribute))
          self.check_field_writeable(attribute)
  
          put_function = self.get_put_function(attribute_name)
          value = attribute.meta.validate(request.value)
  
          with self.lock_released:
              result = put_function(value)
  
          if request.get and result is None:
              # We asked for a Get, and didn't get given a return, so do return
              # the current value. Don't serialize here as value is immutable
              # (as long as we don't try too hard to break the rules)
              result = self._block[attribute_name].value
          elif not request.get:
              # We didn't ask for a Get, so throw result away
              result = None
          ret = [request.return_response(result)]
          return ret
docs: Called with the lock taken