def __setitem__(self, key, value): invalid = _validate_setting(key, value) if invalid: raise InvalidSettingsValueError("Setting %d has invalid value %d" % (key, value), error_code=invalid) try: items = self._settings[key] except KeyError: items = collections.deque([None]) self._settings[key] = items items.append(value)
def __init__(self, client=True, initial_values=None): # Backing object for the settings. This is a dictionary of # (setting: [list of values]), where the first value in the list is the # current value of the setting. Strictly this doesn't use lists but # instead uses collections.deque to avoid repeated memory allocations. # # This contains the default values for HTTP/2. self._settings = { HEADER_TABLE_SIZE: collections.deque([4096]), ENABLE_PUSH: collections.deque([int(client)]), INITIAL_WINDOW_SIZE: collections.deque([65535]), MAX_FRAME_SIZE: collections.deque([16384]), } if initial_values is not None: for key, value in initial_values.items(): invalid = _validate_setting(key, value) if invalid: raise InvalidSettingsValueError( "Setting %d has invalid value %d" % (key, value), error_code=invalid) self._settings[key] = collections.deque([value])