code: def add(self, *args, **kwargs):
      assert self.resp is None, "Transaction already committed"
      entity, av_pairs, args = None, [], list(args)
      if len(args):
        if isinstance(args[0], (int, long)): 
          " first arg is an entity or tempid"
          entity = E(args[0], tx=self)
        elif isinstance(args[0], E):
          " dont resuse entity from another tx"
          if args[0]._tx is self:
            entity  = args[0]
          else:
            if int(args[0]) > 0:
              " use the entity id on a new obj"
              entity = E(int(args[0]), tx=self)
            args[0] = None
        " drop the first arg"
        if entity is not None or args[0] in (None, False, 0):
          v = args.pop(0)
      " auto generate a temp id?"
      if entity is None:
        entity       = E(self.ctmpid, tx=self)
        self.ctmpid -= 1
      " a,v from kwargs"
      if len(args) == 0 and kwargs: 
        for a,v in kwargs.iteritems():
          self.addeav(entity, a, v)
      " a,v from args "
      if len(args):
        assert len(args) % 2 == 0, "imbalanced a,v in args: " % args
        for first, second in pairwise(args):
          if not first.startswith(':'): 
            first = ':' + first
          if not first.endswith('/'):
            " longhand used: blah/blah "
            if isinstance(second, list):
              for v in second:
                self.addeav(entity, first, v)
            else:
              self.addeav(entity, first, second)
            continue
          elif isinstance(second, dict):
            " shorthand used: blah/, dict "
            for a,v in second.iteritems():
              self.addeav(entity, "%s%s" % (first, a), v)
              continue
          elif isinstance(second, (list, tuple)):
            " shorthand used: blah/, list|tuple "
            for a,v in pairwise(second):
              self.addeav(entity, "%s%s" % (first, a), v)
              continue
          else:
            raise Exception, "invalid pair: %s : %s" % (first,second)
      "pass back the entity so it can be resolved after tx()"
      return entity