class_docstr: Nested dict-like object that proxies read and write operations through a root object.
  
  This lets us do synchronous serialization and lazy loading of large values.
class_docstr_tok: ["Nested","dict-like","object","that","proxies","read","and","write","operations","through","a","root","object",".","This","lets","us","do","synchronous","serialization","and","lazy","loading","of","large","values","."]
code: def _update(self, key_vals, overwrite):
      if not key_vals:
          return
      key_vals = {k.strip(): v for k, v in key_vals.items()}
      if overwrite:
          write_items = list(key_vals.items())
          self._locked_keys.update(key_vals.keys())
      else:
          write_keys = set(key_vals.keys()) - self._locked_keys
          write_items = [(k, key_vals[k]) for k in write_keys]
  
      for key, value in write_items:
          if isinstance(value, dict):
              self._dict[key] = SummarySubDict(
                  self._root, self._path + (key,)
              )
              self._dict[key]._update(value, overwrite)
          else:
              self._dict[key] = value
  
      return write_items
  
imports: import json
  import os
  import time
  from wandb_gql import gql
  import wandb
  from wandb import util
  from wandb.apis.internal import Api
  from wandb.sdk import lib
  from wandb.sdk.data_types.utils import val_to_json
label_desc: Use image node_id 17 for calling the SummarySubDict obj's underlying member method code with example usage: obj._update(key_vals, overwrite) and returns: write_items