'Generic import function for any type of header-like object.
Adapted version of MutableMapping.update in order to insert items
with self.add instead of self.__setitem__'

def extend(self, *args, **kwargs):

    if (len(args) > 1):
        raise TypeError('extend()    takes    at    most    1    positional    arguments    ({}    given)'.format(len(args)))
    other = (args[0] if (len(args) >= 1) else ())
    if isinstance(other, HTTPHeaderDict):
        for (key, val) in other.iteritems():
            self.add(key, val)
    elif isinstance(other, Mapping):
        for key in other:
            self.add(key, other[key])
    elif hasattr(other, 'keys'):
        for key in other.keys():
            self.add(key, other[key])
    else:
        for (key, value) in other:
            self.add(key, value)
    for (key, value) in kwargs.items():
        self.add(key, value)
