def save(self, *objects, **kwargs):
from rom import Model<EOL>full = kwargs.get('<STR_LIT>')<EOL>all = kwargs.get('<STR_LIT:all>')<EOL>force = kwargs.get('<STR_LIT>')<EOL>changes = <NUM_LIT:0><EOL>items = deque()<EOL>items.extend(objects)<EOL>while items:<EOL><INDENT>o = items.popleft()<EOL>if isinstance(o, (list, tuple)):<EOL><INDENT>items.extendleft(reversed(o))<EOL><DEDENT>elif isinstance(o, Model):<EOL><INDENT>if not o._deleted and (all or o._modified):<EOL><INDENT>changes += o.save(full, force)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>raise ORMError(<EOL>"<STR_LIT>"%(<EOL>o,))<EOL><DEDENT><DEDENT>return changes<EOL>
This method is an alternate API for saving many entities (possibly not
tracked by the session). You can call::

    session.save(obj)
    session.save(obj1, obj2, ...)
    session.save([obj1, obj2, ...])

And the entities will be flushed to Redis.

You can pass the keyword arguments ``full``, ``all``, and ``force`` with
the same meaning and semantics as the ``.commit()`` method.