'Create an instance of this command with specified values for its
parameters.
In Python 3, keyword arguments MUST be Unicode/native strings whereas
in Python 2 they could be either byte strings or Unicode strings.
A L{Command}\'s arguments are defined in its schema using C{bytes}
names. The values for those arguments are plucked from the keyword
arguments using the name returned from L{_wireNameToPythonIdentifier}.
In other words, keyword arguments should be named using the
Python-side equivalent of the on-wire (C{bytes}) name.
@param kw: a dict containing an appropriate value for each name
specified in the L{arguments} attribute of my class.
@raise InvalidSignature: if you forgot any required arguments.'

def __init__(self, **kw):

    self.structured = kw
    forgotten = []
    for (name, arg) in self.arguments:
        pythonName = _wireNameToPythonIdentifier(name)
        if ((pythonName not in self.structured) and (not arg.optional)):
            forgotten.append(pythonName)
    if forgotten:
        raise InvalidSignature(('forgot    %s    for    %s' % (',    '.join(forgotten), self.commandName)))
    forgotten = []
