def update_keyword(self, input_socket):
        """Store the new name of the keyword.

        Note that the name of the parameter isn't needed,
        since a function can only have one single
        keyword-variable parameter anyway.

        Parameters
        ==========

        input_socket (input socket object)
            input socket representing subparameter to which
            the keyword is associated.
        """
        ### retrieve the index of the subparameter from the
        ### input socket
        subparam_index = input_socket.subparameter_index

        ### retrieve the respective keyword entry and
        ### its value using the subparameter index (instead
        ### of just storing the value, we also store a
        ### reference to the entry widget, because we might
        ### use it further ahead); the value in question is
        ### the new keyword name to be set

        keyword_entry = self.subparam_keyword_entry_live_map[subparam_index]

        new_keyword = keyword_entry.get()

        ### retrieve subparam_keyword_map
        subparam_keyword_map = self.data["subparam_keyword_map"]

        ### set an appropriate error message according to
        ### whether the new keyword name is available or not
        ### (the "if" and "elif" blocks below represent
        ### actual forbidden situations which cause
        ### SyntaxError when they happen in a function call).
        ###
        ### I'd prefer to handle the SyntaxError during the
        ### actual function call, but we are forced to do
        ### it here because during execution of the node
        ### the inputs for each subparameter are stored in
        ### a map using the keyword names as keys.
        ###
        ### This would make the duplicate keyword override
        ### the original one, causing the value of the
        ### original keyword to be lost and making the
        ### function not complain, which in summary would
        ### be a bug.

        if new_keyword in subparam_keyword_map.values():

            error_msg = (
                "subparameter keyword can't be the same as"
                " other existing subparameter keywords"
            )

        elif (
            new_keyword in self.signature_obj.parameters.keys()
            and new_keyword not in self.var_kind_map.keys()
        ):

            error_msg = (
                "subparameter keyword can't be the same as"
                " the name of a regular parameter"
            )

        else:
            error_msg = ""

        ### if an error message was not set, you can
        ### safely store the new keyword

        if not error_msg:

            subparam_keyword_map[subparam_index] = new_keyword

        ### otherwise, you must revert to the previous
        ### keyword and inform the user with the error
        ### message (which is slightly incremented)

        else:

            ## retrieve old keyword
            previous_keyword = subparam_keyword_map[subparam_index]

            ## set the old value back on the keyword entry
            ## passing False along the value, to prevent
            ## this method to be called again recursively
            keyword_entry.set(previous_keyword, False)

            ## inform user of the situation

            # increment error message

            error_msg += ". The keyword was set back to its previous" " value"

            # display it in a dialog box
            create_and_show_dialog(error_msg, level_name='error')
Store the new name of the keyword.

        Note that the name of the parameter isn't needed,
        since a function can only have one single
        keyword-variable parameter anyway.

        Parameters
        ==========

        input_socket (input socket object)
            input socket representing subparameter to which
            the keyword is associated.
        
nodezator/graphman/callablenode/subparam/main.py