docs: def _todo_do_update(self, line):
          "update [:tablename] {hashkey[,rangekey]} [!fieldname:expectedvalue] [-add|-delete] [+ALL_OLD|ALL_NEW|UPDATED_OLD|UPDATED_NEW] {attributes}"
          table, line = self.get_table_params(line)
          hkey, line = line.split(" ", 1)
          expected, attr = self.get_expected(line)
  
          if attr[0] == '-':
              op, attr = attr.split(" ", 1)
              op = op[1]
          else:
              op = "u"
  
          if attr[0] == '+':
              ret, attr = attr.split(" ", 1)
              ret = ret[1:]
          else:
              ret = "ALL_NEW"
  
          if ',' in hkey:
              hkey, rkey = hkey.split(",", 1)
          else:
              rkey = None
  
          item = table.new_item(hash_key=self.get_typed_key_value(table, hkey), range_key=self.get_typed_key_value(table, rkey, False))
  
          attr = json.loads(attr.strip())
          for name in attr.keys():
              value = attr[name]
              if isinstance(value, list):
                  value = set(value)
  
              if op == 'a':
                  item.add_attribute(name, value)
              elif op == 'd':
                  item.delete_attribute(name, value)
              else:
                  item.put_attribute(name, value)
  
          self.pprint(item)
          updated = item.save(expected_value=expected or None, return_values=ret)
          self.pprint(updated)
  
          if self.consumed:
              print "consumed units:", item.consumed_units